@msafe/sui-app-store 0.0.299 → 0.0.302

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.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var _l=Object.create;var fr=Object.defineProperty;var Ll=Object.getOwnPropertyDescriptor;var jl=Object.getOwnPropertyNames;var Ul=Object.getPrototypeOf,ql=Object.prototype.hasOwnProperty;var Fl=(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 Kl=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),ws=(a,e)=>{for(var t in e)fr(a,t,{get:e[t],enumerable:!0})},$l=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of jl(e))!ql.call(a,o)&&o!==t&&fr(a,o,{get:()=>e[o],enumerable:!(n=Ll(e,o))||n.enumerable});return a};var Vl=(a,e,t)=>(t=a!=null?_l(Ul(a)):{},$l(e||!a||!a.__esModule?fr(t,"default",{value:a,enumerable:!0}):t,a));var bl=Kl((yl,ts)=>{"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=Fl("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,S,I=0;if(m==="be")for(p=r.length-1,h=0;p>=0;p-=3)S=r[p]|r[p-1]<<8|r[p-2]<<16,this.words[h]|=S<<I&67108863,this.words[h+1]=S>>>26-I&67108863,I+=24,I>=26&&(I-=26,h++);else if(m==="le")for(p=0,h=0;p<r.length;p+=3)S=r[p]|r[p+1]<<8|r[p+2]<<16,this.words[h]|=S<<I&67108863,this.words[h+1]=S>>>26-I&67108863,I+=24,I>=26&&(I-=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,S=0,I;if(m==="be")for(p=r.length-1;p>=u;p-=2)I=l(r,u,p)<<h,this.words[S]|=I&67108863,h>=18?(h-=18,S+=1,this.words[S]|=I>>>26):h+=8;else{var f=r.length-u;for(p=f%2===0?u+1:u;p<r.length;p+=2)I=l(r,u,p)<<h,this.words[S]|=I&67108863,h>=18?(h-=18,S+=1,this.words[S]|=I>>>26):h+=8}this._strip()};function d(y,r,u,m){for(var p=0,h=0,S=Math.min(y.length,u),I=r;I<S;I++){var f=y.charCodeAt(I)-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 S=r.length-m,I=S%p,f=Math.min(S,S-I)+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(I!==0){var v=1;for(c=d(r,g,r.length,u),g=0;g<I;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")]=T}catch{o.prototype.inspect=T}else o.prototype.inspect=T;function T(){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"],k=[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 p=0,h=0,S=0;S<this.length;S++){var I=this.words[S],f=((I<<p|h)&16777215).toString(16);h=I>>>24-p&16777215,p+=2,p>=26&&(p-=26,S--),h!==0||S!==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 c=k[r],g=x[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=w[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 D=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 S=D(r,h),I=u==="le"?"LE":"BE";return this["_toArrayLike"+I](S,p),S},o.prototype._toArrayLikeLE=function(r,u){for(var m=0,p=0,h=0,S=0;h<this.length;h++){var I=this.words[h]<<S|p;r[m++]=I&255,m<r.length&&(r[m++]=I>>8&255),m<r.length&&(r[m++]=I>>16&255),S===6?(m<r.length&&(r[m++]=I>>24&255),p=0,S=0):(p=I>>>24,S+=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,S=0;h<this.length;h++){var I=this.words[h]<<S|p;r[m--]=I&255,m>=0&&(r[m--]=I>>8&255),m>=0&&(r[m--]=I>>16&255),S===6?(m>=0&&(r[m--]=I>>24&255),p=0,S=0):(p=I>>>24,S+=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||(m+=13,u>>>=13),u&127||(m+=7,u>>>=7),u&15||(m+=4,u>>>=4),u&3||(m+=2,u>>>=2),u&1||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,S=0;S<p.length;S++)u=(m.words[S]|0)+(p.words[S]|0)+h,this.words[S]=u&67108863,h=u>>>26;for(;h!==0&&S<m.length;S++)u=(m.words[S]|0)+h,this.words[S]=u&67108863,h=u>>>26;if(this.length=m.length,h!==0)this.words[this.length]=h,this.length++;else if(m!==this)for(;S<m.length;S++)this.words[S]=m.words[S];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 S=0,I=0;I<h.length;I++)u=(p.words[I]|0)-(h.words[I]|0)+S,S=u>>26,this.words[I]=u&67108863;for(;S!==0&&I<p.length;I++)u=(p.words[I]|0)+S,S=u>>26,this.words[I]=u&67108863;if(S===0&&I<p.length&&p!==this)for(;I<p.length;I++)this.words[I]=p.words[I];return this.length=Math.max(this.length,I),p!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(r){return this.clone().isub(r)};function q(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,S=p*h,I=S&67108863,f=S/67108864|0;u.words[0]=I;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,S=p*h+v,g+=S/67108864|0,v=S&67108863}u.words[c]=v|0,f=g|0}return f!==0?u.words[c]=f|0:u.length--,u._strip()}var $=function(r,u,m){var p=r.words,h=u.words,S=m.words,I=0,f,c,g,v=p[0]|0,M=v&8191,O=v>>>13,B=p[1]|0,W=B&8191,j=B>>>13,oe=p[2]|0,U=oe&8191,F=oe>>>13,is=p[3]|0,X=is&8191,z=is>>>13,rs=p[4]|0,G=rs&8191,Q=rs>>>13,ss=p[5]|0,J=ss&8191,Y=ss>>>13,cs=p[6]|0,Z=cs&8191,tt=cs>>>13,ls=p[7]|0,et=ls&8191,nt=ls>>>13,us=p[8]|0,ot=us&8191,at=us>>>13,ms=p[9]|0,it=ms&8191,rt=ms>>>13,ps=h[0]|0,st=ps&8191,ct=ps>>>13,ds=h[1]|0,lt=ds&8191,ut=ds>>>13,fs=h[2]|0,mt=fs&8191,pt=fs>>>13,hs=h[3]|0,dt=hs&8191,ft=hs>>>13,gs=h[4]|0,ht=gs&8191,gt=gs>>>13,ys=h[5]|0,yt=ys&8191,bt=ys>>>13,bs=h[6]|0,St=bs&8191,Tt=bs>>>13,Ss=h[7]|0,It=Ss&8191,wt=Ss>>>13,Ts=h[8]|0,Ct=Ts&8191,kt=Ts>>>13,Is=h[9]|0,xt=Is&8191,Dt=Is>>>13;m.negative=r.negative^u.negative,m.length=19,f=Math.imul(M,st),c=Math.imul(M,ct),c=c+Math.imul(O,st)|0,g=Math.imul(O,ct);var Gi=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(Gi>>>26)|0,Gi&=67108863,f=Math.imul(W,st),c=Math.imul(W,ct),c=c+Math.imul(j,st)|0,g=Math.imul(j,ct),f=f+Math.imul(M,lt)|0,c=c+Math.imul(M,ut)|0,c=c+Math.imul(O,lt)|0,g=g+Math.imul(O,ut)|0;var Qi=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(Qi>>>26)|0,Qi&=67108863,f=Math.imul(U,st),c=Math.imul(U,ct),c=c+Math.imul(F,st)|0,g=Math.imul(F,ct),f=f+Math.imul(W,lt)|0,c=c+Math.imul(W,ut)|0,c=c+Math.imul(j,lt)|0,g=g+Math.imul(j,ut)|0,f=f+Math.imul(M,mt)|0,c=c+Math.imul(M,pt)|0,c=c+Math.imul(O,mt)|0,g=g+Math.imul(O,pt)|0;var Ji=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(Ji>>>26)|0,Ji&=67108863,f=Math.imul(X,st),c=Math.imul(X,ct),c=c+Math.imul(z,st)|0,g=Math.imul(z,ct),f=f+Math.imul(U,lt)|0,c=c+Math.imul(U,ut)|0,c=c+Math.imul(F,lt)|0,g=g+Math.imul(F,ut)|0,f=f+Math.imul(W,mt)|0,c=c+Math.imul(W,pt)|0,c=c+Math.imul(j,mt)|0,g=g+Math.imul(j,pt)|0,f=f+Math.imul(M,dt)|0,c=c+Math.imul(M,ft)|0,c=c+Math.imul(O,dt)|0,g=g+Math.imul(O,ft)|0;var Yi=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(Yi>>>26)|0,Yi&=67108863,f=Math.imul(G,st),c=Math.imul(G,ct),c=c+Math.imul(Q,st)|0,g=Math.imul(Q,ct),f=f+Math.imul(X,lt)|0,c=c+Math.imul(X,ut)|0,c=c+Math.imul(z,lt)|0,g=g+Math.imul(z,ut)|0,f=f+Math.imul(U,mt)|0,c=c+Math.imul(U,pt)|0,c=c+Math.imul(F,mt)|0,g=g+Math.imul(F,pt)|0,f=f+Math.imul(W,dt)|0,c=c+Math.imul(W,ft)|0,c=c+Math.imul(j,dt)|0,g=g+Math.imul(j,ft)|0,f=f+Math.imul(M,ht)|0,c=c+Math.imul(M,gt)|0,c=c+Math.imul(O,ht)|0,g=g+Math.imul(O,gt)|0;var Zi=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(Zi>>>26)|0,Zi&=67108863,f=Math.imul(J,st),c=Math.imul(J,ct),c=c+Math.imul(Y,st)|0,g=Math.imul(Y,ct),f=f+Math.imul(G,lt)|0,c=c+Math.imul(G,ut)|0,c=c+Math.imul(Q,lt)|0,g=g+Math.imul(Q,ut)|0,f=f+Math.imul(X,mt)|0,c=c+Math.imul(X,pt)|0,c=c+Math.imul(z,mt)|0,g=g+Math.imul(z,pt)|0,f=f+Math.imul(U,dt)|0,c=c+Math.imul(U,ft)|0,c=c+Math.imul(F,dt)|0,g=g+Math.imul(F,ft)|0,f=f+Math.imul(W,ht)|0,c=c+Math.imul(W,gt)|0,c=c+Math.imul(j,ht)|0,g=g+Math.imul(j,gt)|0,f=f+Math.imul(M,yt)|0,c=c+Math.imul(M,bt)|0,c=c+Math.imul(O,yt)|0,g=g+Math.imul(O,bt)|0;var tr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(tr>>>26)|0,tr&=67108863,f=Math.imul(Z,st),c=Math.imul(Z,ct),c=c+Math.imul(tt,st)|0,g=Math.imul(tt,ct),f=f+Math.imul(J,lt)|0,c=c+Math.imul(J,ut)|0,c=c+Math.imul(Y,lt)|0,g=g+Math.imul(Y,ut)|0,f=f+Math.imul(G,mt)|0,c=c+Math.imul(G,pt)|0,c=c+Math.imul(Q,mt)|0,g=g+Math.imul(Q,pt)|0,f=f+Math.imul(X,dt)|0,c=c+Math.imul(X,ft)|0,c=c+Math.imul(z,dt)|0,g=g+Math.imul(z,ft)|0,f=f+Math.imul(U,ht)|0,c=c+Math.imul(U,gt)|0,c=c+Math.imul(F,ht)|0,g=g+Math.imul(F,gt)|0,f=f+Math.imul(W,yt)|0,c=c+Math.imul(W,bt)|0,c=c+Math.imul(j,yt)|0,g=g+Math.imul(j,bt)|0,f=f+Math.imul(M,St)|0,c=c+Math.imul(M,Tt)|0,c=c+Math.imul(O,St)|0,g=g+Math.imul(O,Tt)|0;var er=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(er>>>26)|0,er&=67108863,f=Math.imul(et,st),c=Math.imul(et,ct),c=c+Math.imul(nt,st)|0,g=Math.imul(nt,ct),f=f+Math.imul(Z,lt)|0,c=c+Math.imul(Z,ut)|0,c=c+Math.imul(tt,lt)|0,g=g+Math.imul(tt,ut)|0,f=f+Math.imul(J,mt)|0,c=c+Math.imul(J,pt)|0,c=c+Math.imul(Y,mt)|0,g=g+Math.imul(Y,pt)|0,f=f+Math.imul(G,dt)|0,c=c+Math.imul(G,ft)|0,c=c+Math.imul(Q,dt)|0,g=g+Math.imul(Q,ft)|0,f=f+Math.imul(X,ht)|0,c=c+Math.imul(X,gt)|0,c=c+Math.imul(z,ht)|0,g=g+Math.imul(z,gt)|0,f=f+Math.imul(U,yt)|0,c=c+Math.imul(U,bt)|0,c=c+Math.imul(F,yt)|0,g=g+Math.imul(F,bt)|0,f=f+Math.imul(W,St)|0,c=c+Math.imul(W,Tt)|0,c=c+Math.imul(j,St)|0,g=g+Math.imul(j,Tt)|0,f=f+Math.imul(M,It)|0,c=c+Math.imul(M,wt)|0,c=c+Math.imul(O,It)|0,g=g+Math.imul(O,wt)|0;var nr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(nr>>>26)|0,nr&=67108863,f=Math.imul(ot,st),c=Math.imul(ot,ct),c=c+Math.imul(at,st)|0,g=Math.imul(at,ct),f=f+Math.imul(et,lt)|0,c=c+Math.imul(et,ut)|0,c=c+Math.imul(nt,lt)|0,g=g+Math.imul(nt,ut)|0,f=f+Math.imul(Z,mt)|0,c=c+Math.imul(Z,pt)|0,c=c+Math.imul(tt,mt)|0,g=g+Math.imul(tt,pt)|0,f=f+Math.imul(J,dt)|0,c=c+Math.imul(J,ft)|0,c=c+Math.imul(Y,dt)|0,g=g+Math.imul(Y,ft)|0,f=f+Math.imul(G,ht)|0,c=c+Math.imul(G,gt)|0,c=c+Math.imul(Q,ht)|0,g=g+Math.imul(Q,gt)|0,f=f+Math.imul(X,yt)|0,c=c+Math.imul(X,bt)|0,c=c+Math.imul(z,yt)|0,g=g+Math.imul(z,bt)|0,f=f+Math.imul(U,St)|0,c=c+Math.imul(U,Tt)|0,c=c+Math.imul(F,St)|0,g=g+Math.imul(F,Tt)|0,f=f+Math.imul(W,It)|0,c=c+Math.imul(W,wt)|0,c=c+Math.imul(j,It)|0,g=g+Math.imul(j,wt)|0,f=f+Math.imul(M,Ct)|0,c=c+Math.imul(M,kt)|0,c=c+Math.imul(O,Ct)|0,g=g+Math.imul(O,kt)|0;var or=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(or>>>26)|0,or&=67108863,f=Math.imul(it,st),c=Math.imul(it,ct),c=c+Math.imul(rt,st)|0,g=Math.imul(rt,ct),f=f+Math.imul(ot,lt)|0,c=c+Math.imul(ot,ut)|0,c=c+Math.imul(at,lt)|0,g=g+Math.imul(at,ut)|0,f=f+Math.imul(et,mt)|0,c=c+Math.imul(et,pt)|0,c=c+Math.imul(nt,mt)|0,g=g+Math.imul(nt,pt)|0,f=f+Math.imul(Z,dt)|0,c=c+Math.imul(Z,ft)|0,c=c+Math.imul(tt,dt)|0,g=g+Math.imul(tt,ft)|0,f=f+Math.imul(J,ht)|0,c=c+Math.imul(J,gt)|0,c=c+Math.imul(Y,ht)|0,g=g+Math.imul(Y,gt)|0,f=f+Math.imul(G,yt)|0,c=c+Math.imul(G,bt)|0,c=c+Math.imul(Q,yt)|0,g=g+Math.imul(Q,bt)|0,f=f+Math.imul(X,St)|0,c=c+Math.imul(X,Tt)|0,c=c+Math.imul(z,St)|0,g=g+Math.imul(z,Tt)|0,f=f+Math.imul(U,It)|0,c=c+Math.imul(U,wt)|0,c=c+Math.imul(F,It)|0,g=g+Math.imul(F,wt)|0,f=f+Math.imul(W,Ct)|0,c=c+Math.imul(W,kt)|0,c=c+Math.imul(j,Ct)|0,g=g+Math.imul(j,kt)|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 ar=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(ar>>>26)|0,ar&=67108863,f=Math.imul(it,lt),c=Math.imul(it,ut),c=c+Math.imul(rt,lt)|0,g=Math.imul(rt,ut),f=f+Math.imul(ot,mt)|0,c=c+Math.imul(ot,pt)|0,c=c+Math.imul(at,mt)|0,g=g+Math.imul(at,pt)|0,f=f+Math.imul(et,dt)|0,c=c+Math.imul(et,ft)|0,c=c+Math.imul(nt,dt)|0,g=g+Math.imul(nt,ft)|0,f=f+Math.imul(Z,ht)|0,c=c+Math.imul(Z,gt)|0,c=c+Math.imul(tt,ht)|0,g=g+Math.imul(tt,gt)|0,f=f+Math.imul(J,yt)|0,c=c+Math.imul(J,bt)|0,c=c+Math.imul(Y,yt)|0,g=g+Math.imul(Y,bt)|0,f=f+Math.imul(G,St)|0,c=c+Math.imul(G,Tt)|0,c=c+Math.imul(Q,St)|0,g=g+Math.imul(Q,Tt)|0,f=f+Math.imul(X,It)|0,c=c+Math.imul(X,wt)|0,c=c+Math.imul(z,It)|0,g=g+Math.imul(z,wt)|0,f=f+Math.imul(U,Ct)|0,c=c+Math.imul(U,kt)|0,c=c+Math.imul(F,Ct)|0,g=g+Math.imul(F,kt)|0,f=f+Math.imul(W,xt)|0,c=c+Math.imul(W,Dt)|0,c=c+Math.imul(j,xt)|0,g=g+Math.imul(j,Dt)|0;var ir=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(ir>>>26)|0,ir&=67108863,f=Math.imul(it,mt),c=Math.imul(it,pt),c=c+Math.imul(rt,mt)|0,g=Math.imul(rt,pt),f=f+Math.imul(ot,dt)|0,c=c+Math.imul(ot,ft)|0,c=c+Math.imul(at,dt)|0,g=g+Math.imul(at,ft)|0,f=f+Math.imul(et,ht)|0,c=c+Math.imul(et,gt)|0,c=c+Math.imul(nt,ht)|0,g=g+Math.imul(nt,gt)|0,f=f+Math.imul(Z,yt)|0,c=c+Math.imul(Z,bt)|0,c=c+Math.imul(tt,yt)|0,g=g+Math.imul(tt,bt)|0,f=f+Math.imul(J,St)|0,c=c+Math.imul(J,Tt)|0,c=c+Math.imul(Y,St)|0,g=g+Math.imul(Y,Tt)|0,f=f+Math.imul(G,It)|0,c=c+Math.imul(G,wt)|0,c=c+Math.imul(Q,It)|0,g=g+Math.imul(Q,wt)|0,f=f+Math.imul(X,Ct)|0,c=c+Math.imul(X,kt)|0,c=c+Math.imul(z,Ct)|0,g=g+Math.imul(z,kt)|0,f=f+Math.imul(U,xt)|0,c=c+Math.imul(U,Dt)|0,c=c+Math.imul(F,xt)|0,g=g+Math.imul(F,Dt)|0;var rr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(rr>>>26)|0,rr&=67108863,f=Math.imul(it,dt),c=Math.imul(it,ft),c=c+Math.imul(rt,dt)|0,g=Math.imul(rt,ft),f=f+Math.imul(ot,ht)|0,c=c+Math.imul(ot,gt)|0,c=c+Math.imul(at,ht)|0,g=g+Math.imul(at,gt)|0,f=f+Math.imul(et,yt)|0,c=c+Math.imul(et,bt)|0,c=c+Math.imul(nt,yt)|0,g=g+Math.imul(nt,bt)|0,f=f+Math.imul(Z,St)|0,c=c+Math.imul(Z,Tt)|0,c=c+Math.imul(tt,St)|0,g=g+Math.imul(tt,Tt)|0,f=f+Math.imul(J,It)|0,c=c+Math.imul(J,wt)|0,c=c+Math.imul(Y,It)|0,g=g+Math.imul(Y,wt)|0,f=f+Math.imul(G,Ct)|0,c=c+Math.imul(G,kt)|0,c=c+Math.imul(Q,Ct)|0,g=g+Math.imul(Q,kt)|0,f=f+Math.imul(X,xt)|0,c=c+Math.imul(X,Dt)|0,c=c+Math.imul(z,xt)|0,g=g+Math.imul(z,Dt)|0;var sr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(sr>>>26)|0,sr&=67108863,f=Math.imul(it,ht),c=Math.imul(it,gt),c=c+Math.imul(rt,ht)|0,g=Math.imul(rt,gt),f=f+Math.imul(ot,yt)|0,c=c+Math.imul(ot,bt)|0,c=c+Math.imul(at,yt)|0,g=g+Math.imul(at,bt)|0,f=f+Math.imul(et,St)|0,c=c+Math.imul(et,Tt)|0,c=c+Math.imul(nt,St)|0,g=g+Math.imul(nt,Tt)|0,f=f+Math.imul(Z,It)|0,c=c+Math.imul(Z,wt)|0,c=c+Math.imul(tt,It)|0,g=g+Math.imul(tt,wt)|0,f=f+Math.imul(J,Ct)|0,c=c+Math.imul(J,kt)|0,c=c+Math.imul(Y,Ct)|0,g=g+Math.imul(Y,kt)|0,f=f+Math.imul(G,xt)|0,c=c+Math.imul(G,Dt)|0,c=c+Math.imul(Q,xt)|0,g=g+Math.imul(Q,Dt)|0;var cr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(cr>>>26)|0,cr&=67108863,f=Math.imul(it,yt),c=Math.imul(it,bt),c=c+Math.imul(rt,yt)|0,g=Math.imul(rt,bt),f=f+Math.imul(ot,St)|0,c=c+Math.imul(ot,Tt)|0,c=c+Math.imul(at,St)|0,g=g+Math.imul(at,Tt)|0,f=f+Math.imul(et,It)|0,c=c+Math.imul(et,wt)|0,c=c+Math.imul(nt,It)|0,g=g+Math.imul(nt,wt)|0,f=f+Math.imul(Z,Ct)|0,c=c+Math.imul(Z,kt)|0,c=c+Math.imul(tt,Ct)|0,g=g+Math.imul(tt,kt)|0,f=f+Math.imul(J,xt)|0,c=c+Math.imul(J,Dt)|0,c=c+Math.imul(Y,xt)|0,g=g+Math.imul(Y,Dt)|0;var lr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(lr>>>26)|0,lr&=67108863,f=Math.imul(it,St),c=Math.imul(it,Tt),c=c+Math.imul(rt,St)|0,g=Math.imul(rt,Tt),f=f+Math.imul(ot,It)|0,c=c+Math.imul(ot,wt)|0,c=c+Math.imul(at,It)|0,g=g+Math.imul(at,wt)|0,f=f+Math.imul(et,Ct)|0,c=c+Math.imul(et,kt)|0,c=c+Math.imul(nt,Ct)|0,g=g+Math.imul(nt,kt)|0,f=f+Math.imul(Z,xt)|0,c=c+Math.imul(Z,Dt)|0,c=c+Math.imul(tt,xt)|0,g=g+Math.imul(tt,Dt)|0;var ur=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(ur>>>26)|0,ur&=67108863,f=Math.imul(it,It),c=Math.imul(it,wt),c=c+Math.imul(rt,It)|0,g=Math.imul(rt,wt),f=f+Math.imul(ot,Ct)|0,c=c+Math.imul(ot,kt)|0,c=c+Math.imul(at,Ct)|0,g=g+Math.imul(at,kt)|0,f=f+Math.imul(et,xt)|0,c=c+Math.imul(et,Dt)|0,c=c+Math.imul(nt,xt)|0,g=g+Math.imul(nt,Dt)|0;var mr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(mr>>>26)|0,mr&=67108863,f=Math.imul(it,Ct),c=Math.imul(it,kt),c=c+Math.imul(rt,Ct)|0,g=Math.imul(rt,kt),f=f+Math.imul(ot,xt)|0,c=c+Math.imul(ot,Dt)|0,c=c+Math.imul(at,xt)|0,g=g+Math.imul(at,Dt)|0;var pr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(pr>>>26)|0,pr&=67108863,f=Math.imul(it,xt),c=Math.imul(it,Dt),c=c+Math.imul(rt,xt)|0,g=Math.imul(rt,Dt);var dr=(I+f|0)+((c&8191)<<13)|0;return I=(g+(c>>>13)|0)+(dr>>>26)|0,dr&=67108863,S[0]=Gi,S[1]=Qi,S[2]=Ji,S[3]=Yi,S[4]=Zi,S[5]=tr,S[6]=er,S[7]=nr,S[8]=or,S[9]=ar,S[10]=ir,S[11]=rr,S[12]=sr,S[13]=cr,S[14]=lr,S[15]=ur,S[16]=mr,S[17]=pr,S[18]=dr,I!==0&&(S[19]=I,m.length++),m};Math.imul||($=q);function Et(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 S=p;p=0;for(var I=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;S=S+(O/67108864|0)|0,B=B+I|0,I=B&67108863,S=S+(B>>>26)|0,p+=S>>>26,S&=67108863}u.words[h]=I,m=S,S=p}return m!==0?u.words[h]=m:u.length--,u._strip()}function Nt(y,r,u){return Et(y,r,u)}o.prototype.mulTo=function(r,u){var m,p=this.length+r.length;return this.length===10&&r.length===10?m=$(this,r,u):p<63?m=q(this,r,u):p<1024?m=Et(this,r,u):m=Nt(this,r,u),m};function Ot(y,r){this.x=y,this.y=r}Ot.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},Ot.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},Ot.prototype.permute=function(r,u,m,p,h,S){for(var I=0;I<S;I++)p[I]=u[r[I]],h[I]=m[r[I]]},Ot.prototype.transform=function(r,u,m,p,h,S){this.permute(S,r,u,m,p,h);for(var I=1;I<h;I<<=1)for(var f=I<<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<I;B++){var W=m[v+B],j=p[v+B],oe=m[v+B+I],U=p[v+B+I],F=M*oe-O*U;U=M*U+O*oe,oe=F,m[v+B]=W+oe,p[v+B]=j+U,m[v+B+I]=W-oe,p[v+B+I]=j-U,B!==f&&(F=c*M-g*O,O=c*O+g*M,M=F)}},Ot.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},Ot.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}},Ot.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},Ot.prototype.convert13b=function(r,u,m,p){for(var h=0,S=0;S<u;S++)h=h+(r[S]|0),m[2*S]=h&8191,h=h>>>13,m[2*S+1]=h&8191,h=h>>>13;for(S=2*u;S<p;++S)m[S]=0;t(h===0),t((h&-8192)===0)},Ot.prototype.stub=function(r){for(var u=new Array(r),m=0;m<r;m++)u[m]=0;return u},Ot.prototype.mulp=function(r,u,m){var p=2*this.guessLen13b(r.length,u.length),h=this.makeRBT(p),S=this.stub(p),I=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,I,p),this.convert13b(u.words,u.length,g,p),this.transform(I,S,f,c,p,h),this.transform(g,S,v,M,p,h);for(var B=0;B<p;B++){var W=f[B]*v[B]-c[B]*M[B];c[B]=f[B]*M[B]+c[B]*v[B],f[B]=W}return this.conjugate(f,c,p),this.transform(f,c,O,S,p,h),this.conjugate(O,S,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),Nt(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,S=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=S>>>26,this.words[p]=S&67108863}return m!==0&&(this.words[p]=m,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 S=0;for(h=0;h<this.length;h++){var I=this.words[h]&p,f=(this.words[h]|0)-I<<u;this.words[h]=f|S,S=I>>>26-u}S&&(this.words[h]=S,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,S=Math.min((r-h)/26,this.length),I=67108863^67108863>>>h<<h,f=m;if(p-=S,p=Math.max(0,p),f){for(var c=0;c<S;c++)f.words[c]=this.words[c];f.length=S}if(S!==0)if(this.length>S)for(this.length-=S,c=0;c<this.length;c++)this.words[c]=this.words[c+S];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&I}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 S,I=0;for(h=0;h<r.length;h++){S=(this.words[h+m]|0)+I;var f=(r.words[h]|0)*u;S-=f&67108863,I=(S>>26)-(f/67108864|0),this.words[h+m]=S&67108863}for(;h<this.length-m;h++)S=(this.words[h+m]|0)+I,I=S>>26,this.words[h+m]=S&67108863;if(I===0)return this._strip();for(t(I===-1),I=0,h=0;h<this.length;h++)S=-(this.words[h]|0)+I,I=S>>26,this.words[h]=S&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(r,u){var m=this.length-r.length,p=this.clone(),h=r,S=h.words[h.length-1]|0,I=this._countBits(S);m=26-I,m!==0&&(h=h.ushln(m),p.iushln(m),S=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/S|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,S;return this.negative!==0&&r.negative===0?(S=this.neg().divmod(r,u),u!=="mod"&&(p=S.div.neg()),u!=="div"&&(h=S.mod.neg(),m&&h.negative!==0&&h.iadd(r)),{div:p,mod:h}):this.negative===0&&r.negative!==0?(S=this.divmod(r.neg(),u),u!=="mod"&&(p=S.div.neg()),{div:p,mod:S.mod}):this.negative&r.negative?(S=this.neg().divmod(r.neg(),u),u!=="div"&&(h=S.mod.neg(),m&&h.negative!==0&&h.isub(r)),{div:S.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),S=m.cmp(p);return S<0||h===1&&S===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),S=new o(0),I=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)&&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)&&O<26;++O,B<<=1);if(O>0)for(m.iushrn(O);O-- >0;)(S.isOdd()||I.isOdd())&&(S.iadd(c),I.isub(g)),S.iushrn(1),I.iushrn(1);u.cmp(m)>=0?(u.isub(m),p.isub(S),h.isub(I)):(m.isub(u),S.isub(p),I.isub(h))}return{a:S,b:I,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),S=m.clone();u.cmpn(1)>0&&m.cmpn(1)>0;){for(var I=0,f=1;!(u.words[0]&f)&&I<26;++I,f<<=1);if(I>0)for(u.iushrn(I);I-- >0;)p.isOdd()&&p.iadd(S),p.iushrn(1);for(var c=0,g=1;!(m.words[0]&g)&&c<26;++c,g<<=1);if(c>0)for(m.iushrn(c);c-- >0;)h.isOdd()&&h.iadd(S),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 S=u;u=m,m=S}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,S=m;h!==0&&S<this.length;S++){var I=this.words[S]|0;I+=h,h=I>>>26,I&=67108863,this.words[S]=I}return h!==0&&(this.words[S]=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 S=r.words[9];for(u.words[u.length++]=S&m,h=10;h<r.length;h++){var I=r.words[h]|0;r.words[h-10]=(I&m)<<4|S>>>22,S=I}S>>>=22,r.words[h-10]=S,S===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 os(){Wt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(os,Wt);function as(){Wt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(as,Wt);function zi(){Wt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(zi,Wt),zi.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 os;else if(r==="p192")u=new as;else if(r==="p25519")u=new zi;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 S=new o(1).toRed(this),I=S.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(I)!==0;)c.redIAdd(I);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(S)!==0;){for(var B=M,W=0;B.cmp(S)!==0;W++)B=B.redSqr();t(W<O);var j=this.pow(g,new o(1).iushln(O-W-1));v=v.redMul(j),g=j.redSqr(),M=M.redMul(g),O=W}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 S=p[0],I=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(S!==p[0]&&(S=this.sqr(S)),M===0&&I===0){f=0;continue}I<<=1,I|=M,f++,!(f!==m&&(h!==0||v!==0))&&(S=this.mul(S,p[I]),f=0,I=0)}c=26}return S},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),S=h;return h.cmp(this.m)>=0?S=h.isub(this.m):h.cmpn(0)<0&&(S=h.iadd(this.m)),S._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),S=h;return h.cmp(this.m)>=0?S=h.isub(this.m):h.cmpn(0)<0&&(S=h.iadd(this.m)),S._forceRed(this)},fe.prototype.invm=function(r){var u=this.imod(r._invmp(this.m).mul(this.r2));return u._forceRed(this)}})(typeof ts>"u"||ts,yl)});import{TransactionType as nu}from"@msafe/sui3-utils";import{coinsList as Xl,poolIdPoolNameMap as zl,poolInfo as Cs,singleAssetPoolCoinMap as Gl}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=zl[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&&Cs[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&Cs[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}=Gl[e],{expo:s}=Xl[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 Jl}from"@alphafi/alphafi-sdk";import Ql from"sort-keys-recursive";var C=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Ql(this.data))}};var yn=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t;return await Jl(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as Yl}from"@alphafi/alphafi-sdk";var bn=class a extends C{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 Yl(o,n.address,i,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as Zl}from"@alphafi/alphafi-sdk";var Sn=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i}=this.data;return await Zl(o,n.address,i)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as tu}from"@alphafi/alphafi-sdk";var Tn=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:i}=this.data;return await tu(i,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as eu}from"@alphafi/alphafi-sdk";var In=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:i}=this.data;return await eu(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:nu.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=Sn.fromData(e.intentionData);break;case"depositDoubleAsset":n=bn.fromData(e.intentionData);break;case"withdraw":n=Tn.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 xu}from"@msafe/sui3-utils";import{TransactionType as jt}from"@msafe/sui3-utils";import{bcs as hr}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as gr}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(gr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(gr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(gr,"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 T=this.getPureAddresses(b.Input);T.length===1&&([n]=T)}}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 T=this.getPureAddresses(b.Input);T.length===1&&([n]=T)}}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 T=this.getPureAddresses(b.Input);T.length===1&&([n]=T)}}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 w=this.getPureAddresses(b.Input);w.length===1&&([i]=w)}let T=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];T.$kind==="Input"&&(t=this.getPureInputU64(T.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 w=this.getPureAddresses(b.Input);w.length===1&&([i]=w)}let T=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];T.$kind==="Input"&&(t=this.getPureInputU64(T.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 T=l[d].MoveCall.arguments[2];if(T.$kind==="Input"){let{objectId:w}=this.inputs[T.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: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 hr.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return hr.vector(hr.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as ru}from"@msafe/sui3-utils";import{Transaction as au}from"@mysten/sui/transactions";import{buildPsmTx as iu}from"bucket-protocol-sdk";import{BucketClient as ou}from"bucket-protocol-sdk";var Pt=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new ou(t,e.address)};var ks=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:i}=a,s=new au,l=Pt(t,e);return await iu(l,s,n,o,i,e.address),s};var kn=class a extends C{constructor(t){super(t);this.data=t}txType=ru.Other;txSubType="psm";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 mu}from"@msafe/sui3-utils";import{Transaction as xn}from"@mysten/sui/transactions";import{buildBorrowTx as su,buildCloseTx as cu,buildRepayTx as lu,buildWithdrawTx as uu}from"bucket-protocol-sdk";var xs=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:i,insertionPlace:s,strapId:l}=a,d=new xn,b=Pt(t,e);return await su(b,d,n,o,i,e.address,s,l),d},Ds=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:i,strapId:s}=a,l=new xn,d=Pt(t,e);return await uu(d,l,n,o,e.address,i,s),l},vs=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:i,isSurplus:s,insertionPlace:l,strapId:d}=a,b=new xn,T=Pt(t,e);return await lu(T,b,n,o,i,e.address,s,l,d),b},As=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:i}=a,s=new xn,l=Pt(t,e);return await cu(l,s,n,o,i),s};var Dn=class a extends C{constructor(t){super(t);this.data=t}txType=mu.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await xs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as pu}from"@msafe/sui3-utils";var vn=class a extends C{constructor(t){super(t);this.data=t}txType=pu.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await vs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as du}from"@msafe/sui3-utils";var An=class a extends C{constructor(t){super(t);this.data=t}txType=du.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await Ds(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as fu}from"@msafe/sui3-utils";var Mn=class a extends C{constructor(t){super(t);this.data=t}txType=fu.Other;txSubType="close";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 Nn}from"@msafe/sui3-utils";import{Transaction as On}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as hu,buildSBUCKDepositTx as gu,buildSBUCKUnstakeTx as yu,buildSBUCKWithdrawTx as bu}from"bucket-protocol-sdk";var Ms=async(a,e,t)=>{let{coinType:n,amount:o,isStake:i}=a,s=new On,l=Pt(t,e);return await gu(l,s,n,o,e.address,i),s},Os=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:i,toBuck:s}=a,l=new On,d=Pt(t,e);return await yu(d,l,n,o,e.address,i,s),l},Ps=async(a,e,t)=>{let{amount:n}=a,o=new On,i=Pt(t,e);return await bu(i,o,n,e.address),o},Rs=async(a,e,t)=>{let{stakeProofs:n}=a,o=new On,i=Pt(t,e);return await hu(i,o,n,e.address),o};var Pn=class a extends C{constructor(t){super(t);this.data=t}txType=Nn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await Ms(this.data,n,o)}static fromData(t){return new a(t)}},Rn=class a extends C{constructor(t){super(t);this.data=t}txType=Nn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await Os(this.data,n,o)}static fromData(t){return new a(t)}},Bn=class a extends C{constructor(t){super(t);this.data=t}txType=Nn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await Ps(this.data,n,o)}static fromData(t){return new a(t)}},En=class a extends C{constructor(t){super(t);this.data=t}txType=Nn.Other;txSubType="sbuck-claim";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 br}from"@msafe/sui3-utils";import{Transaction as yr}from"@mysten/sui/transactions";import{buildTankClaimTx as Su,buildTankDepositTx as Tu,buildTankWithdrawTx as Iu}from"bucket-protocol-sdk";var Bs=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new yr,s=Pt(t,e);return await Tu(s,i,n,o,e.address),i},Es=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new yr,s=Pt(t,e);return await Iu(s,i,n,o,e.address),i},Ns=async(a,e,t)=>{let{coinType:n}=a,o=new yr,i=Pt(t,e);return await Su(i,o,n,e.address),o};import{Transaction as wu}from"@mysten/sui/transactions";import{buildLockedClaimTx as Cu}from"bucket-protocol-sdk";var Ws=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,i=new wu,s=Pt(t,e);return await Cu(s,i,n,o,e.address),i};var Wn=class a extends C{constructor(t){super(t);this.data=t}txType=br.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await Bs(this.data,n,o)}static fromData(t){return new a(t)}},_n=class a extends C{constructor(t){super(t);this.data=t}txType=br.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await Es(this.data,n,o)}static fromData(t){return new a(t)}},Ln=class a extends C{constructor(t){super(t);this.data=t}txType=br.Other;txSubType="tank-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 ku}from"@msafe/sui3-utils";var jn=class a extends C{constructor(t){super(t);this.data=t}txType=ku.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await Ws(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:xu.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=kn.fromData(e.intentionData);break;case"borrow":i=Dn.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=Wn.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 mm}from"@msafe/sui3-utils";import{TransactionType as Bu}from"@msafe/sui3-utils";import{AggregatorClient as Du,Env as vu}from"@cetusprotocol/aggregator-sdk";import{CetusFarmsSDK as Au}from"@cetusprotocol/farms-sdk";import{CetusClmmSDK as Mu}from"@cetusprotocol/sui-clmm-sdk";import{CetusVaultsSDK as Ou}from"@cetusprotocol/vaults-sdk";import{CetusXcetusSDK as Pu}from"@cetusprotocol/xcetus-sdk";import{SuiClient as Sr,getFullnodeUrl as _s}from"@mysten/sui/client";var Zt=(a,e)=>{let t=Mu.createSDK({env:"mainnet",sui_client:new Sr({url:_s("mainnet")})});return t.setSenderAddress(e.address),t},Ut=(a,e)=>{let t=Au.createSDK({env:"mainnet",sui_client:new Sr({url:_s("mainnet")})});return t.setSenderAddress(e.address),t},Ru="https://api-sui.cetus.zone/router_v2/find_routes",Ls=(a,e)=>{let t=new Sr({url:"https://fullnode.mainnet.sui.io/"});return new Du({endpoint:Ru,signer:e.address,client:t,env:vu.Mainnet})},Ue=(a,e)=>{let t=Ou.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t},Ie=(a,e)=>{let t=Pu.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t};var js=async(a,e,t)=>await Zt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Us=async(a,e,t)=>await Zt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),qs=async(a,e,t)=>await Zt(t,e).Position.closePositionPayload(a),Fs=async(a,e,t)=>await Zt(t,e).Position.removeLiquidityPayload(a),Ks=async(a,e,t)=>await Zt(t,e).Rewarder.collectRewarderPayload(a);var qn=class a extends C{constructor(t){super(t);this.data=t}txType=Bu.Other;txSubType="OpenAndAddLiquidity";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 Eu}from"@msafe/sui3-utils";var Fn=class a extends C{constructor(t){super(t);this.data=t}txType=Eu.Other;txSubType="ClaimFeeAndMining";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 Nu}from"@msafe/sui3-utils";var Kn=class a extends C{constructor(t){super(t);this.data=t}txType=Nu.Other;txSubType="DecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Fs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wu}from"@msafe/sui3-utils";var $s=async(a,e,t)=>await Ut(t,e).Farms.openPositionAddLiquidityStakePayload(a),Vs=async(a,e,t)=>await Ut(t,e).Farms.addLiquidityFixCoinPayload(a),Hs=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),Xs=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),zs=async(a,e,t)=>await Ut(t,e).Farms.claimFeeAndClmmReward(a),Gs=async(a,e,t)=>await Ut(t,e).Farms.harvestPayload(a),Qs=async(a,e,t)=>{let n=Ut(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},Js=async(a,e,t)=>await Ut(t,e).Farms.depositPayload(a),Ys=async(a,e,t)=>await Ut(t,e).Farms.withdrawPayload(a);var $n=class a extends C{constructor(t){super(t);this.data=t}txType=Wu.Other;txSubType="FarmingOpenAndAddLiquidity";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 _u}from"@msafe/sui3-utils";var Vn=class a extends C{constructor(t){super(t);this.data=t}txType=_u.Other;txSubType="FarmingBatchHarvest";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 Lu}from"@msafe/sui3-utils";var Hn=class a extends C{constructor(t){super(t);this.data=t}txType=Lu.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 ju}from"@msafe/sui3-utils";var Xn=class a extends C{constructor(t){super(t);this.data=t}txType=ju.Other;txSubType="FarmingDecreaseLiquidity";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 Uu}from"@msafe/sui3-utils";var zn=class a extends C{constructor(t){super(t);this.data=t}txType=Uu.Other;txSubType="FarmingHarvest";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 qu}from"@msafe/sui3-utils";var Gn=class a extends C{constructor(t){super(t);this.data=t}txType=qu.Other;txSubType="FarmingIncreaseLiquidity";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 Fu}from"@msafe/sui3-utils";var Qn=class a extends C{constructor(t){super(t);this.data=t}txType=Fu.Other;txSubType="FarmingRemoveLiquidity";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 Ku}from"@msafe/sui3-utils";var Jn=class a extends C{constructor(t){super(t);this.data=t}txType=Ku.Other;txSubType="FarmingStake";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 $u}from"@msafe/sui3-utils";var Yn=class a extends C{constructor(t){super(t);this.data=t}txType=$u.Other;txSubType="FarmingUnstake";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 Vu}from"@msafe/sui3-utils";var Zn=class a extends C{constructor(t){super(t);this.data=t}txType=Vu.Other;txSubType="IncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Us(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ju}from"@msafe/sui3-utils";import{Transaction as to}from"@mysten/sui/transactions";import Hu,{vaults_mainnet as Xu}from"haedal-vault-sdk";var zu=async(a,e,t)=>{let n=Ue(t,e),o=new to;return o.setSender(e.address),n.Vest.buildRedeemPayload(a.params,o),o},Gu=async(a,e,t)=>{let n=new Hu(Xu);n.senderAddress=e.address;let o=new to;return o.setSender(e.address),await n?.Vest.buildRedeemPayload(a.params,o),o},Zs=(a,e,t)=>{let n=Zt(t,e),o=new to;return n?.Vest.buildRedeemPayload(a.params,o),o},Qu=async(a,e,t)=>{let n=Zt(t,e),o=Ut(t,e),i=new to,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},tc=async(a,e,t)=>a.type==="clmm"?Zs(a,e,t):a.type==="farms"?Qu(a,e,t):a.type==="vaults"?zu(a,e,t):a.type==="haedalVaults"?Gu(a,e,t):Zs(a,e,t);var eo=class a extends C{constructor(t){super(t);this.data=t}txType=Ju.Other;txSubType="PosVestingRedeem";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 Yu}from"@msafe/sui3-utils";var no=class a extends C{constructor(t){super(t);this.data=t}txType=Yu.Other;txSubType="RemoveLiquidity";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 em}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as Zu}from"@cetusprotocol/aggregator-sdk";import{Transaction as tm}from"@mysten/sui/transactions";var ec=async(a,e,t)=>{let n=Ls(t,e),o=new tm;return await n.fastRouterSwap({...a,routers:Zu(a.routers),txb:o}),o};var oo=class a extends C{constructor(t){super(t);this.data=t}txType=em.Other;txSubType="AggregatorSwap";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 nm}from"@msafe/sui3-utils";import{Transaction as nc}from"@mysten/sui/transactions";var oc=async(a,e,t)=>{let n=Ue(t,e),o=new nc;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},ac=async(a,e,t)=>{let n=Ue(t,e),o=new nc;return await n.Vaults.withdraw(a,o),o};var ao=class a extends C{constructor(t){super(t);this.data=t}txType=nm.Other;txSubType="AddVaultsPosition";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 om}from"@msafe/sui3-utils";var io=class a extends C{constructor(t){super(t);this.data=t}txType=om.Other;txSubType="RemoveVaultsPosition";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 im}from"@msafe/sui3-utils";import{Transaction as am}from"@mysten/sui/transactions";var ic={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},rc=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 am;return i.forEach(d=>{l.moveCall({target:`${ic.published_at}::router::redeem`,typeArguments:[ic.cetus_coin_type],arguments:[l.object(n),l.object(o),l.pure(d),l.object(s)]})}),l};var ro=class a extends C{constructor(t){super(t);this.data=t}txType=im.Other;txSubType="VestingRedeem";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 rm}from"@msafe/sui3-utils";var sc=async(a,e,t)=>await Ie(t,e).XCetusModule.convertPayload(a),cc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemLockPayload(a),lc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),uc=async(a,e,t)=>await Ie(t,e).XCetusModule.cancelRedeemPayload(a),mc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemPayload(a);var so=class a extends C{constructor(t){super(t);this.data=t}txType=rm.Other;txSubType="xCETUSCancelRedeem";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 sm}from"@msafe/sui3-utils";var co=class a extends C{constructor(t){super(t);this.data=t}txType=sm.Other;txSubType="xCETUSClaimStakingRwewards";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 cm}from"@msafe/sui3-utils";var lo=class a extends C{constructor(t){super(t);this.data=t}txType=cm.Other;txSubType="xCETUSConvert";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 lm}from"@msafe/sui3-utils";var uo=class a extends C{constructor(t){super(t);this.data=t}txType=lm.Other;txSubType="xCETUSRedeem";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 um}from"@msafe/sui3-utils";var mo=class a extends C{constructor(t){super(t);this.data=t}txType=um.Other;txSubType="xCETUSRedeemLock";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)}};var po=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:mm.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=Zn.fromData(e.intentionData);break;case"DecreaseLiquidity":i=Kn.fromData(e.intentionData);break;case"RemoveLiquidity":i=no.fromData(e.intentionData);break;case"ClaimFeeAndMining":i=Fn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":i=$n.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":i=Gn.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":i=Xn.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":i=Qn.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":i=Hn.fromData(e.intentionData);break;case"FarmingHarvest":i=zn.fromData(e.intentionData);break;case"FarmingBatchHarvest":i=Vn.fromData(e.intentionData);break;case"FarmingStake":i=Jn.fromData(e.intentionData);break;case"FarmingUnstake":i=Yn.fromData(e.intentionData);break;case"xCETUSConvert":i=lo.fromData(e.intentionData);break;case"xCETUSRedeemLock":i=mo.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":i=co.fromData(e.intentionData);break;case"xCETUSCancelRedeem":i=so.fromData(e.intentionData);break;case"xCETUSRedeem":i=uo.fromData(e.intentionData);break;case"VestingRedeem":i=ro.fromData(e.intentionData);break;case"AggregatorSwap":i=oo.fromData(e.intentionData);break;case"AddVaultsPosition":i=ao.fromData(e.intentionData);break;case"RemoveVaultsPosition":i=io.fromData(e.intentionData);break;case"PosVestingRedeem":i=eo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as lp}from"@msafe/sui3-utils";import pm from"sort-keys-recursive";var _=class{constructor(e){this.data=e}serialize(){return JSON.stringify(pm(this.data))}};import{getFullnodeUrl as fo}from"@mysten/sui.js/client";var Tr={};ws(Tr,{contractId:()=>hm,default:()=>Tm,feeObjId:()=>bm,roleObjId:()=>gm,status:()=>fm,transaction:()=>dm,upgradeCapObjId:()=>Sm,vaultObjId:()=>ym});var dm="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",fm="success",hm="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",gm="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",ym="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",bm="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Sm="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Tm={transaction:dm,status:fm,contractId:hm,roleObjId:gm,vaultObjId:ym,feeObjId:bm,upgradeCapObjId:Sm};var Ir={};ws(Ir,{contractId:()=>Cm,default:()=>Am,feeObjId:()=>Dm,roleObjId:()=>km,status:()=>wm,transaction:()=>Im,upgradeCapObjId:()=>vm,vaultObjId:()=>xm});var Im="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",wm="success",Cm="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",km="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",xm="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Dm="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",vm="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Am={transaction:Im,status:wm,contractId:Cm,roleObjId:km,vaultObjId:xm,feeObjId:Dm,upgradeCapObjId:vm};var Mm=fo("testnet"),Om=fo("testnet"),Pm=fo("mainnet"),Rm=fo("mainnet"),Bm="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Em="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",Nm="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",Wm="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",pc=Tr,dc=Ir,_m=new Map([["dev",{env:"dev",rpc:{url:Mm},backend:{url:Bm},contract:pc}],["stg",{env:"stg",rpc:{url:Om},backend:{url:Em},contract:pc}],["prev",{env:"prev",rpc:{url:Pm},backend:{url:Nm},contract:dc}],["prod",{env:"prod",rpc:{url:Rm},backend:{url:Wm},contract:dc}]]);function fc(a,e){let t=_m.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 jm}from"@mysten/sui.js/client";var L=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 ho=class extends L{constructor(){super(11,"Backend is not specified")}};var go=class extends L{constructor(){super(1,"Wallet not connected")}};import Ce,{AxiosError as Lm}from"axios";var we=class extends L{constructor(e,t){super(10,e,{context:t})}};var yo=class a{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof Lm)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 ke=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new jm({url:e.rpc.url}),e.backend&&(this._backend=new yo(e.backend.url))}static new(e,t){let n=fc(e,t);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new ho;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 go;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as rp,normalizeStructTag as sp,normalizeSuiAddress as Lc}from"@mysten/sui.js/utils";import{TransactionBlock as Co}from"@mysten/sui.js/transactions";import{TransactionBlock as Cc}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as kc,normalizeStructTag as Km}from"@mysten/sui.js/utils";var wr=50n,bo=10000n,hc=25n,Cr=100000000n;var Gt=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 gc}from"buffer";import{normalizeSuiAddress as Um}from"@mysten/sui.js/utils";var Fe=class extends L{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 Um(gc.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 gc.from(n).readBigInt64LE()}};import{bcs as bc}from"@mysten/sui.js/bcs";var H=class extends L{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var Sc={groupId:"string",name:"string"},qm=64;function Tc(a){return Ic(a),bc.ser(Sc,a).toString("base64")}function Ke(a){let e=bc.de(Sc,a,"base64");return Ic(e),e}function Ic(a){if(!yc(a.name))throw new H("Invalid metadata: Name contains unknown character");if(!yc(a.groupId))throw new H("Invalid metadata: Group ID contains unknown character");if(a.name.length>qm)throw new H("Invalid metadata: Name exceed max length 64")}function yc(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as To}from"@mysten/sui.js/utils";function Io(a,e){return To(a)===To(e)}function se(a,e){return To(a)===To(e)}var wo="txn.gas";import{nanoid as Fm}from"nanoid";function wc(){return Fm()}var he=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:Tc({name:e.name,groupId:wc()}),coinType:Km(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 Cc,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],T=this.amountForRecipient(b,e.numberEpoch),w=this.getStreamFeeLocal(T),[k]=t.splitCoins(s,[t.pure(T+w,"u64")]),[x]=t.splitCoins(l,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new re(k),flatFeeCoin:new re(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:wr,denominator:bo},claimFeePercent:{numerator:hc,denominator:bo},flatFeePerStream:Cr}}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===wo?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return Io(n,kc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:kc,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 Cr}getStreamFeeLocal(e){return e*wr/bo}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new Cc,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 Dc}from"@mysten/sui.js/transactions";var xc="0x0000000000000000000000000000000000000000000000000000000000000006";var xe=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(Dc.MoveCall({target:n,arguments:t.arguments.map(o=>o instanceof qe?o.moveArgs(e):o instanceof Gt?o.moveArg(e):o instanceof re?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,n=[],o=[]){e.add(Dc.MoveCall({target:t,arguments:n.map(i=>i instanceof qe?i.moveArgs(e):i instanceof Gt?i.moveArg(e):i instanceof re?i.moveArg():e.pure(i)),typeArguments:o}))}makeObject(e){return typeof e=="string"?new Gt(e):e}vaultObject(){return new Gt(this.config.vaultObjId)}roleObject(){return new Gt(this.config.roleObjId)}feeObject(){return new Gt(this.config.feeObjId)}clockObject(){return new Gt(xc)}};var De=class a extends xe{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 Qt=class a extends xe{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 De(t,e),this.streamContract=new Qt(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 Co;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new Co;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new Co;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new Co;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as kr,SUI_TYPE_ARG as $m}from"@mysten/sui.js/utils";import{Duration as vc}from"luxon";var ko=class extends L{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var Vm=1e3,xo=class{constructor(e){this.globals=e;this.coinMetaHelper=new xr(e.suiClient),this.createStreamHelper=new ve(e).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new ko(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 H("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 H("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 H("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(vc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:vc.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:kr(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:kr(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 H("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new H("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<Vm)throw new H("Interval shall be at least 1 second","interval",e.interval)}},xr=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(e){let t=kr(e||$m);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 Oc,normalizeSuiAddress as Po}from"@mysten/sui.js/utils";import{DateTime as Pc}from"luxon";import{TransactionBlock as Mo}from"@mysten/sui.js/transactions";import{normalizeStructTag as Mc,parseStructTag as zm}from"@mysten/sui.js/utils";import{DateTime as Gm}from"luxon";var Do=class extends L{constructor(){super(7,"Connected wallet is not creator")}};var $e=class extends L{constructor(){super(8,"Connected wallet is not recipient")}};var Ve=class extends L{constructor(e,t){super(6,e,{context:t})}};var At=class extends L{constructor(e,t={}){super(0,e,t)}};var vo=class extends L{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as Hm,Duration as Xm}from"luxon";var Ac=(1n<<64n)-1n,Ao=1e3;function Dr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Ao);return Hm.fromMillis(t*Ao)}function vr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Ao);return Xm.fromMillis(t*Ao)}var ce=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Qt(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 At("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 Do;let e=new Mo;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new $e;let e=new Mo;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new $e;let t=new Mo;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new Mo;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 Mc(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 vr(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 Dr(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return vr(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:Dr((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===Ac?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=Gm.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 vo(e):new Ve(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new Ve("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=zm(n.type),i=Mc(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 L{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function Mr(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 Ar=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 Ar(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 Qm=25;async function Pr(a,e,t){let n=new He(e),o=new Xe(a,n,t);return await Mr(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 Or(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}},Or=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||Qm,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 Oo=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 H("Stream does not have same group ID")}type="StreamGroup";static async new(e,t){let n=await Pr(e.suiClient,t);return n.forEach(o=>{if(!o)throw new At("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=>{Jm(n,i)||(o=!1)}),o}async refresh(){let e=await Pr(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 Jm(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 Ro.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Ro.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}},Ro=class a{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let t=await Bo.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await Bo.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 At("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new At("No more results");return e}},Bo=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=np(e.query),n=await e.globals.walletAddress(),i=(await e.globals.backend.getIncomingStreams(n,t)).filter(l=>Po(l.recipient)===Po(n)),s=Rc(i);return new a(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=op(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),i=Rc(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 tp(this.globals,e[0].streamId,this.objectIter);return this.current++,Bc(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await ep(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,Zm(t,this.query)?t:this.doNextRequest()}throw new At("Stream group with no stream")}};function Rc(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)=>Pc.fromISO(n[0].createDate).toMillis()-Pc.fromISO(t[0].createDate).toMillis())}function Bc(a,e){if(e===void 0)return!0;let t=Ym(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 Ym(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function Zm(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{Bc(n,e)&&(t=!0)}),t}async function tp(a,e,t){let n=await Ec(t,e);return ce.fromObjectData(a,e,n)}async function ep(a,e,t){let n=[];for(;n.length<e.length;){let o=await Ec(t,e[n.length]);n.push(o)}return Oo.newFromObjectResponse(a,e,n)}async function Ec(a,e){if(!await a.hasNext())throw new At("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new At("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new At("stream id not aligned");return t}function np(a){return{status:Rr(a?.status),coinType:Nc(a?.coinType),sender:Wc(a?.sender)}}function op(a){return{status:Rr(a?.status),coinType:Nc(a?.coinType),recipient:Wc(a?.recipient)}}function Rr(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=Rr(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 H("Unknown stream filtered status")}}function Nc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Oc(e)):void 0:Oc(a)}function Wc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Po(e)):void 0:Po(a)}var Eo=class extends L{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 ip=25;async function _c(a,e,t,n="0x2::sui::SUI",o=ip){let i=new Br(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 Eo(n,t,s);return l}var Br=class extends Me{constructor(t,n,o,i){super(new Er(t,n,o,i));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=i}},Er=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new At("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 Nr=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}},Wr=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(Io(e.coinType,rp))return{primaryCoin:wo};if(e.amount<=0)throw new H("Invalid coin request","coinAmount",e.amount);let t=await _c(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new At("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},Wo=class{globals;helper;constructor(e,t){this.globals=ke.new(e,t),this.helper=new xo(this.globals)}connectSingleWallet(e){let t=new Wr(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new Nr(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=>sp(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Lc(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Lc(o))}get wallet(){return this.globals.wallet}builder(){return new ve(this.globals)}};var Ft=class extends _{application="mpay";getClient(e,t){let n=new Wo(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=lp.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 up}from"@msafe/sui3-utils";var Qe=class extends Ft{constructor(t){super(t);this.data=t}txType=up.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 mp}from"@msafe/sui3-utils";var Je=class extends Ft{constructor(t){super(t);this.data=t}txType=mp.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 pp}from"@msafe/sui3-utils";var Ye=class extends Ft{constructor(t){super(t);this.data=t}txType=pp.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as jc}from"@mysten/sui.js/bcs";import{normalizeStructTag as dp,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 jc.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 jc.de(t,new Uint8Array(n))}typeArg(e){return dp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var _o=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 At("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),T=e.decodeInputU64(10),w=e.decodeInputBool(11),k=e.typeArg(0);return{name:n,groupId:o,recipient:i,timeStart:s,cliff:l,epochInterval:d,totalEpoch:b,amountPerEpoch:T,cancelable:w,coinType:k}}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 H("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 Qt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new De(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 Lo=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Qt(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 _o(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 fp}from"@msafe/sui3-utils";var tn=class extends Ft{constructor(t){super(t);this.data=t}txType=fp.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 jo=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(e){let{network:t,transactionBlock:n}=e,o=ke.new(t==="sui:mainnet"?"prod":"dev"),s=new Lo(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 yp,TransactionSubTypes as Uc}from"@msafe/sui3-utils";import{buildCoinTransferTxb as hp}from"@msafe/sui3-utils";var Uo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return hp(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as gp}from"@msafe/sui3-utils";var qo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return gp(n,this.data,o.address)}static fromData(t){return new a(t)}};var Fo=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=yp}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 Uc.assets.coin.send:o=Uo.fromData(e.intentionData);break;case Uc.assets.object.send:o=qo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Rp}from"@msafe/sui3-utils";var qc=!1,en={ProtocolPackage:"0x81c408448d0d57b3e371ea94de1d40bf852784d3e225de1e74acab3e8395c18f",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 _r(){if(!qc)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),qc=!0}catch(a){console.error(a.message)}}var Vt=en;import{TransactionType as ye}from"@msafe/sui3-utils";import{bcs as Fc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Sp,normalizeSuiAddress as nn}from"@mysten/sui.js/utils";var Ko=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(`${Vt.ProtocolPackage}::incentive_v3::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::borrow`)}isEntryMultiDepositTransaction(){let e=`${Vt.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=`${Vt.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(`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::withdraw`)}findPoolByAssetId(e){let t=Object.values(Vt.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=`${Vt.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(Vt.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 Fc.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 Fc.de(t,new Uint8Array(n))}typeArg(e){return Sp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{depositCoin as Tp,withdrawCoin as Ip,repayDebt as wp,borrowCoin as Cp,claimAllRewardsPTB as kp,claimAllRewardsResupplyPTB as xp}from"navi-sdk";async function Pe(a,e,t,n){return await Tp(a,e,t,n),a}async function Kc(a,e,t,n){let[o]=await Ip(a,e,t);return a.transferObjects([o],a.pure(n)),a}async function $c(a,e,t,n){let[o]=await Cp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Lr(a,e,t,n){return await wp(a,e,t,n),a}async function Vc(a,e){return await kp(a,e)}async function Hc(a,e){return await xp(a,e)}var Vo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await Vc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var Ho=class a extends _{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 Hc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as vp}from"@mysten/sui.js/transactions";import{pool as Dp}from"navi-sdk";function Jt(a){return Object.values(Dp).find(e=>String(e.assetId)===String(a))}var Xo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new vp;console.log("build",this.data);let s=Jt(n);return await $c(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Ap}from"@mysten/sui.js/transactions";async function Re(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var zo=class a extends _{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 Ap;console.log("build",this.data);let d=Jt(i);if(i===0){let[k]=l.splitCoins(l.gas,[s]);return await Pe(l,d,k,s)}let b=await Re(n,o.address,d.type);if(!b.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let T=b.data[0].coinObjectId;if(b.data.length>=2){let k=1;for(;k<b.data.length;)l.mergeCoins(T,[b.data[k].coinObjectId]),k++}return await Pe(l,d,l.object(T),s)}static fromData(t){return new a(t)}};import{TransactionBlock as Mp}from"@mysten/sui.js/transactions";var Go=class a extends _{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 Mp;console.log("build",this.data);let d=Jt(i);if(i===0){let[w]=l.splitCoins(l.gas,[s]);return Lr(l,d,w,s)}let b=await Re(n,o.address,d.type);if(!b.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let T=b.data[0].coinObjectId;if(b.data.length>=2){let w=1;for(;w<b.data.length;)l.mergeCoins(T,[b.data[w].coinObjectId]),w++}return Lr(l,d,l.object(T),s)}static fromData(t){return new a(t)}};import{TransactionBlock as Op}from"@mysten/sui.js/transactions";var Qo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Op;console.log("build",this.data);let s=Jt(n);return await Kc(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Pp}from"@mysten/sui.js/transactions";var Jo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:i}=this.data,s=new Pp;console.log("build",this.data);for(let l=0;l<i.length;l++){let{assetId:d,amount:b}=i[l],T=Jt(d);if(d===0){let[x]=s.splitCoins(s.gas,[b]);await Pe(s,T,x,b);continue}let w=await Re(n,o.address,T.type);if(!w.data[0])throw new Error(`Insufficient balance for ${T.name} Token`);let k=w.data[0].coinObjectId;if(w.data.length>=2){let x=1;for(;x<w.data.length;)s.mergeCoins(k,[w.data[x].coinObjectId]),x++}await Pe(s,T,s.object(k),b)}return s}static fromData(t){return new a(t)}};var Yo=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(e){await _r();let{transactionBlock:t}=e,o=new Ko(t).decode();return{txType:Rp.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await _r(),e.txSubType){case"EntryDeposit":o=zo.fromData(e.intentionData);break;case"EntryBorrow":o=Xo.fromData(e.intentionData);break;case"EntryRepay":o=Go.fromData(e.intentionData);break;case"EntryWithdraw":o=Qo.fromData(e.intentionData);break;case"EntryMultiDeposit":o=Jo.fromData(e.intentionData);break;case"ClaimReward":o=Vo.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=Ho.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as Bp,TransactionType as Xc}from"@msafe/sui3-utils";import{fromHex as Ep}from"@mysten/bcs";import{Transaction as Np}from"@mysten/sui/transactions";import Wp from"sort-keys-recursive";var zc="msafe-plain-tx",Gc=Bp.others.plain,jr=class a{constructor(e){this.data=e}application=zc;txType=Xc.Other;txSubType=Gc;serialize(){return JSON.stringify(Wp(this.data))}async build(e){return Np.from(Ep(this.data.content))}static fromData(e){return new a(e)}},Zo=class{application;supportSDK="@mysten/sui";constructor(){this.application=zc}async deserialize(e){let{content:t}=e.appContext;return{txType:Xc.Other,txSubType:Gc,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 Qc}from"@mysten/sui/client";import{Transaction as Kp}from"@mysten/sui/transactions";import{SuiClient as Fr}from"@mysten/sui.js/client";import{TransactionBlock as $p}from"@mysten/sui.js/transactions";import{RequestManager as Up,HTTPTransport as qp,Client as Fp}from"@open-rpc/client-js";var _p={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Ur=class extends Error{},ta=class extends Ur{code;type;constructor(e,t){super(e),this.code=t,this.type=_p[t]??"ServerError"}};function Lp(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var jp={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},ea=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={...jp,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=Lp(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 ta(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 qr(e);return this.#i.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},qr=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 qp(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new Fp(new Up([i])),this.websocketClient=new ea(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 na=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 $r(e))}addHelper(e){this.apps.set(e.application,new Kr(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},Kr=class{constructor(e){this.helper=e}async deserialize(e){let t=new Qc({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new Fr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=Kp.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:i})}async build(e){let t=new Qc({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 $p.from(i)}},$r=class{constructor(e){this.helper=e}async deserialize(e){let t=new Fr({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 Fr({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 td}from"@msafe/sui3-utils";import{getFullnodeUrl as ed}from"@mysten/sui/client";import{Scallop as nd}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Rt}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as el}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as Vp}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}=Vp(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 Vr}from"@mysten/sui/bcs";import{normalizeStructTag as Hp,normalizeSuiAddress as on}from"@mysten/sui/utils";var Hr=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=Vr[t];return Vr[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 Vr.U64.parse(new Uint8Array(t))}typeArg(e){return Hp(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},N=Hr;var Xr=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)}},Bt=Xr;import{normalizeStructTag as Jc,SUI_CLOCK_OBJECT_ID as Yc,SUI_TYPE_ARG as Xp}from"@mysten/sui/utils";var Zc=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),Yc],[Jc(Xp)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${Be.id}::user::redeem_rewards`,[Be.incentivePools,Be.incentiveAccounts,a.object(e),a.object(t),Yc],[Jc(n)])};var tl=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var oa=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(`${el}::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,`${el}::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:Rt.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:Rt.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Rt.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Bt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Rt.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:Rt.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:Rt.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:Rt.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:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Rt.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 Bt(n,this.transaction).getAmountInput().reduce((s,l)=>s+l,0),i=this.helperRepay.decodeSharedObjectId(1);return{txType:Rt.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 Bt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}if(this.helperStake.moveCall&&t===0){let i=this.helperStake.getNestedInputParam(2);t=new Bt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Rt.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:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Rt.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 Bt(o,this.transaction).getAmountInput().reduce((i,s)=>i+s,0)}return{txType:Rt.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:Rt.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as Gr}from"@msafe/sui3-utils";var aa=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 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:Gr.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Gr.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:Gr.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as te}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as zp}from"@scallop-io/sui-scallop-sdk";var ia=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=tl(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(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,`${zp}::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,l=0;return this.commands.forEach(d=>{this.filterMoveCallCommands(d,e)?(o.push({action:"unstake",helper:new N(d,this.transaction,i)}),i++):this.filterMoveCallCommands(d,t)?(o.push({action:"stake",helper:new N(d,this.transaction,s)}),s++):this.filterMoveCallCommands(d,n)&&(o.push({action:"deactivate",helper:new N(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 Bt(e,this.transaction).getAmountInput().reduce((D,P)=>D+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,T=!1,w,k,x=[{condition:s,isOld:!0},{condition:l,isOld:!1},{condition:d,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([k,w]=x[D].condition,b=!0,T=x[D].isOld);return{txType:te.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:w,obligationKey:k,veScaKey:o,isHaveRedeem:i,isObligationLocked:b,isOldBorrowIncentive:T}}}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,T=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:i,isOld:!1}];for(let w=0;w<T.length;w++)T[w].condition.length>1&&([b,d]=T[w].condition,s=!0,l=T[w].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 Bt(e,this.transaction).getAmountInput().reduce((x,D)=>x+D,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,T,w,k=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let x=0;x<k.length;x++)k[x].condition.length>1&&([w,T]=k[x].condition,d=!0,b=k[x].isOld);return{txType:te.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:T,obligationKey:w,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 Bt(e,this.transaction).getAmountInput().reduce((x,D)=>x+D,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,T,w,k=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let x=0;x<k.length;x++)k[x].condition.length>1&&([w,T]=k[x].condition,d=!0,b=k[x].isOld);return{txType:te.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:T,obligationKey:w,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 Gp from"sort-keys-recursive";var A=class{constructor(e){this.data=e}get application(){return"msafe-core"}serialize(){return JSON.stringify(Gp(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 ra=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(T,w)=>{let k=await w.borrowQuick(+i,o,s,l);w.transferObjects([k],d)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var sa=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(T,w)=>{let k=await w.borrowQuick(+l,d,o,i);w.transferObjects([k],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var ca=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(w,k)=>{let x=k.claimReferralTicket(d),D=await k.borrowWithReferralQuick(+b,d,x,i,s);k.burnReferralTicket(x,d),k.transferObjects([D],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as Qp}from"@mysten/sui/utils";var la=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 k=[...e.constants.whitelist.spool].map(x=>e.utils.parseCoinName(x));return Object.values(i??[]).filter(x=>!!x&&k.includes(x.coinName)).reduce((x,D)=>{let P=e.utils.parseMarketCoinName(D.coinName);return x[P]||(x[P]=0),x[P]+=D.availableClaimCoin,x},{})})(),b={};Object.entries(o).forEach(([k,x])=>{for(let D=0;D<x.length;D++){let P=x[D];if(!d[k])continue;let q=n.claim(P.id,k);b.sui?b.sui.push(q):b.sui=[q]}});let T=(()=>{let k={};return k.sui=Object.values(d).reduce((x,D)=>x+D,0),l.forEach(x=>{Object.values(x.borrowIncentives).forEach(D=>{D&&D.rewards.forEach(P=>{k[P.coinName]||(k[P.coinName]=0),k[P.coinName]?k[P.coinName]+=P.availableClaimCoin:k[P.coinName]=P.availableClaimCoin})})}),k})();if(s.length>0&&l.length>0)for(let k=0;k<l.length;k++){let x=l[k],D=!1,P=s.find($=>$.id===x.obligationId)?.keyId,q={};if(P){if(Object.values(x.borrowIncentives).forEach($=>{if($){let Et=$.rewards.filter(Nt=>{let Ot=Nt.coinName;return Nt.availableClaimCoin>0&&!q[Ot]});D=Et.length>0,Et.forEach(Nt=>{let Ot=n.claimBorrowIncentive(x.obligationId,P,Nt.coinName);q[Nt.coinName]=!0,b[Nt.coinName]?b[Nt.coinName].push(Ot):b[Nt.coinName]=[Ot]})}}),T.sui>0){let $=Kt.redeem_rewards(n,P,x.obligationId,Qp);b.sui?b.sui.push($):b.sui=[$]}if(D&&await Zc(e.query,x.obligationId)){n.unstakeObligation(x.obligationId,P);let Et=await e.query.getBindedVeScaKey(x.obligationId);Et?n.stakeObligationWithVesca(x.obligationId,P,Et):n.stakeObligation(x.obligationId,P)}}}let w=(await Promise.all(Object.entries(b).map(async([k,x])=>{let D=x[0];if(x.length>1&&n.mergeCoins(D,x.slice(1)),k==="sui"){n.mergeCoins(n.gas,[D]);return}return await e.builder.utils.mergeSimilarCoins(n,D,e.utils.parseCoinType(k),t),D}))).filter(k=>!!k);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 ua=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 ma=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 T=Kt.redeem_rewards(b,i,s,n.utils.parseCoinType(l));return b.transferObjects([T],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 pa=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 da=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 fa=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(T,w)=>{await w.repayQuick(+s,i,l)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var ha=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 T=n.constants.whitelist.borrowing.has(i);return T&&await b.unstakeObligationQuick(l,void 0),await b.repayQuick(+s,i,l),T&&await b.stakeObligationWithVeScaQuick(l,void 0,d),b.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var ga=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 ya=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 ba=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 T=0;T<s.length;T++){let{id:w,coin:k}=s[T],x=t.utils.parseMarketCoinName(d),[D]=await i.unstakeQuick(k,x,w);if(D){let P=i.withdraw(D,d);b.push(P)}}if(l>0){let T=await i.withdrawQuick(l,d);b.push(T)}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 Ta=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 Ia=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 wa=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 Ca=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 Jp}from"@scallop-io/sui-scallop-sdk";var ka=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:T}=this.data,w=t.address,k=n.builder.createTxBlock();k.setSender(w);let x=await n.utils.selectCoins(o,Jp,w),[D,P]=k.takeAmountFromCoins(x,o);return k.extendLockPeriod(i,s),k.extendLockAmount(i,D),k.transferObjects([P],w),!l||!d||(T&&(b?Kt.unstakeObligation(k,l,d):k.unstakeObligation(l,d)),k.stakeObligationWithVesca(l,d,i)),k.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var xa=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:T}=this.data,w=n.builder.createTxBlock();return w.setSender(o),w.extendLockPeriod(i,s),l&&d&&(b&&(T?Kt.unstakeObligation(w,d,l):w.unstakeObligation(l,d)),w.stakeObligationWithVesca(l,d,i)),w.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var Da=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 va=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(o),s.txBlock}async build(t){return this.redeemSca(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as Yp}from"@scallop-io/sui-scallop-sdk";var Aa=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:T,isObligationLocked:w,isOldBorrowIncentive:k}=this.data,x=n.builder.createTxBlock();if(x.setSender(o),d){let $=x.redeemSca(l);x.transferObjects([$],o)}let D=await n.builder.utils.selectCoins(i,Yp,o),[P,q]=x.takeAmountFromCoins(D,i);return x.transferObjects([q],o),x.renewExpiredVeSca(l,P,s),!b||!T||(w&&(k?Kt.unstakeObligation(x,T,b):x.unstakeObligation(b,T)),x.stakeObligationWithVesca(b,T,l)),x.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var Ma=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 Zp}from"@scallop-io/sui-scallop-sdk";var Oa=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:T,veScaKey:w}=this.data,k=n.builder.createTxBlock();k.setSender(o);let x=await n.utils.selectCoins(i,Zp,o),[D,P]=k.takeAmountFromCoins(x,i),q;return w?k.extendLockAmount(w,D):q=k.lockSca(D,T),d&&b&&(s&&(l?Kt.unstakeObligation(k,b,d):k.unstakeObligation(d,b)),k.stakeObligationWithVesca(d,b,w||q)),w||k.transferObjects([q,P],o),k.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var Pa=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),T=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(T))return d.txBlock;let w=await n.query.getStakeAccounts(T,o),k=l||(w.length>0?w[0].id:void 0);if(k)await d.stakeQuick(b,T,k);else{let x=d.createStakeAccount(T);await d.stakeQuick(b,T,x),d.transferObjects([x],o)}return d.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var Ra=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 Ba=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 Ea=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(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 nd({addressId:"67c44a103fe1b8c454eb9699",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??ed("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 oa(t,this.scallopClient),s=new aa(t,this.scallopClient),l=new ia(t,this.scallopClient),d=i.decode()||s.decode()||await l.decode();if(!d)throw new Error("Unknown transaction type");return{txType:td.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=ga.fromData(s);break;case"WithdrawLending":l=Ta.fromData(s);break;case"Borrow":l=ra.fromData(s);break;case"Repay":l=fa.fromData(s);break;case"DepositCollateral":l=ua.fromData(s);break;case"WithdrawCollateral":l=Sa.fromData(s);break;case"OpenObligation":l=da.fromData(s);break;case"UnstakeSpool":l=ya.fromData(s);break;case"ClaimIncentiveReward":l=la.fromData(s);break;case"BorrowWithBoost":l=sa.fromData(s);break;case"StakeSca":l=Oa.fromData(s);break;case"ExtendStakePeriod":l=xa.fromData(s);break;case"ExtendPeriodAndStakeMore":l=ka.fromData(s);break;case"RenewExpStakePeriod":l=Aa.fromData(s);break;case"WithdrawStakedSca":l=Ea.fromData(s);break;case"SupplyAndStakeLending":l=Pa.fromData(s);break;case"WithdrawAndUnstakeLending":l=ba.fromData(s);break;case"RedeemSca":l=va.fromData(s);break;case"MigrateAndClaim":l=ma.fromData(s);break;case"BorrowWithReferral":l=ca.fromData(s);break;case"CreateReferralLink":l=Ca.fromData(s);break;case"ClaimRevenueReferral":l=wa.fromData(s);break;case"BindReferral":l=Ia.fromData(s);break;case"MigrateScoin":l=pa.fromData(s);break;case"RepayWithBoost":l=ha.fromData(s);break;case"MergeVeSca":l=Da.fromData(s);break;case"SplitVeSca":l=Ma.fromData(s);break;case"VeScaObligationBindings":{l=Ra.fromData(s);break}case"TransferVeScaKeys":{l=Ba.fromData(s);break}default:throw new Error("not implemented")}return l.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as Nd}from"@msafe/sui3-utils";import{TransactionType as sn}from"@msafe/sui3-utils";import{normalizeStructTag as be}from"@mysten/sui/utils";import{API_URL as bd}from"@suilend/sui-fe";import{TransactionType as hd}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as gd,LENDING_MARKET_TYPE as yd,SuilendClient as Qr}from"@suilend/sdk";import{TransactionType as Ee}from"@msafe/sui3-utils";import{fromBase64 as nl,toHex as ol}from"@mysten/bcs";import{normalizeStructTag as an}from"@mysten/sui/utils";import{MAX_U64 as Ne}from"@suilend/sui-fe";import al from"bignumber.js";var Wa=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 al(ol(nl(this.inputs[i].Pure.bytes)),16).toString(),l=s===Ne.toString();return console.log("decodeWithdraw - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",Ne.toString()),l&&(o=Ne.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 al(ol(nl(this.inputs[i].Pure.bytes)),16).toString(),l=s===Ne.toString();return console.log("decodeBorrow - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",Ne.toString()),l&&(o=Ne.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 id}from"@mysten/sui/transactions";import ad from"sort-keys-recursive";var _t=class{constructor(e){this.data=e}serialize(){return JSON.stringify(ad(this.data))}};var _a=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 id;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 ud}from"@mysten/sui/transactions";import{normalizeStructTag as rd}from"@mysten/sui/utils";import{Side as rn}from"@suilend/sdk";import{isSendPoints as sd}from"@suilend/sui-fe";import cd from"bignumber.js";var ld=(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:rd(l.coinType.name),side:o})).filter(l=>!sd(l.rewardCoinType)&&!!s.rewards[Number(l.rewardIndex)]&&new cd(s.rewards[Number(l.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},La=ld;var ja=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 ud;return i.claimRewardsAndSendToUser(o.address,s.id,La(i,l),d),d}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as md}from"@mysten/sui/transactions";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("ClaimAndDepositIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new md;return i.claimRewardsAndDeposit(o.address,s.id,La(i,l),d),d}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as pd}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;console.log("DepositIntention.build",n,o,i,s,l);let d=new pd;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 dd}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;if(console.log("RepayIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new dd;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 fd}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("WithdrawIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new fd;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 Qr.initialize(gd,yd,a),n=await Qr.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(i=>Qr.getObligation(i.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},Va=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 Wa(t,i).decode();return{txType:hd.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=qa.fromData(o);break;case"withdraw":l=Ka.fromData(o);break;case"borrow":l=_a.fromData(o);break;case"repay":l=Fa.fromData(o);break;case"claim":l=ja.fromData(o);break;case"claimAndDeposit":l=Ua.fromData(o);break;default:throw new Error("not implemented")}let d=window.localStorage.getItem("obligationId"),b=this.utils.obligations?.find(w=>w.id===d)??this.utils.obligations?.[0],T=this.utils.obligationOwnerCaps?.find(w=>w.obligationId===b?.id);return l.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:T,obligation:b})}};var Jr=async(a,e)=>{let t=await $a(a,e),n=await fetch(`${bd}/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 Ha=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 Id}from"@mysten/sui/transactions";import{convertLstsAndSendToUser as wd,LstClient as il}from"@suilend/springsui-sdk";import Td from"sort-keys-recursive";var $t=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Td(this.data))}};var Xa=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:l,obligation:d}=t;console.log("ConvertIntention.build",n,o,i,s,l,d);let b=await il.initialize(n,Object.values(s).find(k=>k.type===this.data.inCoinType)),T=await il.initialize(n,Object.values(s).find(k=>k.type===this.data.outCoinType)),w=new Id;return wd(b,T,w,o.address,this.data.amount),w}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as Cd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as kd,sendObligationToUser as xd}from"@suilend/sdk";import{convertLsts as Dd,LstClient as rl}from"@suilend/springsui-sdk";var za=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:l,obligation:d}=t;console.log("ConvertAndDepositIntention.build",n,o,i,s,l,d);let b=await rl.initialize(n,Object.values(s).find(P=>P.type===this.data.inCoinType)),T=await rl.initialize(n,Object.values(s).find(P=>P.type===this.data.outCoinType)),w=new Cd,{obligationOwnerCapId:k,didCreate:x}=kd(i,w,l),D=Dd(b,T,w,o.address,this.data.amount);return i.deposit(D,this.data.outCoinType,k,w),x&&xd(k,o.address,w),w}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as vd}from"@mysten/sui/transactions";import{LstClient as Ad}from"@suilend/springsui-sdk";var Ga=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:l,obligation:d}=t;console.log("StakeIntention.build",n,o,i,s,l,d);let b=await Ad.initialize(n,Object.values(s).find(w=>w.type===this.data.outCoinType)),T=new vd;return b.mintAmountAndRebalanceAndSendToUser(T,o.address,this.data.amount),T}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as Md}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Od,sendObligationToUser as Pd}from"@suilend/sdk";import{LstClient as Rd}from"@suilend/springsui-sdk";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,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("StakeAndDepositIntention.build",n,o,i,s,l,d);let b=await Rd.initialize(n,Object.values(s).find(D=>D.type===this.data.outCoinType)),T=new Md,{obligationOwnerCapId:w,didCreate:k}=Od(i,T,l),x=b.mintAmountAndRebalance(T,o.address,this.data.amount);return i.deposit(x,this.data.outCoinType,w,T),k&&Pd(w,o.address,T),T}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Bd}from"@mysten/sui/transactions";import{LstClient as Ed}from"@suilend/springsui-sdk";var Ja=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:l,obligation:d}=t;console.log("UnstakeIntention.build",n,o,i,s,l,d);let b=await Ed.initialize(n,Object.values(s).find(w=>w.type===this.data.inCoinType)),T=new Bd;return b.redeemAmountAndSendToUser(T,o.address,this.data.amount),T}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(t)}};var Ya=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await Jr(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",i);let l=new Ha(t,i).decode();return{txType:Nd.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 Jr(i,s));let l;switch(n){case"stake":l=Ga.fromData(o);break;case"stakeAndDeposit":l=Qa.fromData(o);break;case"convert":l=Xa.fromData(o);break;case"convertAndDeposit":l=za.fromData(o);break;case"unstake":l=Ja.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 jd}from"@msafe/sui3-utils";import{TransactionType as sl}from"@msafe/sui3-utils";var Za=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:sl.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:sl.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as _d}from"@alphafi/stsui-sdk";var ti=class a extends C{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 Ld}from"@alphafi/stsui-sdk";var ei=class a extends C{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 Ld(i).redeem(o,n.address);return l.setGasBudget(1e8),l}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var ni=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 Za(t,o).decode();return{txType:jd.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=ti.fromData(e.intentionData);break;case"redeem":n=ei.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as cf}from"@msafe/sui3-utils";import{TurbosSdk as lf}from"turbos-clmm-sdk";import{TransactionType as Lt}from"@msafe/sui3-utils";import{fromBase64 as We}from"@mysten/bcs";import{bcs as _e}from"@mysten/sui/bcs";import{BN as qd}from"turbos-clmm-sdk";var Ht={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Xt={PackageId:"0xdee9"};var Fd=(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}`)}},oi=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(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=Fd(t,n,this.swap1Layer,this.swap2Layer),i=o.map((x,D)=>{let P=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(D)),q=this.helper.decodeInputU128(this.helper.getInputsIndex(4+D+t)),$=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new qd(q.toString()));return{pool:P,a2b:x,nextTickIndex:$}}),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)),T=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),w=this.helper.decodeInputU64(this.helper.getInputsIndex(2+t)),k=this.helper.decodeInputU64(this.helper.getInputsIndex(3+t));return{txType:Lt.Other,type:"Swap",intentionData:{routes:i,coinTypeA:s,coinTypeB:l,address:d,amountA:T?w:k,amountB:T?k:w,amountSpecifiedIsInput:T,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(k=>{let x=k.decodeInputU64(k.getInputsIndex(4)),D=k.decodeInputU64(k.getInputsIndex(5));b[x]=D});let T=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,w=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:T,collectAmountB:w,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(w=>w.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,T=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:T,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(We(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(_e.u64().parse(Uint8Array.from(We(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(_e.u32().parse(Uint8Array.from(We(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(_e.u8().parse(Uint8Array.from(We(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return _e.Address.parse(Uint8Array.from(We(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return _e.bool().parse(Uint8Array.from(We(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as Kd}from"turbos-clmm-sdk";var ai=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Kd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,tickLower:b,tickUpper:T,deadline:w,txb:k}=this.data;return n.pool.addLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,tickLower:b,tickUpper:T,deadline:w,txb:k})}static fromData(t){return new a(t)}};import{TurbosSdk as $d}from"turbos-clmm-sdk";var ii=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new $d(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 Vd}from"turbos-clmm-sdk";var ri=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Vd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,collectAmountA:l,collectAmountB:d,deadline:b,txb:T}=this.data;return n.pool.collectFee({pool:o,address:i,collectAmountA:l,collectAmountB:d,nft:s,deadline:b,txb:T})}static fromData(t){return new a(t)}};import{TurbosSdk as Hd}from"turbos-clmm-sdk";var si=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Hd(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 Xd}from"turbos-clmm-sdk";var ci=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Xd(t.network.replace("sui:",""),t.suiClient),{fee:o,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:T,coinTypeB:w,amountA:k,amountB:x,deadline:D,txb:P}=this.data;return n.pool.createPool({fee:o,amountA:k,amountB:x,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:T,coinTypeB:w,deadline:D,txb:P})}static fromData(t){return new a(t)}};import{TurbosSdk as zd}from"turbos-clmm-sdk";var li=class a extends C{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,amountA:s,amountB:l,slippage:d,nft:b,decreaseLiquidity:T,deadline:w,txb:k}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:T,deadline:w,txb:k})}static fromData(t){return new a(t)}};import{TurbosSdk as Gd}from"turbos-clmm-sdk";var ui=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Gd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,decreaseLiquidity:T,deadline:w}=this.data,{txb:k,coinA:x,coinB:D}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:T,deadline:w});return k.transferObjects([x,D],this.data.address),k}static fromData(t){return new a(t)}};import{TurbosSdk as Qd}from"turbos-clmm-sdk";var mi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Qd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,deadline:T,txb:w}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,deadline:T,txb:w})}static fromData(t){return new a(t)}};import{Transaction as Jd}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Yd}from"@mysten/sui/utils";var pi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Jd;return n.moveCall({target:`${Ht.PackageId}::claim::claim`,typeArguments:[Ht.turbosCoinType],arguments:[n.object(Ht.Claim),n.object(Yd)]}),n}static fromData(t){return new a(t)}};import{Transaction as Zd}from"@mysten/sui/transactions";var di=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Zd;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 tf}from"@mysten/sui/transactions";import{TurbosSdk as ef}from"turbos-clmm-sdk";var fi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ef(t.network.replace("sui:",""),t.suiClient),o=new tf;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 nf}from"turbos-clmm-sdk";var hi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new nf(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 of}from"turbos-clmm-sdk";var gi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new of(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,slippage:T,amountSpecifiedIsInput:w,deadline:k,txb:x}=this.data;return n.trade.swap({routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,amountSpecifiedIsInput:w,slippage:T,deadline:k,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as rf}from"turbos-clmm-sdk";import{Transaction as cl}from"@mysten/sui/transactions";import{normalizeSuiObjectId as ll}from"@mysten/sui/utils";import{unstable_getObjectId as af}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?af(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 ul=89,ml=1e6,pl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new cl,d=new cn(s),b=await d.getCoinsData(i,t,o),[T,w]=d.splitAndMergeCoin(b,o,l);if(!T)throw new Error(`Not enough balance: ${t}`);let k=await d.IsAccountCap(i),x=k?l.object(k):d.createAccount(l),[D,P,q]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[l.object(String(n)),l.pure.u64(ul),x,l.pure.u64(o),l.object(ll("0x6")),T]});return w&&l.transferObjects([w],l.pure.address(i)),l.transferObjects([D],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),k||l.transferObjects([x],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(ml),l},dl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new cl,d=new cn(s),b=await d.getCoinsData(i,e,o),[T,w]=d.splitAndMergeCoin(b,o,l);if(!T)throw new Error(`Not enough balance: ${e}`);let k=await d.IsAccountCap(i),x=k?l.object(k):d.createAccount(l),D=d.zero(t,l),[P,q,$]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[l.object(String(n)),l.pure.u64(ul),x,l.pure.u64(o),T,D,l.object(ll("0x6"))]});return w&&l.transferObjects([w],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),l.transferObjects([q],l.pure.address(i)),k||l.transferObjects([x],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(ml),l};var yi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new rf(t.network.replace("sui:",""),t.suiClient);return await dl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as sf}from"turbos-clmm-sdk";var bi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new sf(t.network.replace("sui:",""),t.suiClient);return await pl({...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 lf(e.network.replace("sui:","")),n=await t.contract.getConfig(),{transaction:o,account:i}=e,l=await new oi(o,t,n).decode(i.address);return{txType:cf.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=ci.fromData(e.intentionData);break;case"AddLiquidity":i=ai.fromData(e.intentionData);break;case"IncreaseLiquidity":i=mi.fromData(e.intentionData);break;case"DecreaseLiquidity":i=li.fromData(e.intentionData);break;case"DecreaseLiquidityWithReturn":i=ui.fromData(e.intentionData);break;case"RemoveLiquidity":i=fi.fromData(e.intentionData);break;case"removeLiquidityWithReturn":i=hi.fromData(e.intentionData);break;case"CollectFee":i=ri.fromData(e.intentionData);break;case"CollectReward":i=si.fromData(e.intentionData);break;case"Burn":i=ii.fromData(e.intentionData);break;case"Swap":i=gi.fromData(e.intentionData);break;case"PrixJoin":i=di.fromData(e.intentionData);break;case"PrixClaim":i=pi.fromData(e.intentionData);break;case"SwapExactBaseForQuote":i=yi.fromData(e.intentionData);break;case"SwapExactQuoteForBase":i=bi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as gf}from"@msafe/sui3-utils";import{TransactionType as Yr}from"@msafe/sui3-utils";import{bcs as fl}from"@mysten/sui.js/bcs";import{normalizeStructTag as pf,normalizeSuiAddress as ln}from"@mysten/sui.js/utils";var uf={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},vt=uf;var Ti=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(`${vt.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${vt.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${vt.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:Yr.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Yr.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:Yr.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(vt.packageId));return new Zr(e,this.txb)}},Zr=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 fl.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 fl.de(t,new Uint8Array(n))}typeArg(e){return pf(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as df}from"@mysten/sui.js/transactions";var Ii=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new df,{ticketId:o}=this.data;return n.moveCall({target:`${vt.packageId}::native_pool::burn_ticket`,arguments:[n.object(vt.poolObjectId),n.object(vt.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as ff}from"@mysten/sui.js/transactions";var wi=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new ff,{amount:o}=this.data,[i]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${vt.packageId}::native_pool::stake`,arguments:[n.object(vt.poolObjectId),n.object(vt.metadataObjectId),n.object(vt.systemStateObjectId),i]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as hf}from"@mysten/sui.js/transactions";var Ci=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new hf,{amount:o}=this.data,i=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[s,...l]=i.filter(T=>T.coinType.split("::")[0]===vt.certType.split("::")[0]),d=n.object(s.coinObjectId);l.length&&n.mergeCoins(d,l.map(T=>n.object(T.coinObjectId)));let b=n.splitCoins(n.object(s.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${vt.packageId}::native_pool::unstake`,arguments:[n.object(vt.poolObjectId),n.object(vt.metadataObjectId),n.object(vt.systemStateObjectId),b]}),n}static fromData(t){return new a(t)}};var ki=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new Ti(t).decode();return{txType:gf.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=wi.fromData(e.intentionData);break;case"UnStake":o=Ci.fromData(e.intentionData);break;case"ClaimTicket":o=Ii.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Pf}from"@msafe/sui3-utils";import{asIntN as hl}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 xi=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(hl(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(hl(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 Cf}from"@msafe/sui3-utils";import{buildTx as Sf,getQuote as Tf}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as Se,ClmmPoolUtil as If}from"@firefly-exchange/library-sui";import{Decimal as wf}from"turbos-clmm-sdk";import{SuiClient as yf}from"@firefly-exchange/library-sui";import{OnChainCalls as bf}from"@firefly-exchange/library-sui/dist/src/spot";var gl={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 yf({url:gl.rpc});return new bf(t,gl.objects,{address:e.address,isUIWallet:!1})};var Mt=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 Se(e.liquidity),tokenMaxA:new Se(e.maxAmountTokenA),tokenMaxB:new Se(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 Tf({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new wf(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await Sf({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{...If.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new Se(t.tokenAmount),t.isTokenAFixed,!0,0,new Se(e.current_sqrt_price)),tokenMaxA:new Se(t.maxAmountTokenA),tokenMaxB:new Se(t.maxAmountTokenB)}}};var Di=class a extends C{constructor(t){super(t);this.data=t}txType=Cf.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.aggregator7KSwap(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as kf}from"@msafe/sui3-utils";var vi=class a extends C{constructor(t){super(t);this.data=t}txType=kf.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as xf}from"@msafe/sui3-utils";var Ai=class a extends C{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),Mt.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Df}from"@msafe/sui3-utils";var Mi=class a extends C{constructor(t){super(t);this.data=t}txType=Df.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as vf}from"@msafe/sui3-utils";var Oi=class a extends C{constructor(t){super(t);this.data=t}txType=vf.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Af}from"@msafe/sui3-utils";var Pi=class a extends C{constructor(t){super(t);this.data=t}txType=Af.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Mf}from"@msafe/sui3-utils";var Ri=class a extends C{constructor(t){super(t);this.data=t}txType=Mf.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Of}from"@msafe/sui3-utils";var Bi=class a extends C{constructor(t){super(t);this.data=t}txType=Of.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var Ei=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 xi(t,n).decode();return{txType:Pf.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=Pi.fromData(e.intentionData);break;case"ProvideLiquidity":i=Ri.fromData(e.intentionData);break;case"RemoveLiquidity":i=Bi.fromData(e.intentionData);break;case"ClosePosition":i=vi.fromData(e.intentionData);break;case"CollectFee":i=Ai.fromData(e.intentionData);break;case"CollectRewards":i=Mi.fromData(e.intentionData);break;case"CollectRewardsAndFee":i=Oi.fromData(e.intentionData);break;case"Aggregator7KSwap":i=Di.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as ih}from"@msafe/sui3-utils";import{MmtSDK as Uf}from"@mmt-finance/clmm-sdk";import{Transaction as qf}from"@mysten/sui/transactions";var R=Vl(bl());import{convertI32ToSigned as es,TickMath as Il}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";import Wf from"bignumber.js";var Rf="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",zt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Bf=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},Ef=(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")},Nf=(a,e,t,n)=>{if(a===Rf){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=Ef(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 Sl(a,e,t,n,o){let i=await Bf({suiClient:a.rpcClient,address:e,type:t});return Nf(zt(t),i.map(l=>({balance:BigInt(l.balance),objectId:l.coinObjectId})),n,o)}var Te=(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 Tl({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(T=>T.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?e=new R.default("79232123823359799118286999567"):e=new R.default("79228162514264337593543950336"),a&2&&(e=E(e.mul(new R.default("79236085330515764027303304731")),96,256)),a&4&&(e=E(e.mul(new R.default("79244008939048815603706035061")),96,256)),a&8&&(e=E(e.mul(new R.default("79259858533276714757314932305")),96,256)),a&16&&(e=E(e.mul(new R.default("79291567232598584799939703904")),96,256)),a&32&&(e=E(e.mul(new R.default("79355022692464371645785046466")),96,256)),a&64&&(e=E(e.mul(new R.default("79482085999252804386437311141")),96,256)),a&128&&(e=E(e.mul(new R.default("79736823300114093921829183326")),96,256)),a&256&&(e=E(e.mul(new R.default("80248749790819932309965073892")),96,256)),a&512&&(e=E(e.mul(new R.default("81282483887344747381513967011")),96,256)),a&1024&&(e=E(e.mul(new R.default("83390072131320151908154831281")),96,256)),a&2048&&(e=E(e.mul(new R.default("87770609709833776024991924138")),96,256)),a&4096&&(e=E(e.mul(new R.default("97234110755111693312479820773")),96,256)),a&8192&&(e=E(e.mul(new R.default("119332217159966728226237229890")),96,256)),a&16384&&(e=E(e.mul(new R.default("179736315981702064433883588727")),96,256)),a&32768&&(e=E(e.mul(new R.default("407748233172238350107850275304")),96,256)),a&65536&&(e=E(e.mul(new R.default("2098478828474011932436660412517")),96,256)),a&131072&&(e=E(e.mul(new R.default("55581415166113811149459800483533")),96,256)),a&262144&&(e=E(e.mul(new R.default("38992368544603139932233054999993551")),96,256)),E(e,32,256)}function Lf(a){let e=Math.abs(a),t;return e&1?t=new R.default("18445821805675392311"):t=new R.default("18446744073709551616"),e&2&&(t=E(t.mul(new R.default("18444899583751176498")),64,256)),e&4&&(t=E(t.mul(new R.default("18443055278223354162")),64,256)),e&8&&(t=E(t.mul(new R.default("18439367220385604838")),64,256)),e&16&&(t=E(t.mul(new R.default("18431993317065449817")),64,256)),e&32&&(t=E(t.mul(new R.default("18417254355718160513")),64,256)),e&64&&(t=E(t.mul(new R.default("18387811781193591352")),64,256)),e&128&&(t=E(t.mul(new R.default("18329067761203520168")),64,256)),e&256&&(t=E(t.mul(new R.default("18212142134806087854")),64,256)),e&512&&(t=E(t.mul(new R.default("17980523815641551639")),64,256)),e&1024&&(t=E(t.mul(new R.default("17526086738831147013")),64,256)),e&2048&&(t=E(t.mul(new R.default("16651378430235024244")),64,256)),e&4096&&(t=E(t.mul(new R.default("15030750278693429944")),64,256)),e&8192&&(t=E(t.mul(new R.default("12247334978882834399")),64,256)),e&16384&&(t=E(t.mul(new R.default("8131365268884726200")),64,256)),e&32768&&(t=E(t.mul(new R.default("3584323654723342297")),64,256)),e&65536&&(t=E(t.mul(new R.default("696457651847595233")),64,256)),e&131072&&(t=E(t.mul(new R.default("26294789957452057")),64,256)),e&262144&&(t=E(t.mul(new R.default("37481735321082")),64,256)),t}var wl=(a,e,t)=>{let n=es(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default(_f(n)):new R.default(Lf(n))};function Cl(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=Cl(t,n),l;return Number(t)?l=await Sl(i,a,zt(e),s,o):[l]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),l}function kl({mmt:a,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let i=wl(es(n),t.tickSpacing),s=wl(es(o),t.tickSpacing);return a.Position.openPosition(e,t,i.toString(),s.toString())}var jf=(a,e)=>{let n=1e4-Math.floor(e*100);return a*BigInt(n)/BigInt(1e4)};function Ni(a,e,t){let n=Cl(a,e);return Number(a)===0?BigInt(0):jf(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=Il.sqrtPriceX64ToPrice(new R.default(d?.toString()),t.decimals,n.decimals),T=i?(100-o)/100:(100+o)/100,w=Il.priceToSqrtPriceX64(b.mul(T),t.decimals,n.decimals);return BigInt(w.toString())}var xl=async(a,e,t,n,o,i,s,l,d,b)=>{let T=await de({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),w=await de({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),k={objectId:s,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},x=kl({mmt:a,tx:e,poolModel:k,selectedLowTick:l,selectedHighTick:d}),D=Ni(n,i.tokenX.decimals,b),P=Ni(o,i.tokenY.decimals,b);a.Pool.addLiquidity(e,k,x,T,w,D,P,t),e.transferObjects([x],e.pure.address(t))},Dl=async(a,e,t,n,o,i,s,l,d,b,T)=>{try{let w=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}),k={objectId:s.poolId,tokenXType:zt(s.tokenX.coinType),tokenYType:zt(s.tokenY.coinType),tickSpacing:s.tickSpacing},x=kl({mmt:a,tx:e,poolModel:k,selectedLowTick:l,selectedHighTick:d}),D=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:k,position:x,inputCoin:w,isXtoY:i,limitSqrtPrice:D,slippagePercentage:T,transferToAddress:n,useMvr:!0}),e.transferObjects([x],e.pure.address(n))}catch(w){console.error(w)}},vl=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}),T={objectId:i.poolId,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},w=Ni(n,i.tokenX.decimals,l),k=Ni(o,i.tokenY.decimals,l);a.Pool.addLiquidity(e,T,s,d,b,w,k,t)},Al=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}),T={objectId:i.poolId,tokenXType:i.tokenX.coinType,tokenYType:i.tokenY.coinType,tickSpacing:i.tickSpacing},w=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:T,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:w,slippagePercentage:d,transferToAddress:t})}catch(b){throw console.error(b),b}},Ml=(a,e)=>BigInt(e===100?a:new Wf(a).multipliedBy(e/100).toFixed(0)),Ol=async(a,e,t,n,o,i)=>{let s=Ml(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),Te(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)},Pl=async({sdk:a,address:e,position:t,pool:n,withdrawPercentage:o,txb:i,targetCoinType:s,slippage:l})=>{let d=Ml(t.liquidity,o),b=zt(n.tokenX.coinType),T=zt(n.tokenY.coinType),w=zt(s)===T,k={objectId:n?.poolId,tokenXType:b,tokenYType:T},{removeLpCoinA:x,removeLpCoinB:D}=a.Pool.removeLiquidity(i,k,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:w,slippagePercentage:l}),q=w?x:D,$=i.moveCall({target:"0x2::coin::value",arguments:[q],typeArguments:[w?b:T]});i.transferObjects([w?D:x],e),a.Pool.swapV2({txb:i,transferToAddress:e,pool:k,limitSqrtPrice:P,amount:$,inputCoin:q,isXtoY:w}),Te(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)};var Wi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Uf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:l,selectedLowTick:d,selectedHighTick:b,slippage:T}=n,w=new qf;return await xl(t,w,o,i,s,l,l.poolId,d,b,T),w}static fromData(t){return new a(t)}};import{MmtSDK as Ff}from"@mmt-finance/clmm-sdk";import{Transaction as Kf}from"@mysten/sui/transactions";var _i=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Ff.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,selectedLowTick:d,selectedHighTick:b,swapSlippage:T,addLiquiditySlippage:w}=n,k=new Kf;return await Dl(t,k,t.rpcClient,o,i,s,l,d,b,T,w),k}static fromData(t){return new a(t)}};import{MmtSDK as $f}from"@mmt-finance/clmm-sdk";import{Transaction as Vf}from"@mysten/sui/transactions";var Li=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=$f.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,positions:i,pools:s}=n,l=new Vf;for(let d of i){let b=s.find(T=>T.poolId===d.poolId);b&&Te(t,o,d,b,l)}return l}static fromData(t){return new a(t)}};import{MmtSDK as Hf}from"@mmt-finance/clmm-sdk";import{Transaction as Xf}from"@mysten/sui/transactions";var ji=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Hf.NEW({network:"mainnet"}),{params:n}=this.data,o=new Xf;return await Promise.all(n.claimParams.map(i=>Tl({...i,sdk:t,txb:o}))),o}static fromData(t){return new a(t)}};import{MmtSDK as zf}from"@mmt-finance/clmm-sdk";import{Transaction as Gf}from"@mysten/sui/transactions";var Ui=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=zf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:i,pool:s}=n,l=new Gf;return Te(t,o,i,s,l),l}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 qi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Qf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:l,positionObjectId:d,slippage:b}=n,T=new Jf;return await vl(t,T,o,i,s,l,d,b),T}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 Fi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Yf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,positionObjectId:d,swapSlippage:b,addLiquiditySlippage:T}=n,w=new Zf;return await Al(t,w,o,i,s,l,d,b,T),w}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 Ki=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=th.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:i,address:s,withdrawPercentage:l,zapOutOn:d,targetCoinType:b,slippage:T}=n,w=new eh;return d?await Pl({sdk:t,address:s,position:i,pool:o,withdrawPercentage:l,txb:w,targetCoinType:b,slippage:T}):await Ol(t,s,i,o,l,w),w}static fromData(t){return new a(t)}};import{Transaction as Rl}from"@mysten/sui/transactions";import{LstClient as Bl}from"@suilend/springsui-sdk";var ns={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},El=async(a,e,t)=>{let n=await Bl.initialize(a,ns),o=new Rl,[i]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,i);return o.transferObjects([s],e),o},Nl=async(a,e,t)=>{let n=await Bl.initialize(a,ns),o=await a.getCoins({owner:e,coinType:ns.type,limit:1e3});if(o.data.length===0)throw new Error("No lst coins found");let i=new Rl,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 C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await El(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as oh}from"@mmt-finance/clmm-sdk";import{Transaction as ah}from"@mysten/sui/transactions";import{mappedMmtV3Pool as nh}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var Wl=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 T=0;T<e.length;T+=1){let{poolId:w,tokenX:k,tokenY:x,isStable:D,currentSqrtPrice:P}=e[T],{id:q,isReverse:$}=nh[w]||{id:w,isReverse:!1},Et=zt(k.coinType)===zt(b);Et=$?!Et:Et;let Nt=$?x.coinType:k.coinType,Ot=$?k.coinType:x.coinType,Le=await pn({poolId:q,tokenX:k,tokenY:x,slippagePercentage:s,isTokenX:Et,suiClient:a.rpcClient,currentSqrtPrice:P}),Wt=a.Pool.swap(i,{objectId:q,tokenXType:Nt,tokenYType:Ot,isStable:D},d,l,Et,void 0,Le,!1);i.transferObjects([l],i.pure.address(o)),l=Wt,b=Et?Ot:Nt,d=i.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[l]})}i.transferObjects([l],i.pure.address(o))};var Vi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=oh.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:i,amountIn:s,address:l,slippage:d}=n,b=new ah;return await Wl(t,o,i,s,l,b,d),b}static fromData(t){return new a(t)}};var Hi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await Nl(t.suiClient,o,i)}static fromData(t){return new a(t)}};var Xi=class{application="mmt-dex";supportSDK="@mysten/sui";async deserialize(e){let{appContext:t}=e;return{txType:ih.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=Vi.fromData(e.intentionData);break;case"AddLiquidity":t=Wi.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=_i.fromData(e.intentionData);break;case"ClaimRewards":t=Ui.fromData(e.intentionData);break;case"ClaimAllRewards":t=Li.fromData(e.intentionData);break;case"ClaimRewardsAs":t=ji.fromData(e.intentionData);break;case"RemoveLiquidity":t=Ki.fromData(e.intentionData);break;case"StakeXSui":t=$i.fromData(e.intentionData);break;case"UnstakeXSui":t=Hi.fromData(e.intentionData);break;case"ManageLiquidity":t=qi.fromData(e.intentionData);break;case"ManageLiquiditySingleSide":t=Fi.fromData(e.intentionData);break;default:throw new Error(`not implemented ${e.txSubType}`)}return t.build({suiClient:e.suiClient})}};var GW=na.fromHelpers([new Fo,new Yo,new jo,new Zo,new po,new Si,new Xi,new Na,new ki,new Un,new Va,new Ya,new wn,new Ei,new ni]);export{GW as appHelpers};
1
+ var jl=Object.create;var hr=Object.defineProperty;var Ul=Object.getOwnPropertyDescriptor;var ql=Object.getOwnPropertyNames;var Fl=Object.getPrototypeOf,Kl=Object.prototype.hasOwnProperty;var $l=(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 Vl=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),Cs=(a,e)=>{for(var t in e)hr(a,t,{get:e[t],enumerable:!0})},Hl=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ql(e))!Kl.call(a,o)&&o!==t&&hr(a,o,{get:()=>e[o],enumerable:!(n=Ul(e,o))||n.enumerable});return a};var Xl=(a,e,t)=>(t=a!=null?jl(Fl(a)):{},Hl(e||!a||!a.__esModule?hr(t,"default",{value:a,enumerable:!0}):t,a));var Tl=Vl((Sl,es)=>{"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=$l("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,S,I=0;if(m==="be")for(p=r.length-1,h=0;p>=0;p-=3)S=r[p]|r[p-1]<<8|r[p-2]<<16,this.words[h]|=S<<I&67108863,this.words[h+1]=S>>>26-I&67108863,I+=24,I>=26&&(I-=26,h++);else if(m==="le")for(p=0,h=0;p<r.length;p+=3)S=r[p]|r[p+1]<<8|r[p+2]<<16,this.words[h]|=S<<I&67108863,this.words[h+1]=S>>>26-I&67108863,I+=24,I>=26&&(I-=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,S=0,I;if(m==="be")for(p=r.length-1;p>=u;p-=2)I=l(r,u,p)<<h,this.words[S]|=I&67108863,h>=18?(h-=18,S+=1,this.words[S]|=I>>>26):h+=8;else{var f=r.length-u;for(p=f%2===0?u+1:u;p<r.length;p+=2)I=l(r,u,p)<<h,this.words[S]|=I&67108863,h>=18?(h-=18,S+=1,this.words[S]|=I>>>26):h+=8}this._strip()};function d(y,r,u,m){for(var p=0,h=0,S=Math.min(y.length,u),I=r;I<S;I++){var f=y.charCodeAt(I)-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 S=r.length-m,I=S%p,f=Math.min(S,S-I)+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(I!==0){var v=1;for(c=d(r,g,r.length,u),g=0;g<I;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")]=T}catch{o.prototype.inspect=T}else o.prototype.inspect=T;function T(){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"],k=[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 p=0,h=0,S=0;S<this.length;S++){var I=this.words[S],f=((I<<p|h)&16777215).toString(16);h=I>>>24-p&16777215,p+=2,p>=26&&(p-=26,S--),h!==0||S!==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 c=k[r],g=x[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=w[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 D=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 S=D(r,h),I=u==="le"?"LE":"BE";return this["_toArrayLike"+I](S,p),S},o.prototype._toArrayLikeLE=function(r,u){for(var m=0,p=0,h=0,S=0;h<this.length;h++){var I=this.words[h]<<S|p;r[m++]=I&255,m<r.length&&(r[m++]=I>>8&255),m<r.length&&(r[m++]=I>>16&255),S===6?(m<r.length&&(r[m++]=I>>24&255),p=0,S=0):(p=I>>>24,S+=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,S=0;h<this.length;h++){var I=this.words[h]<<S|p;r[m--]=I&255,m>=0&&(r[m--]=I>>8&255),m>=0&&(r[m--]=I>>16&255),S===6?(m>=0&&(r[m--]=I>>24&255),p=0,S=0):(p=I>>>24,S+=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,S=0;S<p.length;S++)u=(m.words[S]|0)+(p.words[S]|0)+h,this.words[S]=u&67108863,h=u>>>26;for(;h!==0&&S<m.length;S++)u=(m.words[S]|0)+h,this.words[S]=u&67108863,h=u>>>26;if(this.length=m.length,h!==0)this.words[this.length]=h,this.length++;else if(m!==this)for(;S<m.length;S++)this.words[S]=m.words[S];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 S=0,I=0;I<h.length;I++)u=(p.words[I]|0)-(h.words[I]|0)+S,S=u>>26,this.words[I]=u&67108863;for(;S!==0&&I<p.length;I++)u=(p.words[I]|0)+S,S=u>>26,this.words[I]=u&67108863;if(S===0&&I<p.length&&p!==this)for(;I<p.length;I++)this.words[I]=p.words[I];return this.length=Math.max(this.length,I),p!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(r){return this.clone().isub(r)};function q(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,S=p*h,I=S&67108863,f=S/67108864|0;u.words[0]=I;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,S=p*h+v,g+=S/67108864|0,v=S&67108863}u.words[c]=v|0,f=g|0}return f!==0?u.words[c]=f|0:u.length--,u._strip()}var $=function(r,u,m){var p=r.words,h=u.words,S=m.words,I=0,f,c,g,v=p[0]|0,M=v&8191,O=v>>>13,B=p[1]|0,W=B&8191,j=B>>>13,oe=p[2]|0,U=oe&8191,K=oe>>>13,rs=p[3]|0,X=rs&8191,z=rs>>>13,ss=p[4]|0,G=ss&8191,Q=ss>>>13,cs=p[5]|0,J=cs&8191,Y=cs>>>13,ls=p[6]|0,Z=ls&8191,tt=ls>>>13,us=p[7]|0,et=us&8191,nt=us>>>13,ms=p[8]|0,ot=ms&8191,at=ms>>>13,ps=p[9]|0,it=ps&8191,rt=ps>>>13,ds=h[0]|0,st=ds&8191,ct=ds>>>13,fs=h[1]|0,lt=fs&8191,ut=fs>>>13,hs=h[2]|0,mt=hs&8191,pt=hs>>>13,gs=h[3]|0,dt=gs&8191,ft=gs>>>13,ys=h[4]|0,ht=ys&8191,gt=ys>>>13,bs=h[5]|0,yt=bs&8191,bt=bs>>>13,Ss=h[6]|0,St=Ss&8191,Tt=Ss>>>13,Ts=h[7]|0,It=Ts&8191,wt=Ts>>>13,Is=h[8]|0,Ct=Is&8191,kt=Is>>>13,ws=h[9]|0,xt=ws&8191,Dt=ws>>>13;m.negative=r.negative^u.negative,m.length=19,f=Math.imul(M,st),c=Math.imul(M,ct),c=c+Math.imul(O,st)|0,g=Math.imul(O,ct);var Qi=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(Qi>>>26)|0,Qi&=67108863,f=Math.imul(W,st),c=Math.imul(W,ct),c=c+Math.imul(j,st)|0,g=Math.imul(j,ct),f=f+Math.imul(M,lt)|0,c=c+Math.imul(M,ut)|0,c=c+Math.imul(O,lt)|0,g=g+Math.imul(O,ut)|0;var Ji=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(Ji>>>26)|0,Ji&=67108863,f=Math.imul(U,st),c=Math.imul(U,ct),c=c+Math.imul(K,st)|0,g=Math.imul(K,ct),f=f+Math.imul(W,lt)|0,c=c+Math.imul(W,ut)|0,c=c+Math.imul(j,lt)|0,g=g+Math.imul(j,ut)|0,f=f+Math.imul(M,mt)|0,c=c+Math.imul(M,pt)|0,c=c+Math.imul(O,mt)|0,g=g+Math.imul(O,pt)|0;var Yi=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(Yi>>>26)|0,Yi&=67108863,f=Math.imul(X,st),c=Math.imul(X,ct),c=c+Math.imul(z,st)|0,g=Math.imul(z,ct),f=f+Math.imul(U,lt)|0,c=c+Math.imul(U,ut)|0,c=c+Math.imul(K,lt)|0,g=g+Math.imul(K,ut)|0,f=f+Math.imul(W,mt)|0,c=c+Math.imul(W,pt)|0,c=c+Math.imul(j,mt)|0,g=g+Math.imul(j,pt)|0,f=f+Math.imul(M,dt)|0,c=c+Math.imul(M,ft)|0,c=c+Math.imul(O,dt)|0,g=g+Math.imul(O,ft)|0;var Zi=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(Zi>>>26)|0,Zi&=67108863,f=Math.imul(G,st),c=Math.imul(G,ct),c=c+Math.imul(Q,st)|0,g=Math.imul(Q,ct),f=f+Math.imul(X,lt)|0,c=c+Math.imul(X,ut)|0,c=c+Math.imul(z,lt)|0,g=g+Math.imul(z,ut)|0,f=f+Math.imul(U,mt)|0,c=c+Math.imul(U,pt)|0,c=c+Math.imul(K,mt)|0,g=g+Math.imul(K,pt)|0,f=f+Math.imul(W,dt)|0,c=c+Math.imul(W,ft)|0,c=c+Math.imul(j,dt)|0,g=g+Math.imul(j,ft)|0,f=f+Math.imul(M,ht)|0,c=c+Math.imul(M,gt)|0,c=c+Math.imul(O,ht)|0,g=g+Math.imul(O,gt)|0;var tr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(tr>>>26)|0,tr&=67108863,f=Math.imul(J,st),c=Math.imul(J,ct),c=c+Math.imul(Y,st)|0,g=Math.imul(Y,ct),f=f+Math.imul(G,lt)|0,c=c+Math.imul(G,ut)|0,c=c+Math.imul(Q,lt)|0,g=g+Math.imul(Q,ut)|0,f=f+Math.imul(X,mt)|0,c=c+Math.imul(X,pt)|0,c=c+Math.imul(z,mt)|0,g=g+Math.imul(z,pt)|0,f=f+Math.imul(U,dt)|0,c=c+Math.imul(U,ft)|0,c=c+Math.imul(K,dt)|0,g=g+Math.imul(K,ft)|0,f=f+Math.imul(W,ht)|0,c=c+Math.imul(W,gt)|0,c=c+Math.imul(j,ht)|0,g=g+Math.imul(j,gt)|0,f=f+Math.imul(M,yt)|0,c=c+Math.imul(M,bt)|0,c=c+Math.imul(O,yt)|0,g=g+Math.imul(O,bt)|0;var er=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(er>>>26)|0,er&=67108863,f=Math.imul(Z,st),c=Math.imul(Z,ct),c=c+Math.imul(tt,st)|0,g=Math.imul(tt,ct),f=f+Math.imul(J,lt)|0,c=c+Math.imul(J,ut)|0,c=c+Math.imul(Y,lt)|0,g=g+Math.imul(Y,ut)|0,f=f+Math.imul(G,mt)|0,c=c+Math.imul(G,pt)|0,c=c+Math.imul(Q,mt)|0,g=g+Math.imul(Q,pt)|0,f=f+Math.imul(X,dt)|0,c=c+Math.imul(X,ft)|0,c=c+Math.imul(z,dt)|0,g=g+Math.imul(z,ft)|0,f=f+Math.imul(U,ht)|0,c=c+Math.imul(U,gt)|0,c=c+Math.imul(K,ht)|0,g=g+Math.imul(K,gt)|0,f=f+Math.imul(W,yt)|0,c=c+Math.imul(W,bt)|0,c=c+Math.imul(j,yt)|0,g=g+Math.imul(j,bt)|0,f=f+Math.imul(M,St)|0,c=c+Math.imul(M,Tt)|0,c=c+Math.imul(O,St)|0,g=g+Math.imul(O,Tt)|0;var nr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(nr>>>26)|0,nr&=67108863,f=Math.imul(et,st),c=Math.imul(et,ct),c=c+Math.imul(nt,st)|0,g=Math.imul(nt,ct),f=f+Math.imul(Z,lt)|0,c=c+Math.imul(Z,ut)|0,c=c+Math.imul(tt,lt)|0,g=g+Math.imul(tt,ut)|0,f=f+Math.imul(J,mt)|0,c=c+Math.imul(J,pt)|0,c=c+Math.imul(Y,mt)|0,g=g+Math.imul(Y,pt)|0,f=f+Math.imul(G,dt)|0,c=c+Math.imul(G,ft)|0,c=c+Math.imul(Q,dt)|0,g=g+Math.imul(Q,ft)|0,f=f+Math.imul(X,ht)|0,c=c+Math.imul(X,gt)|0,c=c+Math.imul(z,ht)|0,g=g+Math.imul(z,gt)|0,f=f+Math.imul(U,yt)|0,c=c+Math.imul(U,bt)|0,c=c+Math.imul(K,yt)|0,g=g+Math.imul(K,bt)|0,f=f+Math.imul(W,St)|0,c=c+Math.imul(W,Tt)|0,c=c+Math.imul(j,St)|0,g=g+Math.imul(j,Tt)|0,f=f+Math.imul(M,It)|0,c=c+Math.imul(M,wt)|0,c=c+Math.imul(O,It)|0,g=g+Math.imul(O,wt)|0;var or=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(or>>>26)|0,or&=67108863,f=Math.imul(ot,st),c=Math.imul(ot,ct),c=c+Math.imul(at,st)|0,g=Math.imul(at,ct),f=f+Math.imul(et,lt)|0,c=c+Math.imul(et,ut)|0,c=c+Math.imul(nt,lt)|0,g=g+Math.imul(nt,ut)|0,f=f+Math.imul(Z,mt)|0,c=c+Math.imul(Z,pt)|0,c=c+Math.imul(tt,mt)|0,g=g+Math.imul(tt,pt)|0,f=f+Math.imul(J,dt)|0,c=c+Math.imul(J,ft)|0,c=c+Math.imul(Y,dt)|0,g=g+Math.imul(Y,ft)|0,f=f+Math.imul(G,ht)|0,c=c+Math.imul(G,gt)|0,c=c+Math.imul(Q,ht)|0,g=g+Math.imul(Q,gt)|0,f=f+Math.imul(X,yt)|0,c=c+Math.imul(X,bt)|0,c=c+Math.imul(z,yt)|0,g=g+Math.imul(z,bt)|0,f=f+Math.imul(U,St)|0,c=c+Math.imul(U,Tt)|0,c=c+Math.imul(K,St)|0,g=g+Math.imul(K,Tt)|0,f=f+Math.imul(W,It)|0,c=c+Math.imul(W,wt)|0,c=c+Math.imul(j,It)|0,g=g+Math.imul(j,wt)|0,f=f+Math.imul(M,Ct)|0,c=c+Math.imul(M,kt)|0,c=c+Math.imul(O,Ct)|0,g=g+Math.imul(O,kt)|0;var ar=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(ar>>>26)|0,ar&=67108863,f=Math.imul(it,st),c=Math.imul(it,ct),c=c+Math.imul(rt,st)|0,g=Math.imul(rt,ct),f=f+Math.imul(ot,lt)|0,c=c+Math.imul(ot,ut)|0,c=c+Math.imul(at,lt)|0,g=g+Math.imul(at,ut)|0,f=f+Math.imul(et,mt)|0,c=c+Math.imul(et,pt)|0,c=c+Math.imul(nt,mt)|0,g=g+Math.imul(nt,pt)|0,f=f+Math.imul(Z,dt)|0,c=c+Math.imul(Z,ft)|0,c=c+Math.imul(tt,dt)|0,g=g+Math.imul(tt,ft)|0,f=f+Math.imul(J,ht)|0,c=c+Math.imul(J,gt)|0,c=c+Math.imul(Y,ht)|0,g=g+Math.imul(Y,gt)|0,f=f+Math.imul(G,yt)|0,c=c+Math.imul(G,bt)|0,c=c+Math.imul(Q,yt)|0,g=g+Math.imul(Q,bt)|0,f=f+Math.imul(X,St)|0,c=c+Math.imul(X,Tt)|0,c=c+Math.imul(z,St)|0,g=g+Math.imul(z,Tt)|0,f=f+Math.imul(U,It)|0,c=c+Math.imul(U,wt)|0,c=c+Math.imul(K,It)|0,g=g+Math.imul(K,wt)|0,f=f+Math.imul(W,Ct)|0,c=c+Math.imul(W,kt)|0,c=c+Math.imul(j,Ct)|0,g=g+Math.imul(j,kt)|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 ir=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(ir>>>26)|0,ir&=67108863,f=Math.imul(it,lt),c=Math.imul(it,ut),c=c+Math.imul(rt,lt)|0,g=Math.imul(rt,ut),f=f+Math.imul(ot,mt)|0,c=c+Math.imul(ot,pt)|0,c=c+Math.imul(at,mt)|0,g=g+Math.imul(at,pt)|0,f=f+Math.imul(et,dt)|0,c=c+Math.imul(et,ft)|0,c=c+Math.imul(nt,dt)|0,g=g+Math.imul(nt,ft)|0,f=f+Math.imul(Z,ht)|0,c=c+Math.imul(Z,gt)|0,c=c+Math.imul(tt,ht)|0,g=g+Math.imul(tt,gt)|0,f=f+Math.imul(J,yt)|0,c=c+Math.imul(J,bt)|0,c=c+Math.imul(Y,yt)|0,g=g+Math.imul(Y,bt)|0,f=f+Math.imul(G,St)|0,c=c+Math.imul(G,Tt)|0,c=c+Math.imul(Q,St)|0,g=g+Math.imul(Q,Tt)|0,f=f+Math.imul(X,It)|0,c=c+Math.imul(X,wt)|0,c=c+Math.imul(z,It)|0,g=g+Math.imul(z,wt)|0,f=f+Math.imul(U,Ct)|0,c=c+Math.imul(U,kt)|0,c=c+Math.imul(K,Ct)|0,g=g+Math.imul(K,kt)|0,f=f+Math.imul(W,xt)|0,c=c+Math.imul(W,Dt)|0,c=c+Math.imul(j,xt)|0,g=g+Math.imul(j,Dt)|0;var rr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(rr>>>26)|0,rr&=67108863,f=Math.imul(it,mt),c=Math.imul(it,pt),c=c+Math.imul(rt,mt)|0,g=Math.imul(rt,pt),f=f+Math.imul(ot,dt)|0,c=c+Math.imul(ot,ft)|0,c=c+Math.imul(at,dt)|0,g=g+Math.imul(at,ft)|0,f=f+Math.imul(et,ht)|0,c=c+Math.imul(et,gt)|0,c=c+Math.imul(nt,ht)|0,g=g+Math.imul(nt,gt)|0,f=f+Math.imul(Z,yt)|0,c=c+Math.imul(Z,bt)|0,c=c+Math.imul(tt,yt)|0,g=g+Math.imul(tt,bt)|0,f=f+Math.imul(J,St)|0,c=c+Math.imul(J,Tt)|0,c=c+Math.imul(Y,St)|0,g=g+Math.imul(Y,Tt)|0,f=f+Math.imul(G,It)|0,c=c+Math.imul(G,wt)|0,c=c+Math.imul(Q,It)|0,g=g+Math.imul(Q,wt)|0,f=f+Math.imul(X,Ct)|0,c=c+Math.imul(X,kt)|0,c=c+Math.imul(z,Ct)|0,g=g+Math.imul(z,kt)|0,f=f+Math.imul(U,xt)|0,c=c+Math.imul(U,Dt)|0,c=c+Math.imul(K,xt)|0,g=g+Math.imul(K,Dt)|0;var sr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(sr>>>26)|0,sr&=67108863,f=Math.imul(it,dt),c=Math.imul(it,ft),c=c+Math.imul(rt,dt)|0,g=Math.imul(rt,ft),f=f+Math.imul(ot,ht)|0,c=c+Math.imul(ot,gt)|0,c=c+Math.imul(at,ht)|0,g=g+Math.imul(at,gt)|0,f=f+Math.imul(et,yt)|0,c=c+Math.imul(et,bt)|0,c=c+Math.imul(nt,yt)|0,g=g+Math.imul(nt,bt)|0,f=f+Math.imul(Z,St)|0,c=c+Math.imul(Z,Tt)|0,c=c+Math.imul(tt,St)|0,g=g+Math.imul(tt,Tt)|0,f=f+Math.imul(J,It)|0,c=c+Math.imul(J,wt)|0,c=c+Math.imul(Y,It)|0,g=g+Math.imul(Y,wt)|0,f=f+Math.imul(G,Ct)|0,c=c+Math.imul(G,kt)|0,c=c+Math.imul(Q,Ct)|0,g=g+Math.imul(Q,kt)|0,f=f+Math.imul(X,xt)|0,c=c+Math.imul(X,Dt)|0,c=c+Math.imul(z,xt)|0,g=g+Math.imul(z,Dt)|0;var cr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(cr>>>26)|0,cr&=67108863,f=Math.imul(it,ht),c=Math.imul(it,gt),c=c+Math.imul(rt,ht)|0,g=Math.imul(rt,gt),f=f+Math.imul(ot,yt)|0,c=c+Math.imul(ot,bt)|0,c=c+Math.imul(at,yt)|0,g=g+Math.imul(at,bt)|0,f=f+Math.imul(et,St)|0,c=c+Math.imul(et,Tt)|0,c=c+Math.imul(nt,St)|0,g=g+Math.imul(nt,Tt)|0,f=f+Math.imul(Z,It)|0,c=c+Math.imul(Z,wt)|0,c=c+Math.imul(tt,It)|0,g=g+Math.imul(tt,wt)|0,f=f+Math.imul(J,Ct)|0,c=c+Math.imul(J,kt)|0,c=c+Math.imul(Y,Ct)|0,g=g+Math.imul(Y,kt)|0,f=f+Math.imul(G,xt)|0,c=c+Math.imul(G,Dt)|0,c=c+Math.imul(Q,xt)|0,g=g+Math.imul(Q,Dt)|0;var lr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(lr>>>26)|0,lr&=67108863,f=Math.imul(it,yt),c=Math.imul(it,bt),c=c+Math.imul(rt,yt)|0,g=Math.imul(rt,bt),f=f+Math.imul(ot,St)|0,c=c+Math.imul(ot,Tt)|0,c=c+Math.imul(at,St)|0,g=g+Math.imul(at,Tt)|0,f=f+Math.imul(et,It)|0,c=c+Math.imul(et,wt)|0,c=c+Math.imul(nt,It)|0,g=g+Math.imul(nt,wt)|0,f=f+Math.imul(Z,Ct)|0,c=c+Math.imul(Z,kt)|0,c=c+Math.imul(tt,Ct)|0,g=g+Math.imul(tt,kt)|0,f=f+Math.imul(J,xt)|0,c=c+Math.imul(J,Dt)|0,c=c+Math.imul(Y,xt)|0,g=g+Math.imul(Y,Dt)|0;var ur=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(ur>>>26)|0,ur&=67108863,f=Math.imul(it,St),c=Math.imul(it,Tt),c=c+Math.imul(rt,St)|0,g=Math.imul(rt,Tt),f=f+Math.imul(ot,It)|0,c=c+Math.imul(ot,wt)|0,c=c+Math.imul(at,It)|0,g=g+Math.imul(at,wt)|0,f=f+Math.imul(et,Ct)|0,c=c+Math.imul(et,kt)|0,c=c+Math.imul(nt,Ct)|0,g=g+Math.imul(nt,kt)|0,f=f+Math.imul(Z,xt)|0,c=c+Math.imul(Z,Dt)|0,c=c+Math.imul(tt,xt)|0,g=g+Math.imul(tt,Dt)|0;var mr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(mr>>>26)|0,mr&=67108863,f=Math.imul(it,It),c=Math.imul(it,wt),c=c+Math.imul(rt,It)|0,g=Math.imul(rt,wt),f=f+Math.imul(ot,Ct)|0,c=c+Math.imul(ot,kt)|0,c=c+Math.imul(at,Ct)|0,g=g+Math.imul(at,kt)|0,f=f+Math.imul(et,xt)|0,c=c+Math.imul(et,Dt)|0,c=c+Math.imul(nt,xt)|0,g=g+Math.imul(nt,Dt)|0;var pr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(pr>>>26)|0,pr&=67108863,f=Math.imul(it,Ct),c=Math.imul(it,kt),c=c+Math.imul(rt,Ct)|0,g=Math.imul(rt,kt),f=f+Math.imul(ot,xt)|0,c=c+Math.imul(ot,Dt)|0,c=c+Math.imul(at,xt)|0,g=g+Math.imul(at,Dt)|0;var dr=(I+f|0)+((c&8191)<<13)|0;I=(g+(c>>>13)|0)+(dr>>>26)|0,dr&=67108863,f=Math.imul(it,xt),c=Math.imul(it,Dt),c=c+Math.imul(rt,xt)|0,g=Math.imul(rt,Dt);var fr=(I+f|0)+((c&8191)<<13)|0;return I=(g+(c>>>13)|0)+(fr>>>26)|0,fr&=67108863,S[0]=Qi,S[1]=Ji,S[2]=Yi,S[3]=Zi,S[4]=tr,S[5]=er,S[6]=nr,S[7]=or,S[8]=ar,S[9]=ir,S[10]=rr,S[11]=sr,S[12]=cr,S[13]=lr,S[14]=ur,S[15]=mr,S[16]=pr,S[17]=dr,S[18]=fr,I!==0&&(S[19]=I,m.length++),m};Math.imul||($=q);function Et(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 S=p;p=0;for(var I=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;S=S+(O/67108864|0)|0,B=B+I|0,I=B&67108863,S=S+(B>>>26)|0,p+=S>>>26,S&=67108863}u.words[h]=I,m=S,S=p}return m!==0?u.words[h]=m:u.length--,u._strip()}function Nt(y,r,u){return Et(y,r,u)}o.prototype.mulTo=function(r,u){var m,p=this.length+r.length;return this.length===10&&r.length===10?m=$(this,r,u):p<63?m=q(this,r,u):p<1024?m=Et(this,r,u):m=Nt(this,r,u),m};function Ot(y,r){this.x=y,this.y=r}Ot.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},Ot.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},Ot.prototype.permute=function(r,u,m,p,h,S){for(var I=0;I<S;I++)p[I]=u[r[I]],h[I]=m[r[I]]},Ot.prototype.transform=function(r,u,m,p,h,S){this.permute(S,r,u,m,p,h);for(var I=1;I<h;I<<=1)for(var f=I<<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<I;B++){var W=m[v+B],j=p[v+B],oe=m[v+B+I],U=p[v+B+I],K=M*oe-O*U;U=M*U+O*oe,oe=K,m[v+B]=W+oe,p[v+B]=j+U,m[v+B+I]=W-oe,p[v+B+I]=j-U,B!==f&&(K=c*M-g*O,O=c*O+g*M,M=K)}},Ot.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},Ot.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}},Ot.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},Ot.prototype.convert13b=function(r,u,m,p){for(var h=0,S=0;S<u;S++)h=h+(r[S]|0),m[2*S]=h&8191,h=h>>>13,m[2*S+1]=h&8191,h=h>>>13;for(S=2*u;S<p;++S)m[S]=0;t(h===0),t((h&-8192)===0)},Ot.prototype.stub=function(r){for(var u=new Array(r),m=0;m<r;m++)u[m]=0;return u},Ot.prototype.mulp=function(r,u,m){var p=2*this.guessLen13b(r.length,u.length),h=this.makeRBT(p),S=this.stub(p),I=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,I,p),this.convert13b(u.words,u.length,g,p),this.transform(I,S,f,c,p,h),this.transform(g,S,v,M,p,h);for(var B=0;B<p;B++){var W=f[B]*v[B]-c[B]*M[B];c[B]=f[B]*M[B]+c[B]*v[B],f[B]=W}return this.conjugate(f,c,p),this.transform(f,c,O,S,p,h),this.conjugate(O,S,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),Nt(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,S=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=S>>>26,this.words[p]=S&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 S=0;for(h=0;h<this.length;h++){var I=this.words[h]&p,f=(this.words[h]|0)-I<<u;this.words[h]=f|S,S=I>>>26-u}S&&(this.words[h]=S,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,S=Math.min((r-h)/26,this.length),I=67108863^67108863>>>h<<h,f=m;if(p-=S,p=Math.max(0,p),f){for(var c=0;c<S;c++)f.words[c]=this.words[c];f.length=S}if(S!==0)if(this.length>S)for(this.length-=S,c=0;c<this.length;c++)this.words[c]=this.words[c+S];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&I}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 S,I=0;for(h=0;h<r.length;h++){S=(this.words[h+m]|0)+I;var f=(r.words[h]|0)*u;S-=f&67108863,I=(S>>26)-(f/67108864|0),this.words[h+m]=S&67108863}for(;h<this.length-m;h++)S=(this.words[h+m]|0)+I,I=S>>26,this.words[h+m]=S&67108863;if(I===0)return this._strip();for(t(I===-1),I=0,h=0;h<this.length;h++)S=-(this.words[h]|0)+I,I=S>>26,this.words[h]=S&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(r,u){var m=this.length-r.length,p=this.clone(),h=r,S=h.words[h.length-1]|0,I=this._countBits(S);m=26-I,m!==0&&(h=h.ushln(m),p.iushln(m),S=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/S|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,S;return this.negative!==0&&r.negative===0?(S=this.neg().divmod(r,u),u!=="mod"&&(p=S.div.neg()),u!=="div"&&(h=S.mod.neg(),m&&h.negative!==0&&h.iadd(r)),{div:p,mod:h}):this.negative===0&&r.negative!==0?(S=this.divmod(r.neg(),u),u!=="mod"&&(p=S.div.neg()),{div:p,mod:S.mod}):(this.negative&r.negative)!==0?(S=this.neg().divmod(r.neg(),u),u!=="div"&&(h=S.mod.neg(),m&&h.negative!==0&&h.isub(r)),{div:S.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),S=m.cmp(p);return S<0||h===1&&S===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),S=new o(0),I=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;)(S.isOdd()||I.isOdd())&&(S.iadd(c),I.isub(g)),S.iushrn(1),I.iushrn(1);u.cmp(m)>=0?(u.isub(m),p.isub(S),h.isub(I)):(m.isub(u),S.isub(p),I.isub(h))}return{a:S,b:I,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),S=m.clone();u.cmpn(1)>0&&m.cmpn(1)>0;){for(var I=0,f=1;(u.words[0]&f)===0&&I<26;++I,f<<=1);if(I>0)for(u.iushrn(I);I-- >0;)p.isOdd()&&p.iadd(S),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(S),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 S=u;u=m,m=S}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,S=m;h!==0&&S<this.length;S++){var I=this.words[S]|0;I+=h,h=I>>>26,I&=67108863,this.words[S]=I}return h!==0&&(this.words[S]=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 S=r.words[9];for(u.words[u.length++]=S&m,h=10;h<r.length;h++){var I=r.words[h]|0;r.words[h-10]=(I&m)<<4|S>>>22,S=I}S>>>=22,r.words[h-10]=S,S===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 as(){Wt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(as,Wt);function is(){Wt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(is,Wt);function Gi(){Wt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Gi,Wt),Gi.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 as;else if(r==="p192")u=new is;else if(r==="p25519")u=new Gi;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 S=new o(1).toRed(this),I=S.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(I)!==0;)c.redIAdd(I);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(S)!==0;){for(var B=M,W=0;B.cmp(S)!==0;W++)B=B.redSqr();t(W<O);var j=this.pow(g,new o(1).iushln(O-W-1));v=v.redMul(j),g=j.redSqr(),M=M.redMul(g),O=W}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 S=p[0],I=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(S!==p[0]&&(S=this.sqr(S)),M===0&&I===0){f=0;continue}I<<=1,I|=M,f++,!(f!==m&&(h!==0||v!==0))&&(S=this.mul(S,p[I]),f=0,I=0)}c=26}return S},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),S=h;return h.cmp(this.m)>=0?S=h.isub(this.m):h.cmpn(0)<0&&(S=h.iadd(this.m)),S._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),S=h;return h.cmp(this.m)>=0?S=h.isub(this.m):h.cmpn(0)<0&&(S=h.iadd(this.m)),S._forceRed(this)},fe.prototype.invm=function(r){var u=this.imod(r._invmp(this.m).mul(this.r2));return u._forceRed(this)}})(typeof es>"u"||es,Sl)});import{TransactionType as au}from"@msafe/sui3-utils";import{coinsList as Gl,poolIdPoolNameMap as Ql,poolInfo as ks,singleAssetPoolCoinMap as Jl}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=Ql[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&&ks[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&ks[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}=Jl[e],{expo:s}=Gl[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 Zl}from"@alphafi/alphafi-sdk";import Yl from"sort-keys-recursive";var C=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Yl(this.data))}};var yn=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t;return await Zl(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as tu}from"@alphafi/alphafi-sdk";var bn=class a extends C{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 tu(o,n.address,i,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as eu}from"@alphafi/alphafi-sdk";var Sn=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i}=this.data;return await eu(o,n.address,i)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as nu}from"@alphafi/alphafi-sdk";var Tn=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:i}=this.data;return await nu(i,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as ou}from"@alphafi/alphafi-sdk";var In=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:i}=this.data;return await ou(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:au.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=Sn.fromData(e.intentionData);break;case"depositDoubleAsset":n=bn.fromData(e.intentionData);break;case"withdraw":n=Tn.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 vu}from"@msafe/sui3-utils";import{TransactionType as jt}from"@msafe/sui3-utils";import{bcs as gr}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as yr}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(yr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(yr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(yr,"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 T=this.getPureAddresses(b.Input);T.length===1&&([n]=T)}}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 T=this.getPureAddresses(b.Input);T.length===1&&([n]=T)}}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 T=this.getPureAddresses(b.Input);T.length===1&&([n]=T)}}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 w=this.getPureAddresses(b.Input);w.length===1&&([i]=w)}let T=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];T.$kind==="Input"&&(t=this.getPureInputU64(T.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 w=this.getPureAddresses(b.Input);w.length===1&&([i]=w)}let T=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];T.$kind==="Input"&&(t=this.getPureInputU64(T.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 T=l[d].MoveCall.arguments[2];if(T.$kind==="Input"){let{objectId:w}=this.inputs[T.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: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 gr.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return gr.vector(gr.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as cu}from"@msafe/sui3-utils";import{Transaction as ru}from"@mysten/sui/transactions";import{buildPsmTx as su}from"bucket-protocol-sdk";import{BucketClient as iu}from"bucket-protocol-sdk";var Pt=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new iu(t,e.address)};var xs=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:i}=a,s=new ru,l=Pt(t,e);return await su(l,s,n,o,i,e.address),s};var kn=class a extends C{constructor(t){super(t);this.data=t}txType=cu.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await xs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as du}from"@msafe/sui3-utils";import{Transaction as xn}from"@mysten/sui/transactions";import{buildBorrowTx as lu,buildCloseTx as uu,buildRepayTx as mu,buildWithdrawTx as pu}from"bucket-protocol-sdk";var Ds=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:i,insertionPlace:s,strapId:l}=a,d=new xn,b=Pt(t,e);return await lu(b,d,n,o,i,e.address,s,l),d},vs=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:i,strapId:s}=a,l=new xn,d=Pt(t,e);return await pu(d,l,n,o,e.address,i,s),l},As=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:i,isSurplus:s,insertionPlace:l,strapId:d}=a,b=new xn,T=Pt(t,e);return await mu(T,b,n,o,i,e.address,s,l,d),b},Ms=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:i}=a,s=new xn,l=Pt(t,e);return await uu(l,s,n,o,i),s};var Dn=class a extends C{constructor(t){super(t);this.data=t}txType=du.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await Ds(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as fu}from"@msafe/sui3-utils";var vn=class a extends C{constructor(t){super(t);this.data=t}txType=fu.Other;txSubType="repay";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 hu}from"@msafe/sui3-utils";var An=class a extends C{constructor(t){super(t);this.data=t}txType=hu.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await vs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as gu}from"@msafe/sui3-utils";var Mn=class a extends C{constructor(t){super(t);this.data=t}txType=gu.Other;txSubType="close";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 Nn}from"@msafe/sui3-utils";import{Transaction as On}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as yu,buildSBUCKDepositTx as bu,buildSBUCKUnstakeTx as Su,buildSBUCKWithdrawTx as Tu}from"bucket-protocol-sdk";var Os=async(a,e,t)=>{let{coinType:n,amount:o,isStake:i}=a,s=new On,l=Pt(t,e);return await bu(l,s,n,o,e.address,i),s},Ps=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:i,toBuck:s}=a,l=new On,d=Pt(t,e);return await Su(d,l,n,o,e.address,i,s),l},Rs=async(a,e,t)=>{let{amount:n}=a,o=new On,i=Pt(t,e);return await Tu(i,o,n,e.address),o},Bs=async(a,e,t)=>{let{stakeProofs:n}=a,o=new On,i=Pt(t,e);return await yu(i,o,n,e.address),o};var Pn=class a extends C{constructor(t){super(t);this.data=t}txType=Nn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await Os(this.data,n,o)}static fromData(t){return new a(t)}},Rn=class a extends C{constructor(t){super(t);this.data=t}txType=Nn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await Ps(this.data,n,o)}static fromData(t){return new a(t)}},Bn=class a extends C{constructor(t){super(t);this.data=t}txType=Nn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await Rs(this.data,n,o)}static fromData(t){return new a(t)}},En=class a extends C{constructor(t){super(t);this.data=t}txType=Nn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Bs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Sr}from"@msafe/sui3-utils";import{Transaction as br}from"@mysten/sui/transactions";import{buildTankClaimTx as Iu,buildTankDepositTx as wu,buildTankWithdrawTx as Cu}from"bucket-protocol-sdk";var Es=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new br,s=Pt(t,e);return await wu(s,i,n,o,e.address),i},Ns=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new br,s=Pt(t,e);return await Cu(s,i,n,o,e.address),i},Ws=async(a,e,t)=>{let{coinType:n}=a,o=new br,i=Pt(t,e);return await Iu(i,o,n,e.address),o};import{Transaction as ku}from"@mysten/sui/transactions";import{buildLockedClaimTx as xu}from"bucket-protocol-sdk";var _s=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,i=new ku,s=Pt(t,e);return await xu(s,i,n,o,e.address),i};var Wn=class a extends C{constructor(t){super(t);this.data=t}txType=Sr.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await Es(this.data,n,o)}static fromData(t){return new a(t)}},_n=class a extends C{constructor(t){super(t);this.data=t}txType=Sr.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await Ns(this.data,n,o)}static fromData(t){return new a(t)}},Ln=class a extends C{constructor(t){super(t);this.data=t}txType=Sr.Other;txSubType="tank-claim";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 Du}from"@msafe/sui3-utils";var jn=class a extends C{constructor(t){super(t);this.data=t}txType=Du.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await _s(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:vu.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=kn.fromData(e.intentionData);break;case"borrow":i=Dn.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=Wn.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 fm}from"@msafe/sui3-utils";import{TransactionType as Nu}from"@msafe/sui3-utils";import{AggregatorClient as Au,Env as Mu}from"@cetusprotocol/aggregator-sdk";import{CetusFarmsSDK as Ou}from"@cetusprotocol/farms-sdk";import{CetusClmmSDK as Pu}from"@cetusprotocol/sui-clmm-sdk";import{CetusVaultsSDK as Ru}from"@cetusprotocol/vaults-sdk";import{CetusXcetusSDK as Bu}from"@cetusprotocol/xcetus-sdk";import{SuiClient as Tr,getFullnodeUrl as Ls}from"@mysten/sui/client";var Gt=(a,e)=>{let t=Pu.createSDK({env:"mainnet",sui_client:new Tr({url:Ls("mainnet")})});return t.setSenderAddress(e.address),t},Ut=(a,e)=>{let t=Ou.createSDK({env:"mainnet",sui_client:new Tr({url:Ls("mainnet")})});return t.setSenderAddress(e.address),t},Eu="https://api-sui.cetus.zone/router_v2/find_routes",js=(a,e)=>{let t=new Tr({url:"https://fullnode.mainnet.sui.io/"});return new Au({endpoint:Eu,signer:e.address,client:t,env:Mu.Mainnet})},Ue=(a,e)=>{let t=Ru.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t},Ie=(a,e)=>{let t=Bu.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t};var Us=async(a,e,t)=>await Gt(t,e).Pool.createPoolPayload(a),qs=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Fs=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Ks=async(a,e,t)=>await Gt(t,e).Position.closePositionPayload(a),$s=async(a,e,t)=>await Gt(t,e).Position.removeLiquidityPayload(a),Vs=async(a,e,t)=>await Gt(t,e).Rewarder.collectRewarderPayload(a);var qn=class a extends C{constructor(t){super(t);this.data=t}txType=Nu.Other;txSubType="OpenAndAddLiquidity";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 Wu}from"@msafe/sui3-utils";var Fn=class a extends C{constructor(t){super(t);this.data=t}txType=Wu.Other;txSubType="ClaimFeeAndMining";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 _u}from"@msafe/sui3-utils";var Kn=class a extends C{constructor(t){super(t);this.data=t}txType=_u.Other;txSubType="CreatePool";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Us(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Lu}from"@msafe/sui3-utils";var $n=class a extends C{constructor(t){super(t);this.data=t}txType=Lu.Other;txSubType="DecreaseLiquidity";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 ju}from"@msafe/sui3-utils";var Hs=async(a,e,t)=>await Ut(t,e).Farms.openPositionAddLiquidityStakePayload(a),Xs=async(a,e,t)=>await Ut(t,e).Farms.addLiquidityFixCoinPayload(a),zs=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),Gs=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),Qs=async(a,e,t)=>await Ut(t,e).Farms.claimFeeAndClmmReward(a),Js=async(a,e,t)=>await Ut(t,e).Farms.harvestPayload(a),Ys=async(a,e,t)=>{let n=Ut(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},Zs=async(a,e,t)=>await Ut(t,e).Farms.depositPayload(a),tc=async(a,e,t)=>await Ut(t,e).Farms.withdrawPayload(a);var Vn=class a extends C{constructor(t){super(t);this.data=t}txType=ju.Other;txSubType="FarmingOpenAndAddLiquidity";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 Uu}from"@msafe/sui3-utils";var Hn=class a extends C{constructor(t){super(t);this.data=t}txType=Uu.Other;txSubType="FarmingBatchHarvest";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 qu}from"@msafe/sui3-utils";var Xn=class a extends C{constructor(t){super(t);this.data=t}txType=qu.Other;txSubType="FarmingClaimFeeAndReward";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 Fu}from"@msafe/sui3-utils";var zn=class a extends C{constructor(t){super(t);this.data=t}txType=Fu.Other;txSubType="FarmingDecreaseLiquidity";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 Ku}from"@msafe/sui3-utils";var Gn=class a extends C{constructor(t){super(t);this.data=t}txType=Ku.Other;txSubType="FarmingHarvest";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 $u}from"@msafe/sui3-utils";var Qn=class a extends C{constructor(t){super(t);this.data=t}txType=$u.Other;txSubType="FarmingIncreaseLiquidity";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 Vu}from"@msafe/sui3-utils";var Jn=class a extends C{constructor(t){super(t);this.data=t}txType=Vu.Other;txSubType="FarmingRemoveLiquidity";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 Hu}from"@msafe/sui3-utils";var Yn=class a extends C{constructor(t){super(t);this.data=t}txType=Hu.Other;txSubType="FarmingStake";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 Xu}from"@msafe/sui3-utils";var Zn=class a extends C{constructor(t){super(t);this.data=t}txType=Xu.Other;txSubType="FarmingUnstake";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 zu}from"@msafe/sui3-utils";var to=class a extends C{constructor(t){super(t);this.data=t}txType=zu.Other;txSubType="IncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Fs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as tm}from"@msafe/sui3-utils";import{Transaction as eo}from"@mysten/sui/transactions";import Gu,{vaults_mainnet as Qu}from"haedal-vault-sdk";var Ju=async(a,e,t)=>{let n=Ue(t,e),o=new eo;return o.setSender(e.address),n.Vest.buildRedeemPayload(a.params,o),o},Yu=async(a,e,t)=>{let n=new Gu(Qu);n.senderAddress=e.address;let o=new eo;return o.setSender(e.address),await n?.Vest.buildRedeemPayload(a.params,o),o},ec=(a,e,t)=>{let n=Gt(t,e),o=new eo;return n?.Vest.buildRedeemPayload(a.params,o),o},Zu=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},nc=async(a,e,t)=>a.type==="clmm"?ec(a,e,t):a.type==="farms"?Zu(a,e,t):a.type==="vaults"?Ju(a,e,t):a.type==="haedalVaults"?Yu(a,e,t):ec(a,e,t);var no=class a extends C{constructor(t){super(t);this.data=t}txType=tm.Other;txSubType="PosVestingRedeem";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 em}from"@msafe/sui3-utils";var oo=class a extends C{constructor(t){super(t);this.data=t}txType=em.Other;txSubType="RemoveLiquidity";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 am}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as nm}from"@cetusprotocol/aggregator-sdk";import{Transaction as om}from"@mysten/sui/transactions";var oc=async(a,e,t)=>{let n=js(t,e),o=new om;return await n.fastRouterSwap({...a,router:nm(a.router),txb:o}),o};var ao=class a extends C{constructor(t){super(t);this.data=t}txType=am.Other;txSubType="AggregatorSwap";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 im}from"@msafe/sui3-utils";import{Transaction as ac}from"@mysten/sui/transactions";var ic=async(a,e,t)=>{let n=Ue(t,e),o=new ac;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},rc=async(a,e,t)=>{let n=Ue(t,e),o=new ac;return await n.Vaults.withdraw(a,o),o};var io=class a extends C{constructor(t){super(t);this.data=t}txType=im.Other;txSubType="AddVaultsPosition";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 ro=class a extends C{constructor(t){super(t);this.data=t}txType=rm.Other;txSubType="RemoveVaultsPosition";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 cm}from"@msafe/sui3-utils";import{Transaction as sm}from"@mysten/sui/transactions";var sc={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},cc=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 sm;return i.forEach(d=>{l.moveCall({target:`${sc.published_at}::router::redeem`,typeArguments:[sc.cetus_coin_type],arguments:[l.object(n),l.object(o),l.pure(d),l.object(s)]})}),l};var so=class a extends C{constructor(t){super(t);this.data=t}txType=cm.Other;txSubType="VestingRedeem";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 lm}from"@msafe/sui3-utils";var lc=async(a,e,t)=>await Ie(t,e).XCetusModule.convertPayload(a),uc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemLockPayload(a),mc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),pc=async(a,e,t)=>await Ie(t,e).XCetusModule.cancelRedeemPayload(a),dc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemPayload(a);var co=class a extends C{constructor(t){super(t);this.data=t}txType=lm.Other;txSubType="xCETUSCancelRedeem";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 um}from"@msafe/sui3-utils";var lo=class a extends C{constructor(t){super(t);this.data=t}txType=um.Other;txSubType="xCETUSClaimStakingRwewards";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 mm}from"@msafe/sui3-utils";var uo=class a extends C{constructor(t){super(t);this.data=t}txType=mm.Other;txSubType="xCETUSConvert";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 pm}from"@msafe/sui3-utils";var mo=class a extends C{constructor(t){super(t);this.data=t}txType=pm.Other;txSubType="xCETUSRedeem";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 dm}from"@msafe/sui3-utils";var po=class a extends C{constructor(t){super(t);this.data=t}txType=dm.Other;txSubType="xCETUSRedeemLock";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)}};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:fm.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=$n.fromData(e.intentionData);break;case"RemoveLiquidity":i=oo.fromData(e.intentionData);break;case"ClaimFeeAndMining":i=Fn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":i=Vn.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 pp}from"@msafe/sui3-utils";import hm from"sort-keys-recursive";var _=class{constructor(e){this.data=e}serialize(){return JSON.stringify(hm(this.data))}};import{getFullnodeUrl as ho}from"@mysten/sui.js/client";var Ir={};Cs(Ir,{contractId:()=>bm,default:()=>Cm,feeObjId:()=>Im,roleObjId:()=>Sm,status:()=>ym,transaction:()=>gm,upgradeCapObjId:()=>wm,vaultObjId:()=>Tm});var gm="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",ym="success",bm="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Sm="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Tm="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Im="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",wm="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Cm={transaction:gm,status:ym,contractId:bm,roleObjId:Sm,vaultObjId:Tm,feeObjId:Im,upgradeCapObjId:wm};var wr={};Cs(wr,{contractId:()=>Dm,default:()=>Pm,feeObjId:()=>Mm,roleObjId:()=>vm,status:()=>xm,transaction:()=>km,upgradeCapObjId:()=>Om,vaultObjId:()=>Am});var km="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",xm="success",Dm="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",vm="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Am="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Mm="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",Om="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Pm={transaction:km,status:xm,contractId:Dm,roleObjId:vm,vaultObjId:Am,feeObjId:Mm,upgradeCapObjId:Om};var Rm=ho("testnet"),Bm=ho("testnet"),Em=ho("mainnet"),Nm=ho("mainnet"),Wm="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",_m="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",Lm="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",jm="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",fc=Ir,hc=wr,Um=new Map([["dev",{env:"dev",rpc:{url:Rm},backend:{url:Wm},contract:fc}],["stg",{env:"stg",rpc:{url:Bm},backend:{url:_m},contract:fc}],["prev",{env:"prev",rpc:{url:Em},backend:{url:Lm},contract:hc}],["prod",{env:"prod",rpc:{url:Nm},backend:{url:jm},contract:hc}]]);function gc(a,e){let t=Um.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 Fm}from"@mysten/sui.js/client";var L=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 L{constructor(){super(11,"Backend is not specified")}};var yo=class extends L{constructor(){super(1,"Wallet not connected")}};import Ce,{AxiosError as qm}from"axios";var we=class extends L{constructor(e,t){super(10,e,{context:t})}};var bo=class a{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof qm)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 ke=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new Fm({url:e.rpc.url}),e.backend&&(this._backend=new bo(e.backend.url))}static new(e,t){let n=gc(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 lp,normalizeStructTag as up,normalizeSuiAddress as Uc}from"@mysten/sui.js/utils";import{TransactionBlock as ko}from"@mysten/sui.js/transactions";import{TransactionBlock as xc}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Dc,normalizeStructTag as Hm}from"@mysten/sui.js/utils";var Cr=50n,So=10000n,yc=25n,kr=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 bc}from"buffer";import{normalizeSuiAddress as Km}from"@mysten/sui.js/utils";var Fe=class extends L{constructor(e,t){super(3,e,{context:t})}};var To=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 Km(bc.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 bc.from(n).readBigInt64LE()}};import{bcs as Tc}from"@mysten/sui.js/bcs";var H=class extends L{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var Ic={groupId:"string",name:"string"},$m=64;function wc(a){return Cc(a),Tc.ser(Ic,a).toString("base64")}function Ke(a){let e=Tc.de(Ic,a,"base64");return Cc(e),e}function Cc(a){if(!Sc(a.name))throw new H("Invalid metadata: Name contains unknown character");if(!Sc(a.groupId))throw new H("Invalid metadata: Group ID contains unknown character");if(a.name.length>$m)throw new H("Invalid metadata: Name exceed max length 64")}function Sc(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 Vm}from"nanoid";function kc(){return Vm()}var he=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:wc({name:e.name,groupId:kc()}),coinType:Hm(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 xc,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],T=this.amountForRecipient(b,e.numberEpoch),w=this.getStreamFeeLocal(T),[k]=t.splitCoins(s,[t.pure(T+w,"u64")]),[x]=t.splitCoins(l,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new re(k),flatFeeCoin:new re(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:Cr,denominator:So},claimFeePercent:{numerator:yc,denominator:So},flatFeePerStream:kr}}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,Dc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:Dc,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 kr}getStreamFeeLocal(e){return e*Cr/So}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new xc,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new To(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Ac}from"@mysten/sui.js/transactions";var vc="0x0000000000000000000000000000000000000000000000000000000000000006";var xe=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(Ac.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(Ac.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(vc)}};var De=class a extends xe{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 xe{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 De(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 ko;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new ko;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new ko;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new ko;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as xr,SUI_TYPE_ARG as Xm}from"@mysten/sui.js/utils";import{Duration as Mc}from"luxon";var xo=class extends L{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var zm=1e3,Do=class{constructor(e){this.globals=e;this.coinMetaHelper=new Dr(e.suiClient),this.createStreamHelper=new ve(e).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new xo(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 H("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 H("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 H("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(Mc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:Mc.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:xr(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:xr(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 H("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new H("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<zm)throw new H("Interval shall be at least 1 second","interval",e.interval)}},Dr=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(e){let t=xr(e||Xm);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 Rc,normalizeSuiAddress as Ro}from"@mysten/sui.js/utils";import{DateTime as Bc}from"luxon";import{TransactionBlock as Oo}from"@mysten/sui.js/transactions";import{normalizeStructTag as Pc,parseStructTag as Jm}from"@mysten/sui.js/utils";import{DateTime as Ym}from"luxon";var vo=class extends L{constructor(){super(7,"Connected wallet is not creator")}};var $e=class extends L{constructor(){super(8,"Connected wallet is not recipient")}};var Ve=class extends L{constructor(e,t){super(6,e,{context:t})}};var At=class extends L{constructor(e,t={}){super(0,e,t)}};var Ao=class extends L{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as Gm,Duration as Qm}from"luxon";var Oc=(1n<<64n)-1n,Mo=1e3;function vr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Mo);return Gm.fromMillis(t*Mo)}function Ar(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Mo);return Qm.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 At("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 $e;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 $e;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 Pc(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 Ar(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 vr(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return Ar(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:vr((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===Oc?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=Ym.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 Ve(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new Ve("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=Jm(n.type),i=Pc(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 L{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function Or(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 Mr=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 Mr(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 Zm=25;async function Rr(a,e,t){let n=new He(e),o=new Xe(a,n,t);return await Or(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 Pr(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}},Pr=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||Zm,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 H("Stream does not have same group ID")}type="StreamGroup";static async new(e,t){let n=await Rr(e.suiClient,t);return n.forEach(o=>{if(!o)throw new At("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=>{tp(n,i)||(o=!1)}),o}async refresh(){let e=await Rr(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 tp(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 At("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new At("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=ip(e.query),n=await e.globals.walletAddress(),i=(await e.globals.backend.getIncomingStreams(n,t)).filter(l=>Ro(l.recipient)===Ro(n)),s=Ec(i);return new a(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=rp(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),i=Ec(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 op(this.globals,e[0].streamId,this.objectIter);return this.current++,Nc(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await ap(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,np(t,this.query)?t:this.doNextRequest()}throw new At("Stream group with no stream")}};function Ec(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)=>Bc.fromISO(n[0].createDate).toMillis()-Bc.fromISO(t[0].createDate).toMillis())}function Nc(a,e){if(e===void 0)return!0;let t=ep(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 ep(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function np(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{Nc(n,e)&&(t=!0)}),t}async function op(a,e,t){let n=await Wc(t,e);return ce.fromObjectData(a,e,n)}async function ap(a,e,t){let n=[];for(;n.length<e.length;){let o=await Wc(t,e[n.length]);n.push(o)}return Po.newFromObjectResponse(a,e,n)}async function Wc(a,e){if(!await a.hasNext())throw new At("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new At("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new At("stream id not aligned");return t}function ip(a){return{status:Br(a?.status),coinType:_c(a?.coinType),sender:Lc(a?.sender)}}function rp(a){return{status:Br(a?.status),coinType:_c(a?.coinType),recipient:Lc(a?.recipient)}}function Br(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=Br(t);return!e||e===n?n:"all"},void 0):sp(a)}function sp(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new H("Unknown stream filtered status")}}function _c(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Rc(e)):void 0:Rc(a)}function Lc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Ro(e)):void 0:Ro(a)}var No=class extends L{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 cp=25;async function jc(a,e,t,n="0x2::sui::SUI",o=cp){let i=new Er(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 No(n,t,s);return l}var Er=class extends Me{constructor(t,n,o,i){super(new Nr(t,n,o,i));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=i}},Nr=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new At("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 Wr=class{constructor(e){this.msafe=e}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},Wo=class{constructor(e){this.account=e}async address(){return this.account.address}},_r=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,lp))return{primaryCoin:Co};if(e.amount<=0)throw new H("Invalid coin request","coinAmount",e.amount);let t=await jc(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new At("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=ke.new(e,t),this.helper=new Do(this.globals)}connectSingleWallet(e){let t=new _r(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new Wr(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=>up(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Uc(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Uc(o))}get wallet(){return this.globals.wallet}builder(){return new ve(this.globals)}};var Ft=class extends _{application="mpay";getClient(e,t){let n=new _o(e==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new Wo(t)),n}};var Ge=class extends Ft{constructor(t){super(t);this.data=t}txType=pp.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 dp}from"@msafe/sui3-utils";var Qe=class extends Ft{constructor(t){super(t);this.data=t}txType=dp.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 fp}from"@msafe/sui3-utils";var Je=class extends Ft{constructor(t){super(t);this.data=t}txType=fp.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 hp}from"@msafe/sui3-utils";var Ye=class extends Ft{constructor(t){super(t);this.data=t}txType=hp.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as qc}from"@mysten/sui.js/bcs";import{normalizeStructTag as gp,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 qc.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 qc.de(t,new Uint8Array(n))}typeArg(e){return gp(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 At("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),T=e.decodeInputU64(10),w=e.decodeInputBool(11),k=e.typeArg(0);return{name:n,groupId:o,recipient:i,timeStart:s,cliff:l,epochInterval:d,totalEpoch:b,amountPerEpoch:T,cancelable:w,coinType:k}}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 H("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 De(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 yp}from"@msafe/sui3-utils";var tn=class extends Ft{constructor(t){super(t);this.data=t}txType=yp.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=ke.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 Tp,TransactionSubTypes as Fc}from"@msafe/sui3-utils";import{buildCoinTransferTxb as bp}from"@msafe/sui3-utils";var qo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return bp(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as Sp}from"@msafe/sui3-utils";var Fo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return Sp(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=Tp}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 Fc.assets.coin.send:o=qo.fromData(e.intentionData);break;case Fc.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 Np}from"@msafe/sui3-utils";var Kc=!1,en={ProtocolPackage:"0x81c408448d0d57b3e371ea94de1d40bf852784d3e225de1e74acab3e8395c18f",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 Lr(){if(!Kc)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),Kc=!0}catch(a){console.error(a.message)}}var Vt=en;import{TransactionType as ye}from"@msafe/sui3-utils";import{bcs as $c}from"@mysten/sui.js/bcs";import{normalizeStructTag as wp,normalizeSuiAddress as nn}from"@mysten/sui.js/utils";var $o=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(`${Vt.ProtocolPackage}::incentive_v3::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::borrow`)}isEntryMultiDepositTransaction(){let e=`${Vt.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=`${Vt.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(`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::withdraw`)}findPoolByAssetId(e){let t=Object.values(Vt.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=`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===t){let o=new Vo(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(Vt.ProtocolPackage));return new Vo(e,this.txb)}},Vo=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 $c.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 $c.de(t,new Uint8Array(n))}typeArg(e){return wp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{depositCoin as Cp,withdrawCoin as kp,repayDebt as xp,borrowCoin as Dp,claimAllRewardsPTB as vp,claimAllRewardsResupplyPTB as Ap}from"navi-sdk";async function Pe(a,e,t,n){return await Cp(a,e,t,n),a}async function Vc(a,e,t,n){let[o]=await kp(a,e,t);return a.transferObjects([o],a.pure(n)),a}async function Hc(a,e,t,n){let[o]=await Dp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function jr(a,e,t,n){return await xp(a,e,t,n),a}async function Xc(a,e){return await vp(a,e)}async function zc(a,e){return await Ap(a,e)}var Ho=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await Xc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var Xo=class a extends _{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 zc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Op}from"@mysten/sui.js/transactions";import{pool as Mp}from"navi-sdk";function Yt(a){return Object.values(Mp).find(e=>String(e.assetId)===String(a))}var zo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Op;console.log("build",this.data);let s=Yt(n);return await Hc(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Pp}from"@mysten/sui.js/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 _{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 Pp;console.log("build",this.data);let d=Yt(i);if(i===0){let[k]=l.splitCoins(l.gas,[s]);return await Pe(l,d,k,s)}let b=await Re(n,o.address,d.type);if(!b.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let T=b.data[0].coinObjectId;if(b.data.length>=2){let k=1;for(;k<b.data.length;)l.mergeCoins(T,[b.data[k].coinObjectId]),k++}return await Pe(l,d,l.object(T),s)}static fromData(t){return new a(t)}};import{TransactionBlock as Rp}from"@mysten/sui.js/transactions";var Qo=class a extends _{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 Rp;console.log("build",this.data);let d=Yt(i);if(i===0){let[w]=l.splitCoins(l.gas,[s]);return jr(l,d,w,s)}let b=await Re(n,o.address,d.type);if(!b.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let T=b.data[0].coinObjectId;if(b.data.length>=2){let w=1;for(;w<b.data.length;)l.mergeCoins(T,[b.data[w].coinObjectId]),w++}return jr(l,d,l.object(T),s)}static fromData(t){return new a(t)}};import{TransactionBlock as Bp}from"@mysten/sui.js/transactions";var Jo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Bp;console.log("build",this.data);let s=Yt(n);return await Vc(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Ep}from"@mysten/sui.js/transactions";var Yo=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:i}=this.data,s=new Ep;console.log("build",this.data);for(let l=0;l<i.length;l++){let{assetId:d,amount:b}=i[l],T=Yt(d);if(d===0){let[x]=s.splitCoins(s.gas,[b]);await Pe(s,T,x,b);continue}let w=await Re(n,o.address,T.type);if(!w.data[0])throw new Error(`Insufficient balance for ${T.name} Token`);let k=w.data[0].coinObjectId;if(w.data.length>=2){let x=1;for(;x<w.data.length;)s.mergeCoins(k,[w.data[x].coinObjectId]),x++}await Pe(s,T,s.object(k),b)}return s}static fromData(t){return new a(t)}};var Zo=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(e){await Lr();let{transactionBlock:t}=e,o=new $o(t).decode();return{txType:Np.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await Lr(),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 Wp,TransactionType as Gc}from"@msafe/sui3-utils";import{fromHex as _p}from"@mysten/bcs";import{Transaction as Lp}from"@mysten/sui/transactions";import jp from"sort-keys-recursive";var Qc="msafe-plain-tx",Jc=Wp.others.plain,Ur=class a{constructor(e){this.data=e}application=Qc;txType=Gc.Other;txSubType=Jc;serialize(){return JSON.stringify(jp(this.data))}async build(e){return Lp.from(_p(this.data.content))}static fromData(e){return new a(e)}},ta=class{application;supportSDK="@mysten/sui";constructor(){this.application=Qc}async deserialize(e){let{content:t}=e.appContext;return{txType:Gc.Other,txSubType:Jc,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return Ur.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{SuiClient as Yc}from"@mysten/sui/client";import{Transaction as Hp}from"@mysten/sui/transactions";import{SuiClient as Kr}from"@mysten/sui.js/client";import{TransactionBlock as Xp}from"@mysten/sui.js/transactions";import{RequestManager as Kp,HTTPTransport as $p,Client as Vp}from"@open-rpc/client-js";var Up={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},qr=class extends Error{},ea=class extends qr{code;type;constructor(e,t){super(e),this.code=t,this.type=Up[t]??"ServerError"}};function qp(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var Fp={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={...Fp,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=qp(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 Fr(e);return this.#i.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},Fr=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 $p(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new Vp(new Kp([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 Vr(e))}addHelper(e){this.apps.set(e.application,new $r(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},$r=class{constructor(e){this.helper=e}async deserialize(e){let t=new Yc({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new Kr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=Hp.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:i})}async build(e){let t=new Yc({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 Xp.from(i)}},Vr=class{constructor(e){this.helper=e}async deserialize(e){let t=new Kr({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 Kr({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 od}from"@msafe/sui3-utils";import{getFullnodeUrl as ad}from"@mysten/sui/client";import{Scallop as id}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Rt}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as ol}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 Hr}from"@mysten/sui/bcs";import{normalizeStructTag as Gp,normalizeSuiAddress as on}from"@mysten/sui/utils";var Xr=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=Hr[t];return Hr[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 Hr.U64.parse(new Uint8Array(t))}typeArg(e){return Gp(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},N=Xr;var zr=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)}},Bt=zr;import{normalizeStructTag as Zc,SUI_CLOCK_OBJECT_ID as tl,SUI_TYPE_ARG as Qp}from"@mysten/sui/utils";var el=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),tl],[Zc(Qp)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${Be.id}::user::redeem_rewards`,[Be.incentivePools,Be.incentiveAccounts,a.object(e),a.object(t),tl],[Zc(n)])};var nl=(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(`${ol}::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,`${ol}::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:Rt.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:Rt.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Rt.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Bt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Rt.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:Rt.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:Rt.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:Rt.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:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Rt.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 Bt(n,this.transaction).getAmountInput().reduce((s,l)=>s+l,0),i=this.helperRepay.decodeSharedObjectId(1);return{txType:Rt.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 Bt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}if(this.helperStake.moveCall&&t===0){let i=this.helperStake.getNestedInputParam(2);t=new Bt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Rt.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:Rt.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 Bt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Rt.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 Bt(o,this.transaction).getAmountInput().reduce((i,s)=>i+s,0)}return{txType:Rt.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:Rt.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as Qr}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 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:Qr.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Qr.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:Qr.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as te}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as Jp}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=nl(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(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,`${Jp}::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,l=0;return this.commands.forEach(d=>{this.filterMoveCallCommands(d,e)?(o.push({action:"unstake",helper:new N(d,this.transaction,i)}),i++):this.filterMoveCallCommands(d,t)?(o.push({action:"stake",helper:new N(d,this.transaction,s)}),s++):this.filterMoveCallCommands(d,n)&&(o.push({action:"deactivate",helper:new N(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 Bt(e,this.transaction).getAmountInput().reduce((D,P)=>D+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,T=!1,w,k,x=[{condition:s,isOld:!0},{condition:l,isOld:!1},{condition:d,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([k,w]=x[D].condition,b=!0,T=x[D].isOld);return{txType:te.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:w,obligationKey:k,veScaKey:o,isHaveRedeem:i,isObligationLocked:b,isOldBorrowIncentive:T}}}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,T=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:i,isOld:!1}];for(let w=0;w<T.length;w++)T[w].condition.length>1&&([b,d]=T[w].condition,s=!0,l=T[w].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 Bt(e,this.transaction).getAmountInput().reduce((x,D)=>x+D,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,T,w,k=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let x=0;x<k.length;x++)k[x].condition.length>1&&([w,T]=k[x].condition,d=!0,b=k[x].isOld);return{txType:te.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:T,obligationKey:w,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 Bt(e,this.transaction).getAmountInput().reduce((x,D)=>x+D,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,T,w,k=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let x=0;x<k.length;x++)k[x].condition.length>1&&([w,T]=k[x].condition,d=!0,b=k[x].isOld);return{txType:te.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:T,obligationKey:w,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 Yp from"sort-keys-recursive";var A=class{constructor(e){this.data=e}get application(){return"msafe-core"}serialize(){return JSON.stringify(Yp(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(T,w)=>{let k=await w.borrowQuick(+i,o,s,l);w.transferObjects([k],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(T,w)=>{let k=await w.borrowQuick(+l,d,o,i);w.transferObjects([k],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(w,k)=>{let x=k.claimReferralTicket(d),D=await k.borrowWithReferralQuick(+b,d,x,i,s);k.burnReferralTicket(x,d),k.transferObjects([D],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as Zp}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 k=[...e.constants.whitelist.spool].map(x=>e.utils.parseCoinName(x));return Object.values(i??[]).filter(x=>!!x&&k.includes(x.coinName)).reduce((x,D)=>{let P=e.utils.parseMarketCoinName(D.coinName);return x[P]||(x[P]=0),x[P]+=D.availableClaimCoin,x},{})})(),b={};Object.entries(o).forEach(([k,x])=>{for(let D=0;D<x.length;D++){let P=x[D];if(!d[k])continue;let q=n.claim(P.id,k);b.sui?b.sui.push(q):b.sui=[q]}});let T=(()=>{let k={};return k.sui=Object.values(d).reduce((x,D)=>x+D,0),l.forEach(x=>{Object.values(x.borrowIncentives).forEach(D=>{D&&D.rewards.forEach(P=>{k[P.coinName]||(k[P.coinName]=0),k[P.coinName]?k[P.coinName]+=P.availableClaimCoin:k[P.coinName]=P.availableClaimCoin})})}),k})();if(s.length>0&&l.length>0)for(let k=0;k<l.length;k++){let x=l[k],D=!1,P=s.find($=>$.id===x.obligationId)?.keyId,q={};if(P){if(Object.values(x.borrowIncentives).forEach($=>{if($){let Et=$.rewards.filter(Nt=>{let Ot=Nt.coinName;return Nt.availableClaimCoin>0&&!q[Ot]});D=Et.length>0,Et.forEach(Nt=>{let Ot=n.claimBorrowIncentive(x.obligationId,P,Nt.coinName);q[Nt.coinName]=!0,b[Nt.coinName]?b[Nt.coinName].push(Ot):b[Nt.coinName]=[Ot]})}}),T.sui>0){let $=Kt.redeem_rewards(n,P,x.obligationId,Zp);b.sui?b.sui.push($):b.sui=[$]}if(D&&await el(e.query,x.obligationId)){n.unstakeObligation(x.obligationId,P);let Et=await e.query.getBindedVeScaKey(x.obligationId);Et?n.stakeObligationWithVesca(x.obligationId,P,Et):n.stakeObligation(x.obligationId,P)}}}let w=(await Promise.all(Object.entries(b).map(async([k,x])=>{let D=x[0];if(x.length>1&&n.mergeCoins(D,x.slice(1)),k==="sui"){n.mergeCoins(n.gas,[D]);return}return await e.builder.utils.mergeSimilarCoins(n,D,e.utils.parseCoinType(k),t),D}))).filter(k=>!!k);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 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 T=Kt.redeem_rewards(b,i,s,n.utils.parseCoinType(l));return b.transferObjects([T],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(T,w)=>{await w.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 T=n.constants.whitelist.borrowing.has(i);return T&&await b.unstakeObligationQuick(l,void 0),await b.repayQuick(+s,i,l),T&&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 Sa=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 T=0;T<s.length;T++){let{id:w,coin:k}=s[T],x=t.utils.parseMarketCoinName(d),[D]=await i.unstakeQuick(k,x,w);if(D){let P=i.withdraw(D,d);b.push(P)}}if(l>0){let T=await i.withdrawQuick(l,d);b.push(T)}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 Ta=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 ka=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 xa=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:T}=this.data,w=t.address,k=n.builder.createTxBlock();k.setSender(w);let x=await n.utils.selectCoins(o,td,w),[D,P]=k.takeAmountFromCoins(x,o);return k.extendLockPeriod(i,s),k.extendLockAmount(i,D),k.transferObjects([P],w),!l||!d||(T&&(b?Kt.unstakeObligation(k,l,d):k.unstakeObligation(l,d)),k.stakeObligationWithVesca(l,d,i)),k.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var Da=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:T}=this.data,w=n.builder.createTxBlock();return w.setSender(o),w.extendLockPeriod(i,s),l&&d&&(b&&(T?Kt.unstakeObligation(w,d,l):w.unstakeObligation(l,d)),w.stakeObligationWithVesca(l,d,i)),w.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 ed}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:T,isObligationLocked:w,isOldBorrowIncentive:k}=this.data,x=n.builder.createTxBlock();if(x.setSender(o),d){let $=x.redeemSca(l);x.transferObjects([$],o)}let D=await n.builder.utils.selectCoins(i,ed,o),[P,q]=x.takeAmountFromCoins(D,i);return x.transferObjects([q],o),x.renewExpiredVeSca(l,P,s),!b||!T||(w&&(k?Kt.unstakeObligation(x,T,b):x.unstakeObligation(b,T)),x.stakeObligationWithVesca(b,T,l)),x.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 nd}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:T,veScaKey:w}=this.data,k=n.builder.createTxBlock();k.setSender(o);let x=await n.utils.selectCoins(i,nd,o),[D,P]=k.takeAmountFromCoins(x,i),q;return w?k.extendLockAmount(w,D):q=k.lockSca(D,T),d&&b&&(s&&(l?Kt.unstakeObligation(k,b,d):k.unstakeObligation(d,b)),k.stakeObligationWithVesca(d,b,w||q)),w||k.transferObjects([q,P],o),k.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),T=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(T))return d.txBlock;let w=await n.query.getStakeAccounts(T,o),k=l||(w.length>0?w[0].id:void 0);if(k)await d.stakeQuick(b,T,k);else{let x=d.createStakeAccount(T);await d.stakeQuick(b,T,x),d.transferObjects([x],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 Na=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 Wa=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new id({addressId:"67c44a103fe1b8c454eb9699",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??ad("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:od.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=Ta.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=Da.fromData(s);break;case"ExtendPeriodAndStakeMore":l=xa.fromData(s);break;case"RenewExpStakePeriod":l=Ma.fromData(s);break;case"WithdrawStakedSca":l=Na.fromData(s);break;case"SupplyAndStakeLending":l=Ra.fromData(s);break;case"WithdrawAndUnstakeLending":l=Sa.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=ka.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 Ld}from"@msafe/sui3-utils";import{TransactionType as sn}from"@msafe/sui3-utils";import{normalizeStructTag as be}from"@mysten/sui/utils";import{API_URL as Id}from"@suilend/sui-fe";import{TransactionType as bd}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Sd,LENDING_MARKET_TYPE as Td,SuilendClient as Jr}from"@suilend/sdk";import{TransactionType as Ee}from"@msafe/sui3-utils";import{fromBase64 as al,toHex as il}from"@mysten/bcs";import{normalizeStructTag as an}from"@mysten/sui/utils";import{MAX_U64 as Ne}from"@suilend/sui-fe";import rl 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 rl(il(al(this.inputs[i].Pure.bytes)),16).toString(),l=s===Ne.toString();return console.log("decodeWithdraw - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",Ne.toString()),l&&(o=Ne.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 rl(il(al(this.inputs[i].Pure.bytes)),16).toString(),l=s===Ne.toString();return console.log("decodeBorrow - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",Ne.toString()),l&&(o=Ne.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 cd}from"@mysten/sui/transactions";import sd from"sort-keys-recursive";var _t=class{constructor(e){this.data=e}serialize(){return JSON.stringify(sd(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 cd;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 dd}from"@mysten/sui/transactions";import{normalizeStructTag as ld}from"@mysten/sui/utils";import{Side as rn}from"@suilend/sdk";import{isSendPoints as ud}from"@suilend/sui-fe";import md from"bignumber.js";var pd=(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:ld(l.coinType.name),side:o})).filter(l=>!ud(l.rewardCoinType)&&!!s.rewards[Number(l.rewardIndex)]&&new md(s.rewards[Number(l.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},ja=pd;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 dd;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 fd}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 fd;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 hd}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 hd;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 gd}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 gd;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 yd}from"@mysten/sui/transactions";var $a=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 yd;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 Va=async(a,e)=>{let t=await Jr.initialize(Sd,Td,a),n=await Jr.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(i=>Jr.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 Va(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:bd.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 Va(i,s));let l;switch(n){case"deposit":l=Fa.fromData(o);break;case"withdraw":l=$a.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(w=>w.id===d)??this.utils.obligations?.[0],T=this.utils.obligationOwnerCaps?.find(w=>w.obligationId===b?.id);return l.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:T,obligation:b})}};var Yr=async(a,e)=>{let t=await Va(a,e),n=await fetch(`${Id}/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 kd}from"@mysten/sui/transactions";import{LstClient as sl,convertLstsAndRebalanceAndSendToUser as xd}from"@suilend/springsui-sdk";import Cd from"sort-keys-recursive";var $t=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Cd(this.data))}};var za=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:l,obligation:d}=t;console.log("ConvertIntention.build",n,o,i,s,l,d);let b=await sl.initialize(n,Object.values(s).find(k=>k.type===this.data.inCoinType)),T=await sl.initialize(n,Object.values(s).find(k=>k.type===this.data.outCoinType)),w=new kd;return xd(b,T,w,o.address,this.data.amount),w}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as Dd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as vd,sendObligationToUser as Ad}from"@suilend/sdk";import{LstClient as cl,convertLstsAndRebalance as Md}from"@suilend/springsui-sdk";var Ga=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:l,obligation:d}=t;console.log("ConvertAndDepositIntention.build",n,o,i,s,l,d);let b=await cl.initialize(n,Object.values(s).find(P=>P.type===this.data.inCoinType)),T=await cl.initialize(n,Object.values(s).find(P=>P.type===this.data.outCoinType)),w=new Dd,{obligationOwnerCapId:k,didCreate:x}=vd(i,w,l),D=Md(b,T,w,o.address,this.data.amount);return i.deposit(D,this.data.outCoinType,k,w),x&&Ad(k,o.address,w),w}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Od}from"@mysten/sui/transactions";import{LstClient as Pd}from"@suilend/springsui-sdk";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,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("StakeIntention.build",n,o,i,s,l,d);let b=await Pd.initialize(n,Object.values(s).find(w=>w.type===this.data.outCoinType)),T=new Od;return b.mintAmountAndRebalanceAndSendToUser(T,o.address,this.data.amount),T}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as Rd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Bd,sendObligationToUser as Ed}from"@suilend/sdk";import{LstClient as Nd}from"@suilend/springsui-sdk";var Ja=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:l,obligation:d}=t;console.log("StakeAndDepositIntention.build",n,o,i,s,l,d);let b=await Nd.initialize(n,Object.values(s).find(D=>D.type===this.data.outCoinType)),T=new Rd,{obligationOwnerCapId:w,didCreate:k}=Bd(i,T,l),x=b.mintAmountAndRebalance(T,o.address,this.data.amount);return i.deposit(x,this.data.outCoinType,w,T),k&&Ed(w,o.address,T),T}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Wd}from"@mysten/sui/transactions";import{LstClient as _d}from"@suilend/springsui-sdk";var Ya=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:l,obligation:d}=t;console.log("UnstakeIntention.build",n,o,i,s,l,d);let b=await _d.initialize(n,Object.values(s).find(w=>w.type===this.data.inCoinType)),T=new Wd;return b.redeemAmountAndRebalanceAndSendToUser(T,o.address,this.data.amount),T}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 Yr(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:Ld.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 Yr(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 Fd}from"@msafe/sui3-utils";import{TransactionType as ll}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:ll.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:ll.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as Ud}from"@alphafi/stsui-sdk";var ei=class a extends C{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 Ud(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 qd}from"@alphafi/stsui-sdk";var ni=class a extends C{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 qd(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:Fd.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 mf}from"@msafe/sui3-utils";import{TurbosSdk as pf}from"turbos-clmm-sdk";import{TransactionType as Lt}from"@msafe/sui3-utils";import{fromBase64 as We}from"@mysten/bcs";import{bcs as _e}from"@mysten/sui/bcs";import{BN as $d}from"turbos-clmm-sdk";var Ht={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Xt={PackageId:"0xdee9"};var Vd=(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(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=Vd(t,n,this.swap1Layer,this.swap2Layer),i=o.map((x,D)=>{let P=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(D)),q=this.helper.decodeInputU128(this.helper.getInputsIndex(4+D+t)),$=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new $d(q.toString()));return{pool:P,a2b:x,nextTickIndex:$}}),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)),T=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),w=this.helper.decodeInputU64(this.helper.getInputsIndex(2+t)),k=this.helper.decodeInputU64(this.helper.getInputsIndex(3+t));return{txType:Lt.Other,type:"Swap",intentionData:{routes:i,coinTypeA:s,coinTypeB:l,address:d,amountA:T?w:k,amountB:T?k:w,amountSpecifiedIsInput:T,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(k=>{let x=k.decodeInputU64(k.getInputsIndex(4)),D=k.decodeInputU64(k.getInputsIndex(5));b[x]=D});let T=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,w=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:T,collectAmountB:w,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(w=>w.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,T=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:T,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(We(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(_e.u64().parse(Uint8Array.from(We(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(_e.u32().parse(Uint8Array.from(We(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(_e.u8().parse(Uint8Array.from(We(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return _e.Address.parse(Uint8Array.from(We(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return _e.bool().parse(Uint8Array.from(We(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as Hd}from"turbos-clmm-sdk";var ii=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Hd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,tickLower:b,tickUpper:T,deadline:w,txb:k}=this.data;return n.pool.addLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,tickLower:b,tickUpper:T,deadline:w,txb:k})}static fromData(t){return new a(t)}};import{TurbosSdk as Xd}from"turbos-clmm-sdk";var ri=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Xd(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 C{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:T}=this.data;return n.pool.collectFee({pool:o,address:i,collectAmountA:l,collectAmountB:d,nft:s,deadline:b,txb:T})}static fromData(t){return new a(t)}};import{TurbosSdk as Gd}from"turbos-clmm-sdk";var ci=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Gd(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 Qd}from"turbos-clmm-sdk";var li=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Qd(t.network.replace("sui:",""),t.suiClient),{fee:o,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:T,coinTypeB:w,amountA:k,amountB:x,deadline:D,txb:P}=this.data;return n.pool.createPool({fee:o,amountA:k,amountB:x,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:T,coinTypeB:w,deadline:D,txb:P})}static fromData(t){return new a(t)}};import{TurbosSdk as Jd}from"turbos-clmm-sdk";var ui=class a extends C{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,nft:b,decreaseLiquidity:T,deadline:w,txb:k}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:T,deadline:w,txb:k})}static fromData(t){return new a(t)}};import{TurbosSdk as Yd}from"turbos-clmm-sdk";var mi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Yd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,decreaseLiquidity:T,deadline:w}=this.data,{txb:k,coinA:x,coinB:D}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:T,deadline:w});return k.transferObjects([x,D],this.data.address),k}static fromData(t){return new a(t)}};import{TurbosSdk as Zd}from"turbos-clmm-sdk";var pi=class a extends C{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,amountA:s,amountB:l,slippage:d,nft:b,deadline:T,txb:w}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,deadline:T,txb:w})}static fromData(t){return new a(t)}};import{Transaction as tf}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as ef}from"@mysten/sui/utils";var di=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new tf;return n.moveCall({target:`${Ht.PackageId}::claim::claim`,typeArguments:[Ht.turbosCoinType],arguments:[n.object(Ht.Claim),n.object(ef)]}),n}static fromData(t){return new a(t)}};import{Transaction as nf}from"@mysten/sui/transactions";var fi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new nf;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 of}from"@mysten/sui/transactions";import{TurbosSdk as af}from"turbos-clmm-sdk";var hi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new af(t.network.replace("sui:",""),t.suiClient),o=new of;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 rf}from"turbos-clmm-sdk";var gi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new rf(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 sf}from"turbos-clmm-sdk";var yi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new sf(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,slippage:T,amountSpecifiedIsInput:w,deadline:k,txb:x}=this.data;return n.trade.swap({routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,amountSpecifiedIsInput:w,slippage:T,deadline:k,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as lf}from"turbos-clmm-sdk";import{Transaction as ul}from"@mysten/sui/transactions";import{normalizeSuiObjectId as ml}from"@mysten/sui/utils";import{unstable_getObjectId as cf}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?cf(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 pl=89,dl=1e6,fl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new ul,d=new cn(s),b=await d.getCoinsData(i,t,o),[T,w]=d.splitAndMergeCoin(b,o,l);if(!T)throw new Error(`Not enough balance: ${t}`);let k=await d.IsAccountCap(i),x=k?l.object(k):d.createAccount(l),[D,P,q]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[l.object(String(n)),l.pure.u64(pl),x,l.pure.u64(o),l.object(ml("0x6")),T]});return w&&l.transferObjects([w],l.pure.address(i)),l.transferObjects([D],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),k||l.transferObjects([x],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(dl),l},hl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new ul,d=new cn(s),b=await d.getCoinsData(i,e,o),[T,w]=d.splitAndMergeCoin(b,o,l);if(!T)throw new Error(`Not enough balance: ${e}`);let k=await d.IsAccountCap(i),x=k?l.object(k):d.createAccount(l),D=d.zero(t,l),[P,q,$]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[l.object(String(n)),l.pure.u64(pl),x,l.pure.u64(o),T,D,l.object(ml("0x6"))]});return w&&l.transferObjects([w],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),l.transferObjects([q],l.pure.address(i)),k||l.transferObjects([x],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(dl),l};var bi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new lf(t.network.replace("sui:",""),t.suiClient);return await hl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as uf}from"turbos-clmm-sdk";var Si=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new uf(t.network.replace("sui:",""),t.suiClient);return await fl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var Ti=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,l=await new ai(o,t,n).decode(i.address);return{txType:mf.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=Si.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Sf}from"@msafe/sui3-utils";import{TransactionType as Zr}from"@msafe/sui3-utils";import{bcs as gl}from"@mysten/sui.js/bcs";import{normalizeStructTag as hf,normalizeSuiAddress as ln}from"@mysten/sui.js/utils";var df={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},vt=df;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(`${vt.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${vt.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${vt.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:Zr.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Zr.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:Zr.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(vt.packageId));return new ts(e,this.txb)}},ts=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 gl.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 gl.de(t,new Uint8Array(n))}typeArg(e){return hf(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as gf}from"@mysten/sui.js/transactions";var wi=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new gf,{ticketId:o}=this.data;return n.moveCall({target:`${vt.packageId}::native_pool::burn_ticket`,arguments:[n.object(vt.poolObjectId),n.object(vt.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as yf}from"@mysten/sui.js/transactions";var Ci=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new yf,{amount:o}=this.data,[i]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${vt.packageId}::native_pool::stake`,arguments:[n.object(vt.poolObjectId),n.object(vt.metadataObjectId),n.object(vt.systemStateObjectId),i]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as bf}from"@mysten/sui.js/transactions";var ki=class a extends _{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new bf,{amount:o}=this.data,i=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[s,...l]=i.filter(T=>T.coinType.split("::")[0]===vt.certType.split("::")[0]),d=n.object(s.coinObjectId);l.length&&n.mergeCoins(d,l.map(T=>n.object(T.coinObjectId)));let b=n.splitCoins(n.object(s.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${vt.packageId}::native_pool::unstake`,arguments:[n.object(vt.poolObjectId),n.object(vt.metadataObjectId),n.object(vt.systemStateObjectId),b]}),n}static fromData(t){return new a(t)}};var xi=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new Ii(t).decode();return{txType:Sf.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=ki.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 Ef}from"@msafe/sui3-utils";import{asIntN as yl}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 Di=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(yl(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(yl(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 Df}from"@msafe/sui3-utils";import{buildTx as wf,getQuote as Cf}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as Se,ClmmPoolUtil as kf}from"@firefly-exchange/library-sui";import{Decimal as xf}from"turbos-clmm-sdk";import{SuiClient as Tf}from"@firefly-exchange/library-sui";import{OnChainCalls as If}from"@firefly-exchange/library-sui/dist/src/spot";var bl={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 Tf({url:bl.rpc});return new If(t,bl.objects,{address:e.address,isUIWallet:!1})};var Mt=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 Se(e.liquidity),tokenMaxA:new Se(e.maxAmountTokenA),tokenMaxB:new Se(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 Cf({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new xf(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await wf({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 Se(t.tokenAmount),t.isTokenAFixed,!0,0,new Se(e.current_sqrt_price)),tokenMaxA:new Se(t.maxAmountTokenA),tokenMaxB:new Se(t.maxAmountTokenB)}}};var vi=class a extends C{constructor(t){super(t);this.data=t}txType=Df.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.aggregator7KSwap(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as vf}from"@msafe/sui3-utils";var Ai=class a extends C{constructor(t){super(t);this.data=t}txType=vf.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Af}from"@msafe/sui3-utils";var Mi=class a extends C{constructor(t){super(t);this.data=t}txType=Af.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Mf}from"@msafe/sui3-utils";var Oi=class a extends C{constructor(t){super(t);this.data=t}txType=Mf.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Of}from"@msafe/sui3-utils";var Pi=class a extends C{constructor(t){super(t);this.data=t}txType=Of.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Pf}from"@msafe/sui3-utils";var Ri=class a extends C{constructor(t){super(t);this.data=t}txType=Pf.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Rf}from"@msafe/sui3-utils";var Bi=class a extends C{constructor(t){super(t);this.data=t}txType=Rf.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bf}from"@msafe/sui3-utils";var Ei=class a extends C{constructor(t){super(t);this.data=t}txType=Bf.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Mt.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var Ni=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 Di(t,n).decode();return{txType:Ef.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 ch}from"@msafe/sui3-utils";import{MmtSDK as Kf}from"@mmt-finance/clmm-sdk";import{Transaction as $f}from"@mysten/sui/transactions";var R=Xl(Tl());import{convertI32ToSigned as ns,TickMath as Cl}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";import jf from"bignumber.js";var Nf="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",zt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Wf=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},_f=(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")},Lf=(a,e,t,n)=>{if(a===Nf){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=_f(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 Il(a,e,t,n,o){let i=await Wf({suiClient:a.rpcClient,address:e,type:t});return Lf(zt(t),i.map(l=>({balance:BigInt(l.balance),objectId:l.coinObjectId})),n,o)}var Te=(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 l={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType},d=n.rewarders.map(T=>T.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 Uf(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 qf(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 kl=(a,e,t)=>{let n=ns(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default(Uf(n)):new R.default(qf(n))};function xl(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=xl(t,n),l;return Number(t)?l=await Il(i,a,zt(e),s,o):[l]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),l}function Dl({mmt:a,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let i=kl(ns(n),t.tickSpacing),s=kl(ns(o),t.tickSpacing);return a.Position.openPosition(e,t,i.toString(),s.toString())}var Ff=(a,e)=>{let n=1e4-Math.floor(e*100);return a*BigInt(n)/BigInt(1e4)};function Wi(a,e,t){let n=xl(a,e);return Number(a)===0?BigInt(0):Ff(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=Cl.sqrtPriceX64ToPrice(new R.default(d?.toString()),t.decimals,n.decimals),T=i?(100-o)/100:(100+o)/100,w=Cl.priceToSqrtPriceX64(b.mul(T),t.decimals,n.decimals);return BigInt(w.toString())}var vl=async(a,e,t,n,o,i,s,l,d,b)=>{let T=await de({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),w=await de({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),k={objectId:s,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},x=Dl({mmt:a,tx:e,poolModel:k,selectedLowTick:l,selectedHighTick:d}),D=Wi(n,i.tokenX.decimals,b),P=Wi(o,i.tokenY.decimals,b);a.Pool.addLiquidity(e,k,x,T,w,D,P,t),e.transferObjects([x],e.pure.address(t))},Al=async(a,e,t,n,o,i,s,l,d,b,T)=>{try{let w=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}),k={objectId:s.poolId,tokenXType:zt(s.tokenX.coinType),tokenYType:zt(s.tokenY.coinType),tickSpacing:s.tickSpacing},x=Dl({mmt:a,tx:e,poolModel:k,selectedLowTick:l,selectedHighTick:d}),D=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:k,position:x,inputCoin:w,isXtoY:i,limitSqrtPrice:D,slippagePercentage:T,transferToAddress:n,useMvr:!0}),e.transferObjects([x],e.pure.address(n))}catch(w){console.error(w)}},Ml=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}),T={objectId:i.poolId,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},w=Wi(n,i.tokenX.decimals,l),k=Wi(o,i.tokenY.decimals,l);a.Pool.addLiquidity(e,T,s,d,b,w,k,t)},Ol=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}),T={objectId:i.poolId,tokenXType:i.tokenX.coinType,tokenYType:i.tokenY.coinType,tickSpacing:i.tickSpacing},w=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:T,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:w,slippagePercentage:d,transferToAddress:t})}catch(b){throw console.error(b),b}},Pl=(a,e)=>BigInt(e===100?a:new jf(a).multipliedBy(e/100).toFixed(0)),Rl=async(a,e,t,n,o,i)=>{let s=Pl(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),Te(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)},Bl=async({sdk:a,address:e,position:t,pool:n,withdrawPercentage:o,txb:i,targetCoinType:s,slippage:l})=>{let d=Pl(t.liquidity,o),b=zt(n.tokenX.coinType),T=zt(n.tokenY.coinType),w=zt(s)===T,k={objectId:n?.poolId,tokenXType:b,tokenYType:T},{removeLpCoinA:x,removeLpCoinB:D}=a.Pool.removeLiquidity(i,k,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:w,slippagePercentage:l}),q=w?x:D,$=i.moveCall({target:"0x2::coin::value",arguments:[q],typeArguments:[w?b:T]});i.transferObjects([w?D:x],e),a.Pool.swapV2({txb:i,transferToAddress:e,pool:k,limitSqrtPrice:P,amount:$,inputCoin:q,isXtoY:w}),Te(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)};var _i=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Kf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:l,selectedLowTick:d,selectedHighTick:b,slippage:T}=n,w=new $f;return await vl(t,w,o,i,s,l,l.poolId,d,b,T),w}static fromData(t){return new a(t)}};import{MmtSDK as Vf}from"@mmt-finance/clmm-sdk";import{Transaction as Hf}from"@mysten/sui/transactions";var Li=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Vf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,selectedLowTick:d,selectedHighTick:b,swapSlippage:T,addLiquiditySlippage:w}=n,k=new Hf;return await Al(t,k,t.rpcClient,o,i,s,l,d,b,T,w),k}static fromData(t){return new a(t)}};import{MmtSDK as Xf}from"@mmt-finance/clmm-sdk";import{Transaction as zf}from"@mysten/sui/transactions";var ji=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Xf.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(T=>T.poolId===d.poolId);b&&Te(t,o,d,b,l)}return l}static fromData(t){return new a(t)}};import{MmtSDK as Gf}from"@mmt-finance/clmm-sdk";import{Transaction as Qf}from"@mysten/sui/transactions";var Ui=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Gf.NEW({network:"mainnet"}),{params:n}=this.data,o=new Qf;return await Promise.all(n.claimParams.map(i=>wl({...i,sdk:t,txb:o}))),o}static fromData(t){return new a(t)}};import{MmtSDK as Jf}from"@mmt-finance/clmm-sdk";import{Transaction as Yf}from"@mysten/sui/transactions";var qi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Jf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:i,pool:s}=n,l=new Yf;return Te(t,o,i,s,l),l}static fromData(t){return new a(t)}};import{MmtSDK as Zf}from"@mmt-finance/clmm-sdk";import{Transaction as th}from"@mysten/sui/transactions";var Fi=class a extends C{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,positionObjectId:d,slippage:b}=n,T=new th;return await Ml(t,T,o,i,s,l,d,b),T}static fromData(t){return new a(t)}};import{MmtSDK as eh}from"@mmt-finance/clmm-sdk";import{Transaction as nh}from"@mysten/sui/transactions";var Ki=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=eh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,positionObjectId:d,swapSlippage:b,addLiquiditySlippage:T}=n,w=new nh;return await Ol(t,w,o,i,s,l,d,b,T),w}static fromData(t){return new a(t)}};import{MmtSDK as oh}from"@mmt-finance/clmm-sdk";import{Transaction as ah}from"@mysten/sui/transactions";var $i=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=oh.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:i,address:s,withdrawPercentage:l,zapOutOn:d,targetCoinType:b,slippage:T}=n,w=new ah;return d?await Bl({sdk:t,address:s,position:i,pool:o,withdrawPercentage:l,txb:w,targetCoinType:b,slippage:T}):await Rl(t,s,i,o,l,w),w}static fromData(t){return new a(t)}};import{Transaction as El}from"@mysten/sui/transactions";import{LstClient as Nl}from"@suilend/springsui-sdk";var os={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},Wl=async(a,e,t)=>{let n=await Nl.initialize(a,os),o=new El,[i]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,i);return o.transferObjects([s],e),o},_l=async(a,e,t)=>{let n=await Nl.initialize(a,os),o=await a.getCoins({owner:e,coinType:os.type,limit:1e3});if(o.data.length===0)throw new Error("No lst coins found");let i=new El,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 Vi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await Wl(t.suiClient,o,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";import{mappedMmtV3Pool as ih}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var Ll=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 T=0;T<e.length;T+=1){let{poolId:w,tokenX:k,tokenY:x,isStable:D,currentSqrtPrice:P}=e[T],{id:q,isReverse:$}=ih[w]||{id:w,isReverse:!1},Et=zt(k.coinType)===zt(b);Et=$?!Et:Et;let Nt=$?x.coinType:k.coinType,Ot=$?k.coinType:x.coinType,Le=await pn({poolId:q,tokenX:k,tokenY:x,slippagePercentage:s,isTokenX:Et,suiClient:a.rpcClient,currentSqrtPrice:P}),Wt=a.Pool.swap(i,{objectId:q,tokenXType:Nt,tokenYType:Ot,isStable:D},d,l,Et,void 0,Le,!1);i.transferObjects([l],i.pure.address(o)),l=Wt,b=Et?Ot:Nt,d=i.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[l]})}i.transferObjects([l],i.pure.address(o))};var Hi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=rh.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:i,amountIn:s,address:l,slippage:d}=n,b=new sh;return await Ll(t,o,i,s,l,b,d),b}static fromData(t){return new a(t)}};var Xi=class a extends C{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await _l(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:ch.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=$i.fromData(e.intentionData);break;case"StakeXSui":t=Vi.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})}};var i4=oa.fromHelpers([new Ko,new Zo,new Uo,new ta,new fo,new Ti,new zi,new Wa,new xi,new Un,new Ha,new Za,new wn,new Ni,new oi]);export{i4 as appHelpers};
2
2
  //# sourceMappingURL=index.mjs.map