@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
package/lib/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- var Lc=Object.defineProperty,Oc=Object.defineProperties;var Nc=Object.getOwnPropertyDescriptors;var Yo=Object.getOwnPropertySymbols;var Qs=Object.prototype.hasOwnProperty,Ys=Object.prototype.propertyIsEnumerable;var zs=(o,e,t)=>e in o?Lc(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,C=(o,e)=>{for(var t in e||(e={}))Qs.call(e,t)&&zs(o,t,e[t]);if(Yo)for(var t of Yo(e))Ys.call(e,t)&&zs(o,t,e[t]);return o},F=(o,e)=>Oc(o,Nc(e));var Ce=(o,e)=>{var t={};for(var n in o)Qs.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&Yo)for(var n of Yo(o))e.indexOf(n)<0&&Ys.call(o,n)&&(t[n]=o[n]);return t};import Fa from"axios";import{get as ei,set as js}from"lodash";var Mc=(r=>(r[r.Error=0]="Error",r[r.Warning=1]="Warning",r[r.Info=2]="Info",r[r.Debug=3]="Debug",r))(Mc||{}),ti=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}},ni={},Hs={};function ce(o){let e=ei(ni,o);if(!e){let t=ei(Hs,o);e=new ti({name:o,logLevel:t}),js(ni,o,e)}return e}function kf(o,e){js(Hs,o,e);let t=ei(ni,o);t&&(t.level=e)}import{PublicKey as Ql}from"@solana/web3.js";import Yl from"bn.js";import Xl from"big.js";import en from"bn.js";import Te from"bn.js";var Nn=9e15,$t=1e9,oi="0123456789abcdef",Ho="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Zo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ri={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Nn,maxE:Nn,crypto:!1},ea,Et,oe=!0,$o="[DecimalError] ",Jt=$o+"Invalid argument: ",ta=$o+"Precision limit exceeded",na=$o+"crypto unavailable",oa="[object Decimal]",He=Math.floor,_e=Math.pow,_c=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,vc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Vc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ra=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,kt=1e7,$=7,Fc=9007199254740991,Ec=Ho.length-1,ii=Zo.length-1,_={toStringTag:oa};_.absoluteValue=_.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),H(o)};_.ceil=function(){return H(new this.constructor(this),this.e+1,2)};_.clampedTo=_.clamp=function(o,e){var t,n=this,r=n.constructor;if(o=new r(o),e=new r(e),!o.s||!e.s)return new r(NaN);if(o.gt(e))throw Error(Jt+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new r(n)};_.comparedTo=_.cmp=function(o){var e,t,n,r,i=this,s=i.d,a=(o=new i.constructor(o)).d,c=i.s,u=o.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!==o.e)return i.e>o.e^c<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===r?0:n>r^c<0?1:-1};_.cosine=_.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+$,n.rounding=1,t=Dc(n,ca(n,t)),n.precision=o,n.rounding=e,H(Et==2||Et==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};_.cubeRoot=_.cbrt=function(){var o,e,t,n,r,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*_e(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=ze(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=_e(t,1/3),o=He((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=he(u.plus(l).times(a),u.plus(c),s+2,1),ze(a.d).slice(0,s)===(t=ze(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(H(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(H(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,H(n,o,m.rounding,e)};_.decimalPlaces=_.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-He(this.e/$))*$,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};_.dividedBy=_.div=function(o){return he(this,new this.constructor(o))};_.dividedToIntegerBy=_.divToInt=function(o){var e=this,t=e.constructor;return H(he(e,new t(o),0,1,1),t.precision,t.rounding)};_.equals=_.eq=function(o){return this.cmp(o)===0};_.floor=function(){return H(new this.constructor(this),this.e+1,3)};_.greaterThan=_.gt=function(o){return this.cmp(o)>0};_.greaterThanOrEqualTo=_.gte=function(o){var e=this.cmp(o);return e==1||e===0};_.hyperbolicCosine=_.cosh=function(){var o,e,t,n,r,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,r=i.d.length,r<32?(o=Math.ceil(r/3),e=(1/tr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=Mn(s,1,i.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return H(i,s.precision=t,s.rounding=n,!0)};_.hyperbolicSine=_.sinh=function(){var o,e,t,n,r=this,i=r.constructor;if(!r.isFinite()||r.isZero())return new i(r);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(r.e,r.sd())+4,i.rounding=1,n=r.d.length,n<3)r=Mn(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/tr(5,o)),r=Mn(i,2,r,r,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,H(r,e,t,!0)};_.hyperbolicTangent=_.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,he(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};_.inverseCosine=_.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?ht(t,r,i):new t(0):new t(NaN):e.isZero()?ht(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=ht(t,r+4,i).times(.5),t.precision=r,t.rounding=i,o.minus(e))};_.inverseHyperbolicCosine=_.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};_.inverseHyperbolicSine=_.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln())};_.inverseHyperbolicTangent=_.atanh=function(){var o,e,t,n,r=this,i=r.constructor;return r.isFinite()?r.e>=0?new i(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(o=i.precision,e=i.rounding,n=r.sd(),Math.max(n,o)<2*-r.e-1?H(new i(r),o,e,!0):(i.precision=t=n-r.e,r=he(r.plus(1),new i(1).minus(r),t+o,1),i.precision=o+4,i.rounding=1,r=r.ln(),i.precision=o,i.rounding=e,r.times(.5))):new i(NaN)};_.inverseSine=_.asin=function(){var o,e,t,n,r=this,i=r.constructor;return r.isZero()?new i(r):(e=r.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(o=ht(i,t+4,n).times(.5),o.s=r.s,o):new i(NaN):(i.precision=t+6,i.rounding=1,r=r.div(new i(1).minus(r.times(r)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,r.times(2)))};_.inverseTangent=_.atan=function(){var o,e,t,n,r,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<=ii)return s=ht(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=ii)return s=ht(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),o=t;o;--o)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),r=u;o!==-1;)if(r=r.times(c),i=s.minus(r.div(n+=2)),r=r.times(c),s=i.plus(r.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===i.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),oe=!0,H(s,l.precision=m,l.rounding=d,!0)};_.isFinite=function(){return!!this.d};_.isInteger=_.isInt=function(){return!!this.d&&He(this.e/$)>this.d.length-2};_.isNaN=function(){return!this.s};_.isNegative=_.isNeg=function(){return this.s<0};_.isPositive=_.isPos=function(){return this.s>0};_.isZero=function(){return!!this.d&&this.d[0]===0};_.lessThan=_.lt=function(o){return this.cmp(o)<0};_.lessThanOrEqualTo=_.lte=function(o){return this.cmp(o)<1};_.logarithm=_.log=function(o){var e,t,n,r,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=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(r=t[0];r%10===0;)r/=10;i=r!==1}if(oe=!1,a=m+p,s=Zt(u,a),n=e?Jo(l,a+10):Zt(o,a),c=he(s,n,a,1),Jn(c.d,r=m,d))do if(a+=10,s=Zt(u,a),n=e?Jo(l,a+10):Zt(o,a),c=he(s,n,a,1),!i){+ze(c.d).slice(r+1,r+15)+1==1e14&&(c=H(c,m+1,0));break}while(Jn(c.d,r+=10,d));return oe=!0,H(c,m,d)};_.minus=_.sub=function(o){var e,t,n,r,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(u=p.d,d=o.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return oe?H(o,a,c):o}if(t=He(o.e/$),l=He(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,o.s=-o.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(r=n;r&&u[--r]===0;)u[r]=kt-1;--u[r],u[n]+=kt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=er(u,t),oe?H(o,a,c):o):new y(c===3?-0:0)};_.modulo=_.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?H(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=he(t,o.abs(),0,3,1),e.s*=o.s):e=he(t,o,0,n.modulo,1),e=e.times(o),oe=!0,t.minus(e))};_.naturalExponential=_.exp=function(){return si(this)};_.naturalLogarithm=_.ln=function(){return Zt(this)};_.negated=_.neg=function(){var o=new this.constructor(this);return o.s=-o.s,H(o)};_.plus=_.add=function(o){var e,t,n,r,i,s,a,c,u,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(u=m.d,l=o.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(o=new d(m)),oe?H(o,a,c):o;if(i=He(m.e/$),n=He(o.e/$),u=u.slice(),r=i-n,r){for(r<0?(t=u,r=-r,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/$),s=i>s?i+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=u.length,r=l.length,s-r<0&&(r=s,t=l,l=u,u=t),e=0;r;)e=(u[--r]=u[r]+l[r]+e)/kt|0,u[r]%=kt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=er(u,n),oe?H(o,a,c):o};_.precision=_.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Jt+o);return t.d?(e=ia(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};_.round=function(){var o=this,e=o.constructor;return H(new e(o),o.e+1,e.rounding)};_.sine=_.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+$,n.rounding=1,t=qc(n,ca(n,t)),n.precision=o,n.rounding=e,H(Et>2?t.neg():t,o,e,!0)):new n(NaN)};_.squareRoot=_.sqrt=function(){var o,e,t,n,r,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=ze(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=He((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(he(s,i,t+2,1)).times(.5),ze(i.d).slice(0,t)===(e=ze(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(H(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(H(n,c+1,1),o=!n.times(n).eq(s));break}return oe=!0,H(n,c,l.rounding,o)};_.tangent=_.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=he(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,H(Et==2||Et==4?t.neg():t,o,e,!0)):new n(NaN)};_.times=_.mul=function(o){var e,t,n,r,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=He(l.e/$)+He(o.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,r=c+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%kt|0,e=a/kt|0;i[r]=(i[r]+e)%kt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=er(i,t),oe?H(o,m.precision,m.rounding):o};_.toBinary=function(o,e){return ui(this,2,o,e)};_.toDecimalPlaces=_.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(at(o,0,$t),e===void 0?e=n.rounding:at(e,0,8),H(t,o+t.e+1,e))};_.toExponential=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Ct(n,!0):(at(o,0,$t),e===void 0?e=r.rounding:at(e,0,8),n=H(new r(n),o+1,e),t=Ct(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toFixed=function(o,e){var t,n,r=this,i=r.constructor;return o===void 0?t=Ct(r):(at(o,0,$t),e===void 0?e=i.rounding:at(e,0,8),n=H(new i(r),o+r.e+1,e),t=Ct(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};_.toFraction=function(o){var e,t,n,r,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=ia(y)-p.e-1,s=i%$,e.d[0]=_e(10,s<0?$+s:s),o==null)o=i>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(Jt+a);o=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(ze(y)),l=f.precision,f.precision=i=y.length*$*2;m=he(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=u,u=c.plus(m.times(r)),c=r,r=e,e=a.minus(m.times(r)),a=r;return r=he(o.minus(t),n,0,1,1),c=c.plus(r.times(u)),t=t.plus(r.times(n)),c.s=u.s=p.s,d=he(u,n,i,1).minus(p).abs().cmp(he(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};_.toHexadecimal=_.toHex=function(o,e){return ui(this,16,o,e)};_.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:at(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(oe=!1,t=he(t,o,0,e,1).times(o),oe=!0,H(t)):(o.s=t.s,t=o),t};_.toNumber=function(){return+this};_.toOctal=function(o,e){return ui(this,8,o,e)};_.toPower=_.pow=function(o){var e,t,n,r,i,s,a=this,c=a.constructor,u=+(o=new c(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new c(_e(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,o.eq(1))return H(a,n,i);if(e=He(o.e/$),e>=o.d.length-1&&(t=u<0?-u:u)<=Fc)return r=sa(c,a,t,n),o.s<0?new c(1).div(r):H(r,n,i);if(s=a.s,s<0){if(e<o.d.length-1)return new c(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=_e(+a,u),e=t==0||!isFinite(t)?He(u*(Math.log("0."+ze(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),r=si(o.times(Zt(a,n+t)),n),r.d&&(r=H(r,n+5,1),Jn(r.d,n,i)&&(e=n+10,r=H(si(o.times(Zt(a,e+t)),e),e+5,1),+ze(r.d).slice(n+1,n+15)+1==1e14&&(r=H(r,n+1,0)))),r.s=s,oe=!0,c.rounding=i,H(r,n,i))};_.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Ct(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(at(o,1,$t),e===void 0?e=r.rounding:at(e,0,8),n=H(new r(n),o,e),t=Ct(n,o<=n.e||n.e<=r.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toSignificantDigits=_.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(at(o,1,$t),e===void 0?e=n.rounding:at(e,0,8)),H(new n(t),o,e)};_.toString=function(){var o=this,e=o.constructor,t=Ct(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};_.truncated=_.trunc=function(){return H(new this.constructor(this),this.e+1,1)};_.valueOf=_.toJSON=function(){var o=this,e=o.constructor,t=Ct(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function ze(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=$-n.length,t&&(i+=Ht(t)),i+=n;s=o[e],n=s+"",t=$-n.length,t&&(i+=Ht(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function at(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Jt+o)}function Jn(o,e,t,n){var r,i,s,a;for(i=o[0];i>=10;i/=10)--e;return--e<0?(e+=$,r=0):(r=Math.ceil((e+1)/$),e%=$),i=_e(10,$-e),a=o[r]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(o[r+1]/i/100|0)==_e(10,e-2)-1||(a==i/2||a==0)&&(o[r+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(o[r+1]/i/1e3|0)==_e(10,e-3)-1,s}function jo(o,e,t){for(var n,r=[0],i,s=0,a=o.length;s<a;){for(i=r.length;i--;)r[i]*=e;for(r[0]+=oi.indexOf(o.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function Dc(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/tr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=Mn(o,1,e.times(r),new o(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var he=function(){function o(n,r,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*r+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=r[a]){c=n[a]>r[a]?1:-1;break}return c}function t(n,r,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<r[i]?1:0,n[i]=a*s+n[i]-r[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,i,s,a,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==r.s?1:-1,G=n.d,q=r.d;if(!G||!G[0]||!q||!q[0])return new D(!n.s||!r.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-r.e):(c=kt,p=$,l=He(n.e/p)-He(r.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-r.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*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=o(q,d,c),G=o(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=o(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,ea=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,H(g,a?i+g.e+1:i,s,y)}return g}}();function H(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=$,s=e,l=m[d=0],c=l/_e(10,r-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,r=1,i%=$,s=i-$+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=$,s=i-$+r,c=s<0?0:l/_e(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%_e(10,r-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/_e(10,r-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=o.e+1,m[0]=_e(10,($-e%$)%$),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=_e(10,$-i),m[d]=s>0?(l/_e(10,r-s)%_e(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&&(o.e++,m[0]==kt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=kt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Ct(o,e,t){if(!o.isFinite())return ua(o);var n,r=o.e,i=ze(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Ht(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+Ht(-r-1)+i,t&&(n=t-s)>0&&(i+=Ht(n))):r>=s?(i+=Ht(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+Ht(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=Ht(n))),i}function er(o,e){var t=o[0];for(e*=$;t>=10;t/=10)e++;return e}function Jo(o,e,t){if(e>Ec)throw oe=!0,t&&(o.precision=t),Error(ta);return H(new o(Ho),e,1,!0)}function ht(o,e,t){if(e>ii)throw Error(ta);return H(new o(Zo),e,t,!0)}function ia(o){var e=o.length-1,t=e*$+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function Ht(o){for(var e="";o--;)e+="0";return e}function sa(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/$+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Js(i.d,s)&&(r=!0)),t=He(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Js(e.d,s)}return oe=!0,i}function Zs(o){return o.d[o.d.length-1]&1}function aa(o,e,t){for(var n,r=new o(e[0]),i=0;++i<e.length;)if(n=new o(e[i]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function si(o,e){var t,n,r,i,s,a,c,u=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(_e(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=H(i.times(o),c,1),t=t.times(++l),a=s.plus(he(i,t,c,1)),ze(a.d).slice(0,c)===ze(s.d).slice(0,c)){for(r=m;r--;)s=H(s.times(s),c,1);if(e==null)if(u<3&&Jn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return H(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function Zt(o,e){var t,n,r,i,s,a,c,u,l,m,d,p=1,y=10,f=o,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=ze(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=ze(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=Jo(g,l+2,P).times(i+""),f=Zt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=P,e==null?H(f,P,h,oe=!0):f;for(m=f,c=s=f=he(f.minus(1),f.plus(1),l,1),d=H(f.times(f),l,1),r=3;;){if(s=H(s.times(d),l,1),u=c.plus(he(s,new g(r),l,1)),ze(u.d).slice(0,l)===ze(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Jo(g,l+2,P).times(i+""))),c=he(c,new g(p),l,1),e==null)if(Jn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=he(m.minus(1),m.plus(1),l,1),d=H(f.times(f),l,1),r=a=1;else return H(c,g.precision=P,h,oe=!0);else return g.precision=P,c;c=u,r+=2}}function ua(o){return String(o.s*o.s/0)}function ai(o,e){var t,n,r;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%$,t<0&&(n+=$),n<r){for(n&&o.d.push(+e.slice(0,n)),r-=$;n<r;)o.d.push(+e.slice(n,n+=$));e=e.slice(n),n=$-e.length}else n-=r;for(;n--;)e+="0";o.d.push(+e),oe&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function Wc(o,e){var t,n,r,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ra.test(e))return ai(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(vc.test(e))t=16,e=e.toLowerCase();else if(_c.test(e))t=2;else if(Vc.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=o.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,r=sa(n,new n(t),i,i*2)),u=jo(e,t,kt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(o.s*0):(o.e=er(u,l),o.d=u,oe=!1,s&&(o=he(o,r,a*4)),c&&(o=o.times(Math.abs(c)<54?_e(2,c):$n.pow(2,c))),oe=!0,o)}function qc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Mn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/tr(5,t)),e=Mn(o,2,e,e);for(var r,i=new o(5),s=new o(16),a=new o(20);t--;)r=e.times(e),e=e.times(i.plus(r.times(s.times(r).minus(a))));return e}function Mn(o,e,t,n,r){var i,s,a,c,u=1,l=o.precision,m=Math.ceil(l/$);for(oe=!1,c=t.times(t),a=new o(n);;){if(s=he(a.times(c),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=he(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function tr(o,e){for(var t=o;--e;)t*=o;return t}function ca(o,e){var t,n=e.s<0,r=ht(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return Et=n?4:1,e;if(t=e.divToInt(r),t.isZero())Et=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return Et=Zs(t)?n?2:3:n?4:1,e;Et=Zs(t)?n?1:4:n?3:2}return e.minus(r).abs()}function ui(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(at(t,1,$t),n===void 0?n=p.rounding:at(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=ua(o);else{for(l=Ct(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=jo(Ct(d),10,r),d.e=d.d.length),m=jo(l,10,r),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=he(o,d,t,n,0,r),m=o.d,i=o.e,u=ea),s=m[t],a=r/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,u)for(;++m[--t]>r-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+=oi.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=jo(l,r,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=oi.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 o.s<0?"-"+l:l}function Js(o,e){if(o.length>e)return o.length=e,!0}function Uc(o){return new this(o).abs()}function Gc(o){return new this(o).acos()}function Xc(o){return new this(o).acosh()}function zc(o,e){return new this(o).plus(e)}function Qc(o){return new this(o).asin()}function Yc(o){return new this(o).asinh()}function jc(o){return new this(o).atan()}function Hc(o){return new this(o).atanh()}function Zc(o,e){o=new this(o),e=new this(e);var t,n=this.precision,r=this.rounding,i=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=ht(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?ht(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=ht(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(he(o,e,i,1)),e=ht(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(he(o,e,i,1)),t}function Jc(o){return new this(o).cbrt()}function $c(o){return H(o=new this(o),o.e+1,2)}function el(o,e,t){return new this(o).clamp(e,t)}function tl(o){if(!o||typeof o!="object")throw Error($o+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,$t,"rounding",0,8,"toExpNeg",-Nn,0,"toExpPos",0,Nn,"maxE",0,Nn,"minE",-Nn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=ri[t]),(n=o[t])!==void 0)if(He(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Jt+t+": "+n);if(t="crypto",r&&(this[t]=ri[t]),(n=o[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(na);else this[t]=!1;else throw Error(Jt+t+": "+n);return this}function nl(o){return new this(o).cos()}function ol(o){return new this(o).cosh()}function la(o){var e,t,n;function r(i){var s,a,c,u=this;if(!(u instanceof r))return new r(i);if(u.constructor=r,$s(i)){u.s=i.s,oe?!i.d||i.e>r.maxE?(u.e=NaN,u.d=null):i.e<r.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>r.maxE?(u.e=NaN,u.d=null):s<r.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 ai(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),ra.test(i)?ai(u,i):Wc(u,i)}if(r.prototype=_,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=tl,r.clone=la,r.isDecimal=$s,r.abs=Uc,r.acos=Gc,r.acosh=Xc,r.add=zc,r.asin=Qc,r.asinh=Yc,r.atan=jc,r.atanh=Hc,r.atan2=Zc,r.cbrt=Jc,r.ceil=$c,r.clamp=el,r.cos=nl,r.cosh=ol,r.div=rl,r.exp=il,r.floor=sl,r.hypot=al,r.ln=ul,r.log=cl,r.log10=ml,r.log2=ll,r.max=dl,r.min=pl,r.mod=fl,r.mul=yl,r.pow=bl,r.random=gl,r.round=Al,r.sign=wl,r.sin=Pl,r.sinh=hl,r.sqrt=kl,r.sub=Tl,r.sum=Il,r.tan=Bl,r.tanh=xl,r.trunc=Sl,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return r.config(o),r}function rl(o,e){return new this(o).div(e)}function il(o){return new this(o).exp()}function sl(o){return H(o=new this(o),o.e+1,3)}function al(){var o,e,t=new this(0);for(oe=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function $s(o){return o instanceof $n||o&&o.toStringTag===oa||!1}function ul(o){return new this(o).ln()}function cl(o,e){return new this(o).log(e)}function ll(o){return new this(o).log(2)}function ml(o){return new this(o).log(10)}function dl(){return aa(this,arguments,"lt")}function pl(){return aa(this,arguments,"gt")}function fl(o,e){return new this(o).mod(e)}function yl(o,e){return new this(o).mul(e)}function bl(o,e){return new this(o).pow(e)}function gl(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:at(o,1,$t),n=Math.ceil(o/$),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)r=e[i],r>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)r=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(r%1e7),i+=4);i=n/4}else throw Error(na);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=$,n&&o&&(r=_e(10,$-o),a[i]=(n/r|0)*r);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=$)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<$&&(t-=$-n)}return s.e=t,s.d=a,s}function Al(o){return H(o=new this(o),o.e+1,this.rounding)}function wl(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function Pl(o){return new this(o).sin()}function hl(o){return new this(o).sinh()}function kl(o){return new this(o).sqrt()}function Tl(o,e){return new this(o).sub(e)}function Il(){var o=0,e=arguments,t=new this(e[o]);for(oe=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return oe=!0,H(t,this.precision,this.rounding)}function Bl(o){return new this(o).tan()}function xl(o){return new this(o).tanh()}function Sl(o){return H(o=new this(o),o.e+1,1)}_[Symbol.for("nodejs.util.inspect.custom")]=_.toString;_[Symbol.toStringTag]="Decimal";var $n=_.constructor=la(ri);Ho=new $n(Ho);Zo=new $n(Zo);var v=$n;import{PublicKey as pi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kl}from"@solana/spl-token";import{PublicKey as Be,SystemProgram as ma,SYSVAR_RENT_PUBKEY as Cl}from"@solana/web3.js";function A({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var ci=[A({pubkey:Kl,isWritable:!1}),A({pubkey:ma.programId,isWritable:!1}),A({pubkey:Cl,isWritable:!1})];function li({publicKey:o,transformSol:e}){let t=mi(o.toString());if(t instanceof Be)return e&&t.equals(ve)?Z:t;if(e&&t.toString()===ve.toBase58())return Z;if(typeof t=="string"){if(t===Be.default.toBase58())return Be.default;try{return new Be(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function mi(o){try{return new Be(o)}catch{return o}}var nr=new Be("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),or=new Be("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ut=new Be("SysvarRent111111111111111111111111111111111"),di=new Be("SysvarC1ock11111111111111111111111111111111"),_n=new Be("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),rr=new Be("Sysvar1nstructions1111111111111111111111111"),ir=ma.programId,Kf=new Be("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Cf=new Be("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Rf=new Be("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Lf=new Be("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Of=new Be("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Nf=new Be("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Mf=new Be("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),_f=new Be("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),vf=new Be("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Vf=new Be("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Ff=new Be("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Be("So11111111111111111111111111111111111111112"),ve=Be.default;function mt(o){return li({publicKey:o,transformSol:!0})}import{PublicKey as Rl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as da}from"@solana/spl-token";var Rt={chainId:101,address:Rl.default.toBase58(),programId:da.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:da.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 fi=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===ve.toBase58()||e instanceof pi&&ve.equals(e)){this.decimals=Ve.decimals,this.symbol=Ve.symbol,this.name=Ve.name,this.mint=new pi(Ve.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=i?pi.default:li({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},ye=fi;ye.WSOL=new fi(F(C({},Ve),{mint:Ve.address}));import ar from"big.js";import Nl from"bn.js";import Ml from"decimal.js-light";import Ll from"toformat";var Ol=Ll,eo=Ol;var sr=ce("module/fraction"),yi=eo(ar),to=eo(Ml),_l={[0]:to.ROUND_DOWN,[1]:to.ROUND_HALF_UP,[2]:to.ROUND_UP},vl={[0]:ar.roundDown,[1]:ar.roundHalfUp,[2]:ar.roundUp},re=class{constructor(e,t=new Nl(1)){this.numerator=Q(e),this.denominator=Q(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new re(this.denominator,this.numerator)}add(e){let t=e instanceof re?e:new re(Q(e));return this.denominator.eq(t.denominator)?new re(this.numerator.add(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof re?e:new re(Q(e));return this.denominator.eq(t.denominator)?new re(this.numerator.sub(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof re?e:new re(Q(e));return new re(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof re?e:new re(Q(e));return new re(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||sr.logWithError(`${e} is not an integer.`),e<=0&&sr.logWithError(`${e} is not positive.`),to.set({precision:e+1,rounding:_l[n]});let r=new to(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||sr.logWithError(`${e} is not an integer.`),e<0&&sr.logWithError(`${e} is negative.`),yi.DP=e,yi.RM=vl[n]||1,new yi(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Vl=ce("Raydium_price"),qe=class extends re{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new re(gi(n.decimals),gi(r.decimals))}get raw(){return new re(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new qe({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Vl.logWithError("mul token not equals");let n=super.mul(t);return new qe({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var Ai=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},no=Ai;no.SOL=new Ai(Rt);function py(o,e){return o instanceof ye&&e instanceof ye?o.equals(e):o instanceof ye||e instanceof ye?!1:o===e}import Fl from"bn.js";var pa=new re(new Fl(100)),Fe=class extends re{toSignificant(e=5,t,n){return this.mul(pa).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(pa).toFixed(e,t,n)}};function Re(o){if(o instanceof Fe)return new re(o.numerator,o.denominator);if(o instanceof qe)return o.adjusted;if(o instanceof fe)try{return Re(o.toExact())}catch{return new re(Ee)}if(o instanceof re)return o;let e=String(o),t=mn(e);return new re(t.numerator,t.denominator)}function hy(o){var n;if(o instanceof Fe)return{fr:new re(o.numerator,o.denominator)};if(o instanceof qe)return{fr:o.adjusted};if(o instanceof fe)return{fr:Re(o.toExact()),decimals:o.token.decimals};if(o instanceof re)return{fr:o};let e=String(o),t=mn(e);return{fr:new re(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function ky(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Ee)}function El(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator.gt(Ee)}function Ty(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator.lte(Ee)}function Iy(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator.gte(Ee)}function Dl(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator.eq(Ee)}function By(o,e){if(o==null||e==null)return;let t=Re(o),n=Re(e);try{return t.div(n)}catch{return t}}function xy(o,e){if(o==null||e==null)return;let t=Re(o),n=Re(e);return t.sub(n)}function Sy(o){return o==null?!1:!Dl(o,0)}function Ky(o,e){return El(e,o)?e:o}function wi(o,e){if(o==null||e==null)return;let t=Re(o),n=Re(e);return t.mul(n)}function Cy(o,e){if(o==null||e==null)return;let t=Re(o),n=Re(e);return t.add(n)}var bi=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(bi||{}),Ee=new Te(0),ga=new Te(1),qy=new Te(2),Uy=new Te(3),Gy=new Te(5),dn=new Te(10),Xy=new Te(100),zy=new Te(1e3),Qy=new Te(1e4),fa=9007199254740991;function Q(o){let e=ce("Raydium_parseBigNumberish");if(o instanceof Te)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new Te(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=fa||o<=-fa)&&e.logWithError(`BigNumberish number overflow: ${o}`),new Te(String(o))):typeof o=="bigint"?new Te(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new Te(0))}function gi(o){return dn.pow(Q(o))}function mn(o){var a;if(o===void 0)return{denominator:"1",numerator:"0"};if(o instanceof Te)return{numerator:o.toString(),denominator:"1"};if(o instanceof re)return{denominator:o.denominator.toString(),numerator:o.numerator.toString()};let e=String(o),[,t="",n="",r=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],i="1"+"0".repeat(r.length),s=t+(n==="0"?"":n)+r||"0";return{denominator:i,numerator:s,sign:t,int:n,dec:r}}function ur(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Wl(o){var n;let[,e="",t=""]=(n=o.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function ql(o,e=0){return o instanceof Te?o:new Te(Wl(Aa(o).mul(dn.pow(new Te(String(e))))))}function Aa(o){if(o instanceof Fe)return new re(o.numerator,o.denominator);if(o instanceof qe)return o.adjusted;if(o instanceof fe)try{return Aa(o.toExact())}catch{return new re(Ee)}if(o instanceof re)return o;let e=String(o),t=mn(e);return new re(t.numerator,t.denominator)}function Yy(o,e){let{numerator:t,denominator:n}=mn(o);return new Fe(new Te(t),new Te(n).mul(e!=null&&e.alreadyDecimaled?new Te(100):new Te(1)))}function jy(o){let{token:e,numberPrice:t,decimalDone:n}=o,r=new ye({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:i,denominator:s}=mn(t),a=n?new Te(i).mul(dn.pow(new Te(e.decimals))):i,c=new Te(s).mul(dn.pow(new Te(r.decimals)));return new qe({baseToken:r,denominator:c.toString(),quoteToken:new ye(F(C({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function ya(o){let e=new no({decimals:6,symbol:"usd",name:"usd"}),t=ql(wi(o,10**e.decimals));return new pn(e,t)}function Hy(o,e){return ya(!e||!o?0:wi(o,e))}function Ul(o){if(o==null)return;let{numerator:e,denominator:t}=mn(o.toString());return new re(e,t)}function Gl(o){return o instanceof v}function ba(o){return Gl(o)?Ul(o):Array.isArray(o)?o.map(e=>ba(e)):Pi(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,ba(t)])):o}var zl=ce("Raydium_amount"),cr=eo(Xl);function wa(o,e){let t="0",n="0";if(o.includes(".")){let r=o.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):zl.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var fe=class extends re{constructor(t,n,r=!0,i){let s=new en(0),a=dn.pow(new en(t.decimals));if(r)s=Q(n);else{let c=new en(0),u=new en(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=wa(n.toString(),t.decimals);c=Q(l),u=Q(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(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 fe(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new fe(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return cr.DP=this.token.decimals,new cr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},pn=class extends re{constructor(t,n,r=!0,i){let s=new en(0),a=dn.pow(new en(t.decimals));if(r)s=Q(n);else{let c=new en(0),u=new en(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=wa(n.toString(),t.decimals);c=Q(l),u=Q(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(i||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new pn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new pn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.currency.decimals,n,r=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return cr.DP=this.currency.decimals,new cr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};async function Pa(o){new Promise(e=>setTimeout(e,o))}function Pb(){return new Date().getTime()}function Pi(o){return typeof o=="object"&&o!==null&&![ye,fe,Ql,re,Yl,qe,Fe].some(e=>typeof e=="object"&&o instanceof e)}function Ie(o){return typeof o=="string"?mi(o):Array.isArray(o)?o.map(e=>Ie(e)):Pi(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ie(t)])):o}import{PublicKey as io,sendAndConfirmTransaction as Bi,Transaction as so,TransactionMessage as ao,VersionedTransaction as uo}from"@solana/web3.js";import om from"axios";var fn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(fn||{}),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 ka,ComputeBudgetProgram as ha,Transaction as mr,TransactionMessage as jl,Keypair as Ta,VersionedTransaction as hi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Hl}from"@solana/spl-token";var Dt=ce("Raydium_txUtil"),Ia=1644;function dr(o){let e=[],t=[];return o.microLamports&&(e.push(ha.setComputeUnitPrice({microLamports:o.microLamports})),t.push(V.SetComputeUnitPrice)),o.units&&(e.push(ha.setComputeUnitLimit({units:o.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function vn(o,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:r.blockhash)||(await o.getRecentBlockhash(t)).blockhash}catch{return(await o.getRecentBlockhash(t)).blockhash}}function pr(o,e){o.length<1&&Dt.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Dt.logWithError(`no signers provided:, ${e.toString()}`);let t=new mr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Ia}catch{return!1}}async function Ba(o,e,t,n=!0){let r=new ka("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new mr;s.feePayer=r;for(let u of e)pr([...s.instructions,u],[r])||(i.push(s),s=new mr,s.feePayer=r),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Zl(o,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Dt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Dt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Dt.debug("filteredLog:",c),l.length||Dt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function xa(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Dt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Wt(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Dt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ue(o,e){let[t,n]=ka.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function Zl(o,e,t){let n=[];if(t){let r=await o.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=r.blockhash,u.lastValidBlockHeight=r.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=o._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 o._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async r=>await(await o.simulateTransaction(r)).value))}catch(r){r instanceof Error&&Dt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:r.message})}return n}function oo({instructions:o,payer:e,signers:t}){return pr(o,[e,...t])}function ro({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ta.generate().publicKey.toString()}){let i=new jl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new hi(i).serialize()).toString("base64").length<Ia}catch{return!1}}var lr={time:0,data:void 0};async function Ob(o){if(!lr.data||(Date.now()-lr.time)/1e3>30){let e=await o.getEpochInfo();return lr={time:Date.now(),data:e},e}else return lr.data}var Sa=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o);function yn(o){let e=[];return o.forEach(t=>{t instanceof mr&&(t.recentBlockhash||(t.recentBlockhash=Hl.toBase58()),t.feePayer||(t.feePayer=Ta.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof hi&&(n=Sa(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}function Nb(o){let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});return o instanceof hi&&(e=Sa(e)),e.toString("base64")}import{PublicKey as Ca,AddressLookupTableAccount as fr}from"@solana/web3.js";import{PublicKey as Ka}from"@solana/web3.js";import{MINT_SIZE as Jl,TOKEN_PROGRAM_ID as $l,getTransferFeeConfig as em,unpackMint as tm}from"@solana/spl-token";var ki=ce("Raydium_accountInfo_util");async function Tt(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=Ti(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=Ti(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&ki.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"&&ki.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ka(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,r)))}catch(c){c instanceof Error&&ki.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function De(o,e,t){let n=await Tt(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>F(C({},r),{accountInfo:n[i]}))}var nm=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(nm||{}),qb=1;async function Vn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await De(o,e.map(c=>({pubkey:mt(c)})),t),r={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Jl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=tm(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);r[c.pubkey.toString()]=F(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||$l,feeConfig:(a=em(u))!=null?a:void 0})}return r[Ka.default.toBase58()]=r[Z.toBase58()],r}async function Ii({connection:o,address:e}){let t=await Tt(o,[...new Set(e.map(r=>r.toString()))].map(r=>new Ca(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new fr({key:s,state:fr.deserialize(i.data)});n[s.toString()]=a,yr[s.toString()]=a}return n}var yr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new fr({key:new Ca("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:fr.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 br=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 om.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}=dr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:r=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==io.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 so;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async r=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},c=i!=null?i:await vn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),yn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await Bi(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:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],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 vn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let P=await Bi(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));yn(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:r}=d,i=Ce(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:yr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let y of a)s[y]===void 0&&c.push(new io(y));let u=await Ii({connection:this.connection,address:c});for(let[y,f]of Object.entries(u))s[y]=f;let l=new ao({payerKey:this.feePayer,recentBlockhash:r?io.default.toBase58():await vn(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 uo(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),yn([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:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],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),yn(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=Ce(u,["computeBudgetConfig"]),r=t?dr(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?[...r.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new io(b));if(c.length<12&&oo({instructions:p,payer:this.feePayer,signers:f})||oo({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");oo({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new so().add(...r.instructions,...c)):s.push(new so().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);oo({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new so().add(...r.instructions,...c)):s.push(new so().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 vn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,P)=>{h.recentBlockhash=b,a[P].length&&h.sign(...a[P])}),yn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let P of s){let k=await Bi(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:r=[]}=b,i=Ce(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:yr),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),c=[];for(let h of a)s[h]===void 0&&c.push(new io(h));let u=await Ii({connection:this.connection,address:c});for(let[h,P]of Object.entries(u))s[h]=P;let l=t?dr(t):{instructions:[],instructionTypes:[]},m=await vn(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&&ro({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||ro({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&&ro({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new uo(T))}else{let T=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new uo(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&&ro({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new uo(k))}else{let k=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new uo(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)}),yn(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 It=class{constructor(e){this._owner=e}get publicKey(){return It.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return It.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return It.isKeyPair(this._owner)}get isPublicKey(){return It.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!It.isKeyPair(e)}};function Ti(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function sg(o,...e){return o.filter(t=>e.every(n=>n.includes(t)))}function ag(o,...e){return o.filter(t=>e.every(n=>!n.includes(t)))}function ug(o){return[...new Set(o)]}var Ra=o=>typeof o=="number",La=o=>o?new Date(o):new Date,rm=o=>La(o).getTime();function Oa(o,e,t){let n=Ra(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function Na(o,e,t){let n=Ra(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}function lg(o,e){let n=rm(o)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return La(n)}import{PublicKey as de}from"@solana/web3.js";var xi=new de("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Si=new de("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Fn=new de("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),im=new de("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),sm=new de("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),gr=new de("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Ki=new de("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),am=new de("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ma=new de("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Ci=new de("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),um=new de("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),pg=new de("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),cm=new de("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),lm=new de("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),mm=new de("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),dm=new de("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Ri=new de("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),pm=new de("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),fm=new de("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),ym=new de("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),bm=new de("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),gm=new de("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),co={IDO_PROGRAM_ID_V1:cm,IDO_PROGRAM_ID_V2:lm,IDO_PROGRAM_ID_V3:mm,IDO_PROGRAM_ID_V4:dm},fg={AMM_V4:Ki,AMM_STABLE:am,CLMM_PROGRAM_ID:Ci,FARM_PROGRAM_ID_V3:xi,FARM_PROGRAM_ID_V5:Si,FARM_PROGRAM_ID_V6:Fn,OPEN_BOOK_PROGRAM:sm,SERUM_PROGRAM_ID_V3:gr,UTIL1216:im,Router:um,CREATE_CPMM_POOL_PROGRAM:Ri,CREATE_CPMM_POOL_AUTH:pm,CREATE_CPMM_POOL_FEE_ACC:fm},yg={SERUM_MARKET:de.default,OPENBOOK_MARKET:new de("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:de.default,FarmV3:new de("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new de("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new de("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new de("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new de("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new de("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new de("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:ym,CREATE_CPMM_POOL_AUTH:bm,CREATE_CPMM_POOL_FEE_ACC:gm,FEE_DESTINATION_ID:new de("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Am}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as wm}from"@solana/spl-token";function Ae(o,e,t){return ue([o.toBuffer(),(t!=null?t:wm).toBuffer(),e.toBuffer()],new Am("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Ne from"bn.js";var Lt=1e4;function kg(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new Ne(r.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===Lt){let a=new Ne(r.maximumFee.toString());return{amount:o.add(a),fee:a,expirationTime:s}}else{let a=tn(o.mul(new Ne(Lt)),new Ne(Lt-r.transferFeeBasisPoints)),c=new Ne(r.maximumFee.toString()),u=a.sub(o).gt(c)?o.add(c):a,l=tn(u.mul(new Ne(r.transferFeeBasisPoints)),new Ne(Lt)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:s}}else{let a=tn(o.mul(new Ne(r.transferFeeBasisPoints)),new Ne(Lt)),c=a.gt(i)?i:a;return{amount:o,fee:c,expirationTime:s}}}function ke(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=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<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new Ne(i.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Lt){let c=new Ne(i.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=tn(o.mul(new Ne(Lt)),new Ne(Lt-i.transferFeeBasisPoints)),u=new Ne(i.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=tn(l.mul(new Ne(i.transferFeeBasisPoints)),new Ne(Lt)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=tn(o.mul(new Ne(i.transferFeeBasisPoints)),new Ne(Lt)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function Ot(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function tn(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new Ne(0))?t.add(new Ne(1)):t}var _a=(t=>(t.ALL="all",t.Strict="strict",t))(_a||{}),va=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(va||{});var Me={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"},qg=C({},Me);var Va="ray_tab_hash",Li="ray_req_hash",Pm=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Va);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Va,o)),o},Ar=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Ce(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(Li)||"[]").slice(0,o-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(F(C({},t),{time:Date.now(),session:Pm()}));try{localStorage.setItem(Li,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(Li,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return Ar(F(C({},t),{logCount:o,removeLastLog:!0}))}};var En=ce("Raydium_Api"),Oi=new Map;async function cA(o,e,t=1e3){let n;for(;n==null;)try{En.debug(`Request ${o} through endlessRetry`),n=await e()}catch(r){En.error(`Request ${o} failed, retry after ${t} ms`,r),await Pa(t)}return n}var wr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=Fa.create({baseURL:this.urlConfigs.BASE_HOST||Me.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return En.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(En.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}),En.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}),En.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Me.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Me.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Fa.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,i)=>r+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Me.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Me.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Me.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Me.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Me.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Me.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Me.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>Oi.has(s)?(n.push(Oi.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Me.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{Oi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&mt(t).toBase58(),n&&n!=="undefined"?mt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Me.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Me.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Me.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Me.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Me.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Me.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Me.JITO})).data}};import{merge as wf}from"lodash";var Pr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Ea="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as zi,TOKEN_PROGRAM_ID as sn,AccountLayout as Wn,TOKEN_2022_PROGRAM_ID as Rd}from"@solana/spl-token";import{PublicKey as Sr,SystemProgram as Ld}from"@solana/web3.js";var Ni=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),xe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ce(t)}createTxBuilder(e){return this.scope.checkOwner(),new br({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(Ni(e))}logInfo(...e){this.logger.info(Ni(e))}logAndCreateError(...e){let t=Ni(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Id,createCloseAccountInstruction as Bd,createTransferInstruction as xd,TOKEN_PROGRAM_ID as Dn}from"@solana/spl-token";import{PublicKey as Sd,SystemProgram as Kd}from"@solana/web3.js";import Cd from"bn.js";import{PublicKey as tu,Keypair as Pd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hd}from"@solana/spl-token";import kd from"bn.js";import{PublicKey as dd}from"@solana/web3.js";import za,{isBN as Qa}from"bn.js";import{bits as hm,BitStructure as km,blob as Tm,Blob as Im,cstr as Bm,f32 as xm,f32be as Sm,f64 as Km,f64be as Cm,greedy as Rm,Layout as Lm,ns64 as Om,ns64be as Nm,nu64 as Mm,nu64be as _m,offset as vm,s16 as Vm,s16be as Fm,s24 as Em,s24be as Dm,s32 as Wm,s32be as qm,s40 as Um,s40be as Gm,s48 as Xm,s48be as zm,s8 as Qm,seq as Ym,struct as kA,Structure as jm,u16 as Hm,u16be as Zm,u24 as Jm,u24be as $m,u32 as ed,u32be as td,u40 as nd,u40be as od,u48 as rd,u48be as id,u8 as sd,UInt as ad,union as ud,Union as cd,unionLayoutDiscriminator as ld,utf8 as md}from"@solana/buffer-layout";var lo=Lm,Da=jm,Wa=cd,TA=km,Mi=ad,qa=Im,IA=Rm,hr=sd,Nt=Hm,BA=Jm,mo=ed,xA=nd,SA=rd,Ua=Mm,KA=Zm,CA=$m,RA=td,LA=od,OA=id,NA=_m,MA=Qm,_A=Vm,vA=Em,Qe=Wm,VA=Um,FA=Xm,EA=Om,DA=Fm,WA=Dm,qA=qm,UA=Gm,GA=zm,XA=Nm,zA=xm,QA=Sm,YA=Km,jA=Cm;var Ga=Ym,Xa=ud,HA=ld,be=Tm,ZA=Bm,JA=md,_i=hm,vi=vm;var bn=class extends lo{constructor(t,n,r){super(t,r);this.blob=be(t),this.signed=n}decode(t,n=0){let r=new za(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new za(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},kr=class extends lo{constructor(t){super(8,t);this._lower=_i(mo(),!1),this._upper=_i(mo(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function E(o){return new Mi(1,o)}function Ze(o){return new Mi(4,o)}function w(o){return new bn(8,!1,o)}function Y(o){return new bn(16,!1,o)}function Ya(o){return new bn(1,!0,o)}function Tr(o){return new bn(8,!0,o)}function ja(o){return new bn(16,!0,o)}var qt=class extends lo{constructor(t,n,r,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new qt(be(32),e=>new dd(e),e=>e.toBuffer(),o)}var Vi=class extends lo{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=hr()}encode(t,n,r=0){return t==null?this.discriminator.encode(0,n,r):(this.discriminator.encode(1,n,r),this.layout.encode(t,n,r+1)+1)}decode(t,n=0){let r=this.discriminator.decode(t,n);if(r===0)return null;if(r===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let r=this.discriminator.decode(t,n);if(r===0)return 1;if(r===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function ow(o,e){return new Vi(o,e)}function Ye(o){return new qt(hr(),pd,fd,o)}function pd(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function fd(o){return o?1:0}function rw(o,e){let t=mo("length"),n=M([t,X(o,vi(t,-t.span),"values")]);return new qt(n,({values:r})=>r,r=>({values:r}),e)}function iw(o,e,t){let n=M([w("tag"),e.replicate("data")]);function r({tag:i,data:s}){if(!i.eq(o))throw new Error("Invalid tag, expected: "+o.toString("hex")+", got: "+i.toString("hex"));return s}return new qt(n,r,i=>({tag:o,data:i}),t)}function yd(o){let e=mo("length"),t=M([e,be(vi(e,-e.span),"data")]);return new qt(t,({data:n})=>n,n=>({data:n}),o)}function sw(o){return new qt(yd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),o)}function aw(o,e){let t=Xa(hr(),e);return o.forEach((n,r)=>t.addVariant(r,n,n.property)),t}function uw(o,e,t){let n=M([X(o,e,"values")]);return new qt(n,({values:r})=>r,r=>({values:r}),t)}var Fi=class extends Da{decode(e,t){return super.decode(e,t)}};function M(o,e,t){return new Fi(o,e,t)}var Ei=class extends Wa{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(r=>r.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function cw(o,e,t){return new Ei(o,e,t)}var Di=class extends qa{decode(e,t){let n=super.decode(e,t);if(!n.every(r=>r===0))throw new Error("nonzero padding bytes");return n}};function lw(o){return new Di(o)}function X(o,e,t){let n,r=typeof e=="number"?e:Qa(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Qa(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 Ga(o,r,t)}var nn=M([K("mint"),K("owner"),w("amount"),Ze("delegateOption"),K("delegate"),E("state"),Ze("isNativeOption"),w("isNative"),w("delegatedAmount"),Ze("closeAuthorityOption"),K("closeAuthority")]);function bd(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function Wi(o,...e){if(!bd(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function qi(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function Ha(o,e){Wi(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Br=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),Bt=(o,e)=>o<<32-e|o>>>e;var gw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function gd(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function Ui(o){return typeof o=="string"&&(o=gd(o)),Wi(o),o}var Ir=class{clone(){return this._cloneInto()}},Aw={}.toString;function Za(o){let e=n=>o().update(Ui(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Ad(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let r=BigInt(32),i=BigInt(4294967295),s=Number(t>>r&i),a=Number(t&i),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var Ja=(o,e,t)=>o&e^~o&t,$a=(o,e,t)=>o&e^o&t^e&t,xr=class extends Ir{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Br(this.buffer)}update(e){qi(this);let{view:t,buffer:n,blockLen:r}=this;e=Ui(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let c=Br(e);for(;r<=i-s;s+=r)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){qi(this),Ha(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Ad(n,r-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:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var wd=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]),on=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),rn=new Uint32Array(64),Gi=class extends xr{constructor(){super(64,32,8,!1),this.A=on[0]|0,this.B=on[1]|0,this.C=on[2]|0,this.D=on[3]|0,this.E=on[4]|0,this.F=on[5]|0,this.G=on[6]|0,this.H=on[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:c}=this;return[e,t,n,r,i,s,a,c]}set(e,t,n,r,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)rn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=rn[m-15],p=rn[m-2],y=Bt(d,7)^Bt(d,18)^d>>>3,f=Bt(p,17)^Bt(p,19)^p>>>10;rn[m]=f+rn[m-7]+y+rn[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Bt(a,6)^Bt(a,11)^Bt(a,25),p=l+d+Ja(a,c,u)+wd[m]+rn[m]|0,f=(Bt(n,2)^Bt(n,13)^Bt(n,22))+$a(n,r,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,r,i,s,a,c,u,l)}roundClean(){rn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var eu=Za(()=>new Gi);var _w=ce("Raydium_Util");function nu({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=nn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:Ae(o,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),r.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:tu.default,amount:new kd(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Je({fromPublicKey:o,programId:e=hd}){let t=Pd.generate().publicKey.toBase58().slice(0,32);return{publicKey:Td(o,t,e),seed:t}}function Td(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=eu(n);return new tu(r)}function Xi(o){let{mint:e,tokenAccount:t,owner:n,programId:r=Dn}=o;return Id(t,e,n,r)}function Mt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=Dn}=o;return Bd(e,t,r,n,i)}async function Ut(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(nn.span,n),c=Q(t).add(new Cd(a)),u=Je({fromPublicKey:r,programId:Dn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Kd.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:nn.span,programId:Dn}),Xi({mint:new Sd(Ve.address),tokenAccount:u.publicKey,owner:i,programId:Dn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[Mt({tokenAccount:u.publicKey,payer:r,owner:i})]}}function po({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=Dn}){return xd(o,e,t,BigInt(String(n)),r,i)}var fo=class extends xe{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return Ae(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:sn},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Rd},r.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=nu({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=sn,associatedOnly:r=!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&&(!r||r&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Sr(t.tokenProgram||sn),m=this.getAssociatedTokenAccount(n,new Sr(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(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=zi(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)&&Wn.decode(P.data).mint.equals(n)&&Wn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(V.CreateATA);if(n.equals(Z)&&r.amount){let P=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.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||[]),r.amount&&(p.instructions.push(po({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:sn})),p.instructionTypes.push(V.TransferAmount))}return c||(p.endInstructions.push(Mt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let h=Je({fromPublicKey:s,programId:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Wn.span),k=Ld.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:P+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Wn.span,programId:l});return p.instructions.push(k,Xi({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(Mt({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=sn,autoUnwrapWSOLToSOL:r}){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 zi(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],i=u}return r&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[Mt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=sn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Sr(Z).equals(i)){let p=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=zi(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(sn)&&Wn.decode(f.data).mint.equals(i)&&Wn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=sn,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Sr(Z))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Ce(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Ce(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as Jd}from"@solana/spl-token";import{PublicKey as ge,SystemProgram as $d}from"@solana/web3.js";import{PublicKey as cu}from"@solana/web3.js";var Qi=M([E("instruction")]),Yi=M([E("instruction")]),Od=M([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Y("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Nd=M([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Y("perShareReward"),w("lastSlot"),w("perSlotReward")]),Md=M([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Y("perShareRewardA"),w("perSlotRewardA"),E("option"),K("rewardVaultB"),be(7),w("totalRewardB"),Y("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),_d=M([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Y("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(Od,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),ou=new Proxy(Nd,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),ru=new Proxy(Md,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),yo=new Proxy(_d,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return F(C({},i),{rewardType:((s=Object.entries(an).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),vd=M([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),ji=M([E("instruction"),w("nonce"),X(vd,5,"rewardTimeInfo")]),Hi=M([E("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Zi=M([E("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),pP=M([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),bo=M([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),fP=M([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),iu=M([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),2,"rewardDebts"),X(w(),17)]),su=M([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Y(),5,"rewardDebts"),X(w(),16)]),rt=M([E("instruction"),w("amount")]),Vd=M([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Ya("digitShift"),X(E(),7,"reserved1"),X(w(),7,"reserved2")]),au=M([be(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(E(),32,"reserved1"),X(Vd,4,"votingMints"),Tr("timeOffset"),E("bump"),X(E(),7,"reserved2"),X(w(),11,"reserved3")]),Fd=M([Tr("startTime"),Tr("endTime"),E("kind"),X(E(),15,"reserved")]),Ed=M([X(Fd,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),Ye("isUsed"),Ye("allowClawback"),E("votingMintConfigIdx"),X(E(),29,"reserved")]),uu=M([be(8),K("voterAuthority"),K("registrar"),X(Ed,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),X(E(),94,"reserved")]);var kP=ce("Raydium_farm_config"),lu=new cu("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),mu=new cu("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),du={3:ou,5:ru,6:yo},pu={3:bo,5:iu,6:su},Ji=o=>[3,5,6].indexOf(o)!==-1,$i=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,r=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=i[e])==null?void 0:s.call(i)},an={"Standard SPL":0,"Option tokens":1},bt={[xi.toString()]:3,[Si.toString()]:5,[Fn.toString()]:6};import{PublicKey as se,SystemProgram as gn,SYSVAR_RENT_PUBKEY as qd,SYSVAR_CLOCK_PUBKEY as wo,TransactionInstruction as Ue}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Ud,TOKEN_PROGRAM_ID as dt,ASSOCIATED_TOKEN_PROGRAM_ID as Gd}from"@solana/spl-token";import Kr from"bn.js";function es(o,e,t){return ue([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function ts(o,e){return ue([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function ns(o,e){return ue([e.toBuffer()],o)}function os(o,e,t){return ue([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function rs(o,e,t){return ue([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function is(o,e,t,n){return ue([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import ct from"bn.js";var go=ce("Raydium.farm.util");function Ao({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function $e({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var fu=({programId:o,poolId:e})=>ue([e.toBuffer()],o);function yu(o){return{isSet:new ct(1),rewardPerSecond:Q(o.perSecond),rewardOpenTime:Q(o.openTime),rewardEndTime:Q(o.endTime),rewardType:Q(an[o.rewardType])}}function ss(o){return Q(o.endTime).sub(Q(o.openTime)).mul(Q(o.perSecond))}function qn(o){let e=pu[o];return e||go.logWithError("invalid version",o),e}function Dd(o){let e=du[o];return e||go.logWithError("invalid version",o),e}function Wd(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new ct(t)))return o;let r=new ct(t).sub(o.lastSlot);o.lastSlot=new ct(t);for(let i of o.rewardInfos){if(e.amount.eq(new ct(0)))continue;let s=i.perSlotReward.mul(r);i.perShareReward=i.perShareReward.add(s.mul(new ct(10).pow(new ct(o.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(o.version===6)for(let r of o.rewardInfos){if(r.rewardState.eq(new ct(0)))continue;let i=ct.min(new ct(n),r.rewardEndTime);if(r.rewardOpenTime.gte(i))continue;let a=i.sub(r.rewardLastUpdateTime).mul(r.rewardPerSecond),c=r.totalReward.sub(r.totalRewardEmissioned);c.lt(a)?(a=c,r.rewardLastUpdateTime=r.rewardLastUpdateTime.add(c.div(r.rewardPerSecond))):r.rewardLastUpdateTime=i,!e.amount.eq(new ct(0))&&(r.accRewardPerShare=r.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),r.totalRewardEmissioned=r.totalRewardEmissioned.add(a))}return o}async function EP({connection:o,farmPools:e,owner:t,config:n,chainTime:r}){let i=!1,s=!1,a=new ct(10),c=[];for(let d of e){let p=Ie(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:$e({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await De(o,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=Dd(p);(!b||!b.data||b.data.length!==h.span)&&go.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!==nn.span)&&go.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=nn.decode(b.data);else if(y==="ledger"){let h=qn(p);b&&b.data&&(b.data.length!==h.span&&go.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=h.decode(b.data))}}let m=s||i?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Wd(u[d].state,u[d].lpVault,m,r));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 ct(9)):a.pow(new ct(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 DP(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>Oa(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>Na(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.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 as(o,e,t,n){let r=await o.getAccountInfo(e);if(r===null)throw Error("registrar info check error");let s=au.decode(r.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await o.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=uu.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Xd=ce("Raydium_farm_instruction"),Po={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 ho(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||Xd.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Qi.span);Qi.encode({instruction:s},a);let c=[A({pubkey:t}),A({pubkey:n}),A({pubkey:i,isWritable:!1}),A({pubkey:gn.programId,isWritable:!1}),A({pubkey:qd,isWritable:!1})];return{instruction:new Ue({programId:r,keys:c,data:a}),instructionType:V.FarmV3CreateLedger}}function bu(o){var n;let e=Buffer.alloc(ji.span);ji.encode({instruction:0,nonce:new Kr(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...ci,A({pubkey:o.farmId}),A({pubkey:o.farmAuthority,isWritable:!1}),A({pubkey:o.lpVault}),A({pubkey:o.lpMint,isWritable:!1}),A({pubkey:o.lockVault}),A({pubkey:o.lockMint,isWritable:!1}),A({pubkey:(n=o.lockUserAccount)!=null?n:ve}),A({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(A({pubkey:r.rewardMint,isWritable:!1}),A({pubkey:r.rewardVault}),A({pubkey:r.userRewardToken}));return{instruction:new Ue({programId:o.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function gu(o){let e=Buffer.alloc(Yi.span);Yi.encode({instruction:5},e);let t=[A({pubkey:dt,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.authority,isWritable:!1}),A({pubkey:o.lpVault,isWritable:!1}),A({pubkey:o.rewardVault}),A({pubkey:o.userRewardToken}),A({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ue({programId:o.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function zd(o,e,t,n,r,i,s,a,c,u,l,m,d){let p=M([E("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:dt,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:rr,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Po.voterStakeRegistryDeposit,...f]);return new Ue({keys:y,programId:o,data:b})}function Qd(o,e,t,n){let r=M([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:gn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([...Po.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ue({keys:i,programId:o,data:a})}function Yd(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=M([E("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:dt,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:rr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...Po.voterStakeRegistryWithdraw,...g]);return new Ue({keys:b,programId:o,data:h})}function jd(o,e,t,n,r,i){let s=M([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:r,isSigner:!0,isWritable:!0},{pubkey:gn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Ue({keys:a,programId:o,data:c})}function Hd(o,e,t,n,r,i,s,a){let c=M([E("voterBump"),E("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:rr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...Po.voterStakeRegistryCreateVoter,...l]);return new Ue({keys:u,programId:o,data:m})}function Zd(o,e,t,n,r,i,s,a,c,u,l,m){let d=M([E("depositEntryIndex"),E("kind"),E("option"),w("startTs"),Ze("periods"),Ye("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Gd,isSigner:!1,isWritable:!1},{pubkey:ut,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([...Po.voterStakeRegistryCreateDepositEntry,...y]);return new Ue({keys:p,programId:o,data:f})}async function oh({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=es(n,r,i).publicKey,l=$e({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=bo.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new Kr(0)))throw Error("user do not has new stake amount");let y=ts(e,a).publicKey,f=ns(e,a).publicKey,{publicKey:b,nonce:g}=os(n,u,s),h=Ae(b,y,c).publicKey,{publicKey:P,nonce:k}=rs(n,u,s),B=is(t,r,i,s).publicKey,T=[],S=Ae(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(Ud(s,S,s,y)),await o.getAccountInfo(b)===null){let W=jd(t,r,s,i,s,B);T.push(W,Hd(n,u,b,P,s,s,g,k))}let{index:I,isInit:L}=await as(o,u,b,y);return L||T.push(Zd(n,u,b,h,s,s,y,I,0,void 0,0,!1)),T.push(zd(n,u,b,h,S,s,l,a,y,f,e,I,p),Qd(n,u,b,P)),T}async function rh({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=es(n,r,i).publicKey,l=$e({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=bo.decode(m.data);if(d.voteLockedBalance.eq(new Kr(0)))throw Error("user has vote locked balance = 0");let p=ts(e,a).publicKey,y=ns(e,a).publicKey,{publicKey:f}=os(n,u,s),b=Ae(f,p,c).publicKey,{publicKey:g}=rs(n,u,s),h=is(t,r,i,s).publicKey,P=[],{index:k,isInit:B}=await as(o,u,f,p);if(!B)throw Error("deposit entry index check error");return P.push(Yd(n,u,f,s,h,g,b,Ae(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),P}function us({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(Hi.span);Hi.encode({instruction:3,rewardReopenTime:Q(r.openTime),rewardEndTime:Q(r.endTime),rewardPerSecond:Q(r.perSecond)},i);let s=[A({pubkey:dt,isWritable:!1}),A({pubkey:n.id}),A({pubkey:n.lpVault,isWritable:!1}),A({pubkey:e}),A({pubkey:t}),A({pubkey:o,isWritable:!1,isSigner:!0})];return new Ue({programId:n.programId,keys:s,data:i})}function cs({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(Zi.span);Zi.encode({instruction:4,isSet:new Kr(1),rewardPerSecond:Q(r.perSecond),rewardOpenTime:Q(r.openTime),rewardEndTime:Q(r.endTime),rewardType:Q(an[r.rewardType])},i);let s=[...ci,A({pubkey:t.id}),A({pubkey:t.authority,isWritable:!1}),A({pubkey:r.mint,isWritable:!1}),A({pubkey:n}),A({pubkey:e}),A({pubkey:o,isWritable:!1,isSigner:!0})];return new Ue({programId:t.programId,keys:s,data:i})}function ih(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:r,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=o,[l,m]=[new se(e.programId),new se(e.id)],d=$e({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(rt.span);rt.encode({instruction:a,amount:c},p);let y=n===6?[A({pubkey:dt,isWritable:!1}),...u?[A({pubkey:gn.programId,isWritable:!1})]:[],A({pubkey:m}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:new se(t.lpVault)}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:r})]:[A({pubkey:m}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:r}),A({pubkey:new se(t.lpVault)}),A({pubkey:i[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,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 se(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(A({pubkey:new se(t.rewardInfos[f].vault)})),y.push(A({pubkey:i[f]}));return new Ue({programId:l,keys:y,data:p})}function ko(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new se(e.programId),new se(e.id)],u=$e({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:2,amount:Q(s)},l);let m=[A({pubkey:dt,isWritable:!1}),A({pubkey:c}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:new se(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 se(t.rewardInfos[d].vault)})),m.push(A({pubkey:r[d]}));return new Ue({programId:a,keys:m,data:l})}function To(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new se(e.programId),new se(e.id)],l=$e({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:12,amount:Q(s)},m);let d=[A({pubkey:u}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new se(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:r[p]})),d.push(A({pubkey:new se(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ue({programId:c,keys:d,data:m})}function Io(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new se(e.programId),new se(e.id)],l=$e({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Q(s)},m);let d=[A({pubkey:u}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new se(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ue({programId:c,keys:d,data:m})}function Au(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new se(e.programId),new se(e.id)],l=$e({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:10,amount:Q(s)},m);let d=[A({pubkey:u}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new se(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ue({programId:c,keys:d,data:m})}function wu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new se(e.programId),new se(e.id)],l=$e({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Q(s)},m);let d=[A({pubkey:u}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new se(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:r[p]})),d.push(A({pubkey:new se(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ue({programId:c,keys:d,data:m})}function Pu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new se(e.programId),new se(e.id)],u=$e({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:1,amount:Q(s)},l);let m=[A({pubkey:dt,isWritable:!1}),A({pubkey:gn.programId,isWritable:!1}),A({pubkey:c}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:new se(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 se(t.rewardInfos[d].vault)})),m.push(A({pubkey:r[d]}));return new Ue({programId:a,keys:m,data:l})}var Bo=class extends xe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(ve)){let n=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ss(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:r=Fn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ge(e.lpMint.address),lockInfo:{lockMint:lu,lockVault:mu},version:6,rewardInfos:t,programId:r},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Je({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(yo.span);c.addInstruction({instructions:[$d.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:yo.span,programId:a.programId})]});let{publicKey:d,nonce:p}=fu({programId:new ge(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(an[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(yu(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(ve)?new ge(Ve.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 ge(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}=bu({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:r}){var b;let i=bt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ie((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(ve)?new ge(Ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new ge(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:ve,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:[us({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=bt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ie((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(ve)?new ge(Ve.address):m.mint,p=a.rewardInfos.findIndex(P=>new ge(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:ve,{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=us({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[h],instructionTypes:[V.FarmV6Restart]})}return u.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=bt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=r.mint.equals(ve)?new ge(Ve.address):r.mint,m=Ao({programId:new ge(n.programId),poolId:new ge(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,u.addInstruction({instructions:[cs({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=bt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of r){let m=l.mint.equals(ve)?new ge(Ve.address):l.mint,d=Ao({programId:new ge(n.programId),poolId:new ge(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=cs({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:r,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=bt[d];Ji(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ge(n.programId),new ge(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=$e({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=Ae(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===Z.toString(),G=P[D.mint.address];if(!G){let{account:q,instructionParams:ot}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new ge(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,ot&&h.addInstruction(ot)}P[D.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=qn(p).decode(x.data)),n.programId!==Fn.toString()&&!S){let{instruction:D,instructionType:J}=ho({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[J]})}let R=$i({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:Q(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(D=>new ge(D))},L=p===6?Pu(I):p===5?wu(I):Au(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:r,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=bt[n.programId];Ji(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=Ae(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=$e({programId:new ge(n.programId),poolId:new ge(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);if(I)qn(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}=ho({id:new ge(y.id),programId:new ge(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[W]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===Z.toString(),P=b[g.toString()];if(!P){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ge(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:c,checkCreateATAOwner:u});P=R,I&&f.addInstruction(I)}b[g.toString()]=P;let k=[];for(let R of d){let I=s&&R.mint.address===Z.toString(),L=b[R.mint.address];if(!L){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new ge(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=$i({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:Q(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:P,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new ge(R))},S=p===6?ko(T):p===5?To(T):Io(T),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=bt[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===ve.toString()?new ge(Ve.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:ve,u=this.createTxBuilder(),l;if(t.equals(ve)){let y=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ss(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:[Jd(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=gu({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.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:r,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=Ae(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=bt[f],k=b.address,B=n&&k===Z.toString(),T=m[k];if(!T){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ge(k),notUseTokenAccount:B,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=W,D&&l.addInstruction(D)}m[k.toString()]=T;let S=[];for(let W of g){let D=n&&W.mint.address===Z.toString(),J=m[W.mint.address];if(!J){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new ge(W.mint.address),notUseTokenAccount:D,createInfo:{payer:r||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:Ee,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(W=>new ge(W))},I=P===6?ko(R):P===5?To(R):Io(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 tt}from"@solana/web3.js";import{AccountLayout as Dp,NATIVE_MINT as rc,TOKEN_PROGRAM_ID as Qn}from"@solana/spl-token";var Kh=M([Ze("mintAuthorityOption"),K("mintAuthority"),w("supply"),E("decimals"),E("isInitialized"),Ze("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as ep}from"@solana/web3.js";import{MintLayout as hu,TOKEN_PROGRAM_ID as tp}from"@solana/spl-token";var Fh=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new ep(e));return!t||t.data.length!==hu.span?void 0:hu.decode(t.data)},Eh=({mint:o,decimals:e,programId:t=tp,logoURI:n="",priority:r=3})=>{let i=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:r}},Cr=o=>new ye({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),xo=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Ce(i,["amount","isRaw","name"]);return new fe(new ye({mint:mt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function Dh(o){return o.address===Rt.address?Ve:o}function Wh(o){return o.address===Ve.address?Rt:o}var it=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Ce(i,["address","programId","decimals"]);return C({chainId:101,address:mt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},un=o=>o?F(C({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(C({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Xn,ASSOCIATED_TOKEN_PROGRAM_ID as yp}from"@solana/spl-token";import{PublicKey as we,TransactionInstruction as Gt,SystemProgram as Cu,SYSVAR_RENT_PUBKEY as bp}from"@solana/web3.js";var ls=M([E("instruction"),w("amountIn"),w("minAmountOut")]),ms=M([E("instruction"),w("maxAmountIn"),w("amountOut")]),$h=M([E("instruction"),E("nonce")]),ds=M([E("instruction"),E("nonce"),w("startTime")]),So=M([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"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("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")]),np=M([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"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("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")]),ps=M([E("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),fs=M([E("instruction"),w("amountIn")]),ek={4:So,5:np},ku=M([w("fee")]);import{PublicKey as op}from"@solana/web3.js";var Gn=new op("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),wn=5e4,rp=M([w("x"),w("y"),w("price")]),ip=M([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(rp,wn,"DataElement")]);function sp(o,e){return[0,wn-2]}function ap(o){return[0,wn-2]}function up(o){return[0,wn-2]}function cp(o,e,t){let[n,r]=sp(e,t),i=n,s=r,a=0,c=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=wn-2)return[a,a,!1];let u=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(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 ys(o,e,t){let[n,r,i]=cp(o,e,t);if(!i)return 0;if(n===r){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,c=o.DataElement[r].x,u=o.DataElement[r].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*o.multiplier*l/p}}function An(o,e,t){return e*o.multiplier/t}function Tu(o,e,t){return e*t/o.multiplier}function lp(o,e){let[t,n]=ap(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>wn-2)return[s,s,!1];let c=o.DataElement[s].x,u=o.DataElement[s-1].x,l=o.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];r=s+1}}return[s,s,!1]}function mp(o,e){let[t,n]=up(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=wn-2)return[s,s,!1];let c=o.DataElement[s].y,u=o.DataElement[s-1].y,l=o.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)r=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 Iu(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=lp(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=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-(r-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-r)*o.multiplier/l),[y,f,!1,a]}}}function dp(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=mp(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function pp(o,e){let t=Iu(o,e,0,!1);return t[3]?t[0]:0}function Bu(o,e,t,n){let r=ys(o,e,t),i=An(o,e,r),s=An(o,t,r),a=An(o,n,r),c=!0,[u,l,m,d]=Iu(o,i,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=s-l;return Tu(o,p,r)}}function xu(o,e,t,n){let r=ys(o,e,t),i=An(o,e,r),s=An(o,t,r),a=An(o,n,r),c=!1,[u,l,m,d]=dp(o,s,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=i-l;return Tu(o,p,r)}}function fp(o){let e=ip.decode(o);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function Su(o,e,t,n){let r=pp(o,An(o,e,ys(o,e,t)))/o.multiplier;return n?r:1/r}var Un=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(Gn);e&&(this._layoutData=fp(e==null?void 0:e.data))}}};var Ku=ce("Raydium_liquidity_instruction");function Ru(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(ps.span);ps.encode({instruction:3,baseAmountIn:Q(r),quoteAmountIn:Q(i),fixedSide:s==="base"?Ee:ga},a);let c=[A({pubkey:Xn,isWritable:!1}),A({pubkey:new we(e.id)}),A({pubkey:new we(t.authority),isWritable:!1}),A({pubkey:new we(t.openOrders),isWritable:!1}),A({pubkey:new we(t.targetOrders)}),A({pubkey:new we(e.lpMint.address)}),A({pubkey:new we(t.vault.A)}),A({pubkey:new we(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(A({pubkey:Gn})),c.push(A({pubkey:new we(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 we(t.marketEventQueue),isWritable:!1})),new Gt({programId:new we(e.programId),keys:c,data:a})}function bs(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=Ie(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(fs.span);fs.encode({instruction:4,amountIn:Q(r)},a);let c=[A({pubkey:Xn,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:Gn})):(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 Gt({programId:i.programId,keys:c,data:a})}return new Gt({programId:i.programId,keys:[]})}function Lu({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,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=M([E("instruction"),E("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:Xn,isSigner:!1,isWritable:!1},{pubkey:yp,isSigner:!1,isWritable:!1},{pubkey:Cu.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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 Gt({keys:R,programId:o,data:I}),instructionType:V.AmmV4CreatePool}}function bk(o){let e=M([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new we(o.id),isWritable:!1}),A({pubkey:new we(o.authority),isWritable:!1}),A({pubkey:new we(o.openOrders),isWritable:!1}),A({pubkey:new we(o.vault.A),isWritable:!1}),A({pubkey:new we(o.vault.B),isWritable:!1}),A({pubkey:new we(o.mintLp.address),isWritable:!1}),A({pubkey:new we(o.marketId),isWritable:!1}),A({pubkey:new we(o.marketEventQueue),isWritable:!1})];return new Gt({programId:new we(o.programId),keys:n,data:t})}function gp({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=Ie(o),s=Buffer.alloc(ls.span);ls.encode({instruction:9,amountIn:Q(t),minAmountOut:Q(n)},s);let a=[A({pubkey:Xn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders})];return r===4&&a.push(A({pubkey:i.targetOrders})),a.push(A({pubkey:i.vault.A}),A({pubkey:i.vault.B})),r===5&&a.push(A({pubkey:Gn})),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 Gt({programId:i.programId,keys:a,data:s})}function Ap({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=Ie(o),s=Buffer.alloc(ms.span);ms.encode({instruction:11,maxAmountIn:Q(t),amountOut:Q(n)},s);let a=[A({pubkey:Xn,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 r===5&&a.push(A({pubkey:Gn})),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 Gt({programId:i.programId,keys:a,data:s})}function Rr(o){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:i,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return gp(F(C({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return Ap(F(C({},a),{maxAmountIn:r,amountOut:i}),t);Ku.logWithError("invalid params","params",o)}throw Ku.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function gk({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(ds.span);ds.encode({instruction:0,nonce:5,startTime:Q(t)},n);let r=Ie(o),i=[A({pubkey:Xn,isWritable:!1}),A({pubkey:Cu.programId,isWritable:!1}),A({pubkey:bp,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.authority,isWritable:!1}),A({pubkey:r.openOrders}),A({pubkey:r.mintLp.address}),A({pubkey:r.mintA.address,isWritable:!1}),A({pubkey:r.mintB.address,isWritable:!1}),A({pubkey:r.vault.A,isWritable:!1}),A({pubkey:r.vault.B,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.targetOrders}),A({pubkey:e.lpTokenAccount}),A({pubkey:r.id,isWritable:!1}),A({pubkey:r.marketProgramId,isWritable:!1}),A({pubkey:r.marketId,isWritable:!1}),A({pubkey:e.payer,isSigner:!0})];return new Gt({programId:r.programId,keys:i,data:n})}function Ou({poolKeys:o}){let e=M([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new we(o.id),isWritable:!1}),A({pubkey:new we(o.authority),isWritable:!1}),A({pubkey:new we(o.openOrders),isWritable:!1}),A({pubkey:new we(o.vault.A),isWritable:!1}),A({pubkey:new we(o.vault.B),isWritable:!1}),A({pubkey:new we(o.mintLp.address),isWritable:!1}),A({pubkey:new we(o.marketId),isWritable:!1}),A({pubkey:new we(o.marketEventQueue),isWritable:!1})];return{instruction:new Gt({programId:new we(o.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as je,TOKEN_2022_PROGRAM_ID as cn,ASSOCIATED_TOKEN_PROGRAM_ID as Hu}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as St,SystemProgram as zn,Keypair as Bs}from"@solana/web3.js";import Zu from"bn.js";import Cp from"bn.js";function Nu(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function wk(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function Pk(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function Lr(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function gs(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function As(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function Ko(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Mu(o,e){return Ko(o,e)?null:gs(o,e)}function _u(o,e){return Ko(o,e)?null:As(o,e)}var wp=Buffer.from("amm_config","utf8"),Pp=Buffer.from("pool","utf8"),hp=Buffer.from("pool_vault","utf8"),kp=Buffer.from("pool_reward_vault","utf8"),vu=Buffer.from("position","utf8"),Tp=Buffer.from("tick_array","utf8"),Ip=Buffer.from("operation","utf8"),Bp=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Ik(o,e){return ue([wp,Nu(e)],o)}function Vu(o,e,t,n){return ue([Pp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function ws(o,e,t){return ue([hp,e.toBuffer(),t.toBuffer()],o)}function Fu(o,e,t){return ue([kp,e.toBuffer(),t.toBuffer()],o)}function Pe(o,e,t){return ue([Tp,e.toBuffer(),Lr(t)],o)}function Pn(o,e,t,n){return ue([vu,e.toBuffer(),Lr(t),Lr(n)],o)}function gt(o,e){return ue([vu,e.toBuffer()],o)}function Or(o){return ue([Buffer.from("metadata","utf8"),_n.toBuffer(),o.toBuffer()],_n)}function Co(o){return ue([Ip],o)}function pt(o,e){return ue([Bp,e.toBuffer()],o)}import At from"bn.js";var pe=new At(0),ft=new At(1),Xt=new At(-1),yt=new At(1).shln(64),Nr=new At(1).shln(128),Ps=yt.sub(ft),Ro=64,Eu=Nr.subn(1),et=-443636,st=-et,_t=new At("4295048016"),vt=new At("79226673521066979257578248091"),Mr=new At("4295048017"),_r=new At("79226673521066979257578248090"),Du=16,Wu="59543866431248",qu="184467440737095516",Uu="15793534762490258745",vr=new At(10).pow(new At(6)),xp=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(xp||{}),Sk={[500]:10,[3e3]:60,[1e4]:200},Kk={version:6,liquidity:pe,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:pe,feeGrowthGlobalX64B:pe,protocolFeesTokenA:pe,protocolFeesTokenB:pe,swapInAmountTokenA:pe,swapOutAmountTokenB:pe,swapInAmountTokenB:pe,swapOutAmountTokenA:pe,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},Gu={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:[]},Ck=new At("18446744073700000000");var Sp=15,me=class{static async getTickArrays(e,t,n,r,i,s,a){let c=[],u=j.getTickArrayStartIndexByTick(r,i),l=j.getInitializedTickArrayInRange(s,a,i,u,Math.floor(Sp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=Pe(t,n,l[p]);c.push(y)}let m=(await Tt(e,c)).map(p=>p!==null?Lo.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,r,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,r,i){let s=Math.floor(e/me.tickCount(t)),a=n?j.searchLowBitFromStart(r,i,s-1,1,t):j.searchHightBitFromStart(r,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let i;if(r){let a=We-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<We;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=Pe(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=j.getTickArrayStartIndexByTick(r,i),c=Math.floor((r-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<We;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Pe(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(j.checkIsOutOfBoundary(e)){if(e>st)return!1;let n=j.getTickArrayStartIndexByTick(et,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return We*e}};import ie from"bn.js";import{PublicKey as xt}from"@solana/web3.js";import Le from"bn.js";var hs=14,zt=class{static maxTickInTickarrayBitmap(e){return e*We*hn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let i=n*r;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!me.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-me.tickCount(n):t+me.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*We,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(r){let l=e.shln(1024-u-1),m=Mu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=_u(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-me.tickCount(n)}}}},Oo=class{static getBitmapOffset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=zt.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=zt.maxTickInTickarrayBitmap(e),n=-t;if(st<=t)throw Error(`extensionTickBoundary check error: ${st}, ${t}`);if(n<=et)throw Error(`extensionTickBoundary check error: ${n}, ${et}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(r).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let i=me.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:i,maxValue:s}=zt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let c=j.mergeTickArrayBitmap(e).shln(hn-1-a),u=Ko(512,c)?null:gs(512,c);if(u!==null){let l=t-u*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=Ko(512,c)?null:As(512,c);if(u!==null){let l=t+u*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-me.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%zt.maxTickInTickarrayBitmap(t),r=Math.floor(n/me.tickCount(t));return e<0&&n!=0&&(r=hn-r),r}};import Vt from"bn.js";var No=class{static getfeeGrowthInside(e,t,n){let r=new Vt(0),i=new Vt(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Vt(0),a=new Vt(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,r),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,yt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,yt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,yt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,yt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,yt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,yt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Vt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Vt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Vt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Vt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,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+r:1-r,m=le.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[ke(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),ke(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[ke(new Vt(new v(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),ke(new Vt(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:Ot(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Xu}from"@solana/spl-token";var Oe=class{static getOutputAmountAndRemainAccounts(e,t,n,r,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}=kn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(Xt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,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}=Pe(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=kn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(Xt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Oe.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Oo.checkTickArrayIsInit(me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Pe(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=Pe(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/me.tickCount(e.tickSpacing)),r=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=me.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=zt.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=Oo.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<et||t>st)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,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 xt(d)});if(p.tokenMint.equals(xt.default))continue;if(n<=p.openTime.toNumber()||r.eq(pe)){s.push(p);continue}let y=new Le(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,yt),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:r}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=zt.maxTickInTickarrayBitmap(e),n=-t;return t>st&&(t=me.getArrayStartIndex(st,e)+me.tickCount(e)),n<et&&(n=me.getArrayStartIndex(et,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/me.tickCount(t)*hn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await De(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=Qu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Pe(c.programId,c.id,m);i.push({pubkey:d}),r[d.toString()]=c.id}}let s=await De(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=r[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Lo.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:r=!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(gt(p,d).publicKey);let l=await Tt(t,u,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=Vr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:P,amountB:k}=le.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 Le(0)})),leverage:B,tokenFeeAmountA:new Le(0),tokenFeeAmountB:new Le(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await Tt(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=Lo.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,P=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[P].toString()],T=k.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await No.GetPositionFees(f,g,T,S),I=await No.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Le(0))?x:new Le(0),g.tokenFeeAmountB=R.gte(new Le(0))?R:new Le(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new Le(0))?I[L]:new Le(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,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?_t.add(new Le(1)):vt.sub(new Le(1)):u=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ke(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Oe.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((W=p.fee)!=null?W:pe),u,c),P=ke(f,d,r,!1),k=ee.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new v(1).div(k),T=f.mul(new Le(Math.floor((1-s)*1e10))).div(new Le(1e10)),S=ke(T,d,r,!1),x=l?e.currentPrice:new v(1).div(e.currentPrice),R=new v(B).sub(x).abs(),I=x,L=new Fe(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:Ot(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:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=r.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new ye(F(C({},u),{mint:u.address,isToken2022:u.programId===Xu.toBase58()})),new ye(F(C({},l),{mint:l.address,isToken2022:l.programId===Xu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:P,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Oe.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new xt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new fe(m,y.amount),fee:y.fee===void 0?void 0:new fe(m,y.fee)}),R=F(C({},f),{amount:new fe(d,f.amount),fee:f.fee===void 0?void 0:new fe(d,f.fee)}),I=F(C({},b),{amount:new fe(d,b.amount),fee:b.fee===void 0?void 0:new fe(d,b.fee)}),L=new qe({baseToken:m,denominator:new Le(10).pow(new Le(20+m.decimals)),quoteToken:d,numerator:h.mul(new v(10**(20+d.decimals))).toFixed(0)}),W=new qe({baseToken:m,denominator:new Le(10).pow(new Le(20+m.decimals)),quoteToken:d,numerator:P.mul(new v(10**(20+d.decimals))).toFixed(0)}),D=new fe(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:r}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:r,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:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[mt(e.mintA.address).toString()],d=r[mt(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}=le.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=le.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,ot;let J=D.mint.decimals,G=r[D.mint.address];return c<((q=D.startTime)!=null?q:0)||c>((ot=D.endTime)!=null?ot: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:r,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(r),p=a?1-s:1+s,y=ke(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Le(new v(y.amount.sub((h=y.fee)!=null?h:pe).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?le.getLiquidityFromTokenAmountA(m,d,f,!a):new Le(0);else if(l.lte(d)){let P=le.getLiquidityFromTokenAmountA(l,d,f,!a),k=le.getLiquidityFromTokenAmountB(m,l,f);b=t?P:k}else b=t?new Le(0):le.getLiquidityFromTokenAmountB(m,d,f);return Oe.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:i,slippage:s,add:a}){var b,g,h,P;let c=ee.getSqrtPriceX64FromTick(n),u=ee.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=le.getAmountsFromLiquidity(ee.priceToSqrtPriceX64(new v(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[ke(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ke(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ke(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),ke(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:Ot(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(c=>!n[c.id]).map(c=>new xt(c.id));(await Tt(e,r)).forEach((c,u)=>{!c||(n[r[u].toBase58()]=Tn.decode(c.data))});let s=t.map(c=>pt(new xt(c.programId),new xt(c.id)).publicKey),a=await Oe.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(C({},c),{[u.id]:F(C({},n[u.id]),{id:new xt(u.id),version:6,programId:new xt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(C({},u.config),{id:new xt(u.config.id),fundOwner:""}),currentPrice:new v(u.price),exBitmapInfo:a[pt(new xt(u.programId),new xt(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 fT({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:r,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var P,k,B,T;let[u,l,m,d]=e<t?[e,t,n,r]:[t,e,r,n],p=ee.priceToSqrtPriceX64(new v(o.price),o.mintA.decimals,o.mintB.decimals),y=ee.getSqrtPriceX64FromTick(u),f=ee.getSqrtPriceX64FromTick(l),[b,g]=[ke(m,(P=o.mintA.extensions)==null?void 0:P.feeConfig,a,!c),ke(d,(k=o.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=le.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:pe),g.amount.sub((T=g.fee)!=null?T:pe));return le.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var ks={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function zu(o){return F(C({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:ks,week:ks,month:ks,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:F(C({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(pe)||(i=i.add(ft)),i}static mulDivFloor(e,t,n){if(n.eq(pe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(pe))throw new Error("division by 0");return e.mul(t).add(n.sub(ft)).div(n)}static x64ToDecimal(e,t){return new v(e.toString()).div(v.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ie(e.mul(v.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Nr).sub(t).mod(Nr)}};function Ge(o,e){return Ts(o.mul(e),64,256)}function Kp(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ts(o,e,t){let n=o.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,r){if(!e.gt(pe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(pe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(pe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(pe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(pe))return e;let i=t.shln(Ro);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,ft,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,r){let i=n.shln(Ro);if(r)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,ft,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<et||e>st)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ie("18445821805675395072"):new ie("18446744073709551616");return(t&2)!=0&&(n=Ge(n,new ie("18444899583751176192"))),(t&4)!=0&&(n=Ge(n,new ie("18443055278223355904"))),(t&8)!=0&&(n=Ge(n,new ie("18439367220385607680"))),(t&16)!=0&&(n=Ge(n,new ie("18431993317065453568"))),(t&32)!=0&&(n=Ge(n,new ie("18417254355718170624"))),(t&64)!=0&&(n=Ge(n,new ie("18387811781193609216"))),(t&128)!=0&&(n=Ge(n,new ie("18329067761203558400"))),(t&256)!=0&&(n=Ge(n,new ie("18212142134806163456"))),(t&512)!=0&&(n=Ge(n,new ie("17980523815641700352"))),(t&1024)!=0&&(n=Ge(n,new ie("17526086738831433728"))),(t&2048)!=0&&(n=Ge(n,new ie("16651378430235570176"))),(t&4096)!=0&&(n=Ge(n,new ie("15030750278694412288"))),(t&8192)!=0&&(n=Ge(n,new ie("12247334978884435968"))),(t&16384)!=0&&(n=Ge(n,new ie("8131365268886854656"))),(t&32768)!=0&&(n=Ge(n,new ie("3584323654725218816"))),(t&65536)!=0&&(n=Ge(n,new ie("696457651848324352"))),(t&131072)!=0&&(n=Ge(n,new ie("26294789957507116"))),(t&262144)!=0&&(n=Ge(n,new ie("37481735321082"))),e>0&&(n=Eu.div(n)),n}static getTickFromPrice(e,t,n){return ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(vt)||e.lt(_t))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ie(t-64),r=Kp(n,32,128),i=new ie("8000000000000000","hex"),s=0,a=new ie(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new ie(0))&&s<Du;){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=r.add(u).mul(new ie(Wu)),d=Ts(m.sub(new ie(qu)),64,128).toNumber(),p=Ts(m.add(new ie(Uu)),64,128).toNumber();return d==p?d:ee.getSqrtPriceX64FromTick(p).lte(e)?p:d}},In=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let i=In.getTickWithPriceAndTickspacing(e,t,n,r),s=ee.getSqrtPriceX64FromTick(i);return ee.sqrtPriceX64ToPrice(s,n,r)}},le=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(pe))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Ro),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),ft,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(pe))throw new Error("sqrtPriceX64A must greater than 0");return r?ne.mulDivCeil(n,t.sub(e),yt):ne.mulDivFloor(n,t.sub(e),yt)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return r?ne.mulDivRoundingUp(a,ft,Ps):a.shrn(Ro)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,Ps,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return le.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=le.getLiquidityFromTokenAmountA(e,n,r,!1),a=le.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return le.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:le.getTokenAmountAFromLiquidity(t,n,r,i),amountB:new ie(0)};if(e.lt(n)){let s=le.getTokenAmountAFromLiquidity(e,n,r,i),a=le.getTokenAmountBFromLiquidity(t,e,r,i);return{amountA:s,amountB:a}}else return{amountA:new ie(0),amountB:le.getTokenAmountBFromLiquidity(t,n,r,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,i,s,a){let{amountA:c,amountB:u}=le.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new ie(new v(c.toString()).mul(l).toFixed(0)),d=new ie(new v(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee: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=le.getAmountsFromLiquidity(u,l,m,r,s),[y,f]=[ke(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),ke(p.amountB,(P=e.mintB.extensions)==null?void 0:P.feeConfig,a,c)],[b,g]=[ke(new ie(new v(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),ke(new ie(new v(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Ot(y.expirationTime,f.expirationTime)}}},kn=class{static swapCompute(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(pe))throw new Error("amountSpecified must not be 0");if(y||(y=s?_t.add(ft):vt.sub(ft)),s){if(y.lt(_t))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(vt))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(pe),g={amountSpecifiedRemaining:d,amountCalculated:pe,sqrtPriceX64:m,tick:u>p?Math.min(p+me.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ie(0)},h=p,P=n[p],k=0,B=!s&&P.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(pe)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(P,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Oe.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:i},h,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=L.nextStartIndex;let{publicKey:W}=Pe(e,t,h);R=W,P=n[h];try{x=j.firstInitializedTick(P,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<et?T.tickNext=et:T.tickNext>st&&(T.tickNext=st),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]=kn.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(Xt)),g.liquidity=le.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}=me.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(Pe(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:pe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,i){let s={sqrtPriceX64Next:new ie(0),amountIn:new ie(0),amountOut:new ie(0),feeAmount:new ie(0)},a=e.gte(t),c=r.gte(pe);if(c){let l=ne.mulDivFloor(r,vr.sub(new ie(i.toString())),vr);s.amountIn=a?le.getTokenAmountAFromLiquidity(t,e,n,!0):le.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?le.getTokenAmountBFromLiquidity(t,e,n,!1):le.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(Xt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromOutput(e,n,r.mul(Xt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=le.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=le.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:le.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:le.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(r.mul(Xt))&&(s.amountOut=r.mul(Xt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new ie(i),vr.sub(new ie(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var We=60,hn=512,j=class{static getTickArrayAddressByTick(e,t,n,r){let i=j.getTickArrayStartIndexByTick(n,r),{publicKey:s}=Pe(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=We)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=me.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*me.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*We,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*We,i=Math.floor(t/r)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*We:e+t*We}static mergeTickArrayBitmap(e){let t=new Cp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,i){let s=Math.floor(r/(n*We));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,hn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,r,i);for(let c of a){let{publicKey:u}=Pe(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,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===r)break}let c=me.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===r)break}let c=me.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<et||e>st}static nextInitTick(e,t,n,r,i){if(me.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<We;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=We-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<We;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let r=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new v(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new v(1).div(t),i=In.getTickWithPriceAndTickspacing(r,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 r=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new v(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new v(1).div(t),i=In.getTickWithPriceAndTickspacing(r,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 Yu=M([be(8),E("bump"),Nt("index"),K(""),Ze("protocolFeeRate"),Ze("tradeFeeRate"),Nt("tickSpacing"),X(w(),8,"")]),Rp=M([Ze("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),X(Y(),1,"")]),Is=M([be(8),Ye("initialized"),K("poolId"),X(Rp,1e3,"observations"),X(Y(),5,"")]),Lp=M([E("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Y("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Y("rewardGrowthGlobalX64")]),Tn=M([be(8),E("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Nt("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),Qe("tickCurrent"),Nt("observationIndex"),Nt("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),E("status"),X(E(),7,""),X(Lp,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")]),Op=M([Y("growthInsideLastX64"),w("rewardAmountOwed")]),Vr=M([be(8),E("bump"),K("nftMint"),K("poolId"),Qe("tickLower"),Qe("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Op,3,"rewardInfos"),X(w(),8,"")]),FT=M([be(8),E("bump"),K("poolId"),Qe("tickLowerIndex"),Qe("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Y(),3,"rewardGrowthInside"),X(w(),8,"")]),Np=M([Qe("tick"),ja("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),X(Y(),3,"rewardGrowthsOutsideX64"),X(Ze(),13,"")]),Lo=M([be(8),K("poolId"),Qe("startTickIndex"),X(Np,We,"ticks"),E("initializedTickCount"),X(E(),115,"")]),ju=M([be(329),X(K(),100,"whitelistMints")]),Qu=M([be(8),K("poolId"),X(X(w(),8),hs,"positiveTickArrayBitmap"),X(X(w(),8),hs,"negativeTickArrayBitmap")]);var Ju=ce("Raydium_Clmm"),Kt={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]},Se=class{static createPoolInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=M([Y("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey: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:zn.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...Kt.createPool,...g]);return new St({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:c,startTime:u,forerunCreate:l}=e,m=Je({fromPublicKey:r,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[zn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Is.span),space:Is.span,programId:n})],{publicKey:f}=Vu(n,a,d,p),{publicKey:b}=ws(n,f,d),{publicKey:g}=ws(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new U(i.programId||je),p,g,new U(s.programId||je),pt(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,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=M([Qe("tickLowerIndex"),Qe("tickUpperIndex"),Qe("tickArrayLowerStartIndex"),Qe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:ut,isSigner:!1,isWritable:!1},{pubkey:zn.programId,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:Hu,isSigner:!1,isWritable:!1},{pubkey:_n,isSigner:!1,isWritable:!1},{pubkey:cn,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([...Kt.openPosition,...J]);return new St({keys:D,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,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=Bs.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(d,p,f),{publicKey:h}=Pe(d,p,b),{publicKey:P}=Ae(n.wallet,y,je),{publicKey:k}=Or(y),{publicKey:B}=gt(d,y),{publicKey:T}=Pn(d,p,r,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),r,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:r,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=Bs.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(d,p,f),{publicKey:h}=Pe(d,p,b),{publicKey:P}=Ae(n.wallet,y,je),{publicKey:k}=Or(y),{publicKey:B}=gt(d,y),{publicKey:T}=Pn(d,p,r,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),r,i,f,b,u,s,a,c,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?pt(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,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=M([Qe("tickLowerIndex"),Qe("tickUpperIndex"),Qe("tickArrayLowerStartIndex"),Qe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:ut,isSigner:!1,isWritable:!1},{pubkey:zn.programId,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:Hu,isSigner:!1,isWritable:!1},{pubkey:_n,isSigner:!1,isWritable:!1},{pubkey:cn,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 Zu(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},J);let G=Buffer.from([...Kt.openPosition,...J]);return new St({keys:D,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,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=Bs.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(p,y,f),{publicKey:h}=Pe(p,y,b),{publicKey:P}=Ae(n.wallet,m,je),{publicKey:k}=Or(m),{publicKey:B}=gt(p,m),{publicKey:T}=Pn(p,y,r,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),r,i,f,b,s,a,c,u,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?pt(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,r,i){let s=M([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:zn.programId,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...Kt.closePosition,...c]);return new St({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=Ae(n.wallet,r.nftMint,je),{publicKey:a}=gt(i,r.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=M([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),Ye("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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:je,isSigner:!1,isWritable:!1},{pubkey:cn,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([...Kt.increaseLiquidity,...T]);return new St({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Pe(c,u,l),{publicKey:p}=Pe(c,u,m),{publicKey:y}=Ae(r.wallet,n.nftMint,je),{publicKey:f}=gt(c,n.nftMint),{publicKey:b}=Pn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?pt(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:r,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Pe(c,u,l),{publicKey:p}=Pe(c,u,m),{publicKey:y}=Ae(r.wallet,n.nftMint,je),{publicKey:f}=gt(c,n.nftMint),{publicKey:b}=Pn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?pt(c,u).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=M([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),Ye("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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:je,isSigner:!1,isWritable:!1},{pubkey:cn,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 Zu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Kt.increaseLiquidity,...T]);return new St({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=M([Y("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:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:nr,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([...Kt.decreaseLiquidity,...S]);return new St({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Pe(u,l,m),{publicKey:y}=Pe(u,l,d),{publicKey:f}=Ae(r.wallet,n.nftMint,c),{publicKey:b}=gt(u,n.nftMint),{publicKey:g}=Pn(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:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let P=[];return P.push(this.decreaseLiquidityInstruction(u,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?pt(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,r,i,s,a,c,u,l,m,d,p,y,f,b,g){let h=M([w("amount"),w("otherAmountThreshold"),Y("sqrtPriceLimitX64"),Ye("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:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:nr,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([...Kt.swap,...B]);return new St({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,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,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,pt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=M([w("openTime"),w("endTime"),Y("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:zn.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Q(l),endTime:Q(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Kt.initReward,...f]);return new St({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=Fu(i,s,r.mint).publicKey,c=Co(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=M([E("rewardIndex"),Y("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:cn,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:Q(l),endTime:Q(m)},f);let b=Buffer.from([...Kt.setRewardEmissions,...f]);return new St({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.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)&&Ju.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Co(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let c=M([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:nr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Kt.collectReward,...l]);return new St({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Ju.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,r,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:r,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===r.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 Vp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fp}from"@solana/spl-token";import{PublicKey as _p}from"@solana/web3.js";import $u from"bn.js";var ec=new $u(25),tc=new $u(1e4),Mp={4:3,5:3};var vp=ce("Raydium_liquidity_serum");function nc({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));r=_p.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw vp.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}import Mo from"bn.js";function Fr({programId:o}){let{publicKey:e}=ue([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function Bn({name:o,programId:e,marketId:t}){let{publicKey:n}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function Ep({programId:o,marketId:e}){let{publicKey:t}=ue([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Ks({programId:o}){return ue([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function oc({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,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}=Ks({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=Ep({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}=nc({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:P,lookupTableAccount:Vp.default,configId:Fr({programId:a})}}var xs;async function bI({connection:o,poolKeysList:e,config:t}){xs||(xs=new Un({connection:o}),await xs.initStableModelLayout());let n=e.map(s=>Ou({poolKeys:s}));return(await Ba(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=xa(s,"GetPoolData"),c=new Mo(Wt(a,"status")),u=Number(Wt(a,"coin_decimals")),l=Number(Wt(a,"pc_decimals")),m=Number(Wt(a,"lp_decimals")),d=new Mo(Wt(a,"pool_coin_amount")),p=new Mo(Wt(a,"pool_pc_amount")),y=new Mo(Wt(a,"pool_lp_supply")),f="0";try{f=Wt(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Mo(f)}})}var Ss={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Er=o=>{let e={},t=Fp.toBase58();return Object.keys(o).map(n=>{let r=o[n],[i,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:it({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:it({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new v(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new v(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new v(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Ss,week:Ss,month:Ss,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:Fr({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:it({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import lt from"bn.js";var _o=class extends xe{constructor(t){super(t);this.stableLayout=new Un({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:i}){let s=new lt(new v(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Cr(t[i?"mintB":"mintA"]),[c,u]=[new lt(new v(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new lt(new v(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new lt(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:",`${r.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=Ee;s.isZero()||(d=m==="base"?ur(s.mul(u),c):ur(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=ur(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Fe(new lt(1)).add(r).mul(d).quotient,b=new fe(a,d),g=new fe(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:i,amountInB:s,fixedSide:a,config: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 tt(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=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Ft=await m.handleTokenAccount({side:"in",amount:W,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Ft,ot=Ce(Ft,["tokenAccount"]);G.addInstruction(ot);let On=await m.handleTokenAccount({side:"in",amount:D,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Rn}=On,ln=Ce(On,["tokenAccount"]);G.addInstruction(ln);let Qo=await m.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Yt}=Qo,Ln=Ce(Qo,["tokenAccount"]);return G.addInstruction(Ln),G.addInstruction({instructions:[Ru({poolInfo:n,poolKeys:J,userKeys:{baseTokenAccount:q,quoteTokenAccount:Rn,lpTokenAccount:Yt,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:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new tt(n.mintA.address),new tt(n.mintB.address),new tt(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=Ce(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=Ce(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[bs({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:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Qn,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||Ae(this.scope.ownerPubKey,q.accountInfo.mint,Qn).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=r.add(a!=null?a:new lt(0)),k=t.mintA.address===ye.WSOL.mint.toString(),B=t.mintB.address===ye.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(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:Qn,mint:new tt(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=bt[s.programId],ot=$e({programId:new tt(s.programId),poolId:new tt(s.id),owner:this.scope.ownerPubKey,version:q}),Rn,ln=await this.scope.connection.getAccountInfo(ot);if(ln&&(Rn=qn(q).decode(ln.data)),q!==6&&!Rn){let{instruction:jt,instructionType:$r}=ho({id:new tt(s.id),programId:new tt(s.programId),version:q,ledger:ot,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[jt],instructionTypes:[$r]})}let Yt=[];for(let jt of s.rewardInfos){let $r=jt.mint.address===ye.WSOL.mint.toString();if(g[jt.mint.address])Yt.push(g[jt.mint.address]);else{let{account:Gs,instructionParams:Xs}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(jt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!$r,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Gs||this.logAndCreateError("farm reward account not found:",jt.mint.address),Xs&&b.addInstruction(Xs),Yt.push(Gs)}}let Ln=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ft={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:Ln,lpAccount:h,rewardAccounts:Yt},On=bt[s.programId],Qo=On===6?ko(Ft):On===5?To(Ft):Io(Ft),Rc={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};b.addInstruction({instructions:[Qo],instructionTypes:[Rc[On]]})}let I=await this.getAmmPoolKeys(t.id),L=bs({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 Se.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:r,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&&r.mint.equals(rc),h=u.useSOLBalance&&i.mint.equals(rc),P=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});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=oc({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:I,instructionType:L}=Lu(F(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Ae(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=Fr({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return ku.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,c]=[r.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=Su(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 lt(0),P=new lt(0);if(!g.isZero())if(f){P=tn(g.mul(ec),tc);let I=g.sub(P),L=p.add(I);h=y.mul(I).div(L)}else{P=g.mul(new lt(2)).div(new lt(1e4));let I=g.sub(P);d==="quote"?h=new lt(Bu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber())):h=new lt(xu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber()))}let k=new lt(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:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===Z.toBase58(),h=y&&b.address===Z.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),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:Qn,mint:new tt(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:[Rr({version:x,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[x===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await De(this.scope.connection,t.map(l=>({pubkey:new tt(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=So.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 De(this.scope.connection,s.map(l=>({pubkey:new tt(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 lt(Dp.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),r=Er({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ae}from"@solana/web3.js";import wt from"bn.js";import{AccountLayout as ic,TOKEN_PROGRAM_ID as sc}from"@solana/spl-token";var vo=class extends xe{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)||ae.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new wt(new ae(r.address).toBuffer()).gt(new wt(new ae(i.address).toBuffer()))?[i,r,new v(1).div(a)]:[r,i,a],b=ee.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Se.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:[]}},Gu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),P=n.useSOLBalance&&e.mintB.address===Z.toString(),[k,B]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(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 ae(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 Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,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:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===Z.toBase58(),h=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1: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 ae(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 Se.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:r,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===Z.toString(),g=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(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 ae(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=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:r,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===Z.toString(),b=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1: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 ae(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1: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=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===Z.toString(),f=i.useSOLBalance&&t.mintB.address===Z.toString(),b,g,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(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 ae(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===Z.toString(),W;if(I.mint.address===t.mintA.address)W=b;else if(I.mint.address===t.mintB.address)W=g;else{let{account:D,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(I.mint.programId),mint:new ae(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 Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,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 Se.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Se.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===Z.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(n.mint.address),mint:new ae(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new wt(new v(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:r,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Se.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ae(n.mint.programId),mint:new ae(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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===Z.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(m.mint.programId),mint:new ae(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new wt(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=Se.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ae(m.mint.programId),mint:new ae(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:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(Z),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new wt(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:r,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Se.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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===Z.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(m.mint.programId),mint:new ae(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new wt(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=Se.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ae(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:r=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(Z),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(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:r,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Se.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:r=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(Z),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(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:r,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Se.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:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=c.useSOLBalance&&e.mintA.address===Z.toBase58(),b=c.useSOLBalance&&e.mintB.address===Z.toBase58(),g;!s||s.equals(new v(0))?g=y?_t.add(new wt(1)):vt.sub(new wt(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 ae(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?r: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 ae(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:r}: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(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P},inputMint:new ae(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:u})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)r?Ae(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(P=>!P.liquidity.isZero()||P.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===Z.toString(),y=n.useSOLBalance&&d.mintB.address===Z.toString(),f=u[d.mintA.address];if(!f){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ae(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=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 ae(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=P,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let P of d.rewardDefaultInfos){let k=n.useSOLBalance&&P.mint.address===Z.toString(),B=u[P.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(P.mint.programId),mint:new ae(P.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});B=T,S&&l.addInstruction(S)}u[P.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let P of t[m.id]){let k=Se.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new wt(0),amountMinA:new wt(0),amountMinB:new wt(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(Co(e).publicKey);return t?ju.decode(t.data).whitelistMints.filter(r=>!r.equals(ae.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new wt(1))).map(s=>gt(new ae(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=Vr.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 De(this.scope.connection,e.map(i=>({pubkey:new ae(i)})),t),r={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=Tn.decode(s.accountInfo.data),c=ee.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=F(C({},a),{currentPrice:c,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),r=await De(this.scope.connection,Array.from(n).map(c=>({pubkey:new ae(c)}))),i={};r.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Yu.decode(c.accountInfo.data))});let s=await Oe.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:it({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||sc.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?un((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:it({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||sc.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?un((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 Oe.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),r=await Vn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ae(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await De(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=zu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(ic.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(ic.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 zr,TOKEN_PROGRAM_ID as xn,AccountLayout as tf}from"@solana/spl-token";import uc from"bn.js";var Cs=new uc(1e6);function Wp(o,e,t){return o.mul(e).add(t).sub(new uc(1)).div(t)}function ac(o,e,t){return o.mul(e).div(t)}var Dr=class{static tradingFee(e,t){return Wp(e,t,Cs)}static protocolFee(e,t){return ac(e,t,Cs)}static fundFee(e,t){return ac(e,t,Cs)}};import Vo from"bn.js";function Wr(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function qp(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=Wr(o,e);if(n.gt(Yn)){t=t.add(new Vo(1));let r=o.div(t);n=Wr(o,t),n.gt(Yn)&&(r=r.add(new Vo(1)))}return[t,e]}var Yn=new Vo(0),qr=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=qp(r,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,r,i){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Wr(e.mul(n),t).gt(Yn)&&s.gt(Yn)&&(s=s.add(new Vo(1))),Wr(e.mul(r),t).gt(Yn)&&a.gt(Yn)&&(a=a.add(new Vo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var cc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(cc||{}),Ur=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,r){let i=Dr.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=qr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Up=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Gp=Buffer.from("amm_config","utf8"),Xp=Buffer.from("pool","utf8"),zp=Buffer.from("pool_lp_mint","utf8"),Qp=Buffer.from("pool_vault","utf8"),Yp=Buffer.from("observation","utf8");function jn(o){return ue([Up],o)}function jp(o,e){return ue([Gp,Jp(e)],o)}function Hp(o,e,t,n){return ue([Xp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Zp(o,e){return ue([zp,e.toBuffer()],o)}function lc(o,e,t){return ue([Qp,e.toBuffer(),t.toBuffer()],o)}function Rs(o,e){return ue([Yp,e.toBuffer()],o)}function Jp(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function mc({programId:o,mintA:e,mintB:t}){let n=jp(o,0).publicKey,r=jn(o).publicKey,i=Hp(o,n,e,t).publicKey,s=Zp(o,i).publicKey,a=lc(o,i,e).publicKey,c=lc(o,i,t).publicKey,u=Rs(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Fo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ls,TOKEN_2022_PROGRAM_ID as dc,ASSOCIATED_TOKEN_PROGRAM_ID as $p}from"@solana/spl-token";var ef=ce("Raydium_cpmm"),Eo={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 pc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=M([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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:$p,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:P},T),new Fo({keys:B,programId:o,data:Buffer.from([...Eo.initialize,...T])})}function fc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=M([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ls,isSigner:!1,isWritable:!1},{pubkey:dc,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 ef.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Fo({keys:b,programId:o,data:Buffer.from([...Eo.deposit,...g])})}function yc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=M([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ls,isSigner:!1,isWritable:!1},{pubkey:dc,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:or,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Fo({keys:b,programId:o,data:Buffer.from([...Eo.withdraw,...g])})}function Gr(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=M([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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 Fo({keys:g,programId:o,data:Buffer.from([...Eo.swapBaseInput,...h])})}function HB(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=M([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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 Fo({keys:g,programId:o,data:Buffer.from([...Eo.swapBaseOutput,...h])})}import Xe from"bn.js";var bc=M([be(8),E("bump"),Ye("disableCreatePool"),Nt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),Xr=M([be(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 Do=class extends xe{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 De(this.scope.connection,e.map(m=>({pubkey:new te(m)}))),r={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Xr.decode(d.accountInfo.data);r[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 De(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]]=bc.decode(y.data)}}let c={},u=await De(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 Xe(tf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){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,r)=>{var c,u,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(C({},n),{[r]:F(C({},i),{id:new te(r),configInfo:i.configInfo,version:7,authority:jn(i.programId).publicKey,mintA:it({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?un((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:it({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?un((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Vn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=it({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?un(n[t.mintA.toBase58()].feeConfig):void 0}}),i=it({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?un(n[t.mintB.toBase58()].feeConfig):void 0}}),s=it({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:xn.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:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new v(t.vaultAAmount.toString()).div(10**r.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:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:jn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=m,u=Ce(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var W,D,J;let d=r.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),p=new Xe(new te(u.mintA.address).toBuffer()).lte(new Xe(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=r.useSOLBalance&&y.address===zr.toBase58(),P=r.useSOLBalance&&f.address===zr.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=mc({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[pc(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,Ae(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new te((D=y.programId)!=null?D:xn),new te((J=f.programId)!=null?J:xn),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:r,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"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},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 Fe(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new v(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,P=t.mintA.address===zr.toString(),k=t.mintB.address===zr.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?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?r: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:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let W=await m.getCreatedTokenAccount({mint:new te(t.lpMint.address)}),ot=await m.handleTokenAccount({side:"out",amount:0,mint:new te(t.lpMint.address),tokenAccount:W,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:D}=ot,J=Ce(ot,["tokenAccount"]);B.addInstruction(J);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Fe(new Xe(1)).sub(s);return B.addInstruction({instructions:[fc(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:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Fe(new Xe(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(r.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(r.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ke(l,t.mintA.extensions.feeConfig,d,!1),ke(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(Z),k=h.equals(Z),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:[yc(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),r,l.sub((D=p.fee)!=null?D:new Xe(0)),m.sub((J=y.fee)!=null?J:new Xe(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:r,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 Xe((1-s)*1e4)).div(new Xe(1e4));let b=t.mintA.address===Z.toBase58(),g=t.mintB.address===Z.toBase58(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new te((S=t.mintA.programId)!=null?S:xn),owner:this.scope.ownerPubKey,createInfo:b||!r?{payer:this.scope.ownerPubKey,amount:r?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});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:xn),owner:this.scope.ownerPubKey,createInfo:g||r?{payer:this.scope.ownerPubKey,amount:r?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),(!h||!k)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:d});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[Gr(new te(t.programId),this.scope.ownerPubKey,new te(T.authority),new te(T.config.id),new te(t.id),r?h:k,r?k:h,new te(T.vault[r?"A":"B"]),new te(T.vault[r?"B":"A"]),new te((R=t[r?"mintA":"mintB"].programId)!=null?R:xn),new te((I=t[r?"mintB":"mintA"].programId)!=null?I:xn),r?y:f,r?f:y,Rs(new te(t.programId),new te(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[r?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),p.addCustomComputeBudget(c),p.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Ur.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 Xe((1-r)*1e4)).div(new Xe(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:r,slippage:i,epochInfo:s,baseIn:a}){var h,P,k,B,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new Xe(new v(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ke(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Xe(0)),d=new Xe(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:Ee,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=nf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=ke(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Fe(new Xe(1)).add(i),g=ke(b.mul(f.amount.sub((B=f.fee)!=null?B:new Xe(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 nf(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new Xe(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new Xe(1))),{amountA:r,amountB:i}}import{PublicKey as Kn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ke,TOKEN_2022_PROGRAM_ID as jr,createTransferInstruction as kc}from"@solana/spl-token";import Hr from"bn.js";import{TOKEN_PROGRAM_ID as Os,TOKEN_2022_PROGRAM_ID as of,ASSOCIATED_TOKEN_PROGRAM_ID as rf}from"@solana/spl-token";import{PublicKey as z,TransactionInstruction as Ns,SystemProgram as Ms}from"@solana/web3.js";import Sn from"bn.js";function Qx(o,e,t,n,r,i,s,a,c,u,l,m){let d=M([E("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:Ms.programId,isSigner:!1,isWritable:!1},{pubkey:Os,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:r,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=Ie(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=Ie(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=Ie(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 Ns({keys:p,programId:o,data:y})}function Yx(o,e,t,n,r,i,s,a,c,u){let l=M([E("instruction")]),m=[{pubkey:Ms.programId,isSigner:!1,isWritable:!1},{pubkey:Os,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:r,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=Ie(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=Ie(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=Ie(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 Ns({keys:m,programId:o,data:d})}function sf(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[A({pubkey:Os,isWritable:!1}),A({pubkey:of,isWritable:!1}),A({pubkey:rf,isWritable:!1}),A({pubkey:Ms.programId,isWritable:!1}),A({pubkey:e,isSigner:!0})];b.push(A({pubkey:t})),b.push(A({pubkey:r}));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:r})):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:or})),b.push(A({pubkey:pt(new z(x.programId),new z(x.id)).publicKey})),f.push(af(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:Ma,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=M([E("insId"),w("amountIn"),w("amountOut"),X(Y(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new Ns({keys:b,programId:o,data:B})}function af(o,e){if(o)if(e){let t=new Sn(o).div(new Sn(25));return t.gt(Mr)?t:Mr}else{let t=new Sn(o).mul(new Sn(25));return t.lt(_r)?t:_r}else return e?Mr:_r}function gc({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ie(m),p=t.equals(d.mintA.address)?_t.add(ft):vt.sub(ft);return Se.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new Sn(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:[Gr(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:[Rr({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 Sn(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:[sf(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Sn(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var Ac={[gr.toBase58()]:3},wc={3:gr};var _s=M([be(5),be(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"),be(7)]),Pc={3:_s};import{PublicKey as hc}from"@solana/web3.js";var Qr=ce("Serum"),Yr=class{static getProgramId(e){let t=wc[e];return t||Qr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Ac[t];return n||Qr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Pc[e];return t||Qr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],r=0,i;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));i=hc.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return Qr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:hc.default,nonce:r}}};var Qt=new Hr(0),Wo=class extends xe{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Z));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:r=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Q(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Mt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Mt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),po({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),r.length&&i.addInstruction({instructions:[po({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Mt({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:r,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(Z),m=u.amount.token.mint.equals(Z),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?jr:Ke,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?jr:Ke);else{let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?jr:Ke,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:[Mt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ke})],endInstructionTypes:[V.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?jr:Ke)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),P=gc({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:[kc(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:[kc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]})}return a.addInstruction(P),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:P.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:P.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Ki,clmm:n=Ci,cpmm:r=Ri}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:So.offsetOf("baseMint"),length:64}}),s=M([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=M([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Tn.span}],dataSlice:{offset:Tn.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(r,{dataSlice:{offset:Xr.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:r,cpmmPools:i}){e=e.toString()===Kn.default.toString()?Z:e,t=t.toString()===Kn.default.toString()?Z:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,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:Ke,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:Ke,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:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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 r=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Er(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new Kn(f.mintA.address),programId:Ke,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new Kn(f.mintB.address),programId:Ke,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(Ke)?(r.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(b),f.mintProgramB.equals(Ke)?(r.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let u=await Vn({connection:this.scope.connection,mints:Array.from(r).map(f=>new Kn(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:r,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 Hr(0):e.raw.mul(new Hr(l.feeBps.toNumber())).div(new Hr(1e4)),d=e.raw.sub(m),p=new fe(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:mt(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(r)){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 ln,Yt,Ln,Ft;let ot=G===void 0?Qt:G.data.amountOut.amount.raw.sub((Yt=(ln=G.data.amountOut.fee)==null?void 0:ln.raw)!=null?Yt:Qt),Rn=q===void 0?Qt:q.data.amountOut.amount.raw.sub((Ft=(Ln=q.data.amountOut.fee)==null?void 0:Ln.raw)!=null?Ft:Qt);return ot.lt(Rn)?1:-1})[0];if(D===void 0)continue;let J=new fe(Cr(W),D.data.amountOut.amount.raw.sub((h=(g=D.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Qt));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 qe({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:Qt)}).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 fe(D.data.amountOut.amount.token,((S=(T=D.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Qt).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:Qt)):void 0,middleToken:D.data.amountOut.amount.token,poolReady:D.data.poolReady&&q.poolReady,poolType:[D.data.poolType,q.poolType],feeConfig:y,expirationTime:Ot(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(Qt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,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}=Oe.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<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[P],expirationTime:Ot(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:xo(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xo(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new fe(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut: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:xo(F(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xo(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new fe(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let r=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(r.size>0){let u=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});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(r));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 De(this.scope.connection,Array.from(s).map(l=>({pubkey:new Kn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=_s.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Yr.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:Ks({programId:new Kn(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:jn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:it({address:u.mintLp.toBase58(),programId:Ke.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 uf}from"@solana/spl-token";import{PublicKey as cf,Transaction as vs,TransactionInstruction as lf}from"@solana/web3.js";import Tc from"bn.js";var nt=class extends xe{static getPdaPoolId(e,t){return ue([nt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return ue([nt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Tc(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>nt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<nt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>nt.getPdaOwnerId(t,m,r,l).publicKey));let c=await Tt(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!==nt.POOL_LAYOUT.span||b.data.length!==nt.OWNER_LAYOUT.span)continue;let g=nt.POOL_LAYOUT.decode(f.data),h=nt.OWNER_LAYOUT.decode(b.data),P=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new Tc(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:nt.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(),r=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(ye.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!c.mintAddress.equals(ye.WSOL.mint),associatedOnly:c.mintAddress.equals(ye.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i={};for(let 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(ye.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(ye.WSOL.mint),associatedOnly:m.mintAddress.equals(ye.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:r,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return pr(c,[r,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new vs().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new vs().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new vs().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=M([]),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:uf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new lf({keys:i,programId:e,data:a})}},Pt=nt;Pt.CLAIMED_NUM=3,Pt.POOL_LAYOUT=M([be(8),E("bump"),E("status"),w("openTime"),w("endTime"),K("ammId"),X(M([E("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),Pt.OWNER_LAYOUT=M([be(8),E("bump"),E("version"),K("poolId"),K("owner"),w("lpAmount"),X(M([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),Pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new cf(e)),Pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as qo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kc}from"@solana/spl-token";import Uo from"bn.js";import{TransactionInstruction as df,SYSVAR_RENT_PUBKEY as pf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ic}from"@solana/spl-token";import{createInitializeAccountInstruction as Bc}from"@solana/spl-token";import{SystemProgram as Cn,Transaction as xc}from"@solana/web3.js";function mf(o="accountFlags"){let e=new kr(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Vs=M([be(5),mf("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"),be(7)]);function ff({programId:o,marketInfo:e}){let t=M([E("version"),Ze("instruction"),w("baseLotSize"),w("quoteLotSize"),Nt("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:pf,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),r=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},r),new df({keys:n,programId:o,data:r})}async function Sc({connection:o,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new xc,r=await o.getMinimumBalanceForRentExemption(165);n.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:Ic}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:Ic}),Bc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Bc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new xc;return i.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(Vs.span),space:Vs.span,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),ff({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 Hn=class extends xe{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,txVersion:u,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=Je({fromPublicKey:m,programId:i}),p=Je({fromPublicKey:m,programId:i}),y=Je({fromPublicKey:m,programId:i}),f=Je({fromPublicKey:m,programId:i}),b=Je({fromPublicKey:m,programId:i}),g=Je({fromPublicKey:m,programId:Kc}),h=Je({fromPublicKey:m,programId:Kc}),P=0,k=new Uo(100);function B(){let W=new Uo(0);for(;;)try{return{vaultOwner:qo.createProgramAddressSync([d.publicKey.toBuffer(),W.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:W}}catch{if(W.iaddn(1),W.gt(new Uo(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=B(),x=new Uo(Math.round(10**e.decimals*n)),R=new Uo(Math.round(n*10**t.decimals*r));if(x.eq(Ee))throw Error("lot size is too small");if(R.eq(Ee))throw Error("tick size or lot size is too small");let I=await Sc({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 qo(e.mint),quoteMin:new qo(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 qo(e.mint),quoteMin:new qo(t.mint)}})}};import{PublicKey as Xo}from"@solana/web3.js";import{TransactionInstruction as Es,SYSVAR_CLOCK_PUBKEY as yf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ds}from"@solana/spl-token";var Fs=M([E("instruction"),Ua("amount")]),Go=M([E("instruction")]);function LK({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:Ds,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:di,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],r=Buffer.alloc(Fs.span);return Fs.encode({instruction:1,amount:Number(e)},r),new Es({keys:n,programId:o,data:r})}function Zr({programId:o},e){let t=[{pubkey:Ds,isSigner:!1,isWritable:!1},{pubkey:di,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Go.span);return Go.encode({instruction:2},n),new Es({keys:t,programId:o,data:n})}function Ws(o){let{poolConfig:e,userKeys:t,side:n}=o,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Go.span);Go.encode({instruction:2},s);let a=[{pubkey:Ds,isWritable:!1,isSigner:!1},{pubkey:yf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Es({programId:e.programId,keys:a,data:s})}import Cc from"bn.js";var bf={[co.IDO_PROGRAM_ID_V1.toString()]:1,[co.IDO_PROGRAM_ID_V2.toString()]:2,[co.IDO_PROGRAM_ID_V3.toString()]:3,[co.IDO_PROGRAM_ID_V4.toString()]:4},Zn=class extends xe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=bf[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ie(t),[u,l]=[!new Cc(e.coin).isZero(),!new Cc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(Z),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(Z),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Zr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Xo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Zr({programId:new Xo(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Xo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Zr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Xo(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 Xo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Ws(F(C({},g),{side:"base"}))]:[],...l?[Ws(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as gf}from"@solana/web3.js";import{MintLayout as Af,TOKEN_2022_PROGRAM_ID as qs,TOKEN_PROGRAM_ID as Us}from"@solana/spl-token";var zo=class extends xe{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),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(Rt.address,Rt),this._mintGroup.official.add(Rt.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")?qs.toBase58():Us.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")?qs.toBase58():Us.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")?qs.toBase58():Us.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(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return Rt;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 gf(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Af.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 Jr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new It(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ce("Raydium"),this.farm=new Bo({scope:this,moduleName:"Raydium_Farm"}),this.account=new fo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new _o({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new zo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Wo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new vo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Do({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Hn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Zn({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=wf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,c=new wr({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),u=new Jr(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(Pr);return this._owner.publicKey}setOwner(e){return this._owner=e?new It(e):void 0,this}get connection(){if(!this._connection)throw new Error(Ea);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(Pr),new Error(Pr)}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 N0=o=>o;export{qb as ACCOUNT_TYPE_SIZE,fg as ALL_PROGRAM_ID,wp as AMM_CONFIG_SEED,am as AMM_STABLE,Ki as AMM_V4,Vf as ANAMint,Me as API_URLS,nm as AccountType,wr as Api,Du as BIT_PRECISION,tn as BNDivCeil,bn as BNLayout,Xy as BN_100,zy as BN_1000,Qy as BN_10000,Gy as BN_FIVE,ga as BN_ONE,dn as BN_TEN,Uy as BN_THREE,qy as BN_TWO,Ee as BN_ZERO,TA as BitStructure,qa as Blob,Ci as CLMM_PROGRAM_ID,di as CLOCK_PROGRAM_ID,pm as CREATE_CPMM_POOL_AUTH,fm as CREATE_CPMM_POOL_FEE_ACC,Ri as CREATE_CPMM_POOL_PROGRAM,vo as Clmm,Yu as ClmmConfigLayout,Se as ClmmInstrument,qr as ConstantProductCurve,bc as CpmmConfigInfoLayout,Dr as CpmmFee,Xr as CpmmPoolInfoLayout,no as Currency,pn as CurrencyAmount,Ur as CurveCalculator,yg as DEVNET_PROGRAM_ID,qg as DEV_API_URLS,bm as DEV_CREATE_CPMM_POOL_AUTH,gm as DEV_CREATE_CPMM_POOL_FEE_ACC,ym as DEV_CREATE_CPMM_POOL_PROGRAM,rp as DataElement,Ff as ETHMint,hs as EXTENSION_TICKARRAY_BITMAP_SIZE,lu as FARM_LOCK_MINT,mu as FARM_LOCK_VAULT,xi as FARM_PROGRAM_ID_V3,Si as FARM_PROGRAM_ID_V5,Fn as FARM_PROGRAM_ID_V6,bt as FARM_PROGRAM_TO_VERSION,pu as FARM_VERSION_TO_LEDGER_LAYOUT,du as FARM_VERSION_TO_STATE_LAYOUT,pg as FEE_DESTINATION_ID,vr as FEE_RATE_DENOMINATOR,Cs as FEE_RATE_DENOMINATOR_VALUE,Sp as FETCH_TICKARRAY_COUNT,xp as Fee,re as Fraction,co as IDO_ALL_PROGRAM,cm as IDO_PROGRAM_ID_V1,lm as IDO_PROGRAM_ID_V2,mm as IDO_PROGRAM_ID_V3,dm as IDO_PROGRAM_ID_V4,rr as INSTRUCTION_PROGRAM_ID,V as InstructionType,_a as JupTokenType,tc as LIQUIDITY_FEES_DENOMINATOR,ec as LIQUIDITY_FEES_NUMERATOR,Ma as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,Mp as LIQUIDITY_VERSION_TO_SERUM_VERSION,ek as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Wu as LOG_B_2_X32,qu as LOG_B_P_ERR_MARGIN_LOWER_X64,Uu as LOG_B_P_ERR_MARGIN_UPPER_X64,yr as LOOKUP_TABLE_CACHE,lo as Layout,le as LiquidityMath,Mc as LogLevel,ti as Logger,Vs as MARKET_STATE_LAYOUT_V2,_s as MARKET_STATE_LAYOUT_V3,Pc as MARKET_VERSION_TO_STATE_LAYOUT,Ia as MAX_BASE64_SIZE,vt as MAX_SQRT_PRICE_X64,_r as MAX_SQRT_PRICE_X64_SUB_ONE,st as MAX_TICK,nr as MEMO_PROGRAM_ID,or as MEMO_PROGRAM_ID2,_n as METADATA_PROGRAM_ID,_t as MIN_SQRT_PRICE_X64,Mr as MIN_SQRT_PRICE_X64_ADD_ONE,et as MIN_TICK,Gn as MODEL_DATA_PUBKEY,Yr as Market,ne as MathUtil,Ps as MaxU64,Eu as MaxUint128,Xt as NEGATIVE_ONE,vf as NRVMint,ft as ONE,sm as OPEN_BOOK_PROGRAM,Ip as OPERATION_SEED,Is as ObservationInfoLayout,Rp as ObservationLayout,ju as OperationLayout,Vi as OptionLayout,It as Owner,Cf as PAIMint,kp as POOL_REWARD_VAULT_SEED,Pp as POOL_SEED,Bp as POOL_TICK_ARRAY_BITMAP_SEED,hp as POOL_VAULT_SEED,vu as POSITION_SEED,Fe as Percent,va as PoolFetchType,Tn as PoolInfoLayout,Oe as PoolUtils,Vr as PositionInfoLayout,Op as PositionRewardInfoLayout,No as PositionUtils,qe as Price,FT as ProtocolPositionLayout,Nr as Q128,yt as Q64,Kf as RAYMint,ut as RENT_PROGRAM_ID,Jr as Raydium,Lp as RewardInfo,cc as RoundDirection,bi as Rounding,um as Router,Ac as SERUM_PROGRAMID_TO_VERSION,gr as SERUM_PROGRAM_ID_V3,wc as SERUM_VERSION_TO_PROGRAMID,Va as SESSION_KEY,ve as SOLMint,Rt as SOL_INFO,Kh as SPL_MINT_LAYOUT,Rf as SRMMint,Li as STORAGE_KEY,ir as SYSTEM_PROGRAM_ID,ee as SqrtPriceMath,Un as StableLayout,Fi as Structure,kn as SwapMath,hn as TICK_ARRAY_BITMAP_SIZE,Tp as TICK_ARRAY_SEED,We as TICK_ARRAY_SIZE,Sk as TICK_SPACINGS,Ve as TOKEN_WSOL,zt as TickArrayBitmap,Qu as TickArrayBitmapExtensionLayout,Oo as TickArrayBitmapExtensionUtils,Lo as TickArrayLayout,Np as TickLayout,In as TickMath,me as TickQuery,j as TickUtils,ye as Token,fe as TokenAmount,br as TxBuilder,fn as TxVersion,Ro as U64Resolution,Ck as U64_IGNORE_RANGE,Mi as UInt,Lf as USDCMint,_f as USDHMint,Of as USDTMint,im as UTIL1216,Ei as Union,uu as Voter,Ed as VoterDepositEntry,Fd as VoterLockup,au as VoterRegistrar,Vd as VoterVotingMintConfig,Z as WSOLMint,kr as WideBits,qt as WrappedLayout,pe as ZERO,pa as _100_PERCENT,A as accountMeta,Cy as add,dr as addComputeBudget,ps as addLiquidityLayout,uw as array,Qi as associatedLedgerAccountLayout,_i as bits,be as blob,Ye as bool,ss as calFarmRewardAmount,Wp as ceilDiv,oo as checkLegacyTxSize,ro as checkV0TxSize,Ti as chunkArray,Go as claimLayout,zu as clmmComputeInfoToApiInfo,Mt as closeAccountInstruction,ci as commonSystemAccountMeta,ho as createAssociatedLedgerAccountInstruction,ce as createLogger,ku as createPoolFeeLayout,Lu as createPoolV4InstructionV2,$h as createPoolV4Layout,Ut as createWSolAccountInstructions,ZA as cstr,py as currencyEquals,Ul as decimalToFraction,pd as decodeBool,By as div,ur as divCeil,rt as dwLayout,fd as encodeBool,cA as endlessRetry,Dl as eq,zA as f32,QA as f32be,YA as f64,jA as f64be,Zi as farmAddRewardLayout,pP as farmLedgerLayoutV3_1,bo as farmLedgerLayoutV3_2,fP as farmLedgerLayoutV5_1,iu as farmLedgerLayoutV5_2,su as farmLedgerLayoutV6_1,yu as farmRewardInfoToConfig,ji as farmRewardLayout,Hi as farmRewardRestartLayout,vd as farmRewardTimeInfoLayout,ou as farmStateV3Layout,ru as farmStateV5Layout,yo as farmStateV6Layout,EP as fetchMultipleFarmInfoAndUpdate,bI as fetchMultipleInfo,Vn as fetchMultipleMintInfos,ue as findProgramAddress,ls as fixedSwapInLayout,ms as fixedSwapOutLayout,ac as floorDiv,pr as forecastTransactionSize,fp as formatLayout,Je as generatePubKey,Ae as getATAAddress,fu as getAssociatedAuthority,Fr as getAssociatedConfigId,$e as getAssociatedLedgerAccount,Ao as getAssociatedLedgerPoolAccount,Ep as getAssociatedOpenOrders,oc as getAssociatedPoolKeys,jp as getCpmmPdaAmmConfigId,Hp as getCpmmPdaPoolId,mc as getCreatePoolKeys,La as getDate,as as getDepositEntryIndex,xu as getDxByDyBaseIn,Bu as getDyByDxBaseIn,Ob as getEpochInfo,qn as getFarmLedgerLayout,Dd as getFarmStateLayout,Ks as getLiquidityAssociatedAuthority,Bn as getLiquidityAssociatedId,fT as getLiquidityFromAmounts,Ky as getMax,Tt as getMultipleAccountsInfo,De as getMultipleAccountsInfoWithCustomFlags,Ii as getMultipleLookupTableInfo,Ik as getPdaAmmConfigId,pt as getPdaExBitmapAccount,Zp as getPdaLpMint,Or as getPdaMetadataKey,Rs as getPdaObservationId,Co as getPdaOperationAccount,gt as getPdaPersonalPositionAddress,jn as getPdaPoolAuthority,Vu as getPdaPoolId,Fu as getPdaPoolRewardVaulId,ws as getPdaPoolVaultId,Pn as getPdaProtocolPositionAddress,Pe as getPdaTickArrayAddress,lc as getPdaVault,vn as getRecentBlockHash,es as getRegistrarAddress,Pm as getSessionKey,Su as getStablePrice,rm as getTime,Pb as getTimestamp,is as getTokenOwnerRecordAddress,kg as getTransferAmountFee,ke as getTransferAmountFeeV2,os as getVoterAddress,rs as getVoterWeightRecordAddress,ns as getVotingMintAuthority,ts as getVotingTokenMint,jd as governanceCreateTokenOwnerRecord,IA as greedy,El as gt,Iy as gte,ja as i128,wk as i16ToBytes,Lr as i32ToBytes,Tr as i64,Ya as i8,ds as initPoolLayout,Xi as initTokenAccountInstruction,ff as initializeMarket,sg as intersection,Na as isDateAfter,Oa as isDateBefore,Gl as isDecimal,Sy as isMeaningfulNumber,Ra as isNumber,Ji as isValidFarmVersion,Ko as isZero,Ie as jsonInfo2PoolKeys,DP as judgeFarmType,gs as leadingZeros,_u as leastSignificantBit,So as liquidityStateV4Layout,np as liquidityStateV5Layout,ky as lt,Ty as lte,Nf as mSOLMint,Rr as makeAMMSwapInstruction,Ru as makeAddLiquidityInstruction,cs as makeAddNewRewardInstruction,Zr as makeClaimInstruction,Ws as makeClaimInstructionV4,pc as makeCreateCpmmPoolInInstruction,bu as makeCreateFarmInstruction,Sc as makeCreateMarketInstruction,gu as makeCreatorWithdrawFarmRewardInstruction,fc as makeDepositCpmmInInstruction,Au as makeDepositInstructionV3,wu as makeDepositInstructionV5,Pu as makeDepositInstructionV6,oh as makeDepositTokenInstruction,ih as makeDepositWithdrawInstruction,gk as makeInitPoolInstructionV4,LK as makePurchaseInstruction,us as makeRestartRewardInstruction,Ou as makeSimulatePoolInfoInstruction,Gr as makeSwapCpmmBaseInInInstruction,HB as makeSwapCpmmBaseOutInInstruction,gp as makeSwapFixedInInstruction,Ap as makeSwapFixedOutInstruction,gc as makeSwapInstruction,po as makeTransferInstruction,yc as makeWithdrawCpmmInInstruction,Io as makeWithdrawInstructionV3,To as makeWithdrawInstructionV5,ko as makeWithdrawInstructionV6,rh as makeWithdrawTokenInstruction,Ot as minExpirationTime,Kk as mockCreatePoolInfo,Gu as mockV3CreatePoolInfo,ip as modelDataInfoLayout,Mu as mostSignificantBit,wi as mul,Pi as notInnerObject,EA as ns64,XA as ns64be,Ua as nu64,NA as nu64be,vi as offset,lg as offsetDateTime,ow as option,Q as parseBigNumberish,mn as parseNumberInfo,xa as parseSimulateLogToJson,Wt as parseSimulateValue,nu as parseTokenAccountResp,Fh as parseTokenInfo,an as poolTypeV6,yn as printSimulate,K as publicKey,Fs as purchaseLayout,Nd as realFarmStateV3Layout,Md as realFarmStateV5Layout,_d as realFarmV6Layout,ba as recursivelyDecimalToFraction,bs as removeLiquidityInstruction,fs as removeLiquidityLayout,Qx as route1Instruction,Yx as route2Instruction,sf as routeInstruction,aw as rustEnum,_A as s16,DA as s16be,vA as s24,WA as s24be,Qe as s32,qA as s32be,VA as s40,UA as s40be,FA as s48,GA as s48be,MA as s8,X as seq,kf as setLoggerLevel,Wl as shakeFractionDecimal,Ba as simulateMultipleInstruction,bk as simulatePoolInfoInstruction,Zl as simulateTransaction,Pa as sleep,mt as solToWSol,Dh as solToWSolToken,nn as splAccountLayout,wa as splitNumber,Mf as stSOLMint,sw as str,M as struct,xy as sub,iw as tagged,gi as tenExponential,Er as toAmmComputePoolInfo,it as toApiV3Token,ql as toBN,Sa as toBuffer,un as toFeeConfig,Aa as toFraction,hy as toFractionWithDecimals,Yy as toPercent,Cr as toToken,xo as toTokenAmount,Eh as toTokenInfo,jy as toTokenPrice,Hy as toTotalPrice,ya as toUsdCurrency,As as trailingZeros,Nb as transformTxToBase64,mi as tryParsePublicKey,Y as u128,Nt as u16,Nu as u16ToBytes,KA as u16be,BA as u24,CA as u24be,Ze as u32,Pk as u32ToBytes,RA as u32be,xA as u40,LA as u40be,SA as u48,OA as u48be,w as u64,E as u8,cw as union,N0 as unionArr,HA as unionLayoutDiscriminator,ug as uniq,Wd as updateFarmPoolInfo,Ar as updateReqHistory,JA as utf8,li as validateAndParsePublicKey,$i as validateFarmRewards,rw as vec,yd as vecU8,Zd as voterStakeRegistryCreateDepositEntry,Hd as voterStakeRegistryCreateVoter,zd as voterStakeRegistryDeposit,Qd as voterStakeRegistryUpdateVoterWeightRecord,Yd as voterStakeRegistryWithdraw,Wh as wSolToSolToken,Yi as withdrawRewardLayout,ag as xor,lw as zeros};
1
+ var Lc=Object.defineProperty,Oc=Object.defineProperties;var Nc=Object.getOwnPropertyDescriptors;var Yo=Object.getOwnPropertySymbols;var Qs=Object.prototype.hasOwnProperty,Ys=Object.prototype.propertyIsEnumerable;var zs=(o,e,t)=>e in o?Lc(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,C=(o,e)=>{for(var t in e||(e={}))Qs.call(e,t)&&zs(o,t,e[t]);if(Yo)for(var t of Yo(e))Ys.call(e,t)&&zs(o,t,e[t]);return o},F=(o,e)=>Oc(o,Nc(e));var Ce=(o,e)=>{var t={};for(var n in o)Qs.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&Yo)for(var n of Yo(o))e.indexOf(n)<0&&Ys.call(o,n)&&(t[n]=o[n]);return t};import Fa from"axios";import{get as ei,set as js}from"lodash";var Mc=(r=>(r[r.Error=0]="Error",r[r.Warning=1]="Warning",r[r.Info=2]="Info",r[r.Debug=3]="Debug",r))(Mc||{}),ti=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}},ni={},Hs={};function ce(o){let e=ei(ni,o);if(!e){let t=ei(Hs,o);e=new ti({name:o,logLevel:t}),js(ni,o,e)}return e}function kf(o,e){js(Hs,o,e);let t=ei(ni,o);t&&(t.level=e)}import{PublicKey as Ql}from"@solana/web3.js";import Yl from"bn.js";import Xl from"big.js";import en from"bn.js";import Te from"bn.js";var Nn=9e15,$t=1e9,oi="0123456789abcdef",Ho="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Zo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ri={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Nn,maxE:Nn,crypto:!1},ea,Et,oe=!0,$o="[DecimalError] ",Jt=$o+"Invalid argument: ",ta=$o+"Precision limit exceeded",na=$o+"crypto unavailable",oa="[object Decimal]",He=Math.floor,_e=Math.pow,_c=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,vc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Vc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ra=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,kt=1e7,$=7,Fc=9007199254740991,Ec=Ho.length-1,ii=Zo.length-1,_={toStringTag:oa};_.absoluteValue=_.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),H(o)};_.ceil=function(){return H(new this.constructor(this),this.e+1,2)};_.clampedTo=_.clamp=function(o,e){var t,n=this,r=n.constructor;if(o=new r(o),e=new r(e),!o.s||!e.s)return new r(NaN);if(o.gt(e))throw Error(Jt+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new r(n)};_.comparedTo=_.cmp=function(o){var e,t,n,r,i=this,s=i.d,a=(o=new i.constructor(o)).d,c=i.s,u=o.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!==o.e)return i.e>o.e^c<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===r?0:n>r^c<0?1:-1};_.cosine=_.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+$,n.rounding=1,t=Dc(n,ca(n,t)),n.precision=o,n.rounding=e,H(Et==2||Et==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};_.cubeRoot=_.cbrt=function(){var o,e,t,n,r,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*_e(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=ze(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=_e(t,1/3),o=He((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=he(u.plus(l).times(a),u.plus(c),s+2,1),ze(a.d).slice(0,s)===(t=ze(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(H(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(H(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,H(n,o,m.rounding,e)};_.decimalPlaces=_.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-He(this.e/$))*$,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};_.dividedBy=_.div=function(o){return he(this,new this.constructor(o))};_.dividedToIntegerBy=_.divToInt=function(o){var e=this,t=e.constructor;return H(he(e,new t(o),0,1,1),t.precision,t.rounding)};_.equals=_.eq=function(o){return this.cmp(o)===0};_.floor=function(){return H(new this.constructor(this),this.e+1,3)};_.greaterThan=_.gt=function(o){return this.cmp(o)>0};_.greaterThanOrEqualTo=_.gte=function(o){var e=this.cmp(o);return e==1||e===0};_.hyperbolicCosine=_.cosh=function(){var o,e,t,n,r,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,r=i.d.length,r<32?(o=Math.ceil(r/3),e=(1/tr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=Mn(s,1,i.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return H(i,s.precision=t,s.rounding=n,!0)};_.hyperbolicSine=_.sinh=function(){var o,e,t,n,r=this,i=r.constructor;if(!r.isFinite()||r.isZero())return new i(r);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(r.e,r.sd())+4,i.rounding=1,n=r.d.length,n<3)r=Mn(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/tr(5,o)),r=Mn(i,2,r,r,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,H(r,e,t,!0)};_.hyperbolicTangent=_.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,he(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};_.inverseCosine=_.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?ht(t,r,i):new t(0):new t(NaN):e.isZero()?ht(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=ht(t,r+4,i).times(.5),t.precision=r,t.rounding=i,o.minus(e))};_.inverseHyperbolicCosine=_.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};_.inverseHyperbolicSine=_.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln())};_.inverseHyperbolicTangent=_.atanh=function(){var o,e,t,n,r=this,i=r.constructor;return r.isFinite()?r.e>=0?new i(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(o=i.precision,e=i.rounding,n=r.sd(),Math.max(n,o)<2*-r.e-1?H(new i(r),o,e,!0):(i.precision=t=n-r.e,r=he(r.plus(1),new i(1).minus(r),t+o,1),i.precision=o+4,i.rounding=1,r=r.ln(),i.precision=o,i.rounding=e,r.times(.5))):new i(NaN)};_.inverseSine=_.asin=function(){var o,e,t,n,r=this,i=r.constructor;return r.isZero()?new i(r):(e=r.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(o=ht(i,t+4,n).times(.5),o.s=r.s,o):new i(NaN):(i.precision=t+6,i.rounding=1,r=r.div(new i(1).minus(r.times(r)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,r.times(2)))};_.inverseTangent=_.atan=function(){var o,e,t,n,r,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<=ii)return s=ht(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=ii)return s=ht(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),o=t;o;--o)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),r=u;o!==-1;)if(r=r.times(c),i=s.minus(r.div(n+=2)),r=r.times(c),s=i.plus(r.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===i.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),oe=!0,H(s,l.precision=m,l.rounding=d,!0)};_.isFinite=function(){return!!this.d};_.isInteger=_.isInt=function(){return!!this.d&&He(this.e/$)>this.d.length-2};_.isNaN=function(){return!this.s};_.isNegative=_.isNeg=function(){return this.s<0};_.isPositive=_.isPos=function(){return this.s>0};_.isZero=function(){return!!this.d&&this.d[0]===0};_.lessThan=_.lt=function(o){return this.cmp(o)<0};_.lessThanOrEqualTo=_.lte=function(o){return this.cmp(o)<1};_.logarithm=_.log=function(o){var e,t,n,r,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=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(r=t[0];r%10===0;)r/=10;i=r!==1}if(oe=!1,a=m+p,s=Zt(u,a),n=e?Jo(l,a+10):Zt(o,a),c=he(s,n,a,1),Jn(c.d,r=m,d))do if(a+=10,s=Zt(u,a),n=e?Jo(l,a+10):Zt(o,a),c=he(s,n,a,1),!i){+ze(c.d).slice(r+1,r+15)+1==1e14&&(c=H(c,m+1,0));break}while(Jn(c.d,r+=10,d));return oe=!0,H(c,m,d)};_.minus=_.sub=function(o){var e,t,n,r,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(u=p.d,d=o.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return oe?H(o,a,c):o}if(t=He(o.e/$),l=He(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,o.s=-o.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(r=n;r&&u[--r]===0;)u[r]=kt-1;--u[r],u[n]+=kt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=er(u,t),oe?H(o,a,c):o):new y(c===3?-0:0)};_.modulo=_.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?H(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=he(t,o.abs(),0,3,1),e.s*=o.s):e=he(t,o,0,n.modulo,1),e=e.times(o),oe=!0,t.minus(e))};_.naturalExponential=_.exp=function(){return si(this)};_.naturalLogarithm=_.ln=function(){return Zt(this)};_.negated=_.neg=function(){var o=new this.constructor(this);return o.s=-o.s,H(o)};_.plus=_.add=function(o){var e,t,n,r,i,s,a,c,u,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(u=m.d,l=o.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(o=new d(m)),oe?H(o,a,c):o;if(i=He(m.e/$),n=He(o.e/$),u=u.slice(),r=i-n,r){for(r<0?(t=u,r=-r,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/$),s=i>s?i+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=u.length,r=l.length,s-r<0&&(r=s,t=l,l=u,u=t),e=0;r;)e=(u[--r]=u[r]+l[r]+e)/kt|0,u[r]%=kt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=er(u,n),oe?H(o,a,c):o};_.precision=_.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Jt+o);return t.d?(e=ia(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};_.round=function(){var o=this,e=o.constructor;return H(new e(o),o.e+1,e.rounding)};_.sine=_.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+$,n.rounding=1,t=qc(n,ca(n,t)),n.precision=o,n.rounding=e,H(Et>2?t.neg():t,o,e,!0)):new n(NaN)};_.squareRoot=_.sqrt=function(){var o,e,t,n,r,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=ze(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=He((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(he(s,i,t+2,1)).times(.5),ze(i.d).slice(0,t)===(e=ze(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(H(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(H(n,c+1,1),o=!n.times(n).eq(s));break}return oe=!0,H(n,c,l.rounding,o)};_.tangent=_.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=he(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,H(Et==2||Et==4?t.neg():t,o,e,!0)):new n(NaN)};_.times=_.mul=function(o){var e,t,n,r,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=He(l.e/$)+He(o.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,r=c+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%kt|0,e=a/kt|0;i[r]=(i[r]+e)%kt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=er(i,t),oe?H(o,m.precision,m.rounding):o};_.toBinary=function(o,e){return ui(this,2,o,e)};_.toDecimalPlaces=_.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(at(o,0,$t),e===void 0?e=n.rounding:at(e,0,8),H(t,o+t.e+1,e))};_.toExponential=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Ct(n,!0):(at(o,0,$t),e===void 0?e=r.rounding:at(e,0,8),n=H(new r(n),o+1,e),t=Ct(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toFixed=function(o,e){var t,n,r=this,i=r.constructor;return o===void 0?t=Ct(r):(at(o,0,$t),e===void 0?e=i.rounding:at(e,0,8),n=H(new i(r),o+r.e+1,e),t=Ct(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};_.toFraction=function(o){var e,t,n,r,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=ia(y)-p.e-1,s=i%$,e.d[0]=_e(10,s<0?$+s:s),o==null)o=i>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(Jt+a);o=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(ze(y)),l=f.precision,f.precision=i=y.length*$*2;m=he(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=u,u=c.plus(m.times(r)),c=r,r=e,e=a.minus(m.times(r)),a=r;return r=he(o.minus(t),n,0,1,1),c=c.plus(r.times(u)),t=t.plus(r.times(n)),c.s=u.s=p.s,d=he(u,n,i,1).minus(p).abs().cmp(he(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};_.toHexadecimal=_.toHex=function(o,e){return ui(this,16,o,e)};_.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:at(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(oe=!1,t=he(t,o,0,e,1).times(o),oe=!0,H(t)):(o.s=t.s,t=o),t};_.toNumber=function(){return+this};_.toOctal=function(o,e){return ui(this,8,o,e)};_.toPower=_.pow=function(o){var e,t,n,r,i,s,a=this,c=a.constructor,u=+(o=new c(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new c(_e(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,o.eq(1))return H(a,n,i);if(e=He(o.e/$),e>=o.d.length-1&&(t=u<0?-u:u)<=Fc)return r=sa(c,a,t,n),o.s<0?new c(1).div(r):H(r,n,i);if(s=a.s,s<0){if(e<o.d.length-1)return new c(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=_e(+a,u),e=t==0||!isFinite(t)?He(u*(Math.log("0."+ze(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),r=si(o.times(Zt(a,n+t)),n),r.d&&(r=H(r,n+5,1),Jn(r.d,n,i)&&(e=n+10,r=H(si(o.times(Zt(a,e+t)),e),e+5,1),+ze(r.d).slice(n+1,n+15)+1==1e14&&(r=H(r,n+1,0)))),r.s=s,oe=!0,c.rounding=i,H(r,n,i))};_.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Ct(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(at(o,1,$t),e===void 0?e=r.rounding:at(e,0,8),n=H(new r(n),o,e),t=Ct(n,o<=n.e||n.e<=r.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toSignificantDigits=_.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(at(o,1,$t),e===void 0?e=n.rounding:at(e,0,8)),H(new n(t),o,e)};_.toString=function(){var o=this,e=o.constructor,t=Ct(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};_.truncated=_.trunc=function(){return H(new this.constructor(this),this.e+1,1)};_.valueOf=_.toJSON=function(){var o=this,e=o.constructor,t=Ct(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function ze(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=$-n.length,t&&(i+=Ht(t)),i+=n;s=o[e],n=s+"",t=$-n.length,t&&(i+=Ht(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function at(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Jt+o)}function Jn(o,e,t,n){var r,i,s,a;for(i=o[0];i>=10;i/=10)--e;return--e<0?(e+=$,r=0):(r=Math.ceil((e+1)/$),e%=$),i=_e(10,$-e),a=o[r]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(o[r+1]/i/100|0)==_e(10,e-2)-1||(a==i/2||a==0)&&(o[r+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(o[r+1]/i/1e3|0)==_e(10,e-3)-1,s}function jo(o,e,t){for(var n,r=[0],i,s=0,a=o.length;s<a;){for(i=r.length;i--;)r[i]*=e;for(r[0]+=oi.indexOf(o.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function Dc(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/tr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=Mn(o,1,e.times(r),new o(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var he=function(){function o(n,r,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*r+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=r[a]){c=n[a]>r[a]?1:-1;break}return c}function t(n,r,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<r[i]?1:0,n[i]=a*s+n[i]-r[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,i,s,a,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==r.s?1:-1,G=n.d,q=r.d;if(!G||!G[0]||!q||!q[0])return new D(!n.s||!r.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-r.e):(c=kt,p=$,l=He(n.e/p)-He(r.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-r.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,R==1){for(d=0,q=q[0],T++;(m<L||d)&&T--;m++)S=d*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=o(q,d,c),G=o(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=o(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,ea=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,H(g,a?i+g.e+1:i,s,y)}return g}}();function H(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=$,s=e,l=m[d=0],c=l/_e(10,r-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,r=1,i%=$,s=i-$+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=$,s=i-$+r,c=s<0?0:l/_e(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%_e(10,r-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/_e(10,r-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=o.e+1,m[0]=_e(10,($-e%$)%$),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=_e(10,$-i),m[d]=s>0?(l/_e(10,r-s)%_e(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&&(o.e++,m[0]==kt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=kt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Ct(o,e,t){if(!o.isFinite())return ua(o);var n,r=o.e,i=ze(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Ht(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+Ht(-r-1)+i,t&&(n=t-s)>0&&(i+=Ht(n))):r>=s?(i+=Ht(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+Ht(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=Ht(n))),i}function er(o,e){var t=o[0];for(e*=$;t>=10;t/=10)e++;return e}function Jo(o,e,t){if(e>Ec)throw oe=!0,t&&(o.precision=t),Error(ta);return H(new o(Ho),e,1,!0)}function ht(o,e,t){if(e>ii)throw Error(ta);return H(new o(Zo),e,t,!0)}function ia(o){var e=o.length-1,t=e*$+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function Ht(o){for(var e="";o--;)e+="0";return e}function sa(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/$+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Js(i.d,s)&&(r=!0)),t=He(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Js(e.d,s)}return oe=!0,i}function Zs(o){return o.d[o.d.length-1]&1}function aa(o,e,t){for(var n,r=new o(e[0]),i=0;++i<e.length;)if(n=new o(e[i]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function si(o,e){var t,n,r,i,s,a,c,u=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(_e(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=H(i.times(o),c,1),t=t.times(++l),a=s.plus(he(i,t,c,1)),ze(a.d).slice(0,c)===ze(s.d).slice(0,c)){for(r=m;r--;)s=H(s.times(s),c,1);if(e==null)if(u<3&&Jn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return H(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function Zt(o,e){var t,n,r,i,s,a,c,u,l,m,d,p=1,y=10,f=o,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=ze(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=ze(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=Jo(g,l+2,w).times(i+""),f=Zt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=w,e==null?H(f,w,h,oe=!0):f;for(m=f,c=s=f=he(f.minus(1),f.plus(1),l,1),d=H(f.times(f),l,1),r=3;;){if(s=H(s.times(d),l,1),u=c.plus(he(s,new g(r),l,1)),ze(u.d).slice(0,l)===ze(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Jo(g,l+2,w).times(i+""))),c=he(c,new g(p),l,1),e==null)if(Jn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=he(m.minus(1),m.plus(1),l,1),d=H(f.times(f),l,1),r=a=1;else return H(c,g.precision=w,h,oe=!0);else return g.precision=w,c;c=u,r+=2}}function ua(o){return String(o.s*o.s/0)}function ai(o,e){var t,n,r;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%$,t<0&&(n+=$),n<r){for(n&&o.d.push(+e.slice(0,n)),r-=$;n<r;)o.d.push(+e.slice(n,n+=$));e=e.slice(n),n=$-e.length}else n-=r;for(;n--;)e+="0";o.d.push(+e),oe&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function Wc(o,e){var t,n,r,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ra.test(e))return ai(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(vc.test(e))t=16,e=e.toLowerCase();else if(_c.test(e))t=2;else if(Vc.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=o.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,r=sa(n,new n(t),i,i*2)),u=jo(e,t,kt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(o.s*0):(o.e=er(u,l),o.d=u,oe=!1,s&&(o=he(o,r,a*4)),c&&(o=o.times(Math.abs(c)<54?_e(2,c):$n.pow(2,c))),oe=!0,o)}function qc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Mn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/tr(5,t)),e=Mn(o,2,e,e);for(var r,i=new o(5),s=new o(16),a=new o(20);t--;)r=e.times(e),e=e.times(i.plus(r.times(s.times(r).minus(a))));return e}function Mn(o,e,t,n,r){var i,s,a,c,u=1,l=o.precision,m=Math.ceil(l/$);for(oe=!1,c=t.times(t),a=new o(n);;){if(s=he(a.times(c),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=he(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function tr(o,e){for(var t=o;--e;)t*=o;return t}function ca(o,e){var t,n=e.s<0,r=ht(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return Et=n?4:1,e;if(t=e.divToInt(r),t.isZero())Et=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return Et=Zs(t)?n?2:3:n?4:1,e;Et=Zs(t)?n?1:4:n?3:2}return e.minus(r).abs()}function ui(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(at(t,1,$t),n===void 0?n=p.rounding:at(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=ua(o);else{for(l=Ct(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=jo(Ct(d),10,r),d.e=d.d.length),m=jo(l,10,r),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=he(o,d,t,n,0,r),m=o.d,i=o.e,u=ea),s=m[t],a=r/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,u)for(;++m[--t]>r-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+=oi.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=jo(l,r,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=oi.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 o.s<0?"-"+l:l}function Js(o,e){if(o.length>e)return o.length=e,!0}function Uc(o){return new this(o).abs()}function Gc(o){return new this(o).acos()}function Xc(o){return new this(o).acosh()}function zc(o,e){return new this(o).plus(e)}function Qc(o){return new this(o).asin()}function Yc(o){return new this(o).asinh()}function jc(o){return new this(o).atan()}function Hc(o){return new this(o).atanh()}function Zc(o,e){o=new this(o),e=new this(e);var t,n=this.precision,r=this.rounding,i=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=ht(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?ht(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=ht(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(he(o,e,i,1)),e=ht(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(he(o,e,i,1)),t}function Jc(o){return new this(o).cbrt()}function $c(o){return H(o=new this(o),o.e+1,2)}function el(o,e,t){return new this(o).clamp(e,t)}function tl(o){if(!o||typeof o!="object")throw Error($o+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,$t,"rounding",0,8,"toExpNeg",-Nn,0,"toExpPos",0,Nn,"maxE",0,Nn,"minE",-Nn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=ri[t]),(n=o[t])!==void 0)if(He(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Jt+t+": "+n);if(t="crypto",r&&(this[t]=ri[t]),(n=o[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(na);else this[t]=!1;else throw Error(Jt+t+": "+n);return this}function nl(o){return new this(o).cos()}function ol(o){return new this(o).cosh()}function la(o){var e,t,n;function r(i){var s,a,c,u=this;if(!(u instanceof r))return new r(i);if(u.constructor=r,$s(i)){u.s=i.s,oe?!i.d||i.e>r.maxE?(u.e=NaN,u.d=null):i.e<r.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>r.maxE?(u.e=NaN,u.d=null):s<r.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 ai(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),ra.test(i)?ai(u,i):Wc(u,i)}if(r.prototype=_,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=tl,r.clone=la,r.isDecimal=$s,r.abs=Uc,r.acos=Gc,r.acosh=Xc,r.add=zc,r.asin=Qc,r.asinh=Yc,r.atan=jc,r.atanh=Hc,r.atan2=Zc,r.cbrt=Jc,r.ceil=$c,r.clamp=el,r.cos=nl,r.cosh=ol,r.div=rl,r.exp=il,r.floor=sl,r.hypot=al,r.ln=ul,r.log=cl,r.log10=ml,r.log2=ll,r.max=dl,r.min=pl,r.mod=fl,r.mul=yl,r.pow=bl,r.random=gl,r.round=Al,r.sign=wl,r.sin=Pl,r.sinh=hl,r.sqrt=kl,r.sub=Tl,r.sum=Il,r.tan=Bl,r.tanh=xl,r.trunc=Sl,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return r.config(o),r}function rl(o,e){return new this(o).div(e)}function il(o){return new this(o).exp()}function sl(o){return H(o=new this(o),o.e+1,3)}function al(){var o,e,t=new this(0);for(oe=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function $s(o){return o instanceof $n||o&&o.toStringTag===oa||!1}function ul(o){return new this(o).ln()}function cl(o,e){return new this(o).log(e)}function ll(o){return new this(o).log(2)}function ml(o){return new this(o).log(10)}function dl(){return aa(this,arguments,"lt")}function pl(){return aa(this,arguments,"gt")}function fl(o,e){return new this(o).mod(e)}function yl(o,e){return new this(o).mul(e)}function bl(o,e){return new this(o).pow(e)}function gl(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:at(o,1,$t),n=Math.ceil(o/$),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)r=e[i],r>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)r=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(r%1e7),i+=4);i=n/4}else throw Error(na);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=$,n&&o&&(r=_e(10,$-o),a[i]=(n/r|0)*r);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=$)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<$&&(t-=$-n)}return s.e=t,s.d=a,s}function Al(o){return H(o=new this(o),o.e+1,this.rounding)}function wl(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function Pl(o){return new this(o).sin()}function hl(o){return new this(o).sinh()}function kl(o){return new this(o).sqrt()}function Tl(o,e){return new this(o).sub(e)}function Il(){var o=0,e=arguments,t=new this(e[o]);for(oe=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return oe=!0,H(t,this.precision,this.rounding)}function Bl(o){return new this(o).tan()}function xl(o){return new this(o).tanh()}function Sl(o){return H(o=new this(o),o.e+1,1)}_[Symbol.for("nodejs.util.inspect.custom")]=_.toString;_[Symbol.toStringTag]="Decimal";var $n=_.constructor=la(ri);Ho=new $n(Ho);Zo=new $n(Zo);var v=$n;import{PublicKey as pi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kl}from"@solana/spl-token";import{PublicKey as Be,SystemProgram as ma,SYSVAR_RENT_PUBKEY as Cl}from"@solana/web3.js";function A({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var ci=[A({pubkey:Kl,isWritable:!1}),A({pubkey:ma.programId,isWritable:!1}),A({pubkey:Cl,isWritable:!1})];function li({publicKey:o,transformSol:e}){let t=mi(o.toString());if(t instanceof Be)return e&&t.equals(ve)?Z:t;if(e&&t.toString()===ve.toBase58())return Z;if(typeof t=="string"){if(t===Be.default.toBase58())return Be.default;try{return new Be(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function mi(o){try{return new Be(o)}catch{return o}}var nr=new Be("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),or=new Be("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ut=new Be("SysvarRent111111111111111111111111111111111"),di=new Be("SysvarC1ock11111111111111111111111111111111"),_n=new Be("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),rr=new Be("Sysvar1nstructions1111111111111111111111111"),ir=ma.programId,Kf=new Be("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Cf=new Be("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Rf=new Be("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Lf=new Be("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Of=new Be("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Nf=new Be("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Mf=new Be("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),_f=new Be("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),vf=new Be("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Vf=new Be("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Ff=new Be("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Be("So11111111111111111111111111111111111111112"),ve=Be.default;function mt(o){return li({publicKey:o,transformSol:!0})}import{PublicKey as Rl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as da}from"@solana/spl-token";var Rt={chainId:101,address:Rl.default.toBase58(),programId:da.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:da.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 fi=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===ve.toBase58()||e instanceof pi&&ve.equals(e)){this.decimals=Ve.decimals,this.symbol=Ve.symbol,this.name=Ve.name,this.mint=new pi(Ve.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=i?pi.default:li({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},ye=fi;ye.WSOL=new fi(F(C({},Ve),{mint:Ve.address}));import ar from"big.js";import Nl from"bn.js";import Ml from"decimal.js-light";import Ll from"toformat";var Ol=Ll,eo=Ol;var sr=ce("module/fraction"),yi=eo(ar),to=eo(Ml),_l={[0]:to.ROUND_DOWN,[1]:to.ROUND_HALF_UP,[2]:to.ROUND_UP},vl={[0]:ar.roundDown,[1]:ar.roundHalfUp,[2]:ar.roundUp},re=class{constructor(e,t=new Nl(1)){this.numerator=Q(e),this.denominator=Q(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new re(this.denominator,this.numerator)}add(e){let t=e instanceof re?e:new re(Q(e));return this.denominator.eq(t.denominator)?new re(this.numerator.add(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof re?e:new re(Q(e));return this.denominator.eq(t.denominator)?new re(this.numerator.sub(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof re?e:new re(Q(e));return new re(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof re?e:new re(Q(e));return new re(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||sr.logWithError(`${e} is not an integer.`),e<=0&&sr.logWithError(`${e} is not positive.`),to.set({precision:e+1,rounding:_l[n]});let r=new to(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||sr.logWithError(`${e} is not an integer.`),e<0&&sr.logWithError(`${e} is negative.`),yi.DP=e,yi.RM=vl[n]||1,new yi(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Vl=ce("Raydium_price"),qe=class extends re{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new re(gi(n.decimals),gi(r.decimals))}get raw(){return new re(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new qe({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Vl.logWithError("mul token not equals");let n=super.mul(t);return new qe({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var Ai=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},no=Ai;no.SOL=new Ai(Rt);function py(o,e){return o instanceof ye&&e instanceof ye?o.equals(e):o instanceof ye||e instanceof ye?!1:o===e}import Fl from"bn.js";var pa=new re(new Fl(100)),Fe=class extends re{toSignificant(e=5,t,n){return this.mul(pa).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(pa).toFixed(e,t,n)}};function Re(o){if(o instanceof Fe)return new re(o.numerator,o.denominator);if(o instanceof qe)return o.adjusted;if(o instanceof fe)try{return Re(o.toExact())}catch{return new re(Ee)}if(o instanceof re)return o;let e=String(o),t=mn(e);return new re(t.numerator,t.denominator)}function hy(o){var n;if(o instanceof Fe)return{fr:new re(o.numerator,o.denominator)};if(o instanceof qe)return{fr:o.adjusted};if(o instanceof fe)return{fr:Re(o.toExact()),decimals:o.token.decimals};if(o instanceof re)return{fr:o};let e=String(o),t=mn(e);return{fr:new re(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function ky(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Ee)}function El(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator.gt(Ee)}function Ty(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator.lte(Ee)}function Iy(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator.gte(Ee)}function Dl(o,e){if(o==null||e==null)return!1;let t=Re(o),n=Re(e);return t.sub(n).numerator.eq(Ee)}function By(o,e){if(o==null||e==null)return;let t=Re(o),n=Re(e);try{return t.div(n)}catch{return t}}function xy(o,e){if(o==null||e==null)return;let t=Re(o),n=Re(e);return t.sub(n)}function Sy(o){return o==null?!1:!Dl(o,0)}function Ky(o,e){return El(e,o)?e:o}function wi(o,e){if(o==null||e==null)return;let t=Re(o),n=Re(e);return t.mul(n)}function Cy(o,e){if(o==null||e==null)return;let t=Re(o),n=Re(e);return t.add(n)}var bi=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(bi||{}),Ee=new Te(0),ga=new Te(1),qy=new Te(2),Uy=new Te(3),Gy=new Te(5),dn=new Te(10),Xy=new Te(100),zy=new Te(1e3),Qy=new Te(1e4),fa=9007199254740991;function Q(o){let e=ce("Raydium_parseBigNumberish");if(o instanceof Te)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new Te(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=fa||o<=-fa)&&e.logWithError(`BigNumberish number overflow: ${o}`),new Te(String(o))):typeof o=="bigint"?new Te(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new Te(0))}function gi(o){return dn.pow(Q(o))}function mn(o){var a;if(o===void 0)return{denominator:"1",numerator:"0"};if(o instanceof Te)return{numerator:o.toString(),denominator:"1"};if(o instanceof re)return{denominator:o.denominator.toString(),numerator:o.numerator.toString()};let e=String(o),[,t="",n="",r=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],i="1"+"0".repeat(r.length),s=t+(n==="0"?"":n)+r||"0";return{denominator:i,numerator:s,sign:t,int:n,dec:r}}function ur(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Wl(o){var n;let[,e="",t=""]=(n=o.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function ql(o,e=0){return o instanceof Te?o:new Te(Wl(Aa(o).mul(dn.pow(new Te(String(e))))))}function Aa(o){if(o instanceof Fe)return new re(o.numerator,o.denominator);if(o instanceof qe)return o.adjusted;if(o instanceof fe)try{return Aa(o.toExact())}catch{return new re(Ee)}if(o instanceof re)return o;let e=String(o),t=mn(e);return new re(t.numerator,t.denominator)}function Yy(o,e){let{numerator:t,denominator:n}=mn(o);return new Fe(new Te(t),new Te(n).mul(e!=null&&e.alreadyDecimaled?new Te(100):new Te(1)))}function jy(o){let{token:e,numberPrice:t,decimalDone:n}=o,r=new ye({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:i,denominator:s}=mn(t),a=n?new Te(i).mul(dn.pow(new Te(e.decimals))):i,c=new Te(s).mul(dn.pow(new Te(r.decimals)));return new qe({baseToken:r,denominator:c.toString(),quoteToken:new ye(F(C({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function ya(o){let e=new no({decimals:6,symbol:"usd",name:"usd"}),t=ql(wi(o,10**e.decimals));return new pn(e,t)}function Hy(o,e){return ya(!e||!o?0:wi(o,e))}function Ul(o){if(o==null)return;let{numerator:e,denominator:t}=mn(o.toString());return new re(e,t)}function Gl(o){return o instanceof v}function ba(o){return Gl(o)?Ul(o):Array.isArray(o)?o.map(e=>ba(e)):Pi(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,ba(t)])):o}var zl=ce("Raydium_amount"),cr=eo(Xl);function wa(o,e){let t="0",n="0";if(o.includes(".")){let r=o.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):zl.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var fe=class extends re{constructor(t,n,r=!0,i){let s=new en(0),a=dn.pow(new en(t.decimals));if(r)s=Q(n);else{let c=new en(0),u=new en(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=wa(n.toString(),t.decimals);c=Q(l),u=Q(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(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 fe(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new fe(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return cr.DP=this.token.decimals,new cr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},pn=class extends re{constructor(t,n,r=!0,i){let s=new en(0),a=dn.pow(new en(t.decimals));if(r)s=Q(n);else{let c=new en(0),u=new en(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=wa(n.toString(),t.decimals);c=Q(l),u=Q(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(i||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new pn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new pn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.currency.decimals,n,r=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return cr.DP=this.currency.decimals,new cr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};async function Pa(o){new Promise(e=>setTimeout(e,o))}function Pb(){return new Date().getTime()}function Pi(o){return typeof o=="object"&&o!==null&&![ye,fe,Ql,re,Yl,qe,Fe].some(e=>typeof e=="object"&&o instanceof e)}function Ie(o){return typeof o=="string"?mi(o):Array.isArray(o)?o.map(e=>Ie(e)):Pi(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ie(t)])):o}import{PublicKey as io,sendAndConfirmTransaction as Bi,Transaction as so,TransactionMessage as ao,VersionedTransaction as uo}from"@solana/web3.js";import om from"axios";var fn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(fn||{}),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 ka,ComputeBudgetProgram as ha,Transaction as mr,TransactionMessage as jl,Keypair as Ta,VersionedTransaction as hi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Hl}from"@solana/spl-token";var Dt=ce("Raydium_txUtil"),Ia=1644;function dr(o){let e=[],t=[];return o.microLamports&&(e.push(ha.setComputeUnitPrice({microLamports:o.microLamports})),t.push(V.SetComputeUnitPrice)),o.units&&(e.push(ha.setComputeUnitLimit({units:o.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function vn(o,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:r.blockhash)||(await o.getRecentBlockhash(t)).blockhash}catch{return(await o.getRecentBlockhash(t)).blockhash}}function pr(o,e){o.length<1&&Dt.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Dt.logWithError(`no signers provided:, ${e.toString()}`);let t=new mr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Ia}catch{return!1}}async function Ba(o,e,t,n=!0){let r=new ka("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new mr;s.feePayer=r;for(let u of e)pr([...s.instructions,u],[r])||(i.push(s),s=new mr,s.feePayer=r),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Zl(o,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Dt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Dt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Dt.debug("filteredLog:",c),l.length||Dt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function xa(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Dt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Wt(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Dt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ue(o,e){let[t,n]=ka.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function Zl(o,e,t){let n=[];if(t){let r=await o.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=r.blockhash,u.lastValidBlockHeight=r.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=o._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 o._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async r=>await(await o.simulateTransaction(r)).value))}catch(r){r instanceof Error&&Dt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:r.message})}return n}function oo({instructions:o,payer:e,signers:t}){return pr(o,[e,...t])}function ro({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ta.generate().publicKey.toString()}){let i=new jl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new hi(i).serialize()).toString("base64").length<Ia}catch{return!1}}var lr={time:0,data:void 0};async function Ob(o){if(!lr.data||(Date.now()-lr.time)/1e3>30){let e=await o.getEpochInfo();return lr={time:Date.now(),data:e},e}else return lr.data}var Sa=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o);function yn(o){let e=[];return o.forEach(t=>{t instanceof mr&&(t.recentBlockhash||(t.recentBlockhash=Hl.toBase58()),t.feePayer||(t.feePayer=Ta.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof hi&&(n=Sa(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}function Nb(o){let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});return o instanceof hi&&(e=Sa(e)),e.toString("base64")}import{PublicKey as Ca,AddressLookupTableAccount as fr}from"@solana/web3.js";import{PublicKey as Ka}from"@solana/web3.js";import{MINT_SIZE as Jl,TOKEN_PROGRAM_ID as $l,getTransferFeeConfig as em,unpackMint as tm}from"@solana/spl-token";var ki=ce("Raydium_accountInfo_util");async function Tt(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=Ti(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=Ti(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&ki.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"&&ki.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ka(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,r)))}catch(c){c instanceof Error&&ki.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function De(o,e,t){let n=await Tt(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>F(C({},r),{accountInfo:n[i]}))}var nm=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(nm||{}),qb=1;async function Vn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await De(o,e.map(c=>({pubkey:mt(c)})),t),r={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Jl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=tm(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);r[c.pubkey.toString()]=F(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||$l,feeConfig:(a=em(u))!=null?a:void 0})}return r[Ka.default.toBase58()]=r[Z.toBase58()],r}async function Ii({connection:o,address:e}){let t=await Tt(o,[...new Set(e.map(r=>r.toString()))].map(r=>new Ca(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new fr({key:s,state:fr.deserialize(i.data)});n[s.toString()]=a,yr[s.toString()]=a}return n}var yr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new fr({key:new Ca("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:fr.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 br=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 om.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}=dr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:r=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==io.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 so;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async r=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},c=i!=null?i:await vn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),yn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await Bi(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:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],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 vn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let w=await Bi(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));yn(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:r}=d,i=Ce(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:yr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let y of a)s[y]===void 0&&c.push(new io(y));let u=await Ii({connection:this.connection,address:c});for(let[y,f]of Object.entries(u))s[y]=f;let l=new ao({payerKey:this.feePayer,recentBlockhash:r?io.default.toBase58():await vn(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 uo(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),yn([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:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],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),yn(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=Ce(u,["computeBudgetConfig"]),r=t?dr(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?[...r.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new io(b));if(c.length<12&&oo({instructions:p,payer:this.feePayer,signers:f})||oo({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");oo({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new so().add(...r.instructions,...c)):s.push(new so().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);oo({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new so().add(...r.instructions,...c)):s.push(new so().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 vn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,w)=>{h.recentBlockhash=b,a[w].length&&h.sign(...a[w])}),yn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let w of s){let k=await Bi(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:r=[]}=b,i=Ce(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:yr),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),c=[];for(let h of a)s[h]===void 0&&c.push(new io(h));let u=await Ii({connection:this.connection,address:c});for(let[h,w]of Object.entries(u))s[h]=w;let l=t?dr(t):{instructions:[],instructionTypes:[]},m=await vn(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&&ro({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||ro({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&&ro({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new uo(T))}else{let T=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new uo(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&&ro({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new uo(k))}else{let k=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new uo(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)}),yn(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 It=class{constructor(e){this._owner=e}get publicKey(){return It.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return It.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return It.isKeyPair(this._owner)}get isPublicKey(){return It.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!It.isKeyPair(e)}};function Ti(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function sg(o,...e){return o.filter(t=>e.every(n=>n.includes(t)))}function ag(o,...e){return o.filter(t=>e.every(n=>!n.includes(t)))}function ug(o){return[...new Set(o)]}var Ra=o=>typeof o=="number",La=o=>o?new Date(o):new Date,rm=o=>La(o).getTime();function Oa(o,e,t){let n=Ra(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function Na(o,e,t){let n=Ra(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}function lg(o,e){let n=rm(o)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return La(n)}import{PublicKey as de}from"@solana/web3.js";var xi=new de("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Si=new de("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Fn=new de("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),im=new de("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),sm=new de("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),gr=new de("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Ki=new de("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),am=new de("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ma=new de("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Ci=new de("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),um=new de("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),pg=new de("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),cm=new de("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),lm=new de("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),mm=new de("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),dm=new de("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Ri=new de("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),pm=new de("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),fm=new de("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),ym=new de("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),bm=new de("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),gm=new de("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),co={IDO_PROGRAM_ID_V1:cm,IDO_PROGRAM_ID_V2:lm,IDO_PROGRAM_ID_V3:mm,IDO_PROGRAM_ID_V4:dm},fg={AMM_V4:Ki,AMM_STABLE:am,CLMM_PROGRAM_ID:Ci,FARM_PROGRAM_ID_V3:xi,FARM_PROGRAM_ID_V5:Si,FARM_PROGRAM_ID_V6:Fn,OPEN_BOOK_PROGRAM:sm,SERUM_PROGRAM_ID_V3:gr,UTIL1216:im,Router:um,CREATE_CPMM_POOL_PROGRAM:Ri,CREATE_CPMM_POOL_AUTH:pm,CREATE_CPMM_POOL_FEE_ACC:fm},yg={SERUM_MARKET:de.default,OPENBOOK_MARKET:new de("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:de.default,FarmV3:new de("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new de("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new de("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new de("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new de("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new de("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new de("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:ym,CREATE_CPMM_POOL_AUTH:bm,CREATE_CPMM_POOL_FEE_ACC:gm,FEE_DESTINATION_ID:new de("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Am}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as wm}from"@solana/spl-token";function Ae(o,e,t){return ue([o.toBuffer(),(t!=null?t:wm).toBuffer(),e.toBuffer()],new Am("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Ne from"bn.js";var Lt=1e4;function kg(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new Ne(r.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===Lt){let a=new Ne(r.maximumFee.toString());return{amount:o.add(a),fee:a,expirationTime:s}}else{let a=tn(o.mul(new Ne(Lt)),new Ne(Lt-r.transferFeeBasisPoints)),c=new Ne(r.maximumFee.toString()),u=a.sub(o).gt(c)?o.add(c):a,l=tn(u.mul(new Ne(r.transferFeeBasisPoints)),new Ne(Lt)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:s}}else{let a=tn(o.mul(new Ne(r.transferFeeBasisPoints)),new Ne(Lt)),c=a.gt(i)?i:a;return{amount:o,fee:c,expirationTime:s}}}function ke(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=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<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new Ne(i.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Lt){let c=new Ne(i.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=tn(o.mul(new Ne(Lt)),new Ne(Lt-i.transferFeeBasisPoints)),u=new Ne(i.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=tn(l.mul(new Ne(i.transferFeeBasisPoints)),new Ne(Lt)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=tn(o.mul(new Ne(i.transferFeeBasisPoints)),new Ne(Lt)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function Ot(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function tn(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new Ne(0))?t.add(new Ne(1)):t}var _a=(t=>(t.ALL="all",t.Strict="strict",t))(_a||{}),va=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(va||{});var Me={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"},qg=C({},Me);var Va="ray_tab_hash",Li="ray_req_hash",Pm=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Va);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Va,o)),o},Ar=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Ce(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(Li)||"[]").slice(0,o-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(F(C({},t),{time:Date.now(),session:Pm()}));try{localStorage.setItem(Li,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(Li,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return Ar(F(C({},t),{logCount:o,removeLastLog:!0}))}};var En=ce("Raydium_Api"),Oi=new Map;async function cA(o,e,t=1e3){let n;for(;n==null;)try{En.debug(`Request ${o} through endlessRetry`),n=await e()}catch(r){En.error(`Request ${o} failed, retry after ${t} ms`,r),await Pa(t)}return n}var wr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=Fa.create({baseURL:this.urlConfigs.BASE_HOST||Me.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return En.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(En.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}),En.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}),En.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Me.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Me.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Fa.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,i)=>r+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Me.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Me.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Me.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Me.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Me.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Me.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Me.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>Oi.has(s)?(n.push(Oi.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Me.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{Oi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&mt(t).toBase58(),n&&n!=="undefined"?mt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Me.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Me.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Me.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Me.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Me.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Me.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Me.JITO})).data}};import{merge as wf}from"lodash";var Pr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Ea="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as zi,TOKEN_PROGRAM_ID as sn,AccountLayout as Wn,TOKEN_2022_PROGRAM_ID as Rd}from"@solana/spl-token";import{PublicKey as Sr,SystemProgram as Ld}from"@solana/web3.js";var Ni=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),xe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ce(t)}createTxBuilder(e){return this.scope.checkOwner(),new br({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(Ni(e))}logInfo(...e){this.logger.info(Ni(e))}logAndCreateError(...e){let t=Ni(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Id,createCloseAccountInstruction as Bd,createTransferInstruction as xd,TOKEN_PROGRAM_ID as Dn}from"@solana/spl-token";import{PublicKey as Sd,SystemProgram as Kd}from"@solana/web3.js";import Cd from"bn.js";import{PublicKey as tu,Keypair as Pd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hd}from"@solana/spl-token";import kd from"bn.js";import{PublicKey as dd}from"@solana/web3.js";import za,{isBN as Qa}from"bn.js";import{bits as hm,BitStructure as km,blob as Tm,Blob as Im,cstr as Bm,f32 as xm,f32be as Sm,f64 as Km,f64be as Cm,greedy as Rm,Layout as Lm,ns64 as Om,ns64be as Nm,nu64 as Mm,nu64be as _m,offset as vm,s16 as Vm,s16be as Fm,s24 as Em,s24be as Dm,s32 as Wm,s32be as qm,s40 as Um,s40be as Gm,s48 as Xm,s48be as zm,s8 as Qm,seq as Ym,struct as kA,Structure as jm,u16 as Hm,u16be as Zm,u24 as Jm,u24be as $m,u32 as ed,u32be as td,u40 as nd,u40be as od,u48 as rd,u48be as id,u8 as sd,UInt as ad,union as ud,Union as cd,unionLayoutDiscriminator as ld,utf8 as md}from"@solana/buffer-layout";var lo=Lm,Da=jm,Wa=cd,TA=km,Mi=ad,qa=Im,IA=Rm,hr=sd,Nt=Hm,BA=Jm,mo=ed,xA=nd,SA=rd,Ua=Mm,KA=Zm,CA=$m,RA=td,LA=od,OA=id,NA=_m,MA=Qm,_A=Vm,vA=Em,Qe=Wm,VA=Um,FA=Xm,EA=Om,DA=Fm,WA=Dm,qA=qm,UA=Gm,GA=zm,XA=Nm,zA=xm,QA=Sm,YA=Km,jA=Cm;var Ga=Ym,Xa=ud,HA=ld,be=Tm,ZA=Bm,JA=md,_i=hm,vi=vm;var bn=class extends lo{constructor(t,n,r){super(t,r);this.blob=be(t),this.signed=n}decode(t,n=0){let r=new za(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new za(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},kr=class extends lo{constructor(t){super(8,t);this._lower=_i(mo(),!1),this._upper=_i(mo(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function E(o){return new Mi(1,o)}function Ze(o){return new Mi(4,o)}function P(o){return new bn(8,!1,o)}function Y(o){return new bn(16,!1,o)}function Ya(o){return new bn(1,!0,o)}function Tr(o){return new bn(8,!0,o)}function ja(o){return new bn(16,!0,o)}var qt=class extends lo{constructor(t,n,r,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new qt(be(32),e=>new dd(e),e=>e.toBuffer(),o)}var Vi=class extends lo{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=hr()}encode(t,n,r=0){return t==null?this.discriminator.encode(0,n,r):(this.discriminator.encode(1,n,r),this.layout.encode(t,n,r+1)+1)}decode(t,n=0){let r=this.discriminator.decode(t,n);if(r===0)return null;if(r===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let r=this.discriminator.decode(t,n);if(r===0)return 1;if(r===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function ow(o,e){return new Vi(o,e)}function Ye(o){return new qt(hr(),pd,fd,o)}function pd(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function fd(o){return o?1:0}function rw(o,e){let t=mo("length"),n=M([t,X(o,vi(t,-t.span),"values")]);return new qt(n,({values:r})=>r,r=>({values:r}),e)}function iw(o,e,t){let n=M([P("tag"),e.replicate("data")]);function r({tag:i,data:s}){if(!i.eq(o))throw new Error("Invalid tag, expected: "+o.toString("hex")+", got: "+i.toString("hex"));return s}return new qt(n,r,i=>({tag:o,data:i}),t)}function yd(o){let e=mo("length"),t=M([e,be(vi(e,-e.span),"data")]);return new qt(t,({data:n})=>n,n=>({data:n}),o)}function sw(o){return new qt(yd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),o)}function aw(o,e){let t=Xa(hr(),e);return o.forEach((n,r)=>t.addVariant(r,n,n.property)),t}function uw(o,e,t){let n=M([X(o,e,"values")]);return new qt(n,({values:r})=>r,r=>({values:r}),t)}var Fi=class extends Da{decode(e,t){return super.decode(e,t)}};function M(o,e,t){return new Fi(o,e,t)}var Ei=class extends Wa{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(r=>r.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function cw(o,e,t){return new Ei(o,e,t)}var Di=class extends qa{decode(e,t){let n=super.decode(e,t);if(!n.every(r=>r===0))throw new Error("nonzero padding bytes");return n}};function lw(o){return new Di(o)}function X(o,e,t){let n,r=typeof e=="number"?e:Qa(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Qa(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 Ga(o,r,t)}var nn=M([K("mint"),K("owner"),P("amount"),Ze("delegateOption"),K("delegate"),E("state"),Ze("isNativeOption"),P("isNative"),P("delegatedAmount"),Ze("closeAuthorityOption"),K("closeAuthority")]);function bd(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function Wi(o,...e){if(!bd(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function qi(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function Ha(o,e){Wi(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Br=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),Bt=(o,e)=>o<<32-e|o>>>e;var gw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function gd(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function Ui(o){return typeof o=="string"&&(o=gd(o)),Wi(o),o}var Ir=class{clone(){return this._cloneInto()}},Aw={}.toString;function Za(o){let e=n=>o().update(Ui(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Ad(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let r=BigInt(32),i=BigInt(4294967295),s=Number(t>>r&i),a=Number(t&i),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var Ja=(o,e,t)=>o&e^~o&t,$a=(o,e,t)=>o&e^o&t^e&t,xr=class extends Ir{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Br(this.buffer)}update(e){qi(this);let{view:t,buffer:n,blockLen:r}=this;e=Ui(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let c=Br(e);for(;r<=i-s;s+=r)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){qi(this),Ha(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Ad(n,r-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:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var wd=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]),on=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),rn=new Uint32Array(64),Gi=class extends xr{constructor(){super(64,32,8,!1),this.A=on[0]|0,this.B=on[1]|0,this.C=on[2]|0,this.D=on[3]|0,this.E=on[4]|0,this.F=on[5]|0,this.G=on[6]|0,this.H=on[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:c}=this;return[e,t,n,r,i,s,a,c]}set(e,t,n,r,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)rn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=rn[m-15],p=rn[m-2],y=Bt(d,7)^Bt(d,18)^d>>>3,f=Bt(p,17)^Bt(p,19)^p>>>10;rn[m]=f+rn[m-7]+y+rn[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Bt(a,6)^Bt(a,11)^Bt(a,25),p=l+d+Ja(a,c,u)+wd[m]+rn[m]|0,f=(Bt(n,2)^Bt(n,13)^Bt(n,22))+$a(n,r,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,r,i,s,a,c,u,l)}roundClean(){rn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var eu=Za(()=>new Gi);var _w=ce("Raydium_Util");function nu({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=nn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:Ae(o,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),r.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:tu.default,amount:new kd(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Je({fromPublicKey:o,programId:e=hd}){let t=Pd.generate().publicKey.toBase58().slice(0,32);return{publicKey:Td(o,t,e),seed:t}}function Td(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=eu(n);return new tu(r)}function Xi(o){let{mint:e,tokenAccount:t,owner:n,programId:r=Dn}=o;return Id(t,e,n,r)}function Mt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=Dn}=o;return Bd(e,t,r,n,i)}async function Ut(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(nn.span,n),c=Q(t).add(new Cd(a)),u=Je({fromPublicKey:r,programId:Dn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Kd.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:nn.span,programId:Dn}),Xi({mint:new Sd(Ve.address),tokenAccount:u.publicKey,owner:i,programId:Dn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[Mt({tokenAccount:u.publicKey,payer:r,owner:i})]}}function po({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=Dn}){return xd(o,e,t,BigInt(String(n)),r,i)}var fo=class extends xe{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return Ae(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:sn},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Rd},r.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=nu({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=sn,associatedOnly:r=!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&&(!r||r&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Sr(t.tokenProgram||sn),m=this.getAssociatedTokenAccount(n,new Sr(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(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=zi(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)&&Wn.decode(w.data).mint.equals(n)&&Wn.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(Z)&&r.amount){let w=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.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||[]),r.amount&&(p.instructions.push(po({source:w.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:sn})),p.instructionTypes.push(V.TransferAmount))}return c||(p.endInstructions.push(Mt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let h=Je({fromPublicKey:s,programId:l}),w=await this.scope.connection.getMinimumBalanceForRentExemption(Wn.span),k=Ld.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:w+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Wn.span,programId:l});return p.instructions.push(k,Xi({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(Mt({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=sn,autoUnwrapWSOLToSOL:r}){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 zi(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],i=u}return r&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[Mt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=sn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Sr(Z).equals(i)){let p=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=zi(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(sn)&&Wn.decode(f.data).mint.equals(i)&&Wn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=sn,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Sr(Z))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Ce(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Ce(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as Jd}from"@solana/spl-token";import{PublicKey as ge,SystemProgram as $d}from"@solana/web3.js";import{PublicKey as cu}from"@solana/web3.js";var Qi=M([E("instruction")]),Yi=M([E("instruction")]),Od=M([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),Y("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),P("rewardType"),X(P(),15,"padding")]),Nd=M([P("state"),P("nonce"),K("lpVault"),K("rewardVault"),K(),K(),P(),P(),P("totalReward"),Y("perShareReward"),P("lastSlot"),P("perSlotReward")]),Md=M([P("state"),P("nonce"),K("lpVault"),K("rewardVaultA"),P("totalRewardA"),Y("perShareRewardA"),P("perSlotRewardA"),E("option"),K("rewardVaultB"),be(7),P("totalRewardB"),Y("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),K()]),_d=M([P(),P("state"),P("nonce"),P("validRewardTokenNum"),Y("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(Od,5,"rewardInfos"),K("creator"),K(),X(P(),32,"padding")]),ou=new Proxy(Nd,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),ru=new Proxy(Md,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),yo=new Proxy(_d,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return F(C({},i),{rewardType:((s=Object.entries(an).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),vd=M([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),ji=M([E("instruction"),P("nonce"),X(vd,5,"rewardTimeInfo")]),Hi=M([E("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),Zi=M([E("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),pP=M([P("state"),K("id"),K("owner"),P("deposited"),X(P(),1,"rewardDebts")]),bo=M([P("state"),K("id"),K("owner"),P("deposited"),X(Y(),1,"rewardDebts"),P(""),P("voteLockedBalance"),X(P(),15)]),fP=M([P("state"),K("id"),K("owner"),P("deposited"),X(P(),2,"rewardDebts")]),iu=M([P("state"),K("id"),K("owner"),P("deposited"),X(Y(),2,"rewardDebts"),X(P(),17)]),su=M([P(),P("state"),K("id"),K("owner"),P("deposited"),X(Y(),5,"rewardDebts"),X(P(),16)]),rt=M([E("instruction"),P("amount")]),Vd=M([K("mint"),K("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),Ya("digitShift"),X(E(),7,"reserved1"),X(P(),7,"reserved2")]),au=M([be(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(E(),32,"reserved1"),X(Vd,4,"votingMints"),Tr("timeOffset"),E("bump"),X(E(),7,"reserved2"),X(P(),11,"reserved3")]),Fd=M([Tr("startTime"),Tr("endTime"),E("kind"),X(E(),15,"reserved")]),Ed=M([X(Fd,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ye("isUsed"),Ye("allowClawback"),E("votingMintConfigIdx"),X(E(),29,"reserved")]),uu=M([be(8),K("voterAuthority"),K("registrar"),X(Ed,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),X(E(),94,"reserved")]);var kP=ce("Raydium_farm_config"),lu=new cu("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),mu=new cu("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),du={3:ou,5:ru,6:yo},pu={3:bo,5:iu,6:su},Ji=o=>[3,5,6].indexOf(o)!==-1,$i=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,r=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=i[e])==null?void 0:s.call(i)},an={"Standard SPL":0,"Option tokens":1},bt={[xi.toString()]:3,[Si.toString()]:5,[Fn.toString()]:6};import{PublicKey as se,SystemProgram as gn,SYSVAR_RENT_PUBKEY as qd,SYSVAR_CLOCK_PUBKEY as wo,TransactionInstruction as Ue}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Ud,TOKEN_PROGRAM_ID as dt,ASSOCIATED_TOKEN_PROGRAM_ID as Gd}from"@solana/spl-token";import Kr from"bn.js";function es(o,e,t){return ue([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function ts(o,e){return ue([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function ns(o,e){return ue([e.toBuffer()],o)}function os(o,e,t){return ue([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function rs(o,e,t){return ue([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function is(o,e,t,n){return ue([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import ct from"bn.js";var go=ce("Raydium.farm.util");function Ao({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function $e({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var fu=({programId:o,poolId:e})=>ue([e.toBuffer()],o);function yu(o){return{isSet:new ct(1),rewardPerSecond:Q(o.perSecond),rewardOpenTime:Q(o.openTime),rewardEndTime:Q(o.endTime),rewardType:Q(an[o.rewardType])}}function ss(o){return Q(o.endTime).sub(Q(o.openTime)).mul(Q(o.perSecond))}function qn(o){let e=pu[o];return e||go.logWithError("invalid version",o),e}function Dd(o){let e=du[o];return e||go.logWithError("invalid version",o),e}function Wd(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new ct(t)))return o;let r=new ct(t).sub(o.lastSlot);o.lastSlot=new ct(t);for(let i of o.rewardInfos){if(e.amount.eq(new ct(0)))continue;let s=i.perSlotReward.mul(r);i.perShareReward=i.perShareReward.add(s.mul(new ct(10).pow(new ct(o.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(o.version===6)for(let r of o.rewardInfos){if(r.rewardState.eq(new ct(0)))continue;let i=ct.min(new ct(n),r.rewardEndTime);if(r.rewardOpenTime.gte(i))continue;let a=i.sub(r.rewardLastUpdateTime).mul(r.rewardPerSecond),c=r.totalReward.sub(r.totalRewardEmissioned);c.lt(a)?(a=c,r.rewardLastUpdateTime=r.rewardLastUpdateTime.add(c.div(r.rewardPerSecond))):r.rewardLastUpdateTime=i,!e.amount.eq(new ct(0))&&(r.accRewardPerShare=r.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),r.totalRewardEmissioned=r.totalRewardEmissioned.add(a))}return o}async function EP({connection:o,farmPools:e,owner:t,config:n,chainTime:r}){let i=!1,s=!1,a=new ct(10),c=[];for(let d of e){let p=Ie(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:$e({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await De(o,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=Dd(p);(!b||!b.data||b.data.length!==h.span)&&go.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!==nn.span)&&go.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=nn.decode(b.data);else if(y==="ledger"){let h=qn(p);b&&b.data&&(b.data.length!==h.span&&go.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=h.decode(b.data))}}let m=s||i?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Wd(u[d].state,u[d].lpVault,m,r));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 ct(9)):a.pow(new ct(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 DP(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>Oa(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>Na(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.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 as(o,e,t,n){let r=await o.getAccountInfo(e);if(r===null)throw Error("registrar info check error");let s=au.decode(r.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await o.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=uu.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Xd=ce("Raydium_farm_instruction"),Po={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 ho(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||Xd.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Qi.span);Qi.encode({instruction:s},a);let c=[A({pubkey:t}),A({pubkey:n}),A({pubkey:i,isWritable:!1}),A({pubkey:gn.programId,isWritable:!1}),A({pubkey:qd,isWritable:!1})];return{instruction:new Ue({programId:r,keys:c,data:a}),instructionType:V.FarmV3CreateLedger}}function bu(o){var n;let e=Buffer.alloc(ji.span);ji.encode({instruction:0,nonce:new Kr(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...ci,A({pubkey:o.farmId}),A({pubkey:o.farmAuthority,isWritable:!1}),A({pubkey:o.lpVault}),A({pubkey:o.lpMint,isWritable:!1}),A({pubkey:o.lockVault}),A({pubkey:o.lockMint,isWritable:!1}),A({pubkey:(n=o.lockUserAccount)!=null?n:ve}),A({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(A({pubkey:r.rewardMint,isWritable:!1}),A({pubkey:r.rewardVault}),A({pubkey:r.userRewardToken}));return{instruction:new Ue({programId:o.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function gu(o){let e=Buffer.alloc(Yi.span);Yi.encode({instruction:5},e);let t=[A({pubkey:dt,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.authority,isWritable:!1}),A({pubkey:o.lpVault,isWritable:!1}),A({pubkey:o.rewardVault}),A({pubkey:o.userRewardToken}),A({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ue({programId:o.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function zd(o,e,t,n,r,i,s,a,c,u,l,m,d){let p=M([E("depositEntryIndex"),P("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:dt,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:rr,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Po.voterStakeRegistryDeposit,...f]);return new Ue({keys:y,programId:o,data:b})}function Qd(o,e,t,n){let r=M([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:gn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([...Po.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ue({keys:i,programId:o,data:a})}function Yd(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=M([E("depositEntryIndex"),P("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:dt,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:rr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...Po.voterStakeRegistryWithdraw,...g]);return new Ue({keys:b,programId:o,data:h})}function jd(o,e,t,n,r,i){let s=M([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:r,isSigner:!0,isWritable:!0},{pubkey:gn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Ue({keys:a,programId:o,data:c})}function Hd(o,e,t,n,r,i,s,a){let c=M([E("voterBump"),E("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:rr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...Po.voterStakeRegistryCreateVoter,...l]);return new Ue({keys:u,programId:o,data:m})}function Zd(o,e,t,n,r,i,s,a,c,u,l,m){let d=M([E("depositEntryIndex"),E("kind"),E("option"),P("startTs"),Ze("periods"),Ye("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Gd,isSigner:!1,isWritable:!1},{pubkey:ut,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([...Po.voterStakeRegistryCreateDepositEntry,...y]);return new Ue({keys:p,programId:o,data:f})}async function oh({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=es(n,r,i).publicKey,l=$e({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=bo.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new Kr(0)))throw Error("user do not has new stake amount");let y=ts(e,a).publicKey,f=ns(e,a).publicKey,{publicKey:b,nonce:g}=os(n,u,s),h=Ae(b,y,c).publicKey,{publicKey:w,nonce:k}=rs(n,u,s),B=is(t,r,i,s).publicKey,T=[],S=Ae(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(Ud(s,S,s,y)),await o.getAccountInfo(b)===null){let W=jd(t,r,s,i,s,B);T.push(W,Hd(n,u,b,w,s,s,g,k))}let{index:I,isInit:R}=await as(o,u,b,y);return R||T.push(Zd(n,u,b,h,s,s,y,I,0,void 0,0,!1)),T.push(zd(n,u,b,h,S,s,l,a,y,f,e,I,p),Qd(n,u,b,w)),T}async function rh({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=es(n,r,i).publicKey,l=$e({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=bo.decode(m.data);if(d.voteLockedBalance.eq(new Kr(0)))throw Error("user has vote locked balance = 0");let p=ts(e,a).publicKey,y=ns(e,a).publicKey,{publicKey:f}=os(n,u,s),b=Ae(f,p,c).publicKey,{publicKey:g}=rs(n,u,s),h=is(t,r,i,s).publicKey,w=[],{index:k,isInit:B}=await as(o,u,f,p);if(!B)throw Error("deposit entry index check error");return w.push(Yd(n,u,f,s,h,g,b,Ae(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),w}function us({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(Hi.span);Hi.encode({instruction:3,rewardReopenTime:Q(r.openTime),rewardEndTime:Q(r.endTime),rewardPerSecond:Q(r.perSecond)},i);let s=[A({pubkey:dt,isWritable:!1}),A({pubkey:n.id}),A({pubkey:n.lpVault,isWritable:!1}),A({pubkey:e}),A({pubkey:t}),A({pubkey:o,isWritable:!1,isSigner:!0})];return new Ue({programId:n.programId,keys:s,data:i})}function cs({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(Zi.span);Zi.encode({instruction:4,isSet:new Kr(1),rewardPerSecond:Q(r.perSecond),rewardOpenTime:Q(r.openTime),rewardEndTime:Q(r.endTime),rewardType:Q(an[r.rewardType])},i);let s=[...ci,A({pubkey:t.id}),A({pubkey:t.authority,isWritable:!1}),A({pubkey:r.mint,isWritable:!1}),A({pubkey:n}),A({pubkey:e}),A({pubkey:o,isWritable:!1,isSigner:!0})];return new Ue({programId:t.programId,keys:s,data:i})}function ih(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:r,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=o,[l,m]=[new se(e.programId),new se(e.id)],d=$e({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(rt.span);rt.encode({instruction:a,amount:c},p);let y=n===6?[A({pubkey:dt,isWritable:!1}),...u?[A({pubkey:gn.programId,isWritable:!1})]:[],A({pubkey:m}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:new se(t.lpVault)}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:r})]:[A({pubkey:m}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:r}),A({pubkey:new se(t.lpVault)}),A({pubkey:i[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,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 se(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(A({pubkey:new se(t.rewardInfos[f].vault)})),y.push(A({pubkey:i[f]}));return new Ue({programId:l,keys:y,data:p})}function ko(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new se(e.programId),new se(e.id)],u=$e({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:2,amount:Q(s)},l);let m=[A({pubkey:dt,isWritable:!1}),A({pubkey:c}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:new se(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 se(t.rewardInfos[d].vault)})),m.push(A({pubkey:r[d]}));return new Ue({programId:a,keys:m,data:l})}function To(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new se(e.programId),new se(e.id)],l=$e({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:12,amount:Q(s)},m);let d=[A({pubkey:u}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new se(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:r[p]})),d.push(A({pubkey:new se(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ue({programId:c,keys:d,data:m})}function Io(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new se(e.programId),new se(e.id)],l=$e({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Q(s)},m);let d=[A({pubkey:u}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new se(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ue({programId:c,keys:d,data:m})}function Au(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new se(e.programId),new se(e.id)],l=$e({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:10,amount:Q(s)},m);let d=[A({pubkey:u}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new se(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ue({programId:c,keys:d,data:m})}function wu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new se(e.programId),new se(e.id)],l=$e({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Q(s)},m);let d=[A({pubkey:u}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new se(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new se(t.rewardInfos[0].vault)}),A({pubkey:wo,isWritable:!1}),A({pubkey:dt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:r[p]})),d.push(A({pubkey:new se(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ue({programId:c,keys:d,data:m})}function Pu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new se(e.programId),new se(e.id)],u=$e({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:1,amount:Q(s)},l);let m=[A({pubkey:dt,isWritable:!1}),A({pubkey:gn.programId,isWritable:!1}),A({pubkey:c}),A({pubkey:new se(t.authority),isWritable:!1}),A({pubkey:new se(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 se(t.rewardInfos[d].vault)})),m.push(A({pubkey:r[d]}));return new Ue({programId:a,keys:m,data:l})}var Bo=class extends xe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(ve)){let n=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ss(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:r=Fn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ge(e.lpMint.address),lockInfo:{lockMint:lu,lockVault:mu},version:6,rewardInfos:t,programId:r},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Je({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(yo.span);c.addInstruction({instructions:[$d.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:yo.span,programId:a.programId})]});let{publicKey:d,nonce:p}=fu({programId:new ge(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(an[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(yu(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(ve)?new ge(Ve.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 ge(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}=bu({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:r}){var b;let i=bt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ie((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(ve)?new ge(Ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new ge(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:ve,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:[us({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=bt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ie((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(ve)?new ge(Ve.address):m.mint,p=a.rewardInfos.findIndex(w=>new ge(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:ve,{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=us({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[h],instructionTypes:[V.FarmV6Restart]})}return u.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=bt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=r.mint.equals(ve)?new ge(Ve.address):r.mint,m=Ao({programId:new ge(n.programId),poolId:new ge(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,u.addInstruction({instructions:[cs({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=bt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of r){let m=l.mint.equals(ve)?new ge(Ve.address):l.mint,d=Ao({programId:new ge(n.programId),poolId:new ge(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=cs({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:r,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=bt[d];Ji(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ge(n.programId),new ge(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=$e({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=Ae(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===Z.toString(),G=w[D.mint.address];if(!G){let{account:q,instructionParams:ot}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new ge(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,ot&&h.addInstruction(ot)}w[D.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=qn(p).decode(x.data)),n.programId!==Fn.toString()&&!S){let{instruction:D,instructionType:J}=ho({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[J]})}let L=$i({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});L&&this.logAndCreateError(L);let I={amount:Q(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(D=>new ge(D))},R=p===6?Pu(I):p===5?wu(I):Au(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:r,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=bt[n.programId];Ji(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=Ae(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=$e({programId:new ge(n.programId),poolId:new ge(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(L);if(I)qn(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}=ho({id:new ge(y.id),programId:new ge(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===Z.toString(),w=b[g.toString()];if(!w){let{account:L,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ge(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===Z.toString(),R=b[L.mint.address];if(!R){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new ge(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=$i({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:Q(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:w,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(L=>new ge(L))},S=p===6?ko(T):p===5?To(T):Io(T),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=bt[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===ve.toString()?new ge(Ve.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:ve,u=this.createTxBuilder(),l;if(t.equals(ve)){let y=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ss(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:[Jd(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=gu({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.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:r,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=Ae(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=bt[f],k=b.address,B=n&&k===Z.toString(),T=m[k];if(!T){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ge(k),notUseTokenAccount:B,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=W,D&&l.addInstruction(D)}m[k.toString()]=T;let S=[];for(let W of g){let D=n&&W.mint.address===Z.toString(),J=m[W.mint.address];if(!J){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new ge(W.mint.address),notUseTokenAccount:D,createInfo:{payer:r||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:Ee,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(W=>new ge(W))},I=w===6?ko(L):w===5?To(L):Io(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 tt}from"@solana/web3.js";import{AccountLayout as Dp,NATIVE_MINT as rc,TOKEN_PROGRAM_ID as Qn}from"@solana/spl-token";var Kh=M([Ze("mintAuthorityOption"),K("mintAuthority"),P("supply"),E("decimals"),E("isInitialized"),Ze("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as ep}from"@solana/web3.js";import{MintLayout as hu,TOKEN_PROGRAM_ID as tp}from"@solana/spl-token";var Fh=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new ep(e));return!t||t.data.length!==hu.span?void 0:hu.decode(t.data)},Eh=({mint:o,decimals:e,programId:t=tp,logoURI:n="",priority:r=3})=>{let i=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:r}},Cr=o=>new ye({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),xo=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Ce(i,["amount","isRaw","name"]);return new fe(new ye({mint:mt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function Dh(o){return o.address===Rt.address?Ve:o}function Wh(o){return o.address===Ve.address?Rt:o}var it=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Ce(i,["address","programId","decimals"]);return C({chainId:101,address:mt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},un=o=>o?F(C({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(C({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Xn,ASSOCIATED_TOKEN_PROGRAM_ID as yp}from"@solana/spl-token";import{PublicKey as we,TransactionInstruction as Gt,SystemProgram as Cu,SYSVAR_RENT_PUBKEY as bp}from"@solana/web3.js";var ls=M([E("instruction"),P("amountIn"),P("minAmountOut")]),ms=M([E("instruction"),P("maxAmountIn"),P("amountOut")]),$h=M([E("instruction"),E("nonce")]),ds=M([E("instruction"),E("nonce"),P("startTime")]),So=M([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"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),P("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("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")]),np=M([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"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("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")]),ps=M([E("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide")]),fs=M([E("instruction"),P("amountIn")]),ek={4:So,5:np},ku=M([P("fee")]);import{PublicKey as op}from"@solana/web3.js";var Gn=new op("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),wn=5e4,rp=M([P("x"),P("y"),P("price")]),ip=M([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),X(rp,wn,"DataElement")]);function sp(o,e){return[0,wn-2]}function ap(o){return[0,wn-2]}function up(o){return[0,wn-2]}function cp(o,e,t){let[n,r]=sp(e,t),i=n,s=r,a=0,c=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=wn-2)return[a,a,!1];let u=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(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 ys(o,e,t){let[n,r,i]=cp(o,e,t);if(!i)return 0;if(n===r){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,c=o.DataElement[r].x,u=o.DataElement[r].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*o.multiplier*l/p}}function An(o,e,t){return e*o.multiplier/t}function Tu(o,e,t){return e*t/o.multiplier}function lp(o,e){let[t,n]=ap(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>wn-2)return[s,s,!1];let c=o.DataElement[s].x,u=o.DataElement[s-1].x,l=o.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];r=s+1}}return[s,s,!1]}function mp(o,e){let[t,n]=up(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=wn-2)return[s,s,!1];let c=o.DataElement[s].y,u=o.DataElement[s-1].y,l=o.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)r=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 Iu(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=lp(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=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-(r-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-r)*o.multiplier/l),[y,f,!1,a]}}}function dp(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=mp(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function pp(o,e){let t=Iu(o,e,0,!1);return t[3]?t[0]:0}function Bu(o,e,t,n){let r=ys(o,e,t),i=An(o,e,r),s=An(o,t,r),a=An(o,n,r),c=!0,[u,l,m,d]=Iu(o,i,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=s-l;return Tu(o,p,r)}}function xu(o,e,t,n){let r=ys(o,e,t),i=An(o,e,r),s=An(o,t,r),a=An(o,n,r),c=!1,[u,l,m,d]=dp(o,s,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=i-l;return Tu(o,p,r)}}function fp(o){let e=ip.decode(o);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function Su(o,e,t,n){let r=pp(o,An(o,e,ys(o,e,t)))/o.multiplier;return n?r:1/r}var Un=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(Gn);e&&(this._layoutData=fp(e==null?void 0:e.data))}}};var Ku=ce("Raydium_liquidity_instruction");function Ru(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(ps.span);ps.encode({instruction:3,baseAmountIn:Q(r),quoteAmountIn:Q(i),fixedSide:s==="base"?Ee:ga},a);let c=[A({pubkey:Xn,isWritable:!1}),A({pubkey:new we(e.id)}),A({pubkey:new we(t.authority),isWritable:!1}),A({pubkey:new we(t.openOrders),isWritable:!1}),A({pubkey:new we(t.targetOrders)}),A({pubkey:new we(e.lpMint.address)}),A({pubkey:new we(t.vault.A)}),A({pubkey:new we(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(A({pubkey:Gn})),c.push(A({pubkey:new we(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 we(t.marketEventQueue),isWritable:!1})),new Gt({programId:new we(e.programId),keys:c,data:a})}function bs(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=Ie(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(fs.span);fs.encode({instruction:4,amountIn:Q(r)},a);let c=[A({pubkey:Xn,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:Gn})):(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 Gt({programId:i.programId,keys:c,data:a})}return new Gt({programId:i.programId,keys:[]})}function Lu({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,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=M([E("instruction"),E("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),L=[{pubkey:Xn,isSigner:!1,isWritable:!1},{pubkey:yp,isSigner:!1,isWritable:!1},{pubkey:Cu.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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 Gt({keys:L,programId:o,data:I}),instructionType:V.AmmV4CreatePool}}function bk(o){let e=M([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new we(o.id),isWritable:!1}),A({pubkey:new we(o.authority),isWritable:!1}),A({pubkey:new we(o.openOrders),isWritable:!1}),A({pubkey:new we(o.vault.A),isWritable:!1}),A({pubkey:new we(o.vault.B),isWritable:!1}),A({pubkey:new we(o.mintLp.address),isWritable:!1}),A({pubkey:new we(o.marketId),isWritable:!1}),A({pubkey:new we(o.marketEventQueue),isWritable:!1})];return new Gt({programId:new we(o.programId),keys:n,data:t})}function gp({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=Ie(o),s=Buffer.alloc(ls.span);ls.encode({instruction:9,amountIn:Q(t),minAmountOut:Q(n)},s);let a=[A({pubkey:Xn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders})];return r===4&&a.push(A({pubkey:i.targetOrders})),a.push(A({pubkey:i.vault.A}),A({pubkey:i.vault.B})),r===5&&a.push(A({pubkey:Gn})),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 Gt({programId:i.programId,keys:a,data:s})}function Ap({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=Ie(o),s=Buffer.alloc(ms.span);ms.encode({instruction:11,maxAmountIn:Q(t),amountOut:Q(n)},s);let a=[A({pubkey:Xn,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 r===5&&a.push(A({pubkey:Gn})),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 Gt({programId:i.programId,keys:a,data:s})}function Rr(o){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:i,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return gp(F(C({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return Ap(F(C({},a),{maxAmountIn:r,amountOut:i}),t);Ku.logWithError("invalid params","params",o)}throw Ku.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function gk({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(ds.span);ds.encode({instruction:0,nonce:5,startTime:Q(t)},n);let r=Ie(o),i=[A({pubkey:Xn,isWritable:!1}),A({pubkey:Cu.programId,isWritable:!1}),A({pubkey:bp,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.authority,isWritable:!1}),A({pubkey:r.openOrders}),A({pubkey:r.mintLp.address}),A({pubkey:r.mintA.address,isWritable:!1}),A({pubkey:r.mintB.address,isWritable:!1}),A({pubkey:r.vault.A,isWritable:!1}),A({pubkey:r.vault.B,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.targetOrders}),A({pubkey:e.lpTokenAccount}),A({pubkey:r.id,isWritable:!1}),A({pubkey:r.marketProgramId,isWritable:!1}),A({pubkey:r.marketId,isWritable:!1}),A({pubkey:e.payer,isSigner:!0})];return new Gt({programId:r.programId,keys:i,data:n})}function Ou({poolKeys:o}){let e=M([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new we(o.id),isWritable:!1}),A({pubkey:new we(o.authority),isWritable:!1}),A({pubkey:new we(o.openOrders),isWritable:!1}),A({pubkey:new we(o.vault.A),isWritable:!1}),A({pubkey:new we(o.vault.B),isWritable:!1}),A({pubkey:new we(o.mintLp.address),isWritable:!1}),A({pubkey:new we(o.marketId),isWritable:!1}),A({pubkey:new we(o.marketEventQueue),isWritable:!1})];return{instruction:new Gt({programId:new we(o.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as je,TOKEN_2022_PROGRAM_ID as cn,ASSOCIATED_TOKEN_PROGRAM_ID as Hu}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as St,SystemProgram as zn,Keypair as Bs}from"@solana/web3.js";import Zu from"bn.js";import Cp from"bn.js";function Nu(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function wk(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function Pk(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function Lr(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function gs(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function As(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function Ko(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Mu(o,e){return Ko(o,e)?null:gs(o,e)}function _u(o,e){return Ko(o,e)?null:As(o,e)}var wp=Buffer.from("amm_config","utf8"),Pp=Buffer.from("pool","utf8"),hp=Buffer.from("pool_vault","utf8"),kp=Buffer.from("pool_reward_vault","utf8"),vu=Buffer.from("position","utf8"),Tp=Buffer.from("tick_array","utf8"),Ip=Buffer.from("operation","utf8"),Bp=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Ik(o,e){return ue([wp,Nu(e)],o)}function Vu(o,e,t,n){return ue([Pp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function ws(o,e,t){return ue([hp,e.toBuffer(),t.toBuffer()],o)}function Fu(o,e,t){return ue([kp,e.toBuffer(),t.toBuffer()],o)}function Pe(o,e,t){return ue([Tp,e.toBuffer(),Lr(t)],o)}function Pn(o,e,t,n){return ue([vu,e.toBuffer(),Lr(t),Lr(n)],o)}function gt(o,e){return ue([vu,e.toBuffer()],o)}function Or(o){return ue([Buffer.from("metadata","utf8"),_n.toBuffer(),o.toBuffer()],_n)}function Co(o){return ue([Ip],o)}function pt(o,e){return ue([Bp,e.toBuffer()],o)}import At from"bn.js";var pe=new At(0),ft=new At(1),Xt=new At(-1),yt=new At(1).shln(64),Nr=new At(1).shln(128),Ps=yt.sub(ft),Ro=64,Eu=Nr.subn(1),et=-443636,st=-et,_t=new At("4295048016"),vt=new At("79226673521066979257578248091"),Mr=new At("4295048017"),_r=new At("79226673521066979257578248090"),Du=16,Wu="59543866431248",qu="184467440737095516",Uu="15793534762490258745",vr=new At(10).pow(new At(6)),xp=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(xp||{}),Sk={[500]:10,[3e3]:60,[1e4]:200},Kk={version:6,liquidity:pe,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:pe,feeGrowthGlobalX64B:pe,protocolFeesTokenA:pe,protocolFeesTokenB:pe,swapInAmountTokenA:pe,swapOutAmountTokenB:pe,swapInAmountTokenB:pe,swapOutAmountTokenA:pe,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},Gu={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:[]},Ck=new At("18446744073700000000");var Sp=15,me=class{static async getTickArrays(e,t,n,r,i,s,a){let c=[],u=j.getTickArrayStartIndexByTick(r,i),l=j.getInitializedTickArrayInRange(s,a,i,u,Math.floor(Sp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=Pe(t,n,l[p]);c.push(y)}let m=(await Tt(e,c)).map(p=>p!==null?Lo.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,r,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,r,i){let s=Math.floor(e/me.tickCount(t)),a=n?j.searchLowBitFromStart(r,i,s-1,1,t):j.searchHightBitFromStart(r,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let i;if(r){let a=We-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<We;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=Pe(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=j.getTickArrayStartIndexByTick(r,i),c=Math.floor((r-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<We;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Pe(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(j.checkIsOutOfBoundary(e)){if(e>st)return!1;let n=j.getTickArrayStartIndexByTick(et,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return We*e}};import ie from"bn.js";import{PublicKey as xt}from"@solana/web3.js";import Le from"bn.js";var hs=14,zt=class{static maxTickInTickarrayBitmap(e){return e*We*hn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let i=n*r;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!me.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-me.tickCount(n):t+me.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*We,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(r){let l=e.shln(1024-u-1),m=Mu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=_u(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-me.tickCount(n)}}}},Oo=class{static getBitmapOffset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=zt.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=zt.maxTickInTickarrayBitmap(e),n=-t;if(st<=t)throw Error(`extensionTickBoundary check error: ${st}, ${t}`);if(n<=et)throw Error(`extensionTickBoundary check error: ${n}, ${et}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(r).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let i=me.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:i,maxValue:s}=zt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let c=j.mergeTickArrayBitmap(e).shln(hn-1-a),u=Ko(512,c)?null:gs(512,c);if(u!==null){let l=t-u*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=Ko(512,c)?null:As(512,c);if(u!==null){let l=t+u*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-me.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%zt.maxTickInTickarrayBitmap(t),r=Math.floor(n/me.tickCount(t));return e<0&&n!=0&&(r=hn-r),r}};import Vt from"bn.js";var No=class{static getfeeGrowthInside(e,t,n){let r=new Vt(0),i=new Vt(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Vt(0),a=new Vt(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,r),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,yt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,yt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,yt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,yt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,yt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,yt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Vt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Vt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Vt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Vt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,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+r:1-r,m=le.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[ke(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),ke(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[ke(new Vt(new v(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),ke(new Vt(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:Ot(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Xu}from"@solana/spl-token";var Oe=class{static getOutputAmountAndRemainAccounts(e,t,n,r,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}=kn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(Xt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,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}=Pe(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=kn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(Xt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Oe.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Oo.checkTickArrayIsInit(me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Pe(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=Pe(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/me.tickCount(e.tickSpacing)),r=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=me.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=zt.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=Oo.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<et||t>st)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,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 xt(d)});if(p.tokenMint.equals(xt.default))continue;if(n<=p.openTime.toNumber()||r.eq(pe)){s.push(p);continue}let y=new Le(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,yt),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:r}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=zt.maxTickInTickarrayBitmap(e),n=-t;return t>st&&(t=me.getArrayStartIndex(st,e)+me.tickCount(e)),n<et&&(n=me.getArrayStartIndex(et,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/me.tickCount(t)*hn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await De(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=Qu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Pe(c.programId,c.id,m);i.push({pubkey:d}),r[d.toString()]=c.id}}let s=await De(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=r[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Lo.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:r=!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(gt(p,d).publicKey);let l=await Tt(t,u,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=Vr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,amountB:k}=le.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 Le(0)})),leverage:B,tokenFeeAmountA:new Le(0),tokenFeeAmountB:new Le(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await Tt(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=Lo.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[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:L}=await No.GetPositionFees(f,g,T,S),I=await No.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Le(0))?x:new Le(0),g.tokenFeeAmountB=L.gte(new Le(0))?L:new Le(0);for(let R=0;R<I.length;R++)g.rewardInfos[R].pendingReward=I[R].gte(new Le(0))?I[R]:new Le(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,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?_t.add(new Le(1)):vt.sub(new Le(1)):u=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ke(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Oe.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((W=p.fee)!=null?W:pe),u,c),w=ke(f,d,r,!1),k=ee.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new v(1).div(k),T=f.mul(new Le(Math.floor((1-s)*1e10))).div(new Le(1e10)),S=ke(T,d,r,!1),x=l?e.currentPrice:new v(1).div(e.currentPrice),L=new v(B).sub(x).abs(),I=x,R=new Fe(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:Ot(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:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=r.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new ye(F(C({},u),{mint:u.address,isToken2022:u.programId===Xu.toBase58()})),new ye(F(C({},l),{mint:l.address,isToken2022:l.programId===Xu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:w,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Oe.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new xt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new fe(m,y.amount),fee:y.fee===void 0?void 0:new fe(m,y.fee)}),L=F(C({},f),{amount:new fe(d,f.amount),fee:f.fee===void 0?void 0:new fe(d,f.fee)}),I=F(C({},b),{amount:new fe(d,b.amount),fee:b.fee===void 0?void 0:new fe(d,b.fee)}),R=new qe({baseToken:m,denominator:new Le(10).pow(new Le(20+m.decimals)),quoteToken:d,numerator:h.mul(new v(10**(20+d.decimals))).toFixed(0)}),W=new qe({baseToken:m,denominator:new Le(10).pow(new Le(20+m.decimals)),quoteToken:d,numerator:w.mul(new v(10**(20+d.decimals))).toFixed(0)}),D=new fe(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:r}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:r,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:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[mt(e.mintA.address).toString()],d=r[mt(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}=le.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=le.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,ot;let J=D.mint.decimals,G=r[D.mint.address];return c<((q=D.startTime)!=null?q:0)||c>((ot=D.endTime)!=null?ot: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:r,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(r),p=a?1-s:1+s,y=ke(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Le(new v(y.amount.sub((h=y.fee)!=null?h:pe).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?le.getLiquidityFromTokenAmountA(m,d,f,!a):new Le(0);else if(l.lte(d)){let w=le.getLiquidityFromTokenAmountA(l,d,f,!a),k=le.getLiquidityFromTokenAmountB(m,l,f);b=t?w:k}else b=t?new Le(0):le.getLiquidityFromTokenAmountB(m,d,f);return Oe.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:i,slippage:s,add:a}){var b,g,h,w;let c=ee.getSqrtPriceX64FromTick(n),u=ee.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=le.getAmountsFromLiquidity(ee.priceToSqrtPriceX64(new v(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[ke(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ke(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ke(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),ke(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:Ot(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(c=>!n[c.id]).map(c=>new xt(c.id));(await Tt(e,r)).forEach((c,u)=>{!c||(n[r[u].toBase58()]=Tn.decode(c.data))});let s=t.map(c=>pt(new xt(c.programId),new xt(c.id)).publicKey),a=await Oe.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(C({},c),{[u.id]:F(C({},n[u.id]),{id:new xt(u.id),version:6,programId:new xt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(C({},u.config),{id:new xt(u.config.id),fundOwner:""}),currentPrice:new v(u.price),exBitmapInfo:a[pt(new xt(u.programId),new xt(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 fT({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:r,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var w,k,B,T;let[u,l,m,d]=e<t?[e,t,n,r]:[t,e,r,n],p=ee.priceToSqrtPriceX64(new v(o.price),o.mintA.decimals,o.mintB.decimals),y=ee.getSqrtPriceX64FromTick(u),f=ee.getSqrtPriceX64FromTick(l),[b,g]=[ke(m,(w=o.mintA.extensions)==null?void 0:w.feeConfig,a,!c),ke(d,(k=o.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=le.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:pe),g.amount.sub((T=g.fee)!=null?T:pe));return le.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var ks={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function zu(o){return F(C({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:ks,week:ks,month:ks,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:F(C({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(pe)||(i=i.add(ft)),i}static mulDivFloor(e,t,n){if(n.eq(pe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(pe))throw new Error("division by 0");return e.mul(t).add(n.sub(ft)).div(n)}static x64ToDecimal(e,t){return new v(e.toString()).div(v.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ie(e.mul(v.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Nr).sub(t).mod(Nr)}};function Ge(o,e){return Ts(o.mul(e),64,256)}function Kp(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ts(o,e,t){let n=o.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,r){if(!e.gt(pe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(pe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(pe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(pe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(pe))return e;let i=t.shln(Ro);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,ft,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,r){let i=n.shln(Ro);if(r)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,ft,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<et||e>st)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ie("18445821805675395072"):new ie("18446744073709551616");return(t&2)!=0&&(n=Ge(n,new ie("18444899583751176192"))),(t&4)!=0&&(n=Ge(n,new ie("18443055278223355904"))),(t&8)!=0&&(n=Ge(n,new ie("18439367220385607680"))),(t&16)!=0&&(n=Ge(n,new ie("18431993317065453568"))),(t&32)!=0&&(n=Ge(n,new ie("18417254355718170624"))),(t&64)!=0&&(n=Ge(n,new ie("18387811781193609216"))),(t&128)!=0&&(n=Ge(n,new ie("18329067761203558400"))),(t&256)!=0&&(n=Ge(n,new ie("18212142134806163456"))),(t&512)!=0&&(n=Ge(n,new ie("17980523815641700352"))),(t&1024)!=0&&(n=Ge(n,new ie("17526086738831433728"))),(t&2048)!=0&&(n=Ge(n,new ie("16651378430235570176"))),(t&4096)!=0&&(n=Ge(n,new ie("15030750278694412288"))),(t&8192)!=0&&(n=Ge(n,new ie("12247334978884435968"))),(t&16384)!=0&&(n=Ge(n,new ie("8131365268886854656"))),(t&32768)!=0&&(n=Ge(n,new ie("3584323654725218816"))),(t&65536)!=0&&(n=Ge(n,new ie("696457651848324352"))),(t&131072)!=0&&(n=Ge(n,new ie("26294789957507116"))),(t&262144)!=0&&(n=Ge(n,new ie("37481735321082"))),e>0&&(n=Eu.div(n)),n}static getTickFromPrice(e,t,n){return ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(vt)||e.lt(_t))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ie(t-64),r=Kp(n,32,128),i=new ie("8000000000000000","hex"),s=0,a=new ie(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new ie(0))&&s<Du;){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=r.add(u).mul(new ie(Wu)),d=Ts(m.sub(new ie(qu)),64,128).toNumber(),p=Ts(m.add(new ie(Uu)),64,128).toNumber();return d==p?d:ee.getSqrtPriceX64FromTick(p).lte(e)?p:d}},In=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let i=In.getTickWithPriceAndTickspacing(e,t,n,r),s=ee.getSqrtPriceX64FromTick(i);return ee.sqrtPriceX64ToPrice(s,n,r)}},le=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(pe))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Ro),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),ft,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(pe))throw new Error("sqrtPriceX64A must greater than 0");return r?ne.mulDivCeil(n,t.sub(e),yt):ne.mulDivFloor(n,t.sub(e),yt)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return r?ne.mulDivRoundingUp(a,ft,Ps):a.shrn(Ro)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,Ps,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return le.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=le.getLiquidityFromTokenAmountA(e,n,r,!1),a=le.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return le.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:le.getTokenAmountAFromLiquidity(t,n,r,i),amountB:new ie(0)};if(e.lt(n)){let s=le.getTokenAmountAFromLiquidity(e,n,r,i),a=le.getTokenAmountBFromLiquidity(t,e,r,i);return{amountA:s,amountB:a}}else return{amountA:new ie(0),amountB:le.getTokenAmountBFromLiquidity(t,n,r,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,i,s,a){let{amountA:c,amountB:u}=le.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new ie(new v(c.toString()).mul(l).toFixed(0)),d=new ie(new v(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee: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=le.getAmountsFromLiquidity(u,l,m,r,s),[y,f]=[ke(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),ke(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,c)],[b,g]=[ke(new ie(new v(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),ke(new ie(new v(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Ot(y.expirationTime,f.expirationTime)}}},kn=class{static swapCompute(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(pe))throw new Error("amountSpecified must not be 0");if(y||(y=s?_t.add(ft):vt.sub(ft)),s){if(y.lt(_t))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(vt))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(pe),g={amountSpecifiedRemaining:d,amountCalculated:pe,sqrtPriceX64:m,tick:u>p?Math.min(p+me.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ie(0)},h=p,w=n[p],k=0,B=!s&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(pe)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(w,g.tick,l,s,B),x=S||null,L=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let R=Oe.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:i},h,s);if(!R.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=R.nextStartIndex;let{publicKey:W}=Pe(e,t,h);L=W,w=n[h];try{x=j.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<et?T.tickNext=et:T.tickNext>st&&(T.tickNext=st),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]=kn.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(Xt)),g.liquidity=le.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}=me.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(Pe(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:pe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,i){let s={sqrtPriceX64Next:new ie(0),amountIn:new ie(0),amountOut:new ie(0),feeAmount:new ie(0)},a=e.gte(t),c=r.gte(pe);if(c){let l=ne.mulDivFloor(r,vr.sub(new ie(i.toString())),vr);s.amountIn=a?le.getTokenAmountAFromLiquidity(t,e,n,!0):le.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?le.getTokenAmountBFromLiquidity(t,e,n,!1):le.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(Xt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromOutput(e,n,r.mul(Xt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=le.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=le.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:le.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:le.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(r.mul(Xt))&&(s.amountOut=r.mul(Xt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new ie(i),vr.sub(new ie(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var We=60,hn=512,j=class{static getTickArrayAddressByTick(e,t,n,r){let i=j.getTickArrayStartIndexByTick(n,r),{publicKey:s}=Pe(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=We)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=me.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*me.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*We,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*We,i=Math.floor(t/r)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*We:e+t*We}static mergeTickArrayBitmap(e){let t=new Cp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,i){let s=Math.floor(r/(n*We));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,hn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,r,i);for(let c of a){let{publicKey:u}=Pe(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,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===r)break}let c=me.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===r)break}let c=me.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<et||e>st}static nextInitTick(e,t,n,r,i){if(me.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<We;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=We-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<We;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let r=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new v(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new v(1).div(t),i=In.getTickWithPriceAndTickspacing(r,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 r=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new v(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new v(1).div(t),i=In.getTickWithPriceAndTickspacing(r,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 Yu=M([be(8),E("bump"),Nt("index"),K(""),Ze("protocolFeeRate"),Ze("tradeFeeRate"),Nt("tickSpacing"),X(P(),8,"")]),Rp=M([Ze("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),X(Y(),1,"")]),Is=M([be(8),Ye("initialized"),K("poolId"),X(Rp,1e3,"observations"),X(Y(),5,"")]),Lp=M([E("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),Y("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Y("rewardGrowthGlobalX64")]),Tn=M([be(8),E("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Nt("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),Qe("tickCurrent"),Nt("observationIndex"),Nt("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),E("status"),X(E(),7,""),X(Lp,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")]),Op=M([Y("growthInsideLastX64"),P("rewardAmountOwed")]),Vr=M([be(8),E("bump"),K("nftMint"),K("poolId"),Qe("tickLower"),Qe("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),X(Op,3,"rewardInfos"),X(P(),8,"")]),FT=M([be(8),E("bump"),K("poolId"),Qe("tickLowerIndex"),Qe("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),X(Y(),3,"rewardGrowthInside"),X(P(),8,"")]),Np=M([Qe("tick"),ja("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),X(Y(),3,"rewardGrowthsOutsideX64"),X(Ze(),13,"")]),Lo=M([be(8),K("poolId"),Qe("startTickIndex"),X(Np,We,"ticks"),E("initializedTickCount"),X(E(),115,"")]),ju=M([be(329),X(K(),100,"whitelistMints")]),Qu=M([be(8),K("poolId"),X(X(P(),8),hs,"positiveTickArrayBitmap"),X(X(P(),8),hs,"negativeTickArrayBitmap")]);var Ju=ce("Raydium_Clmm"),Kt={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]},Se=class{static createPoolInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=M([Y("sqrtPriceX64"),P("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey: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:zn.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...Kt.createPool,...g]);return new St({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:c,startTime:u,forerunCreate:l}=e,m=Je({fromPublicKey:r,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[zn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Is.span),space:Is.span,programId:n})],{publicKey:f}=Vu(n,a,d,p),{publicKey:b}=ws(n,f,d),{publicKey:g}=ws(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new U(i.programId||je),p,g,new U(s.programId||je),pt(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,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,w,k,B,T,S,x,L,I){let R=M([Qe("tickLowerIndex"),Qe("tickUpperIndex"),Qe("tickArrayLowerStartIndex"),Qe("tickArrayUpperStartIndex"),Y("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:ut,isSigner:!1,isWritable:!1},{pubkey:zn.programId,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:Hu,isSigner:!1,isWritable:!1},{pubkey:_n,isSigner:!1,isWritable:!1},{pubkey:cn,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([...Kt.openPosition,...J]);return new St({keys:D,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,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=Bs.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(d,p,f),{publicKey:h}=Pe(d,p,b),{publicKey:w}=Ae(n.wallet,y,je),{publicKey:k}=Or(y),{publicKey:B}=gt(d,y),{publicKey:T}=Pn(d,p,r,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),r,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:r,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=Bs.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(d,p,f),{publicKey:h}=Pe(d,p,b),{publicKey:w}=Ae(n.wallet,y,je),{publicKey:k}=Or(y),{publicKey:B}=gt(d,y),{publicKey:T}=Pn(d,p,r,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),r,i,f,b,u,s,a,c,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?pt(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,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,w,k,B,T,S,x,L,I){let R=M([Qe("tickLowerIndex"),Qe("tickUpperIndex"),Qe("tickArrayLowerStartIndex"),Qe("tickArrayUpperStartIndex"),Y("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:ut,isSigner:!1,isWritable:!1},{pubkey:zn.programId,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:Hu,isSigner:!1,isWritable:!1},{pubkey:_n,isSigner:!1,isWritable:!1},{pubkey:cn,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 Zu(0),amountMaxA:S==="MintA"?x:L,amountMaxB:S==="MintA"?L:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},J);let G=Buffer.from([...Kt.openPosition,...J]);return new St({keys:D,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,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=Bs.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(p,y,f),{publicKey:h}=Pe(p,y,b),{publicKey:w}=Ae(n.wallet,m,je),{publicKey:k}=Or(m),{publicKey:B}=gt(p,m),{publicKey:T}=Pn(p,y,r,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),r,i,f,b,s,a,c,u,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?pt(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,r,i){let s=M([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:zn.programId,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...Kt.closePosition,...c]);return new St({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=Ae(n.wallet,r.nftMint,je),{publicKey:a}=gt(i,r.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let w=M([Y("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),Ye("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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:je,isSigner:!1,isWritable:!1},{pubkey:cn,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([...Kt.increaseLiquidity,...T]);return new St({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Pe(c,u,l),{publicKey:p}=Pe(c,u,m),{publicKey:y}=Ae(r.wallet,n.nftMint,je),{publicKey:f}=gt(c,n.nftMint),{publicKey:b}=Pn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?pt(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:r,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Pe(c,u,l),{publicKey:p}=Pe(c,u,m),{publicKey:y}=Ae(r.wallet,n.nftMint,je),{publicKey:f}=gt(c,n.nftMint),{publicKey:b}=Pn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?pt(c,u).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let w=M([Y("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),Ye("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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:je,isSigner:!1,isWritable:!1},{pubkey:cn,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 Zu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Kt.increaseLiquidity,...T]);return new St({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,w){let k=M([Y("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:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:nr,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([...Kt.decreaseLiquidity,...S]);return new St({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Pe(u,l,m),{publicKey:y}=Pe(u,l,d),{publicKey:f}=Ae(r.wallet,n.nftMint,c),{publicKey:b}=gt(u,n.nftMint),{publicKey:g}=Pn(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:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let w=[];return w.push(this.decreaseLiquidityInstruction(u,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Oe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?pt(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,r,i,s,a,c,u,l,m,d,p,y,f,b,g){let h=M([P("amount"),P("otherAmountThreshold"),Y("sqrtPriceLimitX64"),Ye("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:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:nr,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([...Kt.swap,...B]);return new St({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,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,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,pt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=M([P("openTime"),P("endTime"),Y("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:zn.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Q(l),endTime:Q(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Kt.initReward,...f]);return new St({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=Fu(i,s,r.mint).publicKey,c=Co(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=M([E("rewardIndex"),Y("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:r,isSigner:!1,isWritable:!0},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:cn,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:Q(l),endTime:Q(m)},f);let b=Buffer.from([...Kt.setRewardEmissions,...f]);return new St({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.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)&&Ju.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Co(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let c=M([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:nr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Kt.collectReward,...l]);return new St({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Ju.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,r,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:r,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===r.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 Vp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fp}from"@solana/spl-token";import{PublicKey as _p}from"@solana/web3.js";import $u from"bn.js";var ec=new $u(25),tc=new $u(1e4),Mp={4:3,5:3};var vp=ce("Raydium_liquidity_serum");function nc({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));r=_p.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw vp.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}import Mo from"bn.js";function Fr({programId:o}){let{publicKey:e}=ue([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function Bn({name:o,programId:e,marketId:t}){let{publicKey:n}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function Ep({programId:o,marketId:e}){let{publicKey:t}=ue([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Ks({programId:o}){return ue([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function oc({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,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}=Ks({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=Ep({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}=nc({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:w,lookupTableAccount:Vp.default,configId:Fr({programId:a})}}var xs;async function bI({connection:o,poolKeysList:e,config:t}){xs||(xs=new Un({connection:o}),await xs.initStableModelLayout());let n=e.map(s=>Ou({poolKeys:s}));return(await Ba(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=xa(s,"GetPoolData"),c=new Mo(Wt(a,"status")),u=Number(Wt(a,"coin_decimals")),l=Number(Wt(a,"pc_decimals")),m=Number(Wt(a,"lp_decimals")),d=new Mo(Wt(a,"pool_coin_amount")),p=new Mo(Wt(a,"pool_pc_amount")),y=new Mo(Wt(a,"pool_lp_supply")),f="0";try{f=Wt(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Mo(f)}})}var Ss={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Er=o=>{let e={},t=Fp.toBase58();return Object.keys(o).map(n=>{let r=o[n],[i,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:it({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:it({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new v(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new v(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new v(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Ss,week:Ss,month:Ss,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:Fr({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:it({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import lt from"bn.js";var _o=class extends xe{constructor(t){super(t);this.stableLayout=new Un({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:i}){let s=new lt(new v(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Cr(t[i?"mintB":"mintA"]),[c,u]=[new lt(new v(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new lt(new v(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new lt(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:",`${r.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=Ee;s.isZero()||(d=m==="base"?ur(s.mul(u),c):ur(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=ur(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Fe(new lt(1)).add(r).mul(d).quotient,b=new fe(a,d),g=new fe(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:i,amountInB:s,fixedSide:a,config: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 tt(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=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Ft=await m.handleTokenAccount({side:"in",amount:W,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Ft,ot=Ce(Ft,["tokenAccount"]);G.addInstruction(ot);let On=await m.handleTokenAccount({side:"in",amount:D,mint:L.mint,tokenAccount:R,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Rn}=On,ln=Ce(On,["tokenAccount"]);G.addInstruction(ln);let Qo=await m.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Yt}=Qo,Ln=Ce(Qo,["tokenAccount"]);return G.addInstruction(Ln),G.addInstruction({instructions:[Ru({poolInfo:n,poolKeys:J,userKeys:{baseTokenAccount:q,quoteTokenAccount:Rn,lpTokenAccount:Yt,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:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new tt(n.mintA.address),new tt(n.mintB.address),new tt(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=Ce(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=Ce(L,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[bs({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:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Qn,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||Ae(this.scope.ownerPubKey,q.accountInfo.mint,Qn).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=r.add(a!=null?a:new lt(0)),k=t.mintA.address===ye.WSOL.mint.toString(),B=t.mintB.address===ye.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(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:Qn,mint:new tt(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=bt[s.programId],ot=$e({programId:new tt(s.programId),poolId:new tt(s.id),owner:this.scope.ownerPubKey,version:q}),Rn,ln=await this.scope.connection.getAccountInfo(ot);if(ln&&(Rn=qn(q).decode(ln.data)),q!==6&&!Rn){let{instruction:jt,instructionType:$r}=ho({id:new tt(s.id),programId:new tt(s.programId),version:q,ledger:ot,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[jt],instructionTypes:[$r]})}let Yt=[];for(let jt of s.rewardInfos){let $r=jt.mint.address===ye.WSOL.mint.toString();if(g[jt.mint.address])Yt.push(g[jt.mint.address]);else{let{account:Gs,instructionParams:Xs}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(jt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!$r,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Gs||this.logAndCreateError("farm reward account not found:",jt.mint.address),Xs&&b.addInstruction(Xs),Yt.push(Gs)}}let Ln=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ft={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:Ln,lpAccount:h,rewardAccounts:Yt},On=bt[s.programId],Qo=On===6?ko(Ft):On===5?To(Ft):Io(Ft),Rc={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};b.addInstruction({instructions:[Qo],instructionTypes:[Rc[On]]})}let I=await this.getAmmPoolKeys(t.id),R=bs({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 Se.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:r,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&&r.mint.equals(rc),h=u.useSOLBalance&&i.mint.equals(rc),w=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});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=oc({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),L={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:I,instructionType:R}=Lu(F(C({},L),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Ae(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=Fr({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return ku.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,c]=[r.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=Su(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 lt(0),w=new lt(0);if(!g.isZero())if(f){w=tn(g.mul(ec),tc);let I=g.sub(w),R=p.add(I);h=y.mul(I).div(R)}else{w=g.mul(new lt(2)).div(new lt(1e4));let I=g.sub(w);d==="quote"?h=new lt(Bu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber())):h=new lt(xu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber()))}let k=new lt(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:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===Z.toBase58(),h=y&&b.address===Z.toBase58(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),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:Qn,mint:new tt(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:[Rr({version:x,poolKeys:S,userKeys:{tokenAccountIn:w,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[x===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await De(this.scope.connection,t.map(l=>({pubkey:new tt(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=So.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 De(this.scope.connection,s.map(l=>({pubkey:new tt(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 lt(Dp.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),r=Er({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ae}from"@solana/web3.js";import wt from"bn.js";import{AccountLayout as ic,TOKEN_PROGRAM_ID as sc}from"@solana/spl-token";var vo=class extends xe{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)||ae.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new wt(new ae(r.address).toBuffer()).gt(new wt(new ae(i.address).toBuffer()))?[i,r,new v(1).div(a)]:[r,i,a],b=ee.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Se.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:[]}},Gu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),w=n.useSOLBalance&&e.mintB.address===Z.toString(),[k,B]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(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 ae(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 Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,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:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===Z.toBase58(),h=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1: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 ae(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 Se.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:r,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===Z.toString(),g=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(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 ae(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=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:r,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===Z.toString(),b=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1: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 ae(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1: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=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===Z.toString(),f=i.useSOLBalance&&t.mintB.address===Z.toString(),b,g,{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(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 ae(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===Z.toString(),W;if(I.mint.address===t.mintA.address)W=b;else if(I.mint.address===t.mintB.address)W=g;else{let{account:D,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(I.mint.programId),mint:new ae(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 Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,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 Se.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),L=C(C({},L),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:L}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Se.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===Z.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(n.mint.address),mint:new ae(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new wt(new v(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:r,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Se.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ae(n.mint.programId),mint:new ae(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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===Z.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(m.mint.programId),mint:new ae(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new wt(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=Se.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ae(m.mint.programId),mint:new ae(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:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(Z),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new wt(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:r,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Se.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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===Z.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(m.mint.programId),mint:new ae(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new wt(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=Se.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ae(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:r=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(Z),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(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:r,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Se.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:r=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(Z),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(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:r,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Se.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:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=c.useSOLBalance&&e.mintA.address===Z.toBase58(),b=c.useSOLBalance&&e.mintB.address===Z.toBase58(),g;!s||s.equals(new v(0))?g=y?_t.add(new wt(1)):vt.sub(new wt(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 ae(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?r: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 ae(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:r}: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(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},inputMint:new ae(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:u})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)r?Ae(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===Z.toString(),y=n.useSOLBalance&&d.mintB.address===Z.toString(),f=u[d.mintA.address];if(!f){let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ae(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=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 ae(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=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===Z.toString(),B=u[w.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(w.mint.programId),mint:new ae(w.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});B=T,S&&l.addInstruction(S)}u[w.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let w of t[m.id]){let k=Se.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:w,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new wt(0),amountMinA:new wt(0),amountMinB:new wt(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(Co(e).publicKey);return t?ju.decode(t.data).whitelistMints.filter(r=>!r.equals(ae.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new wt(1))).map(s=>gt(new ae(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=Vr.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 De(this.scope.connection,e.map(i=>({pubkey:new ae(i)})),t),r={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=Tn.decode(s.accountInfo.data),c=ee.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=F(C({},a),{currentPrice:c,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),r=await De(this.scope.connection,Array.from(n).map(c=>({pubkey:new ae(c)}))),i={};r.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Yu.decode(c.accountInfo.data))});let s=await Oe.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:it({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||sc.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?un((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:it({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||sc.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?un((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 Oe.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),r=await Vn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ae(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await De(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=zu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(ic.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(ic.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 zr,TOKEN_PROGRAM_ID as xn,AccountLayout as tf}from"@solana/spl-token";import uc from"bn.js";var Cs=new uc(1e6);function Wp(o,e,t){return o.mul(e).add(t).sub(new uc(1)).div(t)}function ac(o,e,t){return o.mul(e).div(t)}var Dr=class{static tradingFee(e,t){return Wp(e,t,Cs)}static protocolFee(e,t){return ac(e,t,Cs)}static fundFee(e,t){return ac(e,t,Cs)}};import Vo from"bn.js";function Wr(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function qp(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=Wr(o,e);if(n.gt(Yn)){t=t.add(new Vo(1));let r=o.div(t);n=Wr(o,t),n.gt(Yn)&&(r=r.add(new Vo(1)))}return[t,e]}var Yn=new Vo(0),qr=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=qp(r,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,r,i){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Wr(e.mul(n),t).gt(Yn)&&s.gt(Yn)&&(s=s.add(new Vo(1))),Wr(e.mul(r),t).gt(Yn)&&a.gt(Yn)&&(a=a.add(new Vo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var cc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(cc||{}),Ur=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,r){let i=Dr.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=qr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Up=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Gp=Buffer.from("amm_config","utf8"),Xp=Buffer.from("pool","utf8"),zp=Buffer.from("pool_lp_mint","utf8"),Qp=Buffer.from("pool_vault","utf8"),Yp=Buffer.from("observation","utf8");function jn(o){return ue([Up],o)}function jp(o,e){return ue([Gp,Jp(e)],o)}function Hp(o,e,t,n){return ue([Xp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Zp(o,e){return ue([zp,e.toBuffer()],o)}function lc(o,e,t){return ue([Qp,e.toBuffer(),t.toBuffer()],o)}function Rs(o,e){return ue([Yp,e.toBuffer()],o)}function Jp(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function mc({programId:o,mintA:e,mintB:t}){let n=jp(o,0).publicKey,r=jn(o).publicKey,i=Hp(o,n,e,t).publicKey,s=Zp(o,i).publicKey,a=lc(o,i,e).publicKey,c=lc(o,i,t).publicKey,u=Rs(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Fo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ls,TOKEN_2022_PROGRAM_ID as dc,ASSOCIATED_TOKEN_PROGRAM_ID as $p}from"@solana/spl-token";var ef=ce("Raydium_cpmm"),Eo={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 pc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,w){let k=M([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:r,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:$p,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:w},T),new Fo({keys:B,programId:o,data:Buffer.from([...Eo.initialize,...T])})}function fc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=M([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:r,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:dc,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 ef.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Fo({keys:b,programId:o,data:Buffer.from([...Eo.deposit,...g])})}function yc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=M([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:r,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:dc,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:or,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Fo({keys:b,programId:o,data:Buffer.from([...Eo.withdraw,...g])})}function Gr(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=M([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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 Fo({keys:g,programId:o,data:Buffer.from([...Eo.swapBaseInput,...h])})}function HB(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=M([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey: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 Fo({keys:g,programId:o,data:Buffer.from([...Eo.swapBaseOutput,...h])})}import Xe from"bn.js";var bc=M([be(8),E("bump"),Ye("disableCreatePool"),Nt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(P(),16)]),Xr=M([be(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 Do=class extends xe{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 De(this.scope.connection,e.map(m=>({pubkey:new te(m)}))),r={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Xr.decode(d.accountInfo.data);r[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 De(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]]=bc.decode(y.data)}}let c={},u=await De(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 Xe(tf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){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,r)=>{var c,u,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(C({},n),{[r]:F(C({},i),{id:new te(r),configInfo:i.configInfo,version:7,authority:jn(i.programId).publicKey,mintA:it({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?un((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:it({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?un((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Vn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=it({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?un(n[t.mintA.toBase58()].feeConfig):void 0}}),i=it({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?un(n[t.mintB.toBase58()].feeConfig):void 0}}),s=it({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:xn.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:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new v(t.vaultAAmount.toString()).div(10**r.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:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:jn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=m,u=Ce(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var W,D,J;let d=r.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),p=new Xe(new te(u.mintA.address).toBuffer()).lte(new Xe(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=r.useSOLBalance&&y.address===zr.toBase58(),w=r.useSOLBalance&&f.address===zr.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=mc({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[pc(e,this.scope.ownerPubKey,R.configId,R.authority,R.poolId,k,B,R.lpMint,S,L,Ae(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,t,new te((D=y.programId)!=null?D:xn),new te((J=f.programId)!=null?J:xn),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:r,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"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},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 Fe(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new v(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,w=t.mintA.address===zr.toString(),k=t.mintB.address===zr.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?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?r: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:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let W=await m.getCreatedTokenAccount({mint:new te(t.lpMint.address)}),ot=await m.handleTokenAccount({side:"out",amount:0,mint:new te(t.lpMint.address),tokenAccount:W,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:D}=ot,J=Ce(ot,["tokenAccount"]);B.addInstruction(J);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Fe(new Xe(1)).sub(s);return B.addInstruction({instructions:[fc(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:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Fe(new Xe(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(r.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(r.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ke(l,t.mintA.extensions.feeConfig,d,!1),ke(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(Z),k=h.equals(Z),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:[yc(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),r,l.sub((D=p.fee)!=null?D:new Xe(0)),m.sub((J=y.fee)!=null?J:new Xe(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:r,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 Xe((1-a)*1e4)).div(new Xe(1e4));let g=t.mintA.address===Z.toBase58(),h=t.mintB.address===Z.toBase58(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new te((x=t.mintA.programId)!=null?x:xn),owner:this.scope.ownerPubKey,createInfo:g||!r?{payer:this.scope.ownerPubKey,amount:r?s.sourceAmountSwapped:0}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:p,checkCreateATAOwner:d});k&&y.addInstruction(k);let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new te((L=t.mintB.programId)!=null?L:xn),owner:this.scope.ownerPubKey,createInfo:h||r?{payer:this.scope.ownerPubKey,amount:r?0:s.sourceAmountSwapped}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:p,checkCreateATAOwner:d});T&&y.addInstruction(T),(!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:[Gr(new te(t.programId),this.scope.ownerPubKey,new te(S.authority),new te(S.config.id),new te(t.id),r?w:B,r?B:w,new te(S.vault[r?"A":"B"]),new te(S.vault[r?"B":"A"]),new te((I=t[r?"mintA":"mintB"].programId)!=null?I:xn),new te((R=t[r?"mintB":"mintA"].programId)!=null?R:xn),r?f:b,r?b:f,Rs(new te(t.programId),new te(t.id)).publicKey,i,s.destinationAmountSwapped)],instructionTypes:[r?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),y.addCustomComputeBudget(u),y.versionBuild({txVersion:l})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Ur.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 Xe((1-r)*1e4)).div(new Xe(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:r,slippage:i,epochInfo:s,baseIn:a}){var h,w,k,B,T,S,x,L;let c=1-Number(i.toSignificant())/100,u=new Xe(new v(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ke(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Xe(0)),d=new Xe(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:Ee,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=nf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=ke(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Fe(new Xe(1)).add(i),g=ke(b.mul(f.amount.sub((B=f.fee)!=null?B:new Xe(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 nf(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new Xe(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new Xe(1))),{amountA:r,amountB:i}}import{PublicKey as Kn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ke,TOKEN_2022_PROGRAM_ID as jr,createTransferInstruction as kc}from"@solana/spl-token";import Hr from"bn.js";import{TOKEN_PROGRAM_ID as Os,TOKEN_2022_PROGRAM_ID as of,ASSOCIATED_TOKEN_PROGRAM_ID as rf}from"@solana/spl-token";import{PublicKey as z,TransactionInstruction as Ns,SystemProgram as Ms}from"@solana/web3.js";import Sn from"bn.js";function Qx(o,e,t,n,r,i,s,a,c,u,l,m){let d=M([E("instruction"),P("amountIn"),P("amountOut")]),p=[{pubkey:Ms.programId,isSigner:!1,isWritable:!1},{pubkey:Os,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:r,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=Ie(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=Ie(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=Ie(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 Ns({keys:p,programId:o,data:y})}function Yx(o,e,t,n,r,i,s,a,c,u){let l=M([E("instruction")]),m=[{pubkey:Ms.programId,isSigner:!1,isWritable:!1},{pubkey:Os,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:r,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=Ie(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=Ie(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=Ie(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 Ns({keys:m,programId:o,data:d})}function sf(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[A({pubkey:Os,isWritable:!1}),A({pubkey:of,isWritable:!1}),A({pubkey:rf,isWritable:!1}),A({pubkey:Ms.programId,isWritable:!1}),A({pubkey:e,isSigner:!0})];b.push(A({pubkey:t})),b.push(A({pubkey:r}));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:r})):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:or})),b.push(A({pubkey:pt(new z(x.programId),new z(x.id)).publicKey})),f.push(af(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:Ma,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=M([E("insId"),P("amountIn"),P("amountOut"),X(Y(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new Ns({keys:b,programId:o,data:B})}function af(o,e){if(o)if(e){let t=new Sn(o).div(new Sn(25));return t.gt(Mr)?t:Mr}else{let t=new Sn(o).mul(new Sn(25));return t.lt(_r)?t:_r}else return e?Mr:_r}function gc({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ie(m),p=t.equals(d.mintA.address)?_t.add(ft):vt.sub(ft);return Se.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new Sn(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:[Gr(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:[Rr({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 Sn(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:[sf(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Sn(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var Ac={[gr.toBase58()]:3},wc={3:gr};var _s=M([be(5),be(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"),be(7)]),Pc={3:_s};import{PublicKey as hc}from"@solana/web3.js";var Qr=ce("Serum"),Yr=class{static getProgramId(e){let t=wc[e];return t||Qr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Ac[t];return n||Qr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Pc[e];return t||Qr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],r=0,i;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));i=hc.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return Qr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:hc.default,nonce:r}}};var Qt=new Hr(0),Wo=class extends xe{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Z));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:r=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Q(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Mt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Mt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),po({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),r.length&&i.addInstruction({instructions:[po({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Mt({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:r,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(Z),m=u.amount.token.mint.equals(Z),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?jr:Ke,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?jr:Ke);else{let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?jr:Ke,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:[Mt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ke})],endInstructionTypes:[V.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?jr:Ke)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),w=gc({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:[kc(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:[kc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]})}return a.addInstruction(w),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:w.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:w.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Ki,clmm:n=Ci,cpmm:r=Ri}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:So.offsetOf("baseMint"),length:64}}),s=M([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=M([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Tn.span}],dataSlice:{offset:Tn.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(r,{dataSlice:{offset:Xr.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:r,cpmmPools:i}){e=e.toString()===Kn.default.toString()?Z:e,t=t.toString()===Kn.default.toString()?Z:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,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:Ke,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:Ke,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:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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 r=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Er(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new Kn(f.mintA.address),programId:Ke,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new Kn(f.mintB.address),programId:Ke,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(Ke)?(r.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(b),f.mintProgramB.equals(Ke)?(r.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let u=await Vn({connection:this.scope.connection,mints:Array.from(r).map(f=>new Kn(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:r,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 Hr(0):e.raw.mul(new Hr(l.feeBps.toNumber())).div(new Hr(1e4)),d=e.raw.sub(m),p=new fe(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:mt(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(r)){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 ln,Yt,Ln,Ft;let ot=G===void 0?Qt:G.data.amountOut.amount.raw.sub((Yt=(ln=G.data.amountOut.fee)==null?void 0:ln.raw)!=null?Yt:Qt),Rn=q===void 0?Qt:q.data.amountOut.amount.raw.sub((Ft=(Ln=q.data.amountOut.fee)==null?void 0:Ln.raw)!=null?Ft:Qt);return ot.lt(Rn)?1:-1})[0];if(D===void 0)continue;let J=new fe(Cr(W),D.data.amountOut.amount.raw.sub((h=(g=D.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Qt));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 qe({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:Qt)}).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 fe(D.data.amountOut.amount.token,((S=(T=D.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Qt).add((L=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?L:Qt)):void 0,middleToken:D.data.amountOut.amount.token,poolReady:D.data.poolReady&&q.poolReady,poolType:[D.data.poolType,q.poolType],feeConfig:y,expirationTime:Ot(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(Qt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,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}=Oe.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<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[w],expirationTime:Ot(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:xo(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xo(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new fe(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut: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:xo(F(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xo(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new fe(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let r=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(r.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});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(r));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 De(this.scope.connection,Array.from(s).map(l=>({pubkey:new Kn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=_s.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Yr.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:Ks({programId:new Kn(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:jn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:it({address:u.mintLp.toBase58(),programId:Ke.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 uf}from"@solana/spl-token";import{PublicKey as cf,Transaction as vs,TransactionInstruction as lf}from"@solana/web3.js";import Tc from"bn.js";var nt=class extends xe{static getPdaPoolId(e,t){return ue([nt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return ue([nt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Tc(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>nt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<nt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>nt.getPdaOwnerId(t,m,r,l).publicKey));let c=await Tt(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!==nt.POOL_LAYOUT.span||b.data.length!==nt.OWNER_LAYOUT.span)continue;let g=nt.POOL_LAYOUT.decode(f.data),h=nt.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new Tc(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:nt.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(),r=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(ye.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!c.mintAddress.equals(ye.WSOL.mint),associatedOnly:c.mintAddress.equals(ye.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i={};for(let 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(ye.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(ye.WSOL.mint),associatedOnly:m.mintAddress.equals(ye.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:r,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return pr(c,[r,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new vs().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new vs().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new vs().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=M([]),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:uf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new lf({keys:i,programId:e,data:a})}},Pt=nt;Pt.CLAIMED_NUM=3,Pt.POOL_LAYOUT=M([be(8),E("bump"),E("status"),P("openTime"),P("endTime"),K("ammId"),X(M([E("mintDecimals"),K("mintAddress"),K("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),X(P(),10,"padding")]),Pt.OWNER_LAYOUT=M([be(8),E("bump"),E("version"),K("poolId"),K("owner"),P("lpAmount"),X(M([K("mintAddress"),P("debtAmount"),P("claimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),X(P(),4,"padding")]),Pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new cf(e)),Pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as qo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kc}from"@solana/spl-token";import Uo from"bn.js";import{TransactionInstruction as df,SYSVAR_RENT_PUBKEY as pf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ic}from"@solana/spl-token";import{createInitializeAccountInstruction as Bc}from"@solana/spl-token";import{SystemProgram as Cn,Transaction as xc}from"@solana/web3.js";function mf(o="accountFlags"){let e=new kr(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Vs=M([be(5),mf("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"),be(7)]);function ff({programId:o,marketInfo:e}){let t=M([E("version"),Ze("instruction"),P("baseLotSize"),P("quoteLotSize"),Nt("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:pf,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),r=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},r),new df({keys:n,programId:o,data:r})}async function Sc({connection:o,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new xc,r=await o.getMinimumBalanceForRentExemption(165);n.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:Ic}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:Ic}),Bc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Bc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new xc;return i.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(Vs.span),space:Vs.span,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),ff({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 Hn=class extends xe{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,txVersion:u,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=Je({fromPublicKey:m,programId:i}),p=Je({fromPublicKey:m,programId:i}),y=Je({fromPublicKey:m,programId:i}),f=Je({fromPublicKey:m,programId:i}),b=Je({fromPublicKey:m,programId:i}),g=Je({fromPublicKey:m,programId:Kc}),h=Je({fromPublicKey:m,programId:Kc}),w=0,k=new Uo(100);function B(){let W=new Uo(0);for(;;)try{return{vaultOwner:qo.createProgramAddressSync([d.publicKey.toBuffer(),W.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:W}}catch{if(W.iaddn(1),W.gt(new Uo(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=B(),x=new Uo(Math.round(10**e.decimals*n)),L=new Uo(Math.round(n*10**t.decimals*r));if(x.eq(Ee))throw Error("lot size is too small");if(L.eq(Ee))throw Error("tick size or lot size is too small");let I=await Sc({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 qo(e.mint),quoteMin:new qo(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 qo(e.mint),quoteMin:new qo(t.mint)}})}};import{PublicKey as Xo}from"@solana/web3.js";import{TransactionInstruction as Es,SYSVAR_CLOCK_PUBKEY as yf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ds}from"@solana/spl-token";var Fs=M([E("instruction"),Ua("amount")]),Go=M([E("instruction")]);function LK({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:Ds,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:di,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],r=Buffer.alloc(Fs.span);return Fs.encode({instruction:1,amount:Number(e)},r),new Es({keys:n,programId:o,data:r})}function Zr({programId:o},e){let t=[{pubkey:Ds,isSigner:!1,isWritable:!1},{pubkey:di,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Go.span);return Go.encode({instruction:2},n),new Es({keys:t,programId:o,data:n})}function Ws(o){let{poolConfig:e,userKeys:t,side:n}=o,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Go.span);Go.encode({instruction:2},s);let a=[{pubkey:Ds,isWritable:!1,isSigner:!1},{pubkey:yf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Es({programId:e.programId,keys:a,data:s})}import Cc from"bn.js";var bf={[co.IDO_PROGRAM_ID_V1.toString()]:1,[co.IDO_PROGRAM_ID_V2.toString()]:2,[co.IDO_PROGRAM_ID_V3.toString()]:3,[co.IDO_PROGRAM_ID_V4.toString()]:4},Zn=class extends xe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=bf[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ie(t),[u,l]=[!new Cc(e.coin).isZero(),!new Cc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(Z),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(Z),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Zr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Xo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Zr({programId:new Xo(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Xo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Zr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Xo(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 Xo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Ws(F(C({},g),{side:"base"}))]:[],...l?[Ws(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as gf}from"@solana/web3.js";import{MintLayout as Af,TOKEN_2022_PROGRAM_ID as qs,TOKEN_PROGRAM_ID as Us}from"@solana/spl-token";var zo=class extends xe{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),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(Rt.address,Rt),this._mintGroup.official.add(Rt.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")?qs.toBase58():Us.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")?qs.toBase58():Us.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")?qs.toBase58():Us.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(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return Rt;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 gf(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Af.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 Jr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new It(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ce("Raydium"),this.farm=new Bo({scope:this,moduleName:"Raydium_Farm"}),this.account=new fo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new _o({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new zo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Wo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new vo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Do({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Hn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Zn({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=wf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,c=new wr({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),u=new Jr(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(Pr);return this._owner.publicKey}setOwner(e){return this._owner=e?new It(e):void 0,this}get connection(){if(!this._connection)throw new Error(Ea);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(Pr),new Error(Pr)}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 N0=o=>o;export{qb as ACCOUNT_TYPE_SIZE,fg as ALL_PROGRAM_ID,wp as AMM_CONFIG_SEED,am as AMM_STABLE,Ki as AMM_V4,Vf as ANAMint,Me as API_URLS,nm as AccountType,wr as Api,Du as BIT_PRECISION,tn as BNDivCeil,bn as BNLayout,Xy as BN_100,zy as BN_1000,Qy as BN_10000,Gy as BN_FIVE,ga as BN_ONE,dn as BN_TEN,Uy as BN_THREE,qy as BN_TWO,Ee as BN_ZERO,TA as BitStructure,qa as Blob,Ci as CLMM_PROGRAM_ID,di as CLOCK_PROGRAM_ID,pm as CREATE_CPMM_POOL_AUTH,fm as CREATE_CPMM_POOL_FEE_ACC,Ri as CREATE_CPMM_POOL_PROGRAM,vo as Clmm,Yu as ClmmConfigLayout,Se as ClmmInstrument,qr as ConstantProductCurve,bc as CpmmConfigInfoLayout,Dr as CpmmFee,Xr as CpmmPoolInfoLayout,no as Currency,pn as CurrencyAmount,Ur as CurveCalculator,yg as DEVNET_PROGRAM_ID,qg as DEV_API_URLS,bm as DEV_CREATE_CPMM_POOL_AUTH,gm as DEV_CREATE_CPMM_POOL_FEE_ACC,ym as DEV_CREATE_CPMM_POOL_PROGRAM,rp as DataElement,Ff as ETHMint,hs as EXTENSION_TICKARRAY_BITMAP_SIZE,lu as FARM_LOCK_MINT,mu as FARM_LOCK_VAULT,xi as FARM_PROGRAM_ID_V3,Si as FARM_PROGRAM_ID_V5,Fn as FARM_PROGRAM_ID_V6,bt as FARM_PROGRAM_TO_VERSION,pu as FARM_VERSION_TO_LEDGER_LAYOUT,du as FARM_VERSION_TO_STATE_LAYOUT,pg as FEE_DESTINATION_ID,vr as FEE_RATE_DENOMINATOR,Cs as FEE_RATE_DENOMINATOR_VALUE,Sp as FETCH_TICKARRAY_COUNT,xp as Fee,re as Fraction,co as IDO_ALL_PROGRAM,cm as IDO_PROGRAM_ID_V1,lm as IDO_PROGRAM_ID_V2,mm as IDO_PROGRAM_ID_V3,dm as IDO_PROGRAM_ID_V4,rr as INSTRUCTION_PROGRAM_ID,V as InstructionType,_a as JupTokenType,tc as LIQUIDITY_FEES_DENOMINATOR,ec as LIQUIDITY_FEES_NUMERATOR,Ma as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,Mp as LIQUIDITY_VERSION_TO_SERUM_VERSION,ek as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Wu as LOG_B_2_X32,qu as LOG_B_P_ERR_MARGIN_LOWER_X64,Uu as LOG_B_P_ERR_MARGIN_UPPER_X64,yr as LOOKUP_TABLE_CACHE,lo as Layout,le as LiquidityMath,Mc as LogLevel,ti as Logger,Vs as MARKET_STATE_LAYOUT_V2,_s as MARKET_STATE_LAYOUT_V3,Pc as MARKET_VERSION_TO_STATE_LAYOUT,Ia as MAX_BASE64_SIZE,vt as MAX_SQRT_PRICE_X64,_r as MAX_SQRT_PRICE_X64_SUB_ONE,st as MAX_TICK,nr as MEMO_PROGRAM_ID,or as MEMO_PROGRAM_ID2,_n as METADATA_PROGRAM_ID,_t as MIN_SQRT_PRICE_X64,Mr as MIN_SQRT_PRICE_X64_ADD_ONE,et as MIN_TICK,Gn as MODEL_DATA_PUBKEY,Yr as Market,ne as MathUtil,Ps as MaxU64,Eu as MaxUint128,Xt as NEGATIVE_ONE,vf as NRVMint,ft as ONE,sm as OPEN_BOOK_PROGRAM,Ip as OPERATION_SEED,Is as ObservationInfoLayout,Rp as ObservationLayout,ju as OperationLayout,Vi as OptionLayout,It as Owner,Cf as PAIMint,kp as POOL_REWARD_VAULT_SEED,Pp as POOL_SEED,Bp as POOL_TICK_ARRAY_BITMAP_SEED,hp as POOL_VAULT_SEED,vu as POSITION_SEED,Fe as Percent,va as PoolFetchType,Tn as PoolInfoLayout,Oe as PoolUtils,Vr as PositionInfoLayout,Op as PositionRewardInfoLayout,No as PositionUtils,qe as Price,FT as ProtocolPositionLayout,Nr as Q128,yt as Q64,Kf as RAYMint,ut as RENT_PROGRAM_ID,Jr as Raydium,Lp as RewardInfo,cc as RoundDirection,bi as Rounding,um as Router,Ac as SERUM_PROGRAMID_TO_VERSION,gr as SERUM_PROGRAM_ID_V3,wc as SERUM_VERSION_TO_PROGRAMID,Va as SESSION_KEY,ve as SOLMint,Rt as SOL_INFO,Kh as SPL_MINT_LAYOUT,Rf as SRMMint,Li as STORAGE_KEY,ir as SYSTEM_PROGRAM_ID,ee as SqrtPriceMath,Un as StableLayout,Fi as Structure,kn as SwapMath,hn as TICK_ARRAY_BITMAP_SIZE,Tp as TICK_ARRAY_SEED,We as TICK_ARRAY_SIZE,Sk as TICK_SPACINGS,Ve as TOKEN_WSOL,zt as TickArrayBitmap,Qu as TickArrayBitmapExtensionLayout,Oo as TickArrayBitmapExtensionUtils,Lo as TickArrayLayout,Np as TickLayout,In as TickMath,me as TickQuery,j as TickUtils,ye as Token,fe as TokenAmount,br as TxBuilder,fn as TxVersion,Ro as U64Resolution,Ck as U64_IGNORE_RANGE,Mi as UInt,Lf as USDCMint,_f as USDHMint,Of as USDTMint,im as UTIL1216,Ei as Union,uu as Voter,Ed as VoterDepositEntry,Fd as VoterLockup,au as VoterRegistrar,Vd as VoterVotingMintConfig,Z as WSOLMint,kr as WideBits,qt as WrappedLayout,pe as ZERO,pa as _100_PERCENT,A as accountMeta,Cy as add,dr as addComputeBudget,ps as addLiquidityLayout,uw as array,Qi as associatedLedgerAccountLayout,_i as bits,be as blob,Ye as bool,ss as calFarmRewardAmount,Wp as ceilDiv,oo as checkLegacyTxSize,ro as checkV0TxSize,Ti as chunkArray,Go as claimLayout,zu as clmmComputeInfoToApiInfo,Mt as closeAccountInstruction,ci as commonSystemAccountMeta,ho as createAssociatedLedgerAccountInstruction,ce as createLogger,ku as createPoolFeeLayout,Lu as createPoolV4InstructionV2,$h as createPoolV4Layout,Ut as createWSolAccountInstructions,ZA as cstr,py as currencyEquals,Ul as decimalToFraction,pd as decodeBool,By as div,ur as divCeil,rt as dwLayout,fd as encodeBool,cA as endlessRetry,Dl as eq,zA as f32,QA as f32be,YA as f64,jA as f64be,Zi as farmAddRewardLayout,pP as farmLedgerLayoutV3_1,bo as farmLedgerLayoutV3_2,fP as farmLedgerLayoutV5_1,iu as farmLedgerLayoutV5_2,su as farmLedgerLayoutV6_1,yu as farmRewardInfoToConfig,ji as farmRewardLayout,Hi as farmRewardRestartLayout,vd as farmRewardTimeInfoLayout,ou as farmStateV3Layout,ru as farmStateV5Layout,yo as farmStateV6Layout,EP as fetchMultipleFarmInfoAndUpdate,bI as fetchMultipleInfo,Vn as fetchMultipleMintInfos,ue as findProgramAddress,ls as fixedSwapInLayout,ms as fixedSwapOutLayout,ac as floorDiv,pr as forecastTransactionSize,fp as formatLayout,Je as generatePubKey,Ae as getATAAddress,fu as getAssociatedAuthority,Fr as getAssociatedConfigId,$e as getAssociatedLedgerAccount,Ao as getAssociatedLedgerPoolAccount,Ep as getAssociatedOpenOrders,oc as getAssociatedPoolKeys,jp as getCpmmPdaAmmConfigId,Hp as getCpmmPdaPoolId,mc as getCreatePoolKeys,La as getDate,as as getDepositEntryIndex,xu as getDxByDyBaseIn,Bu as getDyByDxBaseIn,Ob as getEpochInfo,qn as getFarmLedgerLayout,Dd as getFarmStateLayout,Ks as getLiquidityAssociatedAuthority,Bn as getLiquidityAssociatedId,fT as getLiquidityFromAmounts,Ky as getMax,Tt as getMultipleAccountsInfo,De as getMultipleAccountsInfoWithCustomFlags,Ii as getMultipleLookupTableInfo,Ik as getPdaAmmConfigId,pt as getPdaExBitmapAccount,Zp as getPdaLpMint,Or as getPdaMetadataKey,Rs as getPdaObservationId,Co as getPdaOperationAccount,gt as getPdaPersonalPositionAddress,jn as getPdaPoolAuthority,Vu as getPdaPoolId,Fu as getPdaPoolRewardVaulId,ws as getPdaPoolVaultId,Pn as getPdaProtocolPositionAddress,Pe as getPdaTickArrayAddress,lc as getPdaVault,vn as getRecentBlockHash,es as getRegistrarAddress,Pm as getSessionKey,Su as getStablePrice,rm as getTime,Pb as getTimestamp,is as getTokenOwnerRecordAddress,kg as getTransferAmountFee,ke as getTransferAmountFeeV2,os as getVoterAddress,rs as getVoterWeightRecordAddress,ns as getVotingMintAuthority,ts as getVotingTokenMint,jd as governanceCreateTokenOwnerRecord,IA as greedy,El as gt,Iy as gte,ja as i128,wk as i16ToBytes,Lr as i32ToBytes,Tr as i64,Ya as i8,ds as initPoolLayout,Xi as initTokenAccountInstruction,ff as initializeMarket,sg as intersection,Na as isDateAfter,Oa as isDateBefore,Gl as isDecimal,Sy as isMeaningfulNumber,Ra as isNumber,Ji as isValidFarmVersion,Ko as isZero,Ie as jsonInfo2PoolKeys,DP as judgeFarmType,gs as leadingZeros,_u as leastSignificantBit,So as liquidityStateV4Layout,np as liquidityStateV5Layout,ky as lt,Ty as lte,Nf as mSOLMint,Rr as makeAMMSwapInstruction,Ru as makeAddLiquidityInstruction,cs as makeAddNewRewardInstruction,Zr as makeClaimInstruction,Ws as makeClaimInstructionV4,pc as makeCreateCpmmPoolInInstruction,bu as makeCreateFarmInstruction,Sc as makeCreateMarketInstruction,gu as makeCreatorWithdrawFarmRewardInstruction,fc as makeDepositCpmmInInstruction,Au as makeDepositInstructionV3,wu as makeDepositInstructionV5,Pu as makeDepositInstructionV6,oh as makeDepositTokenInstruction,ih as makeDepositWithdrawInstruction,gk as makeInitPoolInstructionV4,LK as makePurchaseInstruction,us as makeRestartRewardInstruction,Ou as makeSimulatePoolInfoInstruction,Gr as makeSwapCpmmBaseInInInstruction,HB as makeSwapCpmmBaseOutInInstruction,gp as makeSwapFixedInInstruction,Ap as makeSwapFixedOutInstruction,gc as makeSwapInstruction,po as makeTransferInstruction,yc as makeWithdrawCpmmInInstruction,Io as makeWithdrawInstructionV3,To as makeWithdrawInstructionV5,ko as makeWithdrawInstructionV6,rh as makeWithdrawTokenInstruction,Ot as minExpirationTime,Kk as mockCreatePoolInfo,Gu as mockV3CreatePoolInfo,ip as modelDataInfoLayout,Mu as mostSignificantBit,wi as mul,Pi as notInnerObject,EA as ns64,XA as ns64be,Ua as nu64,NA as nu64be,vi as offset,lg as offsetDateTime,ow as option,Q as parseBigNumberish,mn as parseNumberInfo,xa as parseSimulateLogToJson,Wt as parseSimulateValue,nu as parseTokenAccountResp,Fh as parseTokenInfo,an as poolTypeV6,yn as printSimulate,K as publicKey,Fs as purchaseLayout,Nd as realFarmStateV3Layout,Md as realFarmStateV5Layout,_d as realFarmV6Layout,ba as recursivelyDecimalToFraction,bs as removeLiquidityInstruction,fs as removeLiquidityLayout,Qx as route1Instruction,Yx as route2Instruction,sf as routeInstruction,aw as rustEnum,_A as s16,DA as s16be,vA as s24,WA as s24be,Qe as s32,qA as s32be,VA as s40,UA as s40be,FA as s48,GA as s48be,MA as s8,X as seq,kf as setLoggerLevel,Wl as shakeFractionDecimal,Ba as simulateMultipleInstruction,bk as simulatePoolInfoInstruction,Zl as simulateTransaction,Pa as sleep,mt as solToWSol,Dh as solToWSolToken,nn as splAccountLayout,wa as splitNumber,Mf as stSOLMint,sw as str,M as struct,xy as sub,iw as tagged,gi as tenExponential,Er as toAmmComputePoolInfo,it as toApiV3Token,ql as toBN,Sa as toBuffer,un as toFeeConfig,Aa as toFraction,hy as toFractionWithDecimals,Yy as toPercent,Cr as toToken,xo as toTokenAmount,Eh as toTokenInfo,jy as toTokenPrice,Hy as toTotalPrice,ya as toUsdCurrency,As as trailingZeros,Nb as transformTxToBase64,mi as tryParsePublicKey,Y as u128,Nt as u16,Nu as u16ToBytes,KA as u16be,BA as u24,CA as u24be,Ze as u32,Pk as u32ToBytes,RA as u32be,xA as u40,LA as u40be,SA as u48,OA as u48be,P as u64,E as u8,cw as union,N0 as unionArr,HA as unionLayoutDiscriminator,ug as uniq,Wd as updateFarmPoolInfo,Ar as updateReqHistory,JA as utf8,li as validateAndParsePublicKey,$i as validateFarmRewards,rw as vec,yd as vecU8,Zd as voterStakeRegistryCreateDepositEntry,Hd as voterStakeRegistryCreateVoter,zd as voterStakeRegistryDeposit,Qd as voterStakeRegistryUpdateVoterWeightRecord,Yd as voterStakeRegistryWithdraw,Wh as wSolToSolToken,Yi as withdrawRewardLayout,ag as xor,lw as zeros};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map