@msafe/sui-app-store 0.0.311 → 0.0.329
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Hl=Object.create;var br=Object.defineProperty;var Xl=Object.getOwnPropertyDescriptor;var zl=Object.getOwnPropertyNames;var Gl=Object.getPrototypeOf,Ql=Object.prototype.hasOwnProperty;var Jl=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var Yl=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),ks=(a,e)=>{for(var t in e)br(a,t,{get:e[t],enumerable:!0})},Zl=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of zl(e))!Ql.call(a,o)&&o!==t&&br(a,o,{get:()=>e[o],enumerable:!(n=Xl(e,o))||n.enumerable});return a};var tu=(a,e,t)=>(t=a!=null?Hl(Gl(a)):{},Zl(e||!a||!a.__esModule?br(t,"default",{value:a,enumerable:!0}):t,a));var kl=Yl((Dl,as)=>{"use strict";(function(a,e){"use strict";function t(y,r){if(!y)throw new Error(r||"Assertion failed")}function n(y,r){y.super_=r;var u=function(){};u.prototype=r.prototype,y.prototype=new u,y.prototype.constructor=y}function o(y,r,u){if(o.isBN(y))return y;this.negative=0,this.words=null,this.length=0,this.red=null,y!==null&&((r==="le"||r==="be")&&(u=r,r=10),this._init(y||0,r||10,u||"be"))}typeof a=="object"?a.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var i;try{typeof window<"u"&&typeof window.Buffer<"u"?i=window.Buffer:i=Jl("buffer").Buffer}catch{}o.isBN=function(r){return r instanceof o?!0:r!==null&&typeof r=="object"&&r.constructor.wordSize===o.wordSize&&Array.isArray(r.words)},o.max=function(r,u){return r.cmp(u)>0?r:u},o.min=function(r,u){return r.cmp(u)<0?r:u},o.prototype._init=function(r,u,m){if(typeof r=="number")return this._initNumber(r,u,m);if(typeof r=="object")return this._initArray(r,u,m);u==="hex"&&(u=16),t(u===(u|0)&&u>=2&&u<=36),r=r.toString().replace(/\s+/g,"");var p=0;r[0]==="-"&&(p++,this.negative=1),p<r.length&&(u===16?this._parseHex(r,p,m):(this._parseBase(r,u,p),m==="le"&&this._initArray(this.toArray(),u,m)))},o.prototype._initNumber=function(r,u,m){r<0&&(this.negative=1,r=-r),r<67108864?(this.words=[r&67108863],this.length=1):r<4503599627370496?(this.words=[r&67108863,r/67108864&67108863],this.length=2):(t(r<9007199254740992),this.words=[r&67108863,r/67108864&67108863,1],this.length=3),m==="le"&&this._initArray(this.toArray(),u,m)},o.prototype._initArray=function(r,u,m){if(t(typeof r.length=="number"),r.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(r.length/3),this.words=new Array(this.length);for(var p=0;p<this.length;p++)this.words[p]=0;var h,T,w=0;if(m==="be")for(p=r.length-1,h=0;p>=0;p-=3)T=r[p]|r[p-1]<<8|r[p-2]<<16,this.words[h]|=T<<w&67108863,this.words[h+1]=T>>>26-w&67108863,w+=24,w>=26&&(w-=26,h++);else if(m==="le")for(p=0,h=0;p<r.length;p+=3)T=r[p]|r[p+1]<<8|r[p+2]<<16,this.words[h]|=T<<w&67108863,this.words[h+1]=T>>>26-w&67108863,w+=24,w>=26&&(w-=26,h++);return this._strip()};function s(y,r){var u=y.charCodeAt(r);if(u>=48&&u<=57)return u-48;if(u>=65&&u<=70)return u-55;if(u>=97&&u<=102)return u-87;t(!1,"Invalid character in "+y)}function l(y,r,u){var m=s(y,u);return u-1>=r&&(m|=s(y,u-1)<<4),m}o.prototype._parseHex=function(r,u,m){this.length=Math.ceil((r.length-u)/6),this.words=new Array(this.length);for(var p=0;p<this.length;p++)this.words[p]=0;var h=0,T=0,w;if(m==="be")for(p=r.length-1;p>=u;p-=2)w=l(r,u,p)<<h,this.words[T]|=w&67108863,h>=18?(h-=18,T+=1,this.words[T]|=w>>>26):h+=8;else{var f=r.length-u;for(p=f%2===0?u+1:u;p<r.length;p+=2)w=l(r,u,p)<<h,this.words[T]|=w&67108863,h>=18?(h-=18,T+=1,this.words[T]|=w>>>26):h+=8}this._strip()};function d(y,r,u,m){for(var p=0,h=0,T=Math.min(y.length,u),w=r;w<T;w++){var f=y.charCodeAt(w)-48;p*=m,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<m,"Invalid character"),p+=h}return p}o.prototype._parseBase=function(r,u,m){this.words=[0],this.length=1;for(var p=0,h=1;h<=67108863;h*=u)p++;p--,h=h/u|0;for(var T=r.length-m,w=T%p,f=Math.min(T,T-w)+m,c=0,g=m;g<f;g+=p)c=d(r,g,g+p,u),this.imuln(h),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(w!==0){var v=1;for(c=d(r,g,r.length,u),g=0;g<w;g++)v*=u;this.imuln(v),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}this._strip()},o.prototype.copy=function(r){r.words=new Array(this.length);for(var u=0;u<this.length;u++)r.words[u]=this.words[u];r.length=this.length,r.negative=this.negative,r.red=this.red};function b(y,r){y.words=r.words,y.length=r.length,y.negative=r.negative,y.red=r.red}if(o.prototype._move=function(r){b(r,this)},o.prototype.clone=function(){var r=new o(null);return this.copy(r),r},o.prototype._expand=function(r){for(;this.length<r;)this.words[this.length++]=0;return this},o.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},o.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{o.prototype[Symbol.for("nodejs.util.inspect.custom")]=I}catch{o.prototype.inspect=I}else o.prototype.inspect=I;function I(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var C=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],x=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],D=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(r,u){r=r||10,u=u|0||1;var m;if(r===16||r==="hex"){m="";for(var p=0,h=0,T=0;T<this.length;T++){var w=this.words[T],f=((w<<p|h)&16777215).toString(16);h=w>>>24-p&16777215,p+=2,p>=26&&(p-=26,T--),h!==0||T!==this.length-1?m=C[6-f.length]+f+m:m=f+m}for(h!==0&&(m=h.toString(16)+m);m.length%u!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}if(r===(r|0)&&r>=2&&r<=36){var c=x[r],g=D[r];m="";var v=this.clone();for(v.negative=0;!v.isZero();){var M=v.modrn(g).toString(r);v=v.idivn(g),v.isZero()?m=M+m:m=C[c-M.length]+M+m}for(this.isZero()&&(m="0"+m);m.length%u!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}t(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var r=this.words[0];return this.length===2?r+=this.words[1]*67108864:this.length===3&&this.words[2]===1?r+=4503599627370496+this.words[1]*67108864:this.length>2&&t(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-r:r},o.prototype.toJSON=function(){return this.toString(16,2)},i&&(o.prototype.toBuffer=function(r,u){return this.toArrayLike(i,r,u)}),o.prototype.toArray=function(r,u){return this.toArrayLike(Array,r,u)};var k=function(r,u){return r.allocUnsafe?r.allocUnsafe(u):new r(u)};o.prototype.toArrayLike=function(r,u,m){this._strip();var p=this.byteLength(),h=m||Math.max(1,p);t(p<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var T=k(r,h),w=u==="le"?"LE":"BE";return this["_toArrayLike"+w](T,p),T},o.prototype._toArrayLikeLE=function(r,u){for(var m=0,p=0,h=0,T=0;h<this.length;h++){var w=this.words[h]<<T|p;r[m++]=w&255,m<r.length&&(r[m++]=w>>8&255),m<r.length&&(r[m++]=w>>16&255),T===6?(m<r.length&&(r[m++]=w>>24&255),p=0,T=0):(p=w>>>24,T+=2)}if(m<r.length)for(r[m++]=p;m<r.length;)r[m++]=0},o.prototype._toArrayLikeBE=function(r,u){for(var m=r.length-1,p=0,h=0,T=0;h<this.length;h++){var w=this.words[h]<<T|p;r[m--]=w&255,m>=0&&(r[m--]=w>>8&255),m>=0&&(r[m--]=w>>16&255),T===6?(m>=0&&(r[m--]=w>>24&255),p=0,T=0):(p=w>>>24,T+=2)}if(m>=0)for(r[m--]=p;m>=0;)r[m--]=0},Math.clz32?o.prototype._countBits=function(r){return 32-Math.clz32(r)}:o.prototype._countBits=function(r){var u=r,m=0;return u>=4096&&(m+=13,u>>>=13),u>=64&&(m+=7,u>>>=7),u>=8&&(m+=4,u>>>=4),u>=2&&(m+=2,u>>>=2),m+u},o.prototype._zeroBits=function(r){if(r===0)return 26;var u=r,m=0;return(u&8191)===0&&(m+=13,u>>>=13),(u&127)===0&&(m+=7,u>>>=7),(u&15)===0&&(m+=4,u>>>=4),(u&3)===0&&(m+=2,u>>>=2),(u&1)===0&&m++,m},o.prototype.bitLength=function(){var r=this.words[this.length-1],u=this._countBits(r);return(this.length-1)*26+u};function P(y){for(var r=new Array(y.bitLength()),u=0;u<r.length;u++){var m=u/26|0,p=u%26;r[u]=y.words[m]>>>p&1}return r}o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var r=0,u=0;u<this.length;u++){var m=this._zeroBits(this.words[u]);if(r+=m,m!==26)break}return r},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(r){return this.negative!==0?this.abs().inotn(r).iaddn(1):this.clone()},o.prototype.fromTwos=function(r){return this.testn(r-1)?this.notn(r).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return this.negative!==0},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(r){for(;this.length<r.length;)this.words[this.length++]=0;for(var u=0;u<r.length;u++)this.words[u]=this.words[u]|r.words[u];return this._strip()},o.prototype.ior=function(r){return t((this.negative|r.negative)===0),this.iuor(r)},o.prototype.or=function(r){return this.length>r.length?this.clone().ior(r):r.clone().ior(this)},o.prototype.uor=function(r){return this.length>r.length?this.clone().iuor(r):r.clone().iuor(this)},o.prototype.iuand=function(r){var u;this.length>r.length?u=r:u=this;for(var m=0;m<u.length;m++)this.words[m]=this.words[m]&r.words[m];return this.length=u.length,this._strip()},o.prototype.iand=function(r){return t((this.negative|r.negative)===0),this.iuand(r)},o.prototype.and=function(r){return this.length>r.length?this.clone().iand(r):r.clone().iand(this)},o.prototype.uand=function(r){return this.length>r.length?this.clone().iuand(r):r.clone().iuand(this)},o.prototype.iuxor=function(r){var u,m;this.length>r.length?(u=this,m=r):(u=r,m=this);for(var p=0;p<m.length;p++)this.words[p]=u.words[p]^m.words[p];if(this!==u)for(;p<u.length;p++)this.words[p]=u.words[p];return this.length=u.length,this._strip()},o.prototype.ixor=function(r){return t((this.negative|r.negative)===0),this.iuxor(r)},o.prototype.xor=function(r){return this.length>r.length?this.clone().ixor(r):r.clone().ixor(this)},o.prototype.uxor=function(r){return this.length>r.length?this.clone().iuxor(r):r.clone().iuxor(this)},o.prototype.inotn=function(r){t(typeof r=="number"&&r>=0);var u=Math.ceil(r/26)|0,m=r%26;this._expand(u),m>0&&u--;for(var p=0;p<u;p++)this.words[p]=~this.words[p]&67108863;return m>0&&(this.words[p]=~this.words[p]&67108863>>26-m),this._strip()},o.prototype.notn=function(r){return this.clone().inotn(r)},o.prototype.setn=function(r,u){t(typeof r=="number"&&r>=0);var m=r/26|0,p=r%26;return this._expand(m+1),u?this.words[m]=this.words[m]|1<<p:this.words[m]=this.words[m]&~(1<<p),this._strip()},o.prototype.iadd=function(r){var u;if(this.negative!==0&&r.negative===0)return this.negative=0,u=this.isub(r),this.negative^=1,this._normSign();if(this.negative===0&&r.negative!==0)return r.negative=0,u=this.isub(r),r.negative=1,u._normSign();var m,p;this.length>r.length?(m=this,p=r):(m=r,p=this);for(var h=0,T=0;T<p.length;T++)u=(m.words[T]|0)+(p.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;for(;h!==0&&T<m.length;T++)u=(m.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;if(this.length=m.length,h!==0)this.words[this.length]=h,this.length++;else if(m!==this)for(;T<m.length;T++)this.words[T]=m.words[T];return this},o.prototype.add=function(r){var u;return r.negative!==0&&this.negative===0?(r.negative=0,u=this.sub(r),r.negative^=1,u):r.negative===0&&this.negative!==0?(this.negative=0,u=r.sub(this),this.negative=1,u):this.length>r.length?this.clone().iadd(r):r.clone().iadd(this)},o.prototype.isub=function(r){if(r.negative!==0){r.negative=0;var u=this.iadd(r);return r.negative=1,u._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(r),this.negative=1,this._normSign();var m=this.cmp(r);if(m===0)return this.negative=0,this.length=1,this.words[0]=0,this;var p,h;m>0?(p=this,h=r):(p=r,h=this);for(var T=0,w=0;w<h.length;w++)u=(p.words[w]|0)-(h.words[w]|0)+T,T=u>>26,this.words[w]=u&67108863;for(;T!==0&&w<p.length;w++)u=(p.words[w]|0)+T,T=u>>26,this.words[w]=u&67108863;if(T===0&&w<p.length&&p!==this)for(;w<p.length;w++)this.words[w]=p.words[w];return this.length=Math.max(this.length,w),p!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(r){return this.clone().isub(r)};function U(y,r,u){u.negative=r.negative^y.negative;var m=y.length+r.length|0;u.length=m,m=m-1|0;var p=y.words[0]|0,h=r.words[0]|0,T=p*h,w=T&67108863,f=T/67108864|0;u.words[0]=w;for(var c=1;c<m;c++){for(var g=f>>>26,v=f&67108863,M=Math.min(c,r.length-1),O=Math.max(0,c-y.length+1);O<=M;O++){var B=c-O|0;p=y.words[B]|0,h=r.words[O]|0,T=p*h+v,g+=T/67108864|0,v=T&67108863}u.words[c]=v|0,f=g|0}return f!==0?u.words[c]=f|0:u.length--,u._strip()}var K=function(r,u,m){var p=r.words,h=u.words,T=m.words,w=0,f,c,g,v=p[0]|0,M=v&8191,O=v>>>13,B=p[1]|0,N=B&8191,L=B>>>13,oe=p[2]|0,j=oe&8191,F=oe>>>13,ls=p[3]|0,H=ls&8191,X=ls>>>13,us=p[4]|0,z=us&8191,G=us>>>13,ms=p[5]|0,Q=ms&8191,J=ms>>>13,ps=p[6]|0,Y=ps&8191,Z=ps>>>13,ds=p[7]|0,tt=ds&8191,et=ds>>>13,fs=p[8]|0,nt=fs&8191,ot=fs>>>13,hs=p[9]|0,at=hs&8191,it=hs>>>13,gs=h[0]|0,rt=gs&8191,st=gs>>>13,ys=h[1]|0,ct=ys&8191,lt=ys>>>13,bs=h[2]|0,ut=bs&8191,mt=bs>>>13,Ts=h[3]|0,pt=Ts&8191,dt=Ts>>>13,Ss=h[4]|0,ft=Ss&8191,ht=Ss>>>13,Is=h[5]|0,gt=Is&8191,yt=Is>>>13,ws=h[6]|0,bt=ws&8191,Tt=ws>>>13,Cs=h[7]|0,St=Cs&8191,It=Cs>>>13,xs=h[8]|0,wt=xs&8191,Ct=xs>>>13,Ds=h[9]|0,xt=Ds&8191,Dt=Ds>>>13;m.negative=r.negative^u.negative,m.length=19,f=Math.imul(M,rt),c=Math.imul(M,st),c=c+Math.imul(O,rt)|0,g=Math.imul(O,st);var Zi=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(Zi>>>26)|0,Zi&=67108863,f=Math.imul(N,rt),c=Math.imul(N,st),c=c+Math.imul(L,rt)|0,g=Math.imul(L,st),f=f+Math.imul(M,ct)|0,c=c+Math.imul(M,lt)|0,c=c+Math.imul(O,ct)|0,g=g+Math.imul(O,lt)|0;var tr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(tr>>>26)|0,tr&=67108863,f=Math.imul(j,rt),c=Math.imul(j,st),c=c+Math.imul(F,rt)|0,g=Math.imul(F,st),f=f+Math.imul(N,ct)|0,c=c+Math.imul(N,lt)|0,c=c+Math.imul(L,ct)|0,g=g+Math.imul(L,lt)|0,f=f+Math.imul(M,ut)|0,c=c+Math.imul(M,mt)|0,c=c+Math.imul(O,ut)|0,g=g+Math.imul(O,mt)|0;var er=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(er>>>26)|0,er&=67108863,f=Math.imul(H,rt),c=Math.imul(H,st),c=c+Math.imul(X,rt)|0,g=Math.imul(X,st),f=f+Math.imul(j,ct)|0,c=c+Math.imul(j,lt)|0,c=c+Math.imul(F,ct)|0,g=g+Math.imul(F,lt)|0,f=f+Math.imul(N,ut)|0,c=c+Math.imul(N,mt)|0,c=c+Math.imul(L,ut)|0,g=g+Math.imul(L,mt)|0,f=f+Math.imul(M,pt)|0,c=c+Math.imul(M,dt)|0,c=c+Math.imul(O,pt)|0,g=g+Math.imul(O,dt)|0;var nr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(nr>>>26)|0,nr&=67108863,f=Math.imul(z,rt),c=Math.imul(z,st),c=c+Math.imul(G,rt)|0,g=Math.imul(G,st),f=f+Math.imul(H,ct)|0,c=c+Math.imul(H,lt)|0,c=c+Math.imul(X,ct)|0,g=g+Math.imul(X,lt)|0,f=f+Math.imul(j,ut)|0,c=c+Math.imul(j,mt)|0,c=c+Math.imul(F,ut)|0,g=g+Math.imul(F,mt)|0,f=f+Math.imul(N,pt)|0,c=c+Math.imul(N,dt)|0,c=c+Math.imul(L,pt)|0,g=g+Math.imul(L,dt)|0,f=f+Math.imul(M,ft)|0,c=c+Math.imul(M,ht)|0,c=c+Math.imul(O,ft)|0,g=g+Math.imul(O,ht)|0;var or=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(or>>>26)|0,or&=67108863,f=Math.imul(Q,rt),c=Math.imul(Q,st),c=c+Math.imul(J,rt)|0,g=Math.imul(J,st),f=f+Math.imul(z,ct)|0,c=c+Math.imul(z,lt)|0,c=c+Math.imul(G,ct)|0,g=g+Math.imul(G,lt)|0,f=f+Math.imul(H,ut)|0,c=c+Math.imul(H,mt)|0,c=c+Math.imul(X,ut)|0,g=g+Math.imul(X,mt)|0,f=f+Math.imul(j,pt)|0,c=c+Math.imul(j,dt)|0,c=c+Math.imul(F,pt)|0,g=g+Math.imul(F,dt)|0,f=f+Math.imul(N,ft)|0,c=c+Math.imul(N,ht)|0,c=c+Math.imul(L,ft)|0,g=g+Math.imul(L,ht)|0,f=f+Math.imul(M,gt)|0,c=c+Math.imul(M,yt)|0,c=c+Math.imul(O,gt)|0,g=g+Math.imul(O,yt)|0;var ar=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(ar>>>26)|0,ar&=67108863,f=Math.imul(Y,rt),c=Math.imul(Y,st),c=c+Math.imul(Z,rt)|0,g=Math.imul(Z,st),f=f+Math.imul(Q,ct)|0,c=c+Math.imul(Q,lt)|0,c=c+Math.imul(J,ct)|0,g=g+Math.imul(J,lt)|0,f=f+Math.imul(z,ut)|0,c=c+Math.imul(z,mt)|0,c=c+Math.imul(G,ut)|0,g=g+Math.imul(G,mt)|0,f=f+Math.imul(H,pt)|0,c=c+Math.imul(H,dt)|0,c=c+Math.imul(X,pt)|0,g=g+Math.imul(X,dt)|0,f=f+Math.imul(j,ft)|0,c=c+Math.imul(j,ht)|0,c=c+Math.imul(F,ft)|0,g=g+Math.imul(F,ht)|0,f=f+Math.imul(N,gt)|0,c=c+Math.imul(N,yt)|0,c=c+Math.imul(L,gt)|0,g=g+Math.imul(L,yt)|0,f=f+Math.imul(M,bt)|0,c=c+Math.imul(M,Tt)|0,c=c+Math.imul(O,bt)|0,g=g+Math.imul(O,Tt)|0;var ir=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(ir>>>26)|0,ir&=67108863,f=Math.imul(tt,rt),c=Math.imul(tt,st),c=c+Math.imul(et,rt)|0,g=Math.imul(et,st),f=f+Math.imul(Y,ct)|0,c=c+Math.imul(Y,lt)|0,c=c+Math.imul(Z,ct)|0,g=g+Math.imul(Z,lt)|0,f=f+Math.imul(Q,ut)|0,c=c+Math.imul(Q,mt)|0,c=c+Math.imul(J,ut)|0,g=g+Math.imul(J,mt)|0,f=f+Math.imul(z,pt)|0,c=c+Math.imul(z,dt)|0,c=c+Math.imul(G,pt)|0,g=g+Math.imul(G,dt)|0,f=f+Math.imul(H,ft)|0,c=c+Math.imul(H,ht)|0,c=c+Math.imul(X,ft)|0,g=g+Math.imul(X,ht)|0,f=f+Math.imul(j,gt)|0,c=c+Math.imul(j,yt)|0,c=c+Math.imul(F,gt)|0,g=g+Math.imul(F,yt)|0,f=f+Math.imul(N,bt)|0,c=c+Math.imul(N,Tt)|0,c=c+Math.imul(L,bt)|0,g=g+Math.imul(L,Tt)|0,f=f+Math.imul(M,St)|0,c=c+Math.imul(M,It)|0,c=c+Math.imul(O,St)|0,g=g+Math.imul(O,It)|0;var rr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(rr>>>26)|0,rr&=67108863,f=Math.imul(nt,rt),c=Math.imul(nt,st),c=c+Math.imul(ot,rt)|0,g=Math.imul(ot,st),f=f+Math.imul(tt,ct)|0,c=c+Math.imul(tt,lt)|0,c=c+Math.imul(et,ct)|0,g=g+Math.imul(et,lt)|0,f=f+Math.imul(Y,ut)|0,c=c+Math.imul(Y,mt)|0,c=c+Math.imul(Z,ut)|0,g=g+Math.imul(Z,mt)|0,f=f+Math.imul(Q,pt)|0,c=c+Math.imul(Q,dt)|0,c=c+Math.imul(J,pt)|0,g=g+Math.imul(J,dt)|0,f=f+Math.imul(z,ft)|0,c=c+Math.imul(z,ht)|0,c=c+Math.imul(G,ft)|0,g=g+Math.imul(G,ht)|0,f=f+Math.imul(H,gt)|0,c=c+Math.imul(H,yt)|0,c=c+Math.imul(X,gt)|0,g=g+Math.imul(X,yt)|0,f=f+Math.imul(j,bt)|0,c=c+Math.imul(j,Tt)|0,c=c+Math.imul(F,bt)|0,g=g+Math.imul(F,Tt)|0,f=f+Math.imul(N,St)|0,c=c+Math.imul(N,It)|0,c=c+Math.imul(L,St)|0,g=g+Math.imul(L,It)|0,f=f+Math.imul(M,wt)|0,c=c+Math.imul(M,Ct)|0,c=c+Math.imul(O,wt)|0,g=g+Math.imul(O,Ct)|0;var sr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(sr>>>26)|0,sr&=67108863,f=Math.imul(at,rt),c=Math.imul(at,st),c=c+Math.imul(it,rt)|0,g=Math.imul(it,st),f=f+Math.imul(nt,ct)|0,c=c+Math.imul(nt,lt)|0,c=c+Math.imul(ot,ct)|0,g=g+Math.imul(ot,lt)|0,f=f+Math.imul(tt,ut)|0,c=c+Math.imul(tt,mt)|0,c=c+Math.imul(et,ut)|0,g=g+Math.imul(et,mt)|0,f=f+Math.imul(Y,pt)|0,c=c+Math.imul(Y,dt)|0,c=c+Math.imul(Z,pt)|0,g=g+Math.imul(Z,dt)|0,f=f+Math.imul(Q,ft)|0,c=c+Math.imul(Q,ht)|0,c=c+Math.imul(J,ft)|0,g=g+Math.imul(J,ht)|0,f=f+Math.imul(z,gt)|0,c=c+Math.imul(z,yt)|0,c=c+Math.imul(G,gt)|0,g=g+Math.imul(G,yt)|0,f=f+Math.imul(H,bt)|0,c=c+Math.imul(H,Tt)|0,c=c+Math.imul(X,bt)|0,g=g+Math.imul(X,Tt)|0,f=f+Math.imul(j,St)|0,c=c+Math.imul(j,It)|0,c=c+Math.imul(F,St)|0,g=g+Math.imul(F,It)|0,f=f+Math.imul(N,wt)|0,c=c+Math.imul(N,Ct)|0,c=c+Math.imul(L,wt)|0,g=g+Math.imul(L,Ct)|0,f=f+Math.imul(M,xt)|0,c=c+Math.imul(M,Dt)|0,c=c+Math.imul(O,xt)|0,g=g+Math.imul(O,Dt)|0;var cr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(cr>>>26)|0,cr&=67108863,f=Math.imul(at,ct),c=Math.imul(at,lt),c=c+Math.imul(it,ct)|0,g=Math.imul(it,lt),f=f+Math.imul(nt,ut)|0,c=c+Math.imul(nt,mt)|0,c=c+Math.imul(ot,ut)|0,g=g+Math.imul(ot,mt)|0,f=f+Math.imul(tt,pt)|0,c=c+Math.imul(tt,dt)|0,c=c+Math.imul(et,pt)|0,g=g+Math.imul(et,dt)|0,f=f+Math.imul(Y,ft)|0,c=c+Math.imul(Y,ht)|0,c=c+Math.imul(Z,ft)|0,g=g+Math.imul(Z,ht)|0,f=f+Math.imul(Q,gt)|0,c=c+Math.imul(Q,yt)|0,c=c+Math.imul(J,gt)|0,g=g+Math.imul(J,yt)|0,f=f+Math.imul(z,bt)|0,c=c+Math.imul(z,Tt)|0,c=c+Math.imul(G,bt)|0,g=g+Math.imul(G,Tt)|0,f=f+Math.imul(H,St)|0,c=c+Math.imul(H,It)|0,c=c+Math.imul(X,St)|0,g=g+Math.imul(X,It)|0,f=f+Math.imul(j,wt)|0,c=c+Math.imul(j,Ct)|0,c=c+Math.imul(F,wt)|0,g=g+Math.imul(F,Ct)|0,f=f+Math.imul(N,xt)|0,c=c+Math.imul(N,Dt)|0,c=c+Math.imul(L,xt)|0,g=g+Math.imul(L,Dt)|0;var lr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(lr>>>26)|0,lr&=67108863,f=Math.imul(at,ut),c=Math.imul(at,mt),c=c+Math.imul(it,ut)|0,g=Math.imul(it,mt),f=f+Math.imul(nt,pt)|0,c=c+Math.imul(nt,dt)|0,c=c+Math.imul(ot,pt)|0,g=g+Math.imul(ot,dt)|0,f=f+Math.imul(tt,ft)|0,c=c+Math.imul(tt,ht)|0,c=c+Math.imul(et,ft)|0,g=g+Math.imul(et,ht)|0,f=f+Math.imul(Y,gt)|0,c=c+Math.imul(Y,yt)|0,c=c+Math.imul(Z,gt)|0,g=g+Math.imul(Z,yt)|0,f=f+Math.imul(Q,bt)|0,c=c+Math.imul(Q,Tt)|0,c=c+Math.imul(J,bt)|0,g=g+Math.imul(J,Tt)|0,f=f+Math.imul(z,St)|0,c=c+Math.imul(z,It)|0,c=c+Math.imul(G,St)|0,g=g+Math.imul(G,It)|0,f=f+Math.imul(H,wt)|0,c=c+Math.imul(H,Ct)|0,c=c+Math.imul(X,wt)|0,g=g+Math.imul(X,Ct)|0,f=f+Math.imul(j,xt)|0,c=c+Math.imul(j,Dt)|0,c=c+Math.imul(F,xt)|0,g=g+Math.imul(F,Dt)|0;var ur=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(ur>>>26)|0,ur&=67108863,f=Math.imul(at,pt),c=Math.imul(at,dt),c=c+Math.imul(it,pt)|0,g=Math.imul(it,dt),f=f+Math.imul(nt,ft)|0,c=c+Math.imul(nt,ht)|0,c=c+Math.imul(ot,ft)|0,g=g+Math.imul(ot,ht)|0,f=f+Math.imul(tt,gt)|0,c=c+Math.imul(tt,yt)|0,c=c+Math.imul(et,gt)|0,g=g+Math.imul(et,yt)|0,f=f+Math.imul(Y,bt)|0,c=c+Math.imul(Y,Tt)|0,c=c+Math.imul(Z,bt)|0,g=g+Math.imul(Z,Tt)|0,f=f+Math.imul(Q,St)|0,c=c+Math.imul(Q,It)|0,c=c+Math.imul(J,St)|0,g=g+Math.imul(J,It)|0,f=f+Math.imul(z,wt)|0,c=c+Math.imul(z,Ct)|0,c=c+Math.imul(G,wt)|0,g=g+Math.imul(G,Ct)|0,f=f+Math.imul(H,xt)|0,c=c+Math.imul(H,Dt)|0,c=c+Math.imul(X,xt)|0,g=g+Math.imul(X,Dt)|0;var mr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(mr>>>26)|0,mr&=67108863,f=Math.imul(at,ft),c=Math.imul(at,ht),c=c+Math.imul(it,ft)|0,g=Math.imul(it,ht),f=f+Math.imul(nt,gt)|0,c=c+Math.imul(nt,yt)|0,c=c+Math.imul(ot,gt)|0,g=g+Math.imul(ot,yt)|0,f=f+Math.imul(tt,bt)|0,c=c+Math.imul(tt,Tt)|0,c=c+Math.imul(et,bt)|0,g=g+Math.imul(et,Tt)|0,f=f+Math.imul(Y,St)|0,c=c+Math.imul(Y,It)|0,c=c+Math.imul(Z,St)|0,g=g+Math.imul(Z,It)|0,f=f+Math.imul(Q,wt)|0,c=c+Math.imul(Q,Ct)|0,c=c+Math.imul(J,wt)|0,g=g+Math.imul(J,Ct)|0,f=f+Math.imul(z,xt)|0,c=c+Math.imul(z,Dt)|0,c=c+Math.imul(G,xt)|0,g=g+Math.imul(G,Dt)|0;var pr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(pr>>>26)|0,pr&=67108863,f=Math.imul(at,gt),c=Math.imul(at,yt),c=c+Math.imul(it,gt)|0,g=Math.imul(it,yt),f=f+Math.imul(nt,bt)|0,c=c+Math.imul(nt,Tt)|0,c=c+Math.imul(ot,bt)|0,g=g+Math.imul(ot,Tt)|0,f=f+Math.imul(tt,St)|0,c=c+Math.imul(tt,It)|0,c=c+Math.imul(et,St)|0,g=g+Math.imul(et,It)|0,f=f+Math.imul(Y,wt)|0,c=c+Math.imul(Y,Ct)|0,c=c+Math.imul(Z,wt)|0,g=g+Math.imul(Z,Ct)|0,f=f+Math.imul(Q,xt)|0,c=c+Math.imul(Q,Dt)|0,c=c+Math.imul(J,xt)|0,g=g+Math.imul(J,Dt)|0;var dr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(dr>>>26)|0,dr&=67108863,f=Math.imul(at,bt),c=Math.imul(at,Tt),c=c+Math.imul(it,bt)|0,g=Math.imul(it,Tt),f=f+Math.imul(nt,St)|0,c=c+Math.imul(nt,It)|0,c=c+Math.imul(ot,St)|0,g=g+Math.imul(ot,It)|0,f=f+Math.imul(tt,wt)|0,c=c+Math.imul(tt,Ct)|0,c=c+Math.imul(et,wt)|0,g=g+Math.imul(et,Ct)|0,f=f+Math.imul(Y,xt)|0,c=c+Math.imul(Y,Dt)|0,c=c+Math.imul(Z,xt)|0,g=g+Math.imul(Z,Dt)|0;var fr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(fr>>>26)|0,fr&=67108863,f=Math.imul(at,St),c=Math.imul(at,It),c=c+Math.imul(it,St)|0,g=Math.imul(it,It),f=f+Math.imul(nt,wt)|0,c=c+Math.imul(nt,Ct)|0,c=c+Math.imul(ot,wt)|0,g=g+Math.imul(ot,Ct)|0,f=f+Math.imul(tt,xt)|0,c=c+Math.imul(tt,Dt)|0,c=c+Math.imul(et,xt)|0,g=g+Math.imul(et,Dt)|0;var hr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(hr>>>26)|0,hr&=67108863,f=Math.imul(at,wt),c=Math.imul(at,Ct),c=c+Math.imul(it,wt)|0,g=Math.imul(it,Ct),f=f+Math.imul(nt,xt)|0,c=c+Math.imul(nt,Dt)|0,c=c+Math.imul(ot,xt)|0,g=g+Math.imul(ot,Dt)|0;var gr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(gr>>>26)|0,gr&=67108863,f=Math.imul(at,xt),c=Math.imul(at,Dt),c=c+Math.imul(it,xt)|0,g=Math.imul(it,Dt);var yr=(w+f|0)+((c&8191)<<13)|0;return w=(g+(c>>>13)|0)+(yr>>>26)|0,yr&=67108863,T[0]=Zi,T[1]=tr,T[2]=er,T[3]=nr,T[4]=or,T[5]=ar,T[6]=ir,T[7]=rr,T[8]=sr,T[9]=cr,T[10]=lr,T[11]=ur,T[12]=mr,T[13]=pr,T[14]=dr,T[15]=fr,T[16]=hr,T[17]=gr,T[18]=yr,w!==0&&(T[19]=w,m.length++),m};Math.imul||(K=U);function Bt(y,r,u){u.negative=r.negative^y.negative,u.length=y.length+r.length;for(var m=0,p=0,h=0;h<u.length-1;h++){var T=p;p=0;for(var w=m&67108863,f=Math.min(h,r.length-1),c=Math.max(0,h-y.length+1);c<=f;c++){var g=h-c,v=y.words[g]|0,M=r.words[c]|0,O=v*M,B=O&67108863;T=T+(O/67108864|0)|0,B=B+w|0,w=B&67108863,T=T+(B>>>26)|0,p+=T>>>26,T&=67108863}u.words[h]=w,m=T,T=p}return m!==0?u.words[h]=m:u.length--,u._strip()}function Et(y,r,u){return Bt(y,r,u)}o.prototype.mulTo=function(r,u){var m,p=this.length+r.length;return this.length===10&&r.length===10?m=K(this,r,u):p<63?m=U(this,r,u):p<1024?m=Bt(this,r,u):m=Et(this,r,u),m};function Mt(y,r){this.x=y,this.y=r}Mt.prototype.makeRBT=function(r){for(var u=new Array(r),m=o.prototype._countBits(r)-1,p=0;p<r;p++)u[p]=this.revBin(p,m,r);return u},Mt.prototype.revBin=function(r,u,m){if(r===0||r===m-1)return r;for(var p=0,h=0;h<u;h++)p|=(r&1)<<u-h-1,r>>=1;return p},Mt.prototype.permute=function(r,u,m,p,h,T){for(var w=0;w<T;w++)p[w]=u[r[w]],h[w]=m[r[w]]},Mt.prototype.transform=function(r,u,m,p,h,T){this.permute(T,r,u,m,p,h);for(var w=1;w<h;w<<=1)for(var f=w<<1,c=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),v=0;v<h;v+=f)for(var M=c,O=g,B=0;B<w;B++){var N=m[v+B],L=p[v+B],oe=m[v+B+w],j=p[v+B+w],F=M*oe-O*j;j=M*j+O*oe,oe=F,m[v+B]=N+oe,p[v+B]=L+j,m[v+B+w]=N-oe,p[v+B+w]=L-j,B!==f&&(F=c*M-g*O,O=c*O+g*M,M=F)}},Mt.prototype.guessLen13b=function(r,u){var m=Math.max(u,r)|1,p=m&1,h=0;for(m=m/2|0;m;m=m>>>1)h++;return 1<<h+1+p},Mt.prototype.conjugate=function(r,u,m){if(!(m<=1))for(var p=0;p<m/2;p++){var h=r[p];r[p]=r[m-p-1],r[m-p-1]=h,h=u[p],u[p]=-u[m-p-1],u[m-p-1]=-h}},Mt.prototype.normalize13b=function(r,u){for(var m=0,p=0;p<u/2;p++){var h=Math.round(r[2*p+1]/u)*8192+Math.round(r[2*p]/u)+m;r[p]=h&67108863,h<67108864?m=0:m=h/67108864|0}return r},Mt.prototype.convert13b=function(r,u,m,p){for(var h=0,T=0;T<u;T++)h=h+(r[T]|0),m[2*T]=h&8191,h=h>>>13,m[2*T+1]=h&8191,h=h>>>13;for(T=2*u;T<p;++T)m[T]=0;t(h===0),t((h&-8192)===0)},Mt.prototype.stub=function(r){for(var u=new Array(r),m=0;m<r;m++)u[m]=0;return u},Mt.prototype.mulp=function(r,u,m){var p=2*this.guessLen13b(r.length,u.length),h=this.makeRBT(p),T=this.stub(p),w=new Array(p),f=new Array(p),c=new Array(p),g=new Array(p),v=new Array(p),M=new Array(p),O=m.words;O.length=p,this.convert13b(r.words,r.length,w,p),this.convert13b(u.words,u.length,g,p),this.transform(w,T,f,c,p,h),this.transform(g,T,v,M,p,h);for(var B=0;B<p;B++){var N=f[B]*v[B]-c[B]*M[B];c[B]=f[B]*M[B]+c[B]*v[B],f[B]=N}return this.conjugate(f,c,p),this.transform(f,c,O,T,p,h),this.conjugate(O,T,p),this.normalize13b(O,p),m.negative=r.negative^u.negative,m.length=r.length+u.length,m._strip()},o.prototype.mul=function(r){var u=new o(null);return u.words=new Array(this.length+r.length),this.mulTo(r,u)},o.prototype.mulf=function(r){var u=new o(null);return u.words=new Array(this.length+r.length),Et(this,r,u)},o.prototype.imul=function(r){return this.clone().mulTo(r,this)},o.prototype.imuln=function(r){var u=r<0;u&&(r=-r),t(typeof r=="number"),t(r<67108864);for(var m=0,p=0;p<this.length;p++){var h=(this.words[p]|0)*r,T=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=T>>>26,this.words[p]=T&67108863}return m!==0&&(this.words[p]=m,this.length++),this.length=r===0?1:this.length,u?this.ineg():this},o.prototype.muln=function(r){return this.clone().imuln(r)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(r){var u=P(r);if(u.length===0)return new o(1);for(var m=this,p=0;p<u.length&&u[p]===0;p++,m=m.sqr());if(++p<u.length)for(var h=m.sqr();p<u.length;p++,h=h.sqr())u[p]!==0&&(m=m.mul(h));return m},o.prototype.iushln=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26,p=67108863>>>26-u<<26-u,h;if(u!==0){var T=0;for(h=0;h<this.length;h++){var w=this.words[h]&p,f=(this.words[h]|0)-w<<u;this.words[h]=f|T,T=w>>>26-u}T&&(this.words[h]=T,this.length++)}if(m!==0){for(h=this.length-1;h>=0;h--)this.words[h+m]=this.words[h];for(h=0;h<m;h++)this.words[h]=0;this.length+=m}return this._strip()},o.prototype.ishln=function(r){return t(this.negative===0),this.iushln(r)},o.prototype.iushrn=function(r,u,m){t(typeof r=="number"&&r>=0);var p;u?p=(u-u%26)/26:p=0;var h=r%26,T=Math.min((r-h)/26,this.length),w=67108863^67108863>>>h<<h,f=m;if(p-=T,p=Math.max(0,p),f){for(var c=0;c<T;c++)f.words[c]=this.words[c];f.length=T}if(T!==0)if(this.length>T)for(this.length-=T,c=0;c<this.length;c++)this.words[c]=this.words[c+T];else this.words[0]=0,this.length=1;var g=0;for(c=this.length-1;c>=0&&(g!==0||c>=p);c--){var v=this.words[c]|0;this.words[c]=g<<26-h|v>>>h,g=v&w}return f&&g!==0&&(f.words[f.length++]=g),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},o.prototype.ishrn=function(r,u,m){return t(this.negative===0),this.iushrn(r,u,m)},o.prototype.shln=function(r){return this.clone().ishln(r)},o.prototype.ushln=function(r){return this.clone().iushln(r)},o.prototype.shrn=function(r){return this.clone().ishrn(r)},o.prototype.ushrn=function(r){return this.clone().iushrn(r)},o.prototype.testn=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26,p=1<<u;if(this.length<=m)return!1;var h=this.words[m];return!!(h&p)},o.prototype.imaskn=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26;if(t(this.negative===0,"imaskn works only with positive numbers"),this.length<=m)return this;if(u!==0&&m++,this.length=Math.min(m,this.length),u!==0){var p=67108863^67108863>>>u<<u;this.words[this.length-1]&=p}return this._strip()},o.prototype.maskn=function(r){return this.clone().imaskn(r)},o.prototype.iaddn=function(r){return t(typeof r=="number"),t(r<67108864),r<0?this.isubn(-r):this.negative!==0?this.length===1&&(this.words[0]|0)<=r?(this.words[0]=r-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(r),this.negative=1,this):this._iaddn(r)},o.prototype._iaddn=function(r){this.words[0]+=r;for(var u=0;u<this.length&&this.words[u]>=67108864;u++)this.words[u]-=67108864,u===this.length-1?this.words[u+1]=1:this.words[u+1]++;return this.length=Math.max(this.length,u+1),this},o.prototype.isubn=function(r){if(t(typeof r=="number"),t(r<67108864),r<0)return this.iaddn(-r);if(this.negative!==0)return this.negative=0,this.iaddn(r),this.negative=1,this;if(this.words[0]-=r,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var u=0;u<this.length&&this.words[u]<0;u++)this.words[u]+=67108864,this.words[u+1]-=1;return this._strip()},o.prototype.addn=function(r){return this.clone().iaddn(r)},o.prototype.subn=function(r){return this.clone().isubn(r)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(r,u,m){var p=r.length+m,h;this._expand(p);var T,w=0;for(h=0;h<r.length;h++){T=(this.words[h+m]|0)+w;var f=(r.words[h]|0)*u;T-=f&67108863,w=(T>>26)-(f/67108864|0),this.words[h+m]=T&67108863}for(;h<this.length-m;h++)T=(this.words[h+m]|0)+w,w=T>>26,this.words[h+m]=T&67108863;if(w===0)return this._strip();for(t(w===-1),w=0,h=0;h<this.length;h++)T=-(this.words[h]|0)+w,w=T>>26,this.words[h]=T&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(r,u){var m=this.length-r.length,p=this.clone(),h=r,T=h.words[h.length-1]|0,w=this._countBits(T);m=26-w,m!==0&&(h=h.ushln(m),p.iushln(m),T=h.words[h.length-1]|0);var f=p.length-h.length,c;if(u!=="mod"){c=new o(null),c.length=f+1,c.words=new Array(c.length);for(var g=0;g<c.length;g++)c.words[g]=0}var v=p.clone()._ishlnsubmul(h,1,f);v.negative===0&&(p=v,c&&(c.words[f]=1));for(var M=f-1;M>=0;M--){var O=(p.words[h.length+M]|0)*67108864+(p.words[h.length+M-1]|0);for(O=Math.min(O/T|0,67108863),p._ishlnsubmul(h,O,M);p.negative!==0;)O--,p.negative=0,p._ishlnsubmul(h,1,M),p.isZero()||(p.negative^=1);c&&(c.words[M]=O)}return c&&c._strip(),p._strip(),u!=="div"&&m!==0&&p.iushrn(m),{div:c||null,mod:p}},o.prototype.divmod=function(r,u,m){if(t(!r.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var p,h,T;return this.negative!==0&&r.negative===0?(T=this.neg().divmod(r,u),u!=="mod"&&(p=T.div.neg()),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.iadd(r)),{div:p,mod:h}):this.negative===0&&r.negative!==0?(T=this.divmod(r.neg(),u),u!=="mod"&&(p=T.div.neg()),{div:p,mod:T.mod}):(this.negative&r.negative)!==0?(T=this.neg().divmod(r.neg(),u),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.isub(r)),{div:T.div,mod:h}):r.length>this.length||this.cmp(r)<0?{div:new o(0),mod:this}:r.length===1?u==="div"?{div:this.divn(r.words[0]),mod:null}:u==="mod"?{div:null,mod:new o(this.modrn(r.words[0]))}:{div:this.divn(r.words[0]),mod:new o(this.modrn(r.words[0]))}:this._wordDiv(r,u)},o.prototype.div=function(r){return this.divmod(r,"div",!1).div},o.prototype.mod=function(r){return this.divmod(r,"mod",!1).mod},o.prototype.umod=function(r){return this.divmod(r,"mod",!0).mod},o.prototype.divRound=function(r){var u=this.divmod(r);if(u.mod.isZero())return u.div;var m=u.div.negative!==0?u.mod.isub(r):u.mod,p=r.ushrn(1),h=r.andln(1),T=m.cmp(p);return T<0||h===1&&T===0?u.div:u.div.negative!==0?u.div.isubn(1):u.div.iaddn(1)},o.prototype.modrn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var m=(1<<26)%r,p=0,h=this.length-1;h>=0;h--)p=(m*p+(this.words[h]|0))%r;return u?-p:p},o.prototype.modn=function(r){return this.modrn(r)},o.prototype.idivn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var m=0,p=this.length-1;p>=0;p--){var h=(this.words[p]|0)+m*67108864;this.words[p]=h/r|0,m=h%r}return this._strip(),u?this.ineg():this},o.prototype.divn=function(r){return this.clone().idivn(r)},o.prototype.egcd=function(r){t(r.negative===0),t(!r.isZero());var u=this,m=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var p=new o(1),h=new o(0),T=new o(0),w=new o(1),f=0;u.isEven()&&m.isEven();)u.iushrn(1),m.iushrn(1),++f;for(var c=m.clone(),g=u.clone();!u.isZero();){for(var v=0,M=1;(u.words[0]&M)===0&&v<26;++v,M<<=1);if(v>0)for(u.iushrn(v);v-- >0;)(p.isOdd()||h.isOdd())&&(p.iadd(c),h.isub(g)),p.iushrn(1),h.iushrn(1);for(var O=0,B=1;(m.words[0]&B)===0&&O<26;++O,B<<=1);if(O>0)for(m.iushrn(O);O-- >0;)(T.isOdd()||w.isOdd())&&(T.iadd(c),w.isub(g)),T.iushrn(1),w.iushrn(1);u.cmp(m)>=0?(u.isub(m),p.isub(T),h.isub(w)):(m.isub(u),T.isub(p),w.isub(h))}return{a:T,b:w,gcd:m.iushln(f)}},o.prototype._invmp=function(r){t(r.negative===0),t(!r.isZero());var u=this,m=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var p=new o(1),h=new o(0),T=m.clone();u.cmpn(1)>0&&m.cmpn(1)>0;){for(var w=0,f=1;(u.words[0]&f)===0&&w<26;++w,f<<=1);if(w>0)for(u.iushrn(w);w-- >0;)p.isOdd()&&p.iadd(T),p.iushrn(1);for(var c=0,g=1;(m.words[0]&g)===0&&c<26;++c,g<<=1);if(c>0)for(m.iushrn(c);c-- >0;)h.isOdd()&&h.iadd(T),h.iushrn(1);u.cmp(m)>=0?(u.isub(m),p.isub(h)):(m.isub(u),h.isub(p))}var v;return u.cmpn(1)===0?v=p:v=h,v.cmpn(0)<0&&v.iadd(r),v},o.prototype.gcd=function(r){if(this.isZero())return r.abs();if(r.isZero())return this.abs();var u=this.clone(),m=r.clone();u.negative=0,m.negative=0;for(var p=0;u.isEven()&&m.isEven();p++)u.iushrn(1),m.iushrn(1);do{for(;u.isEven();)u.iushrn(1);for(;m.isEven();)m.iushrn(1);var h=u.cmp(m);if(h<0){var T=u;u=m,m=T}else if(h===0||m.cmpn(1)===0)break;u.isub(m)}while(!0);return m.iushln(p)},o.prototype.invm=function(r){return this.egcd(r).a.umod(r)},o.prototype.isEven=function(){return(this.words[0]&1)===0},o.prototype.isOdd=function(){return(this.words[0]&1)===1},o.prototype.andln=function(r){return this.words[0]&r},o.prototype.bincn=function(r){t(typeof r=="number");var u=r%26,m=(r-u)/26,p=1<<u;if(this.length<=m)return this._expand(m+1),this.words[m]|=p,this;for(var h=p,T=m;h!==0&&T<this.length;T++){var w=this.words[T]|0;w+=h,h=w>>>26,w&=67108863,this.words[T]=w}return h!==0&&(this.words[T]=h,this.length++),this},o.prototype.isZero=function(){return this.length===1&&this.words[0]===0},o.prototype.cmpn=function(r){var u=r<0;if(this.negative!==0&&!u)return-1;if(this.negative===0&&u)return 1;this._strip();var m;if(this.length>1)m=1;else{u&&(r=-r),t(r<=67108863,"Number is too big");var p=this.words[0]|0;m=p===r?0:p<r?-1:1}return this.negative!==0?-m|0:m},o.prototype.cmp=function(r){if(this.negative!==0&&r.negative===0)return-1;if(this.negative===0&&r.negative!==0)return 1;var u=this.ucmp(r);return this.negative!==0?-u|0:u},o.prototype.ucmp=function(r){if(this.length>r.length)return 1;if(this.length<r.length)return-1;for(var u=0,m=this.length-1;m>=0;m--){var p=this.words[m]|0,h=r.words[m]|0;if(p!==h){p<h?u=-1:p>h&&(u=1);break}}return u},o.prototype.gtn=function(r){return this.cmpn(r)===1},o.prototype.gt=function(r){return this.cmp(r)===1},o.prototype.gten=function(r){return this.cmpn(r)>=0},o.prototype.gte=function(r){return this.cmp(r)>=0},o.prototype.ltn=function(r){return this.cmpn(r)===-1},o.prototype.lt=function(r){return this.cmp(r)===-1},o.prototype.lten=function(r){return this.cmpn(r)<=0},o.prototype.lte=function(r){return this.cmp(r)<=0},o.prototype.eqn=function(r){return this.cmpn(r)===0},o.prototype.eq=function(r){return this.cmp(r)===0},o.red=function(r){return new V(r)},o.prototype.toRed=function(r){return t(!this.red,"Already a number in reduction context"),t(this.negative===0,"red works only with positives"),r.convertTo(this)._forceRed(r)},o.prototype.fromRed=function(){return t(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(r){return this.red=r,this},o.prototype.forceRed=function(r){return t(!this.red,"Already a number in reduction context"),this._forceRed(r)},o.prototype.redAdd=function(r){return t(this.red,"redAdd works only with red numbers"),this.red.add(this,r)},o.prototype.redIAdd=function(r){return t(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,r)},o.prototype.redSub=function(r){return t(this.red,"redSub works only with red numbers"),this.red.sub(this,r)},o.prototype.redISub=function(r){return t(this.red,"redISub works only with red numbers"),this.red.isub(this,r)},o.prototype.redShl=function(r){return t(this.red,"redShl works only with red numbers"),this.red.shl(this,r)},o.prototype.redMul=function(r){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,r),this.red.mul(this,r)},o.prototype.redIMul=function(r){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,r),this.red.imul(this,r)},o.prototype.redSqr=function(){return t(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return t(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return t(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return t(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return t(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(r){return t(this.red&&!r.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,r)};var Le={k256:null,p224:null,p192:null,p25519:null};function Wt(y,r){this.name=y,this.p=new o(r,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}Wt.prototype._tmp=function(){var r=new o(null);return r.words=new Array(Math.ceil(this.n/13)),r},Wt.prototype.ireduce=function(r){var u=r,m;do this.split(u,this.tmp),u=this.imulK(u),u=u.iadd(this.tmp),m=u.bitLength();while(m>this.n);var p=m<this.n?-1:u.ucmp(this.p);return p===0?(u.words[0]=0,u.length=1):p>0?u.isub(this.p):u.strip!==void 0?u.strip():u._strip(),u},Wt.prototype.split=function(r,u){r.iushrn(this.n,0,u)},Wt.prototype.imulK=function(r){return r.imul(this.k)};function dn(){Wt.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(dn,Wt),dn.prototype.split=function(r,u){for(var m=4194303,p=Math.min(r.length,9),h=0;h<p;h++)u.words[h]=r.words[h];if(u.length=p,r.length<=9){r.words[0]=0,r.length=1;return}var T=r.words[9];for(u.words[u.length++]=T&m,h=10;h<r.length;h++){var w=r.words[h]|0;r.words[h-10]=(w&m)<<4|T>>>22,T=w}T>>>=22,r.words[h-10]=T,T===0&&r.length>10?r.length-=10:r.length-=9},dn.prototype.imulK=function(r){r.words[r.length]=0,r.words[r.length+1]=0,r.length+=2;for(var u=0,m=0;m<r.length;m++){var p=r.words[m]|0;u+=p*977,r.words[m]=u&67108863,u=p*64+(u/67108864|0)}return r.words[r.length-1]===0&&(r.length--,r.words[r.length-1]===0&&r.length--),r};function ss(){Wt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(ss,Wt);function cs(){Wt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(cs,Wt);function Yi(){Wt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Yi,Wt),Yi.prototype.imulK=function(r){for(var u=0,m=0;m<r.length;m++){var p=(r.words[m]|0)*19+u,h=p&67108863;p>>>=26,r.words[m]=h,u=p}return u!==0&&(r.words[r.length++]=u),r},o._prime=function(r){if(Le[r])return Le[r];var u;if(r==="k256")u=new dn;else if(r==="p224")u=new ss;else if(r==="p192")u=new cs;else if(r==="p25519")u=new Yi;else throw new Error("Unknown prime "+r);return Le[r]=u,u};function V(y){if(typeof y=="string"){var r=o._prime(y);this.m=r.p,this.prime=r}else t(y.gtn(1),"modulus must be greater than 1"),this.m=y,this.prime=null}V.prototype._verify1=function(r){t(r.negative===0,"red works only with positives"),t(r.red,"red works only with red numbers")},V.prototype._verify2=function(r,u){t((r.negative|u.negative)===0,"red works only with positives"),t(r.red&&r.red===u.red,"red works only with red numbers")},V.prototype.imod=function(r){return this.prime?this.prime.ireduce(r)._forceRed(this):(b(r,r.umod(this.m)._forceRed(this)),r)},V.prototype.neg=function(r){return r.isZero()?r.clone():this.m.sub(r)._forceRed(this)},V.prototype.add=function(r,u){this._verify2(r,u);var m=r.add(u);return m.cmp(this.m)>=0&&m.isub(this.m),m._forceRed(this)},V.prototype.iadd=function(r,u){this._verify2(r,u);var m=r.iadd(u);return m.cmp(this.m)>=0&&m.isub(this.m),m},V.prototype.sub=function(r,u){this._verify2(r,u);var m=r.sub(u);return m.cmpn(0)<0&&m.iadd(this.m),m._forceRed(this)},V.prototype.isub=function(r,u){this._verify2(r,u);var m=r.isub(u);return m.cmpn(0)<0&&m.iadd(this.m),m},V.prototype.shl=function(r,u){return this._verify1(r),this.imod(r.ushln(u))},V.prototype.imul=function(r,u){return this._verify2(r,u),this.imod(r.imul(u))},V.prototype.mul=function(r,u){return this._verify2(r,u),this.imod(r.mul(u))},V.prototype.isqr=function(r){return this.imul(r,r.clone())},V.prototype.sqr=function(r){return this.mul(r,r)},V.prototype.sqrt=function(r){if(r.isZero())return r.clone();var u=this.m.andln(3);if(t(u%2===1),u===3){var m=this.m.add(new o(1)).iushrn(2);return this.pow(r,m)}for(var p=this.m.subn(1),h=0;!p.isZero()&&p.andln(1)===0;)h++,p.iushrn(1);t(!p.isZero());var T=new o(1).toRed(this),w=T.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);this.pow(c,f).cmp(w)!==0;)c.redIAdd(w);for(var g=this.pow(c,p),v=this.pow(r,p.addn(1).iushrn(1)),M=this.pow(r,p),O=h;M.cmp(T)!==0;){for(var B=M,N=0;B.cmp(T)!==0;N++)B=B.redSqr();t(N<O);var L=this.pow(g,new o(1).iushln(O-N-1));v=v.redMul(L),g=L.redSqr(),M=M.redMul(g),O=N}return v},V.prototype.invm=function(r){var u=r._invmp(this.m);return u.negative!==0?(u.negative=0,this.imod(u).redNeg()):this.imod(u)},V.prototype.pow=function(r,u){if(u.isZero())return new o(1).toRed(this);if(u.cmpn(1)===0)return r.clone();var m=4,p=new Array(1<<m);p[0]=new o(1).toRed(this),p[1]=r;for(var h=2;h<p.length;h++)p[h]=this.mul(p[h-1],r);var T=p[0],w=0,f=0,c=u.bitLength()%26;for(c===0&&(c=26),h=u.length-1;h>=0;h--){for(var g=u.words[h],v=c-1;v>=0;v--){var M=g>>v&1;if(T!==p[0]&&(T=this.sqr(T)),M===0&&w===0){f=0;continue}w<<=1,w|=M,f++,!(f!==m&&(h!==0||v!==0))&&(T=this.mul(T,p[w]),f=0,w=0)}c=26}return T},V.prototype.convertTo=function(r){var u=r.umod(this.m);return u===r?u.clone():u},V.prototype.convertFrom=function(r){var u=r.clone();return u.red=null,u},o.mont=function(r){return new fe(r)};function fe(y){V.call(this,y),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}n(fe,V),fe.prototype.convertTo=function(r){return this.imod(r.ushln(this.shift))},fe.prototype.convertFrom=function(r){var u=this.imod(r.mul(this.rinv));return u.red=null,u},fe.prototype.imul=function(r,u){if(r.isZero()||u.isZero())return r.words[0]=0,r.length=1,r;var m=r.imul(u),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},fe.prototype.mul=function(r,u){if(r.isZero()||u.isZero())return new o(0)._forceRed(this);var m=r.mul(u),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},fe.prototype.invm=function(r){var u=this.imod(r._invmp(this.m).mul(this.r2));return u._forceRed(this)}})(typeof as>"u"||as,Dl)});import{TransactionType as mu}from"@msafe/sui3-utils";import{coinsList as nu,poolIdPoolNameMap as ou,poolInfo as vs,singleAssetPoolCoinMap as au}from"@alphafi/alphafi-sdk";import{TransactionType as je}from"@msafe/sui3-utils";import{bcs as fn,fromBase64 as hn}from"@mysten/bcs";var gn=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isClaimRewardTransaction())return this.decodeClaimReward();let e=this.getLiquidityChangeEvent();if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson,n=t.pool_id,o=ou[n];if(console.log("Decoder event data - ",t),console.log("Decoder poolName - ",o),this.isWithdrawAlphaEvent(e))return this.decodeWithdrawAlpha(t);if(this.isWithdrawEvent(t))return this.decodeWithdraw(o);if(this.isDoubleAssetDepositEvent(t,o))return this.decodeDoubleAssetDeposit(o,t);if(this.isSingleAssetDepositEvent(t,o))return this.decodeSingleAssetDeposit(o,t);throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(){return this.simResult.events.find(e=>this.isLiquidityChangeEventType(e.type))}isClaimRewardTransaction(){return!!this.getMoveCallCommand("get_user_rewards_all")}isLiquidityChangeEventType(e){return e.includes("LiquidityChangeEvent")||e.includes("LiquidityChangeNewNewEvent")||e.includes("WithdrawEventV2")}isWithdrawAlphaEvent(e){return e.type.includes("WithdrawEventV2")}isWithdrawEvent(e){return e.event_type===1}isDoubleAssetDepositEvent(e,t){return e.event_type===0&&vs[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&vs[t].assetTypes.length===1}extractXTokensAmount(){let e=this.inputs.find(o=>o.Pure!==void 0);if(!e||!e.Pure?.bytes)throw new Error("Unable to extract xTokensAmount from inputs");let{bytes:t}=e.Pure,n;return t.length===12?n=fn.u64().parse(hn(t)):t.length===24?n=fn.u128().parse(hn(t)):t.length===44?n=fn.u256().parse(hn(t)):n=fn.u64().parse(hn(t)),n}decodeDoubleAssetDeposit(e,t){let{amount_a:n,amount_b:o}=t,i=Number(n)>0;return console.log("Decoder.decodeDoubleAssetDeposit",n,o,i),{txType:je.Other,type:"depositDoubleAsset",intentionData:{poolName:e,amount:i?n:o,isAmountA:i}}}decodeSingleAssetDeposit(e,t){let{amount:n}=t;if(console.log("Decoder.decodeSingleAssetDeposit",n),this.getLiquidityChangeEvent().type.includes(":alphafi_navi_pool:")){let{coin:i}=au[e],{expo:s}=nu[i];n=Math.floor(Number(n)/10**(9-s)).toString()}return{txType:je.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:je.Other,type:"withdraw",intentionData:{poolName:e,xTokensAmount:t}}}decodeWithdrawAlpha(e){let t=this.extractXTokensAmount(),{amount_withdrawn_from_locked:n}=e;return console.log("Decoder.decodeWithdrawAlpha",t,n),{txType:je.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:je.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as ru}from"@alphafi/alphafi-sdk";import iu from"sort-keys-recursive";var S=class{constructor(e){this.data=e}serialize(){return JSON.stringify(iu(this.data))}};var yn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t;return await ru(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as su}from"@alphafi/alphafi-sdk";var bn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i,isAmountA:s}=this.data;return await su(o,n.address,i,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as cu}from"@alphafi/alphafi-sdk";var Tn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i}=this.data;return await cu(o,n.address,i)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as lu}from"@alphafi/alphafi-sdk";var Sn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:i}=this.data;return await lu(i,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as uu}from"@alphafi/alphafi-sdk";var In=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:i}=this.data;return await uu(i,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new a(t)}};var wn=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n,account:o}=e,i=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("AlphaFiHelper Sim result - ",i);let l=new gn(t,i).decode();return{txType:mu.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=Tn.fromData(e.intentionData);break;case"depositDoubleAsset":n=bn.fromData(e.intentionData);break;case"withdraw":n=Sn.fromData(e.intentionData);break;case"withdrawAlpha":n=In.fromData(e.intentionData);break;case"claimReward":n=yn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as Eu}from"@msafe/sui3-utils";import{TransactionType as jt}from"@msafe/sui3-utils";import{bcs as Tr}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as Sr}from"bucket-protocol-sdk";var Cn=class{constructor(e){this.transaction=e}decode(){if(this.isSBUCKDepositTransaction())return this.decodeSBUCKDeposit();if(this.isSBUCKUnstakeTransaction())return this.decodeSBUCKUnstake();if(this.isSBUCKWithdrawTransaction())return this.decodeSBUCKWithdraw();if(this.isSBUCKClaimTransaction())return this.decodeSBUCKClaim();if(this.isLockedClaimTransaction())return this.decodeLockedClaim();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isCloseTransaction())return this.decodeClose();if(this.isTankDepositTransaction())return this.decodeTankDeposit();if(this.isTankWithdrawTransaction())return this.decodeTankWithdraw();if(this.isTankClaimTransaction())return this.decodeTankClaim();if(this.isPsmTransaction())return this.decodePsm();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getMoveCallModuleCommand(e,t){return this.commands.find(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getMoveCallPackageModuleCommand(e,t,n){return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.package===e&&o.MoveCall.module===t&&o.MoveCall.function===n)}getMoveCallModuleCommands(e,t){return this.commands.filter(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(e=>e.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(e=>e.$kind==="TransferObjects")}isPsmTransaction(){return!!this.getMoveCallCommand("charge_reservoir")||!!this.getMoveCallCommand("discharge_reservoir")}isStrapNewTransaction(){return!!this.getMoveCallModuleCommand("strap","new")}isBorrowTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","high_top_up")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow_with_strap")}isRepayTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","fully_repay")||!!this.getMoveCallModuleCommand("bucket_operations","fully_repay_with_strap")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw_with_strap")}isWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","withdraw")||!!this.getMoveCallModuleCommand("buck","withdraw_with_strap")}isCloseTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","destroy_empty_strap")}isTankDepositTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","deposit")}isTankWithdrawTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","withdraw")}isTankClaimTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","claim")}isSBUCKDepositTransaction(){return!!this.getMoveCallModuleCommand("buck","buck_to_sbuck")}isSBUCKWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","sbuck_to_buck")}isSBUCKStakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Sr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Sr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(Sr,"fountain_core","claim")}isLockedClaimTransaction(){return!!this.getMoveCallModuleCommand("proof_rule","claim")||!!this.getMoveCallModuleCommand("lst_proof_rule","claim")}isLstUnlockTransaction(){return!!this.getMoveCallModuleCommand("lst_proof_rule","unlock")}decodePsm(){let e,t,n="0",o=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return o.$kind==="Input"&&(n=this.getPureInputU64(o.Input)),this.getMoveCallCommand("charge_reservoir")?([e]=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments,t=!1):([e]=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments,t=!0),console.log("Decoder.decodePsm",e,n,t),{txType:jt.Other,type:"psm",intentionData:{coinType:e,amount:n,buckToCoin:t}}}decodeBorrow(){let e="",t="0",n,o=this.getStrapId(),i="0",s=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(s.$kind==="Input"&&(i=this.getPureInputU64(s.Input)),this.getMoveCallCommand("high_top_up")){let l=this.getMoveCallCommand("high_top_up").MoveCall;[e]=l.typeArguments;let d=l.arguments[1];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let b=l.arguments[3];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([n]=I)}}else if(this.getMoveCallCommand("high_borrow")){let l=this.getMoveCallCommand("high_borrow").MoveCall;[e]=l.typeArguments;let d=l.arguments[4];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let b=l.arguments[5];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([n]=I)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let l=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=l.typeArguments;let d=l.arguments[5];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let b=l.arguments[6];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([n]=I)}}return{txType:jt.Other,type:"borrow",intentionData:{collateralType:e,collateralAmount:i,borrowAmount:t,insertionPlace:n,strapId:o}}}decodeRepay(){let e="",t="0",n="0",i,s=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))[e]=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments;else if(this.getMoveCallCommand("fully_repay_with_strap"))[e]=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments;else if(this.getMoveCallCommand("repay_and_withdraw")){let l=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=l.typeArguments;let d=l.arguments[4];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let b=l.arguments[5];if(b.$kind==="Input"){let C=this.getPureAddresses(b.Input);C.length===1&&([i]=C)}let I=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];I.$kind==="Input"&&(t=this.getPureInputU64(I.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let l=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=l.typeArguments;let d=l.arguments[5];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let b=l.arguments[6];if(b.$kind==="Input"){let C=this.getPureAddresses(b.Input);C.length===1&&([i]=C)}let I=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];I.$kind==="Input"&&(t=this.getPureInputU64(I.Input))}return{txType:jt.Other,type:"repay",intentionData:{collateralType:e,repayAmount:t,withdrawAmount:n,isSurplus:!1,insertionPlace:i,strapId:s}}}decodeWithdraw(){let e="",t="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let i=this.getMoveCallCommand("withdraw_with_strap").MoveCall;[e]=i.typeArguments;let s=i.arguments[4];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let l=i.arguments[5];if(l.$kind==="Input"){let d=this.getPureAddresses(l.Input);d.length===1&&([n]=d)}}else if(this.getMoveCallCommand("withdraw")){let i=this.getMoveCallCommand("withdraw").MoveCall;[e]=i.typeArguments;let s=i.arguments[3];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let l=i.arguments[4];if(l.$kind==="Input"){let d=this.getPureAddresses(l.Input);d.length===1&&([n]=d)}}return{txType:jt.Other,type:"withdraw",intentionData:{collateralType:e,withdrawAmount:t,insertionPlace:n,strapId:o}}}decodeClose(){let e="",t=this.getStrapId();return this.getMoveCallCommand("destroy_empty_strap")&&([e]=this.getMoveCallCommand("destroy_empty_strap").MoveCall.typeArguments),{txType:jt.Other,type:"close",intentionData:{collateralType:e,strapId:t}}}decodeSBUCKDeposit(){let t=this.getMoveCallCommand("into_balance").MoveCall.typeArguments[0],n="0",i=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];i.$kind==="Input"&&(n=this.getPureInputU64(i.Input));let s=this.isSBUCKStakeTransaction();return console.log("Decoder.decodeSBUCKDeposit",t,n,s),{txType:jt.Other,type:"sbuck-deposit",intentionData:{coinType:t,amount:n,isStake:s}}}decodeSBUCKUnstake(){let e="0",t=this.isSBUCKStakeTransaction();if(t){let d=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];d.$kind==="Input"&&(e=this.getPureInputU64(d.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let l=0;l<o.length;l++){let d=o[l];n.push("")}else{let l=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let d=0;d<l.length;d++){let I=l[d].MoveCall.arguments[2];if(I.$kind==="Input"){let{objectId:C}=this.inputs[I.Input].UnresolvedObject;n.push(C)}}}let i=this.isSBUCKWithdrawTransaction(),s={stakeProofs:n,amount:e,isStake:t,toBuck:i};return console.log("Decoder.decodeSBUCKUnstake",s),{txType:jt.Other,type:"sbuck-unstake",intentionData:s}}decodeSBUCKWithdraw(){let e="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return n.$kind==="Input"&&(e=this.getPureInputU64(n.Input)),console.log("Decoder.SBUCKWithdraw",e),{txType:jt.Other,type:"sbuck-withdraw",intentionData:{amount:e}}}decodeSBUCKClaim(){let e=[],t=this.getMoveCallModuleCommands("fountain_core","claim");for(let n=0;n<t.length;n++){let i=t[n].MoveCall.arguments[2];if(i.$kind==="Input"){let{objectId:s}=this.inputs[i.Input].UnresolvedObject;e.push(s)}}return console.log("Decoder.decodeSBUCKClaim",e),{txType:jt.Other,type:"sbuck-claim",intentionData:{stakeProofs:e}}}decodeTankDeposit(){let e="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];n.$kind==="Input"&&(e=this.getPureInputU64(n.Input));let i=this.getMoveCallModuleCommand("tank_operations","deposit").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankDeposit",i,e),{txType:jt.Other,type:"tank-deposit",intentionData:{coinType:i,amount:e}}}decodeTankWithdraw(){let e=this.getMoveCallModuleCommand("tank_operations","withdraw").MoveCall,t=e.typeArguments[0],n="0",o=e.arguments[5];return o.$kind==="Input"&&(n=this.getPureInputU64(o.Input)),console.log("Decoder.decodeTankWithdraw",t,n),{txType:jt.Other,type:"tank-withdraw",intentionData:{coinType:t,amount:n}}}decodeTankClaim(){let t=this.getMoveCallModuleCommand("tank_operations","claim").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankClaim",t),{txType:jt.Other,type:"tank-claim",intentionData:{coinType:t}}}decodeLockedClaim(){let e="",t=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let i=0;i<n.length;i++)[e]=n[i].MoveCall.typeArguments,t++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let i=0;i<o.length;i++)[e]=o[i].MoveCall.typeArguments,t++;return console.log("Decoder.decodeLockedClaim",e,t),{txType:jt.Other,type:"lock-claim",intentionData:{coinType:e,proofCount:t}}}getCoinInput(e){if(this.inputs[e].$kind!=="Object")throw new Error("not Object argument")}getStrapId(){let e;if(this.isStrapNewTransaction()?e="new":this.isLstUnlockTransaction()&&(e="locked"),!e){let t=this.getMoveCallModuleCommand("fountain","unstake");if(t){let n=t.MoveCall.arguments[2];n.$kind==="Input"&&(e=this.inputs[n.Input].UnresolvedObject.objectId)}}return e}getPureInputU64(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Tr.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Tr.vector(Tr.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as hu}from"@msafe/sui3-utils";import{Transaction as du}from"@mysten/sui/transactions";import{buildPsmTx as fu}from"bucket-protocol-sdk";import{BucketClient as pu}from"bucket-protocol-sdk";var Ot=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new pu(t,e.address)};var As=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:i}=a,s=new du,l=Ot(t,e);return await fu(l,s,n,o,i,e.address),s};var xn=class a extends S{constructor(t){super(t);this.data=t}txType=hu.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await As(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Su}from"@msafe/sui3-utils";import{Transaction as Dn}from"@mysten/sui/transactions";import{buildBorrowTx as gu,buildCloseTx as yu,buildRepayTx as bu,buildWithdrawTx as Tu}from"bucket-protocol-sdk";var Ms=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:i,insertionPlace:s,strapId:l}=a,d=new Dn,b=Ot(t,e);return await gu(b,d,n,o,i,e.address,s,l),d},Os=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:i,strapId:s}=a,l=new Dn,d=Ot(t,e);return await Tu(d,l,n,o,e.address,i,s),l},Ps=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:i,isSurplus:s,insertionPlace:l,strapId:d}=a,b=new Dn,I=Ot(t,e);return await bu(I,b,n,o,i,e.address,s,l,d),b},Rs=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:i}=a,s=new Dn,l=Ot(t,e);return await yu(l,s,n,o,i),s};var kn=class a extends S{constructor(t){super(t);this.data=t}txType=Su.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await Ms(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Iu}from"@msafe/sui3-utils";var vn=class a extends S{constructor(t){super(t);this.data=t}txType=Iu.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await Ps(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wu}from"@msafe/sui3-utils";var An=class a extends S{constructor(t){super(t);this.data=t}txType=wu.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await Os(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Cu}from"@msafe/sui3-utils";var Mn=class a extends S{constructor(t){super(t);this.data=t}txType=Cu.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await Rs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wn}from"@msafe/sui3-utils";import{Transaction as On}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as xu,buildSBUCKDepositTx as Du,buildSBUCKUnstakeTx as ku,buildSBUCKWithdrawTx as vu}from"bucket-protocol-sdk";var Bs=async(a,e,t)=>{let{coinType:n,amount:o,isStake:i}=a,s=new On,l=Ot(t,e);return await Du(l,s,n,o,e.address,i),s},Es=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:i,toBuck:s}=a,l=new On,d=Ot(t,e);return await ku(d,l,n,o,e.address,i,s),l},Ws=async(a,e,t)=>{let{amount:n}=a,o=new On,i=Ot(t,e);return await vu(i,o,n,e.address),o},Ns=async(a,e,t)=>{let{stakeProofs:n}=a,o=new On,i=Ot(t,e);return await xu(i,o,n,e.address),o};var Pn=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await Bs(this.data,n,o)}static fromData(t){return new a(t)}},Rn=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await Es(this.data,n,o)}static fromData(t){return new a(t)}},Bn=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await Ws(this.data,n,o)}static fromData(t){return new a(t)}},En=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Ns(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wr}from"@msafe/sui3-utils";import{Transaction as Ir}from"@mysten/sui/transactions";import{buildTankClaimTx as Au,buildTankDepositTx as Mu,buildTankWithdrawTx as Ou}from"bucket-protocol-sdk";var _s=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Ir,s=Ot(t,e);return await Mu(s,i,n,o,e.address),i},Ls=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Ir,s=Ot(t,e);return await Ou(s,i,n,o,e.address),i},js=async(a,e,t)=>{let{coinType:n}=a,o=new Ir,i=Ot(t,e);return await Au(i,o,n,e.address),o};import{Transaction as Pu}from"@mysten/sui/transactions";import{buildLockedClaimTx as Ru}from"bucket-protocol-sdk";var Us=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,i=new Pu,s=Ot(t,e);return await Ru(s,i,n,o,e.address),i};var Nn=class a extends S{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await _s(this.data,n,o)}static fromData(t){return new a(t)}},_n=class a extends S{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await Ls(this.data,n,o)}static fromData(t){return new a(t)}},Ln=class a extends S{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await js(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bu}from"@msafe/sui3-utils";var jn=class a extends S{constructor(t){super(t);this.data=t}txType=Bu.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await Us(this.data,n,o)}static fromData(t){return new a(t)}};var Un=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new Cn(t).decode();return{txType:Eu.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e,i;switch(e.txSubType){case"psm":i=xn.fromData(e.intentionData);break;case"borrow":i=kn.fromData(e.intentionData);break;case"withdraw":i=An.fromData(e.intentionData);break;case"repay":i=vn.fromData(e.intentionData);break;case"close":i=Mn.fromData(e.intentionData);break;case"tank-deposit":i=Nn.fromData(e.intentionData);break;case"tank-withdraw":i=_n.fromData(e.intentionData);break;case"tank-claim":i=Ln.fromData(e.intentionData);break;case"sbuck-deposit":i=Pn.fromData(e.intentionData);break;case"sbuck-unstake":i=Rn.fromData(e.intentionData);break;case"sbuck-withdraw":i=Bn.fromData(e.intentionData);break;case"sbuck-claim":i=En.fromData(e.intentionData);break;case"lock-claim":i=jn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Im}from"@msafe/sui3-utils";import{TransactionType as Fu}from"@msafe/sui3-utils";import{AggregatorClient as Wu,Env as Nu}from"@cetusprotocol/aggregator-sdk";import{CetusFarmsSDK as _u}from"@cetusprotocol/farms-sdk";import{CetusClmmSDK as Lu}from"@cetusprotocol/sui-clmm-sdk";import{CetusVaultsSDK as ju}from"@cetusprotocol/vaults-sdk";import{CetusXcetusSDK as Uu}from"@cetusprotocol/xcetus-sdk";import{SuiClient as Cr,getFullnodeUrl as qs}from"@mysten/sui/client";var Gt=(a,e)=>{let t=Lu.createSDK({env:"mainnet",sui_client:new Cr({url:qs("mainnet")})});return t.setSenderAddress(e.address),t},Ut=(a,e)=>{let t=_u.createSDK({env:"mainnet",sui_client:new Cr({url:qs("mainnet")})});return t.setSenderAddress(e.address),t},qu="https://api-sui.cetus.zone/router_v2/find_routes",Fs=(a,e)=>{let t=new Cr({url:"https://fullnode.mainnet.sui.io/"});return new Wu({endpoint:qu,signer:e.address,client:t,env:Nu.Mainnet})},Ue=(a,e)=>{let t=ju.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t},Ie=(a,e)=>{let t=Uu.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t};var Ks=async(a,e,t)=>await Gt(t,e).Pool.createPoolPayload(a),Vs=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),$s=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Hs=async(a,e,t)=>await Gt(t,e).Position.closePositionPayload(a),Xs=async(a,e,t)=>await Gt(t,e).Position.removeLiquidityPayload(a),zs=async(a,e,t)=>await Gt(t,e).Rewarder.collectRewarderPayload(a);var qn=class a extends S{constructor(t){super(t);this.data=t}txType=Fu.Other;txSubType="OpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Vs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ku}from"@msafe/sui3-utils";var Fn=class a extends S{constructor(t){super(t);this.data=t}txType=Ku.Other;txSubType="ClaimFeeAndMining";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await zs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Vu}from"@msafe/sui3-utils";var Kn=class a extends S{constructor(t){super(t);this.data=t}txType=Vu.Other;txSubType="CreatePool";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ks(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as $u}from"@msafe/sui3-utils";var Vn=class a extends S{constructor(t){super(t);this.data=t}txType=$u.Other;txSubType="DecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Xs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Hu}from"@msafe/sui3-utils";var Gs=async(a,e,t)=>await Ut(t,e).Farms.openPositionAddLiquidityStakePayload(a),Qs=async(a,e,t)=>await Ut(t,e).Farms.addLiquidityFixCoinPayload(a),Js=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),Ys=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),Zs=async(a,e,t)=>await Ut(t,e).Farms.claimFeeAndClmmReward(a),tc=async(a,e,t)=>await Ut(t,e).Farms.harvestPayload(a),ec=async(a,e,t)=>{let n=Ut(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},nc=async(a,e,t)=>await Ut(t,e).Farms.depositPayload(a),oc=async(a,e,t)=>await Ut(t,e).Farms.withdrawPayload(a);var $n=class a extends S{constructor(t){super(t);this.data=t}txType=Hu.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Gs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Xu}from"@msafe/sui3-utils";var Hn=class a extends S{constructor(t){super(t);this.data=t}txType=Xu.Other;txSubType="FarmingBatchHarvest";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ec(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as zu}from"@msafe/sui3-utils";var Xn=class a extends S{constructor(t){super(t);this.data=t}txType=zu.Other;txSubType="FarmingClaimFeeAndReward";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Zs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Gu}from"@msafe/sui3-utils";var zn=class a extends S{constructor(t){super(t);this.data=t}txType=Gu.Other;txSubType="FarmingDecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Js(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Qu}from"@msafe/sui3-utils";var Gn=class a extends S{constructor(t){super(t);this.data=t}txType=Qu.Other;txSubType="FarmingHarvest";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await tc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ju}from"@msafe/sui3-utils";var Qn=class a extends S{constructor(t){super(t);this.data=t}txType=Ju.Other;txSubType="FarmingIncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Qs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Yu}from"@msafe/sui3-utils";var Jn=class a extends S{constructor(t){super(t);this.data=t}txType=Yu.Other;txSubType="FarmingRemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ys(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Zu}from"@msafe/sui3-utils";var Yn=class a extends S{constructor(t){super(t);this.data=t}txType=Zu.Other;txSubType="FarmingStake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await nc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as tm}from"@msafe/sui3-utils";var Zn=class a extends S{constructor(t){super(t);this.data=t}txType=tm.Other;txSubType="FarmingUnstake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await oc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as em}from"@msafe/sui3-utils";var to=class a extends S{constructor(t){super(t);this.data=t}txType=em.Other;txSubType="IncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await $s(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as sm}from"@msafe/sui3-utils";import{Transaction as eo}from"@mysten/sui/transactions";import nm,{vaults_mainnet as om}from"haedal-vault-sdk";var am=async(a,e,t)=>{let n=Ue(t,e),o=new eo;return o.setSender(e.address),n.Vest.buildRedeemPayload(a.params,o),o},im=async(a,e,t)=>{let n=new nm(om);n.senderAddress=e.address;let o=new eo;return o.setSender(e.address),await n?.Vest.buildRedeemPayload(a.params,o),o},ac=(a,e,t)=>{let n=Gt(t,e),o=new eo;return n?.Vest.buildRedeemPayload(a.params,o),o},rm=async(a,e,t)=>{let n=Gt(t,e),o=Ut(t,e),i=new eo,s=await o.Farms.withdrawReturnPayload(a.withdrawParams,i);return n.Vest.buildRedeemPayload(a.redeemParms.map(l=>({...l,clmm_position_id:s})),i),o.Farms.depositPayload({...a.depositParams,clmm_position_id:s},i),i},ic=async(a,e,t)=>a.type==="clmm"?ac(a,e,t):a.type==="farms"?rm(a,e,t):a.type==="vaults"?am(a,e,t):a.type==="haedalVaults"?im(a,e,t):ac(a,e,t);var no=class a extends S{constructor(t){super(t);this.data=t}txType=sm.Other;txSubType="PosVestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ic(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as cm}from"@msafe/sui3-utils";var oo=class a extends S{constructor(t){super(t);this.data=t}txType=cm.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Hs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as mm}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as lm}from"@cetusprotocol/aggregator-sdk";import{Transaction as um}from"@mysten/sui/transactions";var rc=async(a,e,t)=>{let n=Fs(t,e),o=new um;return await n.fastRouterSwap({...a,router:lm(a.router),txb:o}),o};var ao=class a extends S{constructor(t){super(t);this.data=t}txType=mm.Other;txSubType="AggregatorSwap";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await rc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as pm}from"@msafe/sui3-utils";import{Transaction as sc}from"@mysten/sui/transactions";var cc=async(a,e,t)=>{let n=Ue(t,e),o=new sc;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},lc=async(a,e,t)=>{let n=Ue(t,e),o=new sc;return await n.Vaults.withdraw(a,o),o};var io=class a extends S{constructor(t){super(t);this.data=t}txType=pm.Other;txSubType="AddVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await cc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as dm}from"@msafe/sui3-utils";var ro=class a extends S{constructor(t){super(t);this.data=t}txType=dm.Other;txSubType="RemoveVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await lc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as hm}from"@msafe/sui3-utils";import{Transaction as fm}from"@mysten/sui/transactions";var uc={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},mc=async(a,e,t)=>{console.log("getVestingRedeemTxb txbParams: ",a),console.log("getVestingRedeemTxb account: ",e),console.log("getVestingRedeemTxb network: ",t);let{pool:n,nftId:o,periods:i,CLOCK_ADDRESS:s}=a,l=new fm;return i.forEach(d=>{l.moveCall({target:`${uc.published_at}::router::redeem`,typeArguments:[uc.cetus_coin_type],arguments:[l.object(n),l.object(o),l.pure(d),l.object(s)]})}),l};var so=class a extends S{constructor(t){super(t);this.data=t}txType=hm.Other;txSubType="VestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await mc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as gm}from"@msafe/sui3-utils";var pc=async(a,e,t)=>await Ie(t,e).XCetusModule.convertPayload(a),dc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemLockPayload(a),fc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),hc=async(a,e,t)=>await Ie(t,e).XCetusModule.cancelRedeemPayload(a),gc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemPayload(a);var co=class a extends S{constructor(t){super(t);this.data=t}txType=gm.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await hc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ym}from"@msafe/sui3-utils";var lo=class a extends S{constructor(t){super(t);this.data=t}txType=ym.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await fc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as bm}from"@msafe/sui3-utils";var uo=class a extends S{constructor(t){super(t);this.data=t}txType=bm.Other;txSubType="xCETUSConvert";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await pc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Tm}from"@msafe/sui3-utils";var mo=class a extends S{constructor(t){super(t);this.data=t}txType=Tm.Other;txSubType="xCETUSRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await gc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Sm}from"@msafe/sui3-utils";var po=class a extends S{constructor(t){super(t);this.data=t}txType=Sm.Other;txSubType="xCETUSRedeemLock";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await dc(i,n,o)}static fromData(t){return new a(t)}};var fo=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:Im.Other,txSubType:n,intentionData:{txbParams:{...t},action:n}}}async build(e){let{suiClient:t,account:n,network:o}=e,i;switch(e.txSubType){case"OpenAndAddLiquidity":i=qn.fromData(e.intentionData);break;case"IncreaseLiquidity":i=to.fromData(e.intentionData);break;case"DecreaseLiquidity":i=Vn.fromData(e.intentionData);break;case"RemoveLiquidity":i=oo.fromData(e.intentionData);break;case"ClaimFeeAndMining":i=Fn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":i=$n.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":i=Qn.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":i=zn.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":i=Jn.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":i=Xn.fromData(e.intentionData);break;case"FarmingHarvest":i=Gn.fromData(e.intentionData);break;case"FarmingBatchHarvest":i=Hn.fromData(e.intentionData);break;case"FarmingStake":i=Yn.fromData(e.intentionData);break;case"FarmingUnstake":i=Zn.fromData(e.intentionData);break;case"xCETUSConvert":i=uo.fromData(e.intentionData);break;case"xCETUSRedeemLock":i=po.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":i=lo.fromData(e.intentionData);break;case"xCETUSCancelRedeem":i=co.fromData(e.intentionData);break;case"xCETUSRedeem":i=mo.fromData(e.intentionData);break;case"VestingRedeem":i=so.fromData(e.intentionData);break;case"AggregatorSwap":i=ao.fromData(e.intentionData);break;case"AddVaultsPosition":i=io.fromData(e.intentionData);break;case"RemoveVaultsPosition":i=ro.fromData(e.intentionData);break;case"PosVestingRedeem":i=no.fromData(e.intentionData);break;case"CreatePool":i=Kn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Tp}from"@msafe/sui3-utils";import wm from"sort-keys-recursive";var Nt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(wm(this.data))}};import{getFullnodeUrl as ho}from"@mysten/sui.js/client";var xr={};ks(xr,{contractId:()=>Dm,default:()=>Om,feeObjId:()=>Am,roleObjId:()=>km,status:()=>xm,transaction:()=>Cm,upgradeCapObjId:()=>Mm,vaultObjId:()=>vm});var Cm="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",xm="success",Dm="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",km="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",vm="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Am="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Mm="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Om={transaction:Cm,status:xm,contractId:Dm,roleObjId:km,vaultObjId:vm,feeObjId:Am,upgradeCapObjId:Mm};var Dr={};ks(Dr,{contractId:()=>Bm,default:()=>Lm,feeObjId:()=>Nm,roleObjId:()=>Em,status:()=>Rm,transaction:()=>Pm,upgradeCapObjId:()=>_m,vaultObjId:()=>Wm});var Pm="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Rm="success",Bm="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Em="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Wm="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Nm="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",_m="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Lm={transaction:Pm,status:Rm,contractId:Bm,roleObjId:Em,vaultObjId:Wm,feeObjId:Nm,upgradeCapObjId:_m};var jm=ho("testnet"),Um=ho("testnet"),qm=ho("mainnet"),Fm=ho("mainnet"),Km="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Vm="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",$m="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",Hm="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",yc=xr,bc=Dr,Xm=new Map([["dev",{env:"dev",rpc:{url:jm},backend:{url:Km},contract:yc}],["stg",{env:"stg",rpc:{url:Um},backend:{url:Vm},contract:yc}],["prev",{env:"prev",rpc:{url:qm},backend:{url:$m},contract:bc}],["prod",{env:"prod",rpc:{url:Fm},backend:{url:Hm},contract:bc}]]);function Tc(a,e){let t=Xm.get(a);if(!t)throw new Error(`Env not supported: ${a}`);return e&&e.rpc&&(t.rpc=e.rpc),e&&e.backend&&(t.backend=e.backend),e&&e.contract&&(t.contract=e.contract),t}import{SuiClient as Gm}from"@mysten/sui.js/client";var _=class extends Error{mpayErrorCode;context;constructor(e,t,n={}){let{cause:o,context:i}=n;o?super(`[MPay] ${t}: ${o}`):super(`[MPay] ${t}`),this.mpayErrorCode=e,this.context=i}};var go=class extends _{constructor(){super(11,"Backend is not specified")}};var yo=class extends _{constructor(){super(1,"Wallet not connected")}};import Ce,{AxiosError as zm}from"axios";var we=class extends _{constructor(e,t){super(10,e,{context:t})}};var bo=class a{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof zm)throw new we(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new we(e.data.code)}throw new we(e.status.toString())}async getIncomingStreams(e,t){let n=await Ce.post(`${this.apiURL}/stream`,{recipient:e,...t});return a.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await Ce.post(`${this.apiURL}/stream`,{sender:e,...t});return a.parseResponseData(n)}async getStreamHistory(e){let t=await Ce.post(`${this.apiURL}/stream-events`,e),n=a.parseResponseData(t);return n.data.forEach(o=>{let i=o;return i.data.type==="create_stream"?i.data.balance=BigInt(i.data.balance):i.data.type==="cancel_stream"?i.data.withdrawAmount=BigInt(i.data.withdrawAmount):i.data.type==="claim"||i.data.type==="auto_claim"?i.data.claimAmount=BigInt(i.data.claimAmount):i.data.type==="set_auto_claim"&&(i.data.enabled=!!i.data.enabled),i.createdAt=new Date(i.createdAt),i}),n}async getAllCoinTypes(e){let t=await Ce.post(`${this.apiURL}/stream-info`,{address:e});return a.parseResponseData(t)}async getAllRecipients(e,t){let n=await Ce.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return a.parseResponseData(n)}async getAllSenders(e,t){let n=await Ce.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return a.parseResponseData(n)}};var xe=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new Gm({url:e.rpc.url}),e.backend&&(this._backend=new bo(e.backend.url))}static new(e,t){let n=Tc(e,t);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new go;return this._backend}set backend(e){this._backend=e}connectWallet(e){this.signer=e}disconnect(){this.signer=void 0}get wallet(){if(!this.signer)throw new yo;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as gp,normalizeStructTag as yp,normalizeSuiAddress as Kc}from"@mysten/sui.js/utils";import{TransactionBlock as xo}from"@mysten/sui.js/transactions";import{TransactionBlock as Ac}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Mc,normalizeStructTag as Zm}from"@mysten/sui.js/utils";var kr=50n,To=10000n,Sc=25n,vr=100000000n;var Qt=class{constructor(e){this.object=e}moveArg(e){return e.object(this.object)}},qe=class{constructor(e){this.objects=e}moveArgs(e){return e.makeMoveVec({objects:this.objects.map(t=>e.object(t))})}},re=class a{constructor(e){this.result=e;return new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(t,n){if(n in t)return Reflect.get(t,n);let o=s=>new a(t.result[s]);if(n===Symbol.iterator)return function*(){let s=0;for(;;)yield o(s),s++};if(typeof n=="symbol")return;let i=parseInt(n,10);if(!(Number.isNaN(i)||i<0))return o(i)}})}moveArg(){return this.result}};import{Buffer as Ic}from"buffer";import{normalizeSuiAddress as Qm}from"@mysten/sui.js/utils";var Fe=class extends _{constructor(e,t){super(3,e,{context:t})}};var So=class{constructor(e){this.results=e}callResult(e){return this.results.results[e]}returnValue(e,t){return e.returnValues[t]}getValue(e=0,t=0){let n=this.callResult(e);return this.returnValue(n,t)}getAddress(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="address")throw new Fe("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return Qm(Ic.from(n).toString("hex"))}getU64(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="u64")throw new Fe("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Ic.from(n).readBigInt64LE()}};import{bcs as Cc}from"@mysten/sui.js/bcs";var $=class extends _{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var xc={groupId:"string",name:"string"},Jm=64;function Dc(a){return kc(a),Cc.ser(xc,a).toString("base64")}function Ke(a){let e=Cc.de(xc,a,"base64");return kc(e),e}function kc(a){if(!wc(a.name))throw new $("Invalid metadata: Name contains unknown character");if(!wc(a.groupId))throw new $("Invalid metadata: Group ID contains unknown character");if(a.name.length>Jm)throw new $("Invalid metadata: Name exceed max length 64")}function wc(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Io}from"@mysten/sui.js/utils";function wo(a,e){return Io(a)===Io(e)}function se(a,e){return Io(a)===Io(e)}var Co="txn.gas";import{nanoid as Ym}from"nanoid";function vc(){return Ym()}var he=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:Dc({name:e.name,groupId:vc()}),coinType:Zm(e.coinType),recipients:e.recipients.map(t=>({address:t.address,cliffAmount:t.cliffAmount,amountPerEpoch:t.amountPerStep})),epochInterval:e.interval,numberEpoch:e.steps,startTime:e.startTimeMs,cancelable:e.cancelable}}async buildCreateStreamTransactionBlock(e){let t=new Ac,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),i=await this.wallet.requestCoins(o),s=await this.addMergeCoins(t,i[0]),l;o.length>1?l=await this.addMergeCoins(t,i[1]):l=s;for(let d=0;d<e.recipients.length;d++){let b=e.recipients[d],I=this.amountForRecipient(b,e.numberEpoch),C=this.getStreamFeeLocal(I),[x]=t.splitCoins(s,[t.pure(I+C,"u64")]),[D]=t.splitCoins(l,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new re(x),flatFeeCoin:new re(D),metadata:e.metadata,recipient:b.address,timeStart:e.startTime,cliff:b.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:b.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return t}calculateCreateStreamFees(e){let t=a.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(t)}feeParams(){return{createFeePercent:{numerator:kr,denominator:To},claimFeePercent:{numerator:Sc,denominator:To},flatFeePerStream:vr}}async addMergeCoins(e,t){let n;return t.mergedCoins&&t.mergedCoins.length?(e.mergeCoins(e.object(t.primaryCoin),t.mergedCoins.map(o=>e.object(o))),n=e.object(t.primaryCoin)):t.primaryCoin===Co?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return wo(n,Mc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:Mc,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,i)=>{let s=this.amountForRecipient(i,e.numberEpoch),l=this.getStreamFeeLocal(s);return{totalAmount:o.totalAmount+s,streamFeeAmount:o.streamFeeAmount+l}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(e.recipients.length)*this.flatSuiFee,...t}}amountForRecipient(e,t){return BigInt(e.amountPerEpoch)*BigInt(t)+BigInt(e.cliffAmount)}get flatSuiFee(){return vr}getStreamFeeLocal(e){return e*kr/To}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new Ac,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new So(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Pc}from"@mysten/sui.js/transactions";var Oc="0x0000000000000000000000000000000000000000000000000000000000000006";var De=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.add(Pc.MoveCall({target:n,arguments:t.arguments.map(o=>o instanceof qe?o.moveArgs(e):o instanceof Qt?o.moveArg(e):o instanceof re?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,n=[],o=[]){e.add(Pc.MoveCall({target:t,arguments:n.map(i=>i instanceof qe?i.moveArgs(e):i instanceof Qt?i.moveArg(e):i instanceof re?i.moveArg():e.pure(i)),typeArguments:o}))}makeObject(e){return typeof e=="string"?new Qt(e):e}vaultObject(){return new Qt(this.config.vaultObjId)}roleObject(){return new Qt(this.config.roleObjId)}feeObject(){return new Qt(this.config.feeObjId)}clockObject(){return new Qt(Oc)}};var ke=class a extends De{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_fee,arguments:[o,i,n],typeArgs:[]})}setStreamingFlatFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_flat_fee,arguments:[o,i,n],typeArgs:[]})}setClaimFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_claim_fee,arguments:[o,i,n],typeArgs:[]})}streamingFee(t,n){let o=this.feeObject();return this.addContractCall(t,{method:a.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(t,n){return this.addContractCall(t,{method:a.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(t){return this.addContractCall(t,{method:a.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var Jt=class a extends De{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(t,n){let o=this.feeObject(),i=this.vaultObject(),s=this.makeObject(n.paymentCoin),l=this.makeObject(n.flatFeeCoin),d=this.clockObject();return this.addContractCall(t,{method:a.MethodName.create_stream,arguments:[o,i,s,l,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,d],typeArgs:[n.coinType]})}setAutoClaim(t,n){let o=this.makeObject(n.streamId);return this.addContractCall(t,{method:a.MethodName.set_auto_claim,arguments:[o,n.enabled],typeArgs:[n.coinType]})}cancelStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.cancel_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStreamByProxy(t,n){let o=this.makeObject(n.streamId),i=this.vaultObject(),s=this.feeObject(),l=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,i,s,l],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream_by_proxy}`}};var ve=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new ke(t,e),this.streamContract=new Jt(t,e)}feeContract;streamContract;async createStreams(e){let t=he.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new he(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,n){let o=new xo;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new xo;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new xo;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new xo;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as Ar,SUI_TYPE_ARG as tp}from"@mysten/sui.js/utils";import{Duration as Rc}from"luxon";var Do=class extends _{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var ep=1e3,ko=class{constructor(e){this.globals=e;this.coinMetaHelper=new Mr(e.suiClient),this.createStreamHelper=new ve(e).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new Do(e.effects?.status.status,e.effects?.status.error);return e.objectChanges.filter(t=>t.type==="created"&&t.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(t=>t.objectId)}calculateCreateStreamFees(e){return this.createStreamHelper.calculateCreateStreamFees(e)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(e){if(e.steps===0n)throw new $("Invalid stream steps: 0");let t=e.cliff?e.cliff:{numerator:0n,denominator:100n},n=e.totalAmount*t.numerator/t.denominator,o=(e.totalAmount-n)/e.steps,s={realTotalAmount:o*e.steps+n,cliffAmount:n,amountPerStep:o};return this.validateStreamAmount(s,e.totalAmount),s}calculateTimelineByInterval(e){if(e.steps===0n)throw new $("Invalid stream steps: 0");let t=e.timeStart.plus(e.interval.toMillis()*Number(e.steps)),n={timeStart:e.timeStart,timeEnd:t,interval:e.interval,steps:e.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(e){if(e.steps===0n)throw new $("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(Rc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:Rc.fromMillis(Number(t)),steps:e.steps};return this.validateTimeline(o),o}async getBalance(e,t){let n=await this.globals.suiClient.getBalance({owner:e,coinType:t}),o=await this.getCoinMeta(t);return{...n,coinType:Ar(n.coinType),coinMeta:o}}async getAllBalance(e){let t=await this.globals.suiClient.getAllBalances({owner:e}),n=await Promise.all(t.map(o=>this.getCoinMeta(o.coinType)));return t.map((o,i)=>({...o,coinType:Ar(o.coinType),coinMeta:n[i]}))}async getCoinMeta(e){return this.coinMetaHelper.getCoinMeta(e)}async simulateTransactionBlock(e){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:e,sender:await this.globals.wallet.address()})}validateStreamAmount(e,t){if(e.amountPerStep===0n)throw new $("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new $("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<ep)throw new $("Interval shall be at least 1 second","interval",e.interval)}},Mr=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(e){let t=Ar(e||tp);if(this.coinMetaReg.has(t))return this.coinMetaReg.get(t);let n=await this.queryCoinMeta(t);return n&&this.coinMetaReg.set(t,n),n}async queryCoinMeta(e){return await this.suiClient.getCoinMetadata({coinType:e})||void 0}};import{normalizeStructTag as Wc,normalizeSuiAddress as Ro}from"@mysten/sui.js/utils";import{DateTime as Nc}from"luxon";import{TransactionBlock as Oo}from"@mysten/sui.js/transactions";import{normalizeStructTag as Ec,parseStructTag as ap}from"@mysten/sui.js/utils";import{DateTime as ip}from"luxon";var vo=class extends _{constructor(){super(7,"Connected wallet is not creator")}};var Ve=class extends _{constructor(){super(8,"Connected wallet is not recipient")}};var $e=class extends _{constructor(e,t){super(6,e,{context:t})}};var vt=class extends _{constructor(e,t={}){super(0,e,t)}};var Ao=class extends _{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as np,Duration as op}from"luxon";var Bc=(1n<<64n)-1n,Mo=1e3;function Or(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Mo);return np.fromMillis(t*Mo)}function Pr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Mo);return op.fromMillis(t*Mo)}var ce=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Jt(e.envConfig.contract,e)}streamContract;type="Stream";static async new(e,t){let n=await a.fetchStreamData(e,t);return new a(e,t,n)}static fromObjectData(e,t,n){let o=a.parseRawStreamData(t,n);return new a(e,t,o)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await a.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new vt("Object Id does not align");this.rawData=a.parseRawStreamData(this.streamId,e)}async historyEvents(e){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:e})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new vo;let e=new Oo;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Ve;let e=new Oo;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new Ve;let t=new Oo;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new Oo;return this.streamContract.claimStreamByProxy(e,{streamId:this.streamId,coinType:this.coinType}),e}get wallet(){return this.globals.wallet}get client(){return this.globals.suiClient}get coinType(){return Ec(this.rawData.coinType)}get progress(){return{status:this.streamStatus,total:this.totalAmount,streamed:this.streamedAmount,claimed:this.claimedAmount,claimable:this.claimable,canceled:this.canceledAmount}}get balance(){return this.rawData.balance}get autoClaim(){return this.rawData.autoClaim}get amountPerEpoch(){return this.rawData.config.amountPerEpoch}get cancelable(){return this.rawData.config.cancelable}get cliff(){return this.rawData.config.cliff}get creator(){return this.rawData.config.creator}get interval(){return Pr(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return Ke(e).groupId}get name(){let{metadata:e}=this.rawData.config;return Ke(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return Or(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return Pr(t)}get timeEnd(){return this.timeStart.plus(this.duration)}get totalSteps(){return this.rawData.config.totalEpoch}get claimable(){return this.streamedAmount-this.claimedAmount}get nextReleaseDate(){return this.currentEpoch===-1n?this.timeStart:this.currentEpoch>=this.totalSteps||this.isCanceled?null:Or((this.currentEpoch+1n)*this.rawData.config.epochInterval+this.rawData.config.timeStart)}get nextReleaseAmount(){return this.currentEpoch===-1n?this.cliff:this.currentEpoch>=this.totalSteps||this.isCanceled?null:this.amountPerEpoch}get streamStatus(){let e=this.rawData.status.status;return e===16?"CANCELED":e===17?"SETTLED":e===1?"COMPLETED":this.currentEpoch>=this.totalSteps?"STREAMED":"STREAMING"}get streamedAmount(){return this.currentEpoch===-1n?0n:this.isCanceled?this.rawData.status.epochCanceled*this.amountPerEpoch+this.cliff:this.currentEpoch*this.amountPerEpoch+this.cliff}get claimedAmount(){return this.rawData.status.epochClaimed===Bc?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=ip.now().toMillis(),t=this.timeStart.toMillis();if(e<t)return-1n;let n=Math.floor((e-t)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let e=this.rawData.config;return e.amountPerEpoch*e.totalEpoch+e.cliff}get isCanceled(){let e=this.rawData.status.status;return e===16||e===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(e,t){let n=await e.suiClient.getObject({id:t,options:{showContent:!0,showType:!0}});return a.parseRawStreamData(t,n)}static parseRawStreamData(e,t){if(t.error)throw t.error.code==="notExists"?new Ao(e):new $e(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new $e("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=ap(n.type),i=Ec(o[0]),s=n.fields,l=s.config.fields,d=s.status.fields;return{coinType:i,autoClaim:s.auto_claim,balance:BigInt(s.balance.fields.balance),config:{amountPerEpoch:BigInt(l.amount_per_epoch),cancelable:l.cancelable,cliff:BigInt(l.cliff),creator:l.creator,epochInterval:BigInt(l.epoch_interval),metadata:l.metadata,recipient:l.recipient,timeStart:BigInt(l.time_start),totalEpoch:BigInt(l.total_epoch)},status:{status:d.status,epochCanceled:BigInt(d.epoch_canceled),epochClaimed:BigInt(d.epoch_claimed)}}}};var Ae=class extends _{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function Br(a){let e=[];for(;await a.hasNext();){let t=await a.next();e.push(t)}return e&&Array.isArray(e[0])?e.flat(1):e}var Rr=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},Me=class{constructor(e){this.requester=e;this.pager=new Rr(e),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};var rp=25;async function Wr(a,e,t){let n=new He(e),o=new Xe(a,n,t);return await Br(o)}var He=class{constructor(e){this.ids=e;this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},Xe=class extends Me{constructor(t,n,o){super(new Er(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}},Er=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||rp,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let e=[];for(;e.length<this.pageSize&&await this.stringIter.hasNext();){let i=await this.stringIter.next();i&&e.push(i)}let t=await this.suiClient.multiGetObjects({ids:e,options:this.objectOptions}),n;if(this.filter){let{filter:o}=this;n=t.filter(i=>o?.(i))}else n=t;return{data:n,hasNext:await this.stringIter.hasNext()}}};var Po=class a{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new Ae("stream size 0");let n=t.map(i=>i.groupId);if(new Set(n).size!==1)throw new $("Stream does not have same group ID")}type="StreamGroup";static async new(e,t){let n=await Wr(e.suiClient,t);return n.forEach(o=>{if(!o)throw new vt("stream group object data undefined")}),a.newFromObjectResponse(e,t,n)}static async newFromObjectResponse(e,t,n){let o=await a.parseGroupStreams(e,t,n);return new a(e,o)}static checkStreamGroup(e){let t=e.map(i=>i.groupCommonInfo),n=t[0],o=!0;return t.forEach(i=>{sp(n,i)||(o=!1)}),o}async refresh(){let e=await Wr(this.globals.suiClient,this.streams.map(t=>t.streamId));this.streams.forEach((t,n)=>{t.refreshWithData(e[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(e=>e.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((e,t)=>e+t.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((e,t)=>e+t.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((e,t)=>t.nextReleaseAmount===null?e:e+t.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((e,t)=>e+t.totalAmount,0n),streamed:this.streams.reduce((e,t)=>e+t.streamedAmount,0n),claimed:this.streams.reduce((e,t)=>e+t.claimedAmount,0n),claimable:this.streams.reduce((e,t)=>e+t.claimable,0n),canceled:this.streams.reduce((e,t)=>e+t.canceledAmount,0n)}}async historyEvents(e){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:e})}static async parseGroupStreams(e,t,n){let o=n.map((i,s)=>ce.fromObjectData(e,t[s],i)).filter(i=>!!i);if(new Set(o.map(i=>i.groupId)).size!==1)throw new Ae("Not same group ID");if(!this.checkStreamGroup(o))throw new Ae("Not same stream settings");return o}};function sp(a,e){return a.name===e.name&&a.groupId===e.groupId&&a.creator===e.creator&&a.start.toMillis()===e.start.toMillis()&&a.interval.toMillis()===e.interval.toMillis()&&a.steps===e.steps&&a.cancelable===e.cancelable}var ze=class a{constructor(e,t){this.it=e;this.pageSize=t}static async newIncoming(e){let t=await Bo.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Bo.newOutgoing(e);return new a(t,e.pageSize)}async hasNext(){return this.it.hasNext()}async next(){let e=[];for(;e.length<this.pageSize&&await this.it.hasNext();)e.push(await this.it.next());return e}},Bo=class a{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let t=await Eo.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await Eo.newOutgoingQuery(e);return new a(t)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let t=await this.requester.doNextRequest();if(t===null)throw new vt("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new vt("No more results");return e}},Eo=class a{constructor(e,t,n,o){this.globals=e;this.recipient=t;this.groupRefs=n;this.query=o;this.current=0;let i=new He(n.flat().map(s=>s.streamId));this.objectIter=new Xe(e.suiClient,i)}current=0;objectIter;static async newIncomingQuery(e){let t=pp(e.query),n=await e.globals.walletAddress(),i=(await e.globals.backend.getIncomingStreams(n,t)).filter(l=>Ro(l.recipient)===Ro(n)),s=_c(i);return new a(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=dp(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),i=_c(o);return new a(e.globals,n,i,e.query)}async doNextRequest(){if(this.current>=this.groupRefs.length)return null;let e=this.groupRefs[this.current];if(e.length===1){let t=await up(this.globals,e[0].streamId,this.objectIter);return this.current++,Lc(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await mp(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,lp(t,this.query)?t:this.doNextRequest()}throw new vt("Stream group with no stream")}};function _c(a){let e=new Map;return a.forEach(t=>{let n=e.get(t.groupId);n?(n.push(t),e.set(t.groupId,n)):e.set(t.groupId,[t])}),Array.from(e.values()).sort((t,n)=>Nc.fromISO(n[0].createDate).toMillis()-Nc.fromISO(t[0].createDate).toMillis())}function Lc(a,e){if(e===void 0)return!0;let t=cp(a,e.status);if(e&&"claimable"in e&&e.claimable!==void 0){let n=e.claimable?a.progress.claimable!==0n:a.progress.claimable===0n;return t&&n}return t}function cp(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function lp(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{Lc(n,e)&&(t=!0)}),t}async function up(a,e,t){let n=await jc(t,e);return ce.fromObjectData(a,e,n)}async function mp(a,e,t){let n=[];for(;n.length<e.length;){let o=await jc(t,e[n.length]);n.push(o)}return Po.newFromObjectResponse(a,e,n)}async function jc(a,e){if(!await a.hasNext())throw new vt("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new vt("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new vt("stream id not aligned");return t}function pp(a){return{status:Nr(a?.status),coinType:Uc(a?.coinType),sender:qc(a?.sender)}}function dp(a){return{status:Nr(a?.status),coinType:Uc(a?.coinType),recipient:qc(a?.recipient)}}function Nr(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=Nr(t);return!e||e===n?n:"all"},void 0):fp(a)}function fp(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new $("Unknown stream filtered status")}}function Uc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Wc(e)):void 0:Wc(a)}function qc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Ro(e)):void 0:Ro(a)}var Wo=class extends _{constructor(t,n,o){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:n,gotAmount:o}});this.coinType=t;this.requestAmount=n;this.gotAmount=o}};var hp=25;async function Fc(a,e,t,n="0x2::sui::SUI",o=hp){let i=new _r(a,e,n,o),s=BigInt(0),l=[];for(;await i.hasNext()&&s<t;){let d=await i.next();d&&(l.push(d),s+=BigInt(d.balance))}if(s<t)throw new Wo(n,t,s);return l}var _r=class extends Me{constructor(t,n,o,i){super(new Lr(t,n,o,i));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=i}},Lr=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new vt("Invalid reqPageSize")}nextCursor;async doNextRequest(){let e=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=e.nextCursor,{data:e.data,hasNext:e.hasNextPage}}};var jr=class{constructor(e){this.msafe=e}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},No=class{constructor(e){this.account=e}async address(){return this.account.address}},Ur=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(e){return Promise.all(e.map(t=>this.requestCoin(t)))}async requestCoin(e){if(wo(e.coinType,gp))return{primaryCoin:Co};if(e.amount<=0)throw new $("Invalid coin request","coinAmount",e.amount);let t=await Fc(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new vt("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},_o=class{globals;helper;constructor(e,t){this.globals=xe.new(e,t),this.helper=new ko(this.globals)}connectSingleWallet(e){let t=new Ur(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new jr(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return ce.new(this.globals,e)}async getIncomingStreams(e,t=10){return ze.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return ze.newOutgoing({globals:this.globals,query:e,pageSize:t})}async getCoinTypesForStreamFilter(){let e=await this.wallet.address();return(await this.globals.backend.getAllCoinTypes(e)).map(n=>yp(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Kc(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Kc(o))}get wallet(){return this.globals.wallet}builder(){return new ve(this.globals)}};var Ft=class extends Nt{application="mpay";getClient(e,t){let n=new _o(e==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new No(t)),n}};var Ge=class extends Ft{constructor(t){super(t);this.data=t}txType=Tp.Stream;txSubType="Cancel";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).cancel()}};import{TransactionType as Sp}from"@msafe/sui3-utils";var Qe=class extends Ft{constructor(t){super(t);this.data=t}txType=Sp.Stream;txSubType="ClaimByProxy";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as Ip}from"@msafe/sui3-utils";var Je=class extends Ft{constructor(t){super(t);this.data=t}txType=Ip.Stream;txSubType="Claim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claim()}};import{TransactionType as wp}from"@msafe/sui3-utils";var Ye=class extends Ft{constructor(t){super(t);this.data=t}txType=wp.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as Vc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Cp,normalizeSuiAddress as Ze}from"@mysten/sui.js/utils";var Oe=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return BigInt(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return Ze(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Vc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return Ze(e.value.Object.ImmOrOwned.objectId)}return Ze(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Ze(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Ze(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Vc.de(t,new Uint8Array(n))}typeArg(e){return Cp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var Lo=class{constructor(e,t){this.globals=e;this.txb=t}decode(){let e=this.decodeCreateStreamInfo(),t=this.createStreamHelper().calculateCreateStreamFees(e);return{type:"CreateStream",info:e,fees:t}}decodeCreateStreamInfo(){let t=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(t)}createStreamTransactions(){let e=this.transactions.filter(t=>t.kind==="MoveCall"&&se(t.target,this.contract.createStreamTarget));if(e.length===0)throw new vt("No create stream transactions");return e.map(t=>new Oe(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=Ke(t),i=e.decodeInputAddress(5),s=e.decodeInputU64(6),l=e.decodeInputU64(7),d=e.decodeInputU64(8),b=e.decodeInputU64(9),I=e.decodeInputU64(10),C=e.decodeInputBool(11),x=e.typeArg(0);return{name:n,groupId:o,recipient:i,timeStart:s,cliff:l,epochInterval:d,totalEpoch:b,amountPerEpoch:I,cancelable:C,coinType:x}}aggregateGroupStreamInfo(e){if(new Set(e.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new $("Stream group not have common info");let n=e.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:e[0].name,coinType:e[0].coinType,recipients:n,interval:e[0].epochInterval,steps:e[0].totalEpoch,startTimeMs:e[0].timeStart,cancelable:e[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(e=>e.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new Jt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new ke(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new he(this.globals,this.feeContract,this.contract)}getInputArg(e){if(e.kind!=="Input")throw new Error("not input type");return"value"in e?e:this.txb.blockData.inputs[e.index]}};var jo=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Jt(e.envConfig.contract,e)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(t=>t.kind==="MoveCall"&&se(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Lo(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:e,enabled:t}}decodeClaimTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Claim",streamId:e}}decodeClaimByProxyTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"ClaimByProxy",streamId:e}}decodeCancelStreamTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Cancel",streamId:e}}get helper(){let e=this.transactions[0];return new Oe(e,this.txb)}};import{TransactionType as xp}from"@msafe/sui3-utils";var tn=class extends Ft{constructor(t){super(t);this.data=t}txType=xp.Stream;txSubType="SetAutoClaim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var Uo=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(e){let{network:t,transactionBlock:n}=e,o=xe.new(t==="sui:mainnet"?"prod":"dev"),s=new jo(o,n).decode(),l;switch(s.type){case"CreateStream":l=new Ye(s.info);break;case"SetAutoClaim":l=new tn({streamId:s.streamId,enabled:s.enabled});break;case"Claim":l=new Je({streamId:s.streamId});break;case"ClaimByProxy":l=new Qe({streamId:s.streamId});break;case"Cancel":l=new Ge({streamId:s.streamId});break;default:throw new Error(`Unknown transaction type: ${s}`)}return{txType:l.txType,txSubType:l.txSubType,intentionData:l.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new Ye(t);break;case"Claim":n=new Je(t);break;case"ClaimByProxy":n=new Qe(t);break;case"SetAutoClaim":n=new tn(t);break;case"Cancel":n=new Ge(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as vp,TransactionSubTypes as $c}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Dp}from"@msafe/sui3-utils";var qo=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return Dp(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as kp}from"@msafe/sui3-utils";var Fo=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return kp(n,this.data,o.address)}static fromData(t){return new a(t)}};var Ko=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=vp}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case $c.assets.coin.send:o=qo.fromData(e.intentionData);break;case $c.assets.object.send:o=Fo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Up}from"@msafe/sui3-utils";var Hc=!1,en={ProtocolPackage:"0xee0041239b89564ce870a7dec5ddc5d114367ab94a1137e90aa0633cb76518e0",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function qr(){if(!Hc)try{let a=await fetch("https://open-api.naviprotocol.io/api/msafe").then(i=>i.json()),{packageId:e,borrowFee:t,borrowFeeAddress:n,pool:o}=a;e&&(en.ProtocolPackage=e),t&&(en.borrowFee=t),n&&(en.borrowFeeAddress=n),o&&(en.pool=o),Hc=!0}catch(a){console.error(a.message)}}var $t=en;import{TransactionType as ye}from"@msafe/sui3-utils";import{normalizeStructTag as Mp,normalizeSuiAddress as nn}from"@mysten/sui/utils";import{bcs as Xc}from"@mysten/sui.js/bcs";var Vo=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();if(this.isEntryClaimAndDepositTransaction())return this.decodeEntryClaimAndDeposit();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isClaimRewardTransaction(){return!!this.transactions.find(t=>!!(t.kind==="MoveCall"&&t.target.includes("claim_reward")))}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::entry_borrow_v2`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::borrow_v2`)}isEntryMultiDepositTransaction(){let e=`${$t.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))?!1:t.length>1}isEntryClaimAndDepositTransaction(){let e=`${$t.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return!!(this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))&&t.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::withdraw_v2`)}findPoolByAssetId(e){let t=Object.values($t.pool).find(n=>n.assetId===e);if(!t)throw new Error("Pool not found");return t}decodeEntryClaimAndDeposit(){return{txType:ye.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return console.log("decode claims"),{txType:ye.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryBorrow",intentionData:{amount:t,assetId:e}}}decodeEntryMultiDeposit(){let e=[],t=`${$t.ProtocolPackage}::incentive_v3::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===t){let o=new $o(n,this.txb),i=o.decodeInputU8(3),s=o.decodeInputU64(5);e.push({assetId:i,amount:s})}}),{txType:ye.Other,type:"EntryMultiDeposit",intentionData:{list:e}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryDeposit",intentionData:{amount:t,assetId:e}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6);return{txType:ye.Other,type:"EntryRepay",intentionData:{amount:t,assetId:e}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryWithdraw",intentionData:{amount:t,assetId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith($t.ProtocolPackage));return new $o(e,this.txb)}},$o=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return nn(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Xc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return nn(e.value.Object.ImmOrOwned.objectId)}return nn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return nn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return nn(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Xc.de(t,new Uint8Array(n))}typeArg(e){return Mp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{Transaction as zc}from"@mysten/sui/transactions";import{depositCoinPTB as Op,withdrawCoinPTB as Pp,repayCoinPTB as Rp,borrowCoinPTB as Bp,claimLendingRewardsPTB as Gc,getUserAvailableLendingRewards as Qc}from"@naviprotocol/lending";async function Pe(a,e,t,n){return await Op(a,e,t,{amount:n}),a}async function Jc(a,e,t,n){let[o]=await Pp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Yc(a,e,t,n){let[o]=await Bp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Fr(a,e,t,n){return await Rp(a,e,t,{amount:n}),a}async function Zc(a,e){let t=new zc,n=await Qc(e,{client:a});return await Gc(t,n),t}async function tl(a,e){let t=new zc,n=await Qc(e,{client:a});return await Gc(t,n,{customCoinReceive:{type:"depositNAVI",depositNAVI:{fallbackReceiveAddress:e}}}),t}var Ho=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await Zc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var Xo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await tl(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Wp}from"@mysten/sui/transactions";import{getPool as Ep}from"@naviprotocol/lending";async function Yt(a){return Ep(a)}var zo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Wp;console.log("build",this.data);let s=await Yt(n);return await Yc(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Np}from"@mysten/sui/transactions";async function Re(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var Go=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,l=new Np;console.log("build",this.data);let d=await Yt(i);if(i===0){let[x]=l.splitCoins(l.gas,[s]);return await Pe(l,d,x,s)}let b=await Re(n,o.address,d.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${d.suiCoinType} Token`);let I=b.data[0].coinObjectId;if(b.data.length>=2){let x=1;for(;x<b.data.length;)l.mergeCoins(I,[b.data[x].coinObjectId]),x++}return await Pe(l,d,l.object(I),s)}static fromData(t){return new a(t)}};import{Transaction as _p}from"@mysten/sui/transactions";var Qo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,l=new _p;console.log("build",this.data);let d=await Yt(i);if(i===0){let[C]=l.splitCoins(l.gas,[s]);return Fr(l,d,C,s)}let b=await Re(n,o.address,d.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${d.suiCoinType} Token`);let I=b.data[0].coinObjectId;if(b.data.length>=2){let C=1;for(;C<b.data.length;)l.mergeCoins(I,[b.data[C].coinObjectId]),C++}return Fr(l,d,l.object(I),s)}static fromData(t){return new a(t)}};import{Transaction as Lp}from"@mysten/sui/transactions";var Jo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Lp;console.log("build",this.data);let s=await Yt(n);return await Jc(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as jp}from"@mysten/sui/transactions";var Yo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:i}=this.data,s=new jp;console.log("build",this.data);for(let l=0;l<i.length;l++){let{assetId:d,amount:b}=i[l],I=await Yt(d);if(d===0){let[D]=s.splitCoins(s.gas,[b]);await Pe(s,I,D,b);continue}let C=await Re(n,o.address,I.suiCoinType);if(!C.data[0])throw new Error(`Insufficient balance for ${I.suiCoinType} Token`);let x=C.data[0].coinObjectId;if(C.data.length>=2){let D=1;for(;D<C.data.length;)s.mergeCoins(x,[C.data[D].coinObjectId]),D++}await Pe(s,I,s.object(x),b)}return s}static fromData(t){return new a(t)}};var Zo=class{application="navi";supportSDK="@mysten/sui";async deserialize(e){await qr();let{transaction:t}=e,o=new Vo(t).decode();return{txType:Up.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await qr(),e.txSubType){case"EntryDeposit":o=Go.fromData(e.intentionData);break;case"EntryBorrow":o=zo.fromData(e.intentionData);break;case"EntryRepay":o=Qo.fromData(e.intentionData);break;case"EntryWithdraw":o=Jo.fromData(e.intentionData);break;case"EntryMultiDeposit":o=Yo.fromData(e.intentionData);break;case"ClaimReward":o=Ho.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=Xo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as qp,TransactionType as el}from"@msafe/sui3-utils";import{fromHex as Fp}from"@mysten/bcs";import{Transaction as Kp}from"@mysten/sui/transactions";import Vp from"sort-keys-recursive";var nl="msafe-plain-tx",ol=qp.others.plain,Kr=class a{constructor(e){this.data=e}application=nl;txType=el.Other;txSubType=ol;serialize(){return JSON.stringify(Vp(this.data))}async build(e){return Kp.from(Fp(this.data.content))}static fromData(e){return new a(e)}},ta=class{application;supportSDK="@mysten/sui";constructor(){this.application=nl}async deserialize(e){let{content:t}=e.appContext;return{txType:el.Other,txSubType:ol,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return Kr.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{SuiClient as al}from"@mysten/sui/client";import{Transaction as Jp}from"@mysten/sui/transactions";import{SuiClient as Hr}from"@mysten/sui.js/client";import{TransactionBlock as Yp}from"@mysten/sui.js/transactions";import{RequestManager as zp,HTTPTransport as Gp,Client as Qp}from"@open-rpc/client-js";var $p={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Vr=class extends Error{},ea=class extends Vr{code;type;constructor(e,t){super(e),this.code=t,this.type=$p[t]??"ServerError"}};function Hp(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var Xp={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},na=class{endpoint;options;#n=0;#a=0;#t=null;#e=null;#i=new Set;#o=new Map;constructor(e,t={}){this.endpoint=e,this.options={...Xp,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=Hp(this.endpoint))}async makeRequest(e,t){let n=await this.#r();return new Promise((o,i)=>{this.#n+=1,this.#o.set(this.#n,{resolve:o,reject:i,timeout:setTimeout(()=>{this.#o.delete(this.#n),i(new Error(`Request timeout: ${e}`))},this.options.callTimeout)}),n.send(JSON.stringify({jsonrpc:"2.0",id:this.#n,method:e,params:t}))}).then(({error:o,result:i})=>{if(o)throw new ea(o.message,o.code);return i})}#r(){return this.#e?this.#e:(this.#e=new Promise(e=>{this.#t?.close(),this.#t=new this.options.WebSocketConstructor(this.endpoint),this.#t.addEventListener("open",()=>{this.#a=0,e(this.#t)}),this.#t.addEventListener("close",()=>{this.#a++,this.#a<=this.options.maxReconnects&&setTimeout(()=>{this.#s()},this.options.reconnectTimeout)}),this.#t.addEventListener("message",({data:t})=>{let n;try{n=JSON.parse(t)}catch(o){console.error(new Error(`Failed to parse RPC message: ${t}`,{cause:o}));return}if("id"in n&&n.id!=null&&this.#o.has(n.id)){let{resolve:o,timeout:i}=this.#o.get(n.id);clearTimeout(i),o(n)}else if("params"in n){let{params:o}=n;this.#i.forEach(i=>{i.subscriptionId===o.subscription&&o.subscription===i.subscriptionId&&i.onMessage(o.result)})}})}),this.#e)}async#s(){return this.#t?.close(),this.#e=null,Promise.allSettled([...this.#i].map(e=>e.subscribe(this)))}async subscribe(e){let t=new $r(e);return this.#i.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},$r=class{subscriptionId=null;input;subscribed=!1;constructor(e){this.input=e}onMessage(e){this.subscribed&&this.input.onMessage(e)}async unsubscribe(e){let{subscriptionId:t}=this;return this.subscribed=!1,t==null?!1:(this.subscriptionId=null,e.makeRequest(this.input.unsubscribe,[t]))}async subscribe(e){this.subscriptionId=null,this.subscribed=!0;let t=await e.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=t)}};var le=class{rpcClient;websocketClient;constructor({url:e,websocket:{url:t,...n}={},rpc:o}){let i=new Gp(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new Qp(new zp([i])),this.websocketClient=new na(t??e,n)}async request(e){return await this.rpcClient.request(e)}async subscribe(e){let t=await this.websocketClient.subscribe(e);return async()=>!!await t()}};var oa=class a{apps;constructor(){this.apps=new Map}static fromHelpers(e){let t=new a;for(let n=0;n<e.length;n++){let o=e[n];switch(o.supportSDK){case"@mysten/sui.js":t.addLegacyHelper(o);break;case"@mysten/sui":t.addHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return t}addLegacyHelper(e){this.apps.set(e.application,new zr(e))}addHelper(e){this.apps.set(e.application,new Xr(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},Xr=class{constructor(e){this.helper=e}async deserialize(e){let t=new al({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new Hr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=Jp.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:i})}async build(e){let t=new al({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiClient:t});o.setSender(e.account.address);let i=await o.build({client:t});return Yp.from(i)}},zr=class{constructor(e){this.helper=e}async deserialize(e){let t=new Hr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})});return this.helper.deserialize({...e,transactionBlock:e.transactionBlock,suiClient:t})}async build(e){let t=new Hr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");return this.helper.build({...e,suiClient:t})}};import{TransactionType as cd}from"@msafe/sui3-utils";import{getFullnodeUrl as ld}from"@mysten/sui/client";import{Scallop as ud}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Pt}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as ll}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as Zp}from"@mysten/sui/utils";var ue=class{constructor(e,t){this.transaction=e;this.scallopClient=t;this.scallopClient=t,this.inputs=e.getData().inputs,this.commands=e.getData().commands,this.movecallsAsSet=new Set(this.commands.filter(this.isMoveCall).map(n=>`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`))}inputs;commands;movecallsAsSet;get address(){return this.scallopClient.address}get utils(){return this.scallopClient.utils}get coreId(){return{protocolPkg:this.address.get("core.packages.protocol.id"),market:this.address.get("core.market"),version:this.address.get("core.version"),coinDecimalsRegistry:this.address.get("core.coinDecimalsRegistry"),xOracle:this.address.get("core.oracles.xOracle"),spoolPkg:this.address.get("spool.id"),borrowIncentivePkg:this.address.get("borrowIncentive.id"),veScaPkgId:this.address.get("vesca.id"),veScaObjId:this.address.get("vesca.object"),scoin:this.address.get("scoin.id"),referral:this.address.get("referral.id")}}matchMoveCallCommand(e,t){let{address:n,module:o,name:i}=Zp(t);return e?e.package===n&&e.module===o&&e.function===i:!1}isMoveCall(e){return e.$kind==="MoveCall"&&!!e.MoveCall}filterMoveCallCommands(e,t){return this.isMoveCall(e)&&this.matchMoveCallCommand(e.MoveCall,t)}getMoveCallCommands(e){let t=new Set(e),n=e.reduce((i,s,l)=>(i[s]=l,i),{}),o=[];return this.commands.forEach(i=>{this.isMoveCall(i)&&i.MoveCall&&t.has(i.MoveCall.package)&&(o[n[i.MoveCall.package]]=i.MoveCall)}),o}hasMoveCallCommand(e){return this.movecallsAsSet.has(e)}};import{bcs as Gr}from"@mysten/sui/bcs";import{normalizeStructTag as td,normalizeSuiAddress as on}from"@mysten/sui/utils";var Qr=class a{constructor(e,t,n=0){this.moveCall=e;this.transaction=t;let o=[];e?.MoveCall&&t.getData().commands.filter((i,s)=>{if(i.$kind==="MoveCall"){let l=`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,d=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return l===d?(o.push(s),!0):!1}return!1}),this.cmdIdx=o[n]}cmdIdx;get txBlockTransactions(){return this.transaction.blockData.transactions[this.cmdIdx]}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"U64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"U8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"Address");return on(t)}decodeInputString(e){return this.decodePureArg(e,"String")}decodeInputBool(e){return this.decodePureArg(e,"Bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return t}getNestedInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="NestedResult")throw new Error("not input type");return this.transaction.blockData.transactions[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure,o=Gr[t];return Gr[t].parse(new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return on(e.value.Object.ImmOrOwned.objectId)}return on(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return on(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return on(e.value.Object.Shared.objectId)}static getPureInput(e){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let t=e.value.Pure;return Gr.U64.parse(new Uint8Array(t))}typeArg(e){return td(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},W=Qr;var Jr=class{constructor(e,t){this.splitCoin=e;this.txb=t}getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(W.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},Rt=Jr;import{normalizeStructTag as il,SUI_CLOCK_OBJECT_ID as rl,SUI_TYPE_ARG as ed}from"@mysten/sui/utils";var sl=async(a,e)=>{let t=await a.scallopSuiKit.client.getObject({id:e,options:{showContent:!0}});if(t?.data?.content?.dataType!=="moveObject")return!1;let o=t.data.content.fields.lock_key?.fields.name;if(!o)return!1;let i=a.address.get("borrowIncentive.object");return o===`${i.slice(2)}::incentive_account::IncentiveProgramLockKey`},Be={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},Kt={unstakeObligation:(a,e,t)=>a.moveCall(`${Be.id}::user::unstake`,[Be.incentivePools,Be.incentiveAccounts,a.object(e),a.object(t),rl],[il(ed)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${Be.id}::user::redeem_rewards`,[Be.incentivePools,Be.incentiveAccounts,a.object(e),a.object(t),rl],[il(n)])};var cl=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var aa=class extends ue{decode(){if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingScoinTransaction())return this.decodeWithdrawLendingScoin();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithReferralTransaction())return this.decodeBorrowWithReferral();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayWithBoostTransaction())return this.decodeRepayWithBoost();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isMigrateScoinTransaction())return this.decodeMigrateScoin()}isMigrateScoinTransaction(){return this.hasMoveCallCommand(`${this.coreId.scoin}::s_coin_converter::mint_s_coin`)}isSupplyLendingTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::mint::mint`),t=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::stake`);return e&&t}isUnstakeAndWithdrawTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::unstake`),t=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`);return e&&t}isStakeSpoolTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`)}isWithdrawLendingScoinTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`),t=this.hasMoveCallCommand(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`);return e&&t}isDepositCollateralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`);return e&&t}isBorrowWithReferralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`)}isRepayTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::repay::repay`)}isRepayWithBoostTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::repay::repay`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`);return e&&t}isUnstakeSpoolTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return e||t}isOpenObligationTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::open_obligation::open_obligation`)}isMigrateAndClaim(){let e=this.hasMoveCallCommand(`${ll}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`),n=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake`);return e&&(t||n)}get helperClaimLendingReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${ll}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new W(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new W(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new W(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new W(e,this.transaction)}get helperBurnScoin(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new W(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new W(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new W(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new W(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new W(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new W(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new W(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new W(e,this.transaction)}decodeMigrateScoin(){return{txType:Pt.Other,type:"MigrateScoin",intentionData:{}}}decodeMigrateAndClaim(){let e;this.helperStakeObligationWithVeSca.moveCall&&(e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let t=this.helperClaimBorrowReward[0].decodeOwnedObjectId(2),n=this.helperClaimBorrowReward[0].decodeSharedObjectId(3),o=this.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:Pt.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Pt.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Rt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Pt.Other,type:"SupplyLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLending(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperRedeem.getNestedInputParam(2),n=new Rt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Pt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0));console.log({coinName:e});let t=this.helperBurnScoin.getNestedInputParam(1),n=new Rt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Pt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeDepositCollateral(){let e=this.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),t=this.helperDepositCollateral.getNestedInputParam(3),n=new Rt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Pt.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:o,collateralCoinName:e}}}decodeWithdrawCollateral(){let e=this.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),t=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"WithdrawCollateral",intentionData:{amount:t,collateralCoinName:e,obligationKey:o,obligationId:n}}}decodeBorrow(){let e=this.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"Borrow",intentionData:{amount:t,coinName:e,obligationKey:o,obligationId:n}}}decodeBorrowWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperBorrow.decodeInputU64(5),o=this.helperBorrow.decodeSharedObjectId(1),i=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:e,obligationKey:i,obligationId:o,veScaKey:t}}}decodeBorrowWithReferral(){let e=this.utils.parseCoinNameFromType(this.helperBorrowWithReferral.typeArg(0)),t;this.helperStakeObligationWithVeSca.moveCall&&(t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let n=this.helperBorrowWithReferral.decodeInputU64(6),o=this.helperBorrowWithReferral.decodeSharedObjectId(1),i=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:e,obligationKey:i,obligationId:o,veScaKey:t}}}decodeRepay(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperRepay.getNestedInputParam(3),n=new Rt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Pt.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:e}}}decodeRepayWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new Rt(n,this.transaction).getAmountInput().reduce((s,l)=>s+l,0),i=this.helperRepay.decodeSharedObjectId(1);return{txType:Pt.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:i,coinName:e,veScaKey:t}}}decodeStakeSpool(){let e;this.isCreateStakeAccountTransaction()||(e=this.helperStake.decodeOwnedObjectId(1));let t=0;if(this.helperBurnScoin.moveCall){let i=this.helperBurnScoin.getNestedInputParam(1);t=new Rt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}if(this.helperStake.moveCall&&t===0){let i=this.helperStake.getNestedInputParam(2);t=new Rt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Pt.Other,type:"StakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeUnstakeSpool(){let e=this.helperUnstake.decodeOwnedObjectId(1),t=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Pt.Other,type:"UnstakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeSupplyWithStakeSpool(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Rt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Pt.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let e=[];this.helperUnstakes.forEach(o=>{let i=o.decodeOwnedObjectId(1),s=o.decodeInputU64(2);e.push({id:i,coin:s})});let t=this.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new Rt(o,this.transaction).getAmountInput().reduce((i,s)=>i+s,0)}return{txType:Pt.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:e}}}decodeClaimReward(){let e=[],t=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let i=o.decodeOwnedObjectId(2),s=o.typeArg(0),l=this.utils.parseCoinNameFromType(s);e.push({stakeMarketCoinName:l,stakeAccountId:i})}),this.helperClaimBorrowV2Reward.forEach(o=>{let i=o.decodeSharedObjectId(4),s=o.decodeOwnedObjectId(3),l=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:s,obligationKey:i,rewardCoinName:l})}),this.helperClaimBorrowReward.forEach(o=>{let i=o.decodeSharedObjectId(2),s=o.decodeOwnedObjectId(3),l=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:s,obligationKey:i,rewardCoinName:l})}),{txType:Pt.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as Zr}from"@msafe/sui3-utils";var ia=class extends ue{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(t=>new W(t,this.transaction))}get helperBindReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new W(e,this.transaction)}decodeCreateReferralLink(){return{txType:Zr.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Zr.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:Zr.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as te}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as nd}from"@scallop-io/sui-scallop-sdk";var ra=class extends ue{async decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMergeVeSca())return this.decodeMergeVesca();if(this.isSplitVeSca())return this.decodeSplitVesca();if(this.isVeScaObligationBindings())return this.decodeVeScaObligationBindings();if(await this.isTransferVeScaKey())return this.decodeTransferVeScaKey()}isStakeScaFirsTime(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let e=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),t=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!e&&!!t}isRedeemSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}isMergeVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::merge`)}isSplitVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::split`)}isVeScaObligationBindings(){let e=this.commands.filter(l=>this.filterMoveCallCommands(l,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(l=>this.filterMoveCallCommands(l,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(l=>this.filterMoveCallCommands(l,`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`)),o=e.length>0&&t.length>0&&e.length===t.length,i=n.length>0;return this.commands.length===e.length+t.length+n.length&&(o||i)}async isTransferVeScaKey(){let e=this.commands.filter(d=>d.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(d=>d.$kind==="Input").map(({Input:d})=>d);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((d,b)=>d.$kind==="Object"&&o.has(b)).map(d=>d.Object.ImmOrOwnedObject),s=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,l=cl(i.map(({objectId:d})=>d),50);for(let d=0;d<l.length;d++){let b=l[d];if((await this.scallopClient.scallopSuiKit.queryGetObjects(b,{showType:!0})).some(C=>C.type!==s))return!1}return i.length>0}get helperStakeMoreSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new W(e,this.transaction)}get helperStakeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new W(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new W(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new W(e,this.transaction)}get helperRenewExpired(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new W(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${nd}::user::unstake`));return new W(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new W(e,this.transaction)}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new W(t,this.transaction)}getVeScaObligationBindingHelpers(){let e=`${this.coreId.borrowIncentivePkg}::user::unstake_v2`,t=`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,n=`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`,o=[],i=0,s=0,l=0;return this.commands.forEach(d=>{this.filterMoveCallCommands(d,e)?(o.push({action:"unstake",helper:new W(d,this.transaction,i)}),i++):this.filterMoveCallCommands(d,t)?(o.push({action:"stake",helper:new W(d,this.transaction,s)}),s++):this.filterMoveCallCommands(d,n)&&(o.push({action:"deactivate",helper:new W(d,this.transaction,l)}),l++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:te.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new Rt(e,this.transaction).getAmountInput().reduce((k,P)=>k+P,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),i=!!this.helperRedeemSca.moveCall,s=[],l=[],d=[];this.helperOldUnstakeObligation.moveCall&&(s=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(l=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(d=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let b=!1,I=!1,C,x,D=[{condition:s,isOld:!0},{condition:l,isOld:!1},{condition:d,isOld:!1}];for(let k=0;k<D.length;k++)D[k].condition.length>1&&([x,C]=D[k].condition,b=!0,I=D[k].isOld);return{txType:te.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:C,obligationKey:x,veScaKey:o,isHaveRedeem:i,isObligationLocked:b,isOldBorrowIncentive:I}}}decodeExtendStakePeriod(){let e=this.helperExtendStakePeriod.decodeInputU64(4),t=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],i=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(i=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let s=!1,l=!1,d,b,I=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:i,isOld:!1}];for(let C=0;C<I.length;C++)I[C].condition.length>1&&([b,d]=I[C].condition,s=!0,l=I[C].isOld);return{txType:te.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:d,obligationKey:b,veScaKey:t,isObligationLocked:s,isOldBorrowIncentive:l}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new Rt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,l=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(l=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,b=!1,I,C,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([C,I]=x[D].condition,d=!0,b=x[D].isOld);return{txType:te.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:I,obligationKey:C,isOldBorrowIncentive:b,isObligationLocked:d}}}decodeStakeSca(){let e,t;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(e=this.helperStakeSca.getNestedInputParam(3),t=this.helperStakeSca.decodeInputU64(4)):e=this.helperStakeMoreSca.getNestedInputParam(4);let n=new Rt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,l=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(l=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,b=!1,I,C,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([C,I]=x[D].condition,d=!0,b=x[D].isOld);return{txType:te.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:I,obligationKey:C,veScaKey:s,isObligationLocked:d,isOldBorrowIncentive:b}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:te.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:te.Other,type:"SplitVeSca",intentionData:t}}decodeVeScaObligationBindings(){let e=this.getVeScaObligationBindingHelpers(),t=(o,i)=>{switch(o){case"stake":return{veScaKey:i.decodeOwnedObjectId(9),obligationId:i.decodeSharedObjectId(4),obligationKey:i.decodeOwnedObjectId(3)};case"unstake":return{obligationId:i.decodeSharedObjectId(4),obligationKey:i.decodeOwnedObjectId(3)};case"deactivate":return{veScaKey:i.decodeOwnedObjectId(4),obligationId:i.decodeSharedObjectId(3)};default:throw new Error(`Invalid action ${o}`)}},n=e.map(({action:o,helper:i})=>({action:o,args:t(o,i)}));return{txType:te.Other,type:"VeScaObligationBindings",intentionData:{bindingDatas:n}}}decodeTransferVeScaKey(){let e=this.commands.filter(s=>s.$kind==="TransferObjects"),{objects:t}=e[0].TransferObjects,n=t.filter(s=>s.$kind==="Input").map(({Input:s})=>s);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((s,l)=>s.$kind==="Object"&&o.has(l)).map(s=>s.Object.ImmOrOwnedObject);return{xType:te.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:i}}}};import od from"sort-keys-recursive";var A=class{constructor(e){this.data=e}get application(){return"msafe-core"}serialize(){return JSON.stringify(od(this.data))}isObligationLocked=async(e,t)=>{let n=await e.getObject({id:typeof t=="string"?t:t.objectId,options:{showContent:!0}}),o=!1;return n&&n?.data.content?.dataType==="moveObject"&&"lock_key"in n.data.content.fields&&(o=!!n.data.content.fields.lock_key),o};async buildTxWithRefreshObligation(e,t,n){let o=e.builder.createTxBlock();o.setSender(t.walletAddress);let{obligationId:i,obligationKey:s}=t;return await this.isObligationLocked(e.scallopSuiKit.client,i)?(await o.unstakeObligationQuick(i,s),await n(e,o,t),await o.stakeObligationWithVeScaQuick(i,s,t.veScaKey)):await n(e,o,t),o}};var sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:i,obligationId:s,obligationKey:l}=this.data,d=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:d,obligationId:s,obligationKey:l},async(I,C)=>{let x=await C.borrowQuick(+i,o,s,l);C.transferObjects([x],d)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:i,veScaKey:s,amount:l,coinName:d}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:i,veScaKey:s},async(I,C)=>{let x=await C.borrowQuick(+l,d,o,i);C.transferObjects([x],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var la=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:i,obligationKey:s,veScaKey:l,coinName:d,amount:b}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:i,obligationKey:s,veScaKey:l},async(C,x)=>{let D=x.claimReferralTicket(d),k=await x.borrowWithReferralQuick(+b,d,D,i,s);x.burnReferralTicket(D,d),x.transferObjects([k],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as ad}from"@mysten/sui/utils";var ua=class a extends A{txType;txSubType;constructor(e={}){super(e)}async claimIncentiveRewards(e,t){let n=e.builder.createTxBlock();n.setSender(t);let o=await e.query.getAllStakeAccounts(t),i=await e.query.getLendings(void 0,t),s=await e.query.getObligations(t),l=Object.values(await e.query.getObligationAccounts(t)??[]),d=(()=>{let x=[...e.constants.whitelist.spool].map(D=>e.utils.parseCoinName(D));return Object.values(i??[]).filter(D=>!!D&&x.includes(D.coinName)).reduce((D,k)=>{let P=e.utils.parseMarketCoinName(k.coinName);return D[P]||(D[P]=0),D[P]+=k.availableClaimCoin,D},{})})(),b={};Object.entries(o).forEach(([x,D])=>{for(let k=0;k<D.length;k++){let P=D[k];if(!d[x])continue;let U=n.claim(P.id,x);b.sui?b.sui.push(U):b.sui=[U]}});let I=(()=>{let x={};return x.sui=Object.values(d).reduce((D,k)=>D+k,0),l.forEach(D=>{Object.values(D.borrowIncentives).forEach(k=>{k&&k.rewards.forEach(P=>{x[P.coinName]||(x[P.coinName]=0),x[P.coinName]?x[P.coinName]+=P.availableClaimCoin:x[P.coinName]=P.availableClaimCoin})})}),x})();if(s.length>0&&l.length>0)for(let x=0;x<l.length;x++){let D=l[x],k=!1,P=s.find(K=>K.id===D.obligationId)?.keyId,U={};if(P){if(Object.values(D.borrowIncentives).forEach(K=>{if(K){let Bt=K.rewards.filter(Et=>{let Mt=Et.coinName;return Et.availableClaimCoin>0&&!U[Mt]});k=Bt.length>0,Bt.forEach(Et=>{let Mt=n.claimBorrowIncentive(D.obligationId,P,Et.coinName);U[Et.coinName]=!0,b[Et.coinName]?b[Et.coinName].push(Mt):b[Et.coinName]=[Mt]})}}),I.sui>0){let K=Kt.redeem_rewards(n,P,D.obligationId,ad);b.sui?b.sui.push(K):b.sui=[K]}if(k&&await sl(e.query,D.obligationId)){n.unstakeObligation(D.obligationId,P);let Bt=await e.query.getBindedVeScaKey(D.obligationId);Bt?n.stakeObligationWithVesca(D.obligationId,P,Bt):n.stakeObligation(D.obligationId,P)}}}let C=(await Promise.all(Object.entries(b).map(async([x,D])=>{let k=D[0];if(D.length>1&&n.mergeCoins(k,D.slice(1)),x==="sui"){n.mergeCoins(n.gas,[k]);return}return await e.builder.utils.mergeSimilarCoins(n,k,e.utils.parseCoinType(x),t),k}))).filter(x=>!!x);return C.length>0&&n.transferObjects(C,t),n.txBlock}async build(e){return this.claimIncentiveRewards(e.scallopClient,e.account.address)}static fromData(e={}){return new a(e)}};var ma=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.depositCollateral(this.data.collateralCoinName,+this.data.amount,!1,this.data.obligationId)}static fromData(t){return new a(t)}};var pa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:i,obligationId:s,rewardCoinName:l,veScaKey:d}=this.data,b=n.builder.createTxBlock();b.setSender(o);let I=Kt.redeem_rewards(b,i,s,n.utils.parseCoinType(l));return b.transferObjects([I],o),await b.unstakeObligationQuick(s,i),d?await b.stakeObligationWithVeScaQuick(s,i,d):await b.stakeObligationQuick(s,i),b.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new a(t)}};var da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new a(t)}};var fa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.openObligation(!1)}static fromData(t){return new a(t)}};var ha=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:l,obligationKey:d}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:l,obligationKey:d},async(I,C)=>{await C.repayQuick(+s,i,l)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var ga=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:l,veScaKey:d}=this.data,b=n.builder.createTxBlock();b.setSender(o);let I=n.constants.whitelist.borrowing.has(i);return I&&await b.unstakeObligationQuick(l,void 0),await b.repayQuick(+s,i,l),I&&await b.stakeObligationWithVeScaQuick(l,void 0,d),b.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var ya=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.deposit(this.data.coinName,+this.data.amount,!1,t.account.address)}static fromData(t){return new a(t)}};var ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new a(t)}};var Ta=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async unstakeAndWithdraw(t,n,o){let i=t.builder.createTxBlock();i.setSender(o);let{stakeAccountId:s,amount:l,coinName:d}=this.data,b=[];for(let I=0;I<s.length;I++){let{id:C,coin:x}=s[I],D=t.utils.parseMarketCoinName(d),[k]=await i.unstakeQuick(x,D,C);if(k){let P=i.withdraw(k,d);b.push(P)}}if(l>0){let I=await i.withdrawQuick(l,d);b.push(I)}return b.length>1&&i.mergeCoins(b[0],b.slice(1)),i.transferObjects(b,o),i.txBlock}async build(t){return this.unstakeAndWithdraw(t.scallopClient,this.data,t.account.address)}static fromData(t){return new a(t)}};var Sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),!1,this.data.obligationId,this.data.obligationKey,t.account.address)}static fromData(t){return new a(t)}};var Ia=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdraw(this.data.coinName,Number(this.data.amount),!1,t.account.address)}static fromData(t){return new a(t)}};var wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async bindReferral({account:t,scallopClient:n}){let o=t.address,i=n.builder.createTxBlock();return i.setSender(o),i.bindToReferral(this.data.veScaKey),i.txBlock}async build(t){return this.bindReferral(t)}static fromData(t){return new a(t)}};var Ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:i}=this.data,s=t.address,l=n.builder.createTxBlock();l.setSender(s);let d=i.map(b=>n.utils.parseCoinNameFromType(b));return await l.claimReferralRevenueQuick(o,d),l.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new a(t)}};var xa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async createReferralLink({account:t,scallopClient:n}){let o=t.address,i=n.builder.createTxBlock();i.setSender(o);let s=i.mintEmptyVeSca();return i.transferObjects([s],o),i.txBlock}async build(t){return this.createReferralLink(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as id}from"@scallop-io/sui-scallop-sdk";var Da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:i,unlockTime:s,obligationId:l,obligationKey:d,isOldBorrowIncentive:b,isObligationLocked:I}=this.data,C=t.address,x=n.builder.createTxBlock();x.setSender(C);let D=await n.utils.selectCoins(o,id,C),[k,P]=x.takeAmountFromCoins(D,o);return x.extendLockPeriod(i,s),x.extendLockAmount(i,k),x.transferObjects([P],C),!l||!d||(I&&(b?Kt.unstakeObligation(x,l,d):x.unstakeObligation(l,d)),x.stakeObligationWithVesca(l,d,i)),x.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var ka=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:i,unlockTime:s,obligationId:l,obligationKey:d,isObligationLocked:b,isOldBorrowIncentive:I}=this.data,C=n.builder.createTxBlock();return C.setSender(o),C.extendLockPeriod(i,s),l&&d&&(b&&(I?Kt.unstakeObligation(C,d,l):C.unstakeObligation(l,d)),C.stakeObligationWithVesca(l,d,i)),C.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var va=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,sourceVeScaKey:s}=this.data,[l,d]=await Promise.all([n.getBindedObligationId(i),n.getBindedObligationId(s)]);l&&await t.unstakeObligationQuick(l),d&&await t.unstakeObligationQuick(d),o(t,i,s),l&&await t.stakeObligationWithVeScaQuick(l,void 0,i),d&&await t.stakeObligationWithVeScaQuick(d,void 0,s)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,async(s,l,d)=>{s.mergeVeSca(i.object(l),i.object(d))}),i.txBlock}static fromData(t){return new a(t)}};var Aa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async redeemSca({account:t,scallopClient:n}){let{veScaKey:o}=this.data,i=t.address,s=n.builder.createTxBlock();return s.setSender(i),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.redeemSca(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as rd}from"@scallop-io/sui-scallop-sdk";var Ma=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,unlockTime:s,veScaKey:l,isHaveRedeem:d,obligation:b,obligationKey:I,isObligationLocked:C,isOldBorrowIncentive:x}=this.data,D=n.builder.createTxBlock();if(D.setSender(o),d){let K=D.redeemSca(l);D.transferObjects([K],o)}let k=await n.builder.utils.selectCoins(i,rd,o),[P,U]=D.takeAmountFromCoins(k,i);return D.transferObjects([U],o),D.renewExpiredVeSca(l,P,s),!b||!I||(C&&(x?Kt.unstakeObligation(D,I,b):D.unstakeObligation(b,I)),D.stakeObligationWithVesca(b,I,l)),D.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var Oa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,splitAmount:s}=this.data,l=await n.getBindedObligationId(i);l&&await t.unstakeObligationQuick(l),o(t,i,s.toString()),l&&await t.stakeObligationWithVeScaQuick(l,void 0,i)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,(s,l,d)=>{let b=s.splitVeSca(l,d.toString());s.transferObjects([b],o)}),i.txBlock}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as sd}from"@scallop-io/sui-scallop-sdk";var Pa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,isObligationLocked:s,isOldBorrowIncentive:l,obligationId:d,obligationKey:b,unlockTime:I,veScaKey:C}=this.data,x=n.builder.createTxBlock();x.setSender(o);let D=await n.utils.selectCoins(i,sd,o),[k,P]=x.takeAmountFromCoins(D,i),U;return C?x.extendLockAmount(C,k):U=x.lockSca(k,I),d&&b&&(s&&(l?Kt.unstakeObligation(x,b,d):x.unstakeObligation(d,b)),x.stakeObligationWithVesca(d,b,C||U)),C||x.transferObjects([U,P],o),x.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var Ra=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:i,coinName:s,stakeAccountId:l}=this.data,d=n.builder.createTxBlock();d.setSender(o);let b=await d.depositQuick(+i,s),I=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(I))return d.txBlock;let C=await n.query.getStakeAccounts(I,o),x=l||(C.length>0?C[0].id:void 0);if(x)await d.stakeQuick(b,I,x);else{let D=d.createStakeAccount(I);await d.stakeQuick(b,I,D),d.transferObjects([D],o)}return d.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var Ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;handleAction(t,{action:n,args:o}){switch(n){case"deactivate":return t.deactivateBoost(o.obligationId,o.veScaKey);case"stake":return t.stakeObligationWithVesca(o.obligationId,o.obligationKey,o.veScaKey);case"unstake":return t.unstakeObligation(o.obligationId,o.obligationKey);default:throw new Error("Invalid action")}}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{bindingDatas:s}=this.data;return s.forEach(l=>this.handleAction(i,l)),i.txBlock}static fromData(t){return new a(t)}};var Ea=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{veScaKeys:s}=this.data;return i.transferObjects(s.map(l=>i.objectRef(l)),i.pure.address(o)),i.txBlock}static fromData(t){return new a(t)}};var Wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async withdrawUnlockedSca({account:t,scallopClient:n}){let{vescaKey:o}=this.data,i=t.address,s=n.builder.createTxBlock();return s.setSender(i),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.withdrawUnlockedSca(t)}static fromData(t){return new a(t)}};var Na=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new ud({addressId:"67c44a103fe1b8c454eb9699",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??ld("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n),console.log("transaction",t);let i=new aa(t,this.scallopClient),s=new ia(t,this.scallopClient),l=new ra(t,this.scallopClient),d=i.decode()||s.decode()||await l.decode();if(!d)throw new Error("Unknown transaction type");return{txType:cd.Other,txSubType:d.type,intentionData:d.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:i,intentionData:s}=e;await this.initScallopClient(n.address,t);let l;switch(i){case"SupplyLending":l=ya.fromData(s);break;case"WithdrawLending":l=Ia.fromData(s);break;case"Borrow":l=sa.fromData(s);break;case"Repay":l=ha.fromData(s);break;case"DepositCollateral":l=ma.fromData(s);break;case"WithdrawCollateral":l=Sa.fromData(s);break;case"OpenObligation":l=fa.fromData(s);break;case"UnstakeSpool":l=ba.fromData(s);break;case"ClaimIncentiveReward":l=ua.fromData(s);break;case"BorrowWithBoost":l=ca.fromData(s);break;case"StakeSca":l=Pa.fromData(s);break;case"ExtendStakePeriod":l=ka.fromData(s);break;case"ExtendPeriodAndStakeMore":l=Da.fromData(s);break;case"RenewExpStakePeriod":l=Ma.fromData(s);break;case"WithdrawStakedSca":l=Wa.fromData(s);break;case"SupplyAndStakeLending":l=Ra.fromData(s);break;case"WithdrawAndUnstakeLending":l=Ta.fromData(s);break;case"RedeemSca":l=Aa.fromData(s);break;case"MigrateAndClaim":l=pa.fromData(s);break;case"BorrowWithReferral":l=la.fromData(s);break;case"CreateReferralLink":l=xa.fromData(s);break;case"ClaimRevenueReferral":l=Ca.fromData(s);break;case"BindReferral":l=wa.fromData(s);break;case"MigrateScoin":l=da.fromData(s);break;case"RepayWithBoost":l=ga.fromData(s);break;case"MergeVeSca":l=va.fromData(s);break;case"SplitVeSca":l=Oa.fromData(s);break;case"VeScaObligationBindings":{l=Ba.fromData(s);break}case"TransferVeScaKeys":{l=Ea.fromData(s);break}default:throw new Error("not implemented")}return l.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as Kd}from"@msafe/sui3-utils";import{TransactionType as sn}from"@msafe/sui3-utils";import{normalizeStructTag as be}from"@mysten/sui/utils";import{API_URL as kd}from"@suilend/sui-fe";import{TransactionType as Cd}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as xd,LENDING_MARKET_TYPE as Dd,SuilendClient as ts}from"@suilend/sdk";import{TransactionType as Ee}from"@msafe/sui3-utils";import{fromBase64 as ul,toHex as ml}from"@mysten/bcs";import{normalizeStructTag as an}from"@mysten/sui/utils";import{MAX_U64 as We}from"@suilend/sui-fe";import pl from"bignumber.js";var _a=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("lending_market::MintEvent"))},t=an(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:Ee.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(d=>d.type.includes("lending_market::RedeemEvent"))},n=an(t.RedeemEvent.parsedJson.coin_type.name),o=t.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let i=e.withdraw_ctokens.MoveCall.arguments[4].Input,s=new pl(ml(ul(this.inputs[i].Pure.bytes)),16).toString(),l=s===We.toString();return console.log("decodeWithdraw - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",We.toString()),l&&(o=We.toString()),{txType:Ee.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(d=>d.type.includes("lending_market::BorrowEvent"))},n=an(t.BorrowEvent.parsedJson.coin_type.name),o=`${+t.BorrowEvent.parsedJson.liquidity_amount-+t.BorrowEvent.parsedJson.origination_fee_amount}`;console.log("Decoder.decodeBorrow",n,o);let i=e.borrow_request.MoveCall.arguments[4].Input,s=new pl(ml(ul(this.inputs[i].Pure.bytes)),16).toString(),l=s===We.toString();return console.log("decodeBorrow - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",We.toString()),l&&(o=We.toString()),{txType:Ee.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=an(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:Ee.Other,type:"repay",intentionData:{coinType:t,value:n}}}decodeClaim(){let e={ClaimReward:this.simResult.events.filter(n=>n.type.includes("lending_market::ClaimReward"))},t={};for(let n=0;n<e.ClaimReward.length;n++){let o=e.ClaimReward[n],i=an(o.parsedJson.coin_type.name),s=o.parsedJson.liquidity_amount;t[i]=`${+(t[i]??"0")+ +s}`}return console.log("Decoder.decodeClaimRewards",t),{txType:Ee.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:Ee.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as dd}from"@mysten/sui/transactions";import pd from"sort-keys-recursive";var _t=class{constructor(e){this.data=e}serialize(){return JSON.stringify(pd(this.data))}};var La=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("BorrowIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new dd;return await i.borrowAndSendToUser(o.address,s.id,l.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("BorrowIntention.fromData",t),new a(t)}};import{Transaction as bd}from"@mysten/sui/transactions";import{normalizeStructTag as fd}from"@mysten/sui/utils";import{Side as rn}from"@suilend/sdk";import{isSendPoints as hd}from"@suilend/sui-fe";import gd from"bignumber.js";var yd=(a,e)=>{let t={[rn.DEPOSIT]:[],[rn.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[rn.DEPOSIT,rn.BORROW].forEach(o=>{let i=o===rn.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,s=e.userRewardManagers.find(l=>l.poolRewardManagerId===i.id);s&&(t[o]=i.poolRewards.map((l,d)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(d),rewardCoinType:fd(l.coinType.name),side:o})).filter(l=>!hd(l.rewardCoinType)&&!!s.rewards[Number(l.rewardIndex)]&&new gd(s.rewards[Number(l.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},ja=yd;var Ua=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("ClaimIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new bd;return i.claimRewardsAndSendToUser(o.address,s.id,ja(i,l),d),d}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as Td}from"@mysten/sui/transactions";var qa=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("ClaimAndDepositIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new Td;return i.claimRewardsAndDeposit(o.address,s.id,ja(i,l),d),d}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Sd}from"@mysten/sui/transactions";var Fa=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;console.log("DepositIntention.build",n,o,i,s,l);let d=new Sd;return await i.depositIntoObligation(o.address,this.data.coinType,this.data.value,d,s?.id),d}static fromData(t){return console.log("DepositIntention.fromData",t),new a(t)}};import{Transaction as Id}from"@mysten/sui/transactions";var Ka=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("RepayIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new Id;return await i.repayIntoObligation(o.address,l.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("RepayIntention.fromData",t),new a(t)}};import{Transaction as wd}from"@mysten/sui/transactions";var Va=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("WithdrawIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new wd;return await i.withdrawAndSendToUser(o.address,s.id,l.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};var $a=async(a,e)=>{let t=await ts.initialize(xd,Dd,a),n=await ts.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(i=>ts.getObligation(i.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},Ha=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await $a(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",i,"utils:",this.utils,"suiClient:",n);let l=new _a(t,i).decode();return{txType:Cd.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await $a(i,s));let l;switch(n){case"deposit":l=Fa.fromData(o);break;case"withdraw":l=Va.fromData(o);break;case"borrow":l=La.fromData(o);break;case"repay":l=Ka.fromData(o);break;case"claim":l=Ua.fromData(o);break;case"claimAndDeposit":l=qa.fromData(o);break;default:throw new Error("not implemented")}let d=window.localStorage.getItem("obligationId"),b=this.utils.obligations?.find(C=>C.id===d)??this.utils.obligations?.[0],I=this.utils.obligationOwnerCaps?.find(C=>C.obligationId===b?.id);return l.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:I,obligation:b})}};var es=async(a,e)=>{let t=await $a(a,e),n=await fetch(`${kd}/springsui/lst-info`),o=await n.json();if(n?.statusCode===500)throw new Error("Failed to fetch SpringSui LST data");let s=Object.fromEntries(Object.values(o).map(l=>[l.LIQUID_STAKING_INFO.type,l.LIQUID_STAKING_INFO]));return{...t,LIQUID_STAKING_INFO_MAP:s}};var Xa=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isStakeTransaction())return this.decodeStake();if(this.isStakeAndDepositTransaction())return this.decodeStakeAndDeposit();if(this.isConvertTransaction())return this.decodeConvert();if(this.isConvertAndDepositTransaction())return this.decodeConvertAndDeposit();if(this.isUnstakeTransaction())return this.decodeUnstake();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintMoveCallCommands(){return!!this.getMoveCallCommand("mint")}hasRedeemMoveCallCommands(){return!!this.getMoveCallCommand("redeem")}isStakeTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isStakeAndDepositTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isConvertTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isConvertAndDepositTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isUnstakeTransaction(){return!this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}decodeStake(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=be(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:sn.Other,type:"stake",intentionData:{amount:n,outCoinType:t}}}decodeStakeAndDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=be(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:sn.Other,type:"stakeAndDeposit",intentionData:{amount:n,outCoinType:t}}}decodeConvert(){let e={RedeemEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::MintEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=be(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:sn.Other,type:"convert",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeConvertAndDeposit(){let e={RedeemEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::MintEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=be(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:sn.Other,type:"convertAndDeposit",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeUnstake(){let e={RedeemEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::RedeemEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:sn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as Md}from"@mysten/sui/transactions";import{LstClient as dl,convertLstsAndRebalanceAndSendToUser as Od}from"@suilend/springsui-sdk";import Ad from"sort-keys-recursive";var Vt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Ad(this.data))}};var za=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("ConvertIntention.build",n,o,i,s,l,d);let b=await dl.initialize(n,Object.values(s).find(x=>x.type===this.data.inCoinType)),I=await dl.initialize(n,Object.values(s).find(x=>x.type===this.data.outCoinType)),C=new Md;return Od(b,I,C,o.address,this.data.amount),C}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as Pd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Rd,sendObligationToUser as Bd}from"@suilend/sdk";import{LstClient as fl,convertLstsAndRebalance as Ed}from"@suilend/springsui-sdk";var Ga=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("ConvertAndDepositIntention.build",n,o,i,s,l,d);let b=await fl.initialize(n,Object.values(s).find(P=>P.type===this.data.inCoinType)),I=await fl.initialize(n,Object.values(s).find(P=>P.type===this.data.outCoinType)),C=new Pd,{obligationOwnerCapId:x,didCreate:D}=Rd(i,C,l),k=Ed(b,I,C,o.address,this.data.amount);return i.deposit(k,this.data.outCoinType,x,C),D&&Bd(x,o.address,C),C}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Wd}from"@mysten/sui/transactions";import{LstClient as Nd}from"@suilend/springsui-sdk";var Qa=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("StakeIntention.build",n,o,i,s,l,d);let b=await Nd.initialize(n,Object.values(s).find(C=>C.type===this.data.outCoinType)),I=new Wd;return b.mintAmountAndRebalanceAndSendToUser(I,o.address,this.data.amount),I}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as _d}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Ld,sendObligationToUser as jd}from"@suilend/sdk";import{LstClient as Ud}from"@suilend/springsui-sdk";var Ja=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("StakeAndDepositIntention.build",n,o,i,s,l,d);let b=await Ud.initialize(n,Object.values(s).find(k=>k.type===this.data.outCoinType)),I=new _d,{obligationOwnerCapId:C,didCreate:x}=Ld(i,I,l),D=b.mintAmountAndRebalance(I,o.address,this.data.amount);return i.deposit(D,this.data.outCoinType,C,I),x&&jd(C,o.address,I),I}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as qd}from"@mysten/sui/transactions";import{LstClient as Fd}from"@suilend/springsui-sdk";var Ya=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("UnstakeIntention.build",n,o,i,s,l,d);let b=await Fd.initialize(n,Object.values(s).find(C=>C.type===this.data.inCoinType)),I=new qd;return b.redeemAmountAndRebalanceAndSendToUser(I,o.address,this.data.amount),I}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(t)}};var Za=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await es(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",i);let l=new Xa(t,i).decode();return{txType:Kd.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await es(i,s));let l;switch(n){case"stake":l=Qa.fromData(o);break;case"stakeAndDeposit":l=Ja.fromData(o);break;case"convert":l=za.fromData(o);break;case"convertAndDeposit":l=Ga.fromData(o);break;case"unstake":l=Ya.fromData(o);break;default:throw new Error("not implemented")}return l.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,LIQUID_STAKING_INFO_MAP:this.utils.LIQUID_STAKING_INFO_MAP,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as Xd}from"@msafe/sui3-utils";import{TransactionType as hl}from"@msafe/sui3-utils";var ti=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isMintTransaction()){let e=this.getLiquidityChangeEvent("MintEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeMint(t)}if(this.isRedeemTransaction()){let e=this.getLiquidityChangeEvent("RedeemEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeRedeem(t)}throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(e){return this.simResult.events.find(t=>this.isLiquidityChangeEventType(t.type,e))}isLiquidityChangeEventType(e,t){return e.includes(t)}isMintTransaction(){return!!this.getMoveCallCommand("mint")}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(e){let{event:{sui_amount_in:t}}=e;return console.log("Decoder.decodeMint",t),{txType:hl.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:hl.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as $d}from"@alphafi/stsui-sdk";var ei=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},l=await new $d(i).mint(o,n.address);return l.setGasBudget(1e8),l}static fromData(t){return console.log("MintIntention.fromData",t),new a(t)}};import{LST as Hd}from"@alphafi/stsui-sdk";var ni=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},l=await new Hd(i).redeem(o,n.address);return l.setGasBudget(1e8),l}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var oi=class{application="stsui";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n}=e,o=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("StSuiHelper Sim result - ",o);let s=new ti(t,o).decode();return{txType:Xd.Other,txSubType:s.type,intentionData:s.intentionData}}async build(e){let{account:t}=e;console.log("StSui build transaction type",e.txSubType);let n;switch(e.txSubType){case"mint":n=ei.fromData(e.intentionData);break;case"redeem":n=ni.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as gf}from"@msafe/sui3-utils";import{TurbosSdk as yf}from"turbos-clmm-sdk";import{TransactionType as Lt}from"@msafe/sui3-utils";import{fromBase64 as Ne}from"@mysten/bcs";import{bcs as _e}from"@mysten/sui/bcs";import{BN as Gd}from"turbos-clmm-sdk";var Ht={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Xt={PackageId:"0xdee9"};var Qd=(a,e,t,n)=>{if(a===1)switch(n.findIndex(s=>s===e)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${e}`)}switch(t.findIndex(i=>i===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},ai=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}get transactions(){return this.txb.getData().commands}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}async decode(e){if(this.isSwapTransaction())return this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(e);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(e);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(e);if(this.isRemoveLiquidityWithReturnTransaction())return this.decodeRemoveLiquidityWithReturn(e);if(this.isDecreaseLiquidityWithReturnTransaction())return this.decodeDecreaseLiquidityWithReturn(e);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(e){return this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===e:!1)}getMoveCallsTransaction(e){return e.every(t=>this.transactions.find(n=>n.$kind==="MoveCall"?`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`===t:!1))}getSwapMoveCallTransaction(e){return this.transactions.find(t=>{if(t.$kind==="MoveCall"){let n=`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`;return!!e.includes(n)}return!1})}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isDecreaseLiquidityWithReturnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity_with_return_`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isRemoveLiquidityWithReturnTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity_with_return_`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let e=this.transactions.find(D=>D.$kind==="MoveCall"),t=0,n=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;console.log(n,"moveCallTarget"),this.swap2Layer.includes(n)&&(t=1);let o=Qd(t,n,this.swap1Layer,this.swap2Layer),i=o.map((D,k)=>{let P=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(k)),U=this.helper.decodeInputU128(this.helper.getInputsIndex(4+k+t)),K=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new Gd(U.toString()));return{pool:P,a2b:D,nextTickIndex:K}}),s=o[0]||t===1?e.MoveCall.typeArguments[0]:e.MoveCall.typeArguments[1],l=t===1?e.MoveCall.typeArguments[4]:o[0]?e.MoveCall.typeArguments[1]:e.MoveCall.typeArguments[0],d=this.helper.decodeInputAddress(this.helper.getInputsIndex(6+2*t)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(7+2*t)),I=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),C=this.helper.decodeInputU64(this.helper.getInputsIndex(2+t)),x=this.helper.decodeInputU64(this.helper.getInputsIndex(3+t));return{txType:Lt.Other,type:"Swap",intentionData:{routes:i,coinTypeA:s,coinTypeB:l,address:d,amountA:I?C:x,amountB:I?x:C,amountSpecifiedIsInput:I,slippage:"0.1",deadline:b}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeInputAddress(this.helper.getInputsIndex(12)),n=this.helper.decodeInputU64(this.helper.getInputsIndex(8)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(9)),i=this.helper.decodeInputU32(this.helper.getInputsIndex(4)),s=this.helper.decodeInputBool(this.helper.getInputsIndex(5)),l=this.helper.decodeInputU32(this.helper.getInputsIndex(6)),d=this.helper.decodeInputBool(this.helper.getInputsIndex(7)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(13));return{txType:Lt.Other,type:"AddLiquidity",intentionData:{pool:e,slippage:30,address:t,amountA:n,amountB:o,tickLower:s?-i:i,tickUpper:d?-l:l,deadline:b}}}decodeIncreaseLiquidity(e){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(4)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(6)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(9));return{txType:Lt.Other,type:"IncreaseLiquidity",intentionData:{pool:t,slippage:30,address:e,amountA:o,amountB:i,nft:n,deadline:s}}}decodeDecreaseLiquidity(e){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),l=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:Lt.Other,type:"DecreaseLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:l}}}decodeDecreaseLiquidityWithReturn(e){console.log(this.helper,"decodeDecreaseLiquidityWithReturn this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeOwnedObjectId(2),o=this.helper.decodeInputU64(3),i=this.helper.decodeInputU64(4),s=this.helper.decodeInputU64(5),l=this.helper.decodeInputU64(6);return{txType:Lt.Other,type:"DecreaseLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:l}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(5)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:Lt.Other,type:"CollectFee",intentionData:{pool:e,address:n,collectAmountA:o,collectAmountB:i,nft:t,deadline:s}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(6)),o=[0,0,0];this.collectRewardHelper.forEach(s=>{let l=s.decodeInputU64(s.getInputsIndex(4)),d=s.decodeInputU64(s.getInputsIndex(5));o[l]=d});let i=this.helper.decodeInputU64(7);return{txType:Lt.Other,type:"CollectReward",intentionData:{pool:e,address:n,rewardAmounts:o,nft:t,deadline:i}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2));return{txType:Lt.Other,type:"Burn",intentionData:{pool:e,nft:t}}}decodeRemoveLiquidity(e){console.log(this.helper,"decodeRemoveLiquidity this.helper");let t=30,n=this.decreaseLiquidityHelper.decodeSharedObjectId(this.decreaseLiquidityHelper.getInputsIndex(0)),o=this.decreaseLiquidityHelper.decodeOwnedObjectId(this.decreaseLiquidityHelper.getInputsIndex(2)),i=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(3)),s=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(4)),l=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(5)),d=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(6)),b=[0,0,0];this.collectRewardHelper.forEach(x=>{let D=x.decodeInputU64(x.getInputsIndex(4)),k=x.decodeInputU64(x.getInputsIndex(5));b[D]=k});let I=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,C=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(4))||0;return{txType:Lt.Other,type:"RemoveLiquidity",intentionData:{pool:n,decreaseLiquidity:i,nft:o,amountA:(s/(100-t)*100).toFixed(0),amountB:(l/(100-t)*100).toFixed(0),slippage:t,address:e,collectAmountA:I,collectAmountB:C,rewardAmounts:b,deadline:d}}}decodeRemoveLiquidityWithReturn(e){console.log(this.helper,"decodeRemoveLiquidityWithReturn this.helper");let t=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeOwnedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),i=this.decreaseLiquidityHelper.decodeInputU64(4),s=this.decreaseLiquidityHelper.decodeInputU64(5),l=this.decreaseLiquidityHelper.decodeInputU64(6),d=this.collectRewardHelper.map(C=>C.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,I=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:Lt.Other,type:"removeLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,collectAmountA:b,collectAmountB:I,rewardAmounts:d,deadline:l}}}decodePrixClaim(){return{txType:Lt.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:Lt.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let e=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),t=this.swapExactBaseForQuoteHelper.decodeInputU64(3),n=this.swapExactBaseForQuoteHelper.shortTypeArg(0),o=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:Lt.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}decodeSwapExactQuoteForBase(){let e=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),t=this.swapExactQuoteForBaseHelper.decodeInputU64(3),n=this.swapExactQuoteForBaseHelper.shortTypeArg(0),o=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:Lt.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}get helper(){let e=this.transactions.find(t=>{if(t.$kind==="MoveCall"){let n=`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`;return n!=="0x2::coin::zero"&&n!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero"}return!1});return new me(e,this.txb)}get collectRewardHelper(){return this.transactions.filter(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::collect_reward`:!1).map(t=>new me(t,this.txb))}get collectFeeHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::collect`:!1);return new me(e,this.txb)}get decreaseLiquidityHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::decrease_liquidity`:!1);return new me(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`:!1);return new me(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`:!1);return new me(e,this.txb)}},me=class{constructor(e,t){this.moveCall=e;this.txb=t}get inputs(){return this.txb.getData().inputs}getInputsIndex(e){return this.moveCall.MoveCall.arguments[e].Input}decodeSharedObjectId(e){return this.inputs[e].Object?.SharedObject?.objectId||this.inputs[e].UnresolvedObject.objectId}decodeOwnedObjectId(e){return this.inputs[e].Object?.ImmOrOwnedObject?.objectId||this.inputs[e].UnresolvedObject.objectId}decodeInputU128(e){return Number(_e.u128().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(_e.u64().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(_e.u32().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(_e.u8().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return _e.Address.parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return _e.bool().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as Jd}from"turbos-clmm-sdk";var ii=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Jd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,tickLower:b,tickUpper:I,deadline:C,txb:x}=this.data;return n.pool.addLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,tickLower:b,tickUpper:I,deadline:C,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as Yd}from"turbos-clmm-sdk";var ri=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Yd(t.network.replace("sui:",""),t.suiClient),{pool:o,nft:i,txb:s}=this.data;return n.position.burn({pool:o,nft:i,txb:s})}static fromData(t){return new a(t)}};import{TurbosSdk as Zd}from"turbos-clmm-sdk";var si=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Zd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,collectAmountA:l,collectAmountB:d,deadline:b,txb:I}=this.data;return n.pool.collectFee({pool:o,address:i,collectAmountA:l,collectAmountB:d,nft:s,deadline:b,txb:I})}static fromData(t){return new a(t)}};import{TurbosSdk as tf}from"turbos-clmm-sdk";var ci=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new tf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,rewardAmounts:l,deadline:d,txb:b}=this.data;return n.pool.collectReward({pool:o,address:i,rewardAmounts:l,nft:s,deadline:d,txb:b})}static fromData(t){return new a(t)}};import{TurbosSdk as ef}from"turbos-clmm-sdk";var li=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ef(t.network.replace("sui:",""),t.suiClient),{fee:o,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:I,coinTypeB:C,amountA:x,amountB:D,deadline:k,txb:P}=this.data;return n.pool.createPool({fee:o,amountA:x,amountB:D,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:I,coinTypeB:C,deadline:k,txb:P})}static fromData(t){return new a(t)}};import{TurbosSdk as nf}from"turbos-clmm-sdk";var ui=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new nf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,decreaseLiquidity:I,deadline:C,txb:x}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:I,deadline:C,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as of}from"turbos-clmm-sdk";var mi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new of(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,decreaseLiquidity:I,deadline:C}=this.data,{txb:x,coinA:D,coinB:k}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:I,deadline:C});return x.transferObjects([D,k],this.data.address),x}static fromData(t){return new a(t)}};import{TurbosSdk as af}from"turbos-clmm-sdk";var pi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new af(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,deadline:I,txb:C}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,deadline:I,txb:C})}static fromData(t){return new a(t)}};import{Transaction as rf}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as sf}from"@mysten/sui/utils";var di=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new rf;return n.moveCall({target:`${Ht.PackageId}::claim::claim`,typeArguments:[Ht.turbosCoinType],arguments:[n.object(Ht.Claim),n.object(sf)]}),n}static fromData(t){return new a(t)}};import{Transaction as cf}from"@mysten/sui/transactions";var fi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new cf;return n.moveCall({target:`${Ht.PackageId}::claim::join`,typeArguments:[Ht.turbosCoinType],arguments:[n.object(Ht.Claim)]}),n}static fromData(t){return new a(t)}};import{Transaction as lf}from"@mysten/sui/transactions";import{TurbosSdk as uf}from"turbos-clmm-sdk";var hi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new uf(t.network.replace("sui:",""),t.suiClient),o=new lf;return o=await n.pool.collectFee({txb:o,...this.data}),o=await n.pool.collectReward({txb:o,...this.data}),o=await n.pool.decreaseLiquidity({txb:o,...this.data}),o=await n.position.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(t){return new a(t)}};import{TurbosSdk as mf}from"turbos-clmm-sdk";var gi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new mf(t.network.replace("sui:",""),t.suiClient),{txb:o,coinA:i,coinB:s}=await n.pool.removeLiquidityWithReturn({...this.data});return o.transferObjects([i,s],this.data.address),o}static fromData(t){return new a(t)}};import{TurbosSdk as pf}from"turbos-clmm-sdk";var yi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new pf(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,slippage:I,amountSpecifiedIsInput:C,deadline:x,txb:D}=this.data;return n.trade.swap({routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,amountSpecifiedIsInput:C,slippage:I,deadline:x,txb:D})}static fromData(t){return new a(t)}};import{TurbosSdk as ff}from"turbos-clmm-sdk";import{Transaction as gl}from"@mysten/sui/transactions";import{normalizeSuiObjectId as yl}from"@mysten/sui/utils";import{unstable_getObjectId as df}from"turbos-clmm-sdk";var cn=class{constructor(e){this.turbosSdk=e}async getCoinsData(e,t,n){let o=[],i;do i=await this.turbosSdk.provider.getCoins({owner:e,coinType:t,cursor:i?.nextCursor}),o.push(...i.data);while(i.hasNextPage);let s=[],l=0;return o.sort((d,b)=>Number(b.balance)-Number(d.balance)).some(d=>l>=n?!0:(l+=Number(d.balance),s.push(d),!1)),s}splitAndMergeCoin(e,t,n){if(!e||e.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(e[0].coinType)){let[s]=n.splitCoins(n.gas,[n.pure.u64(t)]);return[s,void 0]}let o=n.object(e[0].coinObjectId);e.length>1&&n.mergeCoins(o,e.slice(1).map(s=>n.object(s.coinObjectId)));let[i]=n.splitCoins(o,[n.pure.u64(t)]);return[i,o]}isSuiCoinAddress(e){return e.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(e){let t=await this.turbosSdk.provider.getOwnedObjects({owner:e,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${Xt.PackageId}::custodian_v2::AccountCap`}});return t.data[0]?.data?df(t.data[0].data):void 0}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${Xt.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var bl=89,Tl=1e6,Sl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new gl,d=new cn(s),b=await d.getCoinsData(i,t,o),[I,C]=d.splitAndMergeCoin(b,o,l);if(!I)throw new Error(`Not enough balance: ${t}`);let x=await d.IsAccountCap(i),D=x?l.object(x):d.createAccount(l),[k,P,U]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[l.object(String(n)),l.pure.u64(bl),D,l.pure.u64(o),l.object(yl("0x6")),I]});return C&&l.transferObjects([C],l.pure.address(i)),l.transferObjects([k],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),x||l.transferObjects([D],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(Tl),l},Il=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new gl,d=new cn(s),b=await d.getCoinsData(i,e,o),[I,C]=d.splitAndMergeCoin(b,o,l);if(!I)throw new Error(`Not enough balance: ${e}`);let x=await d.IsAccountCap(i),D=x?l.object(x):d.createAccount(l),k=d.zero(t,l),[P,U,K]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[l.object(String(n)),l.pure.u64(bl),D,l.pure.u64(o),I,k,l.object(yl("0x6"))]});return C&&l.transferObjects([C],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),l.transferObjects([U],l.pure.address(i)),x||l.transferObjects([D],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(Tl),l};var bi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ff(t.network.replace("sui:",""),t.suiClient);return await Il({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as hf}from"turbos-clmm-sdk";var Ti=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new hf(t.network.replace("sui:",""),t.suiClient);return await Sl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var Si=class{application="turbos";supportSDK="@mysten/sui";async deserialize(e){console.log(e,"input");let t=new yf(e.network.replace("sui:","")),n=await t.contract.getConfig(),{transaction:o,account:i}=e,l=await new ai(o,t,n).decode(i.address);return{txType:gf.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.intentionData,"intentionData");let i;switch(e.txSubType){case"CreatePool":i=li.fromData(e.intentionData);break;case"AddLiquidity":i=ii.fromData(e.intentionData);break;case"IncreaseLiquidity":i=pi.fromData(e.intentionData);break;case"DecreaseLiquidity":i=ui.fromData(e.intentionData);break;case"DecreaseLiquidityWithReturn":i=mi.fromData(e.intentionData);break;case"RemoveLiquidity":i=hi.fromData(e.intentionData);break;case"removeLiquidityWithReturn":i=gi.fromData(e.intentionData);break;case"CollectFee":i=si.fromData(e.intentionData);break;case"CollectReward":i=ci.fromData(e.intentionData);break;case"Burn":i=ri.fromData(e.intentionData);break;case"Swap":i=yi.fromData(e.intentionData);break;case"PrixJoin":i=fi.fromData(e.intentionData);break;case"PrixClaim":i=di.fromData(e.intentionData);break;case"SwapExactBaseForQuote":i=bi.fromData(e.intentionData);break;case"SwapExactQuoteForBase":i=Ti.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as xf}from"@msafe/sui3-utils";import{TransactionType as ns}from"@msafe/sui3-utils";import{bcs as wl}from"@mysten/sui.js/bcs";import{normalizeStructTag as Sf,normalizeSuiAddress as ln}from"@mysten/sui.js/utils";var bf={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},kt=bf;var Ii=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${kt.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${kt.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${kt.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:ns.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:ns.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:ns.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(kt.packageId));return new os(e,this.txb)}},os=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return ln(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return wl.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return ln(e.value.Object.ImmOrOwned.objectId)}return ln(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return ln(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return ln(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return wl.de(t,new Uint8Array(n))}typeArg(e){return Sf(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as If}from"@mysten/sui.js/transactions";var wi=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new If,{ticketId:o}=this.data;return n.moveCall({target:`${kt.packageId}::native_pool::burn_ticket`,arguments:[n.object(kt.poolObjectId),n.object(kt.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as wf}from"@mysten/sui.js/transactions";var Ci=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new wf,{amount:o}=this.data,[i]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${kt.packageId}::native_pool::stake`,arguments:[n.object(kt.poolObjectId),n.object(kt.metadataObjectId),n.object(kt.systemStateObjectId),i]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Cf}from"@mysten/sui.js/transactions";var xi=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Cf,{amount:o}=this.data,i=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[s,...l]=i.filter(I=>I.coinType.split("::")[0]===kt.certType.split("::")[0]),d=n.object(s.coinObjectId);l.length&&n.mergeCoins(d,l.map(I=>n.object(I.coinObjectId)));let b=n.splitCoins(n.object(s.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${kt.packageId}::native_pool::unstake`,arguments:[n.object(kt.poolObjectId),n.object(kt.metadataObjectId),n.object(kt.systemStateObjectId),b]}),n}static fromData(t){return new a(t)}};var Di=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new Ii(t).decode();return{txType:xf.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=Ci.fromData(e.intentionData);break;case"UnStake":o=xi.fromData(e.intentionData);break;case"ClaimTicket":o=wi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as jf}from"@msafe/sui3-utils";import{asIntN as Cl}from"@cetusprotocol/common-sdk";import{TransactionType as pe}from"@msafe/sui3-utils";import{fromBase64 as un}from"@mysten/bcs";import{bcs as mn}from"@mysten/sui/bcs";var ki=class{constructor(e,t){this.transaction=e;this.appContext=t}async decode(){if(this.isOpenPositionTx())return this.decodeOpenPositionTx();if(this.isClosePositionTx())return this.decodeClosePositionTx();if(this.isProvideLiquidityTx())return this.decodeProvideLiquidityTx();if(this.isRemoveLiquidityTx())return this.decodeRemoveLiquidityTx();if(this.isCollectRewardsAndFeeTx())return this.decodeCollectRewardsAndFeeTx();if(this.isCollectRewardsTx())return this.decodeCollectRewardsTx();if(this.isCollectFeeTx())return this.decodeCollectFeeTx();if(this.isAggregator7KSwapTx())return this.decodeAggregator7KSwapTx();throw new Error("Unknown transaction type")}decodeOpenPositionTx(){let e=this.getMoveCallCommand("open_position"),t=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:pe.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(Cl(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(Cl(BigInt(this.getU32(this.getInputIndex(e,3)))).toString()),tokenAmount:this.getU64(this.getInputIndex(t,6)),maxAmountTokenA:this.getU64(this.getInputIndex(t,7)),maxAmountTokenB:this.getU64(this.getInputIndex(t,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(t,9))}}}decodeClosePositionTx(){let e=this.getMoveCallCommand("close_position"),t=this.getCollectRewardCallData();return{txType:pe.Other,type:"ClosePosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),transferTokensTo:this.getAddress(this.getInputIndex(e,4)),collectRewardTokens:t.map(n=>n.rewardCoinType),collectFeeTokens:this.getTypeArguments(e)}}}decodeProvideLiquidityTx(){let e=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:pe.Other,type:"ProvideLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),tokenAmount:this.getU64(this.getInputIndex(e,6)),maxAmountTokenA:this.getU64(this.getInputIndex(e,7)),maxAmountTokenB:this.getU64(this.getInputIndex(e,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(e,9))}}}decodeRemoveLiquidityTx(){let e=this.getMoveCallCommand("remove_liquidity");return{txType:pe.Other,type:"RemoveLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),liquidity:this.getU128(this.getInputIndex(e,4)),maxAmountTokenA:this.getU64(this.getInputIndex(e,5)),maxAmountTokenB:this.getU64(this.getInputIndex(e,6)),transferTokensTo:this.getAddress(this.getInputIndex(e,7)),...this.collectTokens()}}}decodeCollectRewardsTx(){let e=this.getCollectRewardCallData();return{txType:pe.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:pe.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:pe.Other,type:"CollectRewardsAndFee",intentionData:{pool:e.pool,position:e.position,...this.collectTokens()}}}getFeeCallData(){let e=this.getMoveCallCommand("collect_fee");return{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),collectFeeTokens:this.getTypeArguments(e)}}getCollectRewardCallData(){let e=[];return this.commands.forEach(t=>{t.$kind==="MoveCall"&&t.MoveCall.function==="collect_reward"&&e.push({pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),rewardCoinType:this.getTypeArguments(t)[2]})}),e}async decodeAggregator7KSwapTx(){let{appContext:e}=this;return console.log("appContext",e),{txType:pe.Other,type:"Aggregator7KSwap",intentionData:{tokenIn:e.txParams.tokenIn,tokenOut:e.txParams.tokenOut,amountIn:String(e.txParams.amountIn),maxSlippage:String(e.txParams.maxSlippage)}}}collectTokens(){let e=this.getFeeCallData(),t=this.getCollectRewardCallData();return{collectFeeTokens:e.collectFeeTokens,collectRewardTokens:t.map(n=>n.rewardCoinType)}}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}isOpenPositionTx(){return!!this.getMoveCallCommand("open_position")}isProvideLiquidityTx(){return!!this.getMoveCallCommand("provide_liquidity_with_fixed_amount")}isRemoveLiquidityTx(){return!!this.getMoveCallCommand("remove_liquidity")}isCollectRewardsTx(){return!!this.getMoveCallCommand("collect_reward")}isCollectFeeTx(){return!!this.getMoveCallCommand("collect_fee")}isCollectRewardsAndFeeTx(){return this.isCollectRewardsTx()&&this.isCollectFeeTx()}isClosePositionTx(){return!!this.getMoveCallCommand("close_position")}isAggregator7KSwapTx(){return!!this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function.toLowerCase().includes("settle"))}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getSharedObjectID(e){return this.inputs[e].Object.SharedObject.objectId}getOwnedObjectID(e){return this.inputs[e].Object.ImmOrOwnedObject.objectId}getU32(e){return String(mn.u32().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes))))}getU64(e){return mn.u64().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getU128(e){return mn.u128().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getBoolean(e){return mn.bool().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getAddress(e){return mn.Address.parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as Pf}from"@msafe/sui3-utils";import{buildTx as vf,getQuote as Af}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as Te,ClmmPoolUtil as Mf}from"@firefly-exchange/library-sui";import{Decimal as Of}from"turbos-clmm-sdk";import{SuiClient as Df}from"@firefly-exchange/library-sui";import{OnChainCalls as kf}from"@firefly-exchange/library-sui/spot";var xl={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x67b34b728c4e28e704dcfecf7c5cf55c7fc593b6c65c20d1836d97c209c1928a"}},ne=(a,e)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new Df({url:xl.rpc});return new kf(t,xl.objects,{address:e.address,isUIWallet:!1})};var At=class{static async OpenPosition(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(i,{...e,slippage:0});return await o.openPositionWithFixedAmount(i,e.lowerTick,e.upperTick,s,{returnTx:!0,sender:t.address})}static async provideLiquidity(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(i,e);return await o.provideLiquidityWithFixedAmount(i,e.position,s,{returnTx:!0,sender:t.address})}static async removeLiquidity(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.removeLiquidity(i,e.position,{liquidityAmount:new Te(e.liquidity),tokenMaxA:new Te(e.maxAmountTokenA),tokenMaxB:new Te(e.maxAmountTokenB)},{returnTx:!0,sender:t.address})}static async closePosition(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.closePosition(i,e.position,{returnTx:!0,sender:t.address})}static async collectRewards(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.collectRewards(i,e.position,{rewardCoinsType:e.collectRewardTokens,returnTx:!0,sender:t.address})}static async collectFee(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.collectFee(i,e.position,{returnTx:!0,sender:t.address})}static async collectRewardsAndFee(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return console.log(e.position),await o.collectFeeAndRewards(i,e.position,{returnTx:!0,sender:t.address})}static async aggregator7KSwap(e,t,n){let o=ne(n,t),i=await Af({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new Of(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await vf({quoteResponse:i,accountAddress:t.address,slippage:e.maxSlippage,commission:{partner:"0x956d6ea2da156a037952964badc51f997cc5581c86a0e05f74049e6effab9347",commissionBps:0}});return s.tx.setSender(t.address),s.tx}buildLiqInput(e,t){return{...Mf.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new Te(t.tokenAmount),t.isTokenAFixed,!0,0,new Te(e.current_sqrt_price)),tokenMaxA:new Te(t.maxAmountTokenA),tokenMaxB:new Te(t.maxAmountTokenB)}}};var vi=class a extends S{constructor(t){super(t);this.data=t}txType=Pf.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.aggregator7KSwap(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Rf}from"@msafe/sui3-utils";var Ai=class a extends S{constructor(t){super(t);this.data=t}txType=Rf.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bf}from"@msafe/sui3-utils";var Mi=class a extends S{constructor(t){super(t);this.data=t}txType=Bf.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ef}from"@msafe/sui3-utils";var Oi=class a extends S{constructor(t){super(t);this.data=t}txType=Ef.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wf}from"@msafe/sui3-utils";var Pi=class a extends S{constructor(t){super(t);this.data=t}txType=Wf.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Nf}from"@msafe/sui3-utils";var Ri=class a extends S{constructor(t){super(t);this.data=t}txType=Nf.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as _f}from"@msafe/sui3-utils";var Bi=class a extends S{constructor(t){super(t);this.data=t}txType=_f.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Lf}from"@msafe/sui3-utils";var Ei=class a extends S{constructor(t){super(t);this.data=t}txType=Lf.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var Wi=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(e){console.log("Bluefin helper deserialize input: ",e);let{transaction:t,appContext:n}=e,i=await new ki(t,n).decode();return{txType:jf.Other,txSubType:i.type,intentionData:{appContext:e.appContext,...i.intentionData}}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.txSubType);let i;switch(e.txSubType){case"OpenPosition":i=Ri.fromData(e.intentionData);break;case"ProvideLiquidity":i=Bi.fromData(e.intentionData);break;case"RemoveLiquidity":i=Ei.fromData(e.intentionData);break;case"ClosePosition":i=Ai.fromData(e.intentionData);break;case"CollectFee":i=Mi.fromData(e.intentionData);break;case"CollectRewards":i=Oi.fromData(e.intentionData);break;case"CollectRewardsAndFee":i=Pi.fromData(e.intentionData);break;case"Aggregator7KSwap":i=vi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as dh}from"@msafe/sui3-utils";import{MmtSDK as zf}from"@mmt-finance/clmm-sdk";import{Transaction as Gf}from"@mysten/sui/transactions";var R=tu(kl());import{convertI32ToSigned as is,TickMath as Ml}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";import Vf from"bignumber.js";var Uf="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",zt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",qf=async({suiClient:a,address:e,type:t})=>{let n,o=[],i=0;do{try{let s=await a.getCoins({owner:e,coinType:t,cursor:n,limit:50});o=o.concat(s.data),n=s.nextCursor,(!s.hasNextPage||i===8)&&(n=null)}catch(s){console.log(s),n=null}i++}while(n!==null);return o},Ff=(a,e)=>{let t=[],n=BigInt(0);for(let o of e)n<a&&!t.includes(o.objectId)&&(t.push(o.objectId),n+=BigInt(o.balance)),o.balance===BigInt(0)&&!t.includes(o.objectId)&&t.push(o.objectId);if(n>=a)return t;throw new Error("Insufficient balance")},Kf=(a,e,t,n)=>{if(a===Uf){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=Ff(t,e);o.length>1&&n.mergeCoins(n.object(o[0]),o.slice(1).map(s=>n.object(s)));let[i]=n.splitCoins(n.object(o[0]),[n.pure.u64(t)]);return i}};async function vl(a,e,t,n,o){let i=await qf({suiClient:a.rpcClient,address:e,type:t});return Kf(zt(t),i.map(l=>({balance:BigInt(l.balance),objectId:l.coinObjectId})),n,o)}var Se=(a,e,t,n,o)=>{let i={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType};n?.rewarders&&n?.rewarders.length>0&&a.Pool.collectAllRewards(o,i,n.rewarders.map(s=>({coin_type:s.coinType,flow_rate:s.flowRate,reward_amount:s.rewardAmount,rewards_allocated:s.rewardsAllocated,hasEnded:s.hasEnded})),t.objectId,e),a.Pool.collectFee(o,{objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType,isStable:n.isStable,tickSpacing:n.tickSpacing},t.objectId,e)};async function Al({sdk:a,address:e,positionId:t,pool:n,txb:o,targetCoinType:i,slippage:s}){let l={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType},d=n.rewarders.map(I=>I.coinType);d.length>0&&(console.log("claimRewardsAsTargetCoin input",{pool:l,positionId:t,rewarderCoinTypes:d,targetCoinType:i,slippage:s,toAddress:e}),await a.Pool.claimRewardsAs({txb:o,pool:l,positionId:t,rewarderCoinTypes:d,targetCoinType:i,slippage:s,toAddress:e}));let b=await a.Pool.getAllPools();return await a.Pool.claimFeeAs({txb:o,pool:l,positionId:t,targetCoinType:i,slippage:s,toAddress:e,pools:b}),o}function E(a,e,t){let n=a.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}function $f(a){let e;return(a&1)!==0?e=new R.default("79232123823359799118286999567"):e=new R.default("79228162514264337593543950336"),(a&2)!==0&&(e=E(e.mul(new R.default("79236085330515764027303304731")),96,256)),(a&4)!==0&&(e=E(e.mul(new R.default("79244008939048815603706035061")),96,256)),(a&8)!==0&&(e=E(e.mul(new R.default("79259858533276714757314932305")),96,256)),(a&16)!==0&&(e=E(e.mul(new R.default("79291567232598584799939703904")),96,256)),(a&32)!==0&&(e=E(e.mul(new R.default("79355022692464371645785046466")),96,256)),(a&64)!==0&&(e=E(e.mul(new R.default("79482085999252804386437311141")),96,256)),(a&128)!==0&&(e=E(e.mul(new R.default("79736823300114093921829183326")),96,256)),(a&256)!==0&&(e=E(e.mul(new R.default("80248749790819932309965073892")),96,256)),(a&512)!==0&&(e=E(e.mul(new R.default("81282483887344747381513967011")),96,256)),(a&1024)!==0&&(e=E(e.mul(new R.default("83390072131320151908154831281")),96,256)),(a&2048)!==0&&(e=E(e.mul(new R.default("87770609709833776024991924138")),96,256)),(a&4096)!==0&&(e=E(e.mul(new R.default("97234110755111693312479820773")),96,256)),(a&8192)!==0&&(e=E(e.mul(new R.default("119332217159966728226237229890")),96,256)),(a&16384)!==0&&(e=E(e.mul(new R.default("179736315981702064433883588727")),96,256)),(a&32768)!==0&&(e=E(e.mul(new R.default("407748233172238350107850275304")),96,256)),(a&65536)!==0&&(e=E(e.mul(new R.default("2098478828474011932436660412517")),96,256)),(a&131072)!==0&&(e=E(e.mul(new R.default("55581415166113811149459800483533")),96,256)),(a&262144)!==0&&(e=E(e.mul(new R.default("38992368544603139932233054999993551")),96,256)),E(e,32,256)}function Hf(a){let e=Math.abs(a),t;return(e&1)!==0?t=new R.default("18445821805675392311"):t=new R.default("18446744073709551616"),(e&2)!==0&&(t=E(t.mul(new R.default("18444899583751176498")),64,256)),(e&4)!==0&&(t=E(t.mul(new R.default("18443055278223354162")),64,256)),(e&8)!==0&&(t=E(t.mul(new R.default("18439367220385604838")),64,256)),(e&16)!==0&&(t=E(t.mul(new R.default("18431993317065449817")),64,256)),(e&32)!==0&&(t=E(t.mul(new R.default("18417254355718160513")),64,256)),(e&64)!==0&&(t=E(t.mul(new R.default("18387811781193591352")),64,256)),(e&128)!==0&&(t=E(t.mul(new R.default("18329067761203520168")),64,256)),(e&256)!==0&&(t=E(t.mul(new R.default("18212142134806087854")),64,256)),(e&512)!==0&&(t=E(t.mul(new R.default("17980523815641551639")),64,256)),(e&1024)!==0&&(t=E(t.mul(new R.default("17526086738831147013")),64,256)),(e&2048)!==0&&(t=E(t.mul(new R.default("16651378430235024244")),64,256)),(e&4096)!==0&&(t=E(t.mul(new R.default("15030750278693429944")),64,256)),(e&8192)!==0&&(t=E(t.mul(new R.default("12247334978882834399")),64,256)),(e&16384)!==0&&(t=E(t.mul(new R.default("8131365268884726200")),64,256)),(e&32768)!==0&&(t=E(t.mul(new R.default("3584323654723342297")),64,256)),(e&65536)!==0&&(t=E(t.mul(new R.default("696457651847595233")),64,256)),(e&131072)!==0&&(t=E(t.mul(new R.default("26294789957452057")),64,256)),(e&262144)!==0&&(t=E(t.mul(new R.default("37481735321082")),64,256)),t}var Ol=(a,e,t)=>{let n=is(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default($f(n)):new R.default(Hf(n))};function Pl(a,e){if(!/^(\d+)(\.\d+)?$/.test(a))return BigInt(0);let[t,n=""]=a.split("."),o=(n+"0".repeat(e)).slice(0,e),s=(t+o).replace(/^0+/,"")||"0";return BigInt(s)}async function de({address:a,coinType:e,coinAmount:t,coinDecimals:n,tx:o,mmt:i}){let s=Pl(t,n),l;return Number(t)?l=await vl(i,a,zt(e),s,o):[l]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),l}function Rl({mmt:a,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let i=Ol(is(n),t.tickSpacing),s=Ol(is(o),t.tickSpacing);return a.Position.openPosition(e,t,i.toString(),s.toString())}var Xf=(a,e)=>{let n=1e4-Math.floor(e*100);return a*BigInt(n)/BigInt(1e4)};function Ni(a,e,t){let n=Pl(a,e);return Number(a)===0?BigInt(0):Xf(n,t)}async function pn({poolId:a,currentSqrtPrice:e,tokenX:t,tokenY:n,slippagePercentage:o,isTokenX:i,suiClient:s}){let d=(await s.getObject({id:a,options:{showContent:!0}}))?.data?.content?.fields?.sqrt_price??e,b=Ml.sqrtPriceX64ToPrice(new R.default(d?.toString()),t.decimals,n.decimals),I=i?(100-o)/100:(100+o)/100,C=Ml.priceToSqrtPriceX64(b.mul(I),t.decimals,n.decimals);return BigInt(C.toString())}var Bl=async(a,e,t,n,o,i,s,l,d,b)=>{let I=await de({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),C=await de({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),x={objectId:s,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},D=Rl({mmt:a,tx:e,poolModel:x,selectedLowTick:l,selectedHighTick:d}),k=Ni(n,i.tokenX.decimals,b),P=Ni(o,i.tokenY.decimals,b);a.Pool.addLiquidity(e,x,D,I,C,k,P,t),e.transferObjects([D],e.pure.address(t))},El=async(a,e,t,n,o,i,s,l,d,b,I)=>{try{let C=await de({mmt:a,address:n,coinType:i?s.tokenX.coinType:s.tokenY.coinType,coinAmount:o,coinDecimals:i?s.tokenX.decimals:s.tokenY.decimals,tx:e}),x={objectId:s.poolId,tokenXType:zt(s.tokenX.coinType),tokenYType:zt(s.tokenY.coinType),tickSpacing:s.tickSpacing},D=Rl({mmt:a,tx:e,poolModel:x,selectedLowTick:l,selectedHighTick:d}),k=await pn({suiClient:t,poolId:s.poolId,currentSqrtPrice:s.currentSqrtPrice,tokenX:s.tokenX,tokenY:s.tokenY,slippagePercentage:b,isTokenX:i});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:x,position:D,inputCoin:C,isXtoY:i,limitSqrtPrice:k,slippagePercentage:I,transferToAddress:n,useMvr:!0}),e.transferObjects([D],e.pure.address(n))}catch(C){console.error(C)}},Wl=async(a,e,t,n,o,i,s,l)=>{let d=await de({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),b=await de({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),I={objectId:i.poolId,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},C=Ni(n,i.tokenX.decimals,l),x=Ni(o,i.tokenY.decimals,l);a.Pool.addLiquidity(e,I,s,d,b,C,x,t)},Nl=async(a,e,t,n,o,i,s,l,d)=>{try{let b=await de({mmt:a,address:t,coinType:o?i.tokenX.coinType:i.tokenY.coinType,coinAmount:n,coinDecimals:o?i.tokenX.decimals:i.tokenY.decimals,tx:e}),I={objectId:i.poolId,tokenXType:i.tokenX.coinType,tokenYType:i.tokenY.coinType,tickSpacing:i.tickSpacing},C=await pn({suiClient:a.rpcClient,poolId:i.poolId,currentSqrtPrice:i.currentSqrtPrice,tokenX:i.tokenX,tokenY:i.tokenY,slippagePercentage:l,isTokenX:o});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:I,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:C,slippagePercentage:d,transferToAddress:t})}catch(b){throw console.error(b),b}},_l=(a,e)=>BigInt(e===100?a:new Vf(a).multipliedBy(e/100).toFixed(0)),Ll=async(a,e,t,n,o,i)=>{let s=_l(t.liquidity,o),l=n.tokenX.coinType,d=n.tokenY.coinType,b={objectId:n?.poolId,tokenXType:l,tokenYType:d};a.Pool.removeLiquidity(i,b,t.objectId,s,BigInt(0),BigInt(0),e),Se(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)},jl=async({sdk:a,address:e,position:t,pool:n,withdrawPercentage:o,txb:i,targetCoinType:s,slippage:l})=>{let d=_l(t.liquidity,o),b=zt(n.tokenX.coinType),I=zt(n.tokenY.coinType),C=zt(s)===I,x={objectId:n?.poolId,tokenXType:b,tokenYType:I},{removeLpCoinA:D,removeLpCoinB:k}=a.Pool.removeLiquidity(i,x,t.objectId,d,BigInt(0),BigInt(0)),P=await pn({suiClient:a.rpcClient,poolId:n.poolId,currentSqrtPrice:n.currentSqrtPrice,tokenX:n.tokenX,tokenY:n.tokenY,isTokenX:C,slippagePercentage:l}),U=C?D:k,K=i.moveCall({target:"0x2::coin::value",arguments:[U],typeArguments:[C?b:I]});i.transferObjects([C?k:D],e),a.Pool.swapV2({txb:i,transferToAddress:e,pool:x,limitSqrtPrice:P,amount:K,inputCoin:U,isXtoY:C}),Se(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)};var _i=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=zf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:l,selectedLowTick:d,selectedHighTick:b,slippage:I}=n,C=new Gf;return await Bl(t,C,o,i,s,l,l.poolId,d,b,I),C}static fromData(t){return new a(t)}};import{MmtSDK as Qf}from"@mmt-finance/clmm-sdk";import{Transaction as Jf}from"@mysten/sui/transactions";var Li=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Qf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,selectedLowTick:d,selectedHighTick:b,swapSlippage:I,addLiquiditySlippage:C}=n,x=new Jf;return await El(t,x,t.rpcClient,o,i,s,l,d,b,I,C),x}static fromData(t){return new a(t)}};import{MmtSDK as Yf}from"@mmt-finance/clmm-sdk";import{Transaction as Zf}from"@mysten/sui/transactions";var ji=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Yf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,positions:i,pools:s}=n,l=new Zf;for(let d of i){let b=s.find(I=>I.poolId===d.poolId);b&&Se(t,o,d,b,l)}return l}static fromData(t){return new a(t)}};import{MmtSDK as th}from"@mmt-finance/clmm-sdk";import{Transaction as eh}from"@mysten/sui/transactions";var Ui=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=th.NEW({network:"mainnet"}),{params:n}=this.data,o=new eh;return await Promise.all(n.claimParams.map(i=>Al({...i,sdk:t,txb:o}))),o}static fromData(t){return new a(t)}};import{MmtSDK as nh}from"@mmt-finance/clmm-sdk";import{Transaction as oh}from"@mysten/sui/transactions";var qi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=nh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:i,pool:s}=n,l=new oh;return Se(t,o,i,s,l),l}static fromData(t){return new a(t)}};import{MmtSDK as ah}from"@mmt-finance/clmm-sdk";import{Transaction as ih}from"@mysten/sui/transactions";var Fi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=ah.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:l,positionObjectId:d,slippage:b}=n,I=new ih;return await Wl(t,I,o,i,s,l,d,b),I}static fromData(t){return new a(t)}};import{MmtSDK as rh}from"@mmt-finance/clmm-sdk";import{Transaction as sh}from"@mysten/sui/transactions";var Ki=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=rh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,positionObjectId:d,swapSlippage:b,addLiquiditySlippage:I}=n,C=new sh;return await Nl(t,C,o,i,s,l,d,b,I),C}static fromData(t){return new a(t)}};import{MmtSDK as ch}from"@mmt-finance/clmm-sdk";import{Transaction as lh}from"@mysten/sui/transactions";var Vi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=ch.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:i,address:s,withdrawPercentage:l,zapOutOn:d,targetCoinType:b,slippage:I}=n,C=new lh;return d?await jl({sdk:t,address:s,position:i,pool:o,withdrawPercentage:l,txb:C,targetCoinType:b,slippage:I}):await Ll(t,s,i,o,l,C),C}static fromData(t){return new a(t)}};import{Transaction as Ul}from"@mysten/sui/transactions";import{LstClient as ql}from"@suilend/springsui-sdk";var rs={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},Fl=async(a,e,t)=>{let n=await ql.initialize(a,rs),o=new Ul,[i]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,i);return o.transferObjects([s],e),o},Kl=async(a,e,t)=>{let n=await ql.initialize(a,rs),o=await a.getCoins({owner:e,coinType:rs.type,limit:1e3});if(o.data.length===0)throw new Error("No lst coins found");let i=new Ul,s=o.data[0];o.data.length>1&&i.mergeCoins(s.coinObjectId,o.data.slice(1).map(b=>b.coinObjectId));let[l]=i.splitCoins(s.coinObjectId,[BigInt(t)]),d=n.redeem(i,l);return i.transferObjects([d],e),i};var $i=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await Fl(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as mh}from"@mmt-finance/clmm-sdk";import{Transaction as ph}from"@mysten/sui/transactions";import{mappedMmtV3Pool as uh}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var Vl=async(a,e,t,n,o,i,s)=>{let l=await de({mmt:a,tx:i,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals}),d=i.moveCall({target:"0x2::coin::value",typeArguments:[t.coinType],arguments:[l]}),b=t.coinType;for(let I=0;I<e.length;I+=1){let{poolId:C,tokenX:x,tokenY:D,isStable:k,currentSqrtPrice:P}=e[I],{id:U,isReverse:K}=uh[C]||{id:C,isReverse:!1},Bt=zt(x.coinType)===zt(b);Bt=K?!Bt:Bt;let Et=K?D.coinType:x.coinType,Mt=K?x.coinType:D.coinType,Le=await pn({poolId:U,tokenX:x,tokenY:D,slippagePercentage:s,isTokenX:Bt,suiClient:a.rpcClient,currentSqrtPrice:P}),Wt=a.Pool.swap(i,{objectId:U,tokenXType:Et,tokenYType:Mt,isStable:k},d,l,Bt,void 0,Le,!1);i.transferObjects([l],i.pure.address(o)),l=Wt,b=Bt?Mt:Et,d=i.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[l]})}i.transferObjects([l],i.pure.address(o))};var Hi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=mh.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:i,amountIn:s,address:l,slippage:d}=n,b=new ph;return await Vl(t,o,i,s,l,b,d),b}static fromData(t){return new a(t)}};var Xi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await Kl(t.suiClient,o,i)}static fromData(t){return new a(t)}};var zi=class{application="mmt-dex";supportSDK="@mysten/sui";async deserialize(e){let{appContext:t}=e;return{txType:dh.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=Hi.fromData(e.intentionData);break;case"AddLiquidity":t=_i.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=Li.fromData(e.intentionData);break;case"ClaimRewards":t=qi.fromData(e.intentionData);break;case"ClaimAllRewards":t=ji.fromData(e.intentionData);break;case"ClaimRewardsAs":t=Ui.fromData(e.intentionData);break;case"RemoveLiquidity":t=Vi.fromData(e.intentionData);break;case"StakeXSui":t=$i.fromData(e.intentionData);break;case"UnstakeXSui":t=Xi.fromData(e.intentionData);break;case"ManageLiquidity":t=Fi.fromData(e.intentionData);break;case"ManageLiquiditySingleSide":t=Ki.fromData(e.intentionData);break;default:throw new Error(`not implemented ${e.txSubType}`)}return t.build({suiClient:e.suiClient})}};import{TransactionType as $l}from"@msafe/sui3-utils";import{Transaction as fh}from"@mysten/sui/transactions";import{Vaults as hh}from"@nemoprotocol/vaults-sdk";var Gi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=hh.createSDK({client:n}),s=new fh;return await i.deposit(this.data,o.address,s),s}static fromData(t){return new a(t)}};import{Transaction as gh}from"@mysten/sui/transactions";import{Vaults as yh}from"@nemoprotocol/vaults-sdk";var Qi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=yh.createSDK({client:n}),s=new gh;return await i.withdraw(this.data,o.address,s),s}static fromData(t){return new a(t)}};var Ji=class{application="nemo";supportSDK="@mysten/sui";async deserialize(e){let t=e.transaction.blockData.transactions.find(o=>o.kind==="MoveCall"&&o.target.toString().toLowerCase().includes("deposit::deposit_non_entry")),n=e.transaction.blockData.transactions.find(o=>o.kind==="MoveCall"&&o.target.toString().toLowerCase().includes("withdraw::withdraw"));if(t)return{txType:$l.Other,txSubType:"VaultDeposit",intentionData:e.appContext};if(n)return{txType:$l.Other,txSubType:"VaultWithdraw",intentionData:e.appContext}}async build(e){let{suiClient:t,account:n}=e;console.log(e.txSubType);let o;switch(e.txSubType){case"VaultDeposit":o=Gi.fromData(e.intentionData);break;case"VaultWithdraw":o=Qi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};var L6=oa.fromHelpers([new Ko,new Zo,new Uo,new ta,new fo,new Si,new zi,new Na,new Di,new Un,new Ha,new Za,new wn,new Wi,new oi,new Ji]);export{L6 as appHelpers};
|
|
1
|
+
var ru=Object.create;var vr=Object.defineProperty;var su=Object.getOwnPropertyDescriptor;var cu=Object.getOwnPropertyNames;var lu=Object.getPrototypeOf,uu=Object.prototype.hasOwnProperty;var mu=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var pu=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),Bs=(a,e)=>{for(var t in e)vr(a,t,{get:e[t],enumerable:!0})},du=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of cu(e))!uu.call(a,o)&&o!==t&&vr(a,o,{get:()=>e[o],enumerable:!(n=su(e,o))||n.enumerable});return a};var fu=(a,e,t)=>(t=a!=null?ru(lu(a)):{},du(e||!a||!a.__esModule?vr(t,"default",{value:a,enumerable:!0}):t,a));var El=pu((Bl,ds)=>{"use strict";(function(a,e){"use strict";function t(y,r){if(!y)throw new Error(r||"Assertion failed")}function n(y,r){y.super_=r;var u=function(){};u.prototype=r.prototype,y.prototype=new u,y.prototype.constructor=y}function o(y,r,u){if(o.isBN(y))return y;this.negative=0,this.words=null,this.length=0,this.red=null,y!==null&&((r==="le"||r==="be")&&(u=r,r=10),this._init(y||0,r||10,u||"be"))}typeof a=="object"?a.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var i;try{typeof window<"u"&&typeof window.Buffer<"u"?i=window.Buffer:i=mu("buffer").Buffer}catch{}o.isBN=function(r){return r instanceof o?!0:r!==null&&typeof r=="object"&&r.constructor.wordSize===o.wordSize&&Array.isArray(r.words)},o.max=function(r,u){return r.cmp(u)>0?r:u},o.min=function(r,u){return r.cmp(u)<0?r:u},o.prototype._init=function(r,u,m){if(typeof r=="number")return this._initNumber(r,u,m);if(typeof r=="object")return this._initArray(r,u,m);u==="hex"&&(u=16),t(u===(u|0)&&u>=2&&u<=36),r=r.toString().replace(/\s+/g,"");var d=0;r[0]==="-"&&(d++,this.negative=1),d<r.length&&(u===16?this._parseHex(r,d,m):(this._parseBase(r,u,d),m==="le"&&this._initArray(this.toArray(),u,m)))},o.prototype._initNumber=function(r,u,m){r<0&&(this.negative=1,r=-r),r<67108864?(this.words=[r&67108863],this.length=1):r<4503599627370496?(this.words=[r&67108863,r/67108864&67108863],this.length=2):(t(r<9007199254740992),this.words=[r&67108863,r/67108864&67108863,1],this.length=3),m==="le"&&this._initArray(this.toArray(),u,m)},o.prototype._initArray=function(r,u,m){if(t(typeof r.length=="number"),r.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(r.length/3),this.words=new Array(this.length);for(var d=0;d<this.length;d++)this.words[d]=0;var h,T,C=0;if(m==="be")for(d=r.length-1,h=0;d>=0;d-=3)T=r[d]|r[d-1]<<8|r[d-2]<<16,this.words[h]|=T<<C&67108863,this.words[h+1]=T>>>26-C&67108863,C+=24,C>=26&&(C-=26,h++);else if(m==="le")for(d=0,h=0;d<r.length;d+=3)T=r[d]|r[d+1]<<8|r[d+2]<<16,this.words[h]|=T<<C&67108863,this.words[h+1]=T>>>26-C&67108863,C+=24,C>=26&&(C-=26,h++);return this._strip()};function s(y,r){var u=y.charCodeAt(r);if(u>=48&&u<=57)return u-48;if(u>=65&&u<=70)return u-55;if(u>=97&&u<=102)return u-87;t(!1,"Invalid character in "+y)}function c(y,r,u){var m=s(y,u);return u-1>=r&&(m|=s(y,u-1)<<4),m}o.prototype._parseHex=function(r,u,m){this.length=Math.ceil((r.length-u)/6),this.words=new Array(this.length);for(var d=0;d<this.length;d++)this.words[d]=0;var h=0,T=0,C;if(m==="be")for(d=r.length-1;d>=u;d-=2)C=c(r,u,d)<<h,this.words[T]|=C&67108863,h>=18?(h-=18,T+=1,this.words[T]|=C>>>26):h+=8;else{var f=r.length-u;for(d=f%2===0?u+1:u;d<r.length;d+=2)C=c(r,u,d)<<h,this.words[T]|=C&67108863,h>=18?(h-=18,T+=1,this.words[T]|=C>>>26):h+=8}this._strip()};function p(y,r,u,m){for(var d=0,h=0,T=Math.min(y.length,u),C=r;C<T;C++){var f=y.charCodeAt(C)-48;d*=m,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<m,"Invalid character"),d+=h}return d}o.prototype._parseBase=function(r,u,m){this.words=[0],this.length=1;for(var d=0,h=1;h<=67108863;h*=u)d++;d--,h=h/u|0;for(var T=r.length-m,C=T%d,f=Math.min(T,T-C)+m,l=0,g=m;g<f;g+=d)l=p(r,g,g+d,u),this.imuln(h),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(C!==0){var v=1;for(l=p(r,g,r.length,u),g=0;g<C;g++)v*=u;this.imuln(v),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this._strip()},o.prototype.copy=function(r){r.words=new Array(this.length);for(var u=0;u<this.length;u++)r.words[u]=this.words[u];r.length=this.length,r.negative=this.negative,r.red=this.red};function b(y,r){y.words=r.words,y.length=r.length,y.negative=r.negative,y.red=r.red}if(o.prototype._move=function(r){b(r,this)},o.prototype.clone=function(){var r=new o(null);return this.copy(r),r},o.prototype._expand=function(r){for(;this.length<r;)this.words[this.length++]=0;return this},o.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},o.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{o.prototype[Symbol.for("nodejs.util.inspect.custom")]=S}catch{o.prototype.inspect=S}else o.prototype.inspect=S;function S(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var w=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],D=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],x=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(r,u){r=r||10,u=u|0||1;var m;if(r===16||r==="hex"){m="";for(var d=0,h=0,T=0;T<this.length;T++){var C=this.words[T],f=((C<<d|h)&16777215).toString(16);h=C>>>24-d&16777215,d+=2,d>=26&&(d-=26,T--),h!==0||T!==this.length-1?m=w[6-f.length]+f+m:m=f+m}for(h!==0&&(m=h.toString(16)+m);m.length%u!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}if(r===(r|0)&&r>=2&&r<=36){var l=D[r],g=x[r];m="";var v=this.clone();for(v.negative=0;!v.isZero();){var O=v.modrn(g).toString(r);v=v.idivn(g),v.isZero()?m=O+m:m=w[l-O.length]+O+m}for(this.isZero()&&(m="0"+m);m.length%u!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}t(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var r=this.words[0];return this.length===2?r+=this.words[1]*67108864:this.length===3&&this.words[2]===1?r+=4503599627370496+this.words[1]*67108864:this.length>2&&t(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-r:r},o.prototype.toJSON=function(){return this.toString(16,2)},i&&(o.prototype.toBuffer=function(r,u){return this.toArrayLike(i,r,u)}),o.prototype.toArray=function(r,u){return this.toArrayLike(Array,r,u)};var k=function(r,u){return r.allocUnsafe?r.allocUnsafe(u):new r(u)};o.prototype.toArrayLike=function(r,u,m){this._strip();var d=this.byteLength(),h=m||Math.max(1,d);t(d<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var T=k(r,h),C=u==="le"?"LE":"BE";return this["_toArrayLike"+C](T,d),T},o.prototype._toArrayLikeLE=function(r,u){for(var m=0,d=0,h=0,T=0;h<this.length;h++){var C=this.words[h]<<T|d;r[m++]=C&255,m<r.length&&(r[m++]=C>>8&255),m<r.length&&(r[m++]=C>>16&255),T===6?(m<r.length&&(r[m++]=C>>24&255),d=0,T=0):(d=C>>>24,T+=2)}if(m<r.length)for(r[m++]=d;m<r.length;)r[m++]=0},o.prototype._toArrayLikeBE=function(r,u){for(var m=r.length-1,d=0,h=0,T=0;h<this.length;h++){var C=this.words[h]<<T|d;r[m--]=C&255,m>=0&&(r[m--]=C>>8&255),m>=0&&(r[m--]=C>>16&255),T===6?(m>=0&&(r[m--]=C>>24&255),d=0,T=0):(d=C>>>24,T+=2)}if(m>=0)for(r[m--]=d;m>=0;)r[m--]=0},Math.clz32?o.prototype._countBits=function(r){return 32-Math.clz32(r)}:o.prototype._countBits=function(r){var u=r,m=0;return u>=4096&&(m+=13,u>>>=13),u>=64&&(m+=7,u>>>=7),u>=8&&(m+=4,u>>>=4),u>=2&&(m+=2,u>>>=2),m+u},o.prototype._zeroBits=function(r){if(r===0)return 26;var u=r,m=0;return(u&8191)===0&&(m+=13,u>>>=13),(u&127)===0&&(m+=7,u>>>=7),(u&15)===0&&(m+=4,u>>>=4),(u&3)===0&&(m+=2,u>>>=2),(u&1)===0&&m++,m},o.prototype.bitLength=function(){var r=this.words[this.length-1],u=this._countBits(r);return(this.length-1)*26+u};function M(y){for(var r=new Array(y.bitLength()),u=0;u<r.length;u++){var m=u/26|0,d=u%26;r[u]=y.words[m]>>>d&1}return r}o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var r=0,u=0;u<this.length;u++){var m=this._zeroBits(this.words[u]);if(r+=m,m!==26)break}return r},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(r){return this.negative!==0?this.abs().inotn(r).iaddn(1):this.clone()},o.prototype.fromTwos=function(r){return this.testn(r-1)?this.notn(r).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return this.negative!==0},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(r){for(;this.length<r.length;)this.words[this.length++]=0;for(var u=0;u<r.length;u++)this.words[u]=this.words[u]|r.words[u];return this._strip()},o.prototype.ior=function(r){return t((this.negative|r.negative)===0),this.iuor(r)},o.prototype.or=function(r){return this.length>r.length?this.clone().ior(r):r.clone().ior(this)},o.prototype.uor=function(r){return this.length>r.length?this.clone().iuor(r):r.clone().iuor(this)},o.prototype.iuand=function(r){var u;this.length>r.length?u=r:u=this;for(var m=0;m<u.length;m++)this.words[m]=this.words[m]&r.words[m];return this.length=u.length,this._strip()},o.prototype.iand=function(r){return t((this.negative|r.negative)===0),this.iuand(r)},o.prototype.and=function(r){return this.length>r.length?this.clone().iand(r):r.clone().iand(this)},o.prototype.uand=function(r){return this.length>r.length?this.clone().iuand(r):r.clone().iuand(this)},o.prototype.iuxor=function(r){var u,m;this.length>r.length?(u=this,m=r):(u=r,m=this);for(var d=0;d<m.length;d++)this.words[d]=u.words[d]^m.words[d];if(this!==u)for(;d<u.length;d++)this.words[d]=u.words[d];return this.length=u.length,this._strip()},o.prototype.ixor=function(r){return t((this.negative|r.negative)===0),this.iuxor(r)},o.prototype.xor=function(r){return this.length>r.length?this.clone().ixor(r):r.clone().ixor(this)},o.prototype.uxor=function(r){return this.length>r.length?this.clone().iuxor(r):r.clone().iuxor(this)},o.prototype.inotn=function(r){t(typeof r=="number"&&r>=0);var u=Math.ceil(r/26)|0,m=r%26;this._expand(u),m>0&&u--;for(var d=0;d<u;d++)this.words[d]=~this.words[d]&67108863;return m>0&&(this.words[d]=~this.words[d]&67108863>>26-m),this._strip()},o.prototype.notn=function(r){return this.clone().inotn(r)},o.prototype.setn=function(r,u){t(typeof r=="number"&&r>=0);var m=r/26|0,d=r%26;return this._expand(m+1),u?this.words[m]=this.words[m]|1<<d:this.words[m]=this.words[m]&~(1<<d),this._strip()},o.prototype.iadd=function(r){var u;if(this.negative!==0&&r.negative===0)return this.negative=0,u=this.isub(r),this.negative^=1,this._normSign();if(this.negative===0&&r.negative!==0)return r.negative=0,u=this.isub(r),r.negative=1,u._normSign();var m,d;this.length>r.length?(m=this,d=r):(m=r,d=this);for(var h=0,T=0;T<d.length;T++)u=(m.words[T]|0)+(d.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;for(;h!==0&&T<m.length;T++)u=(m.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;if(this.length=m.length,h!==0)this.words[this.length]=h,this.length++;else if(m!==this)for(;T<m.length;T++)this.words[T]=m.words[T];return this},o.prototype.add=function(r){var u;return r.negative!==0&&this.negative===0?(r.negative=0,u=this.sub(r),r.negative^=1,u):r.negative===0&&this.negative!==0?(this.negative=0,u=r.sub(this),this.negative=1,u):this.length>r.length?this.clone().iadd(r):r.clone().iadd(this)},o.prototype.isub=function(r){if(r.negative!==0){r.negative=0;var u=this.iadd(r);return r.negative=1,u._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(r),this.negative=1,this._normSign();var m=this.cmp(r);if(m===0)return this.negative=0,this.length=1,this.words[0]=0,this;var d,h;m>0?(d=this,h=r):(d=r,h=this);for(var T=0,C=0;C<h.length;C++)u=(d.words[C]|0)-(h.words[C]|0)+T,T=u>>26,this.words[C]=u&67108863;for(;T!==0&&C<d.length;C++)u=(d.words[C]|0)+T,T=u>>26,this.words[C]=u&67108863;if(T===0&&C<d.length&&d!==this)for(;C<d.length;C++)this.words[C]=d.words[C];return this.length=Math.max(this.length,C),d!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(r){return this.clone().isub(r)};function L(y,r,u){u.negative=r.negative^y.negative;var m=y.length+r.length|0;u.length=m,m=m-1|0;var d=y.words[0]|0,h=r.words[0]|0,T=d*h,C=T&67108863,f=T/67108864|0;u.words[0]=C;for(var l=1;l<m;l++){for(var g=f>>>26,v=f&67108863,O=Math.min(l,r.length-1),P=Math.max(0,l-y.length+1);P<=O;P++){var B=l-P|0;d=y.words[B]|0,h=r.words[P]|0,T=d*h+v,g+=T/67108864|0,v=T&67108863}u.words[l]=v|0,f=g|0}return f!==0?u.words[l]=f|0:u.length--,u._strip()}var U=function(r,u,m){var d=r.words,h=u.words,T=m.words,C=0,f,l,g,v=d[0]|0,O=v&8191,P=v>>>13,B=d[1]|0,_=B&8191,F=B>>>13,ae=d[2]|0,K=ae&8191,$=ae>>>13,gs=d[3]|0,z=gs&8191,G=gs>>>13,ys=d[4]|0,Q=ys&8191,Y=ys>>>13,bs=d[5]|0,J=bs&8191,Z=bs>>>13,Ts=d[6]|0,tt=Ts&8191,et=Ts>>>13,Ss=d[7]|0,nt=Ss&8191,ot=Ss>>>13,Is=d[8]|0,at=Is&8191,it=Is>>>13,ws=d[9]|0,rt=ws&8191,st=ws>>>13,Cs=h[0]|0,ct=Cs&8191,lt=Cs>>>13,Ds=h[1]|0,ut=Ds&8191,mt=Ds>>>13,xs=h[2]|0,pt=xs&8191,dt=xs>>>13,ks=h[3]|0,ft=ks&8191,ht=ks>>>13,vs=h[4]|0,gt=vs&8191,yt=vs>>>13,As=h[5]|0,bt=As&8191,Tt=As>>>13,Ms=h[6]|0,St=Ms&8191,It=Ms>>>13,Os=h[7]|0,wt=Os&8191,Ct=Os>>>13,Ps=h[8]|0,Dt=Ps&8191,xt=Ps>>>13,Rs=h[9]|0,kt=Rs&8191,vt=Rs>>>13;m.negative=r.negative^u.negative,m.length=19,f=Math.imul(O,ct),l=Math.imul(O,lt),l=l+Math.imul(P,ct)|0,g=Math.imul(P,lt);var cr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(cr>>>26)|0,cr&=67108863,f=Math.imul(_,ct),l=Math.imul(_,lt),l=l+Math.imul(F,ct)|0,g=Math.imul(F,lt),f=f+Math.imul(O,ut)|0,l=l+Math.imul(O,mt)|0,l=l+Math.imul(P,ut)|0,g=g+Math.imul(P,mt)|0;var lr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(lr>>>26)|0,lr&=67108863,f=Math.imul(K,ct),l=Math.imul(K,lt),l=l+Math.imul($,ct)|0,g=Math.imul($,lt),f=f+Math.imul(_,ut)|0,l=l+Math.imul(_,mt)|0,l=l+Math.imul(F,ut)|0,g=g+Math.imul(F,mt)|0,f=f+Math.imul(O,pt)|0,l=l+Math.imul(O,dt)|0,l=l+Math.imul(P,pt)|0,g=g+Math.imul(P,dt)|0;var ur=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(ur>>>26)|0,ur&=67108863,f=Math.imul(z,ct),l=Math.imul(z,lt),l=l+Math.imul(G,ct)|0,g=Math.imul(G,lt),f=f+Math.imul(K,ut)|0,l=l+Math.imul(K,mt)|0,l=l+Math.imul($,ut)|0,g=g+Math.imul($,mt)|0,f=f+Math.imul(_,pt)|0,l=l+Math.imul(_,dt)|0,l=l+Math.imul(F,pt)|0,g=g+Math.imul(F,dt)|0,f=f+Math.imul(O,ft)|0,l=l+Math.imul(O,ht)|0,l=l+Math.imul(P,ft)|0,g=g+Math.imul(P,ht)|0;var mr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(mr>>>26)|0,mr&=67108863,f=Math.imul(Q,ct),l=Math.imul(Q,lt),l=l+Math.imul(Y,ct)|0,g=Math.imul(Y,lt),f=f+Math.imul(z,ut)|0,l=l+Math.imul(z,mt)|0,l=l+Math.imul(G,ut)|0,g=g+Math.imul(G,mt)|0,f=f+Math.imul(K,pt)|0,l=l+Math.imul(K,dt)|0,l=l+Math.imul($,pt)|0,g=g+Math.imul($,dt)|0,f=f+Math.imul(_,ft)|0,l=l+Math.imul(_,ht)|0,l=l+Math.imul(F,ft)|0,g=g+Math.imul(F,ht)|0,f=f+Math.imul(O,gt)|0,l=l+Math.imul(O,yt)|0,l=l+Math.imul(P,gt)|0,g=g+Math.imul(P,yt)|0;var pr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(pr>>>26)|0,pr&=67108863,f=Math.imul(J,ct),l=Math.imul(J,lt),l=l+Math.imul(Z,ct)|0,g=Math.imul(Z,lt),f=f+Math.imul(Q,ut)|0,l=l+Math.imul(Q,mt)|0,l=l+Math.imul(Y,ut)|0,g=g+Math.imul(Y,mt)|0,f=f+Math.imul(z,pt)|0,l=l+Math.imul(z,dt)|0,l=l+Math.imul(G,pt)|0,g=g+Math.imul(G,dt)|0,f=f+Math.imul(K,ft)|0,l=l+Math.imul(K,ht)|0,l=l+Math.imul($,ft)|0,g=g+Math.imul($,ht)|0,f=f+Math.imul(_,gt)|0,l=l+Math.imul(_,yt)|0,l=l+Math.imul(F,gt)|0,g=g+Math.imul(F,yt)|0,f=f+Math.imul(O,bt)|0,l=l+Math.imul(O,Tt)|0,l=l+Math.imul(P,bt)|0,g=g+Math.imul(P,Tt)|0;var dr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(dr>>>26)|0,dr&=67108863,f=Math.imul(tt,ct),l=Math.imul(tt,lt),l=l+Math.imul(et,ct)|0,g=Math.imul(et,lt),f=f+Math.imul(J,ut)|0,l=l+Math.imul(J,mt)|0,l=l+Math.imul(Z,ut)|0,g=g+Math.imul(Z,mt)|0,f=f+Math.imul(Q,pt)|0,l=l+Math.imul(Q,dt)|0,l=l+Math.imul(Y,pt)|0,g=g+Math.imul(Y,dt)|0,f=f+Math.imul(z,ft)|0,l=l+Math.imul(z,ht)|0,l=l+Math.imul(G,ft)|0,g=g+Math.imul(G,ht)|0,f=f+Math.imul(K,gt)|0,l=l+Math.imul(K,yt)|0,l=l+Math.imul($,gt)|0,g=g+Math.imul($,yt)|0,f=f+Math.imul(_,bt)|0,l=l+Math.imul(_,Tt)|0,l=l+Math.imul(F,bt)|0,g=g+Math.imul(F,Tt)|0,f=f+Math.imul(O,St)|0,l=l+Math.imul(O,It)|0,l=l+Math.imul(P,St)|0,g=g+Math.imul(P,It)|0;var fr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(fr>>>26)|0,fr&=67108863,f=Math.imul(nt,ct),l=Math.imul(nt,lt),l=l+Math.imul(ot,ct)|0,g=Math.imul(ot,lt),f=f+Math.imul(tt,ut)|0,l=l+Math.imul(tt,mt)|0,l=l+Math.imul(et,ut)|0,g=g+Math.imul(et,mt)|0,f=f+Math.imul(J,pt)|0,l=l+Math.imul(J,dt)|0,l=l+Math.imul(Z,pt)|0,g=g+Math.imul(Z,dt)|0,f=f+Math.imul(Q,ft)|0,l=l+Math.imul(Q,ht)|0,l=l+Math.imul(Y,ft)|0,g=g+Math.imul(Y,ht)|0,f=f+Math.imul(z,gt)|0,l=l+Math.imul(z,yt)|0,l=l+Math.imul(G,gt)|0,g=g+Math.imul(G,yt)|0,f=f+Math.imul(K,bt)|0,l=l+Math.imul(K,Tt)|0,l=l+Math.imul($,bt)|0,g=g+Math.imul($,Tt)|0,f=f+Math.imul(_,St)|0,l=l+Math.imul(_,It)|0,l=l+Math.imul(F,St)|0,g=g+Math.imul(F,It)|0,f=f+Math.imul(O,wt)|0,l=l+Math.imul(O,Ct)|0,l=l+Math.imul(P,wt)|0,g=g+Math.imul(P,Ct)|0;var hr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(hr>>>26)|0,hr&=67108863,f=Math.imul(at,ct),l=Math.imul(at,lt),l=l+Math.imul(it,ct)|0,g=Math.imul(it,lt),f=f+Math.imul(nt,ut)|0,l=l+Math.imul(nt,mt)|0,l=l+Math.imul(ot,ut)|0,g=g+Math.imul(ot,mt)|0,f=f+Math.imul(tt,pt)|0,l=l+Math.imul(tt,dt)|0,l=l+Math.imul(et,pt)|0,g=g+Math.imul(et,dt)|0,f=f+Math.imul(J,ft)|0,l=l+Math.imul(J,ht)|0,l=l+Math.imul(Z,ft)|0,g=g+Math.imul(Z,ht)|0,f=f+Math.imul(Q,gt)|0,l=l+Math.imul(Q,yt)|0,l=l+Math.imul(Y,gt)|0,g=g+Math.imul(Y,yt)|0,f=f+Math.imul(z,bt)|0,l=l+Math.imul(z,Tt)|0,l=l+Math.imul(G,bt)|0,g=g+Math.imul(G,Tt)|0,f=f+Math.imul(K,St)|0,l=l+Math.imul(K,It)|0,l=l+Math.imul($,St)|0,g=g+Math.imul($,It)|0,f=f+Math.imul(_,wt)|0,l=l+Math.imul(_,Ct)|0,l=l+Math.imul(F,wt)|0,g=g+Math.imul(F,Ct)|0,f=f+Math.imul(O,Dt)|0,l=l+Math.imul(O,xt)|0,l=l+Math.imul(P,Dt)|0,g=g+Math.imul(P,xt)|0;var gr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(gr>>>26)|0,gr&=67108863,f=Math.imul(rt,ct),l=Math.imul(rt,lt),l=l+Math.imul(st,ct)|0,g=Math.imul(st,lt),f=f+Math.imul(at,ut)|0,l=l+Math.imul(at,mt)|0,l=l+Math.imul(it,ut)|0,g=g+Math.imul(it,mt)|0,f=f+Math.imul(nt,pt)|0,l=l+Math.imul(nt,dt)|0,l=l+Math.imul(ot,pt)|0,g=g+Math.imul(ot,dt)|0,f=f+Math.imul(tt,ft)|0,l=l+Math.imul(tt,ht)|0,l=l+Math.imul(et,ft)|0,g=g+Math.imul(et,ht)|0,f=f+Math.imul(J,gt)|0,l=l+Math.imul(J,yt)|0,l=l+Math.imul(Z,gt)|0,g=g+Math.imul(Z,yt)|0,f=f+Math.imul(Q,bt)|0,l=l+Math.imul(Q,Tt)|0,l=l+Math.imul(Y,bt)|0,g=g+Math.imul(Y,Tt)|0,f=f+Math.imul(z,St)|0,l=l+Math.imul(z,It)|0,l=l+Math.imul(G,St)|0,g=g+Math.imul(G,It)|0,f=f+Math.imul(K,wt)|0,l=l+Math.imul(K,Ct)|0,l=l+Math.imul($,wt)|0,g=g+Math.imul($,Ct)|0,f=f+Math.imul(_,Dt)|0,l=l+Math.imul(_,xt)|0,l=l+Math.imul(F,Dt)|0,g=g+Math.imul(F,xt)|0,f=f+Math.imul(O,kt)|0,l=l+Math.imul(O,vt)|0,l=l+Math.imul(P,kt)|0,g=g+Math.imul(P,vt)|0;var yr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(yr>>>26)|0,yr&=67108863,f=Math.imul(rt,ut),l=Math.imul(rt,mt),l=l+Math.imul(st,ut)|0,g=Math.imul(st,mt),f=f+Math.imul(at,pt)|0,l=l+Math.imul(at,dt)|0,l=l+Math.imul(it,pt)|0,g=g+Math.imul(it,dt)|0,f=f+Math.imul(nt,ft)|0,l=l+Math.imul(nt,ht)|0,l=l+Math.imul(ot,ft)|0,g=g+Math.imul(ot,ht)|0,f=f+Math.imul(tt,gt)|0,l=l+Math.imul(tt,yt)|0,l=l+Math.imul(et,gt)|0,g=g+Math.imul(et,yt)|0,f=f+Math.imul(J,bt)|0,l=l+Math.imul(J,Tt)|0,l=l+Math.imul(Z,bt)|0,g=g+Math.imul(Z,Tt)|0,f=f+Math.imul(Q,St)|0,l=l+Math.imul(Q,It)|0,l=l+Math.imul(Y,St)|0,g=g+Math.imul(Y,It)|0,f=f+Math.imul(z,wt)|0,l=l+Math.imul(z,Ct)|0,l=l+Math.imul(G,wt)|0,g=g+Math.imul(G,Ct)|0,f=f+Math.imul(K,Dt)|0,l=l+Math.imul(K,xt)|0,l=l+Math.imul($,Dt)|0,g=g+Math.imul($,xt)|0,f=f+Math.imul(_,kt)|0,l=l+Math.imul(_,vt)|0,l=l+Math.imul(F,kt)|0,g=g+Math.imul(F,vt)|0;var br=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(br>>>26)|0,br&=67108863,f=Math.imul(rt,pt),l=Math.imul(rt,dt),l=l+Math.imul(st,pt)|0,g=Math.imul(st,dt),f=f+Math.imul(at,ft)|0,l=l+Math.imul(at,ht)|0,l=l+Math.imul(it,ft)|0,g=g+Math.imul(it,ht)|0,f=f+Math.imul(nt,gt)|0,l=l+Math.imul(nt,yt)|0,l=l+Math.imul(ot,gt)|0,g=g+Math.imul(ot,yt)|0,f=f+Math.imul(tt,bt)|0,l=l+Math.imul(tt,Tt)|0,l=l+Math.imul(et,bt)|0,g=g+Math.imul(et,Tt)|0,f=f+Math.imul(J,St)|0,l=l+Math.imul(J,It)|0,l=l+Math.imul(Z,St)|0,g=g+Math.imul(Z,It)|0,f=f+Math.imul(Q,wt)|0,l=l+Math.imul(Q,Ct)|0,l=l+Math.imul(Y,wt)|0,g=g+Math.imul(Y,Ct)|0,f=f+Math.imul(z,Dt)|0,l=l+Math.imul(z,xt)|0,l=l+Math.imul(G,Dt)|0,g=g+Math.imul(G,xt)|0,f=f+Math.imul(K,kt)|0,l=l+Math.imul(K,vt)|0,l=l+Math.imul($,kt)|0,g=g+Math.imul($,vt)|0;var Tr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Tr>>>26)|0,Tr&=67108863,f=Math.imul(rt,ft),l=Math.imul(rt,ht),l=l+Math.imul(st,ft)|0,g=Math.imul(st,ht),f=f+Math.imul(at,gt)|0,l=l+Math.imul(at,yt)|0,l=l+Math.imul(it,gt)|0,g=g+Math.imul(it,yt)|0,f=f+Math.imul(nt,bt)|0,l=l+Math.imul(nt,Tt)|0,l=l+Math.imul(ot,bt)|0,g=g+Math.imul(ot,Tt)|0,f=f+Math.imul(tt,St)|0,l=l+Math.imul(tt,It)|0,l=l+Math.imul(et,St)|0,g=g+Math.imul(et,It)|0,f=f+Math.imul(J,wt)|0,l=l+Math.imul(J,Ct)|0,l=l+Math.imul(Z,wt)|0,g=g+Math.imul(Z,Ct)|0,f=f+Math.imul(Q,Dt)|0,l=l+Math.imul(Q,xt)|0,l=l+Math.imul(Y,Dt)|0,g=g+Math.imul(Y,xt)|0,f=f+Math.imul(z,kt)|0,l=l+Math.imul(z,vt)|0,l=l+Math.imul(G,kt)|0,g=g+Math.imul(G,vt)|0;var Sr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Sr>>>26)|0,Sr&=67108863,f=Math.imul(rt,gt),l=Math.imul(rt,yt),l=l+Math.imul(st,gt)|0,g=Math.imul(st,yt),f=f+Math.imul(at,bt)|0,l=l+Math.imul(at,Tt)|0,l=l+Math.imul(it,bt)|0,g=g+Math.imul(it,Tt)|0,f=f+Math.imul(nt,St)|0,l=l+Math.imul(nt,It)|0,l=l+Math.imul(ot,St)|0,g=g+Math.imul(ot,It)|0,f=f+Math.imul(tt,wt)|0,l=l+Math.imul(tt,Ct)|0,l=l+Math.imul(et,wt)|0,g=g+Math.imul(et,Ct)|0,f=f+Math.imul(J,Dt)|0,l=l+Math.imul(J,xt)|0,l=l+Math.imul(Z,Dt)|0,g=g+Math.imul(Z,xt)|0,f=f+Math.imul(Q,kt)|0,l=l+Math.imul(Q,vt)|0,l=l+Math.imul(Y,kt)|0,g=g+Math.imul(Y,vt)|0;var Ir=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Ir>>>26)|0,Ir&=67108863,f=Math.imul(rt,bt),l=Math.imul(rt,Tt),l=l+Math.imul(st,bt)|0,g=Math.imul(st,Tt),f=f+Math.imul(at,St)|0,l=l+Math.imul(at,It)|0,l=l+Math.imul(it,St)|0,g=g+Math.imul(it,It)|0,f=f+Math.imul(nt,wt)|0,l=l+Math.imul(nt,Ct)|0,l=l+Math.imul(ot,wt)|0,g=g+Math.imul(ot,Ct)|0,f=f+Math.imul(tt,Dt)|0,l=l+Math.imul(tt,xt)|0,l=l+Math.imul(et,Dt)|0,g=g+Math.imul(et,xt)|0,f=f+Math.imul(J,kt)|0,l=l+Math.imul(J,vt)|0,l=l+Math.imul(Z,kt)|0,g=g+Math.imul(Z,vt)|0;var wr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(wr>>>26)|0,wr&=67108863,f=Math.imul(rt,St),l=Math.imul(rt,It),l=l+Math.imul(st,St)|0,g=Math.imul(st,It),f=f+Math.imul(at,wt)|0,l=l+Math.imul(at,Ct)|0,l=l+Math.imul(it,wt)|0,g=g+Math.imul(it,Ct)|0,f=f+Math.imul(nt,Dt)|0,l=l+Math.imul(nt,xt)|0,l=l+Math.imul(ot,Dt)|0,g=g+Math.imul(ot,xt)|0,f=f+Math.imul(tt,kt)|0,l=l+Math.imul(tt,vt)|0,l=l+Math.imul(et,kt)|0,g=g+Math.imul(et,vt)|0;var Cr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Cr>>>26)|0,Cr&=67108863,f=Math.imul(rt,wt),l=Math.imul(rt,Ct),l=l+Math.imul(st,wt)|0,g=Math.imul(st,Ct),f=f+Math.imul(at,Dt)|0,l=l+Math.imul(at,xt)|0,l=l+Math.imul(it,Dt)|0,g=g+Math.imul(it,xt)|0,f=f+Math.imul(nt,kt)|0,l=l+Math.imul(nt,vt)|0,l=l+Math.imul(ot,kt)|0,g=g+Math.imul(ot,vt)|0;var Dr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,f=Math.imul(rt,Dt),l=Math.imul(rt,xt),l=l+Math.imul(st,Dt)|0,g=Math.imul(st,xt),f=f+Math.imul(at,kt)|0,l=l+Math.imul(at,vt)|0,l=l+Math.imul(it,kt)|0,g=g+Math.imul(it,vt)|0;var xr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(xr>>>26)|0,xr&=67108863,f=Math.imul(rt,kt),l=Math.imul(rt,vt),l=l+Math.imul(st,kt)|0,g=Math.imul(st,vt);var kr=(C+f|0)+((l&8191)<<13)|0;return C=(g+(l>>>13)|0)+(kr>>>26)|0,kr&=67108863,T[0]=cr,T[1]=lr,T[2]=ur,T[3]=mr,T[4]=pr,T[5]=dr,T[6]=fr,T[7]=hr,T[8]=gr,T[9]=yr,T[10]=br,T[11]=Tr,T[12]=Sr,T[13]=Ir,T[14]=wr,T[15]=Cr,T[16]=Dr,T[17]=xr,T[18]=kr,C!==0&&(T[19]=C,m.length++),m};Math.imul||(U=L);function q(y,r,u){u.negative=r.negative^y.negative,u.length=y.length+r.length;for(var m=0,d=0,h=0;h<u.length-1;h++){var T=d;d=0;for(var C=m&67108863,f=Math.min(h,r.length-1),l=Math.max(0,h-y.length+1);l<=f;l++){var g=h-l,v=y.words[g]|0,O=r.words[l]|0,P=v*O,B=P&67108863;T=T+(P/67108864|0)|0,B=B+C|0,C=B&67108863,T=T+(B>>>26)|0,d+=T>>>26,T&=67108863}u.words[h]=C,m=T,T=d}return m!==0?u.words[h]=m:u.length--,u._strip()}function Mt(y,r,u){return q(y,r,u)}o.prototype.mulTo=function(r,u){var m,d=this.length+r.length;return this.length===10&&r.length===10?m=U(this,r,u):d<63?m=L(this,r,u):d<1024?m=q(this,r,u):m=Mt(this,r,u),m};function W(y,r){this.x=y,this.y=r}W.prototype.makeRBT=function(r){for(var u=new Array(r),m=o.prototype._countBits(r)-1,d=0;d<r;d++)u[d]=this.revBin(d,m,r);return u},W.prototype.revBin=function(r,u,m){if(r===0||r===m-1)return r;for(var d=0,h=0;h<u;h++)d|=(r&1)<<u-h-1,r>>=1;return d},W.prototype.permute=function(r,u,m,d,h,T){for(var C=0;C<T;C++)d[C]=u[r[C]],h[C]=m[r[C]]},W.prototype.transform=function(r,u,m,d,h,T){this.permute(T,r,u,m,d,h);for(var C=1;C<h;C<<=1)for(var f=C<<1,l=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),v=0;v<h;v+=f)for(var O=l,P=g,B=0;B<C;B++){var _=m[v+B],F=d[v+B],ae=m[v+B+C],K=d[v+B+C],$=O*ae-P*K;K=O*K+P*ae,ae=$,m[v+B]=_+ae,d[v+B]=F+K,m[v+B+C]=_-ae,d[v+B+C]=F-K,B!==f&&($=l*O-g*P,P=l*P+g*O,O=$)}},W.prototype.guessLen13b=function(r,u){var m=Math.max(u,r)|1,d=m&1,h=0;for(m=m/2|0;m;m=m>>>1)h++;return 1<<h+1+d},W.prototype.conjugate=function(r,u,m){if(!(m<=1))for(var d=0;d<m/2;d++){var h=r[d];r[d]=r[m-d-1],r[m-d-1]=h,h=u[d],u[d]=-u[m-d-1],u[m-d-1]=-h}},W.prototype.normalize13b=function(r,u){for(var m=0,d=0;d<u/2;d++){var h=Math.round(r[2*d+1]/u)*8192+Math.round(r[2*d]/u)+m;r[d]=h&67108863,h<67108864?m=0:m=h/67108864|0}return r},W.prototype.convert13b=function(r,u,m,d){for(var h=0,T=0;T<u;T++)h=h+(r[T]|0),m[2*T]=h&8191,h=h>>>13,m[2*T+1]=h&8191,h=h>>>13;for(T=2*u;T<d;++T)m[T]=0;t(h===0),t((h&-8192)===0)},W.prototype.stub=function(r){for(var u=new Array(r),m=0;m<r;m++)u[m]=0;return u},W.prototype.mulp=function(r,u,m){var d=2*this.guessLen13b(r.length,u.length),h=this.makeRBT(d),T=this.stub(d),C=new Array(d),f=new Array(d),l=new Array(d),g=new Array(d),v=new Array(d),O=new Array(d),P=m.words;P.length=d,this.convert13b(r.words,r.length,C,d),this.convert13b(u.words,u.length,g,d),this.transform(C,T,f,l,d,h),this.transform(g,T,v,O,d,h);for(var B=0;B<d;B++){var _=f[B]*v[B]-l[B]*O[B];l[B]=f[B]*O[B]+l[B]*v[B],f[B]=_}return this.conjugate(f,l,d),this.transform(f,l,P,T,d,h),this.conjugate(P,T,d),this.normalize13b(P,d),m.negative=r.negative^u.negative,m.length=r.length+u.length,m._strip()},o.prototype.mul=function(r){var u=new o(null);return u.words=new Array(this.length+r.length),this.mulTo(r,u)},o.prototype.mulf=function(r){var u=new o(null);return u.words=new Array(this.length+r.length),Mt(this,r,u)},o.prototype.imul=function(r){return this.clone().mulTo(r,this)},o.prototype.imuln=function(r){var u=r<0;u&&(r=-r),t(typeof r=="number"),t(r<67108864);for(var m=0,d=0;d<this.length;d++){var h=(this.words[d]|0)*r,T=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=T>>>26,this.words[d]=T&67108863}return m!==0&&(this.words[d]=m,this.length++),this.length=r===0?1:this.length,u?this.ineg():this},o.prototype.muln=function(r){return this.clone().imuln(r)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(r){var u=M(r);if(u.length===0)return new o(1);for(var m=this,d=0;d<u.length&&u[d]===0;d++,m=m.sqr());if(++d<u.length)for(var h=m.sqr();d<u.length;d++,h=h.sqr())u[d]!==0&&(m=m.mul(h));return m},o.prototype.iushln=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26,d=67108863>>>26-u<<26-u,h;if(u!==0){var T=0;for(h=0;h<this.length;h++){var C=this.words[h]&d,f=(this.words[h]|0)-C<<u;this.words[h]=f|T,T=C>>>26-u}T&&(this.words[h]=T,this.length++)}if(m!==0){for(h=this.length-1;h>=0;h--)this.words[h+m]=this.words[h];for(h=0;h<m;h++)this.words[h]=0;this.length+=m}return this._strip()},o.prototype.ishln=function(r){return t(this.negative===0),this.iushln(r)},o.prototype.iushrn=function(r,u,m){t(typeof r=="number"&&r>=0);var d;u?d=(u-u%26)/26:d=0;var h=r%26,T=Math.min((r-h)/26,this.length),C=67108863^67108863>>>h<<h,f=m;if(d-=T,d=Math.max(0,d),f){for(var l=0;l<T;l++)f.words[l]=this.words[l];f.length=T}if(T!==0)if(this.length>T)for(this.length-=T,l=0;l<this.length;l++)this.words[l]=this.words[l+T];else this.words[0]=0,this.length=1;var g=0;for(l=this.length-1;l>=0&&(g!==0||l>=d);l--){var v=this.words[l]|0;this.words[l]=g<<26-h|v>>>h,g=v&C}return f&&g!==0&&(f.words[f.length++]=g),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},o.prototype.ishrn=function(r,u,m){return t(this.negative===0),this.iushrn(r,u,m)},o.prototype.shln=function(r){return this.clone().ishln(r)},o.prototype.ushln=function(r){return this.clone().iushln(r)},o.prototype.shrn=function(r){return this.clone().ishrn(r)},o.prototype.ushrn=function(r){return this.clone().iushrn(r)},o.prototype.testn=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26,d=1<<u;if(this.length<=m)return!1;var h=this.words[m];return!!(h&d)},o.prototype.imaskn=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26;if(t(this.negative===0,"imaskn works only with positive numbers"),this.length<=m)return this;if(u!==0&&m++,this.length=Math.min(m,this.length),u!==0){var d=67108863^67108863>>>u<<u;this.words[this.length-1]&=d}return this._strip()},o.prototype.maskn=function(r){return this.clone().imaskn(r)},o.prototype.iaddn=function(r){return t(typeof r=="number"),t(r<67108864),r<0?this.isubn(-r):this.negative!==0?this.length===1&&(this.words[0]|0)<=r?(this.words[0]=r-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(r),this.negative=1,this):this._iaddn(r)},o.prototype._iaddn=function(r){this.words[0]+=r;for(var u=0;u<this.length&&this.words[u]>=67108864;u++)this.words[u]-=67108864,u===this.length-1?this.words[u+1]=1:this.words[u+1]++;return this.length=Math.max(this.length,u+1),this},o.prototype.isubn=function(r){if(t(typeof r=="number"),t(r<67108864),r<0)return this.iaddn(-r);if(this.negative!==0)return this.negative=0,this.iaddn(r),this.negative=1,this;if(this.words[0]-=r,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var u=0;u<this.length&&this.words[u]<0;u++)this.words[u]+=67108864,this.words[u+1]-=1;return this._strip()},o.prototype.addn=function(r){return this.clone().iaddn(r)},o.prototype.subn=function(r){return this.clone().isubn(r)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(r,u,m){var d=r.length+m,h;this._expand(d);var T,C=0;for(h=0;h<r.length;h++){T=(this.words[h+m]|0)+C;var f=(r.words[h]|0)*u;T-=f&67108863,C=(T>>26)-(f/67108864|0),this.words[h+m]=T&67108863}for(;h<this.length-m;h++)T=(this.words[h+m]|0)+C,C=T>>26,this.words[h+m]=T&67108863;if(C===0)return this._strip();for(t(C===-1),C=0,h=0;h<this.length;h++)T=-(this.words[h]|0)+C,C=T>>26,this.words[h]=T&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(r,u){var m=this.length-r.length,d=this.clone(),h=r,T=h.words[h.length-1]|0,C=this._countBits(T);m=26-C,m!==0&&(h=h.ushln(m),d.iushln(m),T=h.words[h.length-1]|0);var f=d.length-h.length,l;if(u!=="mod"){l=new o(null),l.length=f+1,l.words=new Array(l.length);for(var g=0;g<l.length;g++)l.words[g]=0}var v=d.clone()._ishlnsubmul(h,1,f);v.negative===0&&(d=v,l&&(l.words[f]=1));for(var O=f-1;O>=0;O--){var P=(d.words[h.length+O]|0)*67108864+(d.words[h.length+O-1]|0);for(P=Math.min(P/T|0,67108863),d._ishlnsubmul(h,P,O);d.negative!==0;)P--,d.negative=0,d._ishlnsubmul(h,1,O),d.isZero()||(d.negative^=1);l&&(l.words[O]=P)}return l&&l._strip(),d._strip(),u!=="div"&&m!==0&&d.iushrn(m),{div:l||null,mod:d}},o.prototype.divmod=function(r,u,m){if(t(!r.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var d,h,T;return this.negative!==0&&r.negative===0?(T=this.neg().divmod(r,u),u!=="mod"&&(d=T.div.neg()),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.iadd(r)),{div:d,mod:h}):this.negative===0&&r.negative!==0?(T=this.divmod(r.neg(),u),u!=="mod"&&(d=T.div.neg()),{div:d,mod:T.mod}):(this.negative&r.negative)!==0?(T=this.neg().divmod(r.neg(),u),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.isub(r)),{div:T.div,mod:h}):r.length>this.length||this.cmp(r)<0?{div:new o(0),mod:this}:r.length===1?u==="div"?{div:this.divn(r.words[0]),mod:null}:u==="mod"?{div:null,mod:new o(this.modrn(r.words[0]))}:{div:this.divn(r.words[0]),mod:new o(this.modrn(r.words[0]))}:this._wordDiv(r,u)},o.prototype.div=function(r){return this.divmod(r,"div",!1).div},o.prototype.mod=function(r){return this.divmod(r,"mod",!1).mod},o.prototype.umod=function(r){return this.divmod(r,"mod",!0).mod},o.prototype.divRound=function(r){var u=this.divmod(r);if(u.mod.isZero())return u.div;var m=u.div.negative!==0?u.mod.isub(r):u.mod,d=r.ushrn(1),h=r.andln(1),T=m.cmp(d);return T<0||h===1&&T===0?u.div:u.div.negative!==0?u.div.isubn(1):u.div.iaddn(1)},o.prototype.modrn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var m=(1<<26)%r,d=0,h=this.length-1;h>=0;h--)d=(m*d+(this.words[h]|0))%r;return u?-d:d},o.prototype.modn=function(r){return this.modrn(r)},o.prototype.idivn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var m=0,d=this.length-1;d>=0;d--){var h=(this.words[d]|0)+m*67108864;this.words[d]=h/r|0,m=h%r}return this._strip(),u?this.ineg():this},o.prototype.divn=function(r){return this.clone().idivn(r)},o.prototype.egcd=function(r){t(r.negative===0),t(!r.isZero());var u=this,m=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var d=new o(1),h=new o(0),T=new o(0),C=new o(1),f=0;u.isEven()&&m.isEven();)u.iushrn(1),m.iushrn(1),++f;for(var l=m.clone(),g=u.clone();!u.isZero();){for(var v=0,O=1;(u.words[0]&O)===0&&v<26;++v,O<<=1);if(v>0)for(u.iushrn(v);v-- >0;)(d.isOdd()||h.isOdd())&&(d.iadd(l),h.isub(g)),d.iushrn(1),h.iushrn(1);for(var P=0,B=1;(m.words[0]&B)===0&&P<26;++P,B<<=1);if(P>0)for(m.iushrn(P);P-- >0;)(T.isOdd()||C.isOdd())&&(T.iadd(l),C.isub(g)),T.iushrn(1),C.iushrn(1);u.cmp(m)>=0?(u.isub(m),d.isub(T),h.isub(C)):(m.isub(u),T.isub(d),C.isub(h))}return{a:T,b:C,gcd:m.iushln(f)}},o.prototype._invmp=function(r){t(r.negative===0),t(!r.isZero());var u=this,m=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var d=new o(1),h=new o(0),T=m.clone();u.cmpn(1)>0&&m.cmpn(1)>0;){for(var C=0,f=1;(u.words[0]&f)===0&&C<26;++C,f<<=1);if(C>0)for(u.iushrn(C);C-- >0;)d.isOdd()&&d.iadd(T),d.iushrn(1);for(var l=0,g=1;(m.words[0]&g)===0&&l<26;++l,g<<=1);if(l>0)for(m.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(T),h.iushrn(1);u.cmp(m)>=0?(u.isub(m),d.isub(h)):(m.isub(u),h.isub(d))}var v;return u.cmpn(1)===0?v=d:v=h,v.cmpn(0)<0&&v.iadd(r),v},o.prototype.gcd=function(r){if(this.isZero())return r.abs();if(r.isZero())return this.abs();var u=this.clone(),m=r.clone();u.negative=0,m.negative=0;for(var d=0;u.isEven()&&m.isEven();d++)u.iushrn(1),m.iushrn(1);do{for(;u.isEven();)u.iushrn(1);for(;m.isEven();)m.iushrn(1);var h=u.cmp(m);if(h<0){var T=u;u=m,m=T}else if(h===0||m.cmpn(1)===0)break;u.isub(m)}while(!0);return m.iushln(d)},o.prototype.invm=function(r){return this.egcd(r).a.umod(r)},o.prototype.isEven=function(){return(this.words[0]&1)===0},o.prototype.isOdd=function(){return(this.words[0]&1)===1},o.prototype.andln=function(r){return this.words[0]&r},o.prototype.bincn=function(r){t(typeof r=="number");var u=r%26,m=(r-u)/26,d=1<<u;if(this.length<=m)return this._expand(m+1),this.words[m]|=d,this;for(var h=d,T=m;h!==0&&T<this.length;T++){var C=this.words[T]|0;C+=h,h=C>>>26,C&=67108863,this.words[T]=C}return h!==0&&(this.words[T]=h,this.length++),this},o.prototype.isZero=function(){return this.length===1&&this.words[0]===0},o.prototype.cmpn=function(r){var u=r<0;if(this.negative!==0&&!u)return-1;if(this.negative===0&&u)return 1;this._strip();var m;if(this.length>1)m=1;else{u&&(r=-r),t(r<=67108863,"Number is too big");var d=this.words[0]|0;m=d===r?0:d<r?-1:1}return this.negative!==0?-m|0:m},o.prototype.cmp=function(r){if(this.negative!==0&&r.negative===0)return-1;if(this.negative===0&&r.negative!==0)return 1;var u=this.ucmp(r);return this.negative!==0?-u|0:u},o.prototype.ucmp=function(r){if(this.length>r.length)return 1;if(this.length<r.length)return-1;for(var u=0,m=this.length-1;m>=0;m--){var d=this.words[m]|0,h=r.words[m]|0;if(d!==h){d<h?u=-1:d>h&&(u=1);break}}return u},o.prototype.gtn=function(r){return this.cmpn(r)===1},o.prototype.gt=function(r){return this.cmp(r)===1},o.prototype.gten=function(r){return this.cmpn(r)>=0},o.prototype.gte=function(r){return this.cmp(r)>=0},o.prototype.ltn=function(r){return this.cmpn(r)===-1},o.prototype.lt=function(r){return this.cmp(r)===-1},o.prototype.lten=function(r){return this.cmpn(r)<=0},o.prototype.lte=function(r){return this.cmp(r)<=0},o.prototype.eqn=function(r){return this.cmpn(r)===0},o.prototype.eq=function(r){return this.cmp(r)===0},o.red=function(r){return new H(r)},o.prototype.toRed=function(r){return t(!this.red,"Already a number in reduction context"),t(this.negative===0,"red works only with positives"),r.convertTo(this)._forceRed(r)},o.prototype.fromRed=function(){return t(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(r){return this.red=r,this},o.prototype.forceRed=function(r){return t(!this.red,"Already a number in reduction context"),this._forceRed(r)},o.prototype.redAdd=function(r){return t(this.red,"redAdd works only with red numbers"),this.red.add(this,r)},o.prototype.redIAdd=function(r){return t(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,r)},o.prototype.redSub=function(r){return t(this.red,"redSub works only with red numbers"),this.red.sub(this,r)},o.prototype.redISub=function(r){return t(this.red,"redISub works only with red numbers"),this.red.isub(this,r)},o.prototype.redShl=function(r){return t(this.red,"redShl works only with red numbers"),this.red.shl(this,r)},o.prototype.redMul=function(r){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,r),this.red.mul(this,r)},o.prototype.redIMul=function(r){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,r),this.red.imul(this,r)},o.prototype.redSqr=function(){return t(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return t(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return t(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return t(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return t(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(r){return t(this.red&&!r.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,r)};var we={k256:null,p224:null,p192:null,p25519:null};function Rt(y,r){this.name=y,this.p=new o(r,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}Rt.prototype._tmp=function(){var r=new o(null);return r.words=new Array(Math.ceil(this.n/13)),r},Rt.prototype.ireduce=function(r){var u=r,m;do this.split(u,this.tmp),u=this.imulK(u),u=u.iadd(this.tmp),m=u.bitLength();while(m>this.n);var d=m<this.n?-1:u.ucmp(this.p);return d===0?(u.words[0]=0,u.length=1):d>0?u.isub(this.p):u.strip!==void 0?u.strip():u._strip(),u},Rt.prototype.split=function(r,u){r.iushrn(this.n,0,u)},Rt.prototype.imulK=function(r){return r.imul(this.k)};function Ce(){Rt.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(Ce,Rt),Ce.prototype.split=function(r,u){for(var m=4194303,d=Math.min(r.length,9),h=0;h<d;h++)u.words[h]=r.words[h];if(u.length=d,r.length<=9){r.words[0]=0,r.length=1;return}var T=r.words[9];for(u.words[u.length++]=T&m,h=10;h<r.length;h++){var C=r.words[h]|0;r.words[h-10]=(C&m)<<4|T>>>22,T=C}T>>>=22,r.words[h-10]=T,T===0&&r.length>10?r.length-=10:r.length-=9},Ce.prototype.imulK=function(r){r.words[r.length]=0,r.words[r.length+1]=0,r.length+=2;for(var u=0,m=0;m<r.length;m++){var d=r.words[m]|0;u+=d*977,r.words[m]=u&67108863,u=d*64+(u/67108864|0)}return r.words[r.length-1]===0&&(r.length--,r.words[r.length-1]===0&&r.length--),r};function yn(){Rt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(yn,Rt);function bn(){Rt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(bn,Rt);function Fe(){Rt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Fe,Rt),Fe.prototype.imulK=function(r){for(var u=0,m=0;m<r.length;m++){var d=(r.words[m]|0)*19+u,h=d&67108863;d>>>=26,r.words[m]=h,u=d}return u!==0&&(r.words[r.length++]=u),r},o._prime=function(r){if(we[r])return we[r];var u;if(r==="k256")u=new Ce;else if(r==="p224")u=new yn;else if(r==="p192")u=new bn;else if(r==="p25519")u=new Fe;else throw new Error("Unknown prime "+r);return we[r]=u,u};function H(y){if(typeof y=="string"){var r=o._prime(y);this.m=r.p,this.prime=r}else t(y.gtn(1),"modulus must be greater than 1"),this.m=y,this.prime=null}H.prototype._verify1=function(r){t(r.negative===0,"red works only with positives"),t(r.red,"red works only with red numbers")},H.prototype._verify2=function(r,u){t((r.negative|u.negative)===0,"red works only with positives"),t(r.red&&r.red===u.red,"red works only with red numbers")},H.prototype.imod=function(r){return this.prime?this.prime.ireduce(r)._forceRed(this):(b(r,r.umod(this.m)._forceRed(this)),r)},H.prototype.neg=function(r){return r.isZero()?r.clone():this.m.sub(r)._forceRed(this)},H.prototype.add=function(r,u){this._verify2(r,u);var m=r.add(u);return m.cmp(this.m)>=0&&m.isub(this.m),m._forceRed(this)},H.prototype.iadd=function(r,u){this._verify2(r,u);var m=r.iadd(u);return m.cmp(this.m)>=0&&m.isub(this.m),m},H.prototype.sub=function(r,u){this._verify2(r,u);var m=r.sub(u);return m.cmpn(0)<0&&m.iadd(this.m),m._forceRed(this)},H.prototype.isub=function(r,u){this._verify2(r,u);var m=r.isub(u);return m.cmpn(0)<0&&m.iadd(this.m),m},H.prototype.shl=function(r,u){return this._verify1(r),this.imod(r.ushln(u))},H.prototype.imul=function(r,u){return this._verify2(r,u),this.imod(r.imul(u))},H.prototype.mul=function(r,u){return this._verify2(r,u),this.imod(r.mul(u))},H.prototype.isqr=function(r){return this.imul(r,r.clone())},H.prototype.sqr=function(r){return this.mul(r,r)},H.prototype.sqrt=function(r){if(r.isZero())return r.clone();var u=this.m.andln(3);if(t(u%2===1),u===3){var m=this.m.add(new o(1)).iushrn(2);return this.pow(r,m)}for(var d=this.m.subn(1),h=0;!d.isZero()&&d.andln(1)===0;)h++,d.iushrn(1);t(!d.isZero());var T=new o(1).toRed(this),C=T.redNeg(),f=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);this.pow(l,f).cmp(C)!==0;)l.redIAdd(C);for(var g=this.pow(l,d),v=this.pow(r,d.addn(1).iushrn(1)),O=this.pow(r,d),P=h;O.cmp(T)!==0;){for(var B=O,_=0;B.cmp(T)!==0;_++)B=B.redSqr();t(_<P);var F=this.pow(g,new o(1).iushln(P-_-1));v=v.redMul(F),g=F.redSqr(),O=O.redMul(g),P=_}return v},H.prototype.invm=function(r){var u=r._invmp(this.m);return u.negative!==0?(u.negative=0,this.imod(u).redNeg()):this.imod(u)},H.prototype.pow=function(r,u){if(u.isZero())return new o(1).toRed(this);if(u.cmpn(1)===0)return r.clone();var m=4,d=new Array(1<<m);d[0]=new o(1).toRed(this),d[1]=r;for(var h=2;h<d.length;h++)d[h]=this.mul(d[h-1],r);var T=d[0],C=0,f=0,l=u.bitLength()%26;for(l===0&&(l=26),h=u.length-1;h>=0;h--){for(var g=u.words[h],v=l-1;v>=0;v--){var O=g>>v&1;if(T!==d[0]&&(T=this.sqr(T)),O===0&&C===0){f=0;continue}C<<=1,C|=O,f++,!(f!==m&&(h!==0||v!==0))&&(T=this.mul(T,d[C]),f=0,C=0)}l=26}return T},H.prototype.convertTo=function(r){var u=r.umod(this.m);return u===r?u.clone():u},H.prototype.convertFrom=function(r){var u=r.clone();return u.red=null,u},o.mont=function(r){return new fe(r)};function fe(y){H.call(this,y),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}n(fe,H),fe.prototype.convertTo=function(r){return this.imod(r.ushln(this.shift))},fe.prototype.convertFrom=function(r){var u=this.imod(r.mul(this.rinv));return u.red=null,u},fe.prototype.imul=function(r,u){if(r.isZero()||u.isZero())return r.words[0]=0,r.length=1,r;var m=r.imul(u),d=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(d).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},fe.prototype.mul=function(r,u){if(r.isZero()||u.isZero())return new o(0)._forceRed(this);var m=r.mul(u),d=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(d).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},fe.prototype.invm=function(r){var u=this.imod(r._invmp(this.m).mul(this.r2));return u._forceRed(this)}})(typeof ds>"u"||ds,Bl)});import{TransactionType as xu}from"@msafe/sui3-utils";import{coinsList as gu,poolIdPoolNameMap as yu,poolInfo as Es,singleAssetPoolCoinMap as bu}from"@alphafi/alphafi-sdk";import{TransactionType as Ke}from"@msafe/sui3-utils";import{bcs as Tn,fromBase64 as Sn}from"@mysten/bcs";var In=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isClaimRewardTransaction())return this.decodeClaimReward();let e=this.getLiquidityChangeEvent();if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson,n=t.pool_id,o=yu[n];if(console.log("Decoder event data - ",t),console.log("Decoder poolName - ",o),this.isWithdrawAlphaEvent(e))return this.decodeWithdrawAlpha(t);if(this.isWithdrawEvent(t))return this.decodeWithdraw(o);if(this.isDoubleAssetDepositEvent(t,o))return this.decodeDoubleAssetDeposit(o,t);if(this.isSingleAssetDepositEvent(t,o))return this.decodeSingleAssetDeposit(o,t);throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(){return this.simResult.events.find(e=>this.isLiquidityChangeEventType(e.type))}isClaimRewardTransaction(){return!!this.getMoveCallCommand("get_user_rewards_all")}isLiquidityChangeEventType(e){return e.includes("LiquidityChangeEvent")||e.includes("LiquidityChangeNewNewEvent")||e.includes("WithdrawEventV2")}isWithdrawAlphaEvent(e){return e.type.includes("WithdrawEventV2")}isWithdrawEvent(e){return e.event_type===1}isDoubleAssetDepositEvent(e,t){return e.event_type===0&&Es[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&Es[t].assetTypes.length===1}extractXTokensAmount(){let e=this.inputs.find(o=>o.Pure!==void 0);if(!e||!e.Pure?.bytes)throw new Error("Unable to extract xTokensAmount from inputs");let{bytes:t}=e.Pure,n;return t.length===12?n=Tn.u64().parse(Sn(t)):t.length===24?n=Tn.u128().parse(Sn(t)):t.length===44?n=Tn.u256().parse(Sn(t)):n=Tn.u64().parse(Sn(t)),n}decodeDoubleAssetDeposit(e,t){let{amount_a:n,amount_b:o}=t,i=Number(n)>0;return console.log("Decoder.decodeDoubleAssetDeposit",n,o,i),{txType:Ke.Other,type:"depositDoubleAsset",intentionData:{poolName:e,amount:i?n:o,isAmountA:i}}}decodeSingleAssetDeposit(e,t){let{amount:n}=t;if(console.log("Decoder.decodeSingleAssetDeposit",n),this.getLiquidityChangeEvent().type.includes(":alphafi_navi_pool:")){let{coin:i}=bu[e],{expo:s}=gu[i];n=Math.floor(Number(n)/10**(9-s)).toString()}return{txType:Ke.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:Ke.Other,type:"withdraw",intentionData:{poolName:e,xTokensAmount:t}}}decodeWithdrawAlpha(e){let t=this.extractXTokensAmount(),{amount_withdrawn_from_locked:n}=e;return console.log("Decoder.decodeWithdrawAlpha",t,n),{txType:Ke.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:Ke.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as Su}from"@alphafi/alphafi-sdk";import Tu from"sort-keys-recursive";var I=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Tu(this.data))}};var wn=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t;return await Su(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as Iu}from"@alphafi/alphafi-sdk";var Cn=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i,isAmountA:s}=this.data;return await Iu(o,n.address,i,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as wu}from"@alphafi/alphafi-sdk";var Dn=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i}=this.data;return await wu(o,n.address,i)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as Cu}from"@alphafi/alphafi-sdk";var xn=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:i}=this.data;return await Cu(i,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as Du}from"@alphafi/alphafi-sdk";var kn=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:i}=this.data;return await Du(i,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new a(t)}};var vn=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n,account:o}=e,i=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("AlphaFiHelper Sim result - ",i);let c=new In(t,i).decode();return{txType:xu.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=Dn.fromData(e.intentionData);break;case"depositDoubleAsset":n=Cn.fromData(e.intentionData);break;case"withdraw":n=xn.fromData(e.intentionData);break;case"withdrawAlpha":n=kn.fromData(e.intentionData);break;case"claimReward":n=wn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as zu}from"@msafe/sui3-utils";import{TransactionType as Ut}from"@msafe/sui3-utils";import{bcs as Ar}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as Mr}from"bucket-protocol-sdk";var An=class{constructor(e){this.transaction=e}decode(){if(this.isSBUCKDepositTransaction())return this.decodeSBUCKDeposit();if(this.isSBUCKUnstakeTransaction())return this.decodeSBUCKUnstake();if(this.isSBUCKWithdrawTransaction())return this.decodeSBUCKWithdraw();if(this.isSBUCKClaimTransaction())return this.decodeSBUCKClaim();if(this.isLockedClaimTransaction())return this.decodeLockedClaim();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isCloseTransaction())return this.decodeClose();if(this.isTankDepositTransaction())return this.decodeTankDeposit();if(this.isTankWithdrawTransaction())return this.decodeTankWithdraw();if(this.isTankClaimTransaction())return this.decodeTankClaim();if(this.isPsmTransaction())return this.decodePsm();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getMoveCallModuleCommand(e,t){return this.commands.find(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getMoveCallPackageModuleCommand(e,t,n){return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.package===e&&o.MoveCall.module===t&&o.MoveCall.function===n)}getMoveCallModuleCommands(e,t){return this.commands.filter(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(e=>e.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(e=>e.$kind==="TransferObjects")}isPsmTransaction(){return!!this.getMoveCallCommand("charge_reservoir")||!!this.getMoveCallCommand("discharge_reservoir")}isStrapNewTransaction(){return!!this.getMoveCallModuleCommand("strap","new")}isBorrowTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","high_top_up")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow_with_strap")}isRepayTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","fully_repay")||!!this.getMoveCallModuleCommand("bucket_operations","fully_repay_with_strap")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw_with_strap")}isWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","withdraw")||!!this.getMoveCallModuleCommand("buck","withdraw_with_strap")}isCloseTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","destroy_empty_strap")}isTankDepositTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","deposit")}isTankWithdrawTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","withdraw")}isTankClaimTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","claim")}isSBUCKDepositTransaction(){return!!this.getMoveCallModuleCommand("buck","buck_to_sbuck")}isSBUCKWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","sbuck_to_buck")}isSBUCKStakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Mr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Mr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(Mr,"fountain_core","claim")}isLockedClaimTransaction(){return!!this.getMoveCallModuleCommand("proof_rule","claim")||!!this.getMoveCallModuleCommand("lst_proof_rule","claim")}isLstUnlockTransaction(){return!!this.getMoveCallModuleCommand("lst_proof_rule","unlock")}decodePsm(){let e,t,n="0",o=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return o.$kind==="Input"&&(n=this.getPureInputU64(o.Input)),this.getMoveCallCommand("charge_reservoir")?([e]=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments,t=!1):([e]=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments,t=!0),console.log("Decoder.decodePsm",e,n,t),{txType:Ut.Other,type:"psm",intentionData:{coinType:e,amount:n,buckToCoin:t}}}decodeBorrow(){let e="",t="0",n,o=this.getStrapId(),i="0",s=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(s.$kind==="Input"&&(i=this.getPureInputU64(s.Input)),this.getMoveCallCommand("high_top_up")){let c=this.getMoveCallCommand("high_top_up").MoveCall;[e]=c.typeArguments;let p=c.arguments[1];p.$kind==="Input"&&(t=this.getPureInputU64(p.Input));let b=c.arguments[3];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow")){let c=this.getMoveCallCommand("high_borrow").MoveCall;[e]=c.typeArguments;let p=c.arguments[4];p.$kind==="Input"&&(t=this.getPureInputU64(p.Input));let b=c.arguments[5];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let c=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=c.typeArguments;let p=c.arguments[5];p.$kind==="Input"&&(t=this.getPureInputU64(p.Input));let b=c.arguments[6];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}return{txType:Ut.Other,type:"borrow",intentionData:{collateralType:e,collateralAmount:i,borrowAmount:t,insertionPlace:n,strapId:o}}}decodeRepay(){let e="",t="0",n="0",i,s=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))[e]=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments;else if(this.getMoveCallCommand("fully_repay_with_strap"))[e]=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments;else if(this.getMoveCallCommand("repay_and_withdraw")){let c=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=c.typeArguments;let p=c.arguments[4];p.$kind==="Input"&&(n=this.getPureInputU64(p.Input));let b=c.arguments[5];if(b.$kind==="Input"){let w=this.getPureAddresses(b.Input);w.length===1&&([i]=w)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let c=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=c.typeArguments;let p=c.arguments[5];p.$kind==="Input"&&(n=this.getPureInputU64(p.Input));let b=c.arguments[6];if(b.$kind==="Input"){let w=this.getPureAddresses(b.Input);w.length===1&&([i]=w)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.Input))}return{txType:Ut.Other,type:"repay",intentionData:{collateralType:e,repayAmount:t,withdrawAmount:n,isSurplus:!1,insertionPlace:i,strapId:s}}}decodeWithdraw(){let e="",t="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let i=this.getMoveCallCommand("withdraw_with_strap").MoveCall;[e]=i.typeArguments;let s=i.arguments[4];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let c=i.arguments[5];if(c.$kind==="Input"){let p=this.getPureAddresses(c.Input);p.length===1&&([n]=p)}}else if(this.getMoveCallCommand("withdraw")){let i=this.getMoveCallCommand("withdraw").MoveCall;[e]=i.typeArguments;let s=i.arguments[3];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let c=i.arguments[4];if(c.$kind==="Input"){let p=this.getPureAddresses(c.Input);p.length===1&&([n]=p)}}return{txType:Ut.Other,type:"withdraw",intentionData:{collateralType:e,withdrawAmount:t,insertionPlace:n,strapId:o}}}decodeClose(){let e="",t=this.getStrapId();return this.getMoveCallCommand("destroy_empty_strap")&&([e]=this.getMoveCallCommand("destroy_empty_strap").MoveCall.typeArguments),{txType:Ut.Other,type:"close",intentionData:{collateralType:e,strapId:t}}}decodeSBUCKDeposit(){let t=this.getMoveCallCommand("into_balance").MoveCall.typeArguments[0],n="0",i=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];i.$kind==="Input"&&(n=this.getPureInputU64(i.Input));let s=this.isSBUCKStakeTransaction();return console.log("Decoder.decodeSBUCKDeposit",t,n,s),{txType:Ut.Other,type:"sbuck-deposit",intentionData:{coinType:t,amount:n,isStake:s}}}decodeSBUCKUnstake(){let e="0",t=this.isSBUCKStakeTransaction();if(t){let p=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];p.$kind==="Input"&&(e=this.getPureInputU64(p.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let c=0;c<o.length;c++){let p=o[c];n.push("")}else{let c=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let p=0;p<c.length;p++){let S=c[p].MoveCall.arguments[2];if(S.$kind==="Input"){let{objectId:w}=this.inputs[S.Input].UnresolvedObject;n.push(w)}}}let i=this.isSBUCKWithdrawTransaction(),s={stakeProofs:n,amount:e,isStake:t,toBuck:i};return console.log("Decoder.decodeSBUCKUnstake",s),{txType:Ut.Other,type:"sbuck-unstake",intentionData:s}}decodeSBUCKWithdraw(){let e="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return n.$kind==="Input"&&(e=this.getPureInputU64(n.Input)),console.log("Decoder.SBUCKWithdraw",e),{txType:Ut.Other,type:"sbuck-withdraw",intentionData:{amount:e}}}decodeSBUCKClaim(){let e=[],t=this.getMoveCallModuleCommands("fountain_core","claim");for(let n=0;n<t.length;n++){let i=t[n].MoveCall.arguments[2];if(i.$kind==="Input"){let{objectId:s}=this.inputs[i.Input].UnresolvedObject;e.push(s)}}return console.log("Decoder.decodeSBUCKClaim",e),{txType:Ut.Other,type:"sbuck-claim",intentionData:{stakeProofs:e}}}decodeTankDeposit(){let e="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];n.$kind==="Input"&&(e=this.getPureInputU64(n.Input));let i=this.getMoveCallModuleCommand("tank_operations","deposit").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankDeposit",i,e),{txType:Ut.Other,type:"tank-deposit",intentionData:{coinType:i,amount:e}}}decodeTankWithdraw(){let e=this.getMoveCallModuleCommand("tank_operations","withdraw").MoveCall,t=e.typeArguments[0],n="0",o=e.arguments[5];return o.$kind==="Input"&&(n=this.getPureInputU64(o.Input)),console.log("Decoder.decodeTankWithdraw",t,n),{txType:Ut.Other,type:"tank-withdraw",intentionData:{coinType:t,amount:n}}}decodeTankClaim(){let t=this.getMoveCallModuleCommand("tank_operations","claim").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankClaim",t),{txType:Ut.Other,type:"tank-claim",intentionData:{coinType:t}}}decodeLockedClaim(){let e="",t=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let i=0;i<n.length;i++)[e]=n[i].MoveCall.typeArguments,t++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let i=0;i<o.length;i++)[e]=o[i].MoveCall.typeArguments,t++;return console.log("Decoder.decodeLockedClaim",e,t),{txType:Ut.Other,type:"lock-claim",intentionData:{coinType:e,proofCount:t}}}getCoinInput(e){if(this.inputs[e].$kind!=="Object")throw new Error("not Object argument")}getStrapId(){let e;if(this.isStrapNewTransaction()?e="new":this.isLstUnlockTransaction()&&(e="locked"),!e){let t=this.getMoveCallModuleCommand("fountain","unstake");if(t){let n=t.MoveCall.arguments[2];n.$kind==="Input"&&(e=this.inputs[n.Input].UnresolvedObject.objectId)}}return e}getPureInputU64(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Ar.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Ar.vector(Ar.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as Mu}from"@msafe/sui3-utils";import{Transaction as vu}from"@mysten/sui/transactions";import{buildPsmTx as Au}from"bucket-protocol-sdk";import{BucketClient as ku}from"bucket-protocol-sdk";var Bt=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new ku(t,e.address)};var Ns=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:i}=a,s=new vu,c=Bt(t,e);return await Au(c,s,n,o,i,e.address),s};var Mn=class a extends I{constructor(t){super(t);this.data=t}txType=Mu.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await Ns(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Eu}from"@msafe/sui3-utils";import{Transaction as On}from"@mysten/sui/transactions";import{buildBorrowTx as Ou,buildCloseTx as Pu,buildRepayTx as Ru,buildWithdrawTx as Bu}from"bucket-protocol-sdk";var Ws=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:i,insertionPlace:s,strapId:c}=a,p=new On,b=Bt(t,e);return await Ou(b,p,n,o,i,e.address,s,c),p},_s=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:i,strapId:s}=a,c=new On,p=Bt(t,e);return await Bu(p,c,n,o,e.address,i,s),c},Ls=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:i,isSurplus:s,insertionPlace:c,strapId:p}=a,b=new On,S=Bt(t,e);return await Ru(S,b,n,o,i,e.address,s,c,p),b},js=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:i}=a,s=new On,c=Bt(t,e);return await Pu(c,s,n,o,i),s};var Pn=class a extends I{constructor(t){super(t);this.data=t}txType=Eu.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await Ws(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Nu}from"@msafe/sui3-utils";var Rn=class a extends I{constructor(t){super(t);this.data=t}txType=Nu.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await Ls(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wu}from"@msafe/sui3-utils";var Bn=class a extends I{constructor(t){super(t);this.data=t}txType=Wu.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await _s(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as _u}from"@msafe/sui3-utils";var En=class a extends I{constructor(t){super(t);this.data=t}txType=_u.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await js(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Un}from"@msafe/sui3-utils";import{Transaction as Nn}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as Lu,buildSBUCKDepositTx as ju,buildSBUCKUnstakeTx as Uu,buildSBUCKWithdrawTx as qu}from"bucket-protocol-sdk";var Us=async(a,e,t)=>{let{coinType:n,amount:o,isStake:i}=a,s=new Nn,c=Bt(t,e);return await ju(c,s,n,o,e.address,i),s},qs=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:i,toBuck:s}=a,c=new Nn,p=Bt(t,e);return await Uu(p,c,n,o,e.address,i,s),c},Fs=async(a,e,t)=>{let{amount:n}=a,o=new Nn,i=Bt(t,e);return await qu(i,o,n,e.address),o},Ks=async(a,e,t)=>{let{stakeProofs:n}=a,o=new Nn,i=Bt(t,e);return await Lu(i,o,n,e.address),o};var Wn=class a extends I{constructor(t){super(t);this.data=t}txType=Un.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await Us(this.data,n,o)}static fromData(t){return new a(t)}},_n=class a extends I{constructor(t){super(t);this.data=t}txType=Un.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await qs(this.data,n,o)}static fromData(t){return new a(t)}},Ln=class a extends I{constructor(t){super(t);this.data=t}txType=Un.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await Fs(this.data,n,o)}static fromData(t){return new a(t)}},jn=class a extends I{constructor(t){super(t);this.data=t}txType=Un.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Ks(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Pr}from"@msafe/sui3-utils";import{Transaction as Or}from"@mysten/sui/transactions";import{buildTankClaimTx as Fu,buildTankDepositTx as Ku,buildTankWithdrawTx as Vu}from"bucket-protocol-sdk";var Vs=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Or,s=Bt(t,e);return await Ku(s,i,n,o,e.address),i},$s=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Or,s=Bt(t,e);return await Vu(s,i,n,o,e.address),i},Hs=async(a,e,t)=>{let{coinType:n}=a,o=new Or,i=Bt(t,e);return await Fu(i,o,n,e.address),o};import{Transaction as $u}from"@mysten/sui/transactions";import{buildLockedClaimTx as Hu}from"bucket-protocol-sdk";var Xs=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,i=new $u,s=Bt(t,e);return await Hu(s,i,n,o,e.address),i};var qn=class a extends I{constructor(t){super(t);this.data=t}txType=Pr.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await Vs(this.data,n,o)}static fromData(t){return new a(t)}},Fn=class a extends I{constructor(t){super(t);this.data=t}txType=Pr.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await $s(this.data,n,o)}static fromData(t){return new a(t)}},Kn=class a extends I{constructor(t){super(t);this.data=t}txType=Pr.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await Hs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Xu}from"@msafe/sui3-utils";var Vn=class a extends I{constructor(t){super(t);this.data=t}txType=Xu.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await Xs(this.data,n,o)}static fromData(t){return new a(t)}};var $n=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new An(t).decode();return{txType:zu.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e,i;switch(e.txSubType){case"psm":i=Mn.fromData(e.intentionData);break;case"borrow":i=Pn.fromData(e.intentionData);break;case"withdraw":i=Bn.fromData(e.intentionData);break;case"repay":i=Rn.fromData(e.intentionData);break;case"close":i=En.fromData(e.intentionData);break;case"tank-deposit":i=qn.fromData(e.intentionData);break;case"tank-withdraw":i=Fn.fromData(e.intentionData);break;case"tank-claim":i=Kn.fromData(e.intentionData);break;case"sbuck-deposit":i=Wn.fromData(e.intentionData);break;case"sbuck-unstake":i=_n.fromData(e.intentionData);break;case"sbuck-withdraw":i=Ln.fromData(e.intentionData);break;case"sbuck-claim":i=jn.fromData(e.intentionData);break;case"lock-claim":i=Vn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Nm}from"@msafe/sui3-utils";import{TransactionType as nm}from"@msafe/sui3-utils";import{AggregatorClient as Gu,Env as Qu}from"@cetusprotocol/aggregator-sdk";import{CetusFarmsSDK as Yu}from"@cetusprotocol/farms-sdk";import{CetusClmmSDK as Ju}from"@cetusprotocol/sui-clmm-sdk";import{CetusVaultsSDK as Zu}from"@cetusprotocol/vaults-sdk";import{CetusXcetusSDK as tm}from"@cetusprotocol/xcetus-sdk";import{SuiClient as Rr,getFullnodeUrl as zs}from"@mysten/sui/client";var Gt=(a,e)=>{let t=Ju.createSDK({env:"mainnet",sui_client:new Rr({url:zs("mainnet")})});return t.setSenderAddress(e.address),t},qt=(a,e)=>{let t=Yu.createSDK({env:"mainnet",sui_client:new Rr({url:zs("mainnet")})});return t.setSenderAddress(e.address),t},em="https://api-sui.cetus.zone/router_v2/find_routes",Gs=(a,e)=>{let t=new Rr({url:"https://fullnode.mainnet.sui.io/"});return new Gu({endpoint:em,signer:e.address,client:t,env:Qu.Mainnet})},Ve=(a,e)=>{let t=Zu.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t},De=(a,e)=>{let t=tm.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t};var Qs=async(a,e,t)=>await Gt(t,e).Pool.createPoolPayload(a),Ys=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Js=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Zs=async(a,e,t)=>await Gt(t,e).Position.closePositionPayload(a),tc=async(a,e,t)=>await Gt(t,e).Position.removeLiquidityPayload(a),ec=async(a,e,t)=>await Gt(t,e).Rewarder.collectRewarderPayload(a);var Hn=class a extends I{constructor(t){super(t);this.data=t}txType=nm.Other;txSubType="OpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ys(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as om}from"@msafe/sui3-utils";var Xn=class a extends I{constructor(t){super(t);this.data=t}txType=om.Other;txSubType="ClaimFeeAndMining";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ec(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as am}from"@msafe/sui3-utils";var zn=class a extends I{constructor(t){super(t);this.data=t}txType=am.Other;txSubType="CreatePool";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Qs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as im}from"@msafe/sui3-utils";var Gn=class a extends I{constructor(t){super(t);this.data=t}txType=im.Other;txSubType="DecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await tc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as rm}from"@msafe/sui3-utils";var nc=async(a,e,t)=>await qt(t,e).Farms.openPositionAddLiquidityStakePayload(a),oc=async(a,e,t)=>await qt(t,e).Farms.addLiquidityFixCoinPayload(a),ac=async(a,e,t)=>await qt(t,e).Farms.removeLiquidityPayload(a),ic=async(a,e,t)=>await qt(t,e).Farms.removeLiquidityPayload(a),rc=async(a,e,t)=>await qt(t,e).Farms.claimFeeAndClmmReward(a),sc=async(a,e,t)=>await qt(t,e).Farms.harvestPayload(a),cc=async(a,e,t)=>{let n=qt(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},lc=async(a,e,t)=>await qt(t,e).Farms.depositPayload(a),uc=async(a,e,t)=>await qt(t,e).Farms.withdrawPayload(a);var Qn=class a extends I{constructor(t){super(t);this.data=t}txType=rm.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await nc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as sm}from"@msafe/sui3-utils";var Yn=class a extends I{constructor(t){super(t);this.data=t}txType=sm.Other;txSubType="FarmingBatchHarvest";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await cc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as cm}from"@msafe/sui3-utils";var Jn=class a extends I{constructor(t){super(t);this.data=t}txType=cm.Other;txSubType="FarmingClaimFeeAndReward";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await rc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as lm}from"@msafe/sui3-utils";var Zn=class a extends I{constructor(t){super(t);this.data=t}txType=lm.Other;txSubType="FarmingDecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ac(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as um}from"@msafe/sui3-utils";var to=class a extends I{constructor(t){super(t);this.data=t}txType=um.Other;txSubType="FarmingHarvest";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await sc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as mm}from"@msafe/sui3-utils";var eo=class a extends I{constructor(t){super(t);this.data=t}txType=mm.Other;txSubType="FarmingIncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await oc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as pm}from"@msafe/sui3-utils";var no=class a extends I{constructor(t){super(t);this.data=t}txType=pm.Other;txSubType="FarmingRemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ic(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as dm}from"@msafe/sui3-utils";var oo=class a extends I{constructor(t){super(t);this.data=t}txType=dm.Other;txSubType="FarmingStake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await lc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as fm}from"@msafe/sui3-utils";var ao=class a extends I{constructor(t){super(t);this.data=t}txType=fm.Other;txSubType="FarmingUnstake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await uc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as hm}from"@msafe/sui3-utils";var io=class a extends I{constructor(t){super(t);this.data=t}txType=hm.Other;txSubType="IncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Js(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Im}from"@msafe/sui3-utils";import{Transaction as ro}from"@mysten/sui/transactions";import gm,{vaults_mainnet as ym}from"haedal-vault-sdk";var bm=async(a,e,t)=>{let n=Ve(t,e),o=new ro;return o.setSender(e.address),n.Vest.buildRedeemPayload(a.params,o),o},Tm=async(a,e,t)=>{let n=new gm(ym);n.senderAddress=e.address;let o=new ro;return o.setSender(e.address),await n?.Vest.buildRedeemPayload(a.params,o),o},mc=(a,e,t)=>{let n=Gt(t,e),o=new ro;return n?.Vest.buildRedeemPayload(a.params,o),o},Sm=async(a,e,t)=>{let n=Gt(t,e),o=qt(t,e),i=new ro,s=await o.Farms.withdrawReturnPayload(a.withdrawParams,i);return n.Vest.buildRedeemPayload(a.redeemParms.map(c=>({...c,clmm_position_id:s})),i),o.Farms.depositPayload({...a.depositParams,clmm_position_id:s},i),i},pc=async(a,e,t)=>a.type==="clmm"?mc(a,e,t):a.type==="farms"?Sm(a,e,t):a.type==="vaults"?bm(a,e,t):a.type==="haedalVaults"?Tm(a,e,t):mc(a,e,t);var so=class a extends I{constructor(t){super(t);this.data=t}txType=Im.Other;txSubType="PosVestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await pc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wm}from"@msafe/sui3-utils";var co=class a extends I{constructor(t){super(t);this.data=t}txType=wm.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Zs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as xm}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as Cm}from"@cetusprotocol/aggregator-sdk";import{Transaction as Dm}from"@mysten/sui/transactions";var dc=async(a,e,t)=>{let n=Gs(t,e),o=new Dm;return await n.fastRouterSwap({...a,router:Cm(a.router),txb:o}),o};var lo=class a extends I{constructor(t){super(t);this.data=t}txType=xm.Other;txSubType="AggregatorSwap";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await dc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as km}from"@msafe/sui3-utils";import{Transaction as fc}from"@mysten/sui/transactions";var hc=async(a,e,t)=>{let n=Ve(t,e),o=new fc;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},gc=async(a,e,t)=>{let n=Ve(t,e),o=new fc;return await n.Vaults.withdraw(a,o),o};var uo=class a extends I{constructor(t){super(t);this.data=t}txType=km.Other;txSubType="AddVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await hc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as vm}from"@msafe/sui3-utils";var mo=class a extends I{constructor(t){super(t);this.data=t}txType=vm.Other;txSubType="RemoveVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await gc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Mm}from"@msafe/sui3-utils";import{Transaction as Am}from"@mysten/sui/transactions";var yc={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},bc=async(a,e,t)=>{console.log("getVestingRedeemTxb txbParams: ",a),console.log("getVestingRedeemTxb account: ",e),console.log("getVestingRedeemTxb network: ",t);let{pool:n,nftId:o,periods:i,CLOCK_ADDRESS:s}=a,c=new Am;return i.forEach(p=>{c.moveCall({target:`${yc.published_at}::router::redeem`,typeArguments:[yc.cetus_coin_type],arguments:[c.object(n),c.object(o),c.pure(p),c.object(s)]})}),c};var po=class a extends I{constructor(t){super(t);this.data=t}txType=Mm.Other;txSubType="VestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await bc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Om}from"@msafe/sui3-utils";var Tc=async(a,e,t)=>await De(t,e).XCetusModule.convertPayload(a),Sc=async(a,e,t)=>await De(t,e).XCetusModule.redeemLockPayload(a),Ic=async(a,e,t)=>await De(t,e).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),wc=async(a,e,t)=>await De(t,e).XCetusModule.cancelRedeemPayload(a),Cc=async(a,e,t)=>await De(t,e).XCetusModule.redeemPayload(a);var fo=class a extends I{constructor(t){super(t);this.data=t}txType=Om.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await wc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Pm}from"@msafe/sui3-utils";var ho=class a extends I{constructor(t){super(t);this.data=t}txType=Pm.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ic(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Rm}from"@msafe/sui3-utils";var go=class a extends I{constructor(t){super(t);this.data=t}txType=Rm.Other;txSubType="xCETUSConvert";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Tc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bm}from"@msafe/sui3-utils";var yo=class a extends I{constructor(t){super(t);this.data=t}txType=Bm.Other;txSubType="xCETUSRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Cc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Em}from"@msafe/sui3-utils";var bo=class a extends I{constructor(t){super(t);this.data=t}txType=Em.Other;txSubType="xCETUSRedeemLock";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Sc(i,n,o)}static fromData(t){return new a(t)}};var To=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:Nm.Other,txSubType:n,intentionData:{txbParams:{...t},action:n}}}async build(e){let{suiClient:t,account:n,network:o}=e,i;switch(e.txSubType){case"OpenAndAddLiquidity":i=Hn.fromData(e.intentionData);break;case"IncreaseLiquidity":i=io.fromData(e.intentionData);break;case"DecreaseLiquidity":i=Gn.fromData(e.intentionData);break;case"RemoveLiquidity":i=co.fromData(e.intentionData);break;case"ClaimFeeAndMining":i=Xn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":i=Qn.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":i=eo.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":i=Zn.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":i=no.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":i=Jn.fromData(e.intentionData);break;case"FarmingHarvest":i=to.fromData(e.intentionData);break;case"FarmingBatchHarvest":i=Yn.fromData(e.intentionData);break;case"FarmingStake":i=oo.fromData(e.intentionData);break;case"FarmingUnstake":i=ao.fromData(e.intentionData);break;case"xCETUSConvert":i=go.fromData(e.intentionData);break;case"xCETUSRedeemLock":i=bo.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":i=ho.fromData(e.intentionData);break;case"xCETUSCancelRedeem":i=fo.fromData(e.intentionData);break;case"xCETUSRedeem":i=yo.fromData(e.intentionData);break;case"VestingRedeem":i=po.fromData(e.intentionData);break;case"AggregatorSwap":i=lo.fromData(e.intentionData);break;case"AddVaultsPosition":i=uo.fromData(e.intentionData);break;case"RemoveVaultsPosition":i=mo.fromData(e.intentionData);break;case"PosVestingRedeem":i=so.fromData(e.intentionData);break;case"CreatePool":i=zn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Bp}from"@msafe/sui3-utils";import Wm from"sort-keys-recursive";var _t=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Wm(this.data))}};import{getFullnodeUrl as So}from"@mysten/sui.js/client";var Br={};Bs(Br,{contractId:()=>jm,default:()=>Vm,feeObjId:()=>Fm,roleObjId:()=>Um,status:()=>Lm,transaction:()=>_m,upgradeCapObjId:()=>Km,vaultObjId:()=>qm});var _m="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Lm="success",jm="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Um="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",qm="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Fm="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Km="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Vm={transaction:_m,status:Lm,contractId:jm,roleObjId:Um,vaultObjId:qm,feeObjId:Fm,upgradeCapObjId:Km};var Er={};Bs(Er,{contractId:()=>Xm,default:()=>Jm,feeObjId:()=>Qm,roleObjId:()=>zm,status:()=>Hm,transaction:()=>$m,upgradeCapObjId:()=>Ym,vaultObjId:()=>Gm});var $m="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Hm="success",Xm="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",zm="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Gm="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Qm="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",Ym="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Jm={transaction:$m,status:Hm,contractId:Xm,roleObjId:zm,vaultObjId:Gm,feeObjId:Qm,upgradeCapObjId:Ym};var Zm=So("testnet"),tp=So("testnet"),ep=So("mainnet"),np=So("mainnet"),op="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",ap="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",ip="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",rp="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Dc=Br,xc=Er,sp=new Map([["dev",{env:"dev",rpc:{url:Zm},backend:{url:op},contract:Dc}],["stg",{env:"stg",rpc:{url:tp},backend:{url:ap},contract:Dc}],["prev",{env:"prev",rpc:{url:ep},backend:{url:ip},contract:xc}],["prod",{env:"prod",rpc:{url:np},backend:{url:rp},contract:xc}]]);function kc(a,e){let t=sp.get(a);if(!t)throw new Error(`Env not supported: ${a}`);return e&&e.rpc&&(t.rpc=e.rpc),e&&e.backend&&(t.backend=e.backend),e&&e.contract&&(t.contract=e.contract),t}import{SuiClient as lp}from"@mysten/sui.js/client";var j=class extends Error{mpayErrorCode;context;constructor(e,t,n={}){let{cause:o,context:i}=n;o?super(`[MPay] ${t}: ${o}`):super(`[MPay] ${t}`),this.mpayErrorCode=e,this.context=i}};var Io=class extends j{constructor(){super(11,"Backend is not specified")}};var wo=class extends j{constructor(){super(1,"Wallet not connected")}};import ke,{AxiosError as cp}from"axios";var xe=class extends j{constructor(e,t){super(10,e,{context:t})}};var Co=class a{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof cp)throw new xe(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new xe(e.data.code)}throw new xe(e.status.toString())}async getIncomingStreams(e,t){let n=await ke.post(`${this.apiURL}/stream`,{recipient:e,...t});return a.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await ke.post(`${this.apiURL}/stream`,{sender:e,...t});return a.parseResponseData(n)}async getStreamHistory(e){let t=await ke.post(`${this.apiURL}/stream-events`,e),n=a.parseResponseData(t);return n.data.forEach(o=>{let i=o;return i.data.type==="create_stream"?i.data.balance=BigInt(i.data.balance):i.data.type==="cancel_stream"?i.data.withdrawAmount=BigInt(i.data.withdrawAmount):i.data.type==="claim"||i.data.type==="auto_claim"?i.data.claimAmount=BigInt(i.data.claimAmount):i.data.type==="set_auto_claim"&&(i.data.enabled=!!i.data.enabled),i.createdAt=new Date(i.createdAt),i}),n}async getAllCoinTypes(e){let t=await ke.post(`${this.apiURL}/stream-info`,{address:e});return a.parseResponseData(t)}async getAllRecipients(e,t){let n=await ke.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return a.parseResponseData(n)}async getAllSenders(e,t){let n=await ke.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return a.parseResponseData(n)}};var ve=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new lp({url:e.rpc.url}),e.backend&&(this._backend=new Co(e.backend.url))}static new(e,t){let n=kc(e,t);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new Io;return this._backend}set backend(e){this._backend=e}connectWallet(e){this.signer=e}disconnect(){this.signer=void 0}get wallet(){if(!this.signer)throw new wo;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as Op,normalizeStructTag as Pp,normalizeSuiAddress as Qc}from"@mysten/sui.js/utils";import{TransactionBlock as Mo}from"@mysten/sui.js/transactions";import{TransactionBlock as Nc}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Wc,normalizeStructTag as dp}from"@mysten/sui.js/utils";var Nr=50n,Do=10000n,vc=25n,Wr=100000000n;var Qt=class{constructor(e){this.object=e}moveArg(e){return e.object(this.object)}},$e=class{constructor(e){this.objects=e}moveArgs(e){return e.makeMoveVec({objects:this.objects.map(t=>e.object(t))})}},se=class a{constructor(e){this.result=e;return new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(t,n){if(n in t)return Reflect.get(t,n);let o=s=>new a(t.result[s]);if(n===Symbol.iterator)return function*(){let s=0;for(;;)yield o(s),s++};if(typeof n=="symbol")return;let i=parseInt(n,10);if(!(Number.isNaN(i)||i<0))return o(i)}})}moveArg(){return this.result}};import{Buffer as Ac}from"buffer";import{normalizeSuiAddress as up}from"@mysten/sui.js/utils";var He=class extends j{constructor(e,t){super(3,e,{context:t})}};var xo=class{constructor(e){this.results=e}callResult(e){return this.results.results[e]}returnValue(e,t){return e.returnValues[t]}getValue(e=0,t=0){let n=this.callResult(e);return this.returnValue(n,t)}getAddress(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="address")throw new He("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return up(Ac.from(n).toString("hex"))}getU64(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="u64")throw new He("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Ac.from(n).readBigInt64LE()}};import{bcs as Oc}from"@mysten/sui.js/bcs";var X=class extends j{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var Pc={groupId:"string",name:"string"},mp=64;function Rc(a){return Bc(a),Oc.ser(Pc,a).toString("base64")}function Xe(a){let e=Oc.de(Pc,a,"base64");return Bc(e),e}function Bc(a){if(!Mc(a.name))throw new X("Invalid metadata: Name contains unknown character");if(!Mc(a.groupId))throw new X("Invalid metadata: Group ID contains unknown character");if(a.name.length>mp)throw new X("Invalid metadata: Name exceed max length 64")}function Mc(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as ko}from"@mysten/sui.js/utils";function vo(a,e){return ko(a)===ko(e)}function ce(a,e){return ko(a)===ko(e)}var Ao="txn.gas";import{nanoid as pp}from"nanoid";function Ec(){return pp()}var he=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:Rc({name:e.name,groupId:Ec()}),coinType:dp(e.coinType),recipients:e.recipients.map(t=>({address:t.address,cliffAmount:t.cliffAmount,amountPerEpoch:t.amountPerStep})),epochInterval:e.interval,numberEpoch:e.steps,startTime:e.startTimeMs,cancelable:e.cancelable}}async buildCreateStreamTransactionBlock(e){let t=new Nc,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),i=await this.wallet.requestCoins(o),s=await this.addMergeCoins(t,i[0]),c;o.length>1?c=await this.addMergeCoins(t,i[1]):c=s;for(let p=0;p<e.recipients.length;p++){let b=e.recipients[p],S=this.amountForRecipient(b,e.numberEpoch),w=this.getStreamFeeLocal(S),[D]=t.splitCoins(s,[t.pure(S+w,"u64")]),[x]=t.splitCoins(c,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new se(D),flatFeeCoin:new se(x),metadata:e.metadata,recipient:b.address,timeStart:e.startTime,cliff:b.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:b.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return t}calculateCreateStreamFees(e){let t=a.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(t)}feeParams(){return{createFeePercent:{numerator:Nr,denominator:Do},claimFeePercent:{numerator:vc,denominator:Do},flatFeePerStream:Wr}}async addMergeCoins(e,t){let n;return t.mergedCoins&&t.mergedCoins.length?(e.mergeCoins(e.object(t.primaryCoin),t.mergedCoins.map(o=>e.object(o))),n=e.object(t.primaryCoin)):t.primaryCoin===Ao?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return vo(n,Wc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:Wc,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,i)=>{let s=this.amountForRecipient(i,e.numberEpoch),c=this.getStreamFeeLocal(s);return{totalAmount:o.totalAmount+s,streamFeeAmount:o.streamFeeAmount+c}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(e.recipients.length)*this.flatSuiFee,...t}}amountForRecipient(e,t){return BigInt(e.amountPerEpoch)*BigInt(t)+BigInt(e.cliffAmount)}get flatSuiFee(){return Wr}getStreamFeeLocal(e){return e*Nr/Do}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new Nc,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new xo(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Lc}from"@mysten/sui.js/transactions";var _c="0x0000000000000000000000000000000000000000000000000000000000000006";var Ae=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.add(Lc.MoveCall({target:n,arguments:t.arguments.map(o=>o instanceof $e?o.moveArgs(e):o instanceof Qt?o.moveArg(e):o instanceof se?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,n=[],o=[]){e.add(Lc.MoveCall({target:t,arguments:n.map(i=>i instanceof $e?i.moveArgs(e):i instanceof Qt?i.moveArg(e):i instanceof se?i.moveArg():e.pure(i)),typeArguments:o}))}makeObject(e){return typeof e=="string"?new Qt(e):e}vaultObject(){return new Qt(this.config.vaultObjId)}roleObject(){return new Qt(this.config.roleObjId)}feeObject(){return new Qt(this.config.feeObjId)}clockObject(){return new Qt(_c)}};var Me=class a extends Ae{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_fee,arguments:[o,i,n],typeArgs:[]})}setStreamingFlatFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_flat_fee,arguments:[o,i,n],typeArgs:[]})}setClaimFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_claim_fee,arguments:[o,i,n],typeArgs:[]})}streamingFee(t,n){let o=this.feeObject();return this.addContractCall(t,{method:a.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(t,n){return this.addContractCall(t,{method:a.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(t){return this.addContractCall(t,{method:a.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var Yt=class a extends Ae{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(t,n){let o=this.feeObject(),i=this.vaultObject(),s=this.makeObject(n.paymentCoin),c=this.makeObject(n.flatFeeCoin),p=this.clockObject();return this.addContractCall(t,{method:a.MethodName.create_stream,arguments:[o,i,s,c,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,p],typeArgs:[n.coinType]})}setAutoClaim(t,n){let o=this.makeObject(n.streamId);return this.addContractCall(t,{method:a.MethodName.set_auto_claim,arguments:[o,n.enabled],typeArgs:[n.coinType]})}cancelStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.cancel_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStreamByProxy(t,n){let o=this.makeObject(n.streamId),i=this.vaultObject(),s=this.feeObject(),c=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,i,s,c],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream_by_proxy}`}};var Oe=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new Me(t,e),this.streamContract=new Yt(t,e)}feeContract;streamContract;async createStreams(e){let t=he.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new he(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,n){let o=new Mo;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new Mo;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new Mo;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new Mo;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as _r,SUI_TYPE_ARG as fp}from"@mysten/sui.js/utils";import{Duration as jc}from"luxon";var Oo=class extends j{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var hp=1e3,Po=class{constructor(e){this.globals=e;this.coinMetaHelper=new Lr(e.suiClient),this.createStreamHelper=new Oe(e).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new Oo(e.effects?.status.status,e.effects?.status.error);return e.objectChanges.filter(t=>t.type==="created"&&t.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(t=>t.objectId)}calculateCreateStreamFees(e){return this.createStreamHelper.calculateCreateStreamFees(e)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(e){if(e.steps===0n)throw new X("Invalid stream steps: 0");let t=e.cliff?e.cliff:{numerator:0n,denominator:100n},n=e.totalAmount*t.numerator/t.denominator,o=(e.totalAmount-n)/e.steps,s={realTotalAmount:o*e.steps+n,cliffAmount:n,amountPerStep:o};return this.validateStreamAmount(s,e.totalAmount),s}calculateTimelineByInterval(e){if(e.steps===0n)throw new X("Invalid stream steps: 0");let t=e.timeStart.plus(e.interval.toMillis()*Number(e.steps)),n={timeStart:e.timeStart,timeEnd:t,interval:e.interval,steps:e.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(e){if(e.steps===0n)throw new X("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(jc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:jc.fromMillis(Number(t)),steps:e.steps};return this.validateTimeline(o),o}async getBalance(e,t){let n=await this.globals.suiClient.getBalance({owner:e,coinType:t}),o=await this.getCoinMeta(t);return{...n,coinType:_r(n.coinType),coinMeta:o}}async getAllBalance(e){let t=await this.globals.suiClient.getAllBalances({owner:e}),n=await Promise.all(t.map(o=>this.getCoinMeta(o.coinType)));return t.map((o,i)=>({...o,coinType:_r(o.coinType),coinMeta:n[i]}))}async getCoinMeta(e){return this.coinMetaHelper.getCoinMeta(e)}async simulateTransactionBlock(e){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:e,sender:await this.globals.wallet.address()})}validateStreamAmount(e,t){if(e.amountPerStep===0n)throw new X("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new X("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<hp)throw new X("Interval shall be at least 1 second","interval",e.interval)}},Lr=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(e){let t=_r(e||fp);if(this.coinMetaReg.has(t))return this.coinMetaReg.get(t);let n=await this.queryCoinMeta(t);return n&&this.coinMetaReg.set(t,n),n}async queryCoinMeta(e){return await this.suiClient.getCoinMetadata({coinType:e})||void 0}};import{normalizeStructTag as Fc,normalizeSuiAddress as _o}from"@mysten/sui.js/utils";import{DateTime as Kc}from"luxon";import{TransactionBlock as No}from"@mysten/sui.js/transactions";import{normalizeStructTag as qc,parseStructTag as bp}from"@mysten/sui.js/utils";import{DateTime as Tp}from"luxon";var Ro=class extends j{constructor(){super(7,"Connected wallet is not creator")}};var ze=class extends j{constructor(){super(8,"Connected wallet is not recipient")}};var Ge=class extends j{constructor(e,t){super(6,e,{context:t})}};var Ot=class extends j{constructor(e,t={}){super(0,e,t)}};var Bo=class extends j{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as gp,Duration as yp}from"luxon";var Uc=(1n<<64n)-1n,Eo=1e3;function jr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Eo);return gp.fromMillis(t*Eo)}function Ur(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Eo);return yp.fromMillis(t*Eo)}var le=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Yt(e.envConfig.contract,e)}streamContract;type="Stream";static async new(e,t){let n=await a.fetchStreamData(e,t);return new a(e,t,n)}static fromObjectData(e,t,n){let o=a.parseRawStreamData(t,n);return new a(e,t,o)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await a.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new Ot("Object Id does not align");this.rawData=a.parseRawStreamData(this.streamId,e)}async historyEvents(e){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:e})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new Ro;let e=new No;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new ze;let e=new No;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new ze;let t=new No;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new No;return this.streamContract.claimStreamByProxy(e,{streamId:this.streamId,coinType:this.coinType}),e}get wallet(){return this.globals.wallet}get client(){return this.globals.suiClient}get coinType(){return qc(this.rawData.coinType)}get progress(){return{status:this.streamStatus,total:this.totalAmount,streamed:this.streamedAmount,claimed:this.claimedAmount,claimable:this.claimable,canceled:this.canceledAmount}}get balance(){return this.rawData.balance}get autoClaim(){return this.rawData.autoClaim}get amountPerEpoch(){return this.rawData.config.amountPerEpoch}get cancelable(){return this.rawData.config.cancelable}get cliff(){return this.rawData.config.cliff}get creator(){return this.rawData.config.creator}get interval(){return Ur(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return Xe(e).groupId}get name(){let{metadata:e}=this.rawData.config;return Xe(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return jr(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return Ur(t)}get timeEnd(){return this.timeStart.plus(this.duration)}get totalSteps(){return this.rawData.config.totalEpoch}get claimable(){return this.streamedAmount-this.claimedAmount}get nextReleaseDate(){return this.currentEpoch===-1n?this.timeStart:this.currentEpoch>=this.totalSteps||this.isCanceled?null:jr((this.currentEpoch+1n)*this.rawData.config.epochInterval+this.rawData.config.timeStart)}get nextReleaseAmount(){return this.currentEpoch===-1n?this.cliff:this.currentEpoch>=this.totalSteps||this.isCanceled?null:this.amountPerEpoch}get streamStatus(){let e=this.rawData.status.status;return e===16?"CANCELED":e===17?"SETTLED":e===1?"COMPLETED":this.currentEpoch>=this.totalSteps?"STREAMED":"STREAMING"}get streamedAmount(){return this.currentEpoch===-1n?0n:this.isCanceled?this.rawData.status.epochCanceled*this.amountPerEpoch+this.cliff:this.currentEpoch*this.amountPerEpoch+this.cliff}get claimedAmount(){return this.rawData.status.epochClaimed===Uc?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=Tp.now().toMillis(),t=this.timeStart.toMillis();if(e<t)return-1n;let n=Math.floor((e-t)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let e=this.rawData.config;return e.amountPerEpoch*e.totalEpoch+e.cliff}get isCanceled(){let e=this.rawData.status.status;return e===16||e===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(e,t){let n=await e.suiClient.getObject({id:t,options:{showContent:!0,showType:!0}});return a.parseRawStreamData(t,n)}static parseRawStreamData(e,t){if(t.error)throw t.error.code==="notExists"?new Bo(e):new Ge(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new Ge("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=bp(n.type),i=qc(o[0]),s=n.fields,c=s.config.fields,p=s.status.fields;return{coinType:i,autoClaim:s.auto_claim,balance:BigInt(s.balance.fields.balance),config:{amountPerEpoch:BigInt(c.amount_per_epoch),cancelable:c.cancelable,cliff:BigInt(c.cliff),creator:c.creator,epochInterval:BigInt(c.epoch_interval),metadata:c.metadata,recipient:c.recipient,timeStart:BigInt(c.time_start),totalEpoch:BigInt(c.total_epoch)},status:{status:p.status,epochCanceled:BigInt(p.epoch_canceled),epochClaimed:BigInt(p.epoch_claimed)}}}};var Pe=class extends j{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function Fr(a){let e=[];for(;await a.hasNext();){let t=await a.next();e.push(t)}return e&&Array.isArray(e[0])?e.flat(1):e}var qr=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},Re=class{constructor(e){this.requester=e;this.pager=new qr(e),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};var Sp=25;async function Vr(a,e,t){let n=new Qe(e),o=new Ye(a,n,t);return await Fr(o)}var Qe=class{constructor(e){this.ids=e;this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},Ye=class extends Re{constructor(t,n,o){super(new Kr(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}},Kr=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||Sp,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let e=[];for(;e.length<this.pageSize&&await this.stringIter.hasNext();){let i=await this.stringIter.next();i&&e.push(i)}let t=await this.suiClient.multiGetObjects({ids:e,options:this.objectOptions}),n;if(this.filter){let{filter:o}=this;n=t.filter(i=>o?.(i))}else n=t;return{data:n,hasNext:await this.stringIter.hasNext()}}};var Wo=class a{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new Pe("stream size 0");let n=t.map(i=>i.groupId);if(new Set(n).size!==1)throw new X("Stream does not have same group ID")}type="StreamGroup";static async new(e,t){let n=await Vr(e.suiClient,t);return n.forEach(o=>{if(!o)throw new Ot("stream group object data undefined")}),a.newFromObjectResponse(e,t,n)}static async newFromObjectResponse(e,t,n){let o=await a.parseGroupStreams(e,t,n);return new a(e,o)}static checkStreamGroup(e){let t=e.map(i=>i.groupCommonInfo),n=t[0],o=!0;return t.forEach(i=>{Ip(n,i)||(o=!1)}),o}async refresh(){let e=await Vr(this.globals.suiClient,this.streams.map(t=>t.streamId));this.streams.forEach((t,n)=>{t.refreshWithData(e[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(e=>e.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((e,t)=>e+t.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((e,t)=>e+t.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((e,t)=>t.nextReleaseAmount===null?e:e+t.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((e,t)=>e+t.totalAmount,0n),streamed:this.streams.reduce((e,t)=>e+t.streamedAmount,0n),claimed:this.streams.reduce((e,t)=>e+t.claimedAmount,0n),claimable:this.streams.reduce((e,t)=>e+t.claimable,0n),canceled:this.streams.reduce((e,t)=>e+t.canceledAmount,0n)}}async historyEvents(e){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:e})}static async parseGroupStreams(e,t,n){let o=n.map((i,s)=>le.fromObjectData(e,t[s],i)).filter(i=>!!i);if(new Set(o.map(i=>i.groupId)).size!==1)throw new Pe("Not same group ID");if(!this.checkStreamGroup(o))throw new Pe("Not same stream settings");return o}};function Ip(a,e){return a.name===e.name&&a.groupId===e.groupId&&a.creator===e.creator&&a.start.toMillis()===e.start.toMillis()&&a.interval.toMillis()===e.interval.toMillis()&&a.steps===e.steps&&a.cancelable===e.cancelable}var Je=class a{constructor(e,t){this.it=e;this.pageSize=t}static async newIncoming(e){let t=await Lo.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Lo.newOutgoing(e);return new a(t,e.pageSize)}async hasNext(){return this.it.hasNext()}async next(){let e=[];for(;e.length<this.pageSize&&await this.it.hasNext();)e.push(await this.it.next());return e}},Lo=class a{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let t=await jo.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await jo.newOutgoingQuery(e);return new a(t)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let t=await this.requester.doNextRequest();if(t===null)throw new Ot("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new Ot("No more results");return e}},jo=class a{constructor(e,t,n,o){this.globals=e;this.recipient=t;this.groupRefs=n;this.query=o;this.current=0;let i=new Qe(n.flat().map(s=>s.streamId));this.objectIter=new Ye(e.suiClient,i)}current=0;objectIter;static async newIncomingQuery(e){let t=kp(e.query),n=await e.globals.walletAddress(),i=(await e.globals.backend.getIncomingStreams(n,t)).filter(c=>_o(c.recipient)===_o(n)),s=Vc(i);return new a(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=vp(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),i=Vc(o);return new a(e.globals,n,i,e.query)}async doNextRequest(){if(this.current>=this.groupRefs.length)return null;let e=this.groupRefs[this.current];if(e.length===1){let t=await Dp(this.globals,e[0].streamId,this.objectIter);return this.current++,$c(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await xp(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,Cp(t,this.query)?t:this.doNextRequest()}throw new Ot("Stream group with no stream")}};function Vc(a){let e=new Map;return a.forEach(t=>{let n=e.get(t.groupId);n?(n.push(t),e.set(t.groupId,n)):e.set(t.groupId,[t])}),Array.from(e.values()).sort((t,n)=>Kc.fromISO(n[0].createDate).toMillis()-Kc.fromISO(t[0].createDate).toMillis())}function $c(a,e){if(e===void 0)return!0;let t=wp(a,e.status);if(e&&"claimable"in e&&e.claimable!==void 0){let n=e.claimable?a.progress.claimable!==0n:a.progress.claimable===0n;return t&&n}return t}function wp(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function Cp(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{$c(n,e)&&(t=!0)}),t}async function Dp(a,e,t){let n=await Hc(t,e);return le.fromObjectData(a,e,n)}async function xp(a,e,t){let n=[];for(;n.length<e.length;){let o=await Hc(t,e[n.length]);n.push(o)}return Wo.newFromObjectResponse(a,e,n)}async function Hc(a,e){if(!await a.hasNext())throw new Ot("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new Ot("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new Ot("stream id not aligned");return t}function kp(a){return{status:$r(a?.status),coinType:Xc(a?.coinType),sender:zc(a?.sender)}}function vp(a){return{status:$r(a?.status),coinType:Xc(a?.coinType),recipient:zc(a?.recipient)}}function $r(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=$r(t);return!e||e===n?n:"all"},void 0):Ap(a)}function Ap(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new X("Unknown stream filtered status")}}function Xc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Fc(e)):void 0:Fc(a)}function zc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>_o(e)):void 0:_o(a)}var Uo=class extends j{constructor(t,n,o){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:n,gotAmount:o}});this.coinType=t;this.requestAmount=n;this.gotAmount=o}};var Mp=25;async function Gc(a,e,t,n="0x2::sui::SUI",o=Mp){let i=new Hr(a,e,n,o),s=BigInt(0),c=[];for(;await i.hasNext()&&s<t;){let p=await i.next();p&&(c.push(p),s+=BigInt(p.balance))}if(s<t)throw new Uo(n,t,s);return c}var Hr=class extends Re{constructor(t,n,o,i){super(new Xr(t,n,o,i));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=i}},Xr=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new Ot("Invalid reqPageSize")}nextCursor;async doNextRequest(){let e=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=e.nextCursor,{data:e.data,hasNext:e.hasNextPage}}};var zr=class{constructor(e){this.msafe=e}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},qo=class{constructor(e){this.account=e}async address(){return this.account.address}},Gr=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(e){return Promise.all(e.map(t=>this.requestCoin(t)))}async requestCoin(e){if(vo(e.coinType,Op))return{primaryCoin:Ao};if(e.amount<=0)throw new X("Invalid coin request","coinAmount",e.amount);let t=await Gc(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new Ot("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},Fo=class{globals;helper;constructor(e,t){this.globals=ve.new(e,t),this.helper=new Po(this.globals)}connectSingleWallet(e){let t=new Gr(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new zr(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return le.new(this.globals,e)}async getIncomingStreams(e,t=10){return Je.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return Je.newOutgoing({globals:this.globals,query:e,pageSize:t})}async getCoinTypesForStreamFilter(){let e=await this.wallet.address();return(await this.globals.backend.getAllCoinTypes(e)).map(n=>Pp(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Qc(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Qc(o))}get wallet(){return this.globals.wallet}builder(){return new Oe(this.globals)}};var Kt=class extends _t{application="mpay";getClient(e,t){let n=new Fo(e==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new qo(t)),n}};var Ze=class extends Kt{constructor(t){super(t);this.data=t}txType=Bp.Stream;txSubType="Cancel";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).cancel()}};import{TransactionType as Ep}from"@msafe/sui3-utils";var tn=class extends Kt{constructor(t){super(t);this.data=t}txType=Ep.Stream;txSubType="ClaimByProxy";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as Np}from"@msafe/sui3-utils";var en=class extends Kt{constructor(t){super(t);this.data=t}txType=Np.Stream;txSubType="Claim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claim()}};import{TransactionType as Wp}from"@msafe/sui3-utils";var nn=class extends Kt{constructor(t){super(t);this.data=t}txType=Wp.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as Yc}from"@mysten/sui.js/bcs";import{normalizeStructTag as _p,normalizeSuiAddress as on}from"@mysten/sui.js/utils";var Be=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return BigInt(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return on(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Yc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return on(e.value.Object.ImmOrOwned.objectId)}return on(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return on(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return on(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Yc.de(t,new Uint8Array(n))}typeArg(e){return _p(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var Ko=class{constructor(e,t){this.globals=e;this.txb=t}decode(){let e=this.decodeCreateStreamInfo(),t=this.createStreamHelper().calculateCreateStreamFees(e);return{type:"CreateStream",info:e,fees:t}}decodeCreateStreamInfo(){let t=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(t)}createStreamTransactions(){let e=this.transactions.filter(t=>t.kind==="MoveCall"&&ce(t.target,this.contract.createStreamTarget));if(e.length===0)throw new Ot("No create stream transactions");return e.map(t=>new Be(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=Xe(t),i=e.decodeInputAddress(5),s=e.decodeInputU64(6),c=e.decodeInputU64(7),p=e.decodeInputU64(8),b=e.decodeInputU64(9),S=e.decodeInputU64(10),w=e.decodeInputBool(11),D=e.typeArg(0);return{name:n,groupId:o,recipient:i,timeStart:s,cliff:c,epochInterval:p,totalEpoch:b,amountPerEpoch:S,cancelable:w,coinType:D}}aggregateGroupStreamInfo(e){if(new Set(e.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new X("Stream group not have common info");let n=e.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:e[0].name,coinType:e[0].coinType,recipients:n,interval:e[0].epochInterval,steps:e[0].totalEpoch,startTimeMs:e[0].timeStart,cancelable:e[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(e=>e.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new Yt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Me(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new he(this.globals,this.feeContract,this.contract)}getInputArg(e){if(e.kind!=="Input")throw new Error("not input type");return"value"in e?e:this.txb.blockData.inputs[e.index]}};var Vo=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Yt(e.envConfig.contract,e)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(t=>t.kind==="MoveCall"&&ce(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ce(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ce(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ce(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ce(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Ko(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:e,enabled:t}}decodeClaimTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Claim",streamId:e}}decodeClaimByProxyTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"ClaimByProxy",streamId:e}}decodeCancelStreamTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Cancel",streamId:e}}get helper(){let e=this.transactions[0];return new Be(e,this.txb)}};import{TransactionType as Lp}from"@msafe/sui3-utils";var an=class extends Kt{constructor(t){super(t);this.data=t}txType=Lp.Stream;txSubType="SetAutoClaim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var $o=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(e){let{network:t,transactionBlock:n}=e,o=ve.new(t==="sui:mainnet"?"prod":"dev"),s=new Vo(o,n).decode(),c;switch(s.type){case"CreateStream":c=new nn(s.info);break;case"SetAutoClaim":c=new an({streamId:s.streamId,enabled:s.enabled});break;case"Claim":c=new en({streamId:s.streamId});break;case"ClaimByProxy":c=new tn({streamId:s.streamId});break;case"Cancel":c=new Ze({streamId:s.streamId});break;default:throw new Error(`Unknown transaction type: ${s}`)}return{txType:c.txType,txSubType:c.txSubType,intentionData:c.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new nn(t);break;case"Claim":n=new en(t);break;case"ClaimByProxy":n=new tn(t);break;case"SetAutoClaim":n=new an(t);break;case"Cancel":n=new Ze(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as qp,TransactionSubTypes as Jc}from"@msafe/sui3-utils";import{buildCoinTransferTxb as jp}from"@msafe/sui3-utils";var Ho=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return jp(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as Up}from"@msafe/sui3-utils";var Xo=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return Up(n,this.data,o.address)}static fromData(t){return new a(t)}};var zo=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=qp}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case Jc.assets.coin.send:o=Ho.fromData(e.intentionData);break;case Jc.assets.object.send:o=Xo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as cl}from"@msafe/sui3-utils";var Zc=!1,rn={ProtocolPackage:"0x1e4a13a0494d5facdbe8473e74127b838c2d446ecec0ce262e2eddafa77259cb",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function Qr(){if(!Zc)try{let a=await fetch("https://open-api.naviprotocol.io/api/msafe").then(i=>i.json()),{packageId:e,borrowFee:t,borrowFeeAddress:n,pool:o}=a;e&&(rn.ProtocolPackage=e),t&&(rn.borrowFee=t),n&&(rn.borrowFeeAddress=n),o&&(rn.pool=o),Zc=!0}catch(a){console.error(a.message)}}var Ht=rn;import{TransactionType as ye}from"@msafe/sui3-utils";import{normalizeStructTag as Kp,normalizeSuiAddress as sn}from"@mysten/sui/utils";import{bcs as tl}from"@mysten/sui.js/bcs";var Go=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();if(this.isEntryClaimAndDepositTransaction())return this.decodeEntryClaimAndDeposit();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isClaimRewardTransaction(){return!!this.transactions.find(t=>!!(t.kind==="MoveCall"&&t.target.includes("claim_reward")))}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${Ht.ProtocolPackage}::incentive_v3::entry_borrow_v2`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${Ht.ProtocolPackage}::incentive_v3::borrow_v2`)}isEntryMultiDepositTransaction(){let e=`${Ht.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))?!1:t.length>1}isEntryClaimAndDepositTransaction(){let e=`${Ht.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return!!(this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))&&t.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${Ht.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${Ht.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${Ht.ProtocolPackage}::incentive_v3::withdraw_v2`)}findPoolByAssetId(e){let t=Object.values(Ht.pool).find(n=>n.assetId===e);if(!t)throw new Error("Pool not found");return t}decodeEntryClaimAndDeposit(){return{txType:ye.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return console.log("decode claims"),{txType:ye.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryBorrow",intentionData:{amount:t,assetId:e}}}decodeEntryMultiDeposit(){let e=[],t=`${Ht.ProtocolPackage}::incentive_v3::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===t){let o=new Qo(n,this.txb),i=o.decodeInputU8(3),s=o.decodeInputU64(5);e.push({assetId:i,amount:s})}}),{txType:ye.Other,type:"EntryMultiDeposit",intentionData:{list:e}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryDeposit",intentionData:{amount:t,assetId:e}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6);return{txType:ye.Other,type:"EntryRepay",intentionData:{amount:t,assetId:e}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryWithdraw",intentionData:{amount:t,assetId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(Ht.ProtocolPackage));return new Qo(e,this.txb)}},Qo=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return sn(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return tl.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return sn(e.value.Object.ImmOrOwned.objectId)}return sn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return sn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return sn(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return tl.de(t,new Uint8Array(n))}typeArg(e){return Kp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{Transaction as el}from"@mysten/sui/transactions";import{depositCoinPTB as Vp,withdrawCoinPTB as $p,repayCoinPTB as Hp,borrowCoinPTB as Xp,claimLendingRewardsPTB as nl,getUserAvailableLendingRewards as ol}from"@naviprotocol/lending";async function Ee(a,e,t,n){return await Vp(a,e,t,{amount:n}),a}async function al(a,e,t,n){let[o]=await $p(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function il(a,e,t,n){let[o]=await Xp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Yr(a,e,t,n){return await Hp(a,e,t,{amount:n}),a}async function rl(a,e){let t=new el,n=await ol(e,{client:a});return await nl(t,n),t}async function sl(a,e){let t=new el,n=await ol(e,{client:a});return await nl(t,n,{customCoinReceive:{type:"depositNAVI",depositNAVI:{fallbackReceiveAddress:e}}}),t}var Yo=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await rl(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var Jo=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await sl(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Gp}from"@mysten/sui/transactions";import{getPool as zp}from"@naviprotocol/lending";async function Jt(a){return zp(a)}var Zo=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Gp;console.log("build",this.data);let s=await Jt(n);return await il(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Qp}from"@mysten/sui/transactions";async function Ne(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var ta=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,c=new Qp;console.log("build",this.data);let p=await Jt(i);if(i===0){let[D]=c.splitCoins(c.gas,[s]);return await Ee(c,p,D,s)}let b=await Ne(n,o.address,p.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${p.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let D=1;for(;D<b.data.length;)c.mergeCoins(S,[b.data[D].coinObjectId]),D++}return await Ee(c,p,c.object(S),s)}static fromData(t){return new a(t)}};import{Transaction as Yp}from"@mysten/sui/transactions";var ea=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,c=new Yp;console.log("build",this.data);let p=await Jt(i);if(i===0){let[w]=c.splitCoins(c.gas,[s]);return Yr(c,p,w,s)}let b=await Ne(n,o.address,p.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${p.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let w=1;for(;w<b.data.length;)c.mergeCoins(S,[b.data[w].coinObjectId]),w++}return Yr(c,p,c.object(S),s)}static fromData(t){return new a(t)}};import{Transaction as Jp}from"@mysten/sui/transactions";var na=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Jp;console.log("build",this.data);let s=await Jt(n);return await al(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Zp}from"@mysten/sui/transactions";var oa=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:i}=this.data,s=new Zp;console.log("build",this.data);for(let c=0;c<i.length;c++){let{assetId:p,amount:b}=i[c],S=await Jt(p);if(p===0){let[x]=s.splitCoins(s.gas,[b]);await Ee(s,S,x,b);continue}let w=await Ne(n,o.address,S.suiCoinType);if(!w.data[0])throw new Error(`Insufficient balance for ${S.suiCoinType} Token`);let D=w.data[0].coinObjectId;if(w.data.length>=2){let x=1;for(;x<w.data.length;)s.mergeCoins(D,[w.data[x].coinObjectId]),x++}await Ee(s,S,s.object(D),b)}return s}static fromData(t){return new a(t)}};import{Transaction as td}from"@mysten/sui/transactions";var aa=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return console.log("build",this.data),td.from(this.data.content)}static fromData(t){return new a(t)}};var ia=class{application="navi";supportSDK="@mysten/sui";async deserialize(e){if(await Qr(),e.appContext?.content)return{txType:cl.Other,txSubType:"PlainTransaction",intentionData:{content:e.appContext.content,scene:e.appContext.scene||"unknown"}};let{transaction:t}=e,o=new Go(t).decode();return{txType:cl.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await Qr(),e.txSubType){case"EntryDeposit":o=ta.fromData(e.intentionData);break;case"EntryBorrow":o=Zo.fromData(e.intentionData);break;case"EntryRepay":o=ea.fromData(e.intentionData);break;case"EntryWithdraw":o=na.fromData(e.intentionData);break;case"EntryMultiDeposit":o=oa.fromData(e.intentionData);break;case"ClaimReward":o=Yo.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=Jo.fromData(e.intentionData);break;case"PlainTransaction":o=aa.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as ed,TransactionType as ll}from"@msafe/sui3-utils";import{fromHex as nd}from"@mysten/bcs";import{Transaction as od}from"@mysten/sui/transactions";import ad from"sort-keys-recursive";var ul="msafe-plain-tx",ml=ed.others.plain,Jr=class a{constructor(e){this.data=e}application=ul;txType=ll.Other;txSubType=ml;serialize(){return JSON.stringify(ad(this.data))}async build(e){return od.from(nd(this.data.content))}static fromData(e){return new a(e)}},ra=class{application;supportSDK="@mysten/sui";constructor(){this.application=ul}async deserialize(e){let{content:t}=e.appContext;return{txType:ll.Other,txSubType:ml,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return Jr.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{SuiClient as pl}from"@mysten/sui/client";import{Transaction as md}from"@mysten/sui/transactions";import{SuiClient as es}from"@mysten/sui.js/client";import{TransactionBlock as pd}from"@mysten/sui.js/transactions";import{RequestManager as cd,HTTPTransport as ld,Client as ud}from"@open-rpc/client-js";var id={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Zr=class extends Error{},sa=class extends Zr{code;type;constructor(e,t){super(e),this.code=t,this.type=id[t]??"ServerError"}};function rd(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var sd={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},ca=class{endpoint;options;#n=0;#a=0;#t=null;#e=null;#i=new Set;#o=new Map;constructor(e,t={}){this.endpoint=e,this.options={...sd,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=rd(this.endpoint))}async makeRequest(e,t){let n=await this.#r();return new Promise((o,i)=>{this.#n+=1,this.#o.set(this.#n,{resolve:o,reject:i,timeout:setTimeout(()=>{this.#o.delete(this.#n),i(new Error(`Request timeout: ${e}`))},this.options.callTimeout)}),n.send(JSON.stringify({jsonrpc:"2.0",id:this.#n,method:e,params:t}))}).then(({error:o,result:i})=>{if(o)throw new sa(o.message,o.code);return i})}#r(){return this.#e?this.#e:(this.#e=new Promise(e=>{this.#t?.close(),this.#t=new this.options.WebSocketConstructor(this.endpoint),this.#t.addEventListener("open",()=>{this.#a=0,e(this.#t)}),this.#t.addEventListener("close",()=>{this.#a++,this.#a<=this.options.maxReconnects&&setTimeout(()=>{this.#s()},this.options.reconnectTimeout)}),this.#t.addEventListener("message",({data:t})=>{let n;try{n=JSON.parse(t)}catch(o){console.error(new Error(`Failed to parse RPC message: ${t}`,{cause:o}));return}if("id"in n&&n.id!=null&&this.#o.has(n.id)){let{resolve:o,timeout:i}=this.#o.get(n.id);clearTimeout(i),o(n)}else if("params"in n){let{params:o}=n;this.#i.forEach(i=>{i.subscriptionId===o.subscription&&o.subscription===i.subscriptionId&&i.onMessage(o.result)})}})}),this.#e)}async#s(){return this.#t?.close(),this.#e=null,Promise.allSettled([...this.#i].map(e=>e.subscribe(this)))}async subscribe(e){let t=new ts(e);return this.#i.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},ts=class{subscriptionId=null;input;subscribed=!1;constructor(e){this.input=e}onMessage(e){this.subscribed&&this.input.onMessage(e)}async unsubscribe(e){let{subscriptionId:t}=this;return this.subscribed=!1,t==null?!1:(this.subscriptionId=null,e.makeRequest(this.input.unsubscribe,[t]))}async subscribe(e){this.subscriptionId=null,this.subscribed=!0;let t=await e.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=t)}};var ue=class{rpcClient;websocketClient;constructor({url:e,websocket:{url:t,...n}={},rpc:o}){let i=new ld(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new ud(new cd([i])),this.websocketClient=new ca(t??e,n)}async request(e){return await this.rpcClient.request(e)}async subscribe(e){let t=await this.websocketClient.subscribe(e);return async()=>!!await t()}};var la=class a{apps;constructor(){this.apps=new Map}static fromHelpers(e){let t=new a;for(let n=0;n<e.length;n++){let o=e[n];switch(o.supportSDK){case"@mysten/sui.js":t.addLegacyHelper(o);break;case"@mysten/sui":t.addHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return t}addLegacyHelper(e){this.apps.set(e.application,new os(e))}addHelper(e){this.apps.set(e.application,new ns(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},ns=class{constructor(e){this.helper=e}async deserialize(e){let t=new pl({transport:new ue({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new es({transport:new ue({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=md.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:i})}async build(e){let t=new pl({transport:new ue({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiClient:t});o.setSender(e.account.address);let i=await o.build({client:t});return pd.from(i)}},os=class{constructor(e){this.helper=e}async deserialize(e){let t=new es({transport:new ue({url:e.clientUrl,rpc:{url:e.clientUrl}})});return this.helper.deserialize({...e,transactionBlock:e.transactionBlock,suiClient:t})}async build(e){let t=new es({transport:new ue({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");return this.helper.build({...e,suiClient:t})}};import{TransactionType as wd}from"@msafe/sui3-utils";import{getFullnodeUrl as Cd}from"@mysten/sui/client";import{Scallop as Dd}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Et}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as yl}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as dd}from"@mysten/sui/utils";var me=class{constructor(e,t){this.transaction=e;this.scallopClient=t;this.scallopClient=t,this.inputs=e.getData().inputs,this.commands=e.getData().commands,this.movecallsAsSet=new Set(this.commands.filter(this.isMoveCall).map(n=>`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`))}inputs;commands;movecallsAsSet;get address(){return this.scallopClient.address}get utils(){return this.scallopClient.utils}get coreId(){return{protocolPkg:this.address.get("core.packages.protocol.id"),market:this.address.get("core.market"),version:this.address.get("core.version"),coinDecimalsRegistry:this.address.get("core.coinDecimalsRegistry"),xOracle:this.address.get("core.oracles.xOracle"),spoolPkg:this.address.get("spool.id"),borrowIncentivePkg:this.address.get("borrowIncentive.id"),veScaPkgId:this.address.get("vesca.id"),veScaObjId:this.address.get("vesca.object"),scoin:this.address.get("scoin.id"),referral:this.address.get("referral.id")}}matchMoveCallCommand(e,t){let{address:n,module:o,name:i}=dd(t);return e?e.package===n&&e.module===o&&e.function===i:!1}isMoveCall(e){return e.$kind==="MoveCall"&&!!e.MoveCall}filterMoveCallCommands(e,t){return this.isMoveCall(e)&&this.matchMoveCallCommand(e.MoveCall,t)}getMoveCallCommands(e){let t=new Set(e),n=e.reduce((i,s,c)=>(i[s]=c,i),{}),o=[];return this.commands.forEach(i=>{this.isMoveCall(i)&&i.MoveCall&&t.has(i.MoveCall.package)&&(o[n[i.MoveCall.package]]=i.MoveCall)}),o}hasMoveCallCommand(e){return this.movecallsAsSet.has(e)}};import{bcs as as}from"@mysten/sui/bcs";import{normalizeStructTag as fd,normalizeSuiAddress as cn}from"@mysten/sui/utils";var is=class a{constructor(e,t,n=0){this.moveCall=e;this.transaction=t;let o=[];e?.MoveCall&&t.getData().commands.filter((i,s)=>{if(i.$kind==="MoveCall"){let c=`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,p=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return c===p?(o.push(s),!0):!1}return!1}),this.cmdIdx=o[n]}cmdIdx;get txBlockTransactions(){return this.transaction.blockData.transactions[this.cmdIdx]}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"U64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"U8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"Address");return cn(t)}decodeInputString(e){return this.decodePureArg(e,"String")}decodeInputBool(e){return this.decodePureArg(e,"Bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return t}getNestedInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="NestedResult")throw new Error("not input type");return this.transaction.blockData.transactions[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure,o=as[t];return as[t].parse(new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return cn(e.value.Object.ImmOrOwned.objectId)}return cn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return cn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return cn(e.value.Object.Shared.objectId)}static getPureInput(e){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let t=e.value.Pure;return as.U64.parse(new Uint8Array(t))}typeArg(e){return fd(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},N=is;var rs=class{constructor(e,t){this.splitCoin=e;this.txb=t}getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(N.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},Wt=rs;import{normalizeStructTag as dl,SUI_CLOCK_OBJECT_ID as fl,SUI_TYPE_ARG as hd}from"@mysten/sui/utils";var hl=async(a,e)=>{let t=await a.scallopSuiKit.client.getObject({id:e,options:{showContent:!0}});if(t?.data?.content?.dataType!=="moveObject")return!1;let o=t.data.content.fields.lock_key?.fields.name;if(!o)return!1;let i=a.address.get("borrowIncentive.object");return o===`${i.slice(2)}::incentive_account::IncentiveProgramLockKey`},We={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},Vt={unstakeObligation:(a,e,t)=>a.moveCall(`${We.id}::user::unstake`,[We.incentivePools,We.incentiveAccounts,a.object(e),a.object(t),fl],[dl(hd)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${We.id}::user::redeem_rewards`,[We.incentivePools,We.incentiveAccounts,a.object(e),a.object(t),fl],[dl(n)])};var gl=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var ua=class extends me{decode(){if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingScoinTransaction())return this.decodeWithdrawLendingScoin();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithReferralTransaction())return this.decodeBorrowWithReferral();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayWithBoostTransaction())return this.decodeRepayWithBoost();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isMigrateScoinTransaction())return this.decodeMigrateScoin()}isMigrateScoinTransaction(){return this.hasMoveCallCommand(`${this.coreId.scoin}::s_coin_converter::mint_s_coin`)}isSupplyLendingTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::mint::mint`),t=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::stake`);return e&&t}isUnstakeAndWithdrawTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::unstake`),t=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`);return e&&t}isStakeSpoolTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`)}isWithdrawLendingScoinTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`),t=this.hasMoveCallCommand(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`);return e&&t}isDepositCollateralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`);return e&&t}isBorrowWithReferralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`)}isRepayTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::repay::repay`)}isRepayWithBoostTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::repay::repay`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`);return e&&t}isUnstakeSpoolTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return e||t}isOpenObligationTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::open_obligation::open_obligation`)}isMigrateAndClaim(){let e=this.hasMoveCallCommand(`${yl}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`),n=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake`);return e&&(t||n)}get helperClaimLendingReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(t=>new N(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new N(t,this.transaction))}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new N(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${yl}::user::redeem_rewards`)).map(t=>new N(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new N(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new N(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new N(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new N(e,this.transaction)}get helperBurnScoin(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new N(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new N(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new N(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new N(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new N(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new N(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new N(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new N(e,this.transaction)}decodeMigrateScoin(){return{txType:Et.Other,type:"MigrateScoin",intentionData:{}}}decodeMigrateAndClaim(){let e;this.helperStakeObligationWithVeSca.moveCall&&(e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let t=this.helperClaimBorrowReward[0].decodeOwnedObjectId(2),n=this.helperClaimBorrowReward[0].decodeSharedObjectId(3),o=this.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:Et.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Et.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Wt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Et.Other,type:"SupplyLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLending(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperRedeem.getNestedInputParam(2),n=new Wt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Et.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0));console.log({coinName:e});let t=this.helperBurnScoin.getNestedInputParam(1),n=new Wt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Et.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeDepositCollateral(){let e=this.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),t=this.helperDepositCollateral.getNestedInputParam(3),n=new Wt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Et.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:o,collateralCoinName:e}}}decodeWithdrawCollateral(){let e=this.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),t=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:Et.Other,type:"WithdrawCollateral",intentionData:{amount:t,collateralCoinName:e,obligationKey:o,obligationId:n}}}decodeBorrow(){let e=this.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Et.Other,type:"Borrow",intentionData:{amount:t,coinName:e,obligationKey:o,obligationId:n}}}decodeBorrowWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperBorrow.decodeInputU64(5),o=this.helperBorrow.decodeSharedObjectId(1),i=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Et.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:e,obligationKey:i,obligationId:o,veScaKey:t}}}decodeBorrowWithReferral(){let e=this.utils.parseCoinNameFromType(this.helperBorrowWithReferral.typeArg(0)),t;this.helperStakeObligationWithVeSca.moveCall&&(t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let n=this.helperBorrowWithReferral.decodeInputU64(6),o=this.helperBorrowWithReferral.decodeSharedObjectId(1),i=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:Et.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:e,obligationKey:i,obligationId:o,veScaKey:t}}}decodeRepay(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperRepay.getNestedInputParam(3),n=new Wt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Et.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:e}}}decodeRepayWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new Wt(n,this.transaction).getAmountInput().reduce((s,c)=>s+c,0),i=this.helperRepay.decodeSharedObjectId(1);return{txType:Et.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:i,coinName:e,veScaKey:t}}}decodeStakeSpool(){let e;this.isCreateStakeAccountTransaction()||(e=this.helperStake.decodeOwnedObjectId(1));let t=0;if(this.helperBurnScoin.moveCall){let i=this.helperBurnScoin.getNestedInputParam(1);t=new Wt(i,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}if(this.helperStake.moveCall&&t===0){let i=this.helperStake.getNestedInputParam(2);t=new Wt(i,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Et.Other,type:"StakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeUnstakeSpool(){let e=this.helperUnstake.decodeOwnedObjectId(1),t=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Et.Other,type:"UnstakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeSupplyWithStakeSpool(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Wt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Et.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let e=[];this.helperUnstakes.forEach(o=>{let i=o.decodeOwnedObjectId(1),s=o.decodeInputU64(2);e.push({id:i,coin:s})});let t=this.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new Wt(o,this.transaction).getAmountInput().reduce((i,s)=>i+s,0)}return{txType:Et.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:e}}}decodeClaimReward(){let e=[],t=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let i=o.decodeOwnedObjectId(2),s=o.typeArg(0),c=this.utils.parseCoinNameFromType(s);e.push({stakeMarketCoinName:c,stakeAccountId:i})}),this.helperClaimBorrowV2Reward.forEach(o=>{let i=o.decodeSharedObjectId(4),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:s,obligationKey:i,rewardCoinName:c})}),this.helperClaimBorrowReward.forEach(o=>{let i=o.decodeSharedObjectId(2),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:s,obligationKey:i,rewardCoinName:c})}),{txType:Et.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as cs}from"@msafe/sui3-utils";var ma=class extends me{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(t=>new N(t,this.transaction))}get helperBindReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new N(e,this.transaction)}decodeCreateReferralLink(){return{txType:cs.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:cs.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:cs.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as ee}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as gd}from"@scallop-io/sui-scallop-sdk";var pa=class extends me{async decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMergeVeSca())return this.decodeMergeVesca();if(this.isSplitVeSca())return this.decodeSplitVesca();if(this.isVeScaObligationBindings())return this.decodeVeScaObligationBindings();if(await this.isTransferVeScaKey())return this.decodeTransferVeScaKey()}isStakeScaFirsTime(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let e=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),t=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!e&&!!t}isRedeemSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}isMergeVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::merge`)}isSplitVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::split`)}isVeScaObligationBindings(){let e=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`)),o=e.length>0&&t.length>0&&e.length===t.length,i=n.length>0;return this.commands.length===e.length+t.length+n.length&&(o||i)}async isTransferVeScaKey(){let e=this.commands.filter(p=>p.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(p=>p.$kind==="Input").map(({Input:p})=>p);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((p,b)=>p.$kind==="Object"&&o.has(b)).map(p=>p.Object.ImmOrOwnedObject),s=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,c=gl(i.map(({objectId:p})=>p),50);for(let p=0;p<c.length;p++){let b=c[p];if((await this.scallopClient.scallopSuiKit.queryGetObjects(b,{showType:!0})).some(w=>w.type!==s))return!1}return i.length>0}get helperStakeMoreSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new N(e,this.transaction)}get helperStakeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new N(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new N(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new N(e,this.transaction)}get helperRenewExpired(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new N(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${gd}::user::unstake`));return new N(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new N(e,this.transaction)}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new N(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new N(t,this.transaction)}getVeScaObligationBindingHelpers(){let e=`${this.coreId.borrowIncentivePkg}::user::unstake_v2`,t=`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,n=`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`,o=[],i=0,s=0,c=0;return this.commands.forEach(p=>{this.filterMoveCallCommands(p,e)?(o.push({action:"unstake",helper:new N(p,this.transaction,i)}),i++):this.filterMoveCallCommands(p,t)?(o.push({action:"stake",helper:new N(p,this.transaction,s)}),s++):this.filterMoveCallCommands(p,n)&&(o.push({action:"deactivate",helper:new N(p,this.transaction,c)}),c++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:ee.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new Wt(e,this.transaction).getAmountInput().reduce((k,M)=>k+M,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),i=!!this.helperRedeemSca.moveCall,s=[],c=[],p=[];this.helperOldUnstakeObligation.moveCall&&(s=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(c=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(p=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let b=!1,S=!1,w,D,x=[{condition:s,isOld:!0},{condition:c,isOld:!1},{condition:p,isOld:!1}];for(let k=0;k<x.length;k++)x[k].condition.length>1&&([D,w]=x[k].condition,b=!0,S=x[k].isOld);return{txType:ee.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:w,obligationKey:D,veScaKey:o,isHaveRedeem:i,isObligationLocked:b,isOldBorrowIncentive:S}}}decodeExtendStakePeriod(){let e=this.helperExtendStakePeriod.decodeInputU64(4),t=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],i=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(i=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let s=!1,c=!1,p,b,S=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:i,isOld:!1}];for(let w=0;w<S.length;w++)S[w].condition.length>1&&([b,p]=S[w].condition,s=!0,c=S[w].isOld);return{txType:ee.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:p,obligationKey:b,veScaKey:t,isObligationLocked:s,isOldBorrowIncentive:c}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new Wt(e,this.transaction).getAmountInput().reduce((x,k)=>x+k,0),o=[],i=[],s,c=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let p=!1,b=!1,S,w,D=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:c,isOld:!1}];for(let x=0;x<D.length;x++)D[x].condition.length>1&&([w,S]=D[x].condition,p=!0,b=D[x].isOld);return{txType:ee.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:S,obligationKey:w,isOldBorrowIncentive:b,isObligationLocked:p}}}decodeStakeSca(){let e,t;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(e=this.helperStakeSca.getNestedInputParam(3),t=this.helperStakeSca.decodeInputU64(4)):e=this.helperStakeMoreSca.getNestedInputParam(4);let n=new Wt(e,this.transaction).getAmountInput().reduce((x,k)=>x+k,0),o=[],i=[],s,c=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let p=!1,b=!1,S,w,D=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:c,isOld:!1}];for(let x=0;x<D.length;x++)D[x].condition.length>1&&([w,S]=D[x].condition,p=!0,b=D[x].isOld);return{txType:ee.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:S,obligationKey:w,veScaKey:s,isObligationLocked:p,isOldBorrowIncentive:b}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:ee.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:ee.Other,type:"SplitVeSca",intentionData:t}}decodeVeScaObligationBindings(){let e=this.getVeScaObligationBindingHelpers(),t=(o,i)=>{switch(o){case"stake":return{veScaKey:i.decodeOwnedObjectId(9),obligationId:i.decodeSharedObjectId(4),obligationKey:i.decodeOwnedObjectId(3)};case"unstake":return{obligationId:i.decodeSharedObjectId(4),obligationKey:i.decodeOwnedObjectId(3)};case"deactivate":return{veScaKey:i.decodeOwnedObjectId(4),obligationId:i.decodeSharedObjectId(3)};default:throw new Error(`Invalid action ${o}`)}},n=e.map(({action:o,helper:i})=>({action:o,args:t(o,i)}));return{txType:ee.Other,type:"VeScaObligationBindings",intentionData:{bindingDatas:n}}}decodeTransferVeScaKey(){let e=this.commands.filter(s=>s.$kind==="TransferObjects"),{objects:t}=e[0].TransferObjects,n=t.filter(s=>s.$kind==="Input").map(({Input:s})=>s);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((s,c)=>s.$kind==="Object"&&o.has(c)).map(s=>s.Object.ImmOrOwnedObject);return{xType:ee.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:i}}}};import yd from"sort-keys-recursive";var A=class{constructor(e){this.data=e}get application(){return"msafe-core"}serialize(){return JSON.stringify(yd(this.data))}isObligationLocked=async(e,t)=>{let n=await e.getObject({id:typeof t=="string"?t:t.objectId,options:{showContent:!0}}),o=!1;return n&&n?.data.content?.dataType==="moveObject"&&"lock_key"in n.data.content.fields&&(o=!!n.data.content.fields.lock_key),o};async buildTxWithRefreshObligation(e,t,n){let o=e.builder.createTxBlock();o.setSender(t.walletAddress);let{obligationId:i,obligationKey:s}=t;return await this.isObligationLocked(e.scallopSuiKit.client,i)?(await o.unstakeObligationQuick(i,s),await n(e,o,t),await o.stakeObligationWithVeScaQuick(i,s,t.veScaKey)):await n(e,o,t),o}};var da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:i,obligationId:s,obligationKey:c}=this.data,p=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:p,obligationId:s,obligationKey:c},async(S,w)=>{let D=await w.borrowQuick(+i,o,s,c);w.transferObjects([D],p)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var fa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:i,veScaKey:s,amount:c,coinName:p}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:i,veScaKey:s},async(S,w)=>{let D=await w.borrowQuick(+c,p,o,i);w.transferObjects([D],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var ha=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:i,obligationKey:s,veScaKey:c,coinName:p,amount:b}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:i,obligationKey:s,veScaKey:c},async(w,D)=>{let x=D.claimReferralTicket(p),k=await D.borrowWithReferralQuick(+b,p,x,i,s);D.burnReferralTicket(x,p),D.transferObjects([k],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as bd}from"@mysten/sui/utils";var ga=class a extends A{txType;txSubType;constructor(e={}){super(e)}async claimIncentiveRewards(e,t){let n=e.builder.createTxBlock();n.setSender(t);let o=await e.query.getAllStakeAccounts(t),i=await e.query.getLendings(void 0,t),s=await e.query.getObligations(t),c=Object.values(await e.query.getObligationAccounts(t)??[]),p=(()=>{let D=[...e.constants.whitelist.spool].map(x=>e.utils.parseCoinName(x));return Object.values(i??[]).filter(x=>!!x&&D.includes(x.coinName)).reduce((x,k)=>{let M=e.utils.parseMarketCoinName(k.coinName);return x[M]||(x[M]=0),x[M]+=k.availableClaimCoin,x},{})})(),b={};Object.entries(o).forEach(([D,x])=>{for(let k=0;k<x.length;k++){let M=x[k];if(!p[D])continue;let L=n.claim(M.id,D);b.sui?b.sui.push(L):b.sui=[L]}});let S=(()=>{let D={};return D.sui=Object.values(p).reduce((x,k)=>x+k,0),c.forEach(x=>{Object.values(x.borrowIncentives).forEach(k=>{k&&k.rewards.forEach(M=>{D[M.coinName]||(D[M.coinName]=0),D[M.coinName]?D[M.coinName]+=M.availableClaimCoin:D[M.coinName]=M.availableClaimCoin})})}),D})();if(s.length>0&&c.length>0)for(let D=0;D<c.length;D++){let x=c[D],k=!1,M=s.find(U=>U.id===x.obligationId)?.keyId,L={};if(M){if(Object.values(x.borrowIncentives).forEach(U=>{if(U){let q=U.rewards.filter(Mt=>{let W=Mt.coinName;return Mt.availableClaimCoin>0&&!L[W]});k=q.length>0,q.forEach(Mt=>{let W=n.claimBorrowIncentive(x.obligationId,M,Mt.coinName);L[Mt.coinName]=!0,b[Mt.coinName]?b[Mt.coinName].push(W):b[Mt.coinName]=[W]})}}),S.sui>0){let U=Vt.redeem_rewards(n,M,x.obligationId,bd);b.sui?b.sui.push(U):b.sui=[U]}if(k&&await hl(e.query,x.obligationId)){n.unstakeObligation(x.obligationId,M);let q=await e.query.getBindedVeScaKey(x.obligationId);q?n.stakeObligationWithVesca(x.obligationId,M,q):n.stakeObligation(x.obligationId,M)}}}let w=(await Promise.all(Object.entries(b).map(async([D,x])=>{let k=x[0];if(x.length>1&&n.mergeCoins(k,x.slice(1)),D==="sui"){n.mergeCoins(n.gas,[k]);return}return await e.builder.utils.mergeSimilarCoins(n,k,e.utils.parseCoinType(D),t),k}))).filter(D=>!!D);return w.length>0&&n.transferObjects(w,t),n.txBlock}async build(e){return this.claimIncentiveRewards(e.scallopClient,e.account.address)}static fromData(e={}){return new a(e)}};var ya=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.depositCollateral(this.data.collateralCoinName,+this.data.amount,!1,this.data.obligationId)}static fromData(t){return new a(t)}};var ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:i,obligationId:s,rewardCoinName:c,veScaKey:p}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=Vt.redeem_rewards(b,i,s,n.utils.parseCoinType(c));return b.transferObjects([S],o),await b.unstakeObligationQuick(s,i),p?await b.stakeObligationWithVeScaQuick(s,i,p):await b.stakeObligationQuick(s,i),b.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new a(t)}};var Ta=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new a(t)}};var Sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.openObligation(!1)}static fromData(t){return new a(t)}};var Ia=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:c,obligationKey:p}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:c,obligationKey:p},async(S,w)=>{await w.repayQuick(+s,i,c)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:c,veScaKey:p}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=n.constants.whitelist.borrowing.has(i);return S&&await b.unstakeObligationQuick(c,void 0),await b.repayQuick(+s,i,c),S&&await b.stakeObligationWithVeScaQuick(c,void 0,p),b.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var Ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.deposit(this.data.coinName,+this.data.amount,!1,t.account.address)}static fromData(t){return new a(t)}};var Da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new a(t)}};var xa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async unstakeAndWithdraw(t,n,o){let i=t.builder.createTxBlock();i.setSender(o);let{stakeAccountId:s,amount:c,coinName:p}=this.data,b=[];for(let S=0;S<s.length;S++){let{id:w,coin:D}=s[S],x=t.utils.parseMarketCoinName(p),[k]=await i.unstakeQuick(D,x,w);if(k){let M=i.withdraw(k,p);b.push(M)}}if(c>0){let S=await i.withdrawQuick(c,p);b.push(S)}return b.length>1&&i.mergeCoins(b[0],b.slice(1)),i.transferObjects(b,o),i.txBlock}async build(t){return this.unstakeAndWithdraw(t.scallopClient,this.data,t.account.address)}static fromData(t){return new a(t)}};var ka=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),!1,this.data.obligationId,this.data.obligationKey,t.account.address)}static fromData(t){return new a(t)}};var va=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdraw(this.data.coinName,Number(this.data.amount),!1,t.account.address)}static fromData(t){return new a(t)}};var Aa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async bindReferral({account:t,scallopClient:n}){let o=t.address,i=n.builder.createTxBlock();return i.setSender(o),i.bindToReferral(this.data.veScaKey),i.txBlock}async build(t){return this.bindReferral(t)}static fromData(t){return new a(t)}};var Ma=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:i}=this.data,s=t.address,c=n.builder.createTxBlock();c.setSender(s);let p=i.map(b=>n.utils.parseCoinNameFromType(b));return await c.claimReferralRevenueQuick(o,p),c.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new a(t)}};var Oa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async createReferralLink({account:t,scallopClient:n}){let o=t.address,i=n.builder.createTxBlock();i.setSender(o);let s=i.mintEmptyVeSca();return i.transferObjects([s],o),i.txBlock}async build(t){return this.createReferralLink(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as Td}from"@scallop-io/sui-scallop-sdk";var Pa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:i,unlockTime:s,obligationId:c,obligationKey:p,isOldBorrowIncentive:b,isObligationLocked:S}=this.data,w=t.address,D=n.builder.createTxBlock();D.setSender(w);let x=await n.utils.selectCoins(o,Td,w),[k,M]=D.takeAmountFromCoins(x,o);return D.extendLockPeriod(i,s),D.extendLockAmount(i,k),D.transferObjects([M],w),!c||!p||(S&&(b?Vt.unstakeObligation(D,c,p):D.unstakeObligation(c,p)),D.stakeObligationWithVesca(c,p,i)),D.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var Ra=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:i,unlockTime:s,obligationId:c,obligationKey:p,isObligationLocked:b,isOldBorrowIncentive:S}=this.data,w=n.builder.createTxBlock();return w.setSender(o),w.extendLockPeriod(i,s),c&&p&&(b&&(S?Vt.unstakeObligation(w,p,c):w.unstakeObligation(c,p)),w.stakeObligationWithVesca(c,p,i)),w.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var Ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,sourceVeScaKey:s}=this.data,[c,p]=await Promise.all([n.getBindedObligationId(i),n.getBindedObligationId(s)]);c&&await t.unstakeObligationQuick(c),p&&await t.unstakeObligationQuick(p),o(t,i,s),c&&await t.stakeObligationWithVeScaQuick(c,void 0,i),p&&await t.stakeObligationWithVeScaQuick(p,void 0,s)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,async(s,c,p)=>{s.mergeVeSca(i.object(c),i.object(p))}),i.txBlock}static fromData(t){return new a(t)}};var Ea=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async redeemSca({account:t,scallopClient:n}){let{veScaKey:o}=this.data,i=t.address,s=n.builder.createTxBlock();return s.setSender(i),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.redeemSca(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as Sd}from"@scallop-io/sui-scallop-sdk";var Na=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,unlockTime:s,veScaKey:c,isHaveRedeem:p,obligation:b,obligationKey:S,isObligationLocked:w,isOldBorrowIncentive:D}=this.data,x=n.builder.createTxBlock();if(x.setSender(o),p){let U=x.redeemSca(c);x.transferObjects([U],o)}let k=await n.builder.utils.selectCoins(i,Sd,o),[M,L]=x.takeAmountFromCoins(k,i);return x.transferObjects([L],o),x.renewExpiredVeSca(c,M,s),!b||!S||(w&&(D?Vt.unstakeObligation(x,S,b):x.unstakeObligation(b,S)),x.stakeObligationWithVesca(b,S,c)),x.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var Wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,splitAmount:s}=this.data,c=await n.getBindedObligationId(i);c&&await t.unstakeObligationQuick(c),o(t,i,s.toString()),c&&await t.stakeObligationWithVeScaQuick(c,void 0,i)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,(s,c,p)=>{let b=s.splitVeSca(c,p.toString());s.transferObjects([b],o)}),i.txBlock}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as Id}from"@scallop-io/sui-scallop-sdk";var _a=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,isObligationLocked:s,isOldBorrowIncentive:c,obligationId:p,obligationKey:b,unlockTime:S,veScaKey:w}=this.data,D=n.builder.createTxBlock();D.setSender(o);let x=await n.utils.selectCoins(i,Id,o),[k,M]=D.takeAmountFromCoins(x,i),L;return w?D.extendLockAmount(w,k):L=D.lockSca(k,S),p&&b&&(s&&(c?Vt.unstakeObligation(D,b,p):D.unstakeObligation(p,b)),D.stakeObligationWithVesca(p,b,w||L)),w||D.transferObjects([L,M],o),D.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var La=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:i,coinName:s,stakeAccountId:c}=this.data,p=n.builder.createTxBlock();p.setSender(o);let b=await p.depositQuick(+i,s),S=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(S))return p.txBlock;let w=await n.query.getStakeAccounts(S,o),D=c||(w.length>0?w[0].id:void 0);if(D)await p.stakeQuick(b,S,D);else{let x=p.createStakeAccount(S);await p.stakeQuick(b,S,x),p.transferObjects([x],o)}return p.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var ja=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;handleAction(t,{action:n,args:o}){switch(n){case"deactivate":return t.deactivateBoost(o.obligationId,o.veScaKey);case"stake":return t.stakeObligationWithVesca(o.obligationId,o.obligationKey,o.veScaKey);case"unstake":return t.unstakeObligation(o.obligationId,o.obligationKey);default:throw new Error("Invalid action")}}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{bindingDatas:s}=this.data;return s.forEach(c=>this.handleAction(i,c)),i.txBlock}static fromData(t){return new a(t)}};var Ua=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{veScaKeys:s}=this.data;return i.transferObjects(s.map(c=>i.objectRef(c)),i.pure.address(o)),i.txBlock}static fromData(t){return new a(t)}};var qa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async withdrawUnlockedSca({account:t,scallopClient:n}){let{vescaKey:o}=this.data,i=t.address,s=n.builder.createTxBlock();return s.setSender(i),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.withdrawUnlockedSca(t)}static fromData(t){return new a(t)}};var Fa=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new Dd({addressId:"67c44a103fe1b8c454eb9699",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??Cd("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n),console.log("transaction",t);let i=new ua(t,this.scallopClient),s=new ma(t,this.scallopClient),c=new pa(t,this.scallopClient),p=i.decode()||s.decode()||await c.decode();if(!p)throw new Error("Unknown transaction type");return{txType:wd.Other,txSubType:p.type,intentionData:p.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:i,intentionData:s}=e;await this.initScallopClient(n.address,t);let c;switch(i){case"SupplyLending":c=Ca.fromData(s);break;case"WithdrawLending":c=va.fromData(s);break;case"Borrow":c=da.fromData(s);break;case"Repay":c=Ia.fromData(s);break;case"DepositCollateral":c=ya.fromData(s);break;case"WithdrawCollateral":c=ka.fromData(s);break;case"OpenObligation":c=Sa.fromData(s);break;case"UnstakeSpool":c=Da.fromData(s);break;case"ClaimIncentiveReward":c=ga.fromData(s);break;case"BorrowWithBoost":c=fa.fromData(s);break;case"StakeSca":c=_a.fromData(s);break;case"ExtendStakePeriod":c=Ra.fromData(s);break;case"ExtendPeriodAndStakeMore":c=Pa.fromData(s);break;case"RenewExpStakePeriod":c=Na.fromData(s);break;case"WithdrawStakedSca":c=qa.fromData(s);break;case"SupplyAndStakeLending":c=La.fromData(s);break;case"WithdrawAndUnstakeLending":c=xa.fromData(s);break;case"RedeemSca":c=Ea.fromData(s);break;case"MigrateAndClaim":c=ba.fromData(s);break;case"BorrowWithReferral":c=ha.fromData(s);break;case"CreateReferralLink":c=Oa.fromData(s);break;case"ClaimRevenueReferral":c=Ma.fromData(s);break;case"BindReferral":c=Aa.fromData(s);break;case"MigrateScoin":c=Ta.fromData(s);break;case"RepayWithBoost":c=wa.fromData(s);break;case"MergeVeSca":c=Ba.fromData(s);break;case"SplitVeSca":c=Wa.fromData(s);break;case"VeScaObligationBindings":{c=ja.fromData(s);break}case"TransferVeScaKeys":{c=Ua.fromData(s);break}default:throw new Error("not implemented")}return c.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as of}from"@msafe/sui3-utils";import{TransactionType as mn}from"@msafe/sui3-utils";import{normalizeStructTag as be}from"@mysten/sui/utils";import{API_URL as Ud}from"@suilend/sui-fe";import{TransactionType as _d}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Ld,LENDING_MARKET_TYPE as jd,SuilendClient as ls}from"@suilend/sdk";import{TransactionType as _e}from"@msafe/sui3-utils";import{fromBase64 as bl,toHex as Tl}from"@mysten/bcs";import{normalizeStructTag as ln}from"@mysten/sui/utils";import{MAX_U64 as Le}from"@suilend/sui-fe";import Sl from"bignumber.js";var Ka=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("lending_market::MintEvent"))},t=ln(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:_e.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(p=>p.type.includes("lending_market::RedeemEvent"))},n=ln(t.RedeemEvent.parsedJson.coin_type.name),o=t.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let i=e.withdraw_ctokens.MoveCall.arguments[4].Input,s=new Sl(Tl(bl(this.inputs[i].Pure.bytes)),16).toString(),c=s===Le.toString();return console.log("decodeWithdraw - isMax:",c,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",Le.toString()),c&&(o=Le.toString()),{txType:_e.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(p=>p.type.includes("lending_market::BorrowEvent"))},n=ln(t.BorrowEvent.parsedJson.coin_type.name),o=`${+t.BorrowEvent.parsedJson.liquidity_amount-+t.BorrowEvent.parsedJson.origination_fee_amount}`;console.log("Decoder.decodeBorrow",n,o);let i=e.borrow_request.MoveCall.arguments[4].Input,s=new Sl(Tl(bl(this.inputs[i].Pure.bytes)),16).toString(),c=s===Le.toString();return console.log("decodeBorrow - isMax:",c,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",Le.toString()),c&&(o=Le.toString()),{txType:_e.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=ln(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:_e.Other,type:"repay",intentionData:{coinType:t,value:n}}}decodeClaim(){let e={ClaimReward:this.simResult.events.filter(n=>n.type.includes("lending_market::ClaimReward"))},t={};for(let n=0;n<e.ClaimReward.length;n++){let o=e.ClaimReward[n],i=ln(o.parsedJson.coin_type.name),s=o.parsedJson.liquidity_amount;t[i]=`${+(t[i]??"0")+ +s}`}return console.log("Decoder.decodeClaimRewards",t),{txType:_e.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:_e.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as vd}from"@mysten/sui/transactions";import kd from"sort-keys-recursive";var Lt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(kd(this.data))}};var Va=class a extends Lt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("BorrowIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new vd;return await i.borrowAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,p),p}static fromData(t){return console.log("BorrowIntention.fromData",t),new a(t)}};import{Transaction as Rd}from"@mysten/sui/transactions";import{normalizeStructTag as Ad}from"@mysten/sui/utils";import{Side as un}from"@suilend/sdk";import{isSendPoints as Md}from"@suilend/sui-fe";import Od from"bignumber.js";var Pd=(a,e)=>{let t={[un.DEPOSIT]:[],[un.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[un.DEPOSIT,un.BORROW].forEach(o=>{let i=o===un.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,s=e.userRewardManagers.find(c=>c.poolRewardManagerId===i.id);s&&(t[o]=i.poolRewards.map((c,p)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(p),rewardCoinType:Ad(c.coinType.name),side:o})).filter(c=>!Md(c.rewardCoinType)&&!!s.rewards[Number(c.rewardIndex)]&&new Od(s.rewards[Number(c.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},$a=Pd;var Ha=class a extends Lt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Rd;return i.claimRewardsAndSendToUser(o.address,s.id,$a(i,c),p),p}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as Bd}from"@mysten/sui/transactions";var Xa=class a extends Lt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimAndDepositIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Bd;return i.claimRewardsAndDeposit(o.address,s.id,$a(i,c),p),p}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Ed}from"@mysten/sui/transactions";var za=class a extends Lt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;console.log("DepositIntention.build",n,o,i,s,c);let p=new Ed;return await i.depositIntoObligation(o.address,this.data.coinType,this.data.value,p,s?.id),p}static fromData(t){return console.log("DepositIntention.fromData",t),new a(t)}};import{Transaction as Nd}from"@mysten/sui/transactions";var Ga=class a extends Lt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("RepayIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Nd;return await i.repayIntoObligation(o.address,c.id,this.data.coinType,this.data.value,p),p}static fromData(t){return console.log("RepayIntention.fromData",t),new a(t)}};import{Transaction as Wd}from"@mysten/sui/transactions";var Qa=class a extends Lt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("WithdrawIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Wd;return await i.withdrawAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,p),p}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};var Ya=async(a,e)=>{let t=await ls.initialize(Ld,jd,a),n=await ls.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(i=>ls.getObligation(i.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},Ja=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await Ya(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",i,"utils:",this.utils,"suiClient:",n);let c=new Ka(t,i).decode();return{txType:_d.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await Ya(i,s));let c;switch(n){case"deposit":c=za.fromData(o);break;case"withdraw":c=Qa.fromData(o);break;case"borrow":c=Va.fromData(o);break;case"repay":c=Ga.fromData(o);break;case"claim":c=Ha.fromData(o);break;case"claimAndDeposit":c=Xa.fromData(o);break;default:throw new Error("not implemented")}let p=window.localStorage.getItem("obligationId"),b=this.utils.obligations?.find(w=>w.id===p)??this.utils.obligations?.[0],S=this.utils.obligationOwnerCaps?.find(w=>w.obligationId===b?.id);return c.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:S,obligation:b})}};var us=async(a,e)=>{let t=await Ya(a,e),n=await fetch(`${Ud}/springsui/lst-info`),o=await n.json();if(n?.statusCode===500)throw new Error("Failed to fetch SpringSui LST data");let s=Object.fromEntries(Object.values(o).map(c=>[c.LIQUID_STAKING_INFO.type,c.LIQUID_STAKING_INFO]));return{...t,LIQUID_STAKING_INFO_MAP:s}};var Za=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isStakeTransaction())return this.decodeStake();if(this.isStakeAndDepositTransaction())return this.decodeStakeAndDeposit();if(this.isConvertTransaction())return this.decodeConvert();if(this.isConvertAndDepositTransaction())return this.decodeConvertAndDeposit();if(this.isUnstakeTransaction())return this.decodeUnstake();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintMoveCallCommands(){return!!this.getMoveCallCommand("mint")}hasRedeemMoveCallCommands(){return!!this.getMoveCallCommand("redeem")}isStakeTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isStakeAndDepositTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isConvertTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isConvertAndDepositTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isUnstakeTransaction(){return!this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}decodeStake(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=be(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:mn.Other,type:"stake",intentionData:{amount:n,outCoinType:t}}}decodeStakeAndDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=be(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:mn.Other,type:"stakeAndDeposit",intentionData:{amount:n,outCoinType:t}}}decodeConvert(){let e={RedeemEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::MintEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=be(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:mn.Other,type:"convert",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeConvertAndDeposit(){let e={RedeemEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::MintEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=be(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:mn.Other,type:"convertAndDeposit",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeUnstake(){let e={RedeemEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::RedeemEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:mn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as Kd}from"@mysten/sui/transactions";import{LstClient as Il,convertLstsAndRebalanceAndSendToUser as Vd}from"@suilend/springsui-sdk";import Fd from"sort-keys-recursive";var $t=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Fd(this.data))}};var ti=class a extends $t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("ConvertIntention.build",n,o,i,s,c,p);let b=await Il.initialize(n,Object.values(s).find(D=>D.type===this.data.inCoinType)),S=await Il.initialize(n,Object.values(s).find(D=>D.type===this.data.outCoinType)),w=new Kd;return Vd(b,S,w,o.address,this.data.amount),w}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as $d}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Hd,sendObligationToUser as Xd}from"@suilend/sdk";import{LstClient as wl,convertLstsAndRebalance as zd}from"@suilend/springsui-sdk";var ei=class a extends $t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("ConvertAndDepositIntention.build",n,o,i,s,c,p);let b=await wl.initialize(n,Object.values(s).find(M=>M.type===this.data.inCoinType)),S=await wl.initialize(n,Object.values(s).find(M=>M.type===this.data.outCoinType)),w=new $d,{obligationOwnerCapId:D,didCreate:x}=Hd(i,w,c),k=zd(b,S,w,o.address,this.data.amount);return i.deposit(k,this.data.outCoinType,D,w),x&&Xd(D,o.address,w),w}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Gd}from"@mysten/sui/transactions";import{LstClient as Qd}from"@suilend/springsui-sdk";var ni=class a extends $t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("StakeIntention.build",n,o,i,s,c,p);let b=await Qd.initialize(n,Object.values(s).find(w=>w.type===this.data.outCoinType)),S=new Gd;return b.mintAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as Yd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Jd,sendObligationToUser as Zd}from"@suilend/sdk";import{LstClient as tf}from"@suilend/springsui-sdk";var oi=class a extends $t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("StakeAndDepositIntention.build",n,o,i,s,c,p);let b=await tf.initialize(n,Object.values(s).find(k=>k.type===this.data.outCoinType)),S=new Yd,{obligationOwnerCapId:w,didCreate:D}=Jd(i,S,c),x=b.mintAmountAndRebalance(S,o.address,this.data.amount);return i.deposit(x,this.data.outCoinType,w,S),D&&Zd(w,o.address,S),S}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as ef}from"@mysten/sui/transactions";import{LstClient as nf}from"@suilend/springsui-sdk";var ai=class a extends $t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("UnstakeIntention.build",n,o,i,s,c,p);let b=await nf.initialize(n,Object.values(s).find(w=>w.type===this.data.inCoinType)),S=new ef;return b.redeemAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(t)}};var ii=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await us(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",i);let c=new Za(t,i).decode();return{txType:of.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await us(i,s));let c;switch(n){case"stake":c=ni.fromData(o);break;case"stakeAndDeposit":c=oi.fromData(o);break;case"convert":c=ti.fromData(o);break;case"convertAndDeposit":c=ei.fromData(o);break;case"unstake":c=ai.fromData(o);break;default:throw new Error("not implemented")}return c.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,LIQUID_STAKING_INFO_MAP:this.utils.LIQUID_STAKING_INFO_MAP,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as cf}from"@msafe/sui3-utils";import{TransactionType as Cl}from"@msafe/sui3-utils";var ri=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isMintTransaction()){let e=this.getLiquidityChangeEvent("MintEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeMint(t)}if(this.isRedeemTransaction()){let e=this.getLiquidityChangeEvent("RedeemEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeRedeem(t)}throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(e){return this.simResult.events.find(t=>this.isLiquidityChangeEventType(t.type,e))}isLiquidityChangeEventType(e,t){return e.includes(t)}isMintTransaction(){return!!this.getMoveCallCommand("mint")}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(e){let{event:{sui_amount_in:t}}=e;return console.log("Decoder.decodeMint",t),{txType:Cl.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:Cl.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as rf}from"@alphafi/stsui-sdk";var si=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new rf(i).mint(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("MintIntention.fromData",t),new a(t)}};import{LST as sf}from"@alphafi/stsui-sdk";var ci=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new sf(i).redeem(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var li=class{application="stsui";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n}=e,o=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("StSuiHelper Sim result - ",o);let s=new ri(t,o).decode();return{txType:cf.Other,txSubType:s.type,intentionData:s.intentionData}}async build(e){let{account:t}=e;console.log("StSui build transaction type",e.txSubType);let n;switch(e.txSubType){case"mint":n=si.fromData(e.intentionData);break;case"redeem":n=ci.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as Of}from"@msafe/sui3-utils";import{TurbosSdk as Pf}from"turbos-clmm-sdk";import{TransactionType as jt}from"@msafe/sui3-utils";import{fromBase64 as je}from"@mysten/bcs";import{bcs as Ue}from"@mysten/sui/bcs";import{BN as uf}from"turbos-clmm-sdk";var Xt={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},zt={PackageId:"0xdee9"};var mf=(a,e,t,n)=>{if(a===1)switch(n.findIndex(s=>s===e)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${e}`)}switch(t.findIndex(i=>i===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},ui=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}get transactions(){return this.txb.getData().commands}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}async decode(e){if(this.isSwapTransaction())return this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(e);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(e);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(e);if(this.isRemoveLiquidityWithReturnTransaction())return this.decodeRemoveLiquidityWithReturn(e);if(this.isDecreaseLiquidityWithReturnTransaction())return this.decodeDecreaseLiquidityWithReturn(e);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(e){return this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===e:!1)}getMoveCallsTransaction(e){return e.every(t=>this.transactions.find(n=>n.$kind==="MoveCall"?`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`===t:!1))}getSwapMoveCallTransaction(e){return this.transactions.find(t=>{if(t.$kind==="MoveCall"){let n=`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`;return!!e.includes(n)}return!1})}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isDecreaseLiquidityWithReturnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity_with_return_`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${Xt.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${Xt.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isRemoveLiquidityWithReturnTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity_with_return_`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${zt.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${zt.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let e=this.transactions.find(x=>x.$kind==="MoveCall"),t=0,n=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;console.log(n,"moveCallTarget"),this.swap2Layer.includes(n)&&(t=1);let o=mf(t,n,this.swap1Layer,this.swap2Layer),i=o.map((x,k)=>{let M=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(k)),L=this.helper.decodeInputU128(this.helper.getInputsIndex(4+k+t)),U=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new uf(L.toString()));return{pool:M,a2b:x,nextTickIndex:U}}),s=o[0]||t===1?e.MoveCall.typeArguments[0]:e.MoveCall.typeArguments[1],c=t===1?e.MoveCall.typeArguments[4]:o[0]?e.MoveCall.typeArguments[1]:e.MoveCall.typeArguments[0],p=this.helper.decodeInputAddress(this.helper.getInputsIndex(6+2*t)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(7+2*t)),S=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),w=this.helper.decodeInputU64(this.helper.getInputsIndex(2+t)),D=this.helper.decodeInputU64(this.helper.getInputsIndex(3+t));return{txType:jt.Other,type:"Swap",intentionData:{routes:i,coinTypeA:s,coinTypeB:c,address:p,amountA:S?w:D,amountB:S?D:w,amountSpecifiedIsInput:S,slippage:"0.1",deadline:b}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeInputAddress(this.helper.getInputsIndex(12)),n=this.helper.decodeInputU64(this.helper.getInputsIndex(8)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(9)),i=this.helper.decodeInputU32(this.helper.getInputsIndex(4)),s=this.helper.decodeInputBool(this.helper.getInputsIndex(5)),c=this.helper.decodeInputU32(this.helper.getInputsIndex(6)),p=this.helper.decodeInputBool(this.helper.getInputsIndex(7)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(13));return{txType:jt.Other,type:"AddLiquidity",intentionData:{pool:e,slippage:30,address:t,amountA:n,amountB:o,tickLower:s?-i:i,tickUpper:p?-c:c,deadline:b}}}decodeIncreaseLiquidity(e){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(4)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(6)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(9));return{txType:jt.Other,type:"IncreaseLiquidity",intentionData:{pool:t,slippage:30,address:e,amountA:o,amountB:i,nft:n,deadline:s}}}decodeDecreaseLiquidity(e){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),c=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:jt.Other,type:"DecreaseLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:c}}}decodeDecreaseLiquidityWithReturn(e){console.log(this.helper,"decodeDecreaseLiquidityWithReturn this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeOwnedObjectId(2),o=this.helper.decodeInputU64(3),i=this.helper.decodeInputU64(4),s=this.helper.decodeInputU64(5),c=this.helper.decodeInputU64(6);return{txType:jt.Other,type:"DecreaseLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:c}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(5)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:jt.Other,type:"CollectFee",intentionData:{pool:e,address:n,collectAmountA:o,collectAmountB:i,nft:t,deadline:s}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(6)),o=[0,0,0];this.collectRewardHelper.forEach(s=>{let c=s.decodeInputU64(s.getInputsIndex(4)),p=s.decodeInputU64(s.getInputsIndex(5));o[c]=p});let i=this.helper.decodeInputU64(7);return{txType:jt.Other,type:"CollectReward",intentionData:{pool:e,address:n,rewardAmounts:o,nft:t,deadline:i}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2));return{txType:jt.Other,type:"Burn",intentionData:{pool:e,nft:t}}}decodeRemoveLiquidity(e){console.log(this.helper,"decodeRemoveLiquidity this.helper");let t=30,n=this.decreaseLiquidityHelper.decodeSharedObjectId(this.decreaseLiquidityHelper.getInputsIndex(0)),o=this.decreaseLiquidityHelper.decodeOwnedObjectId(this.decreaseLiquidityHelper.getInputsIndex(2)),i=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(3)),s=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(4)),c=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(5)),p=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(6)),b=[0,0,0];this.collectRewardHelper.forEach(D=>{let x=D.decodeInputU64(D.getInputsIndex(4)),k=D.decodeInputU64(D.getInputsIndex(5));b[x]=k});let S=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,w=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(4))||0;return{txType:jt.Other,type:"RemoveLiquidity",intentionData:{pool:n,decreaseLiquidity:i,nft:o,amountA:(s/(100-t)*100).toFixed(0),amountB:(c/(100-t)*100).toFixed(0),slippage:t,address:e,collectAmountA:S,collectAmountB:w,rewardAmounts:b,deadline:p}}}decodeRemoveLiquidityWithReturn(e){console.log(this.helper,"decodeRemoveLiquidityWithReturn this.helper");let t=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeOwnedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),i=this.decreaseLiquidityHelper.decodeInputU64(4),s=this.decreaseLiquidityHelper.decodeInputU64(5),c=this.decreaseLiquidityHelper.decodeInputU64(6),p=this.collectRewardHelper.map(w=>w.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,S=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:jt.Other,type:"removeLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,collectAmountA:b,collectAmountB:S,rewardAmounts:p,deadline:c}}}decodePrixClaim(){return{txType:jt.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:jt.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let e=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),t=this.swapExactBaseForQuoteHelper.decodeInputU64(3),n=this.swapExactBaseForQuoteHelper.shortTypeArg(0),o=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:jt.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}decodeSwapExactQuoteForBase(){let e=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),t=this.swapExactQuoteForBaseHelper.decodeInputU64(3),n=this.swapExactQuoteForBaseHelper.shortTypeArg(0),o=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:jt.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}get helper(){let e=this.transactions.find(t=>{if(t.$kind==="MoveCall"){let n=`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`;return n!=="0x2::coin::zero"&&n!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero"}return!1});return new pe(e,this.txb)}get collectRewardHelper(){return this.transactions.filter(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::collect_reward`:!1).map(t=>new pe(t,this.txb))}get collectFeeHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::collect`:!1);return new pe(e,this.txb)}get decreaseLiquidityHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::decrease_liquidity`:!1);return new pe(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${zt.PackageId}::clob_v2::swap_exact_base_for_quote`:!1);return new pe(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${zt.PackageId}::clob_v2::swap_exact_quote_for_base`:!1);return new pe(e,this.txb)}},pe=class{constructor(e,t){this.moveCall=e;this.txb=t}get inputs(){return this.txb.getData().inputs}getInputsIndex(e){return this.moveCall.MoveCall.arguments[e].Input}decodeSharedObjectId(e){return this.inputs[e].Object?.SharedObject?.objectId||this.inputs[e].UnresolvedObject.objectId}decodeOwnedObjectId(e){return this.inputs[e].Object?.ImmOrOwnedObject?.objectId||this.inputs[e].UnresolvedObject.objectId}decodeInputU128(e){return Number(Ue.u128().parse(Uint8Array.from(je(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(Ue.u64().parse(Uint8Array.from(je(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(Ue.u32().parse(Uint8Array.from(je(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(Ue.u8().parse(Uint8Array.from(je(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return Ue.Address.parse(Uint8Array.from(je(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return Ue.bool().parse(Uint8Array.from(je(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as pf}from"turbos-clmm-sdk";var mi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new pf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,tickLower:b,tickUpper:S,deadline:w,txb:D}=this.data;return n.pool.addLiquidity({pool:o,slippage:p,address:i,amountA:s,amountB:c,tickLower:b,tickUpper:S,deadline:w,txb:D})}static fromData(t){return new a(t)}};import{TurbosSdk as df}from"turbos-clmm-sdk";var pi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new df(t.network.replace("sui:",""),t.suiClient),{pool:o,nft:i,txb:s}=this.data;return n.position.burn({pool:o,nft:i,txb:s})}static fromData(t){return new a(t)}};import{TurbosSdk as ff}from"turbos-clmm-sdk";var di=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ff(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,collectAmountA:c,collectAmountB:p,deadline:b,txb:S}=this.data;return n.pool.collectFee({pool:o,address:i,collectAmountA:c,collectAmountB:p,nft:s,deadline:b,txb:S})}static fromData(t){return new a(t)}};import{TurbosSdk as hf}from"turbos-clmm-sdk";var fi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new hf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,rewardAmounts:c,deadline:p,txb:b}=this.data;return n.pool.collectReward({pool:o,address:i,rewardAmounts:c,nft:s,deadline:p,txb:b})}static fromData(t){return new a(t)}};import{TurbosSdk as gf}from"turbos-clmm-sdk";var hi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new gf(t.network.replace("sui:",""),t.suiClient),{fee:o,address:i,tickLower:s,tickUpper:c,sqrtPrice:p,slippage:b,coinTypeA:S,coinTypeB:w,amountA:D,amountB:x,deadline:k,txb:M}=this.data;return n.pool.createPool({fee:o,amountA:D,amountB:x,address:i,tickLower:s,tickUpper:c,sqrtPrice:p,slippage:b,coinTypeA:S,coinTypeB:w,deadline:k,txb:M})}static fromData(t){return new a(t)}};import{TurbosSdk as yf}from"turbos-clmm-sdk";var gi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new yf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,nft:b,decreaseLiquidity:S,deadline:w,txb:D}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:p,address:i,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:w,txb:D})}static fromData(t){return new a(t)}};import{TurbosSdk as bf}from"turbos-clmm-sdk";var yi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new bf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,nft:b,decreaseLiquidity:S,deadline:w}=this.data,{txb:D,coinA:x,coinB:k}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:p,address:i,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:w});return D.transferObjects([x,k],this.data.address),D}static fromData(t){return new a(t)}};import{TurbosSdk as Tf}from"turbos-clmm-sdk";var bi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Tf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,nft:b,deadline:S,txb:w}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:p,address:i,amountA:s,amountB:c,nft:b,deadline:S,txb:w})}static fromData(t){return new a(t)}};import{Transaction as Sf}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as If}from"@mysten/sui/utils";var Ti=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Sf;return n.moveCall({target:`${Xt.PackageId}::claim::claim`,typeArguments:[Xt.turbosCoinType],arguments:[n.object(Xt.Claim),n.object(If)]}),n}static fromData(t){return new a(t)}};import{Transaction as wf}from"@mysten/sui/transactions";var Si=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new wf;return n.moveCall({target:`${Xt.PackageId}::claim::join`,typeArguments:[Xt.turbosCoinType],arguments:[n.object(Xt.Claim)]}),n}static fromData(t){return new a(t)}};import{Transaction as Cf}from"@mysten/sui/transactions";import{TurbosSdk as Df}from"turbos-clmm-sdk";var Ii=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Df(t.network.replace("sui:",""),t.suiClient),o=new Cf;return o=await n.pool.collectFee({txb:o,...this.data}),o=await n.pool.collectReward({txb:o,...this.data}),o=await n.pool.decreaseLiquidity({txb:o,...this.data}),o=await n.position.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(t){return new a(t)}};import{TurbosSdk as xf}from"turbos-clmm-sdk";var wi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new xf(t.network.replace("sui:",""),t.suiClient),{txb:o,coinA:i,coinB:s}=await n.pool.removeLiquidityWithReturn({...this.data});return o.transferObjects([i,s],this.data.address),o}static fromData(t){return new a(t)}};import{TurbosSdk as kf}from"turbos-clmm-sdk";var Ci=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new kf(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:i,coinTypeB:s,address:c,amountA:p,amountB:b,slippage:S,amountSpecifiedIsInput:w,deadline:D,txb:x}=this.data;return n.trade.swap({routes:o,coinTypeA:i,coinTypeB:s,address:c,amountA:p,amountB:b,amountSpecifiedIsInput:w,slippage:S,deadline:D,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as Af}from"turbos-clmm-sdk";import{Transaction as Dl}from"@mysten/sui/transactions";import{normalizeSuiObjectId as xl}from"@mysten/sui/utils";import{unstable_getObjectId as vf}from"turbos-clmm-sdk";var pn=class{constructor(e){this.turbosSdk=e}async getCoinsData(e,t,n){let o=[],i;do i=await this.turbosSdk.provider.getCoins({owner:e,coinType:t,cursor:i?.nextCursor}),o.push(...i.data);while(i.hasNextPage);let s=[],c=0;return o.sort((p,b)=>Number(b.balance)-Number(p.balance)).some(p=>c>=n?!0:(c+=Number(p.balance),s.push(p),!1)),s}splitAndMergeCoin(e,t,n){if(!e||e.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(e[0].coinType)){let[s]=n.splitCoins(n.gas,[n.pure.u64(t)]);return[s,void 0]}let o=n.object(e[0].coinObjectId);e.length>1&&n.mergeCoins(o,e.slice(1).map(s=>n.object(s.coinObjectId)));let[i]=n.splitCoins(o,[n.pure.u64(t)]);return[i,o]}isSuiCoinAddress(e){return e.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(e){let t=await this.turbosSdk.provider.getOwnedObjects({owner:e,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${zt.PackageId}::custodian_v2::AccountCap`}});return t.data[0]?.data?vf(t.data[0].data):void 0}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${zt.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var kl=89,vl=1e6,Al=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,c=new Dl,p=new pn(s),b=await p.getCoinsData(i,t,o),[S,w]=p.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${t}`);let D=await p.IsAccountCap(i),x=D?c.object(D):p.createAccount(c),[k,M,L]=c.moveCall({typeArguments:[e,t],target:`${zt.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[c.object(String(n)),c.pure.u64(kl),x,c.pure.u64(o),c.object(xl("0x6")),S]});return w&&c.transferObjects([w],c.pure.address(i)),c.transferObjects([k],c.pure.address(i)),c.transferObjects([M],c.pure.address(i)),D||c.transferObjects([x],c.pure.address(i)),c.setSenderIfNotSet(i),c.setGasBudget(vl),c},Ml=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,c=new Dl,p=new pn(s),b=await p.getCoinsData(i,e,o),[S,w]=p.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${e}`);let D=await p.IsAccountCap(i),x=D?c.object(D):p.createAccount(c),k=p.zero(t,c),[M,L,U]=c.moveCall({typeArguments:[e,t],target:`${zt.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[c.object(String(n)),c.pure.u64(kl),x,c.pure.u64(o),S,k,c.object(xl("0x6"))]});return w&&c.transferObjects([w],c.pure.address(i)),c.transferObjects([M],c.pure.address(i)),c.transferObjects([L],c.pure.address(i)),D||c.transferObjects([x],c.pure.address(i)),c.setSenderIfNotSet(i),c.setGasBudget(vl),c};var Di=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Af(t.network.replace("sui:",""),t.suiClient);return await Ml({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as Mf}from"turbos-clmm-sdk";var xi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Mf(t.network.replace("sui:",""),t.suiClient);return await Al({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var ki=class{application="turbos";supportSDK="@mysten/sui";async deserialize(e){console.log(e,"input");let t=new Pf(e.network.replace("sui:","")),n=await t.contract.getConfig(),{transaction:o,account:i}=e,c=await new ui(o,t,n).decode(i.address);return{txType:Of.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.intentionData,"intentionData");let i;switch(e.txSubType){case"CreatePool":i=hi.fromData(e.intentionData);break;case"AddLiquidity":i=mi.fromData(e.intentionData);break;case"IncreaseLiquidity":i=bi.fromData(e.intentionData);break;case"DecreaseLiquidity":i=gi.fromData(e.intentionData);break;case"DecreaseLiquidityWithReturn":i=yi.fromData(e.intentionData);break;case"RemoveLiquidity":i=Ii.fromData(e.intentionData);break;case"removeLiquidityWithReturn":i=wi.fromData(e.intentionData);break;case"CollectFee":i=di.fromData(e.intentionData);break;case"CollectReward":i=fi.fromData(e.intentionData);break;case"Burn":i=pi.fromData(e.intentionData);break;case"Swap":i=Ci.fromData(e.intentionData);break;case"PrixJoin":i=Si.fromData(e.intentionData);break;case"PrixClaim":i=Ti.fromData(e.intentionData);break;case"SwapExactBaseForQuote":i=Di.fromData(e.intentionData);break;case"SwapExactQuoteForBase":i=xi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Lf}from"@msafe/sui3-utils";import{TransactionType as ms}from"@msafe/sui3-utils";import{bcs as Ol}from"@mysten/sui.js/bcs";import{normalizeStructTag as Ef,normalizeSuiAddress as dn}from"@mysten/sui.js/utils";var Rf={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},At=Rf;var vi=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${At.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${At.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${At.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:ms.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:ms.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:ms.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(At.packageId));return new ps(e,this.txb)}},ps=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return dn(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Ol.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return dn(e.value.Object.ImmOrOwned.objectId)}return dn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return dn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return dn(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Ol.de(t,new Uint8Array(n))}typeArg(e){return Ef(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as Nf}from"@mysten/sui.js/transactions";var Ai=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Nf,{ticketId:o}=this.data;return n.moveCall({target:`${At.packageId}::native_pool::burn_ticket`,arguments:[n.object(At.poolObjectId),n.object(At.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Wf}from"@mysten/sui.js/transactions";var Mi=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Wf,{amount:o}=this.data,[i]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${At.packageId}::native_pool::stake`,arguments:[n.object(At.poolObjectId),n.object(At.metadataObjectId),n.object(At.systemStateObjectId),i]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as _f}from"@mysten/sui.js/transactions";var Oi=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new _f,{amount:o}=this.data,i=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[s,...c]=i.filter(S=>S.coinType.split("::")[0]===At.certType.split("::")[0]),p=n.object(s.coinObjectId);c.length&&n.mergeCoins(p,c.map(S=>n.object(S.coinObjectId)));let b=n.splitCoins(n.object(s.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${At.packageId}::native_pool::unstake`,arguments:[n.object(At.poolObjectId),n.object(At.metadataObjectId),n.object(At.systemStateObjectId),b]}),n}static fromData(t){return new a(t)}};var Pi=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new vi(t).decode();return{txType:Lf.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=Mi.fromData(e.intentionData);break;case"UnStake":o=Oi.fromData(e.intentionData);break;case"ClaimTicket":o=Ai.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Zf}from"@msafe/sui3-utils";import{asIntN as Pl}from"@cetusprotocol/common-sdk";import{TransactionType as de}from"@msafe/sui3-utils";import{fromBase64 as fn}from"@mysten/bcs";import{bcs as hn}from"@mysten/sui/bcs";var Ri=class{constructor(e,t){this.transaction=e;this.appContext=t}async decode(){if(this.isOpenPositionTx())return this.decodeOpenPositionTx();if(this.isClosePositionTx())return this.decodeClosePositionTx();if(this.isProvideLiquidityTx())return this.decodeProvideLiquidityTx();if(this.isRemoveLiquidityTx())return this.decodeRemoveLiquidityTx();if(this.isCollectRewardsAndFeeTx())return this.decodeCollectRewardsAndFeeTx();if(this.isCollectRewardsTx())return this.decodeCollectRewardsTx();if(this.isCollectFeeTx())return this.decodeCollectFeeTx();if(this.isAggregator7KSwapTx())return this.decodeAggregator7KSwapTx();throw new Error("Unknown transaction type")}decodeOpenPositionTx(){let e=this.getMoveCallCommand("open_position"),t=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:de.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(Pl(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(Pl(BigInt(this.getU32(this.getInputIndex(e,3)))).toString()),tokenAmount:this.getU64(this.getInputIndex(t,6)),maxAmountTokenA:this.getU64(this.getInputIndex(t,7)),maxAmountTokenB:this.getU64(this.getInputIndex(t,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(t,9))}}}decodeClosePositionTx(){let e=this.getMoveCallCommand("close_position"),t=this.getCollectRewardCallData();return{txType:de.Other,type:"ClosePosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),transferTokensTo:this.getAddress(this.getInputIndex(e,4)),collectRewardTokens:t.map(n=>n.rewardCoinType),collectFeeTokens:this.getTypeArguments(e)}}}decodeProvideLiquidityTx(){let e=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:de.Other,type:"ProvideLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),tokenAmount:this.getU64(this.getInputIndex(e,6)),maxAmountTokenA:this.getU64(this.getInputIndex(e,7)),maxAmountTokenB:this.getU64(this.getInputIndex(e,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(e,9))}}}decodeRemoveLiquidityTx(){let e=this.getMoveCallCommand("remove_liquidity");return{txType:de.Other,type:"RemoveLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),liquidity:this.getU128(this.getInputIndex(e,4)),maxAmountTokenA:this.getU64(this.getInputIndex(e,5)),maxAmountTokenB:this.getU64(this.getInputIndex(e,6)),transferTokensTo:this.getAddress(this.getInputIndex(e,7)),...this.collectTokens()}}}decodeCollectRewardsTx(){let e=this.getCollectRewardCallData();return{txType:de.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:de.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:de.Other,type:"CollectRewardsAndFee",intentionData:{pool:e.pool,position:e.position,...this.collectTokens()}}}getFeeCallData(){let e=this.getMoveCallCommand("collect_fee");return{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),collectFeeTokens:this.getTypeArguments(e)}}getCollectRewardCallData(){let e=[];return this.commands.forEach(t=>{t.$kind==="MoveCall"&&t.MoveCall.function==="collect_reward"&&e.push({pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),rewardCoinType:this.getTypeArguments(t)[2]})}),e}async decodeAggregator7KSwapTx(){let{appContext:e}=this;return console.log("appContext",e),{txType:de.Other,type:"Aggregator7KSwap",intentionData:{tokenIn:e.txParams.tokenIn,tokenOut:e.txParams.tokenOut,amountIn:String(e.txParams.amountIn),maxSlippage:String(e.txParams.maxSlippage)}}}collectTokens(){let e=this.getFeeCallData(),t=this.getCollectRewardCallData();return{collectFeeTokens:e.collectFeeTokens,collectRewardTokens:t.map(n=>n.rewardCoinType)}}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}isOpenPositionTx(){return!!this.getMoveCallCommand("open_position")}isProvideLiquidityTx(){return!!this.getMoveCallCommand("provide_liquidity_with_fixed_amount")}isRemoveLiquidityTx(){return!!this.getMoveCallCommand("remove_liquidity")}isCollectRewardsTx(){return!!this.getMoveCallCommand("collect_reward")}isCollectFeeTx(){return!!this.getMoveCallCommand("collect_fee")}isCollectRewardsAndFeeTx(){return this.isCollectRewardsTx()&&this.isCollectFeeTx()}isClosePositionTx(){return!!this.getMoveCallCommand("close_position")}isAggregator7KSwapTx(){return!!this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function.toLowerCase().includes("settle"))}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getSharedObjectID(e){return this.inputs[e].Object.SharedObject.objectId}getOwnedObjectID(e){return this.inputs[e].Object.ImmOrOwnedObject.objectId}getU32(e){return String(hn.u32().parse(Uint8Array.from(fn(this.inputs[e].Pure.bytes))))}getU64(e){return hn.u64().parse(Uint8Array.from(fn(this.inputs[e].Pure.bytes)))}getU128(e){return hn.u128().parse(Uint8Array.from(fn(this.inputs[e].Pure.bytes)))}getBoolean(e){return hn.bool().parse(Uint8Array.from(fn(this.inputs[e].Pure.bytes)))}getAddress(e){return hn.Address.parse(Uint8Array.from(fn(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as $f}from"@msafe/sui3-utils";import{buildTx as qf,getQuote as Ff}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as Te,ClmmPoolUtil as Kf}from"@firefly-exchange/library-sui";import{Decimal as Vf}from"turbos-clmm-sdk";import{SuiClient as jf}from"@firefly-exchange/library-sui";import{OnChainCalls as Uf}from"@firefly-exchange/library-sui/spot";var Rl={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x67b34b728c4e28e704dcfecf7c5cf55c7fc593b6c65c20d1836d97c209c1928a"}},oe=(a,e)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new jf({url:Rl.rpc});return new Uf(t,Rl.objects,{address:e.address,isUIWallet:!1})};var Pt=class{static async OpenPosition(e,t,n){let o=oe(n,t),i=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(i,{...e,slippage:0});return await o.openPositionWithFixedAmount(i,e.lowerTick,e.upperTick,s,{returnTx:!0,sender:t.address})}static async provideLiquidity(e,t,n){let o=oe(n,t),i=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(i,e);return await o.provideLiquidityWithFixedAmount(i,e.position,s,{returnTx:!0,sender:t.address})}static async removeLiquidity(e,t,n){let o=oe(n,t),i=await o.queryChain.getPool(e.pool);return await o.removeLiquidity(i,e.position,{liquidityAmount:new Te(e.liquidity),tokenMaxA:new Te(e.maxAmountTokenA),tokenMaxB:new Te(e.maxAmountTokenB)},{returnTx:!0,sender:t.address})}static async closePosition(e,t,n){let o=oe(n,t),i=await o.queryChain.getPool(e.pool);return await o.closePosition(i,e.position,{returnTx:!0,sender:t.address})}static async collectRewards(e,t,n){let o=oe(n,t),i=await o.queryChain.getPool(e.pool);return await o.collectRewards(i,e.position,{rewardCoinsType:e.collectRewardTokens,returnTx:!0,sender:t.address})}static async collectFee(e,t,n){let o=oe(n,t),i=await o.queryChain.getPool(e.pool);return await o.collectFee(i,e.position,{returnTx:!0,sender:t.address})}static async collectRewardsAndFee(e,t,n){let o=oe(n,t),i=await o.queryChain.getPool(e.pool);return console.log(e.position),await o.collectFeeAndRewards(i,e.position,{returnTx:!0,sender:t.address})}static async aggregator7KSwap(e,t,n){let o=oe(n,t),i=await Ff({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new Vf(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await qf({quoteResponse:i,accountAddress:t.address,slippage:e.maxSlippage,commission:{partner:"0x956d6ea2da156a037952964badc51f997cc5581c86a0e05f74049e6effab9347",commissionBps:0}});return s.tx.setSender(t.address),s.tx}buildLiqInput(e,t){return{...Kf.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new Te(t.tokenAmount),t.isTokenAFixed,!0,0,new Te(e.current_sqrt_price)),tokenMaxA:new Te(t.maxAmountTokenA),tokenMaxB:new Te(t.maxAmountTokenB)}}};var Bi=class a extends I{constructor(t){super(t);this.data=t}txType=$f.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.aggregator7KSwap(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Hf}from"@msafe/sui3-utils";var Ei=class a extends I{constructor(t){super(t);this.data=t}txType=Hf.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Xf}from"@msafe/sui3-utils";var Ni=class a extends I{constructor(t){super(t);this.data=t}txType=Xf.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as zf}from"@msafe/sui3-utils";var Wi=class a extends I{constructor(t){super(t);this.data=t}txType=zf.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Gf}from"@msafe/sui3-utils";var _i=class a extends I{constructor(t){super(t);this.data=t}txType=Gf.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Qf}from"@msafe/sui3-utils";var Li=class a extends I{constructor(t){super(t);this.data=t}txType=Qf.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Yf}from"@msafe/sui3-utils";var ji=class a extends I{constructor(t){super(t);this.data=t}txType=Yf.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Jf}from"@msafe/sui3-utils";var Ui=class a extends I{constructor(t){super(t);this.data=t}txType=Jf.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var qi=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(e){console.log("Bluefin helper deserialize input: ",e);let{transaction:t,appContext:n}=e,i=await new Ri(t,n).decode();return{txType:Zf.Other,txSubType:i.type,intentionData:{appContext:e.appContext,...i.intentionData}}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.txSubType);let i;switch(e.txSubType){case"OpenPosition":i=Li.fromData(e.intentionData);break;case"ProvideLiquidity":i=ji.fromData(e.intentionData);break;case"RemoveLiquidity":i=Ui.fromData(e.intentionData);break;case"ClosePosition":i=Ei.fromData(e.intentionData);break;case"CollectFee":i=Ni.fromData(e.intentionData);break;case"CollectRewards":i=Wi.fromData(e.intentionData);break;case"CollectRewardsAndFee":i=_i.fromData(e.intentionData);break;case"Aggregator7KSwap":i=Bi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Lh}from"@msafe/sui3-utils";import{MmtSDK as ch}from"@mmt-finance/clmm-sdk";import{Transaction as lh}from"@mysten/sui/transactions";var R=fu(El());import{convertI32ToSigned as fs,TickMath as _l}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";import ah from"bignumber.js";var th="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Nt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",eh=async({suiClient:a,address:e,type:t})=>{let n,o=[],i=0;do{try{let s=await a.getCoins({owner:e,coinType:t,cursor:n,limit:50});o=o.concat(s.data),n=s.nextCursor,(!s.hasNextPage||i===8)&&(n=null)}catch(s){console.log(s),n=null}i++}while(n!==null);return o},nh=(a,e)=>{let t=[],n=BigInt(0);for(let o of e)n<a&&!t.includes(o.objectId)&&(t.push(o.objectId),n+=BigInt(o.balance)),o.balance===BigInt(0)&&!t.includes(o.objectId)&&t.push(o.objectId);if(n>=a)return t;throw new Error("Insufficient balance")},oh=(a,e,t,n)=>{if(a===th){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=nh(t,e);o.length>1&&n.mergeCoins(n.object(o[0]),o.slice(1).map(s=>n.object(s)));let[i]=n.splitCoins(n.object(o[0]),[n.pure.u64(t)]);return i}};async function Nl(a,e,t,n,o){let i=await eh({suiClient:a.rpcClient,address:e,type:t});return oh(Nt(t),i.map(c=>({balance:BigInt(c.balance),objectId:c.coinObjectId})),n,o)}var Se=(a,e,t,n,o)=>{let i={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType};n?.rewarders&&n?.rewarders.length>0&&a.Pool.collectAllRewards(o,i,n.rewarders.map(s=>({coin_type:s.coinType,flow_rate:s.flowRate,reward_amount:s.rewardAmount,rewards_allocated:s.rewardsAllocated,hasEnded:s.hasEnded})),t.objectId,e),a.Pool.collectFee(o,{objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType,isStable:n.isStable,tickSpacing:n.tickSpacing},t.objectId,e)};async function Wl({sdk:a,address:e,positionId:t,pool:n,txb:o,targetCoinType:i,slippage:s}){let c={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType},p=n.rewarders.map(S=>S.coinType);p.length>0&&(console.log("claimRewardsAsTargetCoin input",{pool:c,positionId:t,rewarderCoinTypes:p,targetCoinType:i,slippage:s,toAddress:e}),await a.Pool.claimRewardsAs({txb:o,pool:c,positionId:t,rewarderCoinTypes:p,targetCoinType:i,slippage:s,toAddress:e}));let b=await a.Pool.getAllPools();return await a.Pool.claimFeeAs({txb:o,pool:c,positionId:t,targetCoinType:i,slippage:s,toAddress:e,pools:b}),o}function E(a,e,t){let n=a.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}function ih(a){let e;return(a&1)!==0?e=new R.default("79232123823359799118286999567"):e=new R.default("79228162514264337593543950336"),(a&2)!==0&&(e=E(e.mul(new R.default("79236085330515764027303304731")),96,256)),(a&4)!==0&&(e=E(e.mul(new R.default("79244008939048815603706035061")),96,256)),(a&8)!==0&&(e=E(e.mul(new R.default("79259858533276714757314932305")),96,256)),(a&16)!==0&&(e=E(e.mul(new R.default("79291567232598584799939703904")),96,256)),(a&32)!==0&&(e=E(e.mul(new R.default("79355022692464371645785046466")),96,256)),(a&64)!==0&&(e=E(e.mul(new R.default("79482085999252804386437311141")),96,256)),(a&128)!==0&&(e=E(e.mul(new R.default("79736823300114093921829183326")),96,256)),(a&256)!==0&&(e=E(e.mul(new R.default("80248749790819932309965073892")),96,256)),(a&512)!==0&&(e=E(e.mul(new R.default("81282483887344747381513967011")),96,256)),(a&1024)!==0&&(e=E(e.mul(new R.default("83390072131320151908154831281")),96,256)),(a&2048)!==0&&(e=E(e.mul(new R.default("87770609709833776024991924138")),96,256)),(a&4096)!==0&&(e=E(e.mul(new R.default("97234110755111693312479820773")),96,256)),(a&8192)!==0&&(e=E(e.mul(new R.default("119332217159966728226237229890")),96,256)),(a&16384)!==0&&(e=E(e.mul(new R.default("179736315981702064433883588727")),96,256)),(a&32768)!==0&&(e=E(e.mul(new R.default("407748233172238350107850275304")),96,256)),(a&65536)!==0&&(e=E(e.mul(new R.default("2098478828474011932436660412517")),96,256)),(a&131072)!==0&&(e=E(e.mul(new R.default("55581415166113811149459800483533")),96,256)),(a&262144)!==0&&(e=E(e.mul(new R.default("38992368544603139932233054999993551")),96,256)),E(e,32,256)}function rh(a){let e=Math.abs(a),t;return(e&1)!==0?t=new R.default("18445821805675392311"):t=new R.default("18446744073709551616"),(e&2)!==0&&(t=E(t.mul(new R.default("18444899583751176498")),64,256)),(e&4)!==0&&(t=E(t.mul(new R.default("18443055278223354162")),64,256)),(e&8)!==0&&(t=E(t.mul(new R.default("18439367220385604838")),64,256)),(e&16)!==0&&(t=E(t.mul(new R.default("18431993317065449817")),64,256)),(e&32)!==0&&(t=E(t.mul(new R.default("18417254355718160513")),64,256)),(e&64)!==0&&(t=E(t.mul(new R.default("18387811781193591352")),64,256)),(e&128)!==0&&(t=E(t.mul(new R.default("18329067761203520168")),64,256)),(e&256)!==0&&(t=E(t.mul(new R.default("18212142134806087854")),64,256)),(e&512)!==0&&(t=E(t.mul(new R.default("17980523815641551639")),64,256)),(e&1024)!==0&&(t=E(t.mul(new R.default("17526086738831147013")),64,256)),(e&2048)!==0&&(t=E(t.mul(new R.default("16651378430235024244")),64,256)),(e&4096)!==0&&(t=E(t.mul(new R.default("15030750278693429944")),64,256)),(e&8192)!==0&&(t=E(t.mul(new R.default("12247334978882834399")),64,256)),(e&16384)!==0&&(t=E(t.mul(new R.default("8131365268884726200")),64,256)),(e&32768)!==0&&(t=E(t.mul(new R.default("3584323654723342297")),64,256)),(e&65536)!==0&&(t=E(t.mul(new R.default("696457651847595233")),64,256)),(e&131072)!==0&&(t=E(t.mul(new R.default("26294789957452057")),64,256)),(e&262144)!==0&&(t=E(t.mul(new R.default("37481735321082")),64,256)),t}var Ll=(a,e,t)=>{let n=fs(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default(ih(n)):new R.default(rh(n))};function jl(a,e){if(!/^(\d+)(\.\d+)?$/.test(a))return BigInt(0);let[t,n=""]=a.split("."),o=(n+"0".repeat(e)).slice(0,e),s=(t+o).replace(/^0+/,"")||"0";return BigInt(s)}async function Zt({address:a,coinType:e,coinAmount:t,coinDecimals:n,tx:o,mmt:i}){let s=jl(t,n),c;return Number(t)?c=await Nl(i,a,Nt(e),s,o):[c]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),c}function Ul({mmt:a,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let i=Ll(fs(n),t.tickSpacing),s=Ll(fs(o),t.tickSpacing);return a.Position.openPosition(e,t,i.toString(),s.toString())}var sh=(a,e)=>{let n=1e4-Math.floor(e*100);return a*BigInt(n)/BigInt(1e4)};function Fi(a,e,t){let n=jl(a,e);return Number(a)===0?BigInt(0):sh(n,t)}async function Ie({poolId:a,currentSqrtPrice:e,tokenX:t,tokenY:n,slippagePercentage:o,isTokenX:i,suiClient:s}){let p=(await s.getObject({id:a,options:{showContent:!0}}))?.data?.content?.fields?.sqrt_price??e,b=_l.sqrtPriceX64ToPrice(new R.default(p?.toString()),t.decimals,n.decimals),S=i?(100-o)/100:(100+o)/100,w=_l.priceToSqrtPriceX64(b.mul(S),t.decimals,n.decimals);return BigInt(w.toString())}var ql=async(a,e,t,n,o,i,s,c,p,b)=>{let S=await Zt({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),w=await Zt({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),D={objectId:s,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},x=Ul({mmt:a,tx:e,poolModel:D,selectedLowTick:c,selectedHighTick:p}),k=Fi(n,i.tokenX.decimals,b),M=Fi(o,i.tokenY.decimals,b);a.Pool.addLiquidity(e,D,x,S,w,k,M,t),e.transferObjects([x],e.pure.address(t))},Fl=async(a,e,t,n,o,i,s,c,p,b,S)=>{try{let w=await Zt({mmt:a,address:n,coinType:i?s.tokenX.coinType:s.tokenY.coinType,coinAmount:o,coinDecimals:i?s.tokenX.decimals:s.tokenY.decimals,tx:e}),D={objectId:s.poolId,tokenXType:Nt(s.tokenX.coinType),tokenYType:Nt(s.tokenY.coinType),tickSpacing:s.tickSpacing},x=Ul({mmt:a,tx:e,poolModel:D,selectedLowTick:c,selectedHighTick:p}),k=await Ie({suiClient:t,poolId:s.poolId,currentSqrtPrice:s.currentSqrtPrice,tokenX:s.tokenX,tokenY:s.tokenY,slippagePercentage:b,isTokenX:i});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:D,position:x,inputCoin:w,isXtoY:i,limitSqrtPrice:k,slippagePercentage:S,transferToAddress:n,useMvr:!0}),e.transferObjects([x],e.pure.address(n))}catch(w){console.error(w)}},Kl=async(a,e,t,n,o,i,s,c)=>{let p=await Zt({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),b=await Zt({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),S={objectId:i.poolId,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},w=Fi(n,i.tokenX.decimals,c),D=Fi(o,i.tokenY.decimals,c);a.Pool.addLiquidity(e,S,s,p,b,w,D,t)},Vl=async(a,e,t,n,o,i,s,c,p)=>{try{let b=await Zt({mmt:a,address:t,coinType:o?i.tokenX.coinType:i.tokenY.coinType,coinAmount:n,coinDecimals:o?i.tokenX.decimals:i.tokenY.decimals,tx:e}),S={objectId:i.poolId,tokenXType:i.tokenX.coinType,tokenYType:i.tokenY.coinType,tickSpacing:i.tickSpacing},w=await Ie({suiClient:a.rpcClient,poolId:i.poolId,currentSqrtPrice:i.currentSqrtPrice,tokenX:i.tokenX,tokenY:i.tokenY,slippagePercentage:c,isTokenX:o});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:S,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:w,slippagePercentage:p,transferToAddress:t})}catch(b){throw console.error(b),b}},$l=(a,e)=>BigInt(e===100?a:new ah(a).multipliedBy(e/100).toFixed(0)),Hl=async(a,e,t,n,o,i)=>{let s=$l(t.liquidity,o),c=n.tokenX.coinType,p=n.tokenY.coinType,b={objectId:n?.poolId,tokenXType:c,tokenYType:p};a.Pool.removeLiquidity(i,b,t.objectId,s,BigInt(0),BigInt(0),e),Se(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)},Xl=async({sdk:a,address:e,position:t,pool:n,withdrawPercentage:o,txb:i,targetCoinType:s,slippage:c})=>{let p=$l(t.liquidity,o),b=Nt(n.tokenX.coinType),S=Nt(n.tokenY.coinType),w=Nt(s)===S,D={objectId:n?.poolId,tokenXType:b,tokenYType:S},{removeLpCoinA:x,removeLpCoinB:k}=a.Pool.removeLiquidity(i,D,t.objectId,p,BigInt(0),BigInt(0)),M=await Ie({suiClient:a.rpcClient,poolId:n.poolId,currentSqrtPrice:n.currentSqrtPrice,tokenX:n.tokenX,tokenY:n.tokenY,isTokenX:w,slippagePercentage:c}),L=w?x:k,U=i.moveCall({target:"0x2::coin::value",arguments:[L],typeArguments:[w?b:S]});i.transferObjects([w?k:x],e),a.Pool.swapV2({txb:i,transferToAddress:e,pool:D,limitSqrtPrice:M,amount:U,inputCoin:L,isXtoY:w}),Se(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)};var Ki=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=ch.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:c,selectedLowTick:p,selectedHighTick:b,slippage:S}=n,w=new lh;return await ql(t,w,o,i,s,c,c.poolId,p,b,S),w}static fromData(t){return new a(t)}};import{MmtSDK as uh}from"@mmt-finance/clmm-sdk";import{Transaction as mh}from"@mysten/sui/transactions";var Vi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=uh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:c,selectedLowTick:p,selectedHighTick:b,swapSlippage:S,addLiquiditySlippage:w}=n,D=new mh;return await Fl(t,D,t.rpcClient,o,i,s,c,p,b,S,w),D}static fromData(t){return new a(t)}};import{MmtSDK as ph}from"@mmt-finance/clmm-sdk";import{VeMMT as dh}from"@mmt-finance/ve-sdk-v1";import{Transaction as fh}from"@mysten/sui/transactions";var qe="0x35169bc93e1fddfcf3a82a9eae726d349689ed59e4b065369af8789fe59f8608::mmt::MMT";var gn=async a=>{let e=await a.getSyncEpochInfo();if(!e)throw new Error("Failed to sync epoch");return e},zl=async(a,e,t,n,o,i,s,c)=>{let p=Number(n);if(!n||Number.isNaN(p)||p<=0)throw new Error(`Bond Failed: Invalid amount: ${n}. Amount must be greater than 0`);if(!i&&!s)throw new Error("Bond Failed: Failed to calculate unbond date");if(typeof s!="number"&&!i)throw new Error("Bond Failed: Invalid unbond date");let b=await Zt({mmt:a,tx:c,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals});if(!b)throw new Error(`Bond Failed: Failed to get coin object for ${t.coinType}, amount: ${n}`);let S=await gn(e);await e.syncOrAdvanceEpoch(c,S.currentEpoch,S.syncedEpoch);let w=c.getData().commands.length;i?await e.createMaxBond(c,b,o):await e.createBond(c,b,BigInt(s),o);let x=c.getData().commands.length;if(x===0)throw new Error(`Bond Failed: Transaction has no commands. enableAutoMaxBond: ${i}, unbondAt: ${s}, amount: ${n}`);if(x===w)throw new Error(`Bond Failed: No new commands were added by bond operation. Commands before: ${w}, after: ${x}`)},Gl=async(a,e,t,n,o,i,s,c)=>{let p=await gn(a);if(await a.syncOrAdvanceEpoch(c,p.currentEpoch,p.syncedEpoch),await a.claimReward(c,t,e),o)i||await a.setNormal(c,t);else if(i)await a.setMaxBond(c,t);else{if(typeof s!="number")throw new Error("Extend Failed: Failed to calculate unbond date");if(s<n)throw new Error("Extend Failed: New duration cannot be less than current duration");await a.extend(c,t,s)}},Ql=async(a,e,t,n,o)=>{let i=await gn(a);await a.syncOrAdvanceEpoch(o,i.currentEpoch,i.syncedEpoch),await a.claimReward(o,t,e),await n.reduce(async(s,c)=>{await s,await a.claimReward(o,c,e),await a.merge(o,t,c)},Promise.resolve())},Yl=async(a,e,t,n)=>{let o=await gn(a);await a.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await a.claimReward(n,t,e),await a.unbond(n,t,e)},Jl=async(a,e,t,n)=>{if(t.length>0&&t.some(o=>o.userRewardAmount>0)){let o=await gn(a);await a.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await t.reduce(async(i,s)=>{await i,s.userRewardAmount>0&&await a.claimReward(n,s.veId,e)},Promise.resolve())}},Zl=async(a,e,t,n,o,i,s,c,p)=>{let b=Nt(i),S=[];for(let q of n)if(q.userRewardAmount>0){let Mt=await e.buildClaimRewardCoin(o,q.veId);S.push(Mt)}let w=[];for(let q of S)Array.isArray(q)?w.push(...q):w.push(q);if(w.length===0)return;if(i===Nt(qe)){o.transferObjects(w,o.pure.address(t));return}let D=c?.[i]?.[qe];if(!D||D.length===0)throw new Error(`No swap route found from ${qe} to ${i}`);let[x,...k]=w;k.length>0&&o.mergeCoins(x,k);let M=x,L=o.moveCall({target:"0x2::coin::value",arguments:[M],typeArguments:[qe]}),U=Nt(qe);for(let q=0;q<D.length;q++){let Mt=D[q],W=p.find(H=>H.poolId===Mt);if(!W)throw new Error(`Pool ${Mt} not found`);let Rt=Nt(W.tokenXType||W.tokenX?.coinType||"")===U,Ce={objectId:W.poolId,tokenXType:W.tokenXType||W.tokenX?.coinType||"",tokenYType:W.tokenYType||W.tokenY?.coinType||""},yn=await Ie({suiClient:a.rpcClient,poolId:W.poolId,currentSqrtPrice:W.currentSqrtPrice,tokenX:W.tokenX,tokenY:W.tokenY,slippagePercentage:s,isTokenX:Rt}),{outputCoin:bn,leftoverCoin:Fe}=a.Pool.swapV2({txb:o,pool:Ce,amount:L,inputCoin:M,isXtoY:Rt,limitSqrtPrice:yn});if(o.transferObjects([Fe],o.pure.address(t)),M=bn,U=Rt?Nt(W.tokenYType||W.tokenY?.coinType||""):Nt(W.tokenXType||W.tokenX?.coinType||""),U===i){o.transferObjects([M],o.pure.address(t));return}L=o.moveCall({target:"0x2::coin::value",arguments:[M],typeArguments:[U]})}o.transferObjects([M],o.pure.address(t))};var $i=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=ph.NEW({network:"mainnet"}),o=new dh(t.suiClient,"mainnet"),{params:i}=this.data,{address:s,positions:c,pools:p,veMMTs:b}=i,S=new fh;for(let w of c){let D=p.find(x=>x.poolId===w.poolId);D&&Se(n,s,w,D,S)}return await Jl(o,s,b,S),S}static fromData(t){return new a(t)}};import{MmtSDK as hh}from"@mmt-finance/clmm-sdk";import{VeMMT as gh}from"@mmt-finance/ve-sdk-v1";import{Transaction as yh}from"@mysten/sui/transactions";var Hi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=hh.NEW({network:"mainnet"}),o=new gh(t.suiClient,"mainnet"),{params:i}=this.data,{claimVeMMTParams:s}=i,{address:c,veMMTs:p,targetCoinType:b,slippage:S,claimRoutes:w,pools:D}=s,x=new yh;return await Promise.all(i.claimParams.map(k=>Wl({...k,sdk:n,txb:x}))),await Zl(n,o,c,p,x,b,S,w,D),x}static fromData(t){return new a(t)}};import{MmtSDK as bh}from"@mmt-finance/clmm-sdk";import{Transaction as Th}from"@mysten/sui/transactions";var Xi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=bh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:i,pool:s}=n,c=new Th;return Se(t,o,i,s,c),c}static fromData(t){return new a(t)}};import{MmtSDK as Sh}from"@mmt-finance/clmm-sdk";import{Transaction as Ih}from"@mysten/sui/transactions";var zi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Sh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:c,positionObjectId:p,slippage:b}=n,S=new Ih;return await Kl(t,S,o,i,s,c,p,b),S}static fromData(t){return new a(t)}};import{MmtSDK as wh}from"@mmt-finance/clmm-sdk";import{Transaction as Ch}from"@mysten/sui/transactions";var Gi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=wh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:c,positionObjectId:p,swapSlippage:b,addLiquiditySlippage:S}=n,w=new Ch;return await Vl(t,w,o,i,s,c,p,b,S),w}static fromData(t){return new a(t)}};import{MmtSDK as Dh}from"@mmt-finance/clmm-sdk";import{Transaction as xh}from"@mysten/sui/transactions";var Qi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Dh.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:i,address:s,withdrawPercentage:c,zapOutOn:p,targetCoinType:b,slippage:S}=n,w=new xh;return p?await Xl({sdk:t,address:s,position:i,pool:o,withdrawPercentage:c,txb:w,targetCoinType:b,slippage:S}):await Hl(t,s,i,o,c,w),w}static fromData(t){return new a(t)}};import{Transaction as tu}from"@mysten/sui/transactions";import{LstClient as eu}from"@suilend/springsui-sdk";var hs={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},nu=async(a,e,t)=>{let n=await eu.initialize(a,hs),o=new tu,[i]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,i);return o.transferObjects([s],e),o},ou=async(a,e,t)=>{let n=await eu.initialize(a,hs),o=await a.getCoins({owner:e,coinType:hs.type,limit:1e3});if(o.data.length===0)throw new Error("No lst coins found");let i=new tu,s=o.data[0];o.data.length>1&&i.mergeCoins(s.coinObjectId,o.data.slice(1).map(b=>b.coinObjectId));let[c]=i.splitCoins(s.coinObjectId,[BigInt(t)]),p=n.redeem(i,c);return i.transferObjects([p],e),i};var Yi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await nu(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as vh}from"@mmt-finance/clmm-sdk";import{Transaction as Ah}from"@mysten/sui/transactions";import{mappedMmtV3Pool as kh}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var au=async(a,e,t,n,o,i,s)=>{let c=await Zt({mmt:a,tx:i,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals}),p=i.moveCall({target:"0x2::coin::value",typeArguments:[t.coinType],arguments:[c]}),b=t.coinType;for(let S=0;S<e.length;S+=1){let{poolId:w,tokenX:D,tokenY:x,isStable:k,currentSqrtPrice:M}=e[S],{id:L,isReverse:U}=kh[w]||{id:w,isReverse:!1},q=Nt(D.coinType)===Nt(b);q=U?!q:q;let Mt=U?x.coinType:D.coinType,W=U?D.coinType:x.coinType,we=await Ie({poolId:L,tokenX:D,tokenY:x,slippagePercentage:s,isTokenX:q,suiClient:a.rpcClient,currentSqrtPrice:M}),Rt=a.Pool.swap(i,{objectId:L,tokenXType:Mt,tokenYType:W,isStable:k},p,c,q,void 0,we,!1);i.transferObjects([c],i.pure.address(o)),c=Rt,b=q?W:Mt,p=i.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[c]})}i.transferObjects([c],i.pure.address(o))};var Ji=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=vh.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:i,amountIn:s,address:c,slippage:p}=n,b=new Ah;return await au(t,o,i,s,c,b,p),b}static fromData(t){return new a(t)}};var Zi=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await ou(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as Mh}from"@mmt-finance/clmm-sdk";import{VeMMT as Oh}from"@mmt-finance/ve-sdk-v1";import{Transaction as Ph}from"@mysten/sui/transactions";var tr=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=Mh.NEW({network:"mainnet"}),o=new Oh(t.suiClient,"mainnet"),{params:i}=this.data,{token:s,amount:c,address:p,enableAutoMaxBond:b,unbondAt:S}=i,w=new Ph;return await zl(n,o,s,c,p,b,S,w),w}static fromData(t){return new a(t)}};import{VeMMT as Rh}from"@mmt-finance/ve-sdk-v1";import{Transaction as Bh}from"@mysten/sui/transactions";var er=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Rh(t.suiClient,"mainnet"),{params:o}=this.data,{address:i,veId:s,currentUnbondAt:c,isCurrentlyMaxBond:p,enableAutoMaxBond:b,unbondAt:S}=o,w=new Bh;return await Gl(n,i,s,c,p,b,S,w),w}static fromData(t){return new a(t)}};import{VeMMT as Eh}from"@mmt-finance/ve-sdk-v1";import{Transaction as Nh}from"@mysten/sui/transactions";var nr=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Eh(t.suiClient,"mainnet"),{params:o}=this.data,{address:i,veId:s,selectedVeMMTIds:c}=o,p=new Nh;return await Ql(n,i,s,c,p),p}static fromData(t){return new a(t)}};import{VeMMT as Wh}from"@mmt-finance/ve-sdk-v1";import{Transaction as _h}from"@mysten/sui/transactions";var or=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Wh(t.suiClient,"mainnet"),{params:o}=this.data,{address:i,veId:s}=o,c=new _h;return await Yl(n,i,s,c),c}static fromData(t){return new a(t)}};var ar=class{application="mmt-dex";supportSDK="@mysten/sui";async deserialize(e){let{appContext:t}=e;return{txType:Lh.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=Ji.fromData(e.intentionData);break;case"AddLiquidity":t=Ki.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=Vi.fromData(e.intentionData);break;case"ClaimRewards":t=Xi.fromData(e.intentionData);break;case"ClaimAllRewards":t=$i.fromData(e.intentionData);break;case"ClaimRewardsAs":t=Hi.fromData(e.intentionData);break;case"RemoveLiquidity":t=Qi.fromData(e.intentionData);break;case"StakeXSui":t=Yi.fromData(e.intentionData);break;case"UnstakeXSui":t=Zi.fromData(e.intentionData);break;case"ManageLiquidity":t=zi.fromData(e.intentionData);break;case"ManageLiquiditySingleSide":t=Gi.fromData(e.intentionData);break;case"Bond":t=tr.fromData(e.intentionData);break;case"Extend":t=er.fromData(e.intentionData);break;case"Merge":t=nr.fromData(e.intentionData);break;case"Unbond":t=or.fromData(e.intentionData);break;default:throw new Error(`not implemented ${e.txSubType}`)}return t.build({suiClient:e.suiClient})}};import{TransactionType as iu}from"@msafe/sui3-utils";import{Transaction as jh}from"@mysten/sui/transactions";import{Vaults as Uh}from"@nemoprotocol/vaults-sdk";var ir=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=Uh.createSDK({client:n}),s=new jh;return await i.deposit(this.data,o.address,s),s}static fromData(t){return new a(t)}};import{Transaction as qh}from"@mysten/sui/transactions";import{Vaults as Fh}from"@nemoprotocol/vaults-sdk";var rr=class a extends I{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=Fh.createSDK({client:n}),s=new qh;return await i.withdraw(this.data,o.address,s),s}static fromData(t){return new a(t)}};var sr=class{application="nemo";supportSDK="@mysten/sui";async deserialize(e){let t=e.transaction.blockData.transactions.find(o=>o.kind==="MoveCall"&&o.target.toString().toLowerCase().includes("deposit::deposit_non_entry")),n=e.transaction.blockData.transactions.find(o=>o.kind==="MoveCall"&&o.target.toString().toLowerCase().includes("withdraw::withdraw"));if(t)return{txType:iu.Other,txSubType:"VaultDeposit",intentionData:e.appContext};if(n)return{txType:iu.Other,txSubType:"VaultWithdraw",intentionData:e.appContext}}async build(e){let{suiClient:t,account:n}=e;console.log(e.txSubType);let o;switch(e.txSubType){case"VaultDeposit":o=ir.fromData(e.intentionData);break;case"VaultWithdraw":o=rr.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};var e3=la.fromHelpers([new zo,new ia,new $o,new ra,new To,new ki,new ar,new Fa,new Pi,new $n,new Ja,new ii,new vn,new qi,new li,new sr]);export{e3 as appHelpers};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|