@msafe/sui-app-store 0.0.353 → 0.0.355

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 Ou=Object.create;var Ur=Object.defineProperty;var Pu=Object.getOwnPropertyDescriptor;var Ru=Object.getOwnPropertyNames;var Bu=Object.getPrototypeOf,Eu=Object.prototype.hasOwnProperty;var Nu=(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 Wu=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),zs=(a,e)=>{for(var t in e)Ur(a,t,{get:e[t],enumerable:!0})},_u=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ru(e))!Eu.call(a,o)&&o!==t&&Ur(a,o,{get:()=>e[o],enumerable:!(n=Pu(e,o))||n.enumerable});return a};var Lu=(a,e,t)=>(t=a!=null?Ou(Bu(a)):{},_u(e||!a||!a.__esModule?Ur(t,"default",{value:a,enumerable:!0}):t,a));var au=Wu((ou,Os)=>{"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=Nu("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,p){if(typeof r=="number")return this._initNumber(r,u,p);if(typeof r=="object")return this._initArray(r,u,p);u==="hex"&&(u=16),t(u===(u|0)&&u>=2&&u<=36),r=r.toString().replace(/\s+/g,"");var d=0;r[0]==="-"&&(d++,this.negative=1),d<r.length&&(u===16?this._parseHex(r,d,p):(this._parseBase(r,u,d),p==="le"&&this._initArray(this.toArray(),u,p)))},o.prototype._initNumber=function(r,u,p){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),p==="le"&&this._initArray(this.toArray(),u,p)},o.prototype._initArray=function(r,u,p){if(t(typeof r.length=="number"),r.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(r.length/3),this.words=new Array(this.length);for(var d=0;d<this.length;d++)this.words[d]=0;var h,T,I=0;if(p==="be")for(d=r.length-1,h=0;d>=0;d-=3)T=r[d]|r[d-1]<<8|r[d-2]<<16,this.words[h]|=T<<I&67108863,this.words[h+1]=T>>>26-I&67108863,I+=24,I>=26&&(I-=26,h++);else if(p==="le")for(d=0,h=0;d<r.length;d+=3)T=r[d]|r[d+1]<<8|r[d+2]<<16,this.words[h]|=T<<I&67108863,this.words[h+1]=T>>>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 c(y,r,u){var p=s(y,u);return u-1>=r&&(p|=s(y,u-1)<<4),p}o.prototype._parseHex=function(r,u,p){this.length=Math.ceil((r.length-u)/6),this.words=new Array(this.length);for(var d=0;d<this.length;d++)this.words[d]=0;var h=0,T=0,I;if(p==="be")for(d=r.length-1;d>=u;d-=2)I=c(r,u,d)<<h,this.words[T]|=I&67108863,h>=18?(h-=18,T+=1,this.words[T]|=I>>>26):h+=8;else{var f=r.length-u;for(d=f%2===0?u+1:u;d<r.length;d+=2)I=c(r,u,d)<<h,this.words[T]|=I&67108863,h>=18?(h-=18,T+=1,this.words[T]|=I>>>26):h+=8}this._strip()};function m(y,r,u,p){for(var d=0,h=0,T=Math.min(y.length,u),I=r;I<T;I++){var f=y.charCodeAt(I)-48;d*=p,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<p,"Invalid character"),d+=h}return d}o.prototype._parseBase=function(r,u,p){this.words=[0],this.length=1;for(var d=0,h=1;h<=67108863;h*=u)d++;d--,h=h/u|0;for(var T=r.length-p,I=T%d,f=Math.min(T,T-I)+p,l=0,g=p;g<f;g+=d)l=m(r,g,g+d,u),this.imuln(h),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(I!==0){var v=1;for(l=m(r,g,r.length,u),g=0;g<I;g++)v*=u;this.imuln(v),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this._strip()},o.prototype.copy=function(r){r.words=new Array(this.length);for(var u=0;u<this.length;u++)r.words[u]=this.words[u];r.length=this.length,r.negative=this.negative,r.red=this.red};function b(y,r){y.words=r.words,y.length=r.length,y.negative=r.negative,y.red=r.red}if(o.prototype._move=function(r){b(r,this)},o.prototype.clone=function(){var r=new o(null);return this.copy(r),r},o.prototype._expand=function(r){for(;this.length<r;)this.words[this.length++]=0;return this},o.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},o.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{o.prototype[Symbol.for("nodejs.util.inspect.custom")]=S}catch{o.prototype.inspect=S}else o.prototype.inspect=S;function S(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var w=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],C=[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],k=[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 p;if(r===16||r==="hex"){p="";for(var d=0,h=0,T=0;T<this.length;T++){var I=this.words[T],f=((I<<d|h)&16777215).toString(16);h=I>>>24-d&16777215,d+=2,d>=26&&(d-=26,T--),h!==0||T!==this.length-1?p=w[6-f.length]+f+p:p=f+p}for(h!==0&&(p=h.toString(16)+p);p.length%u!==0;)p="0"+p;return this.negative!==0&&(p="-"+p),p}if(r===(r|0)&&r>=2&&r<=36){var l=C[r],g=k[r];p="";var v=this.clone();for(v.negative=0;!v.isZero();){var O=v.modrn(g).toString(r);v=v.idivn(g),v.isZero()?p=O+p:p=w[l-O.length]+O+p}for(this.isZero()&&(p="0"+p);p.length%u!==0;)p="0"+p;return this.negative!==0&&(p="-"+p),p}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,p){this._strip();var d=this.byteLength(),h=p||Math.max(1,d);t(d<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var T=D(r,h),I=u==="le"?"LE":"BE";return this["_toArrayLike"+I](T,d),T},o.prototype._toArrayLikeLE=function(r,u){for(var p=0,d=0,h=0,T=0;h<this.length;h++){var I=this.words[h]<<T|d;r[p++]=I&255,p<r.length&&(r[p++]=I>>8&255),p<r.length&&(r[p++]=I>>16&255),T===6?(p<r.length&&(r[p++]=I>>24&255),d=0,T=0):(d=I>>>24,T+=2)}if(p<r.length)for(r[p++]=d;p<r.length;)r[p++]=0},o.prototype._toArrayLikeBE=function(r,u){for(var p=r.length-1,d=0,h=0,T=0;h<this.length;h++){var I=this.words[h]<<T|d;r[p--]=I&255,p>=0&&(r[p--]=I>>8&255),p>=0&&(r[p--]=I>>16&255),T===6?(p>=0&&(r[p--]=I>>24&255),d=0,T=0):(d=I>>>24,T+=2)}if(p>=0)for(r[p--]=d;p>=0;)r[p--]=0},Math.clz32?o.prototype._countBits=function(r){return 32-Math.clz32(r)}:o.prototype._countBits=function(r){var u=r,p=0;return u>=4096&&(p+=13,u>>>=13),u>=64&&(p+=7,u>>>=7),u>=8&&(p+=4,u>>>=4),u>=2&&(p+=2,u>>>=2),p+u},o.prototype._zeroBits=function(r){if(r===0)return 26;var u=r,p=0;return(u&8191)===0&&(p+=13,u>>>=13),(u&127)===0&&(p+=7,u>>>=7),(u&15)===0&&(p+=4,u>>>=4),(u&3)===0&&(p+=2,u>>>=2),(u&1)===0&&p++,p},o.prototype.bitLength=function(){var r=this.words[this.length-1],u=this._countBits(r);return(this.length-1)*26+u};function M(y){for(var r=new Array(y.bitLength()),u=0;u<r.length;u++){var p=u/26|0,d=u%26;r[u]=y.words[p]>>>d&1}return r}o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var r=0,u=0;u<this.length;u++){var p=this._zeroBits(this.words[u]);if(r+=p,p!==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 p=0;p<u.length;p++)this.words[p]=this.words[p]&r.words[p];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,p;this.length>r.length?(u=this,p=r):(u=r,p=this);for(var d=0;d<p.length;d++)this.words[d]=u.words[d]^p.words[d];if(this!==u)for(;d<u.length;d++)this.words[d]=u.words[d];return this.length=u.length,this._strip()},o.prototype.ixor=function(r){return t((this.negative|r.negative)===0),this.iuxor(r)},o.prototype.xor=function(r){return this.length>r.length?this.clone().ixor(r):r.clone().ixor(this)},o.prototype.uxor=function(r){return this.length>r.length?this.clone().iuxor(r):r.clone().iuxor(this)},o.prototype.inotn=function(r){t(typeof r=="number"&&r>=0);var u=Math.ceil(r/26)|0,p=r%26;this._expand(u),p>0&&u--;for(var d=0;d<u;d++)this.words[d]=~this.words[d]&67108863;return p>0&&(this.words[d]=~this.words[d]&67108863>>26-p),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 p=r/26|0,d=r%26;return this._expand(p+1),u?this.words[p]=this.words[p]|1<<d:this.words[p]=this.words[p]&~(1<<d),this._strip()},o.prototype.iadd=function(r){var u;if(this.negative!==0&&r.negative===0)return this.negative=0,u=this.isub(r),this.negative^=1,this._normSign();if(this.negative===0&&r.negative!==0)return r.negative=0,u=this.isub(r),r.negative=1,u._normSign();var p,d;this.length>r.length?(p=this,d=r):(p=r,d=this);for(var h=0,T=0;T<d.length;T++)u=(p.words[T]|0)+(d.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;for(;h!==0&&T<p.length;T++)u=(p.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;if(this.length=p.length,h!==0)this.words[this.length]=h,this.length++;else if(p!==this)for(;T<p.length;T++)this.words[T]=p.words[T];return this},o.prototype.add=function(r){var u;return r.negative!==0&&this.negative===0?(r.negative=0,u=this.sub(r),r.negative^=1,u):r.negative===0&&this.negative!==0?(this.negative=0,u=r.sub(this),this.negative=1,u):this.length>r.length?this.clone().iadd(r):r.clone().iadd(this)},o.prototype.isub=function(r){if(r.negative!==0){r.negative=0;var u=this.iadd(r);return r.negative=1,u._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(r),this.negative=1,this._normSign();var p=this.cmp(r);if(p===0)return this.negative=0,this.length=1,this.words[0]=0,this;var d,h;p>0?(d=this,h=r):(d=r,h=this);for(var T=0,I=0;I<h.length;I++)u=(d.words[I]|0)-(h.words[I]|0)+T,T=u>>26,this.words[I]=u&67108863;for(;T!==0&&I<d.length;I++)u=(d.words[I]|0)+T,T=u>>26,this.words[I]=u&67108863;if(T===0&&I<d.length&&d!==this)for(;I<d.length;I++)this.words[I]=d.words[I];return this.length=Math.max(this.length,I),d!==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 p=y.length+r.length|0;u.length=p,p=p-1|0;var d=y.words[0]|0,h=r.words[0]|0,T=d*h,I=T&67108863,f=T/67108864|0;u.words[0]=I;for(var l=1;l<p;l++){for(var g=f>>>26,v=f&67108863,O=Math.min(l,r.length-1),P=Math.max(0,l-y.length+1);P<=O;P++){var B=l-P|0;d=y.words[B]|0,h=r.words[P]|0,T=d*h+v,g+=T/67108864|0,v=T&67108863}u.words[l]=v|0,f=g|0}return f!==0?u.words[l]=f|0:u.length--,u._strip()}var U=function(r,u,p){var d=r.words,h=u.words,T=p.words,I=0,f,l,g,v=d[0]|0,O=v&8191,P=v>>>13,B=d[1]|0,L=B&8191,F=B>>>13,ue=d[2]|0,K=ue&8191,H=ue>>>13,Rs=d[3]|0,Y=Rs&8191,J=Rs>>>13,Bs=d[4]|0,Z=Bs&8191,tt=Bs>>>13,Es=d[5]|0,et=Es&8191,nt=Es>>>13,Ns=d[6]|0,ot=Ns&8191,at=Ns>>>13,Ws=d[7]|0,it=Ws&8191,rt=Ws>>>13,_s=d[8]|0,st=_s&8191,ct=_s>>>13,Ls=d[9]|0,lt=Ls&8191,ut=Ls>>>13,js=h[0]|0,pt=js&8191,mt=js>>>13,Us=h[1]|0,dt=Us&8191,ft=Us>>>13,qs=h[2]|0,ht=qs&8191,gt=qs>>>13,Fs=h[3]|0,yt=Fs&8191,bt=Fs>>>13,Ks=h[4]|0,Tt=Ks&8191,St=Ks>>>13,Gs=h[5]|0,wt=Gs&8191,It=Gs>>>13,Vs=h[6]|0,Ct=Vs&8191,xt=Vs>>>13,$s=h[7]|0,kt=$s&8191,Dt=$s>>>13,Hs=h[8]|0,vt=Hs&8191,At=Hs>>>13,Xs=h[9]|0,Mt=Xs&8191,Ot=Xs>>>13;p.negative=r.negative^u.negative,p.length=19,f=Math.imul(O,pt),l=Math.imul(O,mt),l=l+Math.imul(P,pt)|0,g=Math.imul(P,mt);var wr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(wr>>>26)|0,wr&=67108863,f=Math.imul(L,pt),l=Math.imul(L,mt),l=l+Math.imul(F,pt)|0,g=Math.imul(F,mt),f=f+Math.imul(O,dt)|0,l=l+Math.imul(O,ft)|0,l=l+Math.imul(P,dt)|0,g=g+Math.imul(P,ft)|0;var Ir=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Ir>>>26)|0,Ir&=67108863,f=Math.imul(K,pt),l=Math.imul(K,mt),l=l+Math.imul(H,pt)|0,g=Math.imul(H,mt),f=f+Math.imul(L,dt)|0,l=l+Math.imul(L,ft)|0,l=l+Math.imul(F,dt)|0,g=g+Math.imul(F,ft)|0,f=f+Math.imul(O,ht)|0,l=l+Math.imul(O,gt)|0,l=l+Math.imul(P,ht)|0,g=g+Math.imul(P,gt)|0;var Cr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Cr>>>26)|0,Cr&=67108863,f=Math.imul(Y,pt),l=Math.imul(Y,mt),l=l+Math.imul(J,pt)|0,g=Math.imul(J,mt),f=f+Math.imul(K,dt)|0,l=l+Math.imul(K,ft)|0,l=l+Math.imul(H,dt)|0,g=g+Math.imul(H,ft)|0,f=f+Math.imul(L,ht)|0,l=l+Math.imul(L,gt)|0,l=l+Math.imul(F,ht)|0,g=g+Math.imul(F,gt)|0,f=f+Math.imul(O,yt)|0,l=l+Math.imul(O,bt)|0,l=l+Math.imul(P,yt)|0,g=g+Math.imul(P,bt)|0;var xr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(xr>>>26)|0,xr&=67108863,f=Math.imul(Z,pt),l=Math.imul(Z,mt),l=l+Math.imul(tt,pt)|0,g=Math.imul(tt,mt),f=f+Math.imul(Y,dt)|0,l=l+Math.imul(Y,ft)|0,l=l+Math.imul(J,dt)|0,g=g+Math.imul(J,ft)|0,f=f+Math.imul(K,ht)|0,l=l+Math.imul(K,gt)|0,l=l+Math.imul(H,ht)|0,g=g+Math.imul(H,gt)|0,f=f+Math.imul(L,yt)|0,l=l+Math.imul(L,bt)|0,l=l+Math.imul(F,yt)|0,g=g+Math.imul(F,bt)|0,f=f+Math.imul(O,Tt)|0,l=l+Math.imul(O,St)|0,l=l+Math.imul(P,Tt)|0,g=g+Math.imul(P,St)|0;var kr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(kr>>>26)|0,kr&=67108863,f=Math.imul(et,pt),l=Math.imul(et,mt),l=l+Math.imul(nt,pt)|0,g=Math.imul(nt,mt),f=f+Math.imul(Z,dt)|0,l=l+Math.imul(Z,ft)|0,l=l+Math.imul(tt,dt)|0,g=g+Math.imul(tt,ft)|0,f=f+Math.imul(Y,ht)|0,l=l+Math.imul(Y,gt)|0,l=l+Math.imul(J,ht)|0,g=g+Math.imul(J,gt)|0,f=f+Math.imul(K,yt)|0,l=l+Math.imul(K,bt)|0,l=l+Math.imul(H,yt)|0,g=g+Math.imul(H,bt)|0,f=f+Math.imul(L,Tt)|0,l=l+Math.imul(L,St)|0,l=l+Math.imul(F,Tt)|0,g=g+Math.imul(F,St)|0,f=f+Math.imul(O,wt)|0,l=l+Math.imul(O,It)|0,l=l+Math.imul(P,wt)|0,g=g+Math.imul(P,It)|0;var Dr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,f=Math.imul(ot,pt),l=Math.imul(ot,mt),l=l+Math.imul(at,pt)|0,g=Math.imul(at,mt),f=f+Math.imul(et,dt)|0,l=l+Math.imul(et,ft)|0,l=l+Math.imul(nt,dt)|0,g=g+Math.imul(nt,ft)|0,f=f+Math.imul(Z,ht)|0,l=l+Math.imul(Z,gt)|0,l=l+Math.imul(tt,ht)|0,g=g+Math.imul(tt,gt)|0,f=f+Math.imul(Y,yt)|0,l=l+Math.imul(Y,bt)|0,l=l+Math.imul(J,yt)|0,g=g+Math.imul(J,bt)|0,f=f+Math.imul(K,Tt)|0,l=l+Math.imul(K,St)|0,l=l+Math.imul(H,Tt)|0,g=g+Math.imul(H,St)|0,f=f+Math.imul(L,wt)|0,l=l+Math.imul(L,It)|0,l=l+Math.imul(F,wt)|0,g=g+Math.imul(F,It)|0,f=f+Math.imul(O,Ct)|0,l=l+Math.imul(O,xt)|0,l=l+Math.imul(P,Ct)|0,g=g+Math.imul(P,xt)|0;var vr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(vr>>>26)|0,vr&=67108863,f=Math.imul(it,pt),l=Math.imul(it,mt),l=l+Math.imul(rt,pt)|0,g=Math.imul(rt,mt),f=f+Math.imul(ot,dt)|0,l=l+Math.imul(ot,ft)|0,l=l+Math.imul(at,dt)|0,g=g+Math.imul(at,ft)|0,f=f+Math.imul(et,ht)|0,l=l+Math.imul(et,gt)|0,l=l+Math.imul(nt,ht)|0,g=g+Math.imul(nt,gt)|0,f=f+Math.imul(Z,yt)|0,l=l+Math.imul(Z,bt)|0,l=l+Math.imul(tt,yt)|0,g=g+Math.imul(tt,bt)|0,f=f+Math.imul(Y,Tt)|0,l=l+Math.imul(Y,St)|0,l=l+Math.imul(J,Tt)|0,g=g+Math.imul(J,St)|0,f=f+Math.imul(K,wt)|0,l=l+Math.imul(K,It)|0,l=l+Math.imul(H,wt)|0,g=g+Math.imul(H,It)|0,f=f+Math.imul(L,Ct)|0,l=l+Math.imul(L,xt)|0,l=l+Math.imul(F,Ct)|0,g=g+Math.imul(F,xt)|0,f=f+Math.imul(O,kt)|0,l=l+Math.imul(O,Dt)|0,l=l+Math.imul(P,kt)|0,g=g+Math.imul(P,Dt)|0;var Ar=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Ar>>>26)|0,Ar&=67108863,f=Math.imul(st,pt),l=Math.imul(st,mt),l=l+Math.imul(ct,pt)|0,g=Math.imul(ct,mt),f=f+Math.imul(it,dt)|0,l=l+Math.imul(it,ft)|0,l=l+Math.imul(rt,dt)|0,g=g+Math.imul(rt,ft)|0,f=f+Math.imul(ot,ht)|0,l=l+Math.imul(ot,gt)|0,l=l+Math.imul(at,ht)|0,g=g+Math.imul(at,gt)|0,f=f+Math.imul(et,yt)|0,l=l+Math.imul(et,bt)|0,l=l+Math.imul(nt,yt)|0,g=g+Math.imul(nt,bt)|0,f=f+Math.imul(Z,Tt)|0,l=l+Math.imul(Z,St)|0,l=l+Math.imul(tt,Tt)|0,g=g+Math.imul(tt,St)|0,f=f+Math.imul(Y,wt)|0,l=l+Math.imul(Y,It)|0,l=l+Math.imul(J,wt)|0,g=g+Math.imul(J,It)|0,f=f+Math.imul(K,Ct)|0,l=l+Math.imul(K,xt)|0,l=l+Math.imul(H,Ct)|0,g=g+Math.imul(H,xt)|0,f=f+Math.imul(L,kt)|0,l=l+Math.imul(L,Dt)|0,l=l+Math.imul(F,kt)|0,g=g+Math.imul(F,Dt)|0,f=f+Math.imul(O,vt)|0,l=l+Math.imul(O,At)|0,l=l+Math.imul(P,vt)|0,g=g+Math.imul(P,At)|0;var Mr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Mr>>>26)|0,Mr&=67108863,f=Math.imul(lt,pt),l=Math.imul(lt,mt),l=l+Math.imul(ut,pt)|0,g=Math.imul(ut,mt),f=f+Math.imul(st,dt)|0,l=l+Math.imul(st,ft)|0,l=l+Math.imul(ct,dt)|0,g=g+Math.imul(ct,ft)|0,f=f+Math.imul(it,ht)|0,l=l+Math.imul(it,gt)|0,l=l+Math.imul(rt,ht)|0,g=g+Math.imul(rt,gt)|0,f=f+Math.imul(ot,yt)|0,l=l+Math.imul(ot,bt)|0,l=l+Math.imul(at,yt)|0,g=g+Math.imul(at,bt)|0,f=f+Math.imul(et,Tt)|0,l=l+Math.imul(et,St)|0,l=l+Math.imul(nt,Tt)|0,g=g+Math.imul(nt,St)|0,f=f+Math.imul(Z,wt)|0,l=l+Math.imul(Z,It)|0,l=l+Math.imul(tt,wt)|0,g=g+Math.imul(tt,It)|0,f=f+Math.imul(Y,Ct)|0,l=l+Math.imul(Y,xt)|0,l=l+Math.imul(J,Ct)|0,g=g+Math.imul(J,xt)|0,f=f+Math.imul(K,kt)|0,l=l+Math.imul(K,Dt)|0,l=l+Math.imul(H,kt)|0,g=g+Math.imul(H,Dt)|0,f=f+Math.imul(L,vt)|0,l=l+Math.imul(L,At)|0,l=l+Math.imul(F,vt)|0,g=g+Math.imul(F,At)|0,f=f+Math.imul(O,Mt)|0,l=l+Math.imul(O,Ot)|0,l=l+Math.imul(P,Mt)|0,g=g+Math.imul(P,Ot)|0;var Or=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Or>>>26)|0,Or&=67108863,f=Math.imul(lt,dt),l=Math.imul(lt,ft),l=l+Math.imul(ut,dt)|0,g=Math.imul(ut,ft),f=f+Math.imul(st,ht)|0,l=l+Math.imul(st,gt)|0,l=l+Math.imul(ct,ht)|0,g=g+Math.imul(ct,gt)|0,f=f+Math.imul(it,yt)|0,l=l+Math.imul(it,bt)|0,l=l+Math.imul(rt,yt)|0,g=g+Math.imul(rt,bt)|0,f=f+Math.imul(ot,Tt)|0,l=l+Math.imul(ot,St)|0,l=l+Math.imul(at,Tt)|0,g=g+Math.imul(at,St)|0,f=f+Math.imul(et,wt)|0,l=l+Math.imul(et,It)|0,l=l+Math.imul(nt,wt)|0,g=g+Math.imul(nt,It)|0,f=f+Math.imul(Z,Ct)|0,l=l+Math.imul(Z,xt)|0,l=l+Math.imul(tt,Ct)|0,g=g+Math.imul(tt,xt)|0,f=f+Math.imul(Y,kt)|0,l=l+Math.imul(Y,Dt)|0,l=l+Math.imul(J,kt)|0,g=g+Math.imul(J,Dt)|0,f=f+Math.imul(K,vt)|0,l=l+Math.imul(K,At)|0,l=l+Math.imul(H,vt)|0,g=g+Math.imul(H,At)|0,f=f+Math.imul(L,Mt)|0,l=l+Math.imul(L,Ot)|0,l=l+Math.imul(F,Mt)|0,g=g+Math.imul(F,Ot)|0;var Pr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Pr>>>26)|0,Pr&=67108863,f=Math.imul(lt,ht),l=Math.imul(lt,gt),l=l+Math.imul(ut,ht)|0,g=Math.imul(ut,gt),f=f+Math.imul(st,yt)|0,l=l+Math.imul(st,bt)|0,l=l+Math.imul(ct,yt)|0,g=g+Math.imul(ct,bt)|0,f=f+Math.imul(it,Tt)|0,l=l+Math.imul(it,St)|0,l=l+Math.imul(rt,Tt)|0,g=g+Math.imul(rt,St)|0,f=f+Math.imul(ot,wt)|0,l=l+Math.imul(ot,It)|0,l=l+Math.imul(at,wt)|0,g=g+Math.imul(at,It)|0,f=f+Math.imul(et,Ct)|0,l=l+Math.imul(et,xt)|0,l=l+Math.imul(nt,Ct)|0,g=g+Math.imul(nt,xt)|0,f=f+Math.imul(Z,kt)|0,l=l+Math.imul(Z,Dt)|0,l=l+Math.imul(tt,kt)|0,g=g+Math.imul(tt,Dt)|0,f=f+Math.imul(Y,vt)|0,l=l+Math.imul(Y,At)|0,l=l+Math.imul(J,vt)|0,g=g+Math.imul(J,At)|0,f=f+Math.imul(K,Mt)|0,l=l+Math.imul(K,Ot)|0,l=l+Math.imul(H,Mt)|0,g=g+Math.imul(H,Ot)|0;var Rr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Rr>>>26)|0,Rr&=67108863,f=Math.imul(lt,yt),l=Math.imul(lt,bt),l=l+Math.imul(ut,yt)|0,g=Math.imul(ut,bt),f=f+Math.imul(st,Tt)|0,l=l+Math.imul(st,St)|0,l=l+Math.imul(ct,Tt)|0,g=g+Math.imul(ct,St)|0,f=f+Math.imul(it,wt)|0,l=l+Math.imul(it,It)|0,l=l+Math.imul(rt,wt)|0,g=g+Math.imul(rt,It)|0,f=f+Math.imul(ot,Ct)|0,l=l+Math.imul(ot,xt)|0,l=l+Math.imul(at,Ct)|0,g=g+Math.imul(at,xt)|0,f=f+Math.imul(et,kt)|0,l=l+Math.imul(et,Dt)|0,l=l+Math.imul(nt,kt)|0,g=g+Math.imul(nt,Dt)|0,f=f+Math.imul(Z,vt)|0,l=l+Math.imul(Z,At)|0,l=l+Math.imul(tt,vt)|0,g=g+Math.imul(tt,At)|0,f=f+Math.imul(Y,Mt)|0,l=l+Math.imul(Y,Ot)|0,l=l+Math.imul(J,Mt)|0,g=g+Math.imul(J,Ot)|0;var Br=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Br>>>26)|0,Br&=67108863,f=Math.imul(lt,Tt),l=Math.imul(lt,St),l=l+Math.imul(ut,Tt)|0,g=Math.imul(ut,St),f=f+Math.imul(st,wt)|0,l=l+Math.imul(st,It)|0,l=l+Math.imul(ct,wt)|0,g=g+Math.imul(ct,It)|0,f=f+Math.imul(it,Ct)|0,l=l+Math.imul(it,xt)|0,l=l+Math.imul(rt,Ct)|0,g=g+Math.imul(rt,xt)|0,f=f+Math.imul(ot,kt)|0,l=l+Math.imul(ot,Dt)|0,l=l+Math.imul(at,kt)|0,g=g+Math.imul(at,Dt)|0,f=f+Math.imul(et,vt)|0,l=l+Math.imul(et,At)|0,l=l+Math.imul(nt,vt)|0,g=g+Math.imul(nt,At)|0,f=f+Math.imul(Z,Mt)|0,l=l+Math.imul(Z,Ot)|0,l=l+Math.imul(tt,Mt)|0,g=g+Math.imul(tt,Ot)|0;var Er=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Er>>>26)|0,Er&=67108863,f=Math.imul(lt,wt),l=Math.imul(lt,It),l=l+Math.imul(ut,wt)|0,g=Math.imul(ut,It),f=f+Math.imul(st,Ct)|0,l=l+Math.imul(st,xt)|0,l=l+Math.imul(ct,Ct)|0,g=g+Math.imul(ct,xt)|0,f=f+Math.imul(it,kt)|0,l=l+Math.imul(it,Dt)|0,l=l+Math.imul(rt,kt)|0,g=g+Math.imul(rt,Dt)|0,f=f+Math.imul(ot,vt)|0,l=l+Math.imul(ot,At)|0,l=l+Math.imul(at,vt)|0,g=g+Math.imul(at,At)|0,f=f+Math.imul(et,Mt)|0,l=l+Math.imul(et,Ot)|0,l=l+Math.imul(nt,Mt)|0,g=g+Math.imul(nt,Ot)|0;var Nr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Nr>>>26)|0,Nr&=67108863,f=Math.imul(lt,Ct),l=Math.imul(lt,xt),l=l+Math.imul(ut,Ct)|0,g=Math.imul(ut,xt),f=f+Math.imul(st,kt)|0,l=l+Math.imul(st,Dt)|0,l=l+Math.imul(ct,kt)|0,g=g+Math.imul(ct,Dt)|0,f=f+Math.imul(it,vt)|0,l=l+Math.imul(it,At)|0,l=l+Math.imul(rt,vt)|0,g=g+Math.imul(rt,At)|0,f=f+Math.imul(ot,Mt)|0,l=l+Math.imul(ot,Ot)|0,l=l+Math.imul(at,Mt)|0,g=g+Math.imul(at,Ot)|0;var Wr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,f=Math.imul(lt,kt),l=Math.imul(lt,Dt),l=l+Math.imul(ut,kt)|0,g=Math.imul(ut,Dt),f=f+Math.imul(st,vt)|0,l=l+Math.imul(st,At)|0,l=l+Math.imul(ct,vt)|0,g=g+Math.imul(ct,At)|0,f=f+Math.imul(it,Mt)|0,l=l+Math.imul(it,Ot)|0,l=l+Math.imul(rt,Mt)|0,g=g+Math.imul(rt,Ot)|0;var _r=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(_r>>>26)|0,_r&=67108863,f=Math.imul(lt,vt),l=Math.imul(lt,At),l=l+Math.imul(ut,vt)|0,g=Math.imul(ut,At),f=f+Math.imul(st,Mt)|0,l=l+Math.imul(st,Ot)|0,l=l+Math.imul(ct,Mt)|0,g=g+Math.imul(ct,Ot)|0;var Lr=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Lr>>>26)|0,Lr&=67108863,f=Math.imul(lt,Mt),l=Math.imul(lt,Ot),l=l+Math.imul(ut,Mt)|0,g=Math.imul(ut,Ot);var jr=(I+f|0)+((l&8191)<<13)|0;return I=(g+(l>>>13)|0)+(jr>>>26)|0,jr&=67108863,T[0]=wr,T[1]=Ir,T[2]=Cr,T[3]=xr,T[4]=kr,T[5]=Dr,T[6]=vr,T[7]=Ar,T[8]=Mr,T[9]=Or,T[10]=Pr,T[11]=Rr,T[12]=Br,T[13]=Er,T[14]=Nr,T[15]=Wr,T[16]=_r,T[17]=Lr,T[18]=jr,I!==0&&(T[19]=I,p.length++),p};Math.imul||(U=q);function G(y,r,u){u.negative=r.negative^y.negative,u.length=y.length+r.length;for(var p=0,d=0,h=0;h<u.length-1;h++){var T=d;d=0;for(var I=p&67108863,f=Math.min(h,r.length-1),l=Math.max(0,h-y.length+1);l<=f;l++){var g=h-l,v=y.words[g]|0,O=r.words[l]|0,P=v*O,B=P&67108863;T=T+(P/67108864|0)|0,B=B+I|0,I=B&67108863,T=T+(B>>>26)|0,d+=T>>>26,T&=67108863}u.words[h]=I,p=T,T=d}return p!==0?u.words[h]=p:u.length--,u._strip()}function $(y,r,u){return G(y,r,u)}o.prototype.mulTo=function(r,u){var p,d=this.length+r.length;return this.length===10&&r.length===10?p=U(this,r,u):d<63?p=q(this,r,u):d<1024?p=G(this,r,u):p=$(this,r,u),p};function E(y,r){this.x=y,this.y=r}E.prototype.makeRBT=function(r){for(var u=new Array(r),p=o.prototype._countBits(r)-1,d=0;d<r;d++)u[d]=this.revBin(d,p,r);return u},E.prototype.revBin=function(r,u,p){if(r===0||r===p-1)return r;for(var d=0,h=0;h<u;h++)d|=(r&1)<<u-h-1,r>>=1;return d},E.prototype.permute=function(r,u,p,d,h,T){for(var I=0;I<T;I++)d[I]=u[r[I]],h[I]=p[r[I]]},E.prototype.transform=function(r,u,p,d,h,T){this.permute(T,r,u,p,d,h);for(var I=1;I<h;I<<=1)for(var f=I<<1,l=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),v=0;v<h;v+=f)for(var O=l,P=g,B=0;B<I;B++){var L=p[v+B],F=d[v+B],ue=p[v+B+I],K=d[v+B+I],H=O*ue-P*K;K=O*K+P*ue,ue=H,p[v+B]=L+ue,d[v+B]=F+K,p[v+B+I]=L-ue,d[v+B+I]=F-K,B!==f&&(H=l*O-g*P,P=l*P+g*O,O=H)}},E.prototype.guessLen13b=function(r,u){var p=Math.max(u,r)|1,d=p&1,h=0;for(p=p/2|0;p;p=p>>>1)h++;return 1<<h+1+d},E.prototype.conjugate=function(r,u,p){if(!(p<=1))for(var d=0;d<p/2;d++){var h=r[d];r[d]=r[p-d-1],r[p-d-1]=h,h=u[d],u[d]=-u[p-d-1],u[p-d-1]=-h}},E.prototype.normalize13b=function(r,u){for(var p=0,d=0;d<u/2;d++){var h=Math.round(r[2*d+1]/u)*8192+Math.round(r[2*d]/u)+p;r[d]=h&67108863,h<67108864?p=0:p=h/67108864|0}return r},E.prototype.convert13b=function(r,u,p,d){for(var h=0,T=0;T<u;T++)h=h+(r[T]|0),p[2*T]=h&8191,h=h>>>13,p[2*T+1]=h&8191,h=h>>>13;for(T=2*u;T<d;++T)p[T]=0;t(h===0),t((h&-8192)===0)},E.prototype.stub=function(r){for(var u=new Array(r),p=0;p<r;p++)u[p]=0;return u},E.prototype.mulp=function(r,u,p){var d=2*this.guessLen13b(r.length,u.length),h=this.makeRBT(d),T=this.stub(d),I=new Array(d),f=new Array(d),l=new Array(d),g=new Array(d),v=new Array(d),O=new Array(d),P=p.words;P.length=d,this.convert13b(r.words,r.length,I,d),this.convert13b(u.words,u.length,g,d),this.transform(I,T,f,l,d,h),this.transform(g,T,v,O,d,h);for(var B=0;B<d;B++){var L=f[B]*v[B]-l[B]*O[B];l[B]=f[B]*O[B]+l[B]*v[B],f[B]=L}return this.conjugate(f,l,d),this.transform(f,l,P,T,d,h),this.conjugate(P,T,d),this.normalize13b(P,d),p.negative=r.negative^u.negative,p.length=r.length+u.length,p._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),$(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 p=0,d=0;d<this.length;d++){var h=(this.words[d]|0)*r,T=(h&67108863)+(p&67108863);p>>=26,p+=h/67108864|0,p+=T>>>26,this.words[d]=T&67108863}return p!==0&&(this.words[d]=p,this.length++),this.length=r===0?1:this.length,u?this.ineg():this},o.prototype.muln=function(r){return this.clone().imuln(r)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(r){var u=M(r);if(u.length===0)return new o(1);for(var p=this,d=0;d<u.length&&u[d]===0;d++,p=p.sqr());if(++d<u.length)for(var h=p.sqr();d<u.length;d++,h=h.sqr())u[d]!==0&&(p=p.mul(h));return p},o.prototype.iushln=function(r){t(typeof r=="number"&&r>=0);var u=r%26,p=(r-u)/26,d=67108863>>>26-u<<26-u,h;if(u!==0){var T=0;for(h=0;h<this.length;h++){var I=this.words[h]&d,f=(this.words[h]|0)-I<<u;this.words[h]=f|T,T=I>>>26-u}T&&(this.words[h]=T,this.length++)}if(p!==0){for(h=this.length-1;h>=0;h--)this.words[h+p]=this.words[h];for(h=0;h<p;h++)this.words[h]=0;this.length+=p}return this._strip()},o.prototype.ishln=function(r){return t(this.negative===0),this.iushln(r)},o.prototype.iushrn=function(r,u,p){t(typeof r=="number"&&r>=0);var d;u?d=(u-u%26)/26:d=0;var h=r%26,T=Math.min((r-h)/26,this.length),I=67108863^67108863>>>h<<h,f=p;if(d-=T,d=Math.max(0,d),f){for(var l=0;l<T;l++)f.words[l]=this.words[l];f.length=T}if(T!==0)if(this.length>T)for(this.length-=T,l=0;l<this.length;l++)this.words[l]=this.words[l+T];else this.words[0]=0,this.length=1;var g=0;for(l=this.length-1;l>=0&&(g!==0||l>=d);l--){var v=this.words[l]|0;this.words[l]=g<<26-h|v>>>h,g=v&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,p){return t(this.negative===0),this.iushrn(r,u,p)},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,p=(r-u)/26,d=1<<u;if(this.length<=p)return!1;var h=this.words[p];return!!(h&d)},o.prototype.imaskn=function(r){t(typeof r=="number"&&r>=0);var u=r%26,p=(r-u)/26;if(t(this.negative===0,"imaskn works only with positive numbers"),this.length<=p)return this;if(u!==0&&p++,this.length=Math.min(p,this.length),u!==0){var d=67108863^67108863>>>u<<u;this.words[this.length-1]&=d}return this.length===0&&(this.words[0]=0,this.length=1),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,p){var d=r.length+p,h;this._expand(d);var T,I=0;for(h=0;h<r.length;h++){T=(this.words[h+p]|0)+I;var f=(r.words[h]|0)*u;T-=f&67108863,I=(T>>26)-(f/67108864|0),this.words[h+p]=T&67108863}for(;h<this.length-p;h++)T=(this.words[h+p]|0)+I,I=T>>26,this.words[h+p]=T&67108863;if(I===0)return this._strip();for(t(I===-1),I=0,h=0;h<this.length;h++)T=-(this.words[h]|0)+I,I=T>>26,this.words[h]=T&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(r,u){var p=this.length-r.length,d=this.clone(),h=r,T=h.words[h.length-1]|0,I=this._countBits(T);p=26-I,p!==0&&(h=h.ushln(p),d.iushln(p),T=h.words[h.length-1]|0);var f=d.length-h.length,l;if(u!=="mod"){l=new o(null),l.length=f+1,l.words=new Array(l.length);for(var g=0;g<l.length;g++)l.words[g]=0}var v=d.clone()._ishlnsubmul(h,1,f);v.negative===0&&(d=v,l&&(l.words[f]=1));for(var O=f-1;O>=0;O--){var P=(d.words[h.length+O]|0)*67108864+(d.words[h.length+O-1]|0);for(P=Math.min(P/T|0,67108863),d._ishlnsubmul(h,P,O);d.negative!==0;)P--,d.negative=0,d._ishlnsubmul(h,1,O),d.isZero()||(d.negative^=1);l&&(l.words[O]=P)}return l&&l._strip(),d._strip(),u!=="div"&&p!==0&&d.iushrn(p),{div:l||null,mod:d}},o.prototype.divmod=function(r,u,p){if(t(!r.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var d,h,T;return this.negative!==0&&r.negative===0?(T=this.neg().divmod(r,u),u!=="mod"&&(d=T.div.neg()),u!=="div"&&(h=T.mod.neg(),p&&h.negative!==0&&h.iadd(r)),{div:d,mod:h}):this.negative===0&&r.negative!==0?(T=this.divmod(r.neg(),u),u!=="mod"&&(d=T.div.neg()),{div:d,mod:T.mod}):(this.negative&r.negative)!==0?(T=this.neg().divmod(r.neg(),u),u!=="div"&&(h=T.mod.neg(),p&&h.negative!==0&&h.isub(r)),{div:T.div,mod:h}):r.length>this.length||this.cmp(r)<0?{div:new o(0),mod:this}:r.length===1?u==="div"?{div:this.divn(r.words[0]),mod:null}:u==="mod"?{div:null,mod:new o(this.modrn(r.words[0]))}:{div:this.divn(r.words[0]),mod:new o(this.modrn(r.words[0]))}:this._wordDiv(r,u)},o.prototype.div=function(r){return this.divmod(r,"div",!1).div},o.prototype.mod=function(r){return this.divmod(r,"mod",!1).mod},o.prototype.umod=function(r){return this.divmod(r,"mod",!0).mod},o.prototype.divRound=function(r){var u=this.divmod(r);if(u.mod.isZero())return u.div;var p=u.div.negative!==0?u.mod.isub(r):u.mod,d=r.ushrn(1),h=r.andln(1),T=p.cmp(d);return T<0||h===1&&T===0?u.div:u.div.negative!==0?u.div.isubn(1):u.div.iaddn(1)},o.prototype.modrn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var p=(1<<26)%r,d=0,h=this.length-1;h>=0;h--)d=(p*d+(this.words[h]|0))%r;return u?-d:d},o.prototype.modn=function(r){return this.modrn(r)},o.prototype.idivn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var p=0,d=this.length-1;d>=0;d--){var h=(this.words[d]|0)+p*67108864;this.words[d]=h/r|0,p=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,p=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var d=new o(1),h=new o(0),T=new o(0),I=new o(1),f=0;u.isEven()&&p.isEven();)u.iushrn(1),p.iushrn(1),++f;for(var l=p.clone(),g=u.clone();!u.isZero();){for(var v=0,O=1;(u.words[0]&O)===0&&v<26;++v,O<<=1);if(v>0)for(u.iushrn(v);v-- >0;)(d.isOdd()||h.isOdd())&&(d.iadd(l),h.isub(g)),d.iushrn(1),h.iushrn(1);for(var P=0,B=1;(p.words[0]&B)===0&&P<26;++P,B<<=1);if(P>0)for(p.iushrn(P);P-- >0;)(T.isOdd()||I.isOdd())&&(T.iadd(l),I.isub(g)),T.iushrn(1),I.iushrn(1);u.cmp(p)>=0?(u.isub(p),d.isub(T),h.isub(I)):(p.isub(u),T.isub(d),I.isub(h))}return{a:T,b:I,gcd:p.iushln(f)}},o.prototype._invmp=function(r){t(r.negative===0),t(!r.isZero());var u=this,p=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var d=new o(1),h=new o(0),T=p.clone();u.cmpn(1)>0&&p.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;)d.isOdd()&&d.iadd(T),d.iushrn(1);for(var l=0,g=1;(p.words[0]&g)===0&&l<26;++l,g<<=1);if(l>0)for(p.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(T),h.iushrn(1);u.cmp(p)>=0?(u.isub(p),d.isub(h)):(p.isub(u),h.isub(d))}var v;return u.cmpn(1)===0?v=d:v=h,v.cmpn(0)<0&&v.iadd(r),v},o.prototype.gcd=function(r){if(this.isZero())return r.abs();if(r.isZero())return this.abs();var u=this.clone(),p=r.clone();u.negative=0,p.negative=0;for(var d=0;u.isEven()&&p.isEven();d++)u.iushrn(1),p.iushrn(1);do{for(;u.isEven();)u.iushrn(1);for(;p.isEven();)p.iushrn(1);var h=u.cmp(p);if(h<0){var T=u;u=p,p=T}else if(h===0||p.cmpn(1)===0)break;u.isub(p)}while(!0);return p.iushln(d)},o.prototype.invm=function(r){return this.egcd(r).a.umod(r)},o.prototype.isEven=function(){return(this.words[0]&1)===0},o.prototype.isOdd=function(){return(this.words[0]&1)===1},o.prototype.andln=function(r){return this.words[0]&r},o.prototype.bincn=function(r){t(typeof r=="number");var u=r%26,p=(r-u)/26,d=1<<u;if(this.length<=p)return this._expand(p+1),this.words[p]|=d,this;for(var h=d,T=p;h!==0&&T<this.length;T++){var I=this.words[T]|0;I+=h,h=I>>>26,I&=67108863,this.words[T]=I}return h!==0&&(this.words[T]=h,this.length++),this},o.prototype.isZero=function(){return this.length===1&&this.words[0]===0},o.prototype.cmpn=function(r){var u=r<0;if(this.negative!==0&&!u)return-1;if(this.negative===0&&u)return 1;this._strip();var p;if(this.length>1)p=1;else{u&&(r=-r),t(r<=67108863,"Number is too big");var d=this.words[0]|0;p=d===r?0:d<r?-1:1}return this.negative!==0?-p|0:p},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,p=this.length-1;p>=0;p--){var d=this.words[p]|0,h=r.words[p]|0;if(d!==h){d<h?u=-1:d>h&&(u=1);break}}return u},o.prototype.gtn=function(r){return this.cmpn(r)===1},o.prototype.gt=function(r){return this.cmp(r)===1},o.prototype.gten=function(r){return this.cmpn(r)>=0},o.prototype.gte=function(r){return this.cmp(r)>=0},o.prototype.ltn=function(r){return this.cmpn(r)===-1},o.prototype.lt=function(r){return this.cmp(r)===-1},o.prototype.lten=function(r){return this.cmpn(r)<=0},o.prototype.lte=function(r){return this.cmp(r)<=0},o.prototype.eqn=function(r){return this.cmpn(r)===0},o.prototype.eq=function(r){return this.cmp(r)===0},o.red=function(r){return new X(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 Nt(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()}Nt.prototype._tmp=function(){var r=new o(null);return r.words=new Array(Math.ceil(this.n/13)),r},Nt.prototype.ireduce=function(r){var u=r,p;do this.split(u,this.tmp),u=this.imulK(u),u=u.iadd(this.tmp),p=u.bitLength();while(p>this.n);var d=p<this.n?-1:u.ucmp(this.p);return d===0?(u.words[0]=0,u.length=1):d>0?u.isub(this.p):u.strip!==void 0?u.strip():u._strip(),u},Nt.prototype.split=function(r,u){r.iushrn(this.n,0,u)},Nt.prototype.imulK=function(r){return r.imul(this.k)};function oe(){Nt.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(oe,Nt),oe.prototype.split=function(r,u){for(var p=4194303,d=Math.min(r.length,9),h=0;h<d;h++)u.words[h]=r.words[h];if(u.length=d,r.length<=9){r.words[0]=0,r.length=1;return}var T=r.words[9];for(u.words[u.length++]=T&p,h=10;h<r.length;h++){var I=r.words[h]|0;r.words[h-10]=(I&p)<<4|T>>>22,T=I}T>>>=22,r.words[h-10]=T,T===0&&r.length>10?r.length-=10:r.length-=9},oe.prototype.imulK=function(r){r.words[r.length]=0,r.words[r.length+1]=0,r.length+=2;for(var u=0,p=0;p<r.length;p++){var d=r.words[p]|0;u+=d*977,r.words[p]=u&67108863,u=d*64+(u/67108864|0)}return r.words[r.length-1]===0&&(r.length--,r.words[r.length-1]===0&&r.length--),r};function Dn(){Nt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(Dn,Nt);function Qe(){Nt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(Qe,Nt);function Me(){Nt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Me,Nt),Me.prototype.imulK=function(r){for(var u=0,p=0;p<r.length;p++){var d=(r.words[p]|0)*19+u,h=d&67108863;d>>>=26,r.words[p]=h,u=d}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 oe;else if(r==="p224")u=new Dn;else if(r==="p192")u=new Qe;else if(r==="p25519")u=new Me;else throw new Error("Unknown prime "+r);return le[r]=u,u};function X(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}X.prototype._verify1=function(r){t(r.negative===0,"red works only with positives"),t(r.red,"red works only with red numbers")},X.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")},X.prototype.imod=function(r){return this.prime?this.prime.ireduce(r)._forceRed(this):(b(r,r.umod(this.m)._forceRed(this)),r)},X.prototype.neg=function(r){return r.isZero()?r.clone():this.m.sub(r)._forceRed(this)},X.prototype.add=function(r,u){this._verify2(r,u);var p=r.add(u);return p.cmp(this.m)>=0&&p.isub(this.m),p._forceRed(this)},X.prototype.iadd=function(r,u){this._verify2(r,u);var p=r.iadd(u);return p.cmp(this.m)>=0&&p.isub(this.m),p},X.prototype.sub=function(r,u){this._verify2(r,u);var p=r.sub(u);return p.cmpn(0)<0&&p.iadd(this.m),p._forceRed(this)},X.prototype.isub=function(r,u){this._verify2(r,u);var p=r.isub(u);return p.cmpn(0)<0&&p.iadd(this.m),p},X.prototype.shl=function(r,u){return this._verify1(r),this.imod(r.ushln(u))},X.prototype.imul=function(r,u){return this._verify2(r,u),this.imod(r.imul(u))},X.prototype.mul=function(r,u){return this._verify2(r,u),this.imod(r.mul(u))},X.prototype.isqr=function(r){return this.imul(r,r.clone())},X.prototype.sqr=function(r){return this.mul(r,r)},X.prototype.sqrt=function(r){if(r.isZero())return r.clone();var u=this.m.andln(3);if(t(u%2===1),u===3){var p=this.m.add(new o(1)).iushrn(2);return this.pow(r,p)}for(var d=this.m.subn(1),h=0;!d.isZero()&&d.andln(1)===0;)h++,d.iushrn(1);t(!d.isZero());var T=new o(1).toRed(this),I=T.redNeg(),f=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);this.pow(l,f).cmp(I)!==0;)l.redIAdd(I);for(var g=this.pow(l,d),v=this.pow(r,d.addn(1).iushrn(1)),O=this.pow(r,d),P=h;O.cmp(T)!==0;){for(var B=O,L=0;B.cmp(T)!==0;L++)B=B.redSqr();t(L<P);var F=this.pow(g,new o(1).iushln(P-L-1));v=v.redMul(F),g=F.redSqr(),O=O.redMul(g),P=L}return v},X.prototype.invm=function(r){var u=r._invmp(this.m);return u.negative!==0?(u.negative=0,this.imod(u).redNeg()):this.imod(u)},X.prototype.pow=function(r,u){if(u.isZero())return new o(1).toRed(this);if(u.cmpn(1)===0)return r.clone();var p=4,d=new Array(1<<p);d[0]=new o(1).toRed(this),d[1]=r;for(var h=2;h<d.length;h++)d[h]=this.mul(d[h-1],r);var T=d[0],I=0,f=0,l=u.bitLength()%26;for(l===0&&(l=26),h=u.length-1;h>=0;h--){for(var g=u.words[h],v=l-1;v>=0;v--){var O=g>>v&1;if(T!==d[0]&&(T=this.sqr(T)),O===0&&I===0){f=0;continue}I<<=1,I|=O,f++,!(f!==p&&(h!==0||v!==0))&&(T=this.mul(T,d[I]),f=0,I=0)}l=26}return T},X.prototype.convertTo=function(r){var u=r.umod(this.m);return u===r?u.clone():u},X.prototype.convertFrom=function(r){var u=r.clone();return u.red=null,u},o.mont=function(r){return new Se(r)};function Se(y){X.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(Se,X),Se.prototype.convertTo=function(r){return this.imod(r.ushln(this.shift))},Se.prototype.convertFrom=function(r){var u=this.imod(r.mul(this.rinv));return u.red=null,u},Se.prototype.imul=function(r,u){if(r.isZero()||u.isZero())return r.words[0]=0,r.length=1,r;var p=r.imul(u),d=p.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=p.isub(d).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},Se.prototype.mul=function(r,u){if(r.isZero()||u.isZero())return new o(0)._forceRed(this);var p=r.mul(u),d=p.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=p.isub(d).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},Se.prototype.invm=function(r){var u=this.imod(r._invmp(this.m).mul(this.r2));return u._forceRed(this)}})(typeof Os>"u"||Os,ou)});import{TransactionType as zu}from"@msafe/sui3-utils";import{coinsList as Uu,poolIdPoolNameMap as qu,poolInfo as Qs,singleAssetPoolCoinMap as Fu}from"@alphafi/alphafi-sdk";import{TransactionType as Ye}from"@msafe/sui3-utils";import{bcs as vn,fromBase64 as An}from"@mysten/bcs";var Mn=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=qu[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&&Qs[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&Qs[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=vn.u64().parse(An(t)):t.length===24?n=vn.u128().parse(An(t)):t.length===44?n=vn.u256().parse(An(t)):n=vn.u64().parse(An(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:Ye.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}=Fu[e],{expo:s}=Uu[i];n=Math.floor(Number(n)/10**(9-s)).toString()}return{txType:Ye.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:Ye.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:Ye.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:Ye.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as Gu}from"@alphafi/alphafi-sdk";import Ku from"sort-keys-recursive";var x=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Ku(this.data))}};var On=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t;return await Gu(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as Vu}from"@alphafi/alphafi-sdk";var Pn=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i,isAmountA:s}=this.data;return await Vu(o,n.address,i,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as $u}from"@alphafi/alphafi-sdk";var Rn=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i}=this.data;return await $u(o,n.address,i)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as Hu}from"@alphafi/alphafi-sdk";var Bn=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:i}=this.data;return await Hu(i,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as Xu}from"@alphafi/alphafi-sdk";var En=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:i}=this.data;return await Xu(i,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new a(t)}};var Nn=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n,account:o}=e,i=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("AlphaFiHelper Sim result - ",i);let c=new Mn(t,i).decode();return{txType:zu.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=Rn.fromData(e.intentionData);break;case"depositDoubleAsset":n=Pn.fromData(e.intentionData);break;case"withdraw":n=Bn.fromData(e.intentionData);break;case"withdrawAlpha":n=En.fromData(e.intentionData);break;case"claimReward":n=On.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as bp}from"@msafe/sui3-utils";import{TransactionType as Ft}from"@msafe/sui3-utils";import{bcs as qr}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as Fr}from"bucket-protocol-sdk";var Wn=class{constructor(e){this.transaction=e}transaction;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(Fr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Fr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(Fr,"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:Ft.Other,type:"psm",intentionData:{coinType:e,amount:n,buckToCoin:t}}}decodeBorrow(){let e="",t="0",n,o=this.getStrapId(),i="0",s=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(s.$kind==="Input"&&(i=this.getPureInputU64(s.Input)),this.getMoveCallCommand("high_top_up")){let c=this.getMoveCallCommand("high_top_up").MoveCall;[e]=c.typeArguments;let m=c.arguments[1];m.$kind==="Input"&&(t=this.getPureInputU64(m.Input));let b=c.arguments[3];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow")){let c=this.getMoveCallCommand("high_borrow").MoveCall;[e]=c.typeArguments;let m=c.arguments[4];m.$kind==="Input"&&(t=this.getPureInputU64(m.Input));let b=c.arguments[5];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let c=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=c.typeArguments;let m=c.arguments[5];m.$kind==="Input"&&(t=this.getPureInputU64(m.Input));let b=c.arguments[6];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}return{txType:Ft.Other,type:"borrow",intentionData:{collateralType:e,collateralAmount:i,borrowAmount:t,insertionPlace:n,strapId:o}}}decodeRepay(){let e="",t="0",n="0",i,s=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))[e]=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments;else if(this.getMoveCallCommand("fully_repay_with_strap"))[e]=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments;else if(this.getMoveCallCommand("repay_and_withdraw")){let c=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=c.typeArguments;let m=c.arguments[4];m.$kind==="Input"&&(n=this.getPureInputU64(m.Input));let b=c.arguments[5];if(b.$kind==="Input"){let w=this.getPureAddresses(b.Input);w.length===1&&([i]=w)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let c=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=c.typeArguments;let m=c.arguments[5];m.$kind==="Input"&&(n=this.getPureInputU64(m.Input));let b=c.arguments[6];if(b.$kind==="Input"){let w=this.getPureAddresses(b.Input);w.length===1&&([i]=w)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.Input))}return{txType:Ft.Other,type:"repay",intentionData:{collateralType:e,repayAmount:t,withdrawAmount:n,isSurplus:!1,insertionPlace:i,strapId:s}}}decodeWithdraw(){let e="",t="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let i=this.getMoveCallCommand("withdraw_with_strap").MoveCall;[e]=i.typeArguments;let s=i.arguments[4];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let c=i.arguments[5];if(c.$kind==="Input"){let m=this.getPureAddresses(c.Input);m.length===1&&([n]=m)}}else if(this.getMoveCallCommand("withdraw")){let i=this.getMoveCallCommand("withdraw").MoveCall;[e]=i.typeArguments;let s=i.arguments[3];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let c=i.arguments[4];if(c.$kind==="Input"){let m=this.getPureAddresses(c.Input);m.length===1&&([n]=m)}}return{txType:Ft.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:Ft.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:Ft.Other,type:"sbuck-deposit",intentionData:{coinType:t,amount:n,isStake:s}}}decodeSBUCKUnstake(){let e="0",t=this.isSBUCKStakeTransaction();if(t){let m=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];m.$kind==="Input"&&(e=this.getPureInputU64(m.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let c=0;c<o.length;c++){let m=o[c];n.push("")}else{let c=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let m=0;m<c.length;m++){let S=c[m].MoveCall.arguments[2];if(S.$kind==="Input"){let{objectId:w}=this.inputs[S.Input].UnresolvedObject;n.push(w)}}}let i=this.isSBUCKWithdrawTransaction(),s={stakeProofs:n,amount:e,isStake:t,toBuck:i};return console.log("Decoder.decodeSBUCKUnstake",s),{txType:Ft.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:Ft.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:Ft.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:Ft.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:Ft.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:Ft.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:Ft.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 qr.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return qr.vector(qr.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as Zu}from"@msafe/sui3-utils";import{Transaction as Yu}from"@mysten/sui/transactions";import{buildPsmTx as Ju}from"bucket-protocol-sdk";import{BucketClient as Qu}from"bucket-protocol-sdk";var Wt=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new Qu(t,e.address)};var Ys=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:i}=a,s=new Yu,c=Wt(t,e);return await Ju(c,s,n,o,i,e.address),s};var Ln=class a extends x{constructor(t){super(t);this.data=t}data;txType=Zu.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await Ys(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ap}from"@msafe/sui3-utils";import{Transaction as jn}from"@mysten/sui/transactions";import{buildBorrowTx as tp,buildCloseTx as ep,buildRepayTx as np,buildWithdrawTx as op}from"bucket-protocol-sdk";var Js=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:i,insertionPlace:s,strapId:c}=a,m=new jn,b=Wt(t,e);return await tp(b,m,n,o,i,e.address,s,c),m},Zs=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:i,strapId:s}=a,c=new jn,m=Wt(t,e);return await op(m,c,n,o,e.address,i,s),c},tc=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:i,isSurplus:s,insertionPlace:c,strapId:m}=a,b=new jn,S=Wt(t,e);return await np(S,b,n,o,i,e.address,s,c,m),b},ec=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:i}=a,s=new jn,c=Wt(t,e);return await ep(c,s,n,o,i),s};var Un=class a extends x{constructor(t){super(t);this.data=t}data;txType=ap.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await Js(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ip}from"@msafe/sui3-utils";var qn=class a extends x{constructor(t){super(t);this.data=t}data;txType=ip.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await tc(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as rp}from"@msafe/sui3-utils";var Fn=class a extends x{constructor(t){super(t);this.data=t}data;txType=rp.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await Zs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as sp}from"@msafe/sui3-utils";var Kn=class a extends x{constructor(t){super(t);this.data=t}data;txType=sp.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await ec(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as zn}from"@msafe/sui3-utils";import{Transaction as Gn}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as cp,buildSBUCKDepositTx as lp,buildSBUCKUnstakeTx as up,buildSBUCKWithdrawTx as pp}from"bucket-protocol-sdk";var nc=async(a,e,t)=>{let{coinType:n,amount:o,isStake:i}=a,s=new Gn,c=Wt(t,e);return await lp(c,s,n,o,e.address,i),s},oc=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:i,toBuck:s}=a,c=new Gn,m=Wt(t,e);return await up(m,c,n,o,e.address,i,s),c},ac=async(a,e,t)=>{let{amount:n}=a,o=new Gn,i=Wt(t,e);return await pp(i,o,n,e.address),o},ic=async(a,e,t)=>{let{stakeProofs:n}=a,o=new Gn,i=Wt(t,e);return await cp(i,o,n,e.address),o};var Vn=class a extends x{constructor(t){super(t);this.data=t}data;txType=zn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await nc(this.data,n,o)}static fromData(t){return new a(t)}},$n=class a extends x{constructor(t){super(t);this.data=t}data;txType=zn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await oc(this.data,n,o)}static fromData(t){return new a(t)}},Hn=class a extends x{constructor(t){super(t);this.data=t}data;txType=zn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await ac(this.data,n,o)}static fromData(t){return new a(t)}},Xn=class a extends x{constructor(t){super(t);this.data=t}data;txType=zn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await ic(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Gr}from"@msafe/sui3-utils";import{Transaction as Kr}from"@mysten/sui/transactions";import{buildTankClaimTx as mp,buildTankDepositTx as dp,buildTankWithdrawTx as fp}from"bucket-protocol-sdk";var rc=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Kr,s=Wt(t,e);return await dp(s,i,n,o,e.address),i},sc=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Kr,s=Wt(t,e);return await fp(s,i,n,o,e.address),i},cc=async(a,e,t)=>{let{coinType:n}=a,o=new Kr,i=Wt(t,e);return await mp(i,o,n,e.address),o};import{Transaction as hp}from"@mysten/sui/transactions";import{buildLockedClaimTx as gp}from"bucket-protocol-sdk";var lc=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,i=new hp,s=Wt(t,e);return await gp(s,i,n,o,e.address),i};var Qn=class a extends x{constructor(t){super(t);this.data=t}data;txType=Gr.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await rc(this.data,n,o)}static fromData(t){return new a(t)}},Yn=class a extends x{constructor(t){super(t);this.data=t}data;txType=Gr.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await sc(this.data,n,o)}static fromData(t){return new a(t)}},Jn=class a extends x{constructor(t){super(t);this.data=t}data;txType=Gr.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await cc(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as yp}from"@msafe/sui3-utils";var Zn=class a extends x{constructor(t){super(t);this.data=t}data;txType=yp.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await lc(this.data,n,o)}static fromData(t){return new a(t)}};var to=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new Wn(t).decode();return{txType:bp.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=Ln.fromData(e.intentionData);break;case"borrow":i=Un.fromData(e.intentionData);break;case"withdraw":i=Fn.fromData(e.intentionData);break;case"repay":i=qn.fromData(e.intentionData);break;case"close":i=Kn.fromData(e.intentionData);break;case"tank-deposit":i=Qn.fromData(e.intentionData);break;case"tank-withdraw":i=Yn.fromData(e.intentionData);break;case"tank-claim":i=Jn.fromData(e.intentionData);break;case"sbuck-deposit":i=Vn.fromData(e.intentionData);break;case"sbuck-unstake":i=$n.fromData(e.intentionData);break;case"sbuck-withdraw":i=Hn.fromData(e.intentionData);break;case"sbuck-claim":i=Xn.fromData(e.intentionData);break;case"lock-claim":i=Zn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as nm}from"@msafe/sui3-utils";import{TransactionType as Dp}from"@msafe/sui3-utils";import{SuiGrpcClient as Cp,isSuiGrpcClient as Fb}from"@mysten/sui/grpc";import{Transaction as xp}from"@mysten/sui/transactions";import{SuiGrpcClient as Tp}from"@mysten/sui/grpc";import{Transaction as Sp}from"@mysten/sui/transactions";var wp={"sui:mainnet":"mainnet","sui:testnet":"testnet","sui:devnet":"devnet","sui:localnet":"localnet"};function eo(a){return wp[a]}function Lt(a){switch(a){case"mainnet":return"https://fullnode.mainnet.sui.io:443";case"testnet":return"https://fullnode.testnet.sui.io:443";case"devnet":return"https://fullnode.devnet.sui.io:443";case"localnet":return"http://127.0.0.1:9000";default:throw new Error(`Unknown network: ${a}`)}}function Ip(a){return Object.assign(a,{async getCoins(e){let t=await a.listCoins({owner:e.owner,coinType:e.coinType,cursor:e.cursor??void 0,limit:e.limit});return{data:t.objects.map(n=>({coinType:n.type,coinObjectId:n.objectId,version:n.version,digest:n.digest,balance:n.balance,previousTransaction:"0x0"})),hasNextPage:t.hasNextPage,nextCursor:t.cursor}},async devInspectTransactionBlock(e){let t=typeof e.transactionBlock=="object"&&e.transactionBlock!==null&&"setSenderIfNotSet"in e.transactionBlock?e.transactionBlock:Sp.from(e.transactionBlock);t.setSenderIfNotSet(e.sender);let n=await a.simulateTransaction({transaction:t,checksEnabled:!1,include:{effects:!0,events:!0,commandResults:!0}}),o=n.$kind==="Transaction"?n.Transaction:n.FailedTransaction,i=o.effects?.status?.success??!1;return{error:i?null:o.effects?.status?.error?.message??"Simulation failed",effects:{status:{status:i?"success":"failure",error:o.effects?.status?.error?.message}},events:(o.events??[]).map(s=>({type:s.eventType,parsedJson:s.json,packageId:s.packageId,transactionModule:s.module,sender:s.sender,bcs:"",id:{txDigest:"",eventSeq:"0"}})),results:n.commandResults?.map(s=>({returnValues:s.returnValues.map(c=>[Array.from(c.bcs),"u64"])}))}}})}function Je(a,e){let t=eo(a),n=new Tp({network:t,baseUrl:e??Lt(t)});return Ip(n)}var Oe=class extends Cp{constructor(e){let t=e.baseUrl??e.url??Lt(e.network);super({network:e.network,baseUrl:t})}async getCoins(e){let t=await this.listCoins({owner:e.owner,coinType:e.coinType,cursor:e.cursor??void 0,limit:e.limit});return{data:t.objects.map(n=>({coinType:n.type,coinObjectId:n.objectId,version:n.version,digest:n.digest,balance:n.balance,previousTransaction:"0x0"})),hasNextPage:t.hasNextPage,nextCursor:t.cursor}}async devInspectTransactionBlock(e){let t=typeof e.transactionBlock=="object"&&e.transactionBlock!==null&&"setSenderIfNotSet"in e.transactionBlock?e.transactionBlock:xp.from(e.transactionBlock);t.setSenderIfNotSet(e.sender);let n=await this.simulateTransaction({transaction:t,checksEnabled:!1,include:{effects:!0,events:!0,commandResults:!0}}),o=n.$kind==="Transaction"?n.Transaction:n.FailedTransaction,i=o.effects?.status?.success??!1;return{error:i?null:o.effects?.status?.error?.message??"Simulation failed",effects:{status:{status:i?"success":"failure",error:o.effects?.status?.error?.message}},events:(o.events??[]).map(s=>({type:s.eventType,parsedJson:s.json,packageId:s.packageId,transactionModule:s.module,sender:s.sender,bcs:"",id:{txDigest:"",eventSeq:"0"}})),results:n.commandResults?.map(s=>({returnValues:s.returnValues.map(c=>[Array.from(c.bcs),"u64"])}))}}};var Yt=async(a,e)=>{let{CetusClmmSDK:t}=await import("@cetusprotocol/sui-clmm-sdk"),n=t.createSDK({env:"mainnet",full_rpc_url:Lt("mainnet")});return n.setSenderAddress(e.address),n},Kt=async(a,e)=>{let{CetusFarmsSDK:t}=await import("@cetusprotocol/farms-sdk"),n=t.createSDK({env:"mainnet",full_rpc_url:Lt("mainnet")});return n.setSenderAddress(e.address),n},kp="https://api-sui.cetus.zone/router_v2/find_routes",uc=async(a,e)=>{let{AggregatorClient:t,Env:n}=await import("@cetusprotocol/aggregator-sdk"),o=new Oe({baseUrl:Lt("mainnet"),network:"mainnet"});return new t({endpoint:kp,signer:e.address,client:o,env:n.Mainnet})},Ze=async(a,e)=>{let{CetusVaultsSDK:t}=await import("@cetusprotocol/vaults-sdk"),n=t.createSDK({env:"mainnet",full_rpc_url:Lt("mainnet")});return n.setSenderAddress(e.address),n},Pe=async(a,e)=>{let{CetusXcetusSDK:t}=await import("@cetusprotocol/xcetus-sdk"),n=t.createSDK({env:"mainnet",full_rpc_url:Lt("mainnet")});return n.setSenderAddress(e.address),n};var pc=async(a,e,t)=>await(await Yt(t,e)).Pool.createPoolPayload(a),mc=async(a,e,t)=>await(await Yt(t,e)).Position.createAddLiquidityFixTokenPayload(a?.parameter),dc=async(a,e,t)=>await(await Yt(t,e)).Position.createAddLiquidityFixTokenPayload(a?.parameter),fc=async(a,e,t)=>await(await Yt(t,e)).Position.closePositionPayload(a),hc=async(a,e,t)=>await(await Yt(t,e)).Position.removeLiquidityPayload(a),gc=async(a,e,t)=>await(await Yt(t,e)).Rewarder.collectRewarderPayload(a);var no=class a extends x{constructor(t){super(t);this.data=t}data;txType=Dp.Other;txSubType="OpenAndAddLiquidity";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 vp}from"@msafe/sui3-utils";var oo=class a extends x{constructor(t){super(t);this.data=t}data;txType=vp.Other;txSubType="ClaimFeeAndMining";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await gc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ap}from"@msafe/sui3-utils";var ao=class a extends x{constructor(t){super(t);this.data=t}data;txType=Ap.Other;txSubType="CreatePool";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 Mp}from"@msafe/sui3-utils";var io=class a extends x{constructor(t){super(t);this.data=t}data;txType=Mp.Other;txSubType="DecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await hc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Op}from"@msafe/sui3-utils";var yc=async(a,e,t)=>await(await Kt(t,e)).Farms.openPositionAddLiquidityStakePayload(a),bc=async(a,e,t)=>await(await Kt(t,e)).Farms.addLiquidityFixCoinPayload(a),Tc=async(a,e,t)=>await(await Kt(t,e)).Farms.removeLiquidityPayload(a);var Sc=async(a,e,t)=>await(await Kt(t,e)).Farms.removeLiquidityPayload(a),wc=async(a,e,t)=>await(await Kt(t,e)).Farms.claimFeeAndClmmReward(a),Ic=async(a,e,t)=>await(await Kt(t,e)).Farms.harvestPayload(a),Cc=async(a,e,t)=>{let n=await Kt(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},xc=async(a,e,t)=>await(await Kt(t,e)).Farms.depositPayload(a),kc=async(a,e,t)=>await(await Kt(t,e)).Farms.withdrawPayload(a);var ro=class a extends x{constructor(t){super(t);this.data=t}data;txType=Op.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await yc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Pp}from"@msafe/sui3-utils";var so=class a extends x{constructor(t){super(t);this.data=t}data;txType=Pp.Other;txSubType="FarmingBatchHarvest";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Cc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Rp}from"@msafe/sui3-utils";var co=class a extends x{constructor(t){super(t);this.data=t}data;txType=Rp.Other;txSubType="FarmingClaimFeeAndReward";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await wc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bp}from"@msafe/sui3-utils";var lo=class a extends x{constructor(t){super(t);this.data=t}data;txType=Bp.Other;txSubType="FarmingDecreaseLiquidity";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 Ep}from"@msafe/sui3-utils";var uo=class a extends x{constructor(t){super(t);this.data=t}data;txType=Ep.Other;txSubType="FarmingHarvest";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 Np}from"@msafe/sui3-utils";var po=class a extends x{constructor(t){super(t);this.data=t}data;txType=Np.Other;txSubType="FarmingIncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await bc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wp}from"@msafe/sui3-utils";var mo=class a extends x{constructor(t){super(t);this.data=t}data;txType=Wp.Other;txSubType="FarmingRemoveLiquidity";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 _p}from"@msafe/sui3-utils";var fo=class a extends x{constructor(t){super(t);this.data=t}data;txType=_p.Other;txSubType="FarmingStake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await xc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Lp}from"@msafe/sui3-utils";var ho=class a extends x{constructor(t){super(t);this.data=t}data;txType=Lp.Other;txSubType="FarmingUnstake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await kc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as jp}from"@msafe/sui3-utils";var go=class a extends x{constructor(t){super(t);this.data=t}data;txType=jp.Other;txSubType="IncreaseLiquidity";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 Kp}from"@msafe/sui3-utils";var yo=async()=>{let{Transaction:a}=await import("@mysten/sui/transactions");return new a},Up=async(a,e,t)=>{let n=await Ze(t,e),o=await yo();return o.setSender(e.address),n.Vest.buildRedeemPayload(a.params,o),o},qp=async(a,e)=>{let{default:t,vaults_mainnet:n}=await import("haedal-vault-sdk"),o=new t(n);o.senderAddress=e.address;let i=await yo();return i.setSender(e.address),await o?.Vest.buildRedeemPayload(a.params,i),i},Dc=async(a,e,t)=>{let n=await Yt(t,e),o=await yo();return n?.Vest.buildRedeemPayload(a.params,o),o},Fp=async(a,e,t)=>{let n=await Yt(t,e),o=await Kt(t,e),i=await yo(),s=await o.Farms.withdrawReturnPayload(a.withdrawParams,i);return n.Vest.buildRedeemPayload(a.redeemParms.map(c=>({...c,clmm_position_id:s})),i),o.Farms.depositPayload({...a.depositParams,clmm_position_id:s},i),i},vc=async(a,e,t)=>a.type==="clmm"?Dc(a,e,t):a.type==="farms"?Fp(a,e,t):a.type==="vaults"?Up(a,e,t):a.type==="haedalVaults"?qp(a,e):Dc(a,e,t);var bo=class a extends x{constructor(t){super(t);this.data=t}data;txType=Kp.Other;txSubType="PosVestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await vc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Gp}from"@msafe/sui3-utils";var To=class a extends x{constructor(t){super(t);this.data=t}data;txType=Gp.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await fc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as $p}from"@msafe/sui3-utils";import{Transaction as Vp}from"@mysten/sui/transactions";var Ac=async(a,e,t)=>{let{restituteMsafeFastRouterSwapParams:n}=await import("@cetusprotocol/aggregator-sdk"),o=await uc(t,e),i=new Vp;return await o.fastRouterSwap({...a,router:n(a.router),txb:i}),i};var So=class a extends x{constructor(t){super(t);this.data=t}data;txType=$p.Other;txSubType="AggregatorSwap";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 Hp}from"@msafe/sui3-utils";import{Transaction as Mc}from"@mysten/sui/transactions";var Oc=async(a,e,t)=>{let n=await Ze(t,e),o=new Mc;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},Pc=async(a,e,t)=>{let n=await Ze(t,e),o=new Mc;return await n.Vaults.withdraw(a,o),o};var wo=class a extends x{constructor(t){super(t);this.data=t}data;txType=Hp.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 Xp}from"@msafe/sui3-utils";var Io=class a extends x{constructor(t){super(t);this.data=t}data;txType=Xp.Other;txSubType="RemoveVaultsPosition";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 Qp}from"@msafe/sui3-utils";import{Transaction as zp}from"@mysten/sui/transactions";var Rc={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},Bc=async(a,e,t)=>{console.log("getVestingRedeemTxb txbParams: ",a),console.log("getVestingRedeemTxb account: ",e),console.log("getVestingRedeemTxb network: ",t);let{pool:n,nftId:o,periods:i,CLOCK_ADDRESS:s}=a,c=new zp;return i.forEach(m=>{c.moveCall({target:`${Rc.published_at}::router::redeem`,typeArguments:[Rc.cetus_coin_type],arguments:[c.object(n),c.object(o),c.pure(m),c.object(s)]})}),c};var Co=class a extends x{constructor(t){super(t);this.data=t}data;txType=Qp.Other;txSubType="VestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Bc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Yp}from"@msafe/sui3-utils";var Ec=async(a,e,t)=>await(await Pe(t,e)).XCetusModule.convertPayload(a),Nc=async(a,e,t)=>await(await Pe(t,e)).XCetusModule.redeemLockPayload(a),Wc=async(a,e,t)=>await(await Pe(t,e)).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),_c=async(a,e,t)=>await(await Pe(t,e)).XCetusModule.cancelRedeemPayload(a),Lc=async(a,e,t)=>await(await Pe(t,e)).XCetusModule.redeemPayload(a);var xo=class a extends x{constructor(t){super(t);this.data=t}data;txType=Yp.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await _c(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Jp}from"@msafe/sui3-utils";var ko=class a extends x{constructor(t){super(t);this.data=t}data;txType=Jp.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Wc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Zp}from"@msafe/sui3-utils";var Do=class a extends x{constructor(t){super(t);this.data=t}data;txType=Zp.Other;txSubType="xCETUSConvert";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 tm}from"@msafe/sui3-utils";var vo=class a extends x{constructor(t){super(t);this.data=t}data;txType=tm.Other;txSubType="xCETUSRedeem";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 em}from"@msafe/sui3-utils";var Ao=class a extends x{constructor(t){super(t);this.data=t}data;txType=em.Other;txSubType="xCETUSRedeemLock";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)}};var Mo=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:nm.Other,txSubType:n,intentionData:{txbParams:{...t},action:n}}}async build(e){let{suiClient:t,account:n,network:o}=e,i;switch(e.txSubType){case"OpenAndAddLiquidity":i=no.fromData(e.intentionData);break;case"IncreaseLiquidity":i=go.fromData(e.intentionData);break;case"DecreaseLiquidity":i=io.fromData(e.intentionData);break;case"RemoveLiquidity":i=To.fromData(e.intentionData);break;case"ClaimFeeAndMining":i=oo.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":i=ro.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":i=po.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":i=lo.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":i=mo.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":i=co.fromData(e.intentionData);break;case"FarmingHarvest":i=uo.fromData(e.intentionData);break;case"FarmingBatchHarvest":i=so.fromData(e.intentionData);break;case"FarmingStake":i=fo.fromData(e.intentionData);break;case"FarmingUnstake":i=ho.fromData(e.intentionData);break;case"xCETUSConvert":i=Do.fromData(e.intentionData);break;case"xCETUSRedeemLock":i=Ao.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":i=ko.fromData(e.intentionData);break;case"xCETUSCancelRedeem":i=xo.fromData(e.intentionData);break;case"xCETUSRedeem":i=vo.fromData(e.intentionData);break;case"VestingRedeem":i=Co.fromData(e.intentionData);break;case"AggregatorSwap":i=So.fromData(e.intentionData);break;case"AddVaultsPosition":i=wo.fromData(e.intentionData);break;case"RemoveVaultsPosition":i=Io.fromData(e.intentionData);break;case"PosVestingRedeem":i=bo.fromData(e.intentionData);break;case"CreatePool":i=ao.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as ed}from"@msafe/sui3-utils";import om from"sort-keys-recursive";var N=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(om(this.data))}};var Vr={};zs(Vr,{contractId:()=>rm,default:()=>pm,feeObjId:()=>lm,roleObjId:()=>sm,status:()=>im,transaction:()=>am,upgradeCapObjId:()=>um,vaultObjId:()=>cm});var am="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",im="success",rm="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",sm="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",cm="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",lm="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",um="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",pm={transaction:am,status:im,contractId:rm,roleObjId:sm,vaultObjId:cm,feeObjId:lm,upgradeCapObjId:um};var $r={};zs($r,{contractId:()=>fm,default:()=>Tm,feeObjId:()=>ym,roleObjId:()=>hm,status:()=>dm,transaction:()=>mm,upgradeCapObjId:()=>bm,vaultObjId:()=>gm});var mm="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",dm="success",fm="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",hm="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",gm="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",ym="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",bm="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Tm={transaction:mm,status:dm,contractId:fm,roleObjId:hm,vaultObjId:gm,feeObjId:ym,upgradeCapObjId:bm};var Sm=Lt("testnet"),wm=Lt("testnet"),Im=Lt("mainnet"),Cm=Lt("mainnet"),xm="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",km="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",Dm="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",vm="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",jc=Vr,Uc=$r,Am=new Map([["dev",{env:"dev",rpc:{url:Sm},backend:{url:xm},contract:jc}],["stg",{env:"stg",rpc:{url:wm},backend:{url:km},contract:jc}],["prev",{env:"prev",rpc:{url:Im},backend:{url:Dm},contract:Uc}],["prod",{env:"prod",rpc:{url:Cm},backend:{url:vm},contract:Uc}]]);function qc(a,e){let t=Am.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}var j=class extends Error{mpayErrorCode;context;constructor(e,t,n={}){let{cause:o,context:i}=n;o?super(`[MPay] ${t}: ${o}`):super(`[MPay] ${t}`),this.mpayErrorCode=e,this.context=i}};var Oo=class extends j{constructor(){super(11,"Backend is not specified")}};var Po=class extends j{constructor(){super(1,"Wallet not connected")}};import Be,{AxiosError as Mm}from"axios";var Re=class extends j{constructor(e,t){super(10,e,{context:t})}};var Ro=class a{constructor(e){this.apiURL=e}apiURL;static parseResponseData(e){if(e instanceof Mm)throw new Re(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new Re(e.data.code)}throw new Re(e.status.toString())}async getIncomingStreams(e,t){let n=await Be.post(`${this.apiURL}/stream`,{recipient:e,...t});return a.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await Be.post(`${this.apiURL}/stream`,{sender:e,...t});return a.parseResponseData(n)}async getStreamHistory(e){let t=await Be.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 Be.post(`${this.apiURL}/stream-info`,{address:e});return a.parseResponseData(t)}async getAllRecipients(e,t){let n=await Be.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return a.parseResponseData(n)}async getAllSenders(e,t){let n=await Be.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return a.parseResponseData(n)}};var Om={dev:"sui:testnet",stg:"sui:testnet",prev:"sui:mainnet",prod:"sui:mainnet"},Ee=class a{signer;suiClient;envConfig;_backend;constructor(e,t){this.envConfig=e,this.suiClient=t??Je(Om[e.env],e.rpc.url),e.backend&&(this._backend=new Ro(e.backend.url))}static new(e,t){let n=qc(e,t);return new a(n,t?.suiGrpcClient)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new Oo;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 Po;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as Zm,normalizeStructTag as td,normalizeSuiAddress as Sl}from"@mysten/sui/utils";import{Transaction as qo}from"@mysten/sui/transactions";import{Transaction as rl}from"@mysten/sui/transactions";import{SUI_TYPE_ARG as sl,normalizeStructTag as Wm}from"@mysten/sui/utils";var Hr=50n,Bo=10000n,Kc=25n,Xr=100000000n;var ie=class{constructor(e){this.object=e}object;moveArg(e){return e.object(this.object)}},Eo=class{constructor(e){this.objects=e}objects;moveArgs(e){return e.makeMoveVec({elements:this.objects.map(t=>e.object(t))})}},we=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)}})}result;moveArg(){return this.result}};function Gc(a,e){if(typeof e=="bigint"||typeof e=="number")return a.pure.u64(e);if(typeof e=="boolean")return a.pure.bool(e);if(typeof e=="string")return/^0x[0-9a-fA-F]+$/.test(e)?a.pure.address(e):a.pure.string(e);throw new Error(`Unsupported pure argument type: ${typeof e}`)}import{bcs as Bm}from"@mysten/bcs";var tn=class extends j{constructor(e,t){super(3,e,{context:t})}};import{bcs as Pm}from"@mysten/bcs";var Jt=class extends j{constructor(e,t){super(6,e,{context:t})}};function No(a){if(a==null)throw new Jt("Missing move object field");if(typeof a=="object"&&"fields"in a){let e=a.fields;if(e&&typeof e=="object")return e}if(typeof a=="object")return a;throw new Jt("Unexpected move object field shape",{value:String(a)})}function Vc(a){return a.fields&&typeof a.fields=="object"&&!("balance"in a)&&!("config"in a)&&!("status"in a)?a.fields:a}function $c(a,e="balance"){if(a==null)throw new Jt(`Stream object missing ${e} field`);if(typeof a=="string"||typeof a=="number"||typeof a=="bigint")return BigInt(a);let t=No(a),n=t.balance??t.value;if(n==null)throw new Jt(`Stream object ${e} field has unexpected shape`,{value:JSON.stringify(a)});return BigInt(String(n))}async function Hc(a,e){let t=await a.listCoins({owner:e.owner,coinType:e.coinType,cursor:e.cursor??void 0,limit:e.limit});return{data:t.objects.map(n=>({coinObjectId:n.objectId,balance:n.balance,coinType:n.type})),hasNextPage:t.hasNextPage,nextCursor:t.cursor}}function Rm(a){return a.core?.getObject?a.core.getObject.bind(a.core):a.getObject.bind(a)}function Xc(a){return a.json&&typeof a.json=="object"?Vc(a.json):null}async function zc(a,e){try{let t=Rm(a),{object:n}=await t({objectId:e,include:{json:!0,type:!0}}),o=Xc(n);return o?{data:{objectId:n.objectId,type:n.type,content:{dataType:"moveObject",type:n.type,fields:o}}}:{error:{code:"notExists"}}}catch{return{error:{code:"notExists"}}}}async function Qc(a,e){if(e.length===0)return[];let{objects:t}=await a.getObjects({objectIds:e,include:{json:!0,type:!0}});return t.map(n=>{if(!("objectId"in n))return{error:{code:String(n.code??"unknown")}};let o=Xc(n);if(o)return{data:{objectId:n.objectId,type:n.type,content:{dataType:"moveObject",type:n.type,fields:o}}}})}async function Yc(a,e){let{balance:t}=await a.getBalance({owner:e.owner,coinType:e.coinType??void 0});return{coinType:t.coinType,totalBalance:t.balance}}async function Jc(a,e){return(await a.listBalances({owner:e})).balances.map(n=>({coinType:n.coinType,totalBalance:n.balance}))}async function Zc(a,e){let{coinMetadata:t}=await a.getCoinMetadata({coinType:e});return t}async function Wo(a,e){e.transaction.setSenderIfNotSet(e.sender);let t=await a.simulateTransaction({transaction:e.transaction,include:{effects:!0,commandResults:!0}}),n=t.$kind==="Transaction"?t.Transaction:t.FailedTransaction;return{effects:n.effects?{status:{status:n.effects.status.success?"success":"failure",error:n.effects.status.error?.message}}:void 0,commandResults:t.commandResults,results:t.commandResults?.map(o=>({returnValues:o.returnValues.map(i=>[Array.from(i.bcs),"u64"])}))}}function tl(a,e=0,t=0){let n=a.commandResults?.[e]?.returnValues?.[t];if(!n)throw new Error("Missing command result");return BigInt(Pm.u64().parse(n.bcs))}var _o=class{constructor(e){this.results=e}results;getU64(e=0,t=0){try{return tl(this.results,e,t)}catch{let[n,o]=this.getLegacyValue(e,t);if(o!=="u64")throw new tn("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Bm.u64().parse(Uint8Array.from(n))}}getLegacyValue(e=0,t=0){let o=this.results.results?.[e]?.returnValues;if(!o?.[t])throw new tn("Invalid contract return type.",{ctx:{expectType:"u64",gotType:"missing"}});return o[t]}};import{bcs as zr}from"@mysten/bcs";var z=class extends j{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var nl=zr.struct("StreamMetadata",{groupId:zr.string(),name:zr.string()}),Em=64;function ol(a){return al(a),nl.serialize(a).toBase64()}function en(a){let e=nl.fromBase64(a);return al(e),e}function al(a){if(!el(a.name))throw new z("Invalid metadata: Name contains unknown character");if(!el(a.groupId))throw new z("Invalid metadata: Group ID contains unknown character");if(a.name.length>Em)throw new z("Invalid metadata: Name exceed max length 64")}function el(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Lo}from"@mysten/sui/utils";function jo(a,e){return Lo(a)===Lo(e)}function de(a,e){return Lo(a)===Lo(e)}function fe(a){if(a.$kind!=="MoveCall"||!a.MoveCall)return null;let{package:e,module:t,function:n}=a.MoveCall;return`${e}::${t}::${n}`}var Uo="txn.gas";import{nanoid as Nm}from"nanoid";function il(){return Nm()}var Ie=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}globals;feeContract;streamContract;static convertCreateStreamInfoToInternal(e){return{metadata:ol({name:e.name,groupId:il()}),coinType:Wm(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 rl,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),i=await this.wallet.requestCoins(o),s=await this.addMergeCoins(t,i[0]),c;o.length>1?c=await this.addMergeCoins(t,i[1]):c=s;for(let m=0;m<e.recipients.length;m++){let b=e.recipients[m],S=this.amountForRecipient(b,e.numberEpoch),w=this.getStreamFeeLocal(S),[C]=t.splitCoins(s,[t.pure.u64(S+w)]),[k]=t.splitCoins(c,[t.pure.u64(this.flatSuiFee)]);this.streamContract.createStream(t,{paymentCoin:new we(C),flatFeeCoin:new we(k),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:Hr,denominator:Bo},claimFeePercent:{numerator:Kc,denominator:Bo},flatFeePerStream:Xr}}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===Uo?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return jo(n,sl)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:sl,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,i)=>{let s=this.amountForRecipient(i,e.numberEpoch),c=this.getStreamFeeLocal(s);return{totalAmount:o.totalAmount+s,streamFeeAmount:o.streamFeeAmount+c}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(e.recipients.length)*this.flatSuiFee,...t}}amountForRecipient(e,t){return BigInt(e.amountPerEpoch)*BigInt(t)+BigInt(e.cliffAmount)}get flatSuiFee(){return Xr}getStreamFeeLocal(e){return e*Hr/Bo}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new rl,e),n=await Wo(this.globals.suiClient,{sender:await this.globals.walletAddress(),transaction:t});return new _o(n).getU64()}get wallet(){return this.globals.wallet}};var cl="0x0000000000000000000000000000000000000000000000000000000000000006";var Ne=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}moduleName;config;globals;addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.moveCall({target:n,arguments:t.arguments.map(o=>o instanceof Eo?o.moveArgs(e):o instanceof ie?o.moveArg(e):o instanceof we?o.moveArg():Gc(e,o)),typeArguments:t.typeArgs}),e}makeObject(e){return typeof e=="string"?new ie(e):e}vaultObject(){return new ie(this.config.vaultObjId)}roleObject(){return new ie(this.config.roleObjId)}feeObject(){return new ie(this.config.feeObjId)}clockObject(){return new ie(cl)}};var We=class a extends Ne{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}config;globals;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 Zt=class a extends Ne{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}config;globals;static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(t,n){let o=this.feeObject(),i=this.vaultObject(),s=this.makeObject(n.paymentCoin),c=this.makeObject(n.flatFeeCoin),m=this.clockObject();return this.addContractCall(t,{method:a.MethodName.create_stream,arguments:[o,i,s,c,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,m],typeArgs:[n.coinType]})}setAutoClaim(t,n){let o=this.makeObject(n.streamId);return this.addContractCall(t,{method:a.MethodName.set_auto_claim,arguments:[o,n.enabled],typeArgs:[n.coinType]})}cancelStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.cancel_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStreamByProxy(t,n){let o=this.makeObject(n.streamId),i=this.vaultObject(),s=this.feeObject(),c=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,i,s,c],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream_by_proxy}`}};var _e=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new We(t,e),this.streamContract=new Zt(t,e)}globals;feeContract;streamContract;async createStreams(e){let t=Ie.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new Ie(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,n){let o=new qo;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new qo;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new qo;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new qo;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as Qr,SUI_TYPE_ARG as _m}from"@mysten/sui/utils";import{Duration as ll}from"luxon";var Fo=class extends j{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var Lm=1e3,Ko=class{constructor(e){this.globals=e;this.coinMetaHelper=new Yr(e.suiClient),this.createStreamHelper=new _e(e).createStreamHelper()}globals;coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new Fo(e.effects?.status.status,e.effects?.status.error);return Object.entries(e.objectTypes??{}).filter(([,t])=>t.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(([t])=>t)}calculateCreateStreamFees(e){return this.createStreamHelper.calculateCreateStreamFees(e)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(e){if(e.steps===0n)throw new z("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 z("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 z("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(ll.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:ll.fromMillis(Number(t)),steps:e.steps};return this.validateTimeline(o),o}async getBalance(e,t){let n=await Yc(this.globals.suiClient,{owner:e,coinType:t}),o=await this.getCoinMeta(t);return{...n,coinType:Qr(n.coinType),coinMeta:o}}async getAllBalance(e){let t=await Jc(this.globals.suiClient,e),n=await Promise.all(t.map(o=>this.getCoinMeta(o.coinType)));return t.map((o,i)=>({...o,coinType:Qr(o.coinType),coinMeta:n[i]}))}async getCoinMeta(e){return this.coinMetaHelper.getCoinMeta(e)}async simulateTransactionBlock(e){return Wo(this.globals.suiClient,{transaction:e,sender:await this.globals.wallet.address()})}validateStreamAmount(e,t){if(e.amountPerStep===0n)throw new z("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new z("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<Lm)throw new z("Interval shall be at least 1 second","interval",e.interval)}},Yr=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}suiClient;coinMetaReg;async getCoinMeta(e){let t=Qr(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??void 0}async queryCoinMeta(e){return Zc(this.suiClient,e)}};import{normalizeStructTag as ml,normalizeSuiAddress as zo}from"@mysten/sui/utils";import{DateTime as dl}from"luxon";import{Transaction as Ho}from"@mysten/sui/transactions";import{normalizeStructTag as pl,parseStructTag as qm}from"@mysten/sui/utils";import{DateTime as Fm}from"luxon";var Go=class extends j{constructor(){super(7,"Connected wallet is not creator")}};var nn=class extends j{constructor(){super(8,"Connected wallet is not recipient")}};var Bt=class extends j{constructor(e,t={}){super(0,e,t)}};var Vo=class extends j{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as jm,Duration as Um}from"luxon";var ul=(1n<<64n)-1n,$o=1e3;function Jr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/$o);return jm.fromMillis(t*$o)}function Zr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/$o);return Um.fromMillis(t*$o)}var he=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Zt(e.envConfig.contract,e)}globals;streamId;rawData;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 Bt("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 Go;let e=new Ho;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new nn;let e=new Ho;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new nn;let t=new Ho;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new Ho;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 pl(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 Zr(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return en(e).groupId}get name(){let{metadata:e}=this.rawData.config;return en(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return Jr(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return Zr(t)}get timeEnd(){return this.timeStart.plus(this.duration)}get totalSteps(){return this.rawData.config.totalEpoch}get claimable(){return this.streamedAmount-this.claimedAmount}get nextReleaseDate(){return this.currentEpoch===-1n?this.timeStart:this.currentEpoch>=this.totalSteps||this.isCanceled?null:Jr((this.currentEpoch+1n)*this.rawData.config.epochInterval+this.rawData.config.timeStart)}get nextReleaseAmount(){return this.currentEpoch===-1n?this.cliff:this.currentEpoch>=this.totalSteps||this.isCanceled?null:this.amountPerEpoch}get streamStatus(){let e=this.rawData.status.status;return e===16?"CANCELED":e===17?"SETTLED":e===1?"COMPLETED":this.currentEpoch>=this.totalSteps?"STREAMED":"STREAMING"}get streamedAmount(){return this.currentEpoch===-1n?0n:this.isCanceled?this.rawData.status.epochCanceled*this.amountPerEpoch+this.cliff:this.currentEpoch*this.amountPerEpoch+this.cliff}get claimedAmount(){return this.rawData.status.epochClaimed===ul?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=Fm.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 zc(e.suiClient,t);return a.parseRawStreamData(t,n)}static parseRawStreamData(e,t){if(t.error)throw t.error.code==="notExists"?new Vo(e):new Jt(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data?.content;if(!n||n.dataType!=="moveObject")throw new Jt("Unexpected object type",{gotType:n?.dataType});let{typeParams:o}=qm(n.type),i=pl(o[0]),s=n.fields,c=No(s.config),m=No(s.status);return{coinType:i,autoClaim:s.auto_claim,balance:$c(s.balance),config:{amountPerEpoch:BigInt(String(c.amount_per_epoch)),cancelable:c.cancelable,cliff:BigInt(String(c.cliff)),creator:String(c.creator),epochInterval:BigInt(String(c.epoch_interval)),metadata:String(c.metadata),recipient:String(c.recipient),timeStart:BigInt(String(c.time_start)),totalEpoch:BigInt(String(c.total_epoch))},status:{status:m.status,epochCanceled:BigInt(String(m.epoch_canceled)),epochClaimed:BigInt(String(m.epoch_claimed))}}}};var Le=class extends j{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function es(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 ts=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}requester;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)}},je=class{constructor(e){this.requester=e;this.pager=new ts(e),this.curData=[],this.cursor=0}requester;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 Km=25;async function os(a,e,t){let n=new on(e),o=new an(a,n,t);return await es(o)}var on=class{constructor(e){this.ids=e;this.cursor=-1}ids;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]}},an=class extends je{constructor(t,n,o){super(new ns(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}suiClient;idIter;options},ns=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||Km,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}suiClient;stringIter;options;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 Qc(this.suiClient,e),n;if(this.filter){let{filter:o}=this;n=t.filter(i=>!!i&&o(i))}else n=t.filter(o=>!!o);return{data:n,hasNext:await this.stringIter.hasNext()}}};var Xo=class a{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new Le("stream size 0");let n=t.map(i=>i.groupId);if(new Set(n).size!==1)throw new z("Stream does not have same group ID")}globals;streams;type="StreamGroup";static async new(e,t){let n=await os(e.suiClient,t);return n.forEach(o=>{if(!o)throw new Bt("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=>{Gm(n,i)||(o=!1)}),o}async refresh(){let e=await os(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)=>he.fromObjectData(e,t[s],i)).filter(i=>!!i);if(new Set(o.map(i=>i.groupId)).size!==1)throw new Le("Not same group ID");if(!this.checkStreamGroup(o))throw new Le("Not same stream settings");return o}};function Gm(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 rn=class a{constructor(e,t){this.it=e;this.pageSize=t}it;pageSize;static async newIncoming(e){let t=await Qo.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Qo.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}},Qo=class a{constructor(e){this.requester=e}requester;cachedNext;static async newIncoming(e){let t=await Yo.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await Yo.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 Bt("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new Bt("No more results");return e}},Yo=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 on(n.flat().map(s=>s.streamId));this.objectIter=new an(e.suiClient,i)}globals;recipient;groupRefs;query;current=0;objectIter;static async newIncomingQuery(e){let t=zm(e.query),n=await e.globals.walletAddress(),i=(await e.globals.backend.getIncomingStreams(n,t)).filter(c=>zo(c.recipient)===zo(n)),s=fl(i);return new a(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=Qm(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),i=fl(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 Hm(this.globals,e[0].streamId,this.objectIter);return this.current++,hl(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await Xm(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,$m(t,this.query)?t:this.doNextRequest()}throw new Bt("Stream group with no stream")}};function fl(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)=>dl.fromISO(n[0].createDate).toMillis()-dl.fromISO(t[0].createDate).toMillis())}function hl(a,e){if(e===void 0)return!0;let t=Vm(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 Vm(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function $m(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{hl(n,e)&&(t=!0)}),t}async function Hm(a,e,t){let n=await gl(t,e);return he.fromObjectData(a,e,n)}async function Xm(a,e,t){let n=[];for(;n.length<e.length;){let o=await gl(t,e[n.length]);n.push(o)}return Xo.newFromObjectResponse(a,e,n)}async function gl(a,e){if(!await a.hasNext())throw new Bt("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new Bt("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new Bt("stream id not aligned");return t}function zm(a){return{status:as(a?.status),coinType:yl(a?.coinType),sender:bl(a?.sender)}}function Qm(a){return{status:as(a?.status),coinType:yl(a?.coinType),recipient:bl(a?.recipient)}}function as(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=as(t);return!e||e===n?n:"all"},void 0):Ym(a)}function Ym(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new z("Unknown stream filtered status")}}function yl(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>ml(e)):void 0:ml(a)}function bl(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>zo(e)):void 0:zo(a)}var Jo=class extends j{constructor(t,n,o){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:n,gotAmount:o}});this.coinType=t;this.requestAmount=n;this.gotAmount=o}coinType;requestAmount;gotAmount};var Jm=25;async function Tl(a,e,t,n="0x2::sui::SUI",o=Jm){let i=new is(a,e,n,o),s=BigInt(0),c=[];for(;await i.hasNext()&&s<t;){let m=await i.next();m&&(c.push(m),s+=BigInt(m.balance))}if(s<t)throw new Jo(n,t,s);return c}var is=class extends je{constructor(t,n,o,i){super(new rs(t,n,o,i));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=i}suiClient;owner;coinType;reqPageSize},rs=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new Bt("Invalid reqPageSize")}suiClient;owner;coinType;reqPageSize;nextCursor;async doNextRequest(){let e=await Hc(this.suiClient,{owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=e.nextCursor,{data:e.data,hasNext:e.hasNextPage}}};var ss=class{constructor(e){this.msafe=e}msafe;get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},Zo=class{constructor(e){this.account=e}account;async address(){return this.account.address}},cs=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}singleWallet;suiClient;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(jo(e.coinType,Zm))return{primaryCoin:Uo};if(e.amount<=0)throw new z("Invalid coin request","coinAmount",e.amount);let t=await Tl(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new Bt("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},ta=class{globals;helper;constructor(e,t){this.globals=Ee.new(e,t),this.helper=new Ko(this.globals)}connectSingleWallet(e){let t=new cs(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new ss(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return he.new(this.globals,e)}async getIncomingStreams(e,t=10){return rn.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return rn.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=>td(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Sl(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Sl(o))}get wallet(){return this.globals.wallet}builder(){return new _e(this.globals)}};var Vt=class extends N{application="mpay";getClient(e,t,n){let o=new ta(e==="sui:mainnet"?"prod":"dev",{suiGrpcClient:n});return o.connectSingleWallet(new Zo(t)),o}};var sn=class extends Vt{constructor(t){super(t);this.data=t}data;txType=ed.Stream;txSubType="Cancel";async build(t){let{network:n,account:o,suiGrpcClient:i}=t;return(await this.getClient(n,o,i).getStream(this.data.streamId)).cancel()}};import{TransactionType as nd}from"@msafe/sui3-utils";var cn=class extends Vt{constructor(t){super(t);this.data=t}data;txType=nd.Stream;txSubType="ClaimByProxy";async build(t){let{network:n,account:o,suiGrpcClient:i}=t;return(await this.getClient(n,o,i).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as od}from"@msafe/sui3-utils";var ln=class extends Vt{constructor(t){super(t);this.data=t}data;txType=od.Stream;txSubType="Claim";async build(t){let{network:n,account:o,suiGrpcClient:i}=t;return(await this.getClient(n,o,i).getStream(this.data.streamId)).claim()}};import{TransactionType as ad}from"@msafe/sui3-utils";var un=class extends Vt{constructor(t){super(t);this.data=t}data;txType=ad.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o,suiGrpcClient:i}=t;return this.getClient(n,o,i).createStream(this.data)}};import{fromBase64 as id}from"@mysten/bcs";import{bcs as ea,pureBcsSchemaFromTypeName as rd}from"@mysten/sui/bcs";import{normalizeStructTag as sd,normalizeSuiAddress as ls}from"@mysten/sui/utils";function pn(a){if(!a.Pure)throw new Error("not pure argument");return id(a.Pure.bytes)}var Ue=class a{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;get moveCallData(){if(this.moveCall.$kind!=="MoveCall")throw new Error("not move call command");return this.moveCall.MoveCall}get inputs(){return this.txb.getData().inputs}getInputIndex(e){let t=this.moveCallData.arguments[e];if(t.$kind!=="Input")throw new Error("not input type");return t.Input}getInputParam(e){return this.inputs[this.getInputIndex(e)]}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.getInputParam(e);return BigInt(ea.U64.parse(pn(t)))}decodeInputAddress(e){let t=this.getInputParam(e);return ls(ea.Address.parse(pn(t)))}decodeInputString(e){let t=this.getInputParam(e);return ea.String.parse(pn(t))}decodeInputBool(e){let t=this.getInputParam(e);return ea.Bool.parse(pn(t))}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}static getPureInputValue(e,t){return a.getPureInput(e,t)}static getOwnedObjectId(e){let t=e.Object?.ImmOrOwnedObject?.objectId??e.Object?.Receiving?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not object argument: ${JSON.stringify(e)}`);return ls(t)}static getSharedObjectId(e){let t=e.Object?.SharedObject?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not shared object argument: ${JSON.stringify(e)}`);return ls(t)}static getPureInput(e,t){return rd(t).parse(pn(e))}typeArg(e){return sd(this.moveCallData.typeArguments[e])}txArg(e){return this.moveCallData.arguments[e]}};var na=class{constructor(e,t){this.globals=e;this.txb=t}globals;txb;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.commands.filter(t=>t.$kind==="MoveCall"&&de(fe(t),this.contract.createStreamTarget));if(e.length===0)throw new Bt("No create stream transactions");return e.map(t=>new Ue(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=en(t),i=e.decodeInputAddress(5),s=e.decodeInputU64(6),c=e.decodeInputU64(7),m=e.decodeInputU64(8),b=e.decodeInputU64(9),S=e.decodeInputU64(10),w=e.decodeInputBool(11),C=e.typeArg(0);return{name:n,groupId:o,recipient:i,timeStart:s,cliff:c,epochInterval:m,totalEpoch:b,amountPerEpoch:S,cancelable:w,coinType:C}}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 z("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}}get commands(){return this.txb.getData().commands}get contract(){return new Zt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new We(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new Ie(this.globals,this.feeContract,this.contract)}};var oa=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Zt(e.envConfig.contract,e)}globals;txb;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 commands(){return this.txb.getData().commands}isCreateStreamTransaction(){return this.commands.findIndex(t=>t.$kind==="MoveCall"&&de(fe(t),this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.commands.length===1&&this.commands[0].$kind==="MoveCall"&&de(fe(this.commands[0]),this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.commands.length===1&&this.commands[0].$kind==="MoveCall"&&de(fe(this.commands[0]),this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.commands.length===1&&this.commands[0].$kind==="MoveCall"&&de(fe(this.commands[0]),this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.commands.length===1&&this.commands[0].$kind==="MoveCall"&&de(fe(this.commands[0]),this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new na(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.commands[0];if(e.$kind!=="MoveCall")throw new Error("MoveCall not found");return new Ue(e,this.txb)}};import{TransactionType as cd}from"@msafe/sui3-utils";var mn=class extends Vt{constructor(t){super(t);this.data=t}data;txType=cd.Stream;txSubType="SetAutoClaim";async build(t){let{network:n,account:o,suiGrpcClient:i}=t;return(await this.getClient(n,o,i).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var aa=class{application="mpay";supportSDK="@mysten/sui-v2";async deserialize(e){let{network:t,transaction:n,suiGrpcClient:o}=e,i=Ee.new(t==="sui:mainnet"?"prod":"dev",{suiGrpcClient:o}),c=new oa(i,n).decode(),m;switch(c.type){case"CreateStream":m=new un(c.info);break;case"SetAutoClaim":m=new mn({streamId:c.streamId,enabled:c.enabled});break;case"Claim":m=new ln({streamId:c.streamId});break;case"ClaimByProxy":m=new cn({streamId:c.streamId});break;case"Cancel":m=new sn({streamId:c.streamId});break;default:throw new Error(`Unknown transaction type: ${c}`)}return{txType:m.txType,txSubType:m.txSubType,intentionData:m.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new un(t);break;case"Claim":n=new ln(t);break;case"ClaimByProxy":n=new cn(t);break;case"SetAutoClaim":n=new mn(t);break;case"Cancel":n=new sn(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as pd,TransactionSubTypes as wl}from"@msafe/sui3-utils";import{buildCoinTransferTxb as ld}from"@msafe/sui3-utils";var ia=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiGrpcClient:n,account:o}=t;return ld(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as ud}from"@msafe/sui3-utils";var ra=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiGrpcClient:n,account:o}=t;return ud(n,this.data,o.address)}static fromData(t){return new a(t)}};var sa=class{application="msafe-core";supportSDK="@mysten/sui-v2";constructor(){this.application=pd}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{account:t,network:n,suiGrpcClient:o}=e,i;switch(e.txSubType){case wl.assets.coin.send:i=ia.fromData(e.intentionData);break;case wl.assets.object.send:i=ra.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiGrpcClient:o,account:t,network:n})}};import{TransactionType as Ol}from"@msafe/sui3-utils";var Il=!1,dn={ProtocolPackage:"0x1e4a13a0494d5facdbe8473e74127b838c2d446ecec0ce262e2eddafa77259cb",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function us(){if(!Il)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&&(dn.ProtocolPackage=e),t&&(dn.borrowFee=t),n&&(dn.borrowFeeAddress=n),o&&(dn.pool=o),Il=!0}catch(a){console.error(a.message)}}var te=dn;import{TransactionType as xe}from"@msafe/sui3-utils";import{bcs as fn,fromBase64 as hn}from"@mysten/bcs";import{normalizeStructTag as dd,normalizeSuiAddress as ps}from"@mysten/sui/utils";function ca(a){if(a.$kind!=="MoveCall")return null;let{package:e,module:t,function:n}=a.MoveCall;return`${e}::${t}::${n}`}var la=class{constructor(e){this.txb=e}txb;decode(){if(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 commands(){return this.txb.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>ca(t)===e)}isClaimRewardTransaction(){return this.commands.some(e=>e.$kind==="MoveCall"&&e.MoveCall.function.includes("claim_reward"))}isEntryBorrowTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::entry_borrow_v2`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::borrow_v2`)}isEntryMultiDepositTransaction(){let e=`${te.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.commands.filter(o=>ca(o)===e);return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.function.includes("claim_reward"))?!1:t.length>1}isEntryClaimAndDepositTransaction(){let e=`${te.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.commands.filter(o=>ca(o)===e);return!!(this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.function.includes("claim_reward"))&&t.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::withdraw_v2`)}decodeEntryClaimAndDeposit(){return{txType:xe.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return{txType:xe.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:xe.Other,type:"EntryBorrow",intentionData:{amount:t,assetId:e}}}decodeEntryMultiDeposit(){let e=[],t=`${te.ProtocolPackage}::incentive_v3::entry_deposit`;return this.commands.forEach(n=>{if(ca(n)===t){let o=new ua(n,this.txb),i=o.decodeInputU8(3),s=o.decodeInputU64(5);e.push({assetId:i,amount:s})}}),{txType:xe.Other,type:"EntryMultiDeposit",intentionData:{list:e}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5);return{txType:xe.Other,type:"EntryDeposit",intentionData:{amount:t,assetId:e}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6);return{txType:xe.Other,type:"EntryRepay",intentionData:{amount:t,assetId:e}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:xe.Other,type:"EntryWithdraw",intentionData:{amount:t,assetId:e}}}get helper(){let e=this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.package===te.ProtocolPackage);if(!e)throw new Error("MoveCall not found");return new ua(e,this.txb)}},ua=class a{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;get moveCallData(){if(this.moveCall.$kind!=="MoveCall")throw new Error("not move call command");return this.moveCall.MoveCall}get inputs(){return this.txb.getData().inputs}getInputIndex(e){let t=this.moveCallData.arguments[e];if(t.$kind!=="Input")throw new Error("not input type");return t.Input}getInputParam(e){return this.inputs[this.getInputIndex(e)]}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.getInputParam(e);return Number(fn.u64().parse(Uint8Array.from(hn(t.Pure.bytes))))}decodeInputU8(e){let t=this.getInputParam(e);return Number(fn.u8().parse(Uint8Array.from(hn(t.Pure.bytes))))}decodeInputAddress(e){let t=this.getInputParam(e);return ps(fn.Address.parse(Uint8Array.from(hn(t.Pure.bytes))))}decodeInputString(e){let t=this.getInputParam(e);return fn.string().parse(Uint8Array.from(hn(t.Pure.bytes)))}decodeInputBool(e){let t=this.getInputParam(e);return fn.bool().parse(Uint8Array.from(hn(t.Pure.bytes)))}static getOwnedObjectId(e){let t=e.Object?.ImmOrOwnedObject?.objectId??e.Object?.Receiving?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not object argument: ${JSON.stringify(e)}`);return ps(t)}static getSharedObjectId(e){let t=e.Object?.SharedObject?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not shared object argument: ${JSON.stringify(e)}`);return ps(t)}typeArg(e){return dd(this.moveCallData.typeArguments[e])}txArg(e){return this.moveCallData.arguments[e]}};import{Transaction as Cl}from"@mysten/sui/transactions";import{depositCoinPTB as fd,withdrawCoinPTB as hd,repayCoinPTB as gd,borrowCoinPTB as yd,claimLendingRewardsPTB as xl,getUserAvailableLendingRewards as kl}from"@naviprotocol/lending";async function qe(a,e,t,n){return await fd(a,e,t,{amount:n}),a}async function Dl(a,e,t,n){let[o]=await hd(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function vl(a,e,t,n){let[o]=await yd(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function ms(a,e,t,n){return await gd(a,e,t,{amount:n}),a}async function Al(a,e){let t=new Cl,n=await kl(e,{client:a});return await xl(t,n),t}async function Ml(a,e){let t=new Cl,n=await kl(e,{client:a});return await xl(t,n,{customCoinReceive:{type:"depositNAVI",depositNAVI:{fallbackReceiveAddress:e}}}),t}var pa=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await Al(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var ma=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await Ml(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Td}from"@mysten/sui/transactions";import{getPool as bd}from"@naviprotocol/lending";async function ee(a){return bd(a)}var da=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Td;console.log("build",this.data);let s=await ee(n);return await vl(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Sd}from"@mysten/sui/transactions";async function Fe(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var fa=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,c=new Sd;console.log("build",this.data);let m=await ee(i);if(i===0){let[C]=c.splitCoins(c.gas,[s]);return await qe(c,m,C,s)}let b=await Fe(n,o.address,m.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${m.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let C=1;for(;C<b.data.length;)c.mergeCoins(S,[b.data[C].coinObjectId]),C++}return await qe(c,m,c.object(S),s)}static fromData(t){return new a(t)}};import{Transaction as wd}from"@mysten/sui/transactions";var ha=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,c=new wd;console.log("build",this.data);let m=await ee(i);if(i===0){let[w]=c.splitCoins(c.gas,[s]);return ms(c,m,w,s)}let b=await Fe(n,o.address,m.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${m.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let w=1;for(;w<b.data.length;)c.mergeCoins(S,[b.data[w].coinObjectId]),w++}return ms(c,m,c.object(S),s)}static fromData(t){return new a(t)}};import{Transaction as Id}from"@mysten/sui/transactions";var ga=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Id;console.log("build",this.data);let s=await ee(n);return await Dl(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Cd}from"@mysten/sui/transactions";var ya=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:i}=this.data,s=new Cd;console.log("build",this.data);for(let c=0;c<i.length;c++){let{assetId:m,amount:b}=i[c],S=await ee(m);if(m===0){let[k]=s.splitCoins(s.gas,[b]);await qe(s,S,k,b);continue}let w=await Fe(n,o.address,S.suiCoinType);if(!w.data[0])throw new Error(`Insufficient balance for ${S.suiCoinType} Token`);let C=w.data[0].coinObjectId;if(w.data.length>=2){let k=1;for(;k<w.data.length;)s.mergeCoins(C,[w.data[k].coinObjectId]),k++}await qe(s,S,s.object(C),b)}return s}static fromData(t){return new a(t)}};import{Transaction as xd}from"@mysten/sui/transactions";var ba=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return console.log("build",this.data),xd.from(this.data.content)}static fromData(t){return new a(t)}};var Ta=class{application="navi";supportSDK="@mysten/sui";async deserialize(e){if(await us(),e.appContext?.content)return{txType:Ol.Other,txSubType:"PlainTransaction",intentionData:{content:e.appContext.content,scene:e.appContext.scene||"unknown"}};let{transaction:t}=e,o=new la(t).decode();return{txType:Ol.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await us(),e.txSubType){case"EntryDeposit":o=fa.fromData(e.intentionData);break;case"EntryBorrow":o=da.fromData(e.intentionData);break;case"EntryRepay":o=ha.fromData(e.intentionData);break;case"EntryWithdraw":o=ga.fromData(e.intentionData);break;case"EntryMultiDeposit":o=ya.fromData(e.intentionData);break;case"ClaimReward":o=pa.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=ma.fromData(e.intentionData);break;case"PlainTransaction":o=ba.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as kd,TransactionType as Pl}from"@msafe/sui3-utils";import{fromHex as Dd}from"@mysten/bcs";import{Transaction as vd}from"@mysten/sui/transactions";import Ad from"sort-keys-recursive";var Rl="msafe-plain-tx",Bl=kd.others.plain,ds=class a{constructor(e){this.data=e}data;application=Rl;txType=Pl.Other;txSubType=Bl;serialize(){return JSON.stringify(Ad(this.data))}async build(e){return vd.from(Dd(this.data.content))}static fromData(e){return new a(e)}},Sa=class{application;supportSDK="@mysten/sui";constructor(){this.application=Rl}async deserialize(e){let{content:t}=e.appContext;return{txType:Pl.Other,txSubType:Bl,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return ds.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{Transaction as ka,isTransaction as Nd}from"@mysten/sui/transactions";import{SuiClient as Wd}from"@mysten/sui.js/client";import{RequestManager as Rd,HTTPTransport as Bd,Client as Ed}from"@open-rpc/client-js";var Md={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},fs=class extends Error{},wa=class extends fs{code;type;constructor(e,t){super(e),this.code=t,this.type=Md[t]??"ServerError"}};function Od(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var Pd={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},Ia=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={...Pd,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=Od(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 wa(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 hs(e);return this.#i.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},hs=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 Ca=class{rpcClient;websocketClient;constructor({url:e,websocket:{url:t,...n}={},rpc:o}){let i=new Bd(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new Ed(new Rd([i])),this.websocketClient=new Ia(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()}};function El(a,e){return new Oe({network:eo(a),baseUrl:e})}var Nl="0x2::sui::SUI",Ss=1e8;function gs(a){return new Wd({transport:new Ca({url:a,rpc:{url:a}})})}async function Wl(a,e){if(Nd(a))return a;let t=gs(e),n=await a.build({client:t});return ka.from(n)}var xa=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;case"@mysten/sui-v2":t.addGrpcHelper(o);break;default:{let i=o;throw new Error(`${i.application}: ${i.supportSDK} SDK not supported`)}}}return t}addLegacyHelper(e){this.setApp(e.application,new Ts(e))}addHelper(e){this.setApp(e.application,new ys(e))}addGrpcHelper(e){this.setApp(e.application,new bs(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}setApp(e,t){this.apps.set(e,t)}},ys=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=El(e.network,e.clientUrl),n=await Wl(e.transactionBlock,e.clientUrl);return this.helper.deserialize({...e,suiClient:t,transaction:n})}async build(e){let t=El(e.network,e.clientUrl),{balance:n}=await t.getBalance({owner:e.account.address,coinType:Nl});if(Number(n.balance)<Ss)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 ka.from(i)}},bs=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=Je(e.network,e.clientUrl),n=await Wl(e.transactionBlock,e.clientUrl);return this.helper.deserialize({...e,suiGrpcClient:t,transaction:n})}async build(e){let t=Je(e.network,e.clientUrl),{balance:n}=await t.core.getBalance({owner:e.account.address,coinType:Nl});if(Number(n.balance)<Ss)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiGrpcClient:t});o.setSender(e.account.address);let i=await o.build({client:t});return ka.from(i)}},Ts=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=gs(e.clientUrl);return this.helper.deserialize({...e,transactionBlock:e.transactionBlock,suiClient:t})}async build(e){let t=gs(e.clientUrl),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<Ss)throw new Error("Insufficient gas fee");let i=await(await this.helper.build({...e,suiClient:t})).build({client:t});return ka.from(i)}};import{TransactionType as $d}from"@msafe/sui3-utils";import{Scallop as Hd}from"@scallop-io/sui-scallop-sdk";import{TransactionType as _t}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as ql}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as _d}from"@mysten/sui/utils";var ge=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}`))}transaction;scallopClient;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}=_d(t);return e?e.package===n&&e.module===o&&e.function===i:!1}isMoveCall(e){return e.$kind==="MoveCall"&&!!e.MoveCall}filterMoveCallCommands(e,t){return this.isMoveCall(e)&&this.matchMoveCallCommand(e.MoveCall,t)}getMoveCallCommands(e){let t=new Set(e),n=e.reduce((i,s,c)=>(i[s]=c,i),{}),o=[];return this.commands.forEach(i=>{this.isMoveCall(i)&&i.MoveCall&&t.has(i.MoveCall.package)&&(o[n[i.MoveCall.package]]=i.MoveCall)}),o}hasMoveCallCommand(e){return this.movecallsAsSet.has(e)}};import{bcs as ws}from"@mysten/sui/bcs";import{normalizeStructTag as Ld,normalizeSuiAddress as gn}from"@mysten/sui/utils";var Is=class a{constructor(e,t,n=0){this.moveCall=e;this.transaction=t;let o=[];e?.MoveCall&&t.getData().commands.filter((i,s)=>{if(i.$kind==="MoveCall"){let c=`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,m=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return c===m?(o.push(s),!0):!1}return!1}),this.cmdIdx=o[n]}moveCall;transaction;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 gn(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"&&t.kind!=="Result")throw new Error("not nested or result 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=ws[t];return ws[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 gn(e.value.Object.ImmOrOwned.objectId)}return gn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return gn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return gn(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 ws.U64.parse(new Uint8Array(t))}typeArg(e){return Ld(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},_=Is;var Cs=class{constructor(e,t){this.splitCoin=e;this.txb=t}splitCoin;txb;getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(_.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},jt=Cs;import{normalizeStructTag as _l,SUI_CLOCK_OBJECT_ID as Ll,SUI_TYPE_ARG as jd}from"@mysten/sui/utils";var jl=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`},Ke={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},$t={unstakeObligation:(a,e,t)=>a.moveCall(`${Ke.id}::user::unstake`,[Ke.incentivePools,Ke.incentiveAccounts,a.object(e),a.object(t),Ll],[_l(jd)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${Ke.id}::user::redeem_rewards`,[Ke.incentivePools,Ke.incentiveAccounts,a.object(e),a.object(t),Ll],[_l(n)])};var Ul=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var Da=class extends ge{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(`${ql}::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 _(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new _(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 _(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${ql}::user::redeem_rewards`)).map(t=>new _(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new _(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new _(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new _(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new _(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 _(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new _(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new _(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new _(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new _(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new _(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new _(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new _(e,this.transaction)}decodeMigrateScoin(){return{txType:_t.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:_t.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:_t.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new jt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:_t.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 jt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:_t.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperBurnScoin.getNestedInputParam(1),n=new jt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:_t.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 jt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:_t.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:_t.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:_t.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:_t.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:_t.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 jt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:_t.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 jt(n,this.transaction).getAmountInput().reduce((s,c)=>s+c,0),i=this.helperRepay.decodeSharedObjectId(1);return{txType:_t.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 jt(i,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}if(this.helperStake.moveCall&&t===0){let i=this.helperStake.getNestedInputParam(2);t=new jt(i,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:_t.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:_t.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 jt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:_t.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 jt(o,this.transaction).getAmountInput().reduce((i,s)=>i+s,0)}return{txType:_t.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:e}}}decodeClaimReward(){let e=[],t=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let i=o.decodeOwnedObjectId(2),s=o.typeArg(0),c=this.utils.parseCoinNameFromType(s);e.push({stakeMarketCoinName:c,stakeAccountId:i})}),this.helperClaimBorrowV2Reward.forEach(o=>{let i=o.decodeSharedObjectId(4),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:s,obligationKey:i,rewardCoinName:c})}),this.helperClaimBorrowReward.forEach(o=>{let i=o.decodeSharedObjectId(2),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:s,obligationKey:i,rewardCoinName:c})}),{txType:_t.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as ks}from"@msafe/sui3-utils";var va=class extends ge{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 _(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 _(e,this.transaction)}decodeCreateReferralLink(){return{txType:ks.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:ks.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:ks.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as re}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as Ud}from"@scallop-io/sui-scallop-sdk";var Aa=class extends ge{async decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMergeVeSca())return this.decodeMergeVesca();if(this.isSplitVeSca())return this.decodeSplitVesca();if(this.isVeScaObligationBindings())return this.decodeVeScaObligationBindings();if(await this.isTransferVeScaKey())return this.decodeTransferVeScaKey()}isStakeScaFirsTime(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let e=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),t=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!e&&!!t}isRedeemSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}isMergeVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::merge`)}isSplitVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::split`)}isVeScaObligationBindings(){let e=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`)),o=e.length>0&&t.length>0&&e.length===t.length,i=n.length>0;return this.commands.length===e.length+t.length+n.length&&(o||i)}async isTransferVeScaKey(){let e=this.commands.filter(m=>m.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(m=>m.$kind==="Input").map(({Input:m})=>m);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((m,b)=>m.$kind==="Object"&&o.has(b)).map(m=>m.Object.ImmOrOwnedObject),s=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,c=Ul(i.map(({objectId:m})=>m),50);for(let m=0;m<c.length;m++){let b=c[m];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 _(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 _(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new _(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new _(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 _(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${Ud}::user::unstake`));return new _(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new _(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 _(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new _(t,this.transaction)}getVeScaObligationBindingHelpers(){let e=`${this.coreId.borrowIncentivePkg}::user::unstake_v2`,t=`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,n=`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`,o=[],i=0,s=0,c=0;return this.commands.forEach(m=>{this.filterMoveCallCommands(m,e)?(o.push({action:"unstake",helper:new _(m,this.transaction,i)}),i++):this.filterMoveCallCommands(m,t)?(o.push({action:"stake",helper:new _(m,this.transaction,s)}),s++):this.filterMoveCallCommands(m,n)&&(o.push({action:"deactivate",helper:new _(m,this.transaction,c)}),c++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:re.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new jt(e,this.transaction).getAmountInput().reduce((D,M)=>D+M,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),i=!!this.helperRedeemSca.moveCall,s=[],c=[],m=[];this.helperOldUnstakeObligation.moveCall&&(s=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(c=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(m=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let b=!1,S=!1,w,C,k=[{condition:s,isOld:!0},{condition:c,isOld:!1},{condition:m,isOld:!1}];for(let D=0;D<k.length;D++)k[D].condition.length>1&&([C,w]=k[D].condition,b=!0,S=k[D].isOld);return{txType:re.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:w,obligationKey:C,veScaKey:o,isHaveRedeem:i,isObligationLocked:b,isOldBorrowIncentive:S}}}decodeExtendStakePeriod(){let e=this.helperExtendStakePeriod.decodeInputU64(4),t=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],i=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(i=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let s=!1,c=!1,m,b,S=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:i,isOld:!1}];for(let w=0;w<S.length;w++)S[w].condition.length>1&&([b,m]=S[w].condition,s=!0,c=S[w].isOld);return{txType:re.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:m,obligationKey:b,veScaKey:t,isObligationLocked:s,isOldBorrowIncentive:c}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new jt(e,this.transaction).getAmountInput().reduce((k,D)=>k+D,0),o=[],i=[],s,c=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let m=!1,b=!1,S,w,C=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:c,isOld:!1}];for(let k=0;k<C.length;k++)C[k].condition.length>1&&([w,S]=C[k].condition,m=!0,b=C[k].isOld);return{txType:re.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:S,obligationKey:w,isOldBorrowIncentive:b,isObligationLocked:m}}}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 jt(e,this.transaction).getAmountInput().reduce((k,D)=>k+D,0),o=[],i=[],s,c=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let m=!1,b=!1,S,w,C=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:c,isOld:!1}];for(let k=0;k<C.length;k++)C[k].condition.length>1&&([w,S]=C[k].condition,m=!0,b=C[k].isOld);return{txType:re.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:S,obligationKey:w,veScaKey:s,isObligationLocked:m,isOldBorrowIncentive:b}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:re.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:re.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:re.Other,type:"VeScaObligationBindings",intentionData:{bindingDatas:n}}}decodeTransferVeScaKey(){let e=this.commands.filter(s=>s.$kind==="TransferObjects"),{objects:t}=e[0].TransferObjects,n=t.filter(s=>s.$kind==="Input").map(({Input:s})=>s);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((s,c)=>s.$kind==="Object"&&o.has(c)).map(s=>s.Object.ImmOrOwnedObject);return{xType:re.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:i}}}};import qd from"sort-keys-recursive";var A=class{constructor(e){this.data=e}data;get application(){return"msafe-core"}serialize(){return JSON.stringify(qd(this.data))}isObligationLocked=async(e,t)=>{let{object:n}=await e.getObject({objectId:typeof t=="string"?t:t.objectId,include:{json:!0}}),o=n?.json?.fields??n?.json;return!!(o&&"lock_key"in o&&o.lock_key)};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 Ma=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:i,obligationId:s,obligationKey:c}=this.data,m=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:m,obligationId:s,obligationKey:c},async(S,w)=>{let C=await w.borrowQuick(+i,o,s,c);w.transferObjects([C],m)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var Oa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:i,veScaKey:s,amount:c,coinName:m}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:i,veScaKey:s},async(S,w)=>{let C=await w.borrowQuick(+c,m,o,i);w.transferObjects([C],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var Pa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:i,obligationKey:s,veScaKey:c,coinName:m,amount:b}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:i,obligationKey:s,veScaKey:c},async(w,C)=>{let k=C.claimReferralTicket(m),D=await C.borrowWithReferralQuick(+b,m,k,i,s);C.burnReferralTicket(k,m),C.transferObjects([D],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as Fd}from"@mysten/sui/utils";var Ra=class a extends A{txType;txSubType;constructor(e={}){super(e)}async claimIncentiveRewards(e,t){let n=e.builder.createTxBlock();n.setSender(t);let o=await e.query.getAllStakeAccounts(t),i=await e.query.getLendings(void 0,t),s=await e.query.getObligations(t),c=Object.values(await e.query.getObligationAccounts(t)??[]),m=(()=>{let C=[...e.constants.whitelist.spool].map(k=>e.utils.parseCoinName(k));return Object.values(i??[]).filter(k=>!!k&&C.includes(k.coinName)).reduce((k,D)=>{let M=e.utils.parseMarketCoinName(D.coinName);return k[M]||(k[M]=0),k[M]+=D.availableClaimCoin,k},{})})(),b={};Object.entries(o).forEach(([C,k])=>{for(let D=0;D<k.length;D++){let M=k[D];if(!m[C])continue;let q=n.claim(M.id,C);b.sui?b.sui.push(q):b.sui=[q]}});let S=(()=>{let C={};return C.sui=Object.values(m).reduce((k,D)=>k+D,0),c.forEach(k=>{Object.values(k.borrowIncentives).forEach(D=>{D&&D.rewards.forEach(M=>{C[M.coinName]||(C[M.coinName]=0),C[M.coinName]?C[M.coinName]+=M.availableClaimCoin:C[M.coinName]=M.availableClaimCoin})})}),C})();if(s.length>0&&c.length>0)for(let C=0;C<c.length;C++){let k=c[C],D=!1,M=s.find(U=>U.id===k.obligationId)?.keyId,q={};if(M){if(Object.values(k.borrowIncentives).forEach(U=>{if(U){let G=U.rewards.filter($=>{let E=$.coinName;return $.availableClaimCoin>0&&!q[E]});D=G.length>0,G.forEach($=>{let E=n.claimBorrowIncentive(k.obligationId,M,$.coinName);q[$.coinName]=!0,b[$.coinName]?b[$.coinName].push(E):b[$.coinName]=[E]})}}),S.sui>0){let U=$t.redeem_rewards(n,M,k.obligationId,Fd);b.sui?b.sui.push(U):b.sui=[U]}if(D&&await jl(e.query,k.obligationId)){n.unstakeObligation(k.obligationId,M);let G=await e.query.getBindedVeScaKey(k.obligationId);G?n.stakeObligationWithVesca(k.obligationId,M,G):n.stakeObligation(k.obligationId,M)}}}let w=(await Promise.all(Object.entries(b).map(async([C,k])=>{let D=k[0];if(k.length>1&&n.mergeCoins(D,k.slice(1)),C==="sui"){n.mergeCoins(n.gas,[D]);return}return await e.builder.utils.mergeSimilarCoins(n,D,e.utils.parseCoinType(C),t),D}))).filter(C=>!!C);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 Ba=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.depositCollateral(this.data.collateralCoinName,+this.data.amount,!1,this.data.obligationId)}static fromData(t){return new a(t)}};var Ea=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:i,obligationId:s,rewardCoinName:c,veScaKey:m}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=$t.redeem_rewards(b,i,s,n.utils.parseCoinType(c));return b.transferObjects([S],o),await b.unstakeObligationQuick(s,i),m?await b.stakeObligationWithVeScaQuick(s,i,m):await b.stakeObligationQuick(s,i),b.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new a(t)}};var Na=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new a(t)}};var Wa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.openObligation(!1)}static fromData(t){return new a(t)}};var _a=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:c,obligationKey:m}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:c,obligationKey:m},async(S,w)=>{await w.repayQuick(+s,i,c)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var La=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:c,veScaKey:m}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=n.constants.whitelist.borrowing.has(i);return S&&await b.unstakeObligationQuick(c,void 0),await b.repayQuick(+s,i,c),S&&await b.stakeObligationWithVeScaQuick(c,void 0,m),b.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var ja=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.deposit(this.data.coinName,+this.data.amount,!1,t.account.address)}static fromData(t){return new a(t)}};var Ua=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new a(t)}};var qa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async unstakeAndWithdraw(t,n,o){let i=t.builder.createTxBlock();i.setSender(o);let{stakeAccountId:s,amount:c,coinName:m}=this.data,b=[];for(let S=0;S<s.length;S++){let{id:w,coin:C}=s[S],k=t.utils.parseMarketCoinName(m),[D]=await i.unstakeQuick(C,k,w,!1);if(D){let M=i.withdraw(D,m);b.push(M)}}if(c>0){let S=await i.withdrawQuick(c,m);b.push(S)}return b.length>1&&i.mergeCoins(b[0],b.slice(1)),i.transferObjects(b,o),i.txBlock}async build(t){return this.unstakeAndWithdraw(t.scallopClient,this.data,t.account.address)}static fromData(t){return new a(t)}};var Fa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await 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 Ka=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.withdraw(this.data.coinName,Number(this.data.amount),!1,t.account.address)}static fromData(t){return new a(t)}};var Ga=class a extends A{constructor(t){super(t);this.data=t}data;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 Va=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:i}=this.data,s=t.address,c=n.builder.createTxBlock();c.setSender(s);let m=i.map(b=>n.utils.parseCoinNameFromType(b));return await c.claimReferralRevenueQuick(o,m),c.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new a(t)}};var $a=class a extends A{constructor(t){super(t);this.data=t}data;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 Kd}from"@scallop-io/sui-scallop-sdk";var Ha=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:i,unlockTime:s,obligationId:c,obligationKey:m,isOldBorrowIncentive:b,isObligationLocked:S}=this.data,w=t.address,C=n.builder.createTxBlock();C.setSender(w);let k=await n.utils.selectCoins(o,Kd,w),[D,M]=C.takeAmountFromCoins(k,o);return C.extendLockPeriod(i,s),C.extendLockAmount(i,D),C.transferObjects([M],w),!c||!m||(S&&(b?$t.unstakeObligation(C,c,m):C.unstakeObligation(c,m)),C.stakeObligationWithVesca(c,m,i)),C.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}data;txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:i,unlockTime:s,obligationId:c,obligationKey:m,isObligationLocked:b,isOldBorrowIncentive:S}=this.data,w=n.builder.createTxBlock();return w.setSender(o),w.extendLockPeriod(i,s),c&&m&&(b&&(S?$t.unstakeObligation(w,m,c):w.unstakeObligation(c,m)),w.stakeObligationWithVesca(c,m,i)),w.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var za=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,sourceVeScaKey:s}=this.data,[c,m]=await Promise.all([n.getBindedObligationId(i),n.getBindedObligationId(s)]);c&&await t.unstakeObligationQuick(c),m&&await t.unstakeObligationQuick(m),o(t,i,s),c&&await t.stakeObligationWithVeScaQuick(c,void 0,i),m&&await t.stakeObligationWithVeScaQuick(m,void 0,s)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,async(s,c,m)=>{s.mergeVeSca(i.object(c),i.object(m))}),i.txBlock}static fromData(t){return new a(t)}};var Qa=class a extends A{constructor(t){super(t);this.data=t}data;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 Gd}from"@scallop-io/sui-scallop-sdk";var Ya=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,unlockTime:s,veScaKey:c,isHaveRedeem:m,obligation:b,obligationKey:S,isObligationLocked:w,isOldBorrowIncentive:C}=this.data,k=n.builder.createTxBlock();if(k.setSender(o),m){let U=k.redeemSca(c);k.transferObjects([U],o)}let D=await n.builder.utils.selectCoins(i,Gd,o),[M,q]=k.takeAmountFromCoins(D,i);return k.transferObjects([q],o),k.renewExpiredVeSca(c,M,s),!b||!S||(w&&(C?$t.unstakeObligation(k,S,b):k.unstakeObligation(b,S)),k.stakeObligationWithVesca(b,S,c)),k.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var Ja=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,splitAmount:s}=this.data,c=await n.getBindedObligationId(i);c&&await t.unstakeObligationQuick(c),o(t,i,s.toString()),c&&await t.stakeObligationWithVeScaQuick(c,void 0,i)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,(s,c,m)=>{let b=s.splitVeSca(c,m.toString());s.transferObjects([b],o)}),i.txBlock}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as Vd}from"@scallop-io/sui-scallop-sdk";var Za=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,isObligationLocked:s,isOldBorrowIncentive:c,obligationId:m,obligationKey:b,unlockTime:S,veScaKey:w}=this.data,C=n.builder.createTxBlock();C.setSender(o);let k=await n.utils.selectCoins(i,Vd,o),[D,M]=C.takeAmountFromCoins(k,i),q;return w?C.extendLockAmount(w,D):q=C.lockSca(D,S),m&&b&&(s&&(c?$t.unstakeObligation(C,b,m):C.unstakeObligation(m,b)),C.stakeObligationWithVesca(m,b,w||q)),w||C.transferObjects([q,M],o),C.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var ti=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:i,coinName:s,stakeAccountId:c}=this.data,m=n.builder.createTxBlock();m.setSender(o);let b=await m.depositQuick(+i,s),S=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(S))return m.txBlock;let w=await n.query.getStakeAccounts(S,o),C=c||(w.length>0?w[0].id:void 0);if(C)await m.stakeQuick(b,S,C);else{let k=m.createStakeAccount(S);await m.stakeQuick(b,S,k),m.transferObjects([k],o)}return m.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var ei=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;handleAction(t,{action:n,args:o}){switch(n){case"deactivate":return t.deactivateBoost(o.obligationId,o.veScaKey);case"stake":return t.stakeObligationWithVesca(o.obligationId,o.obligationKey,o.veScaKey);case"unstake":return t.unstakeObligation(o.obligationId,o.obligationKey);default:throw new Error("Invalid action")}}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{bindingDatas:s}=this.data;return s.forEach(c=>this.handleAction(i,c)),i.txBlock}static fromData(t){return new a(t)}};var ni=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{veScaKeys:s}=this.data;return i.transferObjects(s.map(c=>i.objectRef(c)),i.pure.address(o)),i.txBlock}static fromData(t){return new a(t)}};var oi=class a extends A{constructor(t){super(t);this.data=t}data;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 ai=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new Hd({addressId:"695fcdc084f790c04eb068dc",walletAddress:e,suiClients:[t],fullnodeUrls:[Lt("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n);let i=new Da(t,this.scallopClient),s=new va(t,this.scallopClient),c=new Aa(t,this.scallopClient),m=i.decode()||s.decode()||await c.decode();if(!m)throw new Error("Unknown transaction type");return{txType:$d.Other,txSubType:m.type,intentionData:m.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:i,intentionData:s}=e;await this.initScallopClient(n.address,t);let c;switch(i){case"SupplyLending":c=ja.fromData(s);break;case"WithdrawLending":c=Ka.fromData(s);break;case"Borrow":c=Ma.fromData(s);break;case"Repay":c=_a.fromData(s);break;case"DepositCollateral":c=Ba.fromData(s);break;case"WithdrawCollateral":c=Fa.fromData(s);break;case"OpenObligation":c=Wa.fromData(s);break;case"UnstakeSpool":c=Ua.fromData(s);break;case"ClaimIncentiveReward":c=Ra.fromData(s);break;case"BorrowWithBoost":c=Oa.fromData(s);break;case"StakeSca":c=Za.fromData(s);break;case"ExtendStakePeriod":c=Xa.fromData(s);break;case"ExtendPeriodAndStakeMore":c=Ha.fromData(s);break;case"RenewExpStakePeriod":c=Ya.fromData(s);break;case"WithdrawStakedSca":c=oi.fromData(s);break;case"SupplyAndStakeLending":c=ti.fromData(s);break;case"WithdrawAndUnstakeLending":c=qa.fromData(s);break;case"RedeemSca":c=Qa.fromData(s);break;case"MigrateAndClaim":c=Ea.fromData(s);break;case"BorrowWithReferral":c=Pa.fromData(s);break;case"CreateReferralLink":c=$a.fromData(s);break;case"ClaimRevenueReferral":c=Va.fromData(s);break;case"BindReferral":c=Ga.fromData(s);break;case"MigrateScoin":c=Na.fromData(s);break;case"RepayWithBoost":c=La.fromData(s);break;case"MergeVeSca":c=za.fromData(s);break;case"SplitVeSca":c=Ja.fromData(s);break;case"VeScaObligationBindings":{c=ei.fromData(s);break}case"TransferVeScaKeys":{c=ni.fromData(s);break}default:throw new Error("not implemented")}return c.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as vf}from"@msafe/sui3-utils";import{TransactionType as Tn}from"@msafe/sui3-utils";import{normalizeStructTag as ke}from"@mysten/sui/utils";import{API_URL as uf}from"@suilend/sui-fe";import{TransactionType as sf}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as cf,LENDING_MARKET_TYPE as lf,SuilendClient as Ds}from"@suilend/sdk";import{TransactionType as Ve}from"@msafe/sui3-utils";import{fromBase64 as Fl,toHex as Kl}from"@mysten/bcs";import{normalizeStructTag as yn}from"@mysten/sui/utils";import{MAX_U64 as $e}from"@suilend/sui-fe";import Gl from"bignumber.js";var ii=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=yn(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:Ve.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(m=>m.type.includes("lending_market::RedeemEvent"))},n=yn(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 Gl(Kl(Fl(this.inputs[i].Pure.bytes)),16).toString(),c=s===$e.toString();return console.log("decodeWithdraw - isMax:",c,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",$e.toString()),c&&(o=$e.toString()),{txType:Ve.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(m=>m.type.includes("lending_market::BorrowEvent"))},n=yn(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 Gl(Kl(Fl(this.inputs[i].Pure.bytes)),16).toString(),c=s===$e.toString();return console.log("decodeBorrow - isMax:",c,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",$e.toString()),c&&(o=$e.toString()),{txType:Ve.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=yn(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:Ve.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=yn(o.parsedJson.coin_type.name),s=o.parsedJson.liquidity_amount;t[i]=`${+(t[i]??"0")+ +s}`}return console.log("Decoder.decodeClaimRewards",t),{txType:Ve.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:Ve.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as Qd}from"@mysten/sui/transactions";import zd from"sort-keys-recursive";var Ut=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(zd(this.data))}};var ri=class a extends Ut{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("BorrowIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let m=new Qd;return await i.borrowAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,m),m}static fromData(t){return console.log("BorrowIntention.fromData",t),new a(t)}};import{Transaction as ef}from"@mysten/sui/transactions";import{normalizeStructTag as Yd}from"@mysten/sui/utils";import{Side as bn}from"@suilend/sdk";import{isSendPoints as Jd}from"@suilend/sui-fe";import Zd from"bignumber.js";var tf=(a,e)=>{let t={[bn.DEPOSIT]:[],[bn.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[bn.DEPOSIT,bn.BORROW].forEach(o=>{let i=o===bn.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,s=e.userRewardManagers.find(c=>c.poolRewardManagerId===i.id);s&&(t[o]=i.poolRewards.map((c,m)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(m),rewardCoinType:Yd(c.coinType.name),side:o})).filter(c=>!Jd(c.rewardCoinType)&&!!s.rewards[Number(c.rewardIndex)]&&new Zd(s.rewards[Number(c.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},si=tf;var ci=class a extends Ut{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let m=new ef;return i.claimRewardsAndSendToUser(o.address,s.id,si(i,c),m),m}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as nf}from"@mysten/sui/transactions";var li=class a extends Ut{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimAndDepositIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let m=new nf;return i.claimRewardsAndDeposit(o.address,s.id,si(i,c),m),m}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as of}from"@mysten/sui/transactions";var ui=class a extends Ut{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;console.log("DepositIntention.build",n,o,i,s,c);let m=new of;return await i.depositIntoObligation(o.address,this.data.coinType,this.data.value,m,s?.id),m}static fromData(t){return console.log("DepositIntention.fromData",t),new a(t)}};import{Transaction as af}from"@mysten/sui/transactions";var pi=class a extends Ut{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("RepayIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let m=new af;return await i.repayIntoObligation(o.address,c.id,this.data.coinType,this.data.value,m),m}static fromData(t){return console.log("RepayIntention.fromData",t),new a(t)}};import{Transaction as rf}from"@mysten/sui/transactions";var mi=class a extends Ut{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("WithdrawIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let m=new rf;return await i.withdrawAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,m),m}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};var di=async(a,e)=>{let t=await Ds.initialize(cf,lf,a),n=await Ds.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(i=>Ds.getObligation(i.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},fi=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await di(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",i,"utils:",this.utils,"suiClient:",n);let c=new ii(t,i).decode();return{txType:sf.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await di(i,s));let c;switch(n){case"deposit":c=ui.fromData(o);break;case"withdraw":c=mi.fromData(o);break;case"borrow":c=ri.fromData(o);break;case"repay":c=pi.fromData(o);break;case"claim":c=ci.fromData(o);break;case"claimAndDeposit":c=li.fromData(o);break;default:throw new Error("not implemented")}let m=window.localStorage.getItem("obligationId"),b=this.utils.obligations?.find(w=>w.id===m)??this.utils.obligations?.[0],S=this.utils.obligationOwnerCaps?.find(w=>w.obligationId===b?.id);return c.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:S,obligation:b})}};var vs=async(a,e)=>{let t=await di(a,e),n=await fetch(`${uf}/springsui/lst-info`),o=await n.json();if(n?.statusCode===500)throw new Error("Failed to fetch SpringSui LST data");let s=Object.fromEntries(Object.values(o).map(c=>[c.LIQUID_STAKING_INFO.type,c.LIQUID_STAKING_INFO]));return{...t,LIQUID_STAKING_INFO_MAP:s}};var hi=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=ke(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:Tn.Other,type:"stake",intentionData:{amount:n,outCoinType:t}}}decodeStakeAndDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=ke(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:Tn.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=ke(e.RedeemEvent.parsedJson.event.typename.name),n=ke(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:Tn.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=ke(e.RedeemEvent.parsedJson.event.typename.name),n=ke(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:Tn.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=ke(e.RedeemEvent.parsedJson.event.typename.name),n=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:Tn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as df}from"@mysten/sui/transactions";import{LstClient as Vl,convertLstsAndRebalanceAndSendToUser as ff}from"@suilend/springsui-sdk";import mf from"sort-keys-recursive";var Ht=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(mf(this.data))}};var gi=class a extends Ht{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("ConvertIntention.build",n,o,i,s,c,m);let b=await Vl.initialize(n,Object.values(s).find(C=>C.type===this.data.inCoinType)),S=await Vl.initialize(n,Object.values(s).find(C=>C.type===this.data.outCoinType)),w=new df;return ff(b,S,w,o.address,this.data.amount),w}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as hf}from"@mysten/sui/transactions";import{createObligationIfNoneExists as gf,sendObligationToUser as yf}from"@suilend/sdk";import{LstClient as $l,convertLstsAndRebalance as bf}from"@suilend/springsui-sdk";var yi=class a extends Ht{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("ConvertAndDepositIntention.build",n,o,i,s,c,m);let b=await $l.initialize(n,Object.values(s).find(M=>M.type===this.data.inCoinType)),S=await $l.initialize(n,Object.values(s).find(M=>M.type===this.data.outCoinType)),w=new hf,{obligationOwnerCapId:C,didCreate:k}=gf(i,w,c),D=bf(b,S,w,o.address,this.data.amount);return i.deposit(D,this.data.outCoinType,C,w),k&&yf(C,o.address,w),w}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Tf}from"@mysten/sui/transactions";import{LstClient as Sf}from"@suilend/springsui-sdk";var bi=class a extends Ht{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("StakeIntention.build",n,o,i,s,c,m);let b=await Sf.initialize(n,Object.values(s).find(w=>w.type===this.data.outCoinType)),S=new Tf;return b.mintAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as wf}from"@mysten/sui/transactions";import{createObligationIfNoneExists as If,sendObligationToUser as Cf}from"@suilend/sdk";import{LstClient as xf}from"@suilend/springsui-sdk";var Ti=class a extends Ht{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("StakeAndDepositIntention.build",n,o,i,s,c,m);let b=await xf.initialize(n,Object.values(s).find(D=>D.type===this.data.outCoinType)),S=new wf,{obligationOwnerCapId:w,didCreate:C}=If(i,S,c),k=b.mintAmountAndRebalance(S,o.address,this.data.amount);return i.deposit(k,this.data.outCoinType,w,S),C&&Cf(w,o.address,S),S}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as kf}from"@mysten/sui/transactions";import{LstClient as Df}from"@suilend/springsui-sdk";var Si=class a extends Ht{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("UnstakeIntention.build",n,o,i,s,c,m);let b=await Df.initialize(n,Object.values(s).find(w=>w.type===this.data.inCoinType)),S=new kf;return b.redeemAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(t)}};var wi=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await vs(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",i);let c=new hi(t,i).decode();return{txType:vf.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await vs(i,s));let c;switch(n){case"stake":c=bi.fromData(o);break;case"stakeAndDeposit":c=Ti.fromData(o);break;case"convert":c=gi.fromData(o);break;case"convertAndDeposit":c=yi.fromData(o);break;case"unstake":c=Si.fromData(o);break;default:throw new Error("not implemented")}return c.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,LIQUID_STAKING_INFO_MAP:this.utils.LIQUID_STAKING_INFO_MAP,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as Pf}from"@msafe/sui3-utils";import{TransactionType as Hl}from"@msafe/sui3-utils";var Ii=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;decode(){if(this.isMintTransaction()){let e=this.getLiquidityChangeEvent("MintEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeMint(t)}if(this.isRedeemTransaction()){let e=this.getLiquidityChangeEvent("RedeemEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeRedeem(t)}throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(e){return this.simResult.events.find(t=>this.isLiquidityChangeEventType(t.type,e))}isLiquidityChangeEventType(e,t){return e.includes(t)}isMintTransaction(){return!!this.getMoveCallCommand("mint")}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(e){let{event:{sui_amount_in:t}}=e;return console.log("Decoder.decodeMint",t),{txType:Hl.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:Hl.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as Mf}from"@alphafi/stsui-sdk";var Ci=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new Mf(i).mint(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("MintIntention.fromData",t),new a(t)}};import{LST as Of}from"@alphafi/stsui-sdk";var xi=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new Of(i).redeem(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var ki=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 Ii(t,o).decode();return{txType:Pf.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=Ci.fromData(e.intentionData);break;case"redeem":n=xi.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as Zf}from"@msafe/sui3-utils";import{TurbosSdk as th}from"turbos-clmm-sdk";import{TransactionType as qt}from"@msafe/sui3-utils";import{fromBase64 as He}from"@mysten/bcs";import{bcs as Xe}from"@mysten/sui/bcs";import{BN as Bf}from"turbos-clmm-sdk";var zt={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Qt={PackageId:"0xdee9"};var Ef=(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}`)}},Di=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}txb;turbosSdk;config;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(`${zt.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${zt.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(`${Qt.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${Qt.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let e=this.transactions.find(k=>k.$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=Ef(t,n,this.swap1Layer,this.swap2Layer),i=o.map((k,D)=>{let M=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(D)),q=this.helper.decodeInputU128(this.helper.getInputsIndex(4+D+t)),U=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new Bf(q.toString()));return{pool:M,a2b:k,nextTickIndex:U}}),s=o[0]||t===1?e.MoveCall.typeArguments[0]:e.MoveCall.typeArguments[1],c=t===1?e.MoveCall.typeArguments[4]:o[0]?e.MoveCall.typeArguments[1]:e.MoveCall.typeArguments[0],m=this.helper.decodeInputAddress(this.helper.getInputsIndex(6+2*t)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(7+2*t)),S=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),w=this.helper.decodeInputU64(this.helper.getInputsIndex(2+t)),C=this.helper.decodeInputU64(this.helper.getInputsIndex(3+t));return{txType:qt.Other,type:"Swap",intentionData:{routes:i,coinTypeA:s,coinTypeB:c,address:m,amountA:S?w:C,amountB:S?C:w,amountSpecifiedIsInput:S,slippage:"0.1",deadline:b}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeInputAddress(this.helper.getInputsIndex(12)),n=this.helper.decodeInputU64(this.helper.getInputsIndex(8)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(9)),i=this.helper.decodeInputU32(this.helper.getInputsIndex(4)),s=this.helper.decodeInputBool(this.helper.getInputsIndex(5)),c=this.helper.decodeInputU32(this.helper.getInputsIndex(6)),m=this.helper.decodeInputBool(this.helper.getInputsIndex(7)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(13));return{txType:qt.Other,type:"AddLiquidity",intentionData:{pool:e,slippage:30,address:t,amountA:n,amountB:o,tickLower:s?-i:i,tickUpper:m?-c:c,deadline:b}}}decodeIncreaseLiquidity(e){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(4)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(6)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(9));return{txType:qt.Other,type:"IncreaseLiquidity",intentionData:{pool:t,slippage:30,address:e,amountA:o,amountB:i,nft:n,deadline:s}}}decodeDecreaseLiquidity(e){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),c=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:qt.Other,type:"DecreaseLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:c}}}decodeDecreaseLiquidityWithReturn(e){console.log(this.helper,"decodeDecreaseLiquidityWithReturn this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeOwnedObjectId(2),o=this.helper.decodeInputU64(3),i=this.helper.decodeInputU64(4),s=this.helper.decodeInputU64(5),c=this.helper.decodeInputU64(6);return{txType:qt.Other,type:"DecreaseLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:c}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(5)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:qt.Other,type:"CollectFee",intentionData:{pool:e,address:n,collectAmountA:o,collectAmountB:i,nft:t,deadline:s}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(6)),o=[0,0,0];this.collectRewardHelper.forEach(s=>{let c=s.decodeInputU64(s.getInputsIndex(4)),m=s.decodeInputU64(s.getInputsIndex(5));o[c]=m});let i=this.helper.decodeInputU64(7);return{txType:qt.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:qt.Other,type:"Burn",intentionData:{pool:e,nft:t}}}decodeRemoveLiquidity(e){console.log(this.helper,"decodeRemoveLiquidity this.helper");let t=30,n=this.decreaseLiquidityHelper.decodeSharedObjectId(this.decreaseLiquidityHelper.getInputsIndex(0)),o=this.decreaseLiquidityHelper.decodeOwnedObjectId(this.decreaseLiquidityHelper.getInputsIndex(2)),i=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(3)),s=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(4)),c=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(5)),m=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(6)),b=[0,0,0];this.collectRewardHelper.forEach(C=>{let k=C.decodeInputU64(C.getInputsIndex(4)),D=C.decodeInputU64(C.getInputsIndex(5));b[k]=D});let S=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,w=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(4))||0;return{txType:qt.Other,type:"RemoveLiquidity",intentionData:{pool:n,decreaseLiquidity:i,nft:o,amountA:(s/(100-t)*100).toFixed(0),amountB:(c/(100-t)*100).toFixed(0),slippage:t,address:e,collectAmountA:S,collectAmountB:w,rewardAmounts:b,deadline:m}}}decodeRemoveLiquidityWithReturn(e){console.log(this.helper,"decodeRemoveLiquidityWithReturn this.helper");let t=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeOwnedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),i=this.decreaseLiquidityHelper.decodeInputU64(4),s=this.decreaseLiquidityHelper.decodeInputU64(5),c=this.decreaseLiquidityHelper.decodeInputU64(6),m=this.collectRewardHelper.map(w=>w.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,S=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:qt.Other,type:"removeLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,collectAmountA:b,collectAmountB:S,rewardAmounts:m,deadline:c}}}decodePrixClaim(){return{txType:qt.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:qt.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:qt.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:qt.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 ye(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 ye(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 ye(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 ye(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Qt.PackageId}::clob_v2::swap_exact_base_for_quote`:!1);return new ye(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Qt.PackageId}::clob_v2::swap_exact_quote_for_base`:!1);return new ye(e,this.txb)}},ye=class{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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(Xe.u128().parse(Uint8Array.from(He(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(Xe.u64().parse(Uint8Array.from(He(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(Xe.u32().parse(Uint8Array.from(He(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(Xe.u8().parse(Uint8Array.from(He(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return Xe.Address.parse(Uint8Array.from(He(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return Xe.bool().parse(Uint8Array.from(He(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as Nf}from"turbos-clmm-sdk";var vi=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Nf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:m,tickLower:b,tickUpper:S,deadline:w,txb:C}=this.data;return n.pool.addLiquidity({pool:o,slippage:m,address:i,amountA:s,amountB:c,tickLower:b,tickUpper:S,deadline:w,txb:C})}static fromData(t){return new a(t)}};import{TurbosSdk as Wf}from"turbos-clmm-sdk";var Ai=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Wf(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 _f}from"turbos-clmm-sdk";var Mi=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new _f(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,collectAmountA:c,collectAmountB:m,deadline:b,txb:S}=this.data;return n.pool.collectFee({pool:o,address:i,collectAmountA:c,collectAmountB:m,nft:s,deadline:b,txb:S})}static fromData(t){return new a(t)}};import{TurbosSdk as Lf}from"turbos-clmm-sdk";var Oi=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Lf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,rewardAmounts:c,deadline:m,txb:b}=this.data;return n.pool.collectReward({pool:o,address:i,rewardAmounts:c,nft:s,deadline:m,txb:b})}static fromData(t){return new a(t)}};import{TurbosSdk as jf}from"turbos-clmm-sdk";var Pi=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new jf(t.network.replace("sui:",""),t.suiClient),{fee:o,address:i,tickLower:s,tickUpper:c,sqrtPrice:m,slippage:b,coinTypeA:S,coinTypeB:w,amountA:C,amountB:k,deadline:D,txb:M}=this.data;return n.pool.createPool({fee:o,amountA:C,amountB:k,address:i,tickLower:s,tickUpper:c,sqrtPrice:m,slippage:b,coinTypeA:S,coinTypeB:w,deadline:D,txb:M})}static fromData(t){return new a(t)}};import{TurbosSdk as Uf}from"turbos-clmm-sdk";var Ri=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Uf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:m,nft:b,decreaseLiquidity:S,deadline:w,txb:C}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:m,address:i,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:w,txb:C})}static fromData(t){return new a(t)}};import{TurbosSdk as qf}from"turbos-clmm-sdk";var Bi=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new qf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:m,nft:b,decreaseLiquidity:S,deadline:w}=this.data,{txb:C,coinA:k,coinB:D}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:m,address:i,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:w});return C.transferObjects([k,D],this.data.address),C}static fromData(t){return new a(t)}};import{TurbosSdk as Ff}from"turbos-clmm-sdk";var Ei=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Ff(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:m,nft:b,deadline:S,txb:w}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:m,address:i,amountA:s,amountB:c,nft:b,deadline:S,txb:w})}static fromData(t){return new a(t)}};import{Transaction as Kf}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Gf}from"@mysten/sui/utils";var Ni=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Kf;return n.moveCall({target:`${zt.PackageId}::claim::claim`,typeArguments:[zt.turbosCoinType],arguments:[n.object(zt.Claim),n.object(Gf)]}),n}static fromData(t){return new a(t)}};import{Transaction as Vf}from"@mysten/sui/transactions";var Wi=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Vf;return n.moveCall({target:`${zt.PackageId}::claim::join`,typeArguments:[zt.turbosCoinType],arguments:[n.object(zt.Claim)]}),n}static fromData(t){return new a(t)}};import{Transaction as $f}from"@mysten/sui/transactions";import{TurbosSdk as Hf}from"turbos-clmm-sdk";var _i=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Hf(t.network.replace("sui:",""),t.suiClient),o=new $f;return o=await n.pool.collectFee({txb:o,...this.data}),o=await n.pool.collectReward({txb:o,...this.data}),o=await n.pool.decreaseLiquidity({txb:o,...this.data}),o=await n.position.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(t){return new a(t)}};import{TurbosSdk as Xf}from"turbos-clmm-sdk";var Li=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Xf(t.network.replace("sui:",""),t.suiClient),{txb:o,coinA:i,coinB:s}=await n.pool.removeLiquidityWithReturn({...this.data});return o.transferObjects([i,s],this.data.address),o}static fromData(t){return new a(t)}};import{TurbosSdk as zf}from"turbos-clmm-sdk";var ji=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new zf(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:i,coinTypeB:s,address:c,amountA:m,amountB:b,slippage:S,amountSpecifiedIsInput:w,deadline:C,txb:k}=this.data;return n.trade.swap({routes:o,coinTypeA:i,coinTypeB:s,address:c,amountA:m,amountB:b,amountSpecifiedIsInput:w,slippage:S,deadline:C,txb:k})}static fromData(t){return new a(t)}};import{TurbosSdk as Yf}from"turbos-clmm-sdk";import{Transaction as Xl}from"@mysten/sui/transactions";import{normalizeSuiObjectId as zl}from"@mysten/sui/utils";import{unstable_getObjectId as Qf}from"turbos-clmm-sdk";var Sn=class{constructor(e){this.turbosSdk=e}turbosSdk;async getCoinsData(e,t,n){let o=[],i;do i=await this.turbosSdk.provider.getCoins({owner:e,coinType:t,cursor:i?.nextCursor}),o.push(...i.data);while(i.hasNextPage);let s=[],c=0;return o.sort((m,b)=>Number(b.balance)-Number(m.balance)).some(m=>c>=n?!0:(c+=Number(m.balance),s.push(m),!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:`${Qt.PackageId}::custodian_v2::AccountCap`}});return t.data[0]?.data?Qf(t.data[0].data):void 0}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${Qt.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var Ql=89,Yl=1e6,Jl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,c=new Xl,m=new Sn(s),b=await m.getCoinsData(i,t,o),[S,w]=m.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${t}`);let C=await m.IsAccountCap(i),k=C?c.object(C):m.createAccount(c),[D,M,q]=c.moveCall({typeArguments:[e,t],target:`${Qt.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[c.object(String(n)),c.pure.u64(Ql),k,c.pure.u64(o),c.object(zl("0x6")),S]});return w&&c.transferObjects([w],c.pure.address(i)),c.transferObjects([D],c.pure.address(i)),c.transferObjects([M],c.pure.address(i)),C||c.transferObjects([k],c.pure.address(i)),c.setSenderIfNotSet(i),c.setGasBudget(Yl),c},Zl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,c=new Xl,m=new Sn(s),b=await m.getCoinsData(i,e,o),[S,w]=m.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${e}`);let C=await m.IsAccountCap(i),k=C?c.object(C):m.createAccount(c),D=m.zero(t,c),[M,q,U]=c.moveCall({typeArguments:[e,t],target:`${Qt.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[c.object(String(n)),c.pure.u64(Ql),k,c.pure.u64(o),S,D,c.object(zl("0x6"))]});return w&&c.transferObjects([w],c.pure.address(i)),c.transferObjects([M],c.pure.address(i)),c.transferObjects([q],c.pure.address(i)),C||c.transferObjects([k],c.pure.address(i)),c.setSenderIfNotSet(i),c.setGasBudget(Yl),c};var Ui=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Yf(t.network.replace("sui:",""),t.suiClient);return await Zl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as Jf}from"turbos-clmm-sdk";var qi=class a extends x{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Jf(t.network.replace("sui:",""),t.suiClient);return await Jl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var Fi=class{application="turbos";supportSDK="@mysten/sui";async deserialize(e){console.log(e,"input");let t=new th(e.network.replace("sui:","")),n=await t.contract.getConfig(),{transaction:o,account:i}=e,c=await new Di(o,t,n).decode(i.address);return{txType:Zf.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.intentionData,"intentionData");let i;switch(e.txSubType){case"CreatePool":i=Pi.fromData(e.intentionData);break;case"AddLiquidity":i=vi.fromData(e.intentionData);break;case"IncreaseLiquidity":i=Ei.fromData(e.intentionData);break;case"DecreaseLiquidity":i=Ri.fromData(e.intentionData);break;case"DecreaseLiquidityWithReturn":i=Bi.fromData(e.intentionData);break;case"RemoveLiquidity":i=_i.fromData(e.intentionData);break;case"removeLiquidityWithReturn":i=Li.fromData(e.intentionData);break;case"CollectFee":i=Mi.fromData(e.intentionData);break;case"CollectReward":i=Oi.fromData(e.intentionData);break;case"Burn":i=Ai.fromData(e.intentionData);break;case"Swap":i=ji.fromData(e.intentionData);break;case"PrixJoin":i=Wi.fromData(e.intentionData);break;case"PrixClaim":i=Ni.fromData(e.intentionData);break;case"SwapExactBaseForQuote":i=Ui.fromData(e.intentionData);break;case"SwapExactQuoteForBase":i=qi.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{TransactionType as As}from"@msafe/sui3-utils";import{bcs as tu}from"@mysten/sui.js/bcs";import{normalizeStructTag as oh,normalizeSuiAddress as wn}from"@mysten/sui.js/utils";var eh={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},Pt=eh;var Ki=class{constructor(e){this.txb=e}txb;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(`${Pt.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${Pt.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${Pt.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:As.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:As.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:As.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(Pt.packageId));return new Ms(e,this.txb)}},Ms=class a{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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 wn(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 tu.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 wn(e.value.Object.ImmOrOwned.objectId)}return wn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return wn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return wn(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 tu.de(t,new Uint8Array(n))}typeArg(e){return oh(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as ih}from"@mysten/sui.js/transactions";import ah from"sort-keys-recursive";var be=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(ah(this.data))}};var Gi=class a extends be{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(t);let n=new ih,{ticketId:o}=this.data;return n.moveCall({target:`${Pt.packageId}::native_pool::burn_ticket`,arguments:[n.object(Pt.poolObjectId),n.object(Pt.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as rh}from"@mysten/sui.js/transactions";var Vi=class a extends be{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(t);let n=new rh,{amount:o}=this.data,[i]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${Pt.packageId}::native_pool::stake`,arguments:[n.object(Pt.poolObjectId),n.object(Pt.metadataObjectId),n.object(Pt.systemStateObjectId),i]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as sh}from"@mysten/sui.js/transactions";var $i=class a extends be{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(t);let n=new sh,{amount:o}=this.data,i=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[s,...c]=i.filter(S=>S.coinType.split("::")[0]===Pt.certType.split("::")[0]),m=n.object(s.coinObjectId);c.length&&n.mergeCoins(m,c.map(S=>n.object(S.coinObjectId)));let b=n.splitCoins(n.object(s.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${Pt.packageId}::native_pool::unstake`,arguments:[n.object(Pt.poolObjectId),n.object(Pt.metadataObjectId),n.object(Pt.systemStateObjectId),b]}),n}static fromData(t){return new a(t)}};var Hi=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new Ki(t).decode();return{txType:ch.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=Vi.fromData(e.intentionData);break;case"UnStake":o=$i.fromData(e.intentionData);break;case"ClaimTicket":o=Gi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Ch}from"@msafe/sui3-utils";import{asIntN as eu}from"@cetusprotocol/common-sdk";import{TransactionType as Te}from"@msafe/sui3-utils";import{fromBase64 as In}from"@mysten/bcs";import{bcs as Cn}from"@mysten/sui/bcs";var Xi=class{constructor(e,t){this.transaction=e;this.appContext=t}transaction;appContext;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:Te.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(eu(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(eu(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:Te.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:Te.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:Te.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:Te.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:Te.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:Te.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:Te.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(Cn.u32().parse(Uint8Array.from(In(this.inputs[e].Pure.bytes))))}getU64(e){return Cn.u64().parse(Uint8Array.from(In(this.inputs[e].Pure.bytes)))}getU128(e){return Cn.u128().parse(Uint8Array.from(In(this.inputs[e].Pure.bytes)))}getBoolean(e){return Cn.bool().parse(Uint8Array.from(In(this.inputs[e].Pure.bytes)))}getAddress(e){return Cn.Address.parse(Uint8Array.from(In(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as hh}from"@msafe/sui3-utils";import{buildTx as ph,getQuote as mh}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as De,ClmmPoolUtil as dh}from"@firefly-exchange/library-sui";import{Decimal as fh}from"turbos-clmm-sdk";import{SuiClient as lh}from"@firefly-exchange/library-sui";import{OnChainCalls as uh}from"@firefly-exchange/library-sui/spot";var nu={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x67b34b728c4e28e704dcfecf7c5cf55c7fc593b6c65c20d1836d97c209c1928a"}},ce=(a,e)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new lh({url:nu.rpc});return new uh(t,nu.objects,{address:e.address,isUIWallet:!1})};var Et=class{static async OpenPosition(e,t,n){let o=ce(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=ce(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=ce(n,t),i=await o.queryChain.getPool(e.pool);return await o.removeLiquidity(i,e.position,{liquidityAmount:new De(e.liquidity),tokenMaxA:new De(e.maxAmountTokenA),tokenMaxB:new De(e.maxAmountTokenB)},{returnTx:!0,sender:t.address})}static async closePosition(e,t,n){let o=ce(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=ce(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=ce(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=ce(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=ce(n,t),i=await mh({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new fh(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await ph({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{...dh.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new De(t.tokenAmount),t.isTokenAFixed,!0,0,new De(e.current_sqrt_price)),tokenMaxA:new De(t.maxAmountTokenA),tokenMaxB:new De(t.maxAmountTokenB)}}};var zi=class a extends x{constructor(t){super(t);this.data=t}data;txType=hh.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),Et.aggregator7KSwap(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as gh}from"@msafe/sui3-utils";var Qi=class a extends x{constructor(t){super(t);this.data=t}data;txType=gh.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Et.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as yh}from"@msafe/sui3-utils";var Yi=class a extends x{constructor(t){super(t);this.data=t}data;txType=yh.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Et.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as bh}from"@msafe/sui3-utils";var Ji=class a extends x{constructor(t){super(t);this.data=t}data;txType=bh.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),Et.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Th}from"@msafe/sui3-utils";var Zi=class a extends x{constructor(t){super(t);this.data=t}data;txType=Th.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Et.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Sh}from"@msafe/sui3-utils";var tr=class a extends x{constructor(t){super(t);this.data=t}data;txType=Sh.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Et.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wh}from"@msafe/sui3-utils";var er=class a extends x{constructor(t){super(t);this.data=t}data;txType=wh.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Et.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ih}from"@msafe/sui3-utils";var nr=class a extends x{constructor(t){super(t);this.data=t}data;txType=Ih.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Et.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var or=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:Ch.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=tr.fromData(e.intentionData);break;case"ProvideLiquidity":i=er.fromData(e.intentionData);break;case"RemoveLiquidity":i=nr.fromData(e.intentionData);break;case"ClosePosition":i=Qi.fromData(e.intentionData);break;case"CollectFee":i=Yi.fromData(e.intentionData);break;case"CollectRewards":i=Ji.fromData(e.intentionData);break;case"CollectRewardsAndFee":i=Zi.fromData(e.intentionData);break;case"Aggregator7KSwap":i=zi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Jh}from"@msafe/sui3-utils";import{Transaction as Eh}from"@mysten/sui/transactions";var R=Lu(au());import{TickMath as xn}from"@mmt-finance/clmm-sui-sdk";import Ah from"bignumber.js";var xh="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Q=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",kh=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},Dh=(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")},vh=(a,e,t,n)=>{if(a===xh){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=Dh(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 iu(a,e,t,n,o){let i=await kh({suiClient:a.rpcClient,address:e,type:t});return vh(Q(t),i.map(c=>({balance:BigInt(c.balance),objectId:c.coinObjectId})),n,o)}var ve=(a,e,t,n,o)=>{let i={poolId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType,tickSpacing:n.tickSpacing,isStable:n.isStable};n?.rewarders&&n?.rewarders.length>0&&a.Pool.collectAllRewards({txb:o,pool:i,rewarders:n.rewarders.map(s=>({coin_type:s.coinType,flow_rate:s.flowRate,reward_amount:s.rewardAmount,rewards_allocated:s.rewardsAllocated,hasEnded:s.hasEnded})),positionId:t.objectId,transferToAddress:e}),a.Pool.collectFee({txb:o,pool:i,positionId:t.objectId,transferToAddress:e})};async function ru({sdk:a,address:e,positionId:t,pool:n,txb:o,targetCoinType:i,slippage:s}){let c={poolId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType,tickSpacing:n.tickSpacing,isStable:n.isStable},m=n.rewarders.map(S=>S.coinType),b=await a.Pool.getAllPools();return m.length>0&&(console.log("claimRewardsAsTargetCoin input",{pool:c,positionId:t,rewarderCoinTypes:m,targetCoinType:i,slippage:s,toAddress:e}),await a.Pool.claimRewardsAs({txb:o,pool:c,positionId:t,rewarderCoinTypes:m,targetCoinType:i,slippage:s,toAddress:e,pools:b})),await a.Pool.claimFeeAs({txb:o,pool:c,positionId:t,targetCoinType:i,slippage:s,toAddress:e,pools:b}),o}function W(a,e,t){let n=a.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}function Mh(a){let e;return(a&1)!==0?e=new R.default("79232123823359799118286999567"):e=new R.default("79228162514264337593543950336"),(a&2)!==0&&(e=W(e.mul(new R.default("79236085330515764027303304731")),96,256)),(a&4)!==0&&(e=W(e.mul(new R.default("79244008939048815603706035061")),96,256)),(a&8)!==0&&(e=W(e.mul(new R.default("79259858533276714757314932305")),96,256)),(a&16)!==0&&(e=W(e.mul(new R.default("79291567232598584799939703904")),96,256)),(a&32)!==0&&(e=W(e.mul(new R.default("79355022692464371645785046466")),96,256)),(a&64)!==0&&(e=W(e.mul(new R.default("79482085999252804386437311141")),96,256)),(a&128)!==0&&(e=W(e.mul(new R.default("79736823300114093921829183326")),96,256)),(a&256)!==0&&(e=W(e.mul(new R.default("80248749790819932309965073892")),96,256)),(a&512)!==0&&(e=W(e.mul(new R.default("81282483887344747381513967011")),96,256)),(a&1024)!==0&&(e=W(e.mul(new R.default("83390072131320151908154831281")),96,256)),(a&2048)!==0&&(e=W(e.mul(new R.default("87770609709833776024991924138")),96,256)),(a&4096)!==0&&(e=W(e.mul(new R.default("97234110755111693312479820773")),96,256)),(a&8192)!==0&&(e=W(e.mul(new R.default("119332217159966728226237229890")),96,256)),(a&16384)!==0&&(e=W(e.mul(new R.default("179736315981702064433883588727")),96,256)),(a&32768)!==0&&(e=W(e.mul(new R.default("407748233172238350107850275304")),96,256)),(a&65536)!==0&&(e=W(e.mul(new R.default("2098478828474011932436660412517")),96,256)),(a&131072)!==0&&(e=W(e.mul(new R.default("55581415166113811149459800483533")),96,256)),(a&262144)!==0&&(e=W(e.mul(new R.default("38992368544603139932233054999993551")),96,256)),W(e,32,256)}function Oh(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=W(t.mul(new R.default("18444899583751176498")),64,256)),(e&4)!==0&&(t=W(t.mul(new R.default("18443055278223354162")),64,256)),(e&8)!==0&&(t=W(t.mul(new R.default("18439367220385604838")),64,256)),(e&16)!==0&&(t=W(t.mul(new R.default("18431993317065449817")),64,256)),(e&32)!==0&&(t=W(t.mul(new R.default("18417254355718160513")),64,256)),(e&64)!==0&&(t=W(t.mul(new R.default("18387811781193591352")),64,256)),(e&128)!==0&&(t=W(t.mul(new R.default("18329067761203520168")),64,256)),(e&256)!==0&&(t=W(t.mul(new R.default("18212142134806087854")),64,256)),(e&512)!==0&&(t=W(t.mul(new R.default("17980523815641551639")),64,256)),(e&1024)!==0&&(t=W(t.mul(new R.default("17526086738831147013")),64,256)),(e&2048)!==0&&(t=W(t.mul(new R.default("16651378430235024244")),64,256)),(e&4096)!==0&&(t=W(t.mul(new R.default("15030750278693429944")),64,256)),(e&8192)!==0&&(t=W(t.mul(new R.default("12247334978882834399")),64,256)),(e&16384)!==0&&(t=W(t.mul(new R.default("8131365268884726200")),64,256)),(e&32768)!==0&&(t=W(t.mul(new R.default("3584323654723342297")),64,256)),(e&65536)!==0&&(t=W(t.mul(new R.default("696457651847595233")),64,256)),(e&131072)!==0&&(t=W(t.mul(new R.default("26294789957452057")),64,256)),(e&262144)!==0&&(t=W(t.mul(new R.default("37481735321082")),64,256)),t}var su=(a,e,t)=>{let n=xn.convertI32ToSigned(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default(Mh(n)):new R.default(Oh(n))};function cu(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 ne({address:a,coinType:e,coinAmount:t,coinDecimals:n,tx:o,mmt:i}){let s=cu(t,n),c;return Number(t)?c=await iu(i,a,Q(e),s,o):[c]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),c}function lu({mmt:a,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let i=su(xn.convertI32ToSigned(n),t.tickSpacing),s=su(xn.convertI32ToSigned(o),t.tickSpacing);return a.Position.openPosition({txb:e,pool:t,lowerTickSqrtPrice:i.toString(),upperTickSqrtPrice:s.toString()})}var Ph=(a,e)=>{let n=1e4-Math.floor(e*100);return a*BigInt(n)/BigInt(1e4)};function ar(a,e,t){let n=cu(a,e);return Number(a)===0?BigInt(0):Ph(n,t)}async function Ae({poolId:a,currentSqrtPrice:e,tokenX:t,tokenY:n,slippagePercentage:o,isTokenX:i,suiClient:s}){let{object:c}=await s.getObject({objectId:a,include:{json:!0}}),m=c?.json?.sqrt_price??e,b=xn.sqrtPriceX64ToPrice(new R.default(m?.toString()),t.decimals,n.decimals),S=i?(100-o)/100:(100+o)/100,w=xn.priceToSqrtPriceX64(b.mul(S),t.decimals,n.decimals);return BigInt(w.toString())}var uu=async(a,e,t,n,o,i,s,c,m,b)=>{let S=await ne({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),w=await ne({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),C={poolId:s,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing,isStable:i.isStable},k=lu({mmt:a,tx:e,poolModel:C,selectedLowTick:c,selectedHighTick:m}),D=ar(n,i.tokenX.decimals,b),M=ar(o,i.tokenY.decimals,b);await a.Pool.addLiquidity({txb:e,pool:C,position:k,coinX:S,coinY:w,minAmountX:D,minAmountY:M,transferToAddress:t,useMvr:!0}),e.transferObjects([k],e.pure.address(t))},pu=async(a,e,t,n,o,i,s,c,m,b,S)=>{try{let w=await ne({mmt:a,address:n,coinType:i?s.tokenX.coinType:s.tokenY.coinType,coinAmount:o,coinDecimals:i?s.tokenX.decimals:s.tokenY.decimals,tx:e}),C={poolId:s.poolId,tokenXType:Q(s.tokenX.coinType),tokenYType:Q(s.tokenY.coinType),tickSpacing:s.tickSpacing,isStable:s.isStable},k=lu({mmt:a,tx:e,poolModel:C,selectedLowTick:c,selectedHighTick:m}),D=await Ae({suiClient:t,poolId:s.poolId,currentSqrtPrice:s.currentSqrtPrice,tokenX:s.tokenX,tokenY:s.tokenY,slippagePercentage:b,isTokenX:i});await a.Pool.zapInLiquidity({txb:e,pool:C,position:k,inputCoin:w,isXtoY:i,limitSqrtPrice:D,slippagePercentage:S,transferToAddress:n,useMvr:!0}),e.transferObjects([k],e.pure.address(n))}catch(w){console.error(w)}},mu=async(a,e,t,n,o,i,s,c)=>{let m=await ne({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),b=await ne({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),S={poolId:i.poolId,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing,isStable:i.isStable},w=ar(n,i.tokenX.decimals,c),C=ar(o,i.tokenY.decimals,c);await a.Pool.addLiquidity({txb:e,pool:S,position:s,coinX:m,coinY:b,minAmountX:w,minAmountY:C,transferToAddress:t})},du=async(a,e,t,n,o,i,s,c,m)=>{try{let b=await ne({mmt:a,address:t,coinType:o?i.tokenX.coinType:i.tokenY.coinType,coinAmount:n,coinDecimals:o?i.tokenX.decimals:i.tokenY.decimals,tx:e}),S={poolId:i.poolId,tokenXType:i.tokenX.coinType,tokenYType:i.tokenY.coinType,tickSpacing:i.tickSpacing,isStable:i.isStable},w=await Ae({suiClient:a.rpcClient,poolId:i.poolId,currentSqrtPrice:i.currentSqrtPrice,tokenX:i.tokenX,tokenY:i.tokenY,slippagePercentage:c,isTokenX:o});await a.Pool.zapInLiquidity({txb:e,pool:S,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:w,slippagePercentage:m,transferToAddress:t})}catch(b){throw console.error(b),b}},fu=(a,e)=>BigInt(e===100?a:new Ah(a).multipliedBy(e/100).toFixed(0)),hu=async(a,e,t,n,o,i)=>{let s=fu(t.liquidity,o),c=n.tokenX.coinType,m=n.tokenY.coinType,b={poolId:n.poolId,tokenXType:c,tokenYType:m,tickSpacing:n.tickSpacing,isStable:n.isStable};await a.Pool.removeLiquidity({txb:i,pool:b,positionId:t.objectId,liquidity:s,minAmountX:BigInt(0),minAmountY:BigInt(0),transferToAddress:e}),ve(a,e,t,n,i),o===100&&a.Position.closePosition({txb:i,positionId:t.objectId})},gu=async({sdk:a,address:e,position:t,pool:n,withdrawPercentage:o,txb:i,targetCoinType:s,slippage:c})=>{let m=fu(t.liquidity,o),b=Q(n.tokenX.coinType),S=Q(n.tokenY.coinType),w=Q(s)===S,C={poolId:n.poolId,tokenXType:b,tokenYType:S,tickSpacing:n.tickSpacing,isStable:n.isStable},k=a.Pool.removeLiquidity({txb:i,pool:C,positionId:t.objectId,liquidity:m,minAmountX:BigInt(0),minAmountY:BigInt(0)}),D=k?.removeLpCoinA,M=k?.removeLpCoinB;if(!D||!M)throw new Error("Remove liquidity Failed: empty remove result");let q=await Ae({suiClient:a.rpcClient,poolId:n.poolId,currentSqrtPrice:n.currentSqrtPrice,tokenX:n.tokenX,tokenY:n.tokenY,isTokenX:w,slippagePercentage:c}),U=w?D:M,G=i.moveCall({target:"0x2::coin::value",arguments:[U],typeArguments:[w?b:S]});i.transferObjects([w?M:D],e),a.Pool.swap({txb:i,transferToAddress:e,pool:C,limitSqrtPrice:q,amount:G,inputCoin:U,isXtoY:w}),ve(a,e,t,n,i),o===100&&a.Position.closePosition({txb:i,positionId:t.objectId})};import{MmtSDK as Rh}from"@mmt-finance/clmm-sui-sdk";import{VeMMT as Bh}from"@mmt-finance/ve-sdk-v1";function Rt(a){return new Rh({network:"mainnet",client:a})}function Xt(a){return new Bh(a,"mainnet")}var ir=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:i,amountA:s,amountB:c,pool:m,selectedLowTick:b,selectedHighTick:S,slippage:w}=o,C=new Eh;return await uu(n,C,i,s,c,m,m.poolId,b,S,w),C}static fromData(t){return new a(t)}};import{Transaction as Nh}from"@mysten/sui/transactions";var rr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:i,amount:s,isTokenX:c,pool:m,selectedLowTick:b,selectedHighTick:S,swapSlippage:w,addLiquiditySlippage:C}=o,k=new Nh;return await pu(n,k,t.suiGrpcClient,i,s,c,m,b,S,w,C),k}static fromData(t){return new a(t)}};import{Transaction as Wh}from"@mysten/sui/transactions";var ze="0x35169bc93e1fddfcf3a82a9eae726d349689ed59e4b065369af8789fe59f8608::mmt::MMT";var kn=async a=>{let e=await a.getSyncEpochInfo();if(!e)throw new Error("Failed to sync epoch");return e},yu=async(a,e,t,n,o,i,s,c)=>{let m=Number(n);if(!n||Number.isNaN(m)||m<=0)throw new Error(`Bond Failed: Invalid amount: ${n}. Amount must be greater than 0`);if(!i&&!s)throw new Error("Bond Failed: Failed to calculate unbond date");if(typeof s!="number"&&!i)throw new Error("Bond Failed: Invalid unbond date");let b=await ne({mmt:a,tx:c,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals});if(!b)throw new Error(`Bond Failed: Failed to get coin object for ${t.coinType}, amount: ${n}`);let S=await kn(e);await e.syncOrAdvanceEpoch(c,S.currentEpoch,S.syncedEpoch);let w=c.getData().commands.length;i?await e.createMaxBond(c,b,o):await e.createBond(c,b,BigInt(s),o);let k=c.getData().commands.length;if(k===0)throw new Error(`Bond Failed: Transaction has no commands. enableAutoMaxBond: ${i}, unbondAt: ${s}, amount: ${n}`);if(k===w)throw new Error(`Bond Failed: No new commands were added by bond operation. Commands before: ${w}, after: ${k}`)},bu=async(a,e,t,n,o,i,s,c)=>{let m=await kn(a);if(await a.syncOrAdvanceEpoch(c,m.currentEpoch,m.syncedEpoch),await a.claimReward(c,t,e),o)i||await a.setNormal(c,t);else if(i)await a.setMaxBond(c,t);else{if(typeof s!="number")throw new Error("Extend Failed: Failed to calculate unbond date");if(s<n)throw new Error("Extend Failed: New duration cannot be less than current duration");await a.extend(c,t,s)}},Tu=async(a,e,t,n,o)=>{let i=await kn(a);await a.syncOrAdvanceEpoch(o,i.currentEpoch,i.syncedEpoch),await a.claimReward(o,t,e),await n.reduce(async(s,c)=>{await s,await a.claimReward(o,c,e),await a.merge(o,t,c)},Promise.resolve())},Su=async(a,e,t,n)=>{let o=await kn(a);await a.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await a.claimReward(n,t,e),await a.unbond(n,t,e)},wu=async(a,e,t,n)=>{if(t.length>0&&t.some(o=>o.userRewardAmount>0)){let o=await kn(a);await a.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await t.reduce(async(i,s)=>{await i,s.userRewardAmount>0&&await a.claimReward(n,s.veId,e)},Promise.resolve())}},Iu=async(a,e,t,n,o,i,s,c,m)=>{let b=Q(i),S=[];for(let G of n)if(G.userRewardAmount>0){let $=await e.buildClaimRewardCoin(o,G.veId);S.push($)}let w=[];for(let G of S)Array.isArray(G)?w.push(...G):w.push(G);if(w.length===0)return;if(i===Q(ze)){o.transferObjects(w,o.pure.address(t));return}let C=c?.[i]?.[ze];if(!C||C.length===0)throw new Error(`No swap route found from ${ze} to ${i}`);let[k,...D]=w;D.length>0&&o.mergeCoins(k,D);let M=k,q=o.moveCall({target:"0x2::coin::value",arguments:[M],typeArguments:[ze]}),U=Q(ze);for(let G=0;G<C.length;G++){let $=C[G],E=m.find(X=>X.poolId===$);if(!E)throw new Error(`Pool ${$} not found`);let Nt=Q(E.tokenXType||E.tokenX?.coinType||"")===U,oe={poolId:E.poolId,tokenXType:E.tokenXType||E.tokenX?.coinType||"",tokenYType:E.tokenYType||E.tokenY?.coinType||"",tickSpacing:E.tickSpacing,isStable:E.isStable},Dn=await Ae({suiClient:a.rpcClient,poolId:E.poolId,currentSqrtPrice:E.currentSqrtPrice,tokenX:E.tokenX,tokenY:E.tokenY,slippagePercentage:s,isTokenX:Nt}),{outputCoin:Qe,leftoverCoin:Me}=a.Pool.swap({txb:o,pool:oe,amount:q,inputCoin:M,isXtoY:Nt,limitSqrtPrice:Dn})||{};if(!Qe||!Me)throw new Error(`Swap Failed: empty swap result for pool ${$}`);if(o.transferObjects([Me],o.pure.address(t)),M=Qe,U=Nt?Q(E.tokenYType||E.tokenY?.coinType||""):Q(E.tokenXType||E.tokenX?.coinType||""),U===i){o.transferObjects([M],o.pure.address(t));return}q=o.moveCall({target:"0x2::coin::value",arguments:[M],typeArguments:[U]})}o.transferObjects([M],o.pure.address(t))};var sr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),o=Xt(t.suiGrpcClient),{params:i}=this.data,{address:s,positions:c,pools:m,veMMTs:b}=i,S=new Wh;for(let w of c){let C=m.find(k=>k.poolId===w.poolId);C&&ve(n,s,w,C,S)}return await wu(o,s,b,S),S}static fromData(t){return new a(t)}};import{Transaction as _h}from"@mysten/sui/transactions";var cr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),o=Xt(t.suiGrpcClient),{params:i}=this.data,{claimVeMMTParams:s}=i,{address:c,veMMTs:m,targetCoinType:b,slippage:S,claimRoutes:w,pools:C}=s,k=new _h;return await Promise.all(i.claimParams.map(D=>ru({...D,sdk:n,txb:k}))),await Iu(n,o,c,m,k,b,S,w,C),k}static fromData(t){return new a(t)}};import{Transaction as Lh}from"@mysten/sui/transactions";var lr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:i,position:s,pool:c}=o,m=new Lh;return ve(n,i,s,c,m),m}static fromData(t){return new a(t)}};import{Transaction as jh}from"@mysten/sui/transactions";var ur=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:i,amountA:s,amountB:c,pool:m,positionObjectId:b,slippage:S}=o,w=new jh;return await mu(n,w,i,s,c,m,b,S),w}static fromData(t){return new a(t)}};import{Transaction as Uh}from"@mysten/sui/transactions";var pr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:i,amount:s,isTokenX:c,pool:m,positionObjectId:b,swapSlippage:S,addLiquiditySlippage:w}=o,C=new Uh;return await du(n,C,i,s,c,m,b,S,w),C}static fromData(t){return new a(t)}};import{Transaction as qh}from"@mysten/sui/transactions";var mr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{pool:i,position:s,address:c,withdrawPercentage:m,zapOutOn:b,targetCoinType:S,slippage:w}=o,C=new qh;return b?await gu({sdk:n,address:c,position:s,pool:i,withdrawPercentage:m,txb:C,targetCoinType:S,slippage:w}):await hu(n,c,s,i,m,C),C}static fromData(t){return new a(t)}};import{Transaction as Cu}from"@mysten/sui/transactions";import{LstClient as xu}from"@suilend/springsui-sdk";var Ps={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},ku=async(a,e,t)=>{let n=await xu.initialize(a,a,Ps),o=new Cu,[i]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,i);return o.transferObjects([s],e),o},Du=async(a,e,t)=>{let n=await xu.initialize(a,a,Ps),o=await a.getCoins({owner:e,coinType:Ps.type,limit:1e3});if(o.data.length===0)throw new Error("No lst coins found");let i=new Cu,s=o.data[0];o.data.length>1&&i.mergeCoins(s.coinObjectId,o.data.slice(1).map(b=>b.coinObjectId));let[c]=i.splitCoins(s.coinObjectId,[BigInt(t)]),m=n.redeem(i,c);return i.transferObjects([m],e),i};var dr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return ku(t.suiGrpcClient,o,i)}static fromData(t){return new a(t)}};import{Transaction as Hh}from"@mysten/sui/transactions";import{Utils as Fh}from"@mmt-finance/clmm-sui-sdk";function vu(a){return Array.isArray(a)&&(a.length===0||typeof a[0]=="string")}function Kh(a){return typeof a=="object"&&a!==null&&"coinType"in a&&"decimals"in a}function Gh(a,e){if(!/^\d+$/.test(a))return a;if(e<=0)return a.replace(/^0+/,"")||"0";let t=BigInt(a),n=10n**BigInt(e),o=t/n,i=t%n;if(i===0n)return o.toString();let s=i.toString().padStart(e,"0").replace(/0+$/,"");return`${o}.${s}`}function Vh(a){return{poolSource:"mmt-v3",poolId:a.poolId,tokenXType:a.tokenXType,tokenYType:a.tokenYType,tickSpacing:a.tickSpacing,lpFeesPercent:a.lpFeesPercent,feeRate:Number(a.lpFeesPercent)||0,protocolFeesPercent:a.protocolFeesPercent,isStable:a.isStable,currentSqrtPrice:a.currentSqrtPrice,currentTickIndex:a.currentTickIndex,liquidity:a.liquidity,liquidityHM:a.liquidityHM,tokenXReserve:a.tokenXReserve,tokenYReserve:a.tokenYReserve,tvl:a.tvl,apy:a.apy,volume24h:a.volume24h,fees24h:a.fees24h,timestamp:a.timestamp,rewarders:(a.rewarders||[]).map(e=>({coinType:e.coin_type,flowRate:e.flow_rate,hasEnded:e.hasEnded,rewardAmount:e.reward_amount,rewardsAllocated:e.rewards_allocated})),tokenX:a.tokenX,tokenY:a.tokenY,aprBreakdown:{total:a.aprBreakdown?.total??a.apy??"0",fee:a.aprBreakdown?.fee??"0",rewards:(a.aprBreakdown?.rewards||[]).map(e=>({coinType:e.coinType,apr:e.rewarderApr?.toString?.()??String(e.rewarderApr??"0"),amountPerDay:Number(e.amountPerDay??0)}))}}}function $h(a,e){let t=Q(e);for(let n of a){if(Q(n.tokenX?.coinType||"")===t)return n.tokenX;if(Q(n.tokenY?.coinType||"")===t)return n.tokenY}}async function Au(a,e){if(e.mode==="aggregator")throw new Error("Swap Failed: aggregator mode is not supported in MSafe rebuild path yet");let t=e.address,n=e.slippage??e.slippagePct;if(typeof n!="number")throw new Error("Swap Failed: missing slippage");if(!vu(e.route)&&Kh(e.tokenIn))return{route:e.route,tokenIn:e.tokenIn,amountIn:e.amountIn,address:t,slippage:n};if(!vu(e.route))throw new Error("Swap Failed: route must be NormalizedPool[] or poolId string[]");if(typeof e.tokenIn!="string")throw new Error("Swap Failed: tokenIn must be a coinType string when route is poolId[]");if(e.route.length===0)throw new Error("Swap Failed: empty route");let i=(await Promise.all(e.route.map(m=>a.Pool.getPool(m)))).map(Vh),s=$h(i,e.tokenIn);if(!s){let m=await a.Pool.getToken(e.tokenIn);s={coinType:m.coinType,tokenName:m.name,ticker:m.ticker,iconUrl:m.iconUrl,decimals:m.decimals,price:m.price,description:m.description,isVerified:m.isVerified}}let c=Gh(e.amountIn,s.decimals);return{route:i,tokenIn:s,amountIn:c,address:t,slippage:n}}var Mu=async(a,e,t,n,o,i,s)=>{let c=await ne({mmt:a,tx:i,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals}),m=i.moveCall({target:"0x2::coin::value",typeArguments:[t.coinType],arguments:[c]}),b=t.coinType;for(let S=0;S<e.length;S+=1){let w=e[S],{poolId:C,tokenX:k,tokenY:D,isStable:M,currentSqrtPrice:q}=w;if(!k?.coinType||!D?.coinType)throw new Error(`Swap Failed: route[${S}] is missing tokenX/tokenY after resolve. poolId=${w.poolId}`);let{id:U,isReverse:G}=Fh.mappedMmtV3Pool[C]||{id:C,isReverse:!1},$=Q(k.coinType)===Q(b);$=G?!$:$;let E=G?D:k,le=G?k:D,Nt=await Ae({poolId:U,tokenX:E,tokenY:le,slippagePercentage:s,isTokenX:$,suiClient:a.rpcClient,currentSqrtPrice:q}),oe=a.Pool.swap({txb:i,pool:{poolId:U,tokenXType:E.coinType,tokenYType:le.coinType,tickSpacing:w.tickSpacing,isStable:M},amount:m,inputCoin:c,isXtoY:$,limitSqrtPrice:Nt});if(!oe?.outputCoin)throw new Error("Swap Failed: empty swap result");i.transferObjects([c],i.pure.address(o)),c=oe.outputCoin,b=$?le.coinType:E.coinType,m=i.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[c]})}i.transferObjects([c],i.pure.address(o))};var fr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),o=await Au(n,this.data.params),i=new Hh;return await Mu(n,o.route,o.tokenIn,o.amountIn,o.address,i,o.slippage),i}static fromData(t){return new a(t)}};var hr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return Du(t.suiGrpcClient,o,i)}static fromData(t){return new a(t)}};import{Transaction as Xh}from"@mysten/sui/transactions";var gr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),o=Xt(t.suiGrpcClient),{params:i}=this.data,{token:s,amount:c,address:m,enableAutoMaxBond:b,unbondAt:S}=i,w=new Xh;return await yu(n,o,s,c,m,b,S,w),w}static fromData(t){return new a(t)}};import{Transaction as zh}from"@mysten/sui/transactions";var yr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Xt(t.suiGrpcClient),{params:o}=this.data,{address:i,veId:s,currentUnbondAt:c,isCurrentlyMaxBond:m,enableAutoMaxBond:b,unbondAt:S}=o,w=new zh;return await bu(n,i,s,c,m,b,S,w),w}static fromData(t){return new a(t)}};import{Transaction as Qh}from"@mysten/sui/transactions";var br=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Xt(t.suiGrpcClient),{params:o}=this.data,{address:i,veId:s,selectedVeMMTIds:c}=o,m=new Qh;return await Tu(n,i,s,c,m),m}static fromData(t){return new a(t)}};import{Transaction as Yh}from"@mysten/sui/transactions";var Tr=class a extends N{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Xt(t.suiGrpcClient),{params:o}=this.data,{address:i,veId:s}=o,c=new Yh;return await Su(n,i,s,c),c}static fromData(t){return new a(t)}};var Sr=class{application="mmt-dex";supportSDK="@mysten/sui-v2";async deserialize(e){let{appContext:t}=e;return{txType:Jh.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=fr.fromData(e.intentionData);break;case"AddLiquidity":t=ir.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=rr.fromData(e.intentionData);break;case"ClaimRewards":t=lr.fromData(e.intentionData);break;case"ClaimAllRewards":t=sr.fromData(e.intentionData);break;case"ClaimRewardsAs":t=cr.fromData(e.intentionData);break;case"RemoveLiquidity":t=mr.fromData(e.intentionData);break;case"StakeXSui":t=dr.fromData(e.intentionData);break;case"UnstakeXSui":t=hr.fromData(e.intentionData);break;case"ManageLiquidity":t=ur.fromData(e.intentionData);break;case"ManageLiquiditySingleSide":t=pr.fromData(e.intentionData);break;case"Bond":t=gr.fromData(e.intentionData);break;case"Extend":t=yr.fromData(e.intentionData);break;case"Merge":t=br.fromData(e.intentionData);break;case"Unbond":t=Tr.fromData(e.intentionData);break;default:throw new Error(`not implemented ${e.txSubType}`)}return t.build({suiGrpcClient:e.suiGrpcClient,account:e.account,network:e.network})}};var C3=xa.fromHelpers([new sa,new Ta,new aa,new Sa,new Mo,new Fi,new Sr,new ai,new Hi,new to,new fi,new wi,new Nn,new or,new ki]);export{C3 as appHelpers};
1
+ var Tp=Object.create;var Ei=Object.defineProperty;var Sp=Object.getOwnPropertyDescriptor;var wp=Object.getOwnPropertyNames;var Ip=Object.getPrototypeOf,Cp=Object.prototype.hasOwnProperty;var xp=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var kp=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ls=(r,e)=>{for(var t in e)Ei(r,t,{get:e[t],enumerable:!0})},Dp=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of wp(e))!Cp.call(r,o)&&o!==t&&Ei(r,o,{get:()=>e[o],enumerable:!(n=Sp(e,o))||n.enumerable});return r};var vp=(r,e,t)=>(t=r!=null?Tp(Ip(r)):{},Dp(e||!r||!r.__esModule?Ei(t,"default",{value:r,enumerable:!0}):t,r));var Hl=kp((Vl,Ts)=>{"use strict";(function(r,e){"use strict";function t(y,i){if(!y)throw new Error(i||"Assertion failed")}function n(y,i){y.super_=i;var p=function(){};p.prototype=i.prototype,y.prototype=new p,y.prototype.constructor=y}function o(y,i,p){if(o.isBN(y))return y;this.negative=0,this.words=null,this.length=0,this.red=null,y!==null&&((i==="le"||i==="be")&&(p=i,i=10),this._init(y||0,i||10,p||"be"))}typeof r=="object"?r.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var a;try{typeof window<"u"&&typeof window.Buffer<"u"?a=window.Buffer:a=xp("buffer").Buffer}catch{}o.isBN=function(i){return i instanceof o?!0:i!==null&&typeof i=="object"&&i.constructor.wordSize===o.wordSize&&Array.isArray(i.words)},o.max=function(i,p){return i.cmp(p)>0?i:p},o.min=function(i,p){return i.cmp(p)<0?i:p},o.prototype._init=function(i,p,u){if(typeof i=="number")return this._initNumber(i,p,u);if(typeof i=="object")return this._initArray(i,p,u);p==="hex"&&(p=16),t(p===(p|0)&&p>=2&&p<=36),i=i.toString().replace(/\s+/g,"");var d=0;i[0]==="-"&&(d++,this.negative=1),d<i.length&&(p===16?this._parseHex(i,d,u):(this._parseBase(i,p,d),u==="le"&&this._initArray(this.toArray(),p,u)))},o.prototype._initNumber=function(i,p,u){i<0&&(this.negative=1,i=-i),i<67108864?(this.words=[i&67108863],this.length=1):i<4503599627370496?(this.words=[i&67108863,i/67108864&67108863],this.length=2):(t(i<9007199254740992),this.words=[i&67108863,i/67108864&67108863,1],this.length=3),u==="le"&&this._initArray(this.toArray(),p,u)},o.prototype._initArray=function(i,p,u){if(t(typeof i.length=="number"),i.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(i.length/3),this.words=new Array(this.length);for(var d=0;d<this.length;d++)this.words[d]=0;var h,T,I=0;if(u==="be")for(d=i.length-1,h=0;d>=0;d-=3)T=i[d]|i[d-1]<<8|i[d-2]<<16,this.words[h]|=T<<I&67108863,this.words[h+1]=T>>>26-I&67108863,I+=24,I>=26&&(I-=26,h++);else if(u==="le")for(d=0,h=0;d<i.length;d+=3)T=i[d]|i[d+1]<<8|i[d+2]<<16,this.words[h]|=T<<I&67108863,this.words[h+1]=T>>>26-I&67108863,I+=24,I>=26&&(I-=26,h++);return this._strip()};function s(y,i){var p=y.charCodeAt(i);if(p>=48&&p<=57)return p-48;if(p>=65&&p<=70)return p-55;if(p>=97&&p<=102)return p-87;t(!1,"Invalid character in "+y)}function c(y,i,p){var u=s(y,p);return p-1>=i&&(u|=s(y,p-1)<<4),u}o.prototype._parseHex=function(i,p,u){this.length=Math.ceil((i.length-p)/6),this.words=new Array(this.length);for(var d=0;d<this.length;d++)this.words[d]=0;var h=0,T=0,I;if(u==="be")for(d=i.length-1;d>=p;d-=2)I=c(i,p,d)<<h,this.words[T]|=I&67108863,h>=18?(h-=18,T+=1,this.words[T]|=I>>>26):h+=8;else{var f=i.length-p;for(d=f%2===0?p+1:p;d<i.length;d+=2)I=c(i,p,d)<<h,this.words[T]|=I&67108863,h>=18?(h-=18,T+=1,this.words[T]|=I>>>26):h+=8}this._strip()};function m(y,i,p,u){for(var d=0,h=0,T=Math.min(y.length,p),I=i;I<T;I++){var f=y.charCodeAt(I)-48;d*=u,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<u,"Invalid character"),d+=h}return d}o.prototype._parseBase=function(i,p,u){this.words=[0],this.length=1;for(var d=0,h=1;h<=67108863;h*=p)d++;d--,h=h/p|0;for(var T=i.length-u,I=T%d,f=Math.min(T,T-I)+u,l=0,g=u;g<f;g+=d)l=m(i,g,g+d,p),this.imuln(h),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(I!==0){var A=1;for(l=m(i,g,i.length,p),g=0;g<I;g++)A*=p;this.imuln(A),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this._strip()},o.prototype.copy=function(i){i.words=new Array(this.length);for(var p=0;p<this.length;p++)i.words[p]=this.words[p];i.length=this.length,i.negative=this.negative,i.red=this.red};function b(y,i){y.words=i.words,y.length=i.length,y.negative=i.negative,y.red=i.red}if(o.prototype._move=function(i){b(i,this)},o.prototype.clone=function(){var i=new o(null);return this.copy(i),i},o.prototype._expand=function(i){for(;this.length<i;)this.words[this.length++]=0;return this},o.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},o.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{o.prototype[Symbol.for("nodejs.util.inspect.custom")]=S}catch{o.prototype.inspect=S}else o.prototype.inspect=S;function S(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var w=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],C=[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(i,p){i=i||10,p=p|0||1;var u;if(i===16||i==="hex"){u="";for(var d=0,h=0,T=0;T<this.length;T++){var I=this.words[T],f=((I<<d|h)&16777215).toString(16);h=I>>>24-d&16777215,d+=2,d>=26&&(d-=26,T--),h!==0||T!==this.length-1?u=w[6-f.length]+f+u:u=f+u}for(h!==0&&(u=h.toString(16)+u);u.length%p!==0;)u="0"+u;return this.negative!==0&&(u="-"+u),u}if(i===(i|0)&&i>=2&&i<=36){var l=C[i],g=x[i];u="";var A=this.clone();for(A.negative=0;!A.isZero();){var P=A.modrn(g).toString(i);A=A.idivn(g),A.isZero()?u=P+u:u=w[l-P.length]+P+u}for(this.isZero()&&(u="0"+u);u.length%p!==0;)u="0"+u;return this.negative!==0&&(u="-"+u),u}t(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var i=this.words[0];return this.length===2?i+=this.words[1]*67108864:this.length===3&&this.words[2]===1?i+=4503599627370496+this.words[1]*67108864:this.length>2&&t(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-i:i},o.prototype.toJSON=function(){return this.toString(16,2)},a&&(o.prototype.toBuffer=function(i,p){return this.toArrayLike(a,i,p)}),o.prototype.toArray=function(i,p){return this.toArrayLike(Array,i,p)};var D=function(i,p){return i.allocUnsafe?i.allocUnsafe(p):new i(p)};o.prototype.toArrayLike=function(i,p,u){this._strip();var d=this.byteLength(),h=u||Math.max(1,d);t(d<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var T=D(i,h),I=p==="le"?"LE":"BE";return this["_toArrayLike"+I](T,d),T},o.prototype._toArrayLikeLE=function(i,p){for(var u=0,d=0,h=0,T=0;h<this.length;h++){var I=this.words[h]<<T|d;i[u++]=I&255,u<i.length&&(i[u++]=I>>8&255),u<i.length&&(i[u++]=I>>16&255),T===6?(u<i.length&&(i[u++]=I>>24&255),d=0,T=0):(d=I>>>24,T+=2)}if(u<i.length)for(i[u++]=d;u<i.length;)i[u++]=0},o.prototype._toArrayLikeBE=function(i,p){for(var u=i.length-1,d=0,h=0,T=0;h<this.length;h++){var I=this.words[h]<<T|d;i[u--]=I&255,u>=0&&(i[u--]=I>>8&255),u>=0&&(i[u--]=I>>16&255),T===6?(u>=0&&(i[u--]=I>>24&255),d=0,T=0):(d=I>>>24,T+=2)}if(u>=0)for(i[u--]=d;u>=0;)i[u--]=0},Math.clz32?o.prototype._countBits=function(i){return 32-Math.clz32(i)}:o.prototype._countBits=function(i){var p=i,u=0;return p>=4096&&(u+=13,p>>>=13),p>=64&&(u+=7,p>>>=7),p>=8&&(u+=4,p>>>=4),p>=2&&(u+=2,p>>>=2),u+p},o.prototype._zeroBits=function(i){if(i===0)return 26;var p=i,u=0;return(p&8191)===0&&(u+=13,p>>>=13),(p&127)===0&&(u+=7,p>>>=7),(p&15)===0&&(u+=4,p>>>=4),(p&3)===0&&(u+=2,p>>>=2),(p&1)===0&&u++,u},o.prototype.bitLength=function(){var i=this.words[this.length-1],p=this._countBits(i);return(this.length-1)*26+p};function O(y){for(var i=new Array(y.bitLength()),p=0;p<i.length;p++){var u=p/26|0,d=p%26;i[p]=y.words[u]>>>d&1}return i}o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var i=0,p=0;p<this.length;p++){var u=this._zeroBits(this.words[p]);if(i+=u,u!==26)break}return i},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(i){return this.negative!==0?this.abs().inotn(i).iaddn(1):this.clone()},o.prototype.fromTwos=function(i){return this.testn(i-1)?this.notn(i).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(i){for(;this.length<i.length;)this.words[this.length++]=0;for(var p=0;p<i.length;p++)this.words[p]=this.words[p]|i.words[p];return this._strip()},o.prototype.ior=function(i){return t((this.negative|i.negative)===0),this.iuor(i)},o.prototype.or=function(i){return this.length>i.length?this.clone().ior(i):i.clone().ior(this)},o.prototype.uor=function(i){return this.length>i.length?this.clone().iuor(i):i.clone().iuor(this)},o.prototype.iuand=function(i){var p;this.length>i.length?p=i:p=this;for(var u=0;u<p.length;u++)this.words[u]=this.words[u]&i.words[u];return this.length=p.length,this._strip()},o.prototype.iand=function(i){return t((this.negative|i.negative)===0),this.iuand(i)},o.prototype.and=function(i){return this.length>i.length?this.clone().iand(i):i.clone().iand(this)},o.prototype.uand=function(i){return this.length>i.length?this.clone().iuand(i):i.clone().iuand(this)},o.prototype.iuxor=function(i){var p,u;this.length>i.length?(p=this,u=i):(p=i,u=this);for(var d=0;d<u.length;d++)this.words[d]=p.words[d]^u.words[d];if(this!==p)for(;d<p.length;d++)this.words[d]=p.words[d];return this.length=p.length,this._strip()},o.prototype.ixor=function(i){return t((this.negative|i.negative)===0),this.iuxor(i)},o.prototype.xor=function(i){return this.length>i.length?this.clone().ixor(i):i.clone().ixor(this)},o.prototype.uxor=function(i){return this.length>i.length?this.clone().iuxor(i):i.clone().iuxor(this)},o.prototype.inotn=function(i){t(typeof i=="number"&&i>=0);var p=Math.ceil(i/26)|0,u=i%26;this._expand(p),u>0&&p--;for(var d=0;d<p;d++)this.words[d]=~this.words[d]&67108863;return u>0&&(this.words[d]=~this.words[d]&67108863>>26-u),this._strip()},o.prototype.notn=function(i){return this.clone().inotn(i)},o.prototype.setn=function(i,p){t(typeof i=="number"&&i>=0);var u=i/26|0,d=i%26;return this._expand(u+1),p?this.words[u]=this.words[u]|1<<d:this.words[u]=this.words[u]&~(1<<d),this._strip()},o.prototype.iadd=function(i){var p;if(this.negative!==0&&i.negative===0)return this.negative=0,p=this.isub(i),this.negative^=1,this._normSign();if(this.negative===0&&i.negative!==0)return i.negative=0,p=this.isub(i),i.negative=1,p._normSign();var u,d;this.length>i.length?(u=this,d=i):(u=i,d=this);for(var h=0,T=0;T<d.length;T++)p=(u.words[T]|0)+(d.words[T]|0)+h,this.words[T]=p&67108863,h=p>>>26;for(;h!==0&&T<u.length;T++)p=(u.words[T]|0)+h,this.words[T]=p&67108863,h=p>>>26;if(this.length=u.length,h!==0)this.words[this.length]=h,this.length++;else if(u!==this)for(;T<u.length;T++)this.words[T]=u.words[T];return this},o.prototype.add=function(i){var p;return i.negative!==0&&this.negative===0?(i.negative=0,p=this.sub(i),i.negative^=1,p):i.negative===0&&this.negative!==0?(this.negative=0,p=i.sub(this),this.negative=1,p):this.length>i.length?this.clone().iadd(i):i.clone().iadd(this)},o.prototype.isub=function(i){if(i.negative!==0){i.negative=0;var p=this.iadd(i);return i.negative=1,p._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(i),this.negative=1,this._normSign();var u=this.cmp(i);if(u===0)return this.negative=0,this.length=1,this.words[0]=0,this;var d,h;u>0?(d=this,h=i):(d=i,h=this);for(var T=0,I=0;I<h.length;I++)p=(d.words[I]|0)-(h.words[I]|0)+T,T=p>>26,this.words[I]=p&67108863;for(;T!==0&&I<d.length;I++)p=(d.words[I]|0)+T,T=p>>26,this.words[I]=p&67108863;if(T===0&&I<d.length&&d!==this)for(;I<d.length;I++)this.words[I]=d.words[I];return this.length=Math.max(this.length,I),d!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(i){return this.clone().isub(i)};function G(y,i,p){p.negative=i.negative^y.negative;var u=y.length+i.length|0;p.length=u,u=u-1|0;var d=y.words[0]|0,h=i.words[0]|0,T=d*h,I=T&67108863,f=T/67108864|0;p.words[0]=I;for(var l=1;l<u;l++){for(var g=f>>>26,A=f&67108863,P=Math.min(l,i.length-1),R=Math.max(0,l-y.length+1);R<=P;R++){var N=l-R|0;d=y.words[N]|0,h=i.words[R]|0,T=d*h+A,g+=T/67108864|0,A=T&67108863}p.words[l]=A|0,f=g|0}return f!==0?p.words[l]=f|0:p.length--,p._strip()}var U=function(i,p,u){var d=i.words,h=p.words,T=u.words,I=0,f,l,g,A=d[0]|0,P=A&8191,R=A>>>13,N=d[1]|0,L=N&8191,q=N>>>13,pe=d[2]|0,F=pe&8191,H=pe>>>13,ws=d[3]|0,Y=ws&8191,J=ws>>>13,Is=d[4]|0,Z=Is&8191,tt=Is>>>13,Cs=d[5]|0,et=Cs&8191,nt=Cs>>>13,xs=d[6]|0,ot=xs&8191,rt=xs>>>13,ks=d[7]|0,at=ks&8191,it=ks>>>13,Ds=d[8]|0,st=Ds&8191,ct=Ds>>>13,vs=d[9]|0,lt=vs&8191,pt=vs>>>13,As=h[0]|0,ut=As&8191,mt=As>>>13,Ms=h[1]|0,dt=Ms&8191,ft=Ms>>>13,Os=h[2]|0,ht=Os&8191,gt=Os>>>13,Ps=h[3]|0,yt=Ps&8191,bt=Ps>>>13,Rs=h[4]|0,Tt=Rs&8191,St=Rs>>>13,Bs=h[5]|0,wt=Bs&8191,It=Bs>>>13,Ns=h[6]|0,Ct=Ns&8191,xt=Ns>>>13,Es=h[7]|0,kt=Es&8191,Dt=Es>>>13,Ws=h[8]|0,vt=Ws&8191,At=Ws>>>13,_s=h[9]|0,Mt=_s&8191,Ot=_s>>>13;u.negative=i.negative^p.negative,u.length=19,f=Math.imul(P,ut),l=Math.imul(P,mt),l=l+Math.imul(R,ut)|0,g=Math.imul(R,mt);var gi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(gi>>>26)|0,gi&=67108863,f=Math.imul(L,ut),l=Math.imul(L,mt),l=l+Math.imul(q,ut)|0,g=Math.imul(q,mt),f=f+Math.imul(P,dt)|0,l=l+Math.imul(P,ft)|0,l=l+Math.imul(R,dt)|0,g=g+Math.imul(R,ft)|0;var yi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(yi>>>26)|0,yi&=67108863,f=Math.imul(F,ut),l=Math.imul(F,mt),l=l+Math.imul(H,ut)|0,g=Math.imul(H,mt),f=f+Math.imul(L,dt)|0,l=l+Math.imul(L,ft)|0,l=l+Math.imul(q,dt)|0,g=g+Math.imul(q,ft)|0,f=f+Math.imul(P,ht)|0,l=l+Math.imul(P,gt)|0,l=l+Math.imul(R,ht)|0,g=g+Math.imul(R,gt)|0;var bi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(bi>>>26)|0,bi&=67108863,f=Math.imul(Y,ut),l=Math.imul(Y,mt),l=l+Math.imul(J,ut)|0,g=Math.imul(J,mt),f=f+Math.imul(F,dt)|0,l=l+Math.imul(F,ft)|0,l=l+Math.imul(H,dt)|0,g=g+Math.imul(H,ft)|0,f=f+Math.imul(L,ht)|0,l=l+Math.imul(L,gt)|0,l=l+Math.imul(q,ht)|0,g=g+Math.imul(q,gt)|0,f=f+Math.imul(P,yt)|0,l=l+Math.imul(P,bt)|0,l=l+Math.imul(R,yt)|0,g=g+Math.imul(R,bt)|0;var Ti=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Ti>>>26)|0,Ti&=67108863,f=Math.imul(Z,ut),l=Math.imul(Z,mt),l=l+Math.imul(tt,ut)|0,g=Math.imul(tt,mt),f=f+Math.imul(Y,dt)|0,l=l+Math.imul(Y,ft)|0,l=l+Math.imul(J,dt)|0,g=g+Math.imul(J,ft)|0,f=f+Math.imul(F,ht)|0,l=l+Math.imul(F,gt)|0,l=l+Math.imul(H,ht)|0,g=g+Math.imul(H,gt)|0,f=f+Math.imul(L,yt)|0,l=l+Math.imul(L,bt)|0,l=l+Math.imul(q,yt)|0,g=g+Math.imul(q,bt)|0,f=f+Math.imul(P,Tt)|0,l=l+Math.imul(P,St)|0,l=l+Math.imul(R,Tt)|0,g=g+Math.imul(R,St)|0;var Si=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Si>>>26)|0,Si&=67108863,f=Math.imul(et,ut),l=Math.imul(et,mt),l=l+Math.imul(nt,ut)|0,g=Math.imul(nt,mt),f=f+Math.imul(Z,dt)|0,l=l+Math.imul(Z,ft)|0,l=l+Math.imul(tt,dt)|0,g=g+Math.imul(tt,ft)|0,f=f+Math.imul(Y,ht)|0,l=l+Math.imul(Y,gt)|0,l=l+Math.imul(J,ht)|0,g=g+Math.imul(J,gt)|0,f=f+Math.imul(F,yt)|0,l=l+Math.imul(F,bt)|0,l=l+Math.imul(H,yt)|0,g=g+Math.imul(H,bt)|0,f=f+Math.imul(L,Tt)|0,l=l+Math.imul(L,St)|0,l=l+Math.imul(q,Tt)|0,g=g+Math.imul(q,St)|0,f=f+Math.imul(P,wt)|0,l=l+Math.imul(P,It)|0,l=l+Math.imul(R,wt)|0,g=g+Math.imul(R,It)|0;var wi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(wi>>>26)|0,wi&=67108863,f=Math.imul(ot,ut),l=Math.imul(ot,mt),l=l+Math.imul(rt,ut)|0,g=Math.imul(rt,mt),f=f+Math.imul(et,dt)|0,l=l+Math.imul(et,ft)|0,l=l+Math.imul(nt,dt)|0,g=g+Math.imul(nt,ft)|0,f=f+Math.imul(Z,ht)|0,l=l+Math.imul(Z,gt)|0,l=l+Math.imul(tt,ht)|0,g=g+Math.imul(tt,gt)|0,f=f+Math.imul(Y,yt)|0,l=l+Math.imul(Y,bt)|0,l=l+Math.imul(J,yt)|0,g=g+Math.imul(J,bt)|0,f=f+Math.imul(F,Tt)|0,l=l+Math.imul(F,St)|0,l=l+Math.imul(H,Tt)|0,g=g+Math.imul(H,St)|0,f=f+Math.imul(L,wt)|0,l=l+Math.imul(L,It)|0,l=l+Math.imul(q,wt)|0,g=g+Math.imul(q,It)|0,f=f+Math.imul(P,Ct)|0,l=l+Math.imul(P,xt)|0,l=l+Math.imul(R,Ct)|0,g=g+Math.imul(R,xt)|0;var Ii=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Ii>>>26)|0,Ii&=67108863,f=Math.imul(at,ut),l=Math.imul(at,mt),l=l+Math.imul(it,ut)|0,g=Math.imul(it,mt),f=f+Math.imul(ot,dt)|0,l=l+Math.imul(ot,ft)|0,l=l+Math.imul(rt,dt)|0,g=g+Math.imul(rt,ft)|0,f=f+Math.imul(et,ht)|0,l=l+Math.imul(et,gt)|0,l=l+Math.imul(nt,ht)|0,g=g+Math.imul(nt,gt)|0,f=f+Math.imul(Z,yt)|0,l=l+Math.imul(Z,bt)|0,l=l+Math.imul(tt,yt)|0,g=g+Math.imul(tt,bt)|0,f=f+Math.imul(Y,Tt)|0,l=l+Math.imul(Y,St)|0,l=l+Math.imul(J,Tt)|0,g=g+Math.imul(J,St)|0,f=f+Math.imul(F,wt)|0,l=l+Math.imul(F,It)|0,l=l+Math.imul(H,wt)|0,g=g+Math.imul(H,It)|0,f=f+Math.imul(L,Ct)|0,l=l+Math.imul(L,xt)|0,l=l+Math.imul(q,Ct)|0,g=g+Math.imul(q,xt)|0,f=f+Math.imul(P,kt)|0,l=l+Math.imul(P,Dt)|0,l=l+Math.imul(R,kt)|0,g=g+Math.imul(R,Dt)|0;var Ci=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Ci>>>26)|0,Ci&=67108863,f=Math.imul(st,ut),l=Math.imul(st,mt),l=l+Math.imul(ct,ut)|0,g=Math.imul(ct,mt),f=f+Math.imul(at,dt)|0,l=l+Math.imul(at,ft)|0,l=l+Math.imul(it,dt)|0,g=g+Math.imul(it,ft)|0,f=f+Math.imul(ot,ht)|0,l=l+Math.imul(ot,gt)|0,l=l+Math.imul(rt,ht)|0,g=g+Math.imul(rt,gt)|0,f=f+Math.imul(et,yt)|0,l=l+Math.imul(et,bt)|0,l=l+Math.imul(nt,yt)|0,g=g+Math.imul(nt,bt)|0,f=f+Math.imul(Z,Tt)|0,l=l+Math.imul(Z,St)|0,l=l+Math.imul(tt,Tt)|0,g=g+Math.imul(tt,St)|0,f=f+Math.imul(Y,wt)|0,l=l+Math.imul(Y,It)|0,l=l+Math.imul(J,wt)|0,g=g+Math.imul(J,It)|0,f=f+Math.imul(F,Ct)|0,l=l+Math.imul(F,xt)|0,l=l+Math.imul(H,Ct)|0,g=g+Math.imul(H,xt)|0,f=f+Math.imul(L,kt)|0,l=l+Math.imul(L,Dt)|0,l=l+Math.imul(q,kt)|0,g=g+Math.imul(q,Dt)|0,f=f+Math.imul(P,vt)|0,l=l+Math.imul(P,At)|0,l=l+Math.imul(R,vt)|0,g=g+Math.imul(R,At)|0;var xi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(xi>>>26)|0,xi&=67108863,f=Math.imul(lt,ut),l=Math.imul(lt,mt),l=l+Math.imul(pt,ut)|0,g=Math.imul(pt,mt),f=f+Math.imul(st,dt)|0,l=l+Math.imul(st,ft)|0,l=l+Math.imul(ct,dt)|0,g=g+Math.imul(ct,ft)|0,f=f+Math.imul(at,ht)|0,l=l+Math.imul(at,gt)|0,l=l+Math.imul(it,ht)|0,g=g+Math.imul(it,gt)|0,f=f+Math.imul(ot,yt)|0,l=l+Math.imul(ot,bt)|0,l=l+Math.imul(rt,yt)|0,g=g+Math.imul(rt,bt)|0,f=f+Math.imul(et,Tt)|0,l=l+Math.imul(et,St)|0,l=l+Math.imul(nt,Tt)|0,g=g+Math.imul(nt,St)|0,f=f+Math.imul(Z,wt)|0,l=l+Math.imul(Z,It)|0,l=l+Math.imul(tt,wt)|0,g=g+Math.imul(tt,It)|0,f=f+Math.imul(Y,Ct)|0,l=l+Math.imul(Y,xt)|0,l=l+Math.imul(J,Ct)|0,g=g+Math.imul(J,xt)|0,f=f+Math.imul(F,kt)|0,l=l+Math.imul(F,Dt)|0,l=l+Math.imul(H,kt)|0,g=g+Math.imul(H,Dt)|0,f=f+Math.imul(L,vt)|0,l=l+Math.imul(L,At)|0,l=l+Math.imul(q,vt)|0,g=g+Math.imul(q,At)|0,f=f+Math.imul(P,Mt)|0,l=l+Math.imul(P,Ot)|0,l=l+Math.imul(R,Mt)|0,g=g+Math.imul(R,Ot)|0;var ki=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(ki>>>26)|0,ki&=67108863,f=Math.imul(lt,dt),l=Math.imul(lt,ft),l=l+Math.imul(pt,dt)|0,g=Math.imul(pt,ft),f=f+Math.imul(st,ht)|0,l=l+Math.imul(st,gt)|0,l=l+Math.imul(ct,ht)|0,g=g+Math.imul(ct,gt)|0,f=f+Math.imul(at,yt)|0,l=l+Math.imul(at,bt)|0,l=l+Math.imul(it,yt)|0,g=g+Math.imul(it,bt)|0,f=f+Math.imul(ot,Tt)|0,l=l+Math.imul(ot,St)|0,l=l+Math.imul(rt,Tt)|0,g=g+Math.imul(rt,St)|0,f=f+Math.imul(et,wt)|0,l=l+Math.imul(et,It)|0,l=l+Math.imul(nt,wt)|0,g=g+Math.imul(nt,It)|0,f=f+Math.imul(Z,Ct)|0,l=l+Math.imul(Z,xt)|0,l=l+Math.imul(tt,Ct)|0,g=g+Math.imul(tt,xt)|0,f=f+Math.imul(Y,kt)|0,l=l+Math.imul(Y,Dt)|0,l=l+Math.imul(J,kt)|0,g=g+Math.imul(J,Dt)|0,f=f+Math.imul(F,vt)|0,l=l+Math.imul(F,At)|0,l=l+Math.imul(H,vt)|0,g=g+Math.imul(H,At)|0,f=f+Math.imul(L,Mt)|0,l=l+Math.imul(L,Ot)|0,l=l+Math.imul(q,Mt)|0,g=g+Math.imul(q,Ot)|0;var Di=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Di>>>26)|0,Di&=67108863,f=Math.imul(lt,ht),l=Math.imul(lt,gt),l=l+Math.imul(pt,ht)|0,g=Math.imul(pt,gt),f=f+Math.imul(st,yt)|0,l=l+Math.imul(st,bt)|0,l=l+Math.imul(ct,yt)|0,g=g+Math.imul(ct,bt)|0,f=f+Math.imul(at,Tt)|0,l=l+Math.imul(at,St)|0,l=l+Math.imul(it,Tt)|0,g=g+Math.imul(it,St)|0,f=f+Math.imul(ot,wt)|0,l=l+Math.imul(ot,It)|0,l=l+Math.imul(rt,wt)|0,g=g+Math.imul(rt,It)|0,f=f+Math.imul(et,Ct)|0,l=l+Math.imul(et,xt)|0,l=l+Math.imul(nt,Ct)|0,g=g+Math.imul(nt,xt)|0,f=f+Math.imul(Z,kt)|0,l=l+Math.imul(Z,Dt)|0,l=l+Math.imul(tt,kt)|0,g=g+Math.imul(tt,Dt)|0,f=f+Math.imul(Y,vt)|0,l=l+Math.imul(Y,At)|0,l=l+Math.imul(J,vt)|0,g=g+Math.imul(J,At)|0,f=f+Math.imul(F,Mt)|0,l=l+Math.imul(F,Ot)|0,l=l+Math.imul(H,Mt)|0,g=g+Math.imul(H,Ot)|0;var vi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(vi>>>26)|0,vi&=67108863,f=Math.imul(lt,yt),l=Math.imul(lt,bt),l=l+Math.imul(pt,yt)|0,g=Math.imul(pt,bt),f=f+Math.imul(st,Tt)|0,l=l+Math.imul(st,St)|0,l=l+Math.imul(ct,Tt)|0,g=g+Math.imul(ct,St)|0,f=f+Math.imul(at,wt)|0,l=l+Math.imul(at,It)|0,l=l+Math.imul(it,wt)|0,g=g+Math.imul(it,It)|0,f=f+Math.imul(ot,Ct)|0,l=l+Math.imul(ot,xt)|0,l=l+Math.imul(rt,Ct)|0,g=g+Math.imul(rt,xt)|0,f=f+Math.imul(et,kt)|0,l=l+Math.imul(et,Dt)|0,l=l+Math.imul(nt,kt)|0,g=g+Math.imul(nt,Dt)|0,f=f+Math.imul(Z,vt)|0,l=l+Math.imul(Z,At)|0,l=l+Math.imul(tt,vt)|0,g=g+Math.imul(tt,At)|0,f=f+Math.imul(Y,Mt)|0,l=l+Math.imul(Y,Ot)|0,l=l+Math.imul(J,Mt)|0,g=g+Math.imul(J,Ot)|0;var Ai=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Ai>>>26)|0,Ai&=67108863,f=Math.imul(lt,Tt),l=Math.imul(lt,St),l=l+Math.imul(pt,Tt)|0,g=Math.imul(pt,St),f=f+Math.imul(st,wt)|0,l=l+Math.imul(st,It)|0,l=l+Math.imul(ct,wt)|0,g=g+Math.imul(ct,It)|0,f=f+Math.imul(at,Ct)|0,l=l+Math.imul(at,xt)|0,l=l+Math.imul(it,Ct)|0,g=g+Math.imul(it,xt)|0,f=f+Math.imul(ot,kt)|0,l=l+Math.imul(ot,Dt)|0,l=l+Math.imul(rt,kt)|0,g=g+Math.imul(rt,Dt)|0,f=f+Math.imul(et,vt)|0,l=l+Math.imul(et,At)|0,l=l+Math.imul(nt,vt)|0,g=g+Math.imul(nt,At)|0,f=f+Math.imul(Z,Mt)|0,l=l+Math.imul(Z,Ot)|0,l=l+Math.imul(tt,Mt)|0,g=g+Math.imul(tt,Ot)|0;var Mi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Mi>>>26)|0,Mi&=67108863,f=Math.imul(lt,wt),l=Math.imul(lt,It),l=l+Math.imul(pt,wt)|0,g=Math.imul(pt,It),f=f+Math.imul(st,Ct)|0,l=l+Math.imul(st,xt)|0,l=l+Math.imul(ct,Ct)|0,g=g+Math.imul(ct,xt)|0,f=f+Math.imul(at,kt)|0,l=l+Math.imul(at,Dt)|0,l=l+Math.imul(it,kt)|0,g=g+Math.imul(it,Dt)|0,f=f+Math.imul(ot,vt)|0,l=l+Math.imul(ot,At)|0,l=l+Math.imul(rt,vt)|0,g=g+Math.imul(rt,At)|0,f=f+Math.imul(et,Mt)|0,l=l+Math.imul(et,Ot)|0,l=l+Math.imul(nt,Mt)|0,g=g+Math.imul(nt,Ot)|0;var Oi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Oi>>>26)|0,Oi&=67108863,f=Math.imul(lt,Ct),l=Math.imul(lt,xt),l=l+Math.imul(pt,Ct)|0,g=Math.imul(pt,xt),f=f+Math.imul(st,kt)|0,l=l+Math.imul(st,Dt)|0,l=l+Math.imul(ct,kt)|0,g=g+Math.imul(ct,Dt)|0,f=f+Math.imul(at,vt)|0,l=l+Math.imul(at,At)|0,l=l+Math.imul(it,vt)|0,g=g+Math.imul(it,At)|0,f=f+Math.imul(ot,Mt)|0,l=l+Math.imul(ot,Ot)|0,l=l+Math.imul(rt,Mt)|0,g=g+Math.imul(rt,Ot)|0;var Pi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Pi>>>26)|0,Pi&=67108863,f=Math.imul(lt,kt),l=Math.imul(lt,Dt),l=l+Math.imul(pt,kt)|0,g=Math.imul(pt,Dt),f=f+Math.imul(st,vt)|0,l=l+Math.imul(st,At)|0,l=l+Math.imul(ct,vt)|0,g=g+Math.imul(ct,At)|0,f=f+Math.imul(at,Mt)|0,l=l+Math.imul(at,Ot)|0,l=l+Math.imul(it,Mt)|0,g=g+Math.imul(it,Ot)|0;var Ri=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Ri>>>26)|0,Ri&=67108863,f=Math.imul(lt,vt),l=Math.imul(lt,At),l=l+Math.imul(pt,vt)|0,g=Math.imul(pt,At),f=f+Math.imul(st,Mt)|0,l=l+Math.imul(st,Ot)|0,l=l+Math.imul(ct,Mt)|0,g=g+Math.imul(ct,Ot)|0;var Bi=(I+f|0)+((l&8191)<<13)|0;I=(g+(l>>>13)|0)+(Bi>>>26)|0,Bi&=67108863,f=Math.imul(lt,Mt),l=Math.imul(lt,Ot),l=l+Math.imul(pt,Mt)|0,g=Math.imul(pt,Ot);var Ni=(I+f|0)+((l&8191)<<13)|0;return I=(g+(l>>>13)|0)+(Ni>>>26)|0,Ni&=67108863,T[0]=gi,T[1]=yi,T[2]=bi,T[3]=Ti,T[4]=Si,T[5]=wi,T[6]=Ii,T[7]=Ci,T[8]=xi,T[9]=ki,T[10]=Di,T[11]=vi,T[12]=Ai,T[13]=Mi,T[14]=Oi,T[15]=Pi,T[16]=Ri,T[17]=Bi,T[18]=Ni,I!==0&&(T[19]=I,u.length++),u};Math.imul||(U=G);function K(y,i,p){p.negative=i.negative^y.negative,p.length=y.length+i.length;for(var u=0,d=0,h=0;h<p.length-1;h++){var T=d;d=0;for(var I=u&67108863,f=Math.min(h,i.length-1),l=Math.max(0,h-y.length+1);l<=f;l++){var g=h-l,A=y.words[g]|0,P=i.words[l]|0,R=A*P,N=R&67108863;T=T+(R/67108864|0)|0,N=N+I|0,I=N&67108863,T=T+(N>>>26)|0,d+=T>>>26,T&=67108863}p.words[h]=I,u=T,T=d}return u!==0?p.words[h]=u:p.length--,p._strip()}function V(y,i,p){return K(y,i,p)}o.prototype.mulTo=function(i,p){var u,d=this.length+i.length;return this.length===10&&i.length===10?u=U(this,i,p):d<63?u=G(this,i,p):d<1024?u=K(this,i,p):u=V(this,i,p),u};function E(y,i){this.x=y,this.y=i}E.prototype.makeRBT=function(i){for(var p=new Array(i),u=o.prototype._countBits(i)-1,d=0;d<i;d++)p[d]=this.revBin(d,u,i);return p},E.prototype.revBin=function(i,p,u){if(i===0||i===u-1)return i;for(var d=0,h=0;h<p;h++)d|=(i&1)<<p-h-1,i>>=1;return d},E.prototype.permute=function(i,p,u,d,h,T){for(var I=0;I<T;I++)d[I]=p[i[I]],h[I]=u[i[I]]},E.prototype.transform=function(i,p,u,d,h,T){this.permute(T,i,p,u,d,h);for(var I=1;I<h;I<<=1)for(var f=I<<1,l=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),A=0;A<h;A+=f)for(var P=l,R=g,N=0;N<I;N++){var L=u[A+N],q=d[A+N],pe=u[A+N+I],F=d[A+N+I],H=P*pe-R*F;F=P*F+R*pe,pe=H,u[A+N]=L+pe,d[A+N]=q+F,u[A+N+I]=L-pe,d[A+N+I]=q-F,N!==f&&(H=l*P-g*R,R=l*R+g*P,P=H)}},E.prototype.guessLen13b=function(i,p){var u=Math.max(p,i)|1,d=u&1,h=0;for(u=u/2|0;u;u=u>>>1)h++;return 1<<h+1+d},E.prototype.conjugate=function(i,p,u){if(!(u<=1))for(var d=0;d<u/2;d++){var h=i[d];i[d]=i[u-d-1],i[u-d-1]=h,h=p[d],p[d]=-p[u-d-1],p[u-d-1]=-h}},E.prototype.normalize13b=function(i,p){for(var u=0,d=0;d<p/2;d++){var h=Math.round(i[2*d+1]/p)*8192+Math.round(i[2*d]/p)+u;i[d]=h&67108863,h<67108864?u=0:u=h/67108864|0}return i},E.prototype.convert13b=function(i,p,u,d){for(var h=0,T=0;T<p;T++)h=h+(i[T]|0),u[2*T]=h&8191,h=h>>>13,u[2*T+1]=h&8191,h=h>>>13;for(T=2*p;T<d;++T)u[T]=0;t(h===0),t((h&-8192)===0)},E.prototype.stub=function(i){for(var p=new Array(i),u=0;u<i;u++)p[u]=0;return p},E.prototype.mulp=function(i,p,u){var d=2*this.guessLen13b(i.length,p.length),h=this.makeRBT(d),T=this.stub(d),I=new Array(d),f=new Array(d),l=new Array(d),g=new Array(d),A=new Array(d),P=new Array(d),R=u.words;R.length=d,this.convert13b(i.words,i.length,I,d),this.convert13b(p.words,p.length,g,d),this.transform(I,T,f,l,d,h),this.transform(g,T,A,P,d,h);for(var N=0;N<d;N++){var L=f[N]*A[N]-l[N]*P[N];l[N]=f[N]*P[N]+l[N]*A[N],f[N]=L}return this.conjugate(f,l,d),this.transform(f,l,R,T,d,h),this.conjugate(R,T,d),this.normalize13b(R,d),u.negative=i.negative^p.negative,u.length=i.length+p.length,u._strip()},o.prototype.mul=function(i){var p=new o(null);return p.words=new Array(this.length+i.length),this.mulTo(i,p)},o.prototype.mulf=function(i){var p=new o(null);return p.words=new Array(this.length+i.length),V(this,i,p)},o.prototype.imul=function(i){return this.clone().mulTo(i,this)},o.prototype.imuln=function(i){var p=i<0;p&&(i=-i),t(typeof i=="number"),t(i<67108864);for(var u=0,d=0;d<this.length;d++){var h=(this.words[d]|0)*i,T=(h&67108863)+(u&67108863);u>>=26,u+=h/67108864|0,u+=T>>>26,this.words[d]=T&67108863}return u!==0&&(this.words[d]=u,this.length++),this.length=i===0?1:this.length,p?this.ineg():this},o.prototype.muln=function(i){return this.clone().imuln(i)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(i){var p=O(i);if(p.length===0)return new o(1);for(var u=this,d=0;d<p.length&&p[d]===0;d++,u=u.sqr());if(++d<p.length)for(var h=u.sqr();d<p.length;d++,h=h.sqr())p[d]!==0&&(u=u.mul(h));return u},o.prototype.iushln=function(i){t(typeof i=="number"&&i>=0);var p=i%26,u=(i-p)/26,d=67108863>>>26-p<<26-p,h;if(p!==0){var T=0;for(h=0;h<this.length;h++){var I=this.words[h]&d,f=(this.words[h]|0)-I<<p;this.words[h]=f|T,T=I>>>26-p}T&&(this.words[h]=T,this.length++)}if(u!==0){for(h=this.length-1;h>=0;h--)this.words[h+u]=this.words[h];for(h=0;h<u;h++)this.words[h]=0;this.length+=u}return this._strip()},o.prototype.ishln=function(i){return t(this.negative===0),this.iushln(i)},o.prototype.iushrn=function(i,p,u){t(typeof i=="number"&&i>=0);var d;p?d=(p-p%26)/26:d=0;var h=i%26,T=Math.min((i-h)/26,this.length),I=67108863^67108863>>>h<<h,f=u;if(d-=T,d=Math.max(0,d),f){for(var l=0;l<T;l++)f.words[l]=this.words[l];f.length=T}if(T!==0)if(this.length>T)for(this.length-=T,l=0;l<this.length;l++)this.words[l]=this.words[l+T];else this.words[0]=0,this.length=1;var g=0;for(l=this.length-1;l>=0&&(g!==0||l>=d);l--){var A=this.words[l]|0;this.words[l]=g<<26-h|A>>>h,g=A&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(i,p,u){return t(this.negative===0),this.iushrn(i,p,u)},o.prototype.shln=function(i){return this.clone().ishln(i)},o.prototype.ushln=function(i){return this.clone().iushln(i)},o.prototype.shrn=function(i){return this.clone().ishrn(i)},o.prototype.ushrn=function(i){return this.clone().iushrn(i)},o.prototype.testn=function(i){t(typeof i=="number"&&i>=0);var p=i%26,u=(i-p)/26,d=1<<p;if(this.length<=u)return!1;var h=this.words[u];return!!(h&d)},o.prototype.imaskn=function(i){t(typeof i=="number"&&i>=0);var p=i%26,u=(i-p)/26;if(t(this.negative===0,"imaskn works only with positive numbers"),this.length<=u)return this;if(p!==0&&u++,this.length=Math.min(u,this.length),p!==0){var d=67108863^67108863>>>p<<p;this.words[this.length-1]&=d}return this.length===0&&(this.words[0]=0,this.length=1),this._strip()},o.prototype.maskn=function(i){return this.clone().imaskn(i)},o.prototype.iaddn=function(i){return t(typeof i=="number"),t(i<67108864),i<0?this.isubn(-i):this.negative!==0?this.length===1&&(this.words[0]|0)<=i?(this.words[0]=i-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(i),this.negative=1,this):this._iaddn(i)},o.prototype._iaddn=function(i){this.words[0]+=i;for(var p=0;p<this.length&&this.words[p]>=67108864;p++)this.words[p]-=67108864,p===this.length-1?this.words[p+1]=1:this.words[p+1]++;return this.length=Math.max(this.length,p+1),this},o.prototype.isubn=function(i){if(t(typeof i=="number"),t(i<67108864),i<0)return this.iaddn(-i);if(this.negative!==0)return this.negative=0,this.iaddn(i),this.negative=1,this;if(this.words[0]-=i,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var p=0;p<this.length&&this.words[p]<0;p++)this.words[p]+=67108864,this.words[p+1]-=1;return this._strip()},o.prototype.addn=function(i){return this.clone().iaddn(i)},o.prototype.subn=function(i){return this.clone().isubn(i)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(i,p,u){var d=i.length+u,h;this._expand(d);var T,I=0;for(h=0;h<i.length;h++){T=(this.words[h+u]|0)+I;var f=(i.words[h]|0)*p;T-=f&67108863,I=(T>>26)-(f/67108864|0),this.words[h+u]=T&67108863}for(;h<this.length-u;h++)T=(this.words[h+u]|0)+I,I=T>>26,this.words[h+u]=T&67108863;if(I===0)return this._strip();for(t(I===-1),I=0,h=0;h<this.length;h++)T=-(this.words[h]|0)+I,I=T>>26,this.words[h]=T&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(i,p){var u=this.length-i.length,d=this.clone(),h=i,T=h.words[h.length-1]|0,I=this._countBits(T);u=26-I,u!==0&&(h=h.ushln(u),d.iushln(u),T=h.words[h.length-1]|0);var f=d.length-h.length,l;if(p!=="mod"){l=new o(null),l.length=f+1,l.words=new Array(l.length);for(var g=0;g<l.length;g++)l.words[g]=0}var A=d.clone()._ishlnsubmul(h,1,f);A.negative===0&&(d=A,l&&(l.words[f]=1));for(var P=f-1;P>=0;P--){var R=(d.words[h.length+P]|0)*67108864+(d.words[h.length+P-1]|0);for(R=Math.min(R/T|0,67108863),d._ishlnsubmul(h,R,P);d.negative!==0;)R--,d.negative=0,d._ishlnsubmul(h,1,P),d.isZero()||(d.negative^=1);l&&(l.words[P]=R)}return l&&l._strip(),d._strip(),p!=="div"&&u!==0&&d.iushrn(u),{div:l||null,mod:d}},o.prototype.divmod=function(i,p,u){if(t(!i.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var d,h,T;return this.negative!==0&&i.negative===0?(T=this.neg().divmod(i,p),p!=="mod"&&(d=T.div.neg()),p!=="div"&&(h=T.mod.neg(),u&&h.negative!==0&&h.iadd(i)),{div:d,mod:h}):this.negative===0&&i.negative!==0?(T=this.divmod(i.neg(),p),p!=="mod"&&(d=T.div.neg()),{div:d,mod:T.mod}):(this.negative&i.negative)!==0?(T=this.neg().divmod(i.neg(),p),p!=="div"&&(h=T.mod.neg(),u&&h.negative!==0&&h.isub(i)),{div:T.div,mod:h}):i.length>this.length||this.cmp(i)<0?{div:new o(0),mod:this}:i.length===1?p==="div"?{div:this.divn(i.words[0]),mod:null}:p==="mod"?{div:null,mod:new o(this.modrn(i.words[0]))}:{div:this.divn(i.words[0]),mod:new o(this.modrn(i.words[0]))}:this._wordDiv(i,p)},o.prototype.div=function(i){return this.divmod(i,"div",!1).div},o.prototype.mod=function(i){return this.divmod(i,"mod",!1).mod},o.prototype.umod=function(i){return this.divmod(i,"mod",!0).mod},o.prototype.divRound=function(i){var p=this.divmod(i);if(p.mod.isZero())return p.div;var u=p.div.negative!==0?p.mod.isub(i):p.mod,d=i.ushrn(1),h=i.andln(1),T=u.cmp(d);return T<0||h===1&&T===0?p.div:p.div.negative!==0?p.div.isubn(1):p.div.iaddn(1)},o.prototype.modrn=function(i){var p=i<0;p&&(i=-i),t(i<=67108863);for(var u=(1<<26)%i,d=0,h=this.length-1;h>=0;h--)d=(u*d+(this.words[h]|0))%i;return p?-d:d},o.prototype.modn=function(i){return this.modrn(i)},o.prototype.idivn=function(i){var p=i<0;p&&(i=-i),t(i<=67108863);for(var u=0,d=this.length-1;d>=0;d--){var h=(this.words[d]|0)+u*67108864;this.words[d]=h/i|0,u=h%i}return this._strip(),p?this.ineg():this},o.prototype.divn=function(i){return this.clone().idivn(i)},o.prototype.egcd=function(i){t(i.negative===0),t(!i.isZero());var p=this,u=i.clone();p.negative!==0?p=p.umod(i):p=p.clone();for(var d=new o(1),h=new o(0),T=new o(0),I=new o(1),f=0;p.isEven()&&u.isEven();)p.iushrn(1),u.iushrn(1),++f;for(var l=u.clone(),g=p.clone();!p.isZero();){for(var A=0,P=1;(p.words[0]&P)===0&&A<26;++A,P<<=1);if(A>0)for(p.iushrn(A);A-- >0;)(d.isOdd()||h.isOdd())&&(d.iadd(l),h.isub(g)),d.iushrn(1),h.iushrn(1);for(var R=0,N=1;(u.words[0]&N)===0&&R<26;++R,N<<=1);if(R>0)for(u.iushrn(R);R-- >0;)(T.isOdd()||I.isOdd())&&(T.iadd(l),I.isub(g)),T.iushrn(1),I.iushrn(1);p.cmp(u)>=0?(p.isub(u),d.isub(T),h.isub(I)):(u.isub(p),T.isub(d),I.isub(h))}return{a:T,b:I,gcd:u.iushln(f)}},o.prototype._invmp=function(i){t(i.negative===0),t(!i.isZero());var p=this,u=i.clone();p.negative!==0?p=p.umod(i):p=p.clone();for(var d=new o(1),h=new o(0),T=u.clone();p.cmpn(1)>0&&u.cmpn(1)>0;){for(var I=0,f=1;(p.words[0]&f)===0&&I<26;++I,f<<=1);if(I>0)for(p.iushrn(I);I-- >0;)d.isOdd()&&d.iadd(T),d.iushrn(1);for(var l=0,g=1;(u.words[0]&g)===0&&l<26;++l,g<<=1);if(l>0)for(u.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(T),h.iushrn(1);p.cmp(u)>=0?(p.isub(u),d.isub(h)):(u.isub(p),h.isub(d))}var A;return p.cmpn(1)===0?A=d:A=h,A.cmpn(0)<0&&A.iadd(i),A},o.prototype.gcd=function(i){if(this.isZero())return i.abs();if(i.isZero())return this.abs();var p=this.clone(),u=i.clone();p.negative=0,u.negative=0;for(var d=0;p.isEven()&&u.isEven();d++)p.iushrn(1),u.iushrn(1);do{for(;p.isEven();)p.iushrn(1);for(;u.isEven();)u.iushrn(1);var h=p.cmp(u);if(h<0){var T=p;p=u,u=T}else if(h===0||u.cmpn(1)===0)break;p.isub(u)}while(!0);return u.iushln(d)},o.prototype.invm=function(i){return this.egcd(i).a.umod(i)},o.prototype.isEven=function(){return(this.words[0]&1)===0},o.prototype.isOdd=function(){return(this.words[0]&1)===1},o.prototype.andln=function(i){return this.words[0]&i},o.prototype.bincn=function(i){t(typeof i=="number");var p=i%26,u=(i-p)/26,d=1<<p;if(this.length<=u)return this._expand(u+1),this.words[u]|=d,this;for(var h=d,T=u;h!==0&&T<this.length;T++){var I=this.words[T]|0;I+=h,h=I>>>26,I&=67108863,this.words[T]=I}return h!==0&&(this.words[T]=h,this.length++),this},o.prototype.isZero=function(){return this.length===1&&this.words[0]===0},o.prototype.cmpn=function(i){var p=i<0;if(this.negative!==0&&!p)return-1;if(this.negative===0&&p)return 1;this._strip();var u;if(this.length>1)u=1;else{p&&(i=-i),t(i<=67108863,"Number is too big");var d=this.words[0]|0;u=d===i?0:d<i?-1:1}return this.negative!==0?-u|0:u},o.prototype.cmp=function(i){if(this.negative!==0&&i.negative===0)return-1;if(this.negative===0&&i.negative!==0)return 1;var p=this.ucmp(i);return this.negative!==0?-p|0:p},o.prototype.ucmp=function(i){if(this.length>i.length)return 1;if(this.length<i.length)return-1;for(var p=0,u=this.length-1;u>=0;u--){var d=this.words[u]|0,h=i.words[u]|0;if(d!==h){d<h?p=-1:d>h&&(p=1);break}}return p},o.prototype.gtn=function(i){return this.cmpn(i)===1},o.prototype.gt=function(i){return this.cmp(i)===1},o.prototype.gten=function(i){return this.cmpn(i)>=0},o.prototype.gte=function(i){return this.cmp(i)>=0},o.prototype.ltn=function(i){return this.cmpn(i)===-1},o.prototype.lt=function(i){return this.cmp(i)===-1},o.prototype.lten=function(i){return this.cmpn(i)<=0},o.prototype.lte=function(i){return this.cmp(i)<=0},o.prototype.eqn=function(i){return this.cmpn(i)===0},o.prototype.eq=function(i){return this.cmp(i)===0},o.red=function(i){return new X(i)},o.prototype.toRed=function(i){return t(!this.red,"Already a number in reduction context"),t(this.negative===0,"red works only with positives"),i.convertTo(this)._forceRed(i)},o.prototype.fromRed=function(){return t(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(i){return this.red=i,this},o.prototype.forceRed=function(i){return t(!this.red,"Already a number in reduction context"),this._forceRed(i)},o.prototype.redAdd=function(i){return t(this.red,"redAdd works only with red numbers"),this.red.add(this,i)},o.prototype.redIAdd=function(i){return t(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,i)},o.prototype.redSub=function(i){return t(this.red,"redSub works only with red numbers"),this.red.sub(this,i)},o.prototype.redISub=function(i){return t(this.red,"redISub works only with red numbers"),this.red.isub(this,i)},o.prototype.redShl=function(i){return t(this.red,"redShl works only with red numbers"),this.red.shl(this,i)},o.prototype.redMul=function(i){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,i),this.red.mul(this,i)},o.prototype.redIMul=function(i){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,i),this.red.imul(this,i)},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(i){return t(this.red&&!i.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,i)};var le={k256:null,p224:null,p192:null,p25519:null};function Et(y,i){this.name=y,this.p=new o(i,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}Et.prototype._tmp=function(){var i=new o(null);return i.words=new Array(Math.ceil(this.n/13)),i},Et.prototype.ireduce=function(i){var p=i,u;do this.split(p,this.tmp),p=this.imulK(p),p=p.iadd(this.tmp),u=p.bitLength();while(u>this.n);var d=u<this.n?-1:p.ucmp(this.p);return d===0?(p.words[0]=0,p.length=1):d>0?p.isub(this.p):p.strip!==void 0?p.strip():p._strip(),p},Et.prototype.split=function(i,p){i.iushrn(this.n,0,p)},Et.prototype.imulK=function(i){return i.imul(this.k)};function oe(){Et.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(oe,Et),oe.prototype.split=function(i,p){for(var u=4194303,d=Math.min(i.length,9),h=0;h<d;h++)p.words[h]=i.words[h];if(p.length=d,i.length<=9){i.words[0]=0,i.length=1;return}var T=i.words[9];for(p.words[p.length++]=T&u,h=10;h<i.length;h++){var I=i.words[h]|0;i.words[h-10]=(I&u)<<4|T>>>22,T=I}T>>>=22,i.words[h-10]=T,T===0&&i.length>10?i.length-=10:i.length-=9},oe.prototype.imulK=function(i){i.words[i.length]=0,i.words[i.length+1]=0,i.length+=2;for(var p=0,u=0;u<i.length;u++){var d=i.words[u]|0;p+=d*977,i.words[u]=p&67108863,p=d*64+(p/67108864|0)}return i.words[i.length-1]===0&&(i.length--,i.words[i.length-1]===0&&i.length--),i};function Cn(){Et.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(Cn,Et);function Xe(){Et.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(Xe,Et);function Ae(){Et.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Ae,Et),Ae.prototype.imulK=function(i){for(var p=0,u=0;u<i.length;u++){var d=(i.words[u]|0)*19+p,h=d&67108863;d>>>=26,i.words[u]=h,p=d}return p!==0&&(i.words[i.length++]=p),i},o._prime=function(i){if(le[i])return le[i];var p;if(i==="k256")p=new oe;else if(i==="p224")p=new Cn;else if(i==="p192")p=new Xe;else if(i==="p25519")p=new Ae;else throw new Error("Unknown prime "+i);return le[i]=p,p};function X(y){if(typeof y=="string"){var i=o._prime(y);this.m=i.p,this.prime=i}else t(y.gtn(1),"modulus must be greater than 1"),this.m=y,this.prime=null}X.prototype._verify1=function(i){t(i.negative===0,"red works only with positives"),t(i.red,"red works only with red numbers")},X.prototype._verify2=function(i,p){t((i.negative|p.negative)===0,"red works only with positives"),t(i.red&&i.red===p.red,"red works only with red numbers")},X.prototype.imod=function(i){return this.prime?this.prime.ireduce(i)._forceRed(this):(b(i,i.umod(this.m)._forceRed(this)),i)},X.prototype.neg=function(i){return i.isZero()?i.clone():this.m.sub(i)._forceRed(this)},X.prototype.add=function(i,p){this._verify2(i,p);var u=i.add(p);return u.cmp(this.m)>=0&&u.isub(this.m),u._forceRed(this)},X.prototype.iadd=function(i,p){this._verify2(i,p);var u=i.iadd(p);return u.cmp(this.m)>=0&&u.isub(this.m),u},X.prototype.sub=function(i,p){this._verify2(i,p);var u=i.sub(p);return u.cmpn(0)<0&&u.iadd(this.m),u._forceRed(this)},X.prototype.isub=function(i,p){this._verify2(i,p);var u=i.isub(p);return u.cmpn(0)<0&&u.iadd(this.m),u},X.prototype.shl=function(i,p){return this._verify1(i),this.imod(i.ushln(p))},X.prototype.imul=function(i,p){return this._verify2(i,p),this.imod(i.imul(p))},X.prototype.mul=function(i,p){return this._verify2(i,p),this.imod(i.mul(p))},X.prototype.isqr=function(i){return this.imul(i,i.clone())},X.prototype.sqr=function(i){return this.mul(i,i)},X.prototype.sqrt=function(i){if(i.isZero())return i.clone();var p=this.m.andln(3);if(t(p%2===1),p===3){var u=this.m.add(new o(1)).iushrn(2);return this.pow(i,u)}for(var d=this.m.subn(1),h=0;!d.isZero()&&d.andln(1)===0;)h++,d.iushrn(1);t(!d.isZero());var T=new o(1).toRed(this),I=T.redNeg(),f=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);this.pow(l,f).cmp(I)!==0;)l.redIAdd(I);for(var g=this.pow(l,d),A=this.pow(i,d.addn(1).iushrn(1)),P=this.pow(i,d),R=h;P.cmp(T)!==0;){for(var N=P,L=0;N.cmp(T)!==0;L++)N=N.redSqr();t(L<R);var q=this.pow(g,new o(1).iushln(R-L-1));A=A.redMul(q),g=q.redSqr(),P=P.redMul(g),R=L}return A},X.prototype.invm=function(i){var p=i._invmp(this.m);return p.negative!==0?(p.negative=0,this.imod(p).redNeg()):this.imod(p)},X.prototype.pow=function(i,p){if(p.isZero())return new o(1).toRed(this);if(p.cmpn(1)===0)return i.clone();var u=4,d=new Array(1<<u);d[0]=new o(1).toRed(this),d[1]=i;for(var h=2;h<d.length;h++)d[h]=this.mul(d[h-1],i);var T=d[0],I=0,f=0,l=p.bitLength()%26;for(l===0&&(l=26),h=p.length-1;h>=0;h--){for(var g=p.words[h],A=l-1;A>=0;A--){var P=g>>A&1;if(T!==d[0]&&(T=this.sqr(T)),P===0&&I===0){f=0;continue}I<<=1,I|=P,f++,!(f!==u&&(h!==0||A!==0))&&(T=this.mul(T,d[I]),f=0,I=0)}l=26}return T},X.prototype.convertTo=function(i){var p=i.umod(this.m);return p===i?p.clone():p},X.prototype.convertFrom=function(i){var p=i.clone();return p.red=null,p},o.mont=function(i){return new Te(i)};function Te(y){X.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(Te,X),Te.prototype.convertTo=function(i){return this.imod(i.ushln(this.shift))},Te.prototype.convertFrom=function(i){var p=this.imod(i.mul(this.rinv));return p.red=null,p},Te.prototype.imul=function(i,p){if(i.isZero()||p.isZero())return i.words[0]=0,i.length=1,i;var u=i.imul(p),d=u.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=u.isub(d).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},Te.prototype.mul=function(i,p){if(i.isZero()||p.isZero())return new o(0)._forceRed(this);var u=i.mul(p),d=u.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=u.isub(d).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},Te.prototype.invm=function(i){var p=this.imod(i._invmp(this.m).mul(this.r2));return p._forceRed(this)}})(typeof Ts>"u"||Ts,Vl)});import{TransactionType as Lp}from"@msafe/sui3-utils";import{coinsList as Mp,poolIdPoolNameMap as Op,poolInfo as js,singleAssetPoolCoinMap as Pp}from"@alphafi/alphafi-sdk";import{TransactionType as ze}from"@msafe/sui3-utils";import{bcs as xn,fromBase64 as kn}from"@mysten/bcs";var Dn=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=Op[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&&js[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&js[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=xn.u64().parse(kn(t)):t.length===24?n=xn.u128().parse(kn(t)):t.length===44?n=xn.u256().parse(kn(t)):n=xn.u64().parse(kn(t)),n}decodeDoubleAssetDeposit(e,t){let{amount_a:n,amount_b:o}=t,a=Number(n)>0;return console.log("Decoder.decodeDoubleAssetDeposit",n,o,a),{txType:ze.Other,type:"depositDoubleAsset",intentionData:{poolName:e,amount:a?n:o,isAmountA:a}}}decodeSingleAssetDeposit(e,t){let{amount:n}=t;if(console.log("Decoder.decodeSingleAssetDeposit",n),this.getLiquidityChangeEvent().type.includes(":alphafi_navi_pool:")){let{coin:a}=Pp[e],{expo:s}=Mp[a];n=Math.floor(Number(n)/10**(9-s)).toString()}return{txType:ze.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:ze.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:ze.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:ze.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as Bp}from"@alphafi/alphafi-sdk";import Rp from"sort-keys-recursive";var v=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Rp(this.data))}};var vn=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t;return await Bp(n.address)}static fromData(t){return new r(t)}};import{depositDoubleAssetTxb as Np}from"@alphafi/alphafi-sdk";var An=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:a,isAmountA:s}=this.data;return await Np(o,n.address,a,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new r(t)}};import{depositSingleAssetTxb as Ep}from"@alphafi/alphafi-sdk";var Mn=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:a}=this.data;return await Ep(o,n.address,a)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new r(t)}};import{withdrawTxb as Wp}from"@alphafi/alphafi-sdk";var On=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:a}=this.data;return await Wp(a,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new r(t)}};import{withdrawAlphaTxb as _p}from"@alphafi/alphafi-sdk";var Pn=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:a}=this.data;return await _p(a,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new r(t)}};var Rn=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n,account:o}=e,a=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("AlphaFiHelper Sim result - ",a);let c=new Dn(t,a).decode();return{txType:Lp.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=Mn.fromData(e.intentionData);break;case"depositDoubleAsset":n=An.fromData(e.intentionData);break;case"withdraw":n=On.fromData(e.intentionData);break;case"withdrawAlpha":n=Pn.fromData(e.intentionData);break;case"claimReward":n=vn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as su}from"@msafe/sui3-utils";import{TransactionType as Gt}from"@msafe/sui3-utils";import{bcs as Wi}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as _i}from"bucket-protocol-sdk";var Bn=class{constructor(e){this.transaction=e}transaction;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(_i,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(_i,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(_i,"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:Gt.Other,type:"psm",intentionData:{coinType:e,amount:n,buckToCoin:t}}}decodeBorrow(){let e="",t="0",n,o=this.getStrapId(),a="0",s=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(s.$kind==="Input"&&(a=this.getPureInputU64(s.Input)),this.getMoveCallCommand("high_top_up")){let c=this.getMoveCallCommand("high_top_up").MoveCall;[e]=c.typeArguments;let m=c.arguments[1];m.$kind==="Input"&&(t=this.getPureInputU64(m.Input));let b=c.arguments[3];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow")){let c=this.getMoveCallCommand("high_borrow").MoveCall;[e]=c.typeArguments;let m=c.arguments[4];m.$kind==="Input"&&(t=this.getPureInputU64(m.Input));let b=c.arguments[5];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let c=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=c.typeArguments;let m=c.arguments[5];m.$kind==="Input"&&(t=this.getPureInputU64(m.Input));let b=c.arguments[6];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}return{txType:Gt.Other,type:"borrow",intentionData:{collateralType:e,collateralAmount:a,borrowAmount:t,insertionPlace:n,strapId:o}}}decodeRepay(){let e="",t="0",n="0",a,s=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))[e]=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments;else if(this.getMoveCallCommand("fully_repay_with_strap"))[e]=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments;else if(this.getMoveCallCommand("repay_and_withdraw")){let c=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=c.typeArguments;let m=c.arguments[4];m.$kind==="Input"&&(n=this.getPureInputU64(m.Input));let b=c.arguments[5];if(b.$kind==="Input"){let w=this.getPureAddresses(b.Input);w.length===1&&([a]=w)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let c=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=c.typeArguments;let m=c.arguments[5];m.$kind==="Input"&&(n=this.getPureInputU64(m.Input));let b=c.arguments[6];if(b.$kind==="Input"){let w=this.getPureAddresses(b.Input);w.length===1&&([a]=w)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.Input))}return{txType:Gt.Other,type:"repay",intentionData:{collateralType:e,repayAmount:t,withdrawAmount:n,isSurplus:!1,insertionPlace:a,strapId:s}}}decodeWithdraw(){let e="",t="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let a=this.getMoveCallCommand("withdraw_with_strap").MoveCall;[e]=a.typeArguments;let s=a.arguments[4];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let c=a.arguments[5];if(c.$kind==="Input"){let m=this.getPureAddresses(c.Input);m.length===1&&([n]=m)}}else if(this.getMoveCallCommand("withdraw")){let a=this.getMoveCallCommand("withdraw").MoveCall;[e]=a.typeArguments;let s=a.arguments[3];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let c=a.arguments[4];if(c.$kind==="Input"){let m=this.getPureAddresses(c.Input);m.length===1&&([n]=m)}}return{txType:Gt.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:Gt.Other,type:"close",intentionData:{collateralType:e,strapId:t}}}decodeSBUCKDeposit(){let t=this.getMoveCallCommand("into_balance").MoveCall.typeArguments[0],n="0",a=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];a.$kind==="Input"&&(n=this.getPureInputU64(a.Input));let s=this.isSBUCKStakeTransaction();return console.log("Decoder.decodeSBUCKDeposit",t,n,s),{txType:Gt.Other,type:"sbuck-deposit",intentionData:{coinType:t,amount:n,isStake:s}}}decodeSBUCKUnstake(){let e="0",t=this.isSBUCKStakeTransaction();if(t){let m=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];m.$kind==="Input"&&(e=this.getPureInputU64(m.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let c=0;c<o.length;c++){let m=o[c];n.push("")}else{let c=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let m=0;m<c.length;m++){let S=c[m].MoveCall.arguments[2];if(S.$kind==="Input"){let{objectId:w}=this.inputs[S.Input].UnresolvedObject;n.push(w)}}}let a=this.isSBUCKWithdrawTransaction(),s={stakeProofs:n,amount:e,isStake:t,toBuck:a};return console.log("Decoder.decodeSBUCKUnstake",s),{txType:Gt.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:Gt.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 a=t[n].MoveCall.arguments[2];if(a.$kind==="Input"){let{objectId:s}=this.inputs[a.Input].UnresolvedObject;e.push(s)}}return console.log("Decoder.decodeSBUCKClaim",e),{txType:Gt.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 a=this.getMoveCallModuleCommand("tank_operations","deposit").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankDeposit",a,e),{txType:Gt.Other,type:"tank-deposit",intentionData:{coinType:a,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:Gt.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:Gt.Other,type:"tank-claim",intentionData:{coinType:t}}}decodeLockedClaim(){let e="",t=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let a=0;a<n.length;a++)[e]=n[a].MoveCall.typeArguments,t++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let a=0;a<o.length;a++)[e]=o[a].MoveCall.typeArguments,t++;return console.log("Decoder.decodeLockedClaim",e,t),{txType:Gt.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 Wi.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Wi.vector(Wi.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as qp}from"@msafe/sui3-utils";import{Transaction as Up}from"@mysten/sui/transactions";import{buildPsmTx as Gp}from"bucket-protocol-sdk";import{BucketClient as jp}from"bucket-protocol-sdk";var Wt=(r,e)=>{let t=r==="sui:mainnet"?"mainnet":"testnet";return new jp(t,e.address)};var Us=async(r,e,t)=>{let{coinType:n,amount:o,buckToCoin:a}=r,s=new Up,c=Wt(t,e);return await Gp(c,s,n,o,a,e.address),s};var En=class r extends v{constructor(t){super(t);this.data=t}data;txType=qp.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await Us(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as Hp}from"@msafe/sui3-utils";import{Transaction as Wn}from"@mysten/sui/transactions";import{buildBorrowTx as Fp,buildCloseTx as Kp,buildRepayTx as $p,buildWithdrawTx as Vp}from"bucket-protocol-sdk";var Gs=async(r,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:a,insertionPlace:s,strapId:c}=r,m=new Wn,b=Wt(t,e);return await Fp(b,m,n,o,a,e.address,s,c),m},qs=async(r,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:a,strapId:s}=r,c=new Wn,m=Wt(t,e);return await Vp(m,c,n,o,e.address,a,s),c},Fs=async(r,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:a,isSurplus:s,insertionPlace:c,strapId:m}=r,b=new Wn,S=Wt(t,e);return await $p(S,b,n,o,a,e.address,s,c,m),b},Ks=async(r,e,t)=>{let{collateralType:n,recipient:o,strapId:a}=r,s=new Wn,c=Wt(t,e);return await Kp(c,s,n,o,a),s};var _n=class r extends v{constructor(t){super(t);this.data=t}data;txType=Hp.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await Gs(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as Xp}from"@msafe/sui3-utils";var Ln=class r extends v{constructor(t){super(t);this.data=t}data;txType=Xp.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await Fs(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as zp}from"@msafe/sui3-utils";var jn=class r extends v{constructor(t){super(t);this.data=t}data;txType=zp.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await qs(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as Qp}from"@msafe/sui3-utils";var Un=class r extends v{constructor(t){super(t);this.data=t}data;txType=Qp.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await Ks(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as Vn}from"@msafe/sui3-utils";import{Transaction as Gn}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as Yp,buildSBUCKDepositTx as Jp,buildSBUCKUnstakeTx as Zp,buildSBUCKWithdrawTx as tu}from"bucket-protocol-sdk";var $s=async(r,e,t)=>{let{coinType:n,amount:o,isStake:a}=r,s=new Gn,c=Wt(t,e);return await Jp(c,s,n,o,e.address,a),s},Vs=async(r,e,t)=>{let{stakeProofs:n,amount:o,isStake:a,toBuck:s}=r,c=new Gn,m=Wt(t,e);return await Zp(m,c,n,o,e.address,a,s),c},Hs=async(r,e,t)=>{let{amount:n}=r,o=new Gn,a=Wt(t,e);return await tu(a,o,n,e.address),o},Xs=async(r,e,t)=>{let{stakeProofs:n}=r,o=new Gn,a=Wt(t,e);return await Yp(a,o,n,e.address),o};var qn=class r extends v{constructor(t){super(t);this.data=t}data;txType=Vn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await $s(this.data,n,o)}static fromData(t){return new r(t)}},Fn=class r extends v{constructor(t){super(t);this.data=t}data;txType=Vn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await Vs(this.data,n,o)}static fromData(t){return new r(t)}},Kn=class r extends v{constructor(t){super(t);this.data=t}data;txType=Vn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await Hs(this.data,n,o)}static fromData(t){return new r(t)}},$n=class r extends v{constructor(t){super(t);this.data=t}data;txType=Vn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Xs(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as ji}from"@msafe/sui3-utils";import{Transaction as Li}from"@mysten/sui/transactions";import{buildTankClaimTx as eu,buildTankDepositTx as nu,buildTankWithdrawTx as ou}from"bucket-protocol-sdk";var zs=async(r,e,t)=>{let{coinType:n,amount:o}=r,a=new Li,s=Wt(t,e);return await nu(s,a,n,o,e.address),a},Qs=async(r,e,t)=>{let{coinType:n,amount:o}=r,a=new Li,s=Wt(t,e);return await ou(s,a,n,o,e.address),a},Ys=async(r,e,t)=>{let{coinType:n}=r,o=new Li,a=Wt(t,e);return await eu(a,o,n,e.address),o};import{Transaction as ru}from"@mysten/sui/transactions";import{buildLockedClaimTx as au}from"bucket-protocol-sdk";var Js=async(r,e,t)=>{let{coinType:n,proofCount:o}=r,a=new ru,s=Wt(t,e);return await au(s,a,n,o,e.address),a};var Hn=class r extends v{constructor(t){super(t);this.data=t}data;txType=ji.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await zs(this.data,n,o)}static fromData(t){return new r(t)}},Xn=class r extends v{constructor(t){super(t);this.data=t}data;txType=ji.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await Qs(this.data,n,o)}static fromData(t){return new r(t)}},zn=class r extends v{constructor(t){super(t);this.data=t}data;txType=ji.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await Ys(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as iu}from"@msafe/sui3-utils";var Qn=class r extends v{constructor(t){super(t);this.data=t}data;txType=iu.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await Js(this.data,n,o)}static fromData(t){return new r(t)}};var Yn=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new Bn(t).decode();return{txType:su.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e,a;switch(e.txSubType){case"psm":a=En.fromData(e.intentionData);break;case"borrow":a=_n.fromData(e.intentionData);break;case"withdraw":a=jn.fromData(e.intentionData);break;case"repay":a=Ln.fromData(e.intentionData);break;case"close":a=Un.fromData(e.intentionData);break;case"tank-deposit":a=Hn.fromData(e.intentionData);break;case"tank-withdraw":a=Xn.fromData(e.intentionData);break;case"tank-claim":a=zn.fromData(e.intentionData);break;case"sbuck-deposit":a=qn.fromData(e.intentionData);break;case"sbuck-unstake":a=Fn.fromData(e.intentionData);break;case"sbuck-withdraw":a=Kn.fromData(e.intentionData);break;case"sbuck-claim":a=$n.fromData(e.intentionData);break;case"lock-claim":a=Qn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return a.build({suiClient:t,account:n,network:o})}};import{TransactionType as Uu}from"@msafe/sui3-utils";import{TransactionType as pu}from"@msafe/sui3-utils";import cu from"sort-keys-recursive";var k=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(cu(this.data))}};var Yt=async(r,e,t)=>{let{CetusClmmSDK:n}=await import("@cetusprotocol/sui-clmm-sdk"),o=n.createSDK({env:"mainnet",sui_grpc_client:t});return o.setSenderAddress(e.address),o},qt=async(r,e,t)=>{let{CetusFarmsSDK:n}=await import("@cetusprotocol/farms-sdk"),o=n.createSDK({env:"mainnet",sui_grpc_client:t});return o.setSenderAddress(e.address),o},lu="https://api-sui.cetus.zone/router_v2/find_routes",Zs=async(r,e,t)=>{let{AggregatorClient:n,Env:o}=await import("@cetusprotocol/aggregator-sdk");return new n({endpoint:lu,signer:e.address,client:t,env:o.Mainnet})},Qe=async(r,e,t)=>{let{CetusVaultsSDK:n}=await import("@cetusprotocol/vaults-sdk"),o=n.createSDK({env:"mainnet",sui_grpc_client:t});return o.setSenderAddress(e.address),o},Me=async(r,e,t)=>{let{CetusXcetusSDK:n}=await import("@cetusprotocol/xcetus-sdk"),o=n.createSDK({env:"mainnet",sui_grpc_client:t});return o.setSenderAddress(e.address),o};var tc=async(r,e,t,n)=>await(await Yt(t,e,n)).Pool.createPoolPayload(r),ec=async(r,e,t,n)=>await(await Yt(t,e,n)).Position.createAddLiquidityFixTokenPayload(r?.parameter),nc=async(r,e,t,n)=>await(await Yt(t,e,n)).Position.createAddLiquidityFixTokenPayload(r?.parameter),oc=async(r,e,t,n)=>await(await Yt(t,e,n)).Position.closePositionPayload(r),rc=async(r,e,t,n)=>await(await Yt(t,e,n)).Position.removeLiquidityPayload(r),ac=async(r,e,t,n)=>await(await Yt(t,e,n)).Rewarder.collectRewarderPayload(r);var Jn=class r extends k{constructor(t){super(t);this.data=t}data;txType=pu.Other;txSubType="OpenAndAddLiquidity";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await ec(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as uu}from"@msafe/sui3-utils";var Zn=class r extends k{constructor(t){super(t);this.data=t}data;txType=uu.Other;txSubType="ClaimFeeAndMining";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await ac(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as mu}from"@msafe/sui3-utils";var to=class r extends k{constructor(t){super(t);this.data=t}data;txType=mu.Other;txSubType="CreatePool";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await tc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as du}from"@msafe/sui3-utils";var eo=class r extends k{constructor(t){super(t);this.data=t}data;txType=du.Other;txSubType="DecreaseLiquidity";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await rc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as fu}from"@msafe/sui3-utils";var ic=async(r,e,t,n)=>await(await qt(t,e,n)).Farms.openPositionAddLiquidityStakePayload(r),sc=async(r,e,t,n)=>await(await qt(t,e,n)).Farms.addLiquidityFixCoinPayload(r),cc=async(r,e,t,n)=>await(await qt(t,e,n)).Farms.removeLiquidityPayload(r);var lc=async(r,e,t,n)=>await(await qt(t,e,n)).Farms.removeLiquidityPayload(r),pc=async(r,e,t,n)=>await(await qt(t,e,n)).Farms.claimFeeAndClmmReward(r),uc=async(r,e,t,n)=>await(await qt(t,e,n)).Farms.harvestPayload(r),mc=async(r,e,t,n)=>{let o=await qt(t,e,n),a=Object.values(r);return await o.Farms.batchHarvestPayload(a)},dc=async(r,e,t,n)=>await(await qt(t,e,n)).Farms.depositPayload(r),fc=async(r,e,t,n)=>await(await qt(t,e,n)).Farms.withdrawPayload(r);var no=class r extends k{constructor(t){super(t);this.data=t}data;txType=fu.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await ic(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as hu}from"@msafe/sui3-utils";var oo=class r extends k{constructor(t){super(t);this.data=t}data;txType=hu.Other;txSubType="FarmingBatchHarvest";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await mc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as gu}from"@msafe/sui3-utils";var ro=class r extends k{constructor(t){super(t);this.data=t}data;txType=gu.Other;txSubType="FarmingClaimFeeAndReward";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await pc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as yu}from"@msafe/sui3-utils";var ao=class r extends k{constructor(t){super(t);this.data=t}data;txType=yu.Other;txSubType="FarmingDecreaseLiquidity";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await cc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as bu}from"@msafe/sui3-utils";var io=class r extends k{constructor(t){super(t);this.data=t}data;txType=bu.Other;txSubType="FarmingHarvest";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await uc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Tu}from"@msafe/sui3-utils";var so=class r extends k{constructor(t){super(t);this.data=t}data;txType=Tu.Other;txSubType="FarmingIncreaseLiquidity";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await sc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Su}from"@msafe/sui3-utils";var co=class r extends k{constructor(t){super(t);this.data=t}data;txType=Su.Other;txSubType="FarmingRemoveLiquidity";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await lc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as wu}from"@msafe/sui3-utils";var lo=class r extends k{constructor(t){super(t);this.data=t}data;txType=wu.Other;txSubType="FarmingStake";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await dc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Iu}from"@msafe/sui3-utils";var po=class r extends k{constructor(t){super(t);this.data=t}data;txType=Iu.Other;txSubType="FarmingUnstake";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await fc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Cu}from"@msafe/sui3-utils";var uo=class r extends k{constructor(t){super(t);this.data=t}data;txType=Cu.Other;txSubType="IncreaseLiquidity";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await nc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as vu}from"@msafe/sui3-utils";var mo=async()=>{let{Transaction:r}=await import("@mysten/sui/transactions");return new r},xu=async(r,e,t,n)=>{let o=await Qe(t,e,n),a=await mo();return a.setSender(e.address),o.Vest.buildRedeemPayload(r.params,a),a},ku=async(r,e)=>{let{default:t,vaults_mainnet:n}=await import("haedal-vault-sdk"),o=new t(n);o.senderAddress=e.address;let a=await mo();return a.setSender(e.address),await o?.Vest.buildRedeemPayload(r.params,a),a},hc=async(r,e,t,n)=>{let o=await Yt(t,e,n),a=await mo();return o?.Vest.buildRedeemPayload(r.params,a),a},Du=async(r,e,t,n)=>{let o=await Yt(t,e,n),a=await qt(t,e,n),s=await mo(),c=await a.Farms.withdrawReturnPayload(r.withdrawParams,s);return o.Vest.buildRedeemPayload(r.redeemParms.map(m=>({...m,clmm_position_id:c})),s),a.Farms.depositPayload({...r.depositParams,clmm_position_id:c},s),s},gc=async(r,e,t,n)=>r.type==="clmm"?hc(r,e,t,n):r.type==="farms"?Du(r,e,t,n):r.type==="vaults"?xu(r,e,t,n):r.type==="haedalVaults"?ku(r,e):hc(r,e,t,n);var fo=class r extends k{constructor(t){super(t);this.data=t}data;txType=vu.Other;txSubType="PosVestingRedeem";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await gc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Au}from"@msafe/sui3-utils";var ho=class r extends k{constructor(t){super(t);this.data=t}data;txType=Au.Other;txSubType="RemoveLiquidity";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await oc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Ou}from"@msafe/sui3-utils";import{Transaction as Mu}from"@mysten/sui/transactions";var yc=async(r,e,t,n)=>{let{restituteMsafeFastRouterSwapParams:o}=await import("@cetusprotocol/aggregator-sdk"),a=await Zs(t,e,n),s=new Mu;return await a.fastRouterSwap({...r,router:o(r.router),txb:s}),s};var go=class r extends k{constructor(t){super(t);this.data=t}data;txType=Ou.Other;txSubType="AggregatorSwap";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await yc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Pu}from"@msafe/sui3-utils";import{Transaction as bc}from"@mysten/sui/transactions";var Tc=async(r,e,t,n)=>{let o=await Qe(t,e,n),a=new bc;return a.setSender(e.address),await o.Vaults.deposit(r,a),a},Sc=async(r,e,t,n)=>{let o=await Qe(t,e,n),a=new bc;return await o.Vaults.withdraw(r,a),a};var yo=class r extends k{constructor(t){super(t);this.data=t}data;txType=Pu.Other;txSubType="AddVaultsPosition";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await Tc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Ru}from"@msafe/sui3-utils";var bo=class r extends k{constructor(t){super(t);this.data=t}data;txType=Ru.Other;txSubType="RemoveVaultsPosition";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await Sc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Nu}from"@msafe/sui3-utils";import{Transaction as Bu}from"@mysten/sui/transactions";var wc={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},Ic=async(r,e,t)=>{console.log("getVestingRedeemTxb txbParams: ",r),console.log("getVestingRedeemTxb account: ",e),console.log("getVestingRedeemTxb network: ",t);let{pool:n,nftId:o,periods:a,CLOCK_ADDRESS:s}=r,c=new Bu;return a.forEach(m=>{c.moveCall({target:`${wc.published_at}::router::redeem`,typeArguments:[wc.cetus_coin_type],arguments:[c.object(n),c.object(o),c.pure(m),c.object(s)]})}),c};var To=class r extends k{constructor(t){super(t);this.data=t}data;txType=Nu.Other;txSubType="VestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:a}=this.data;return await Ic(a,n,o)}static fromData(t){return new r(t)}};import{TransactionType as Eu}from"@msafe/sui3-utils";var Cc=async(r,e,t,n)=>await(await Me(t,e,n)).XCetusModule.convertPayload(r),xc=async(r,e,t,n)=>await(await Me(t,e,n)).XCetusModule.redeemLockPayload(r),kc=async(r,e,t,n)=>await(await Me(t,e,n)).XCetusModule.redeemDividendV3Payload(r.veNftId,r.rewardList),Dc=async(r,e,t,n)=>await(await Me(t,e,n)).XCetusModule.cancelRedeemPayload(r),vc=async(r,e,t,n)=>await(await Me(t,e,n)).XCetusModule.redeemPayload(r);var So=class r extends k{constructor(t){super(t);this.data=t}data;txType=Eu.Other;txSubType="xCETUSCancelRedeem";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await Dc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Wu}from"@msafe/sui3-utils";var wo=class r extends k{constructor(t){super(t);this.data=t}data;txType=Wu.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await kc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as _u}from"@msafe/sui3-utils";var Io=class r extends k{constructor(t){super(t);this.data=t}data;txType=_u.Other;txSubType="xCETUSConvert";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await Cc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as Lu}from"@msafe/sui3-utils";var Co=class r extends k{constructor(t){super(t);this.data=t}data;txType=Lu.Other;txSubType="xCETUSRedeem";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await vc(s,o,a,n)}static fromData(t){return new r(t)}};import{TransactionType as ju}from"@msafe/sui3-utils";var xo=class r extends k{constructor(t){super(t);this.data=t}data;txType=ju.Other;txSubType="xCETUSRedeemLock";async build(t){let{suiGrpcClient:n,account:o,network:a}=t,{txbParams:s}=this.data;return await xc(s,o,a,n)}static fromData(t){return new r(t)}};var ko=class{application="cetus";supportSDK="@mysten/sui-v2";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{appContext:t}=e;return{txType:Uu.Other,txSubType:t.action,intentionData:t}}async build(e){let{suiGrpcClient:t,account:n,network:o}=e,a;switch(e.txSubType){case"OpenAndAddLiquidity":a=Jn.fromData(e.intentionData);break;case"IncreaseLiquidity":a=uo.fromData(e.intentionData);break;case"DecreaseLiquidity":a=eo.fromData(e.intentionData);break;case"RemoveLiquidity":a=ho.fromData(e.intentionData);break;case"ClaimFeeAndMining":a=Zn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":a=no.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":a=so.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":a=ao.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":a=co.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":a=ro.fromData(e.intentionData);break;case"FarmingHarvest":a=io.fromData(e.intentionData);break;case"FarmingBatchHarvest":a=oo.fromData(e.intentionData);break;case"FarmingStake":a=lo.fromData(e.intentionData);break;case"FarmingUnstake":a=po.fromData(e.intentionData);break;case"xCETUSConvert":a=Io.fromData(e.intentionData);break;case"xCETUSRedeemLock":a=xo.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":a=wo.fromData(e.intentionData);break;case"xCETUSCancelRedeem":a=So.fromData(e.intentionData);break;case"xCETUSRedeem":a=Co.fromData(e.intentionData);break;case"VestingRedeem":a=To.fromData(e.intentionData);break;case"AggregatorSwap":a=go.fromData(e.intentionData);break;case"AddVaultsPosition":a=yo.fromData(e.intentionData);break;case"RemoveVaultsPosition":a=bo.fromData(e.intentionData);break;case"PosVestingRedeem":a=fo.fromData(e.intentionData);break;case"CreatePool":a=to.fromData(e.intentionData);break;default:throw new Error("not implemented")}return a.build({suiGrpcClient:t,account:n,network:o})}};import{TransactionType as $m}from"@msafe/sui3-utils";import{SuiGrpcClient as $u,isSuiGrpcClient as pI}from"@mysten/sui/grpc";import{Transaction as Vu}from"@mysten/sui/transactions";import{SuiGrpcClient as Gu}from"@mysten/sui/grpc";import{Transaction as qu}from"@mysten/sui/transactions";var Fu={"sui:mainnet":"mainnet","sui:testnet":"testnet","sui:devnet":"devnet","sui:localnet":"localnet"};function Do(r){return Fu[r]}function Xt(r){switch(r){case"mainnet":return"https://fullnode.mainnet.sui.io:443";case"testnet":return"https://fullnode.testnet.sui.io:443";case"devnet":return"https://fullnode.devnet.sui.io:443";case"localnet":return"http://127.0.0.1:9000";default:throw new Error(`Unknown network: ${r}`)}}function Ku(r){return Object.assign(r,{async getCoins(e){let t=await r.listCoins({owner:e.owner,coinType:e.coinType,cursor:e.cursor??void 0,limit:e.limit});return{data:t.objects.map(n=>({coinType:n.type,coinObjectId:n.objectId,version:n.version,digest:n.digest,balance:n.balance,previousTransaction:"0x0"})),hasNextPage:t.hasNextPage,nextCursor:t.cursor}},async devInspectTransactionBlock(e){let t=typeof e.transactionBlock=="object"&&e.transactionBlock!==null&&"setSenderIfNotSet"in e.transactionBlock?e.transactionBlock:qu.from(e.transactionBlock);t.setSenderIfNotSet(e.sender);let n=await r.simulateTransaction({transaction:t,checksEnabled:!1,include:{effects:!0,events:!0,commandResults:!0}}),o=n.$kind==="Transaction"?n.Transaction:n.FailedTransaction,a=o.effects?.status?.success??!1;return{error:a?null:o.effects?.status?.error?.message??"Simulation failed",effects:{status:{status:a?"success":"failure",error:o.effects?.status?.error?.message}},events:(o.events??[]).map(s=>({type:s.eventType,parsedJson:s.json,packageId:s.packageId,transactionModule:s.module,sender:s.sender,bcs:"",id:{txDigest:"",eventSeq:"0"}})),results:n.commandResults?.map(s=>({returnValues:s.returnValues.map(c=>[Array.from(c.bcs),"u64"])}))}}})}function Ye(r,e){let t=Do(r),n=new Gu({network:t,baseUrl:e??Xt(t)});return Ku(n)}function Hu(r){return r?r.includes("testnet")?"testnet":r.includes("devnet")?"devnet":r.includes("127.0.0.1")||r.includes("localhost")?"localnet":"mainnet":"mainnet"}var vo=class extends $u{constructor(e){let t=e.baseUrl??e.url??Xt(e.network??"mainnet");super({network:e.network??Hu(t),baseUrl:t})}async getCoins(e){let t=await this.listCoins({owner:e.owner,coinType:e.coinType,cursor:e.cursor??void 0,limit:e.limit});return{data:t.objects.map(n=>({coinType:n.type,coinObjectId:n.objectId,version:n.version,digest:n.digest,balance:n.balance,previousTransaction:"0x0"})),hasNextPage:t.hasNextPage,nextCursor:t.cursor}}async getOwnedObjects(e){let t=e.filter&&"StructType"in e.filter?e.filter.StructType:void 0,n=await this.listOwnedObjects({owner:e.owner,type:t,cursor:e.cursor??void 0,limit:e.limit??void 0,include:{content:!!e.options?.showContent,json:!!e.options?.showContent,type:!0}});return{data:n.objects.map(o=>({data:{objectId:o.objectId,version:o.version,digest:o.digest,type:o.type,owner:o.owner,content:o.json?{dataType:"moveObject",type:o.type,fields:o.json,hasPublicTransfer:!1}:o.content?{dataType:"moveObject",type:o.type,fields:o.content,hasPublicTransfer:!1}:void 0}})),hasNextPage:n.hasNextPage,nextCursor:n.cursor}}async devInspectTransactionBlock(e){let t=typeof e.transactionBlock=="object"&&e.transactionBlock!==null&&"setSenderIfNotSet"in e.transactionBlock?e.transactionBlock:Vu.from(e.transactionBlock);t.setSenderIfNotSet(e.sender);let n=await this.simulateTransaction({transaction:t,checksEnabled:!1,include:{effects:!0,events:!0,commandResults:!0}}),o=n.$kind==="Transaction"?n.Transaction:n.FailedTransaction,a=o.effects?.status?.success??!1;return{error:a?null:o.effects?.status?.error?.message??"Simulation failed",effects:{status:{status:a?"success":"failure",error:o.effects?.status?.error?.message}},events:(o.events??[]).map(s=>({type:s.eventType,parsedJson:s.json,packageId:s.packageId,transactionModule:s.module,sender:s.sender,bcs:"",id:{txDigest:"",eventSeq:"0"}})),results:n.commandResults?.map(s=>({returnValues:s.returnValues.map(c=>[Array.from(c.bcs),"u64"])}))}}};var Ui={};Ls(Ui,{contractId:()=>Qu,default:()=>em,feeObjId:()=>Zu,roleObjId:()=>Yu,status:()=>zu,transaction:()=>Xu,upgradeCapObjId:()=>tm,vaultObjId:()=>Ju});var Xu="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",zu="success",Qu="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Yu="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Ju="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Zu="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",tm="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",em={transaction:Xu,status:zu,contractId:Qu,roleObjId:Yu,vaultObjId:Ju,feeObjId:Zu,upgradeCapObjId:tm};var Gi={};Ls(Gi,{contractId:()=>rm,default:()=>lm,feeObjId:()=>sm,roleObjId:()=>am,status:()=>om,transaction:()=>nm,upgradeCapObjId:()=>cm,vaultObjId:()=>im});var nm="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",om="success",rm="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",am="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",im="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",sm="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",cm="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",lm={transaction:nm,status:om,contractId:rm,roleObjId:am,vaultObjId:im,feeObjId:sm,upgradeCapObjId:cm};var pm=Xt("testnet"),um=Xt("testnet"),mm=Xt("mainnet"),dm=Xt("mainnet"),fm="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",hm="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",gm="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",ym="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Ac=Ui,Mc=Gi,bm=new Map([["dev",{env:"dev",rpc:{url:pm},backend:{url:fm},contract:Ac}],["stg",{env:"stg",rpc:{url:um},backend:{url:hm},contract:Ac}],["prev",{env:"prev",rpc:{url:mm},backend:{url:gm},contract:Mc}],["prod",{env:"prod",rpc:{url:dm},backend:{url:ym},contract:Mc}]]);function Oc(r,e){let t=bm.get(r);if(!t)throw new Error(`Env not supported: ${r}`);return e&&e.rpc&&(t.rpc=e.rpc),e&&e.backend&&(t.backend=e.backend),e&&e.contract&&(t.contract=e.contract),t}var j=class extends Error{mpayErrorCode;context;constructor(e,t,n={}){let{cause:o,context:a}=n;o?super(`[MPay] ${t}: ${o}`):super(`[MPay] ${t}`),this.mpayErrorCode=e,this.context=a}};var Ao=class extends j{constructor(){super(11,"Backend is not specified")}};var Mo=class extends j{constructor(){super(1,"Wallet not connected")}};import Pe,{AxiosError as Tm}from"axios";var Oe=class extends j{constructor(e,t){super(10,e,{context:t})}};var Oo=class r{constructor(e){this.apiURL=e}apiURL;static parseResponseData(e){if(e instanceof Tm)throw new Oe(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new Oe(e.data.code)}throw new Oe(e.status.toString())}async getIncomingStreams(e,t){let n=await Pe.post(`${this.apiURL}/stream`,{recipient:e,...t});return r.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await Pe.post(`${this.apiURL}/stream`,{sender:e,...t});return r.parseResponseData(n)}async getStreamHistory(e){let t=await Pe.post(`${this.apiURL}/stream-events`,e),n=r.parseResponseData(t);return n.data.forEach(o=>{let a=o;return a.data.type==="create_stream"?a.data.balance=BigInt(a.data.balance):a.data.type==="cancel_stream"?a.data.withdrawAmount=BigInt(a.data.withdrawAmount):a.data.type==="claim"||a.data.type==="auto_claim"?a.data.claimAmount=BigInt(a.data.claimAmount):a.data.type==="set_auto_claim"&&(a.data.enabled=!!a.data.enabled),a.createdAt=new Date(a.createdAt),a}),n}async getAllCoinTypes(e){let t=await Pe.post(`${this.apiURL}/stream-info`,{address:e});return r.parseResponseData(t)}async getAllRecipients(e,t){let n=await Pe.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return r.parseResponseData(n)}async getAllSenders(e,t){let n=await Pe.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return r.parseResponseData(n)}};var Sm={dev:"sui:testnet",stg:"sui:testnet",prev:"sui:mainnet",prod:"sui:mainnet"},Re=class r{signer;suiClient;envConfig;_backend;constructor(e,t){this.envConfig=e,this.suiClient=t??Ye(Sm[e.env],e.rpc.url),e.backend&&(this._backend=new Oo(e.backend.url))}static new(e,t){let n=Oc(e,t);return new r(n,t?.suiGrpcClient)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new Ao;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 Mo;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as Fm,normalizeStructTag as Km,normalizeSuiAddress as ll}from"@mysten/sui/utils";import{Transaction as jo}from"@mysten/sui/transactions";import{Transaction as zc}from"@mysten/sui/transactions";import{SUI_TYPE_ARG as Qc,normalizeStructTag as Dm}from"@mysten/sui/utils";var qi=50n,Po=10000n,Rc=25n,Fi=100000000n;var ae=class{constructor(e){this.object=e}object;moveArg(e){return e.object(this.object)}},Ro=class{constructor(e){this.objects=e}objects;moveArgs(e){return e.makeMoveVec({elements:this.objects.map(t=>e.object(t))})}},Se=class r{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 r(t.result[s]);if(n===Symbol.iterator)return function*(){let s=0;for(;;)yield o(s),s++};if(typeof n=="symbol")return;let a=parseInt(n,10);if(!(Number.isNaN(a)||a<0))return o(a)}})}result;moveArg(){return this.result}};function Bc(r,e){if(typeof e=="bigint"||typeof e=="number")return r.pure.u64(e);if(typeof e=="boolean")return r.pure.bool(e);if(typeof e=="string")return/^0x[0-9a-fA-F]+$/.test(e)?r.pure.address(e):r.pure.string(e);throw new Error(`Unsupported pure argument type: ${typeof e}`)}import{bcs as Cm}from"@mysten/bcs";var Je=class extends j{constructor(e,t){super(3,e,{context:t})}};import{bcs as wm}from"@mysten/bcs";var Jt=class extends j{constructor(e,t){super(6,e,{context:t})}};function Bo(r){if(r==null)throw new Jt("Missing move object field");if(typeof r=="object"&&"fields"in r){let e=r.fields;if(e&&typeof e=="object")return e}if(typeof r=="object")return r;throw new Jt("Unexpected move object field shape",{value:String(r)})}function Nc(r){return r.fields&&typeof r.fields=="object"&&!("balance"in r)&&!("config"in r)&&!("status"in r)?r.fields:r}function Ec(r,e="balance"){if(r==null)throw new Jt(`Stream object missing ${e} field`);if(typeof r=="string"||typeof r=="number"||typeof r=="bigint")return BigInt(r);let t=Bo(r),n=t.balance??t.value;if(n==null)throw new Jt(`Stream object ${e} field has unexpected shape`,{value:JSON.stringify(r)});return BigInt(String(n))}async function Wc(r,e){let t=await r.listCoins({owner:e.owner,coinType:e.coinType,cursor:e.cursor??void 0,limit:e.limit});return{data:t.objects.map(n=>({coinObjectId:n.objectId,balance:n.balance,coinType:n.type})),hasNextPage:t.hasNextPage,nextCursor:t.cursor}}function Im(r){return r.core?.getObject?r.core.getObject.bind(r.core):r.getObject.bind(r)}function _c(r){return r.json&&typeof r.json=="object"?Nc(r.json):null}async function Lc(r,e){try{let t=Im(r),{object:n}=await t({objectId:e,include:{json:!0,type:!0}}),o=_c(n);return o?{data:{objectId:n.objectId,type:n.type,content:{dataType:"moveObject",type:n.type,fields:o}}}:{error:{code:"notExists"}}}catch{return{error:{code:"notExists"}}}}async function jc(r,e){if(e.length===0)return[];let{objects:t}=await r.getObjects({objectIds:e,include:{json:!0,type:!0}});return t.map(n=>{if(!("objectId"in n))return{error:{code:String(n.code??"unknown")}};let o=_c(n);if(o)return{data:{objectId:n.objectId,type:n.type,content:{dataType:"moveObject",type:n.type,fields:o}}}})}async function Uc(r,e){let{balance:t}=await r.getBalance({owner:e.owner,coinType:e.coinType??void 0});return{coinType:t.coinType,totalBalance:t.balance}}async function Gc(r,e){return(await r.listBalances({owner:e})).balances.map(n=>({coinType:n.coinType,totalBalance:n.balance}))}async function qc(r,e){let{coinMetadata:t}=await r.getCoinMetadata({coinType:e});return t}async function No(r,e){e.transaction.setSenderIfNotSet(e.sender);let t=await r.simulateTransaction({transaction:e.transaction,include:{effects:!0,commandResults:!0}}),n=t.$kind==="Transaction"?t.Transaction:t.FailedTransaction;return{effects:n.effects?{status:{status:n.effects.status.success?"success":"failure",error:n.effects.status.error?.message}}:void 0,commandResults:t.commandResults,results:t.commandResults?.map(o=>({returnValues:o.returnValues.map(a=>[Array.from(a.bcs),"u64"])}))}}function Fc(r,e=0,t=0){let n=r.commandResults?.[e]?.returnValues?.[t];if(!n)throw new Error("Missing command result");return BigInt(wm.u64().parse(n.bcs))}var Eo=class{constructor(e){this.results=e}results;getU64(e=0,t=0){try{return Fc(this.results,e,t)}catch{let[n,o]=this.getLegacyValue(e,t);if(o!=="u64")throw new Je("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Cm.u64().parse(Uint8Array.from(n))}}getLegacyValue(e=0,t=0){let o=this.results.results?.[e]?.returnValues;if(!o?.[t])throw new Je("Invalid contract return type.",{ctx:{expectType:"u64",gotType:"missing"}});return o[t]}};import{bcs as Ki}from"@mysten/bcs";var z=class extends j{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var $c=Ki.struct("StreamMetadata",{groupId:Ki.string(),name:Ki.string()}),xm=64;function Vc(r){return Hc(r),$c.serialize(r).toBase64()}function Ze(r){let e=$c.fromBase64(r);return Hc(e),e}function Hc(r){if(!Kc(r.name))throw new z("Invalid metadata: Name contains unknown character");if(!Kc(r.groupId))throw new z("Invalid metadata: Group ID contains unknown character");if(r.name.length>xm)throw new z("Invalid metadata: Name exceed max length 64")}function Kc(r){return/^[\x00-\x7F]+$/.test(r)}import{normalizeStructTag as Wo}from"@mysten/sui/utils";function _o(r,e){return Wo(r)===Wo(e)}function de(r,e){return Wo(r)===Wo(e)}function fe(r){if(r.$kind!=="MoveCall"||!r.MoveCall)return null;let{package:e,module:t,function:n}=r.MoveCall;return`${e}::${t}::${n}`}var Lo="txn.gas";import{nanoid as km}from"nanoid";function Xc(){return km()}var we=class r{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}globals;feeContract;streamContract;static convertCreateStreamInfoToInternal(e){return{metadata:Vc({name:e.name,groupId:Xc()}),coinType:Dm(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 zc,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),a=await this.wallet.requestCoins(o),s=await this.addMergeCoins(t,a[0]),c;o.length>1?c=await this.addMergeCoins(t,a[1]):c=s;for(let m=0;m<e.recipients.length;m++){let b=e.recipients[m],S=this.amountForRecipient(b,e.numberEpoch),w=this.getStreamFeeLocal(S),[C]=t.splitCoins(s,[t.pure.u64(S+w)]),[x]=t.splitCoins(c,[t.pure.u64(this.flatSuiFee)]);this.streamContract.createStream(t,{paymentCoin:new Se(C),flatFeeCoin:new Se(x),metadata:e.metadata,recipient:b.address,timeStart:e.startTime,cliff:b.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:b.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return t}calculateCreateStreamFees(e){let t=r.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(t)}feeParams(){return{createFeePercent:{numerator:qi,denominator:Po},claimFeePercent:{numerator:Rc,denominator:Po},flatFeePerStream:Fi}}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===Lo?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return _o(n,Qc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:Qc,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,a)=>{let s=this.amountForRecipient(a,e.numberEpoch),c=this.getStreamFeeLocal(s);return{totalAmount:o.totalAmount+s,streamFeeAmount:o.streamFeeAmount+c}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(e.recipients.length)*this.flatSuiFee,...t}}amountForRecipient(e,t){return BigInt(e.amountPerEpoch)*BigInt(t)+BigInt(e.cliffAmount)}get flatSuiFee(){return Fi}getStreamFeeLocal(e){return e*qi/Po}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new zc,e),n=await No(this.globals.suiClient,{sender:await this.globals.walletAddress(),transaction:t});return new Eo(n).getU64()}get wallet(){return this.globals.wallet}};var Yc="0x0000000000000000000000000000000000000000000000000000000000000006";var Be=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}moduleName;config;globals;addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.moveCall({target:n,arguments:t.arguments.map(o=>o instanceof Ro?o.moveArgs(e):o instanceof ae?o.moveArg(e):o instanceof Se?o.moveArg():Bc(e,o)),typeArguments:t.typeArgs}),e}makeObject(e){return typeof e=="string"?new ae(e):e}vaultObject(){return new ae(this.config.vaultObjId)}roleObject(){return new ae(this.config.roleObjId)}feeObject(){return new ae(this.config.feeObjId)}clockObject(){return new ae(Yc)}};var Ne=class r extends Be{constructor(t,n){super(r.ModuleName,t,n);this.config=t;this.globals=n}config;globals;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(),a=this.feeObject();return this.addContractCall(t,{method:r.MethodName.set_streaming_fee,arguments:[o,a,n],typeArgs:[]})}setStreamingFlatFee(t,n){let o=this.roleObject(),a=this.feeObject();return this.addContractCall(t,{method:r.MethodName.set_streaming_flat_fee,arguments:[o,a,n],typeArgs:[]})}setClaimFee(t,n){let o=this.roleObject(),a=this.feeObject();return this.addContractCall(t,{method:r.MethodName.set_claim_fee,arguments:[o,a,n],typeArgs:[]})}streamingFee(t,n){let o=this.feeObject();return this.addContractCall(t,{method:r.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(t,n){return this.addContractCall(t,{method:r.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(t){return this.addContractCall(t,{method:r.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var Zt=class r extends Be{constructor(t,n){super(r.ModuleName,t,n);this.config=t;this.globals=n}config;globals;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(),a=this.vaultObject(),s=this.makeObject(n.paymentCoin),c=this.makeObject(n.flatFeeCoin),m=this.clockObject();return this.addContractCall(t,{method:r.MethodName.create_stream,arguments:[o,a,s,c,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,m],typeArgs:[n.coinType]})}setAutoClaim(t,n){let o=this.makeObject(n.streamId);return this.addContractCall(t,{method:r.MethodName.set_auto_claim,arguments:[o,n.enabled],typeArgs:[n.coinType]})}cancelStream(t,n){let o=this.makeObject(n.streamId),a=this.clockObject();return this.addContractCall(t,{method:r.MethodName.cancel_stream,arguments:[o,a],typeArgs:[n.coinType]})}claimStream(t,n){let o=this.makeObject(n.streamId),a=this.clockObject();return this.addContractCall(t,{method:r.MethodName.claim_stream,arguments:[o,a],typeArgs:[n.coinType]})}claimStreamByProxy(t,n){let o=this.makeObject(n.streamId),a=this.vaultObject(),s=this.feeObject(),c=this.clockObject();return this.addContractCall(t,{method:r.MethodName.claim_stream_by_proxy,arguments:[o,a,s,c],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${r.ModuleName}::${r.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${r.ModuleName}::${r.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${r.ModuleName}::${r.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${r.ModuleName}::${r.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${r.ModuleName}::${r.MethodName.claim_stream_by_proxy}`}};var Ee=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new Ne(t,e),this.streamContract=new Zt(t,e)}globals;feeContract;streamContract;async createStreams(e){let t=we.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new we(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,n){let o=new jo;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new jo;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new jo;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new jo;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as $i,SUI_TYPE_ARG as vm}from"@mysten/sui/utils";import{Duration as Jc}from"luxon";var Uo=class extends j{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var Am=1e3,Go=class{constructor(e){this.globals=e;this.coinMetaHelper=new Vi(e.suiClient),this.createStreamHelper=new Ee(e).createStreamHelper()}globals;coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new Uo(e.effects?.status.status,e.effects?.status.error);return Object.entries(e.objectTypes??{}).filter(([,t])=>t.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(([t])=>t)}calculateCreateStreamFees(e){return this.createStreamHelper.calculateCreateStreamFees(e)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(e){if(e.steps===0n)throw new z("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 z("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 z("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(Jc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:Jc.fromMillis(Number(t)),steps:e.steps};return this.validateTimeline(o),o}async getBalance(e,t){let n=await Uc(this.globals.suiClient,{owner:e,coinType:t}),o=await this.getCoinMeta(t);return{...n,coinType:$i(n.coinType),coinMeta:o}}async getAllBalance(e){let t=await Gc(this.globals.suiClient,e),n=await Promise.all(t.map(o=>this.getCoinMeta(o.coinType)));return t.map((o,a)=>({...o,coinType:$i(o.coinType),coinMeta:n[a]}))}async getCoinMeta(e){return this.coinMetaHelper.getCoinMeta(e)}async simulateTransactionBlock(e){return No(this.globals.suiClient,{transaction:e,sender:await this.globals.wallet.address()})}validateStreamAmount(e,t){if(e.amountPerStep===0n)throw new z("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new z("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<Am)throw new z("Interval shall be at least 1 second","interval",e.interval)}},Vi=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}suiClient;coinMetaReg;async getCoinMeta(e){let t=$i(e||vm);if(this.coinMetaReg.has(t))return this.coinMetaReg.get(t);let n=await this.queryCoinMeta(t);return n&&this.coinMetaReg.set(t,n),n??void 0}async queryCoinMeta(e){return qc(this.suiClient,e)}};import{normalizeStructTag as el,normalizeSuiAddress as Ho}from"@mysten/sui/utils";import{DateTime as nl}from"luxon";import{Transaction as $o}from"@mysten/sui/transactions";import{normalizeStructTag as tl,parseStructTag as Pm}from"@mysten/sui/utils";import{DateTime as Rm}from"luxon";var qo=class extends j{constructor(){super(7,"Connected wallet is not creator")}};var tn=class extends j{constructor(){super(8,"Connected wallet is not recipient")}};var Bt=class extends j{constructor(e,t={}){super(0,e,t)}};var Fo=class extends j{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as Mm,Duration as Om}from"luxon";var Zc=(1n<<64n)-1n,Ko=1e3;function Hi(r){let e;typeof r=="number"?e=r:typeof r=="bigint"?e=Number(r):e=r.toMillis();let t=Math.round(e/Ko);return Mm.fromMillis(t*Ko)}function Xi(r){let e;typeof r=="number"?e=r:typeof r=="bigint"?e=Number(r):e=r.toMillis();let t=Math.round(e/Ko);return Om.fromMillis(t*Ko)}var he=class r{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Zt(e.envConfig.contract,e)}globals;streamId;rawData;streamContract;type="Stream";static async new(e,t){let n=await r.fetchStreamData(e,t);return new r(e,t,n)}static fromObjectData(e,t,n){let o=r.parseRawStreamData(t,n);return new r(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 r.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new Bt("Object Id does not align");this.rawData=r.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 qo;let e=new $o;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new tn;let e=new $o;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new tn;let t=new $o;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new $o;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 tl(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 Xi(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return Ze(e).groupId}get name(){let{metadata:e}=this.rawData.config;return Ze(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return Hi(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return Xi(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:Hi((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===Zc?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=Rm.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 Lc(e.suiClient,t);return r.parseRawStreamData(t,n)}static parseRawStreamData(e,t){if(t.error)throw t.error.code==="notExists"?new Fo(e):new Jt(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data?.content;if(!n||n.dataType!=="moveObject")throw new Jt("Unexpected object type",{gotType:n?.dataType});let{typeParams:o}=Pm(n.type),a=tl(o[0]),s=n.fields,c=Bo(s.config),m=Bo(s.status);return{coinType:a,autoClaim:s.auto_claim,balance:Ec(s.balance),config:{amountPerEpoch:BigInt(String(c.amount_per_epoch)),cancelable:c.cancelable,cliff:BigInt(String(c.cliff)),creator:String(c.creator),epochInterval:BigInt(String(c.epoch_interval)),metadata:String(c.metadata),recipient:String(c.recipient),timeStart:BigInt(String(c.time_start)),totalEpoch:BigInt(String(c.total_epoch))},status:{status:m.status,epochCanceled:BigInt(String(m.epoch_canceled)),epochClaimed:BigInt(String(m.epoch_claimed))}}}};var We=class extends j{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function Qi(r){let e=[];for(;await r.hasNext();){let t=await r.next();e.push(t)}return e&&Array.isArray(e[0])?e.flat(1):e}var zi=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}requester;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)}},_e=class{constructor(e){this.requester=e;this.pager=new zi(e),this.curData=[],this.cursor=0}requester;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 Bm=25;async function Ji(r,e,t){let n=new en(e),o=new nn(r,n,t);return await Qi(o)}var en=class{constructor(e){this.ids=e;this.cursor=-1}ids;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]}},nn=class extends _e{constructor(t,n,o){super(new Yi(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}suiClient;idIter;options},Yi=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||Bm,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}suiClient;stringIter;options;filter;pageSize;objectOptions;async doNextRequest(){let e=[];for(;e.length<this.pageSize&&await this.stringIter.hasNext();){let a=await this.stringIter.next();a&&e.push(a)}let t=await jc(this.suiClient,e),n;if(this.filter){let{filter:o}=this;n=t.filter(a=>!!a&&o(a))}else n=t.filter(o=>!!o);return{data:n,hasNext:await this.stringIter.hasNext()}}};var Vo=class r{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new We("stream size 0");let n=t.map(a=>a.groupId);if(new Set(n).size!==1)throw new z("Stream does not have same group ID")}globals;streams;type="StreamGroup";static async new(e,t){let n=await Ji(e.suiClient,t);return n.forEach(o=>{if(!o)throw new Bt("stream group object data undefined")}),r.newFromObjectResponse(e,t,n)}static async newFromObjectResponse(e,t,n){let o=await r.parseGroupStreams(e,t,n);return new r(e,o)}static checkStreamGroup(e){let t=e.map(a=>a.groupCommonInfo),n=t[0],o=!0;return t.forEach(a=>{Nm(n,a)||(o=!1)}),o}async refresh(){let e=await Ji(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((a,s)=>he.fromObjectData(e,t[s],a)).filter(a=>!!a);if(new Set(o.map(a=>a.groupId)).size!==1)throw new We("Not same group ID");if(!this.checkStreamGroup(o))throw new We("Not same stream settings");return o}};function Nm(r,e){return r.name===e.name&&r.groupId===e.groupId&&r.creator===e.creator&&r.start.toMillis()===e.start.toMillis()&&r.interval.toMillis()===e.interval.toMillis()&&r.steps===e.steps&&r.cancelable===e.cancelable}var on=class r{constructor(e,t){this.it=e;this.pageSize=t}it;pageSize;static async newIncoming(e){let t=await Xo.newIncoming(e);return new r(t,e.pageSize)}static async newOutgoing(e){let t=await Xo.newOutgoing(e);return new r(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}},Xo=class r{constructor(e){this.requester=e}requester;cachedNext;static async newIncoming(e){let t=await zo.newIncomingQuery(e);return new r(t)}static async newOutgoing(e){let t=await zo.newOutgoingQuery(e);return new r(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 Bt("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new Bt("No more results");return e}},zo=class r{constructor(e,t,n,o){this.globals=e;this.recipient=t;this.groupRefs=n;this.query=o;this.current=0;let a=new en(n.flat().map(s=>s.streamId));this.objectIter=new nn(e.suiClient,a)}globals;recipient;groupRefs;query;current=0;objectIter;static async newIncomingQuery(e){let t=jm(e.query),n=await e.globals.walletAddress(),a=(await e.globals.backend.getIncomingStreams(n,t)).filter(c=>Ho(c.recipient)===Ho(n)),s=ol(a);return new r(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=Um(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),a=ol(o);return new r(e.globals,n,a,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 _m(this.globals,e[0].streamId,this.objectIter);return this.current++,rl(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await Lm(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,Wm(t,this.query)?t:this.doNextRequest()}throw new Bt("Stream group with no stream")}};function ol(r){let e=new Map;return r.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)=>nl.fromISO(n[0].createDate).toMillis()-nl.fromISO(t[0].createDate).toMillis())}function rl(r,e){if(e===void 0)return!0;let t=Em(r,e.status);if(e&&"claimable"in e&&e.claimable!==void 0){let n=e.claimable?r.progress.claimable!==0n:r.progress.claimable===0n;return t&&n}return t}function Em(r,e){return e===void 0?!0:Array.isArray(e)?e.includes(r.progress.status):r.progress.status===e}function Wm(r,e){if(!e)return!0;let t=!1;return r.streams.forEach(n=>{rl(n,e)&&(t=!0)}),t}async function _m(r,e,t){let n=await al(t,e);return he.fromObjectData(r,e,n)}async function Lm(r,e,t){let n=[];for(;n.length<e.length;){let o=await al(t,e[n.length]);n.push(o)}return Vo.newFromObjectResponse(r,e,n)}async function al(r,e){if(!await r.hasNext())throw new Bt("object iterator has been consumed");let t=await r.next();if(!t||t.error||t.data===void 0||t.data===null)throw new Bt("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new Bt("stream id not aligned");return t}function jm(r){return{status:Zi(r?.status),coinType:il(r?.coinType),sender:sl(r?.sender)}}function Um(r){return{status:Zi(r?.status),coinType:il(r?.coinType),recipient:sl(r?.recipient)}}function Zi(r){return r===void 0||r.length===0?"all":Array.isArray(r)?r.reduce((e,t)=>{let n=Zi(t);return!e||e===n?n:"all"},void 0):Gm(r)}function Gm(r){switch(r){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new z("Unknown stream filtered status")}}function il(r){if(r)return Array.isArray(r)?r.length!==0?r.map(e=>el(e)):void 0:el(r)}function sl(r){if(r)return Array.isArray(r)?r.length!==0?r.map(e=>Ho(e)):void 0:Ho(r)}var Qo=class extends j{constructor(t,n,o){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:n,gotAmount:o}});this.coinType=t;this.requestAmount=n;this.gotAmount=o}coinType;requestAmount;gotAmount};var qm=25;async function cl(r,e,t,n="0x2::sui::SUI",o=qm){let a=new ts(r,e,n,o),s=BigInt(0),c=[];for(;await a.hasNext()&&s<t;){let m=await a.next();m&&(c.push(m),s+=BigInt(m.balance))}if(s<t)throw new Qo(n,t,s);return c}var ts=class extends _e{constructor(t,n,o,a){super(new es(t,n,o,a));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=a}suiClient;owner;coinType;reqPageSize},es=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new Bt("Invalid reqPageSize")}suiClient;owner;coinType;reqPageSize;nextCursor;async doNextRequest(){let e=await Wc(this.suiClient,{owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=e.nextCursor,{data:e.data,hasNext:e.hasNextPage}}};var ns=class{constructor(e){this.msafe=e}msafe;get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},Yo=class{constructor(e){this.account=e}account;async address(){return this.account.address}},os=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}singleWallet;suiClient;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(_o(e.coinType,Fm))return{primaryCoin:Lo};if(e.amount<=0)throw new z("Invalid coin request","coinAmount",e.amount);let t=await cl(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new Bt("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},Jo=class{globals;helper;constructor(e,t){this.globals=Re.new(e,t),this.helper=new Go(this.globals)}connectSingleWallet(e){let t=new os(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new ns(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return he.new(this.globals,e)}async getIncomingStreams(e,t=10){return on.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return on.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=>Km(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>ll(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>ll(o))}get wallet(){return this.globals.wallet}builder(){return new Ee(this.globals)}};var Kt=class extends k{application="mpay";getClient(e,t,n){let o=new Jo(e==="sui:mainnet"?"prod":"dev",{suiGrpcClient:n});return o.connectSingleWallet(new Yo(t)),o}};var rn=class extends Kt{constructor(t){super(t);this.data=t}data;txType=$m.Stream;txSubType="Cancel";async build(t){let{network:n,account:o,suiGrpcClient:a}=t;return(await this.getClient(n,o,a).getStream(this.data.streamId)).cancel()}};import{TransactionType as Vm}from"@msafe/sui3-utils";var an=class extends Kt{constructor(t){super(t);this.data=t}data;txType=Vm.Stream;txSubType="ClaimByProxy";async build(t){let{network:n,account:o,suiGrpcClient:a}=t;return(await this.getClient(n,o,a).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as Hm}from"@msafe/sui3-utils";var sn=class extends Kt{constructor(t){super(t);this.data=t}data;txType=Hm.Stream;txSubType="Claim";async build(t){let{network:n,account:o,suiGrpcClient:a}=t;return(await this.getClient(n,o,a).getStream(this.data.streamId)).claim()}};import{TransactionType as Xm}from"@msafe/sui3-utils";var cn=class extends Kt{constructor(t){super(t);this.data=t}data;txType=Xm.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o,suiGrpcClient:a}=t;return this.getClient(n,o,a).createStream(this.data)}};import{fromBase64 as zm}from"@mysten/bcs";import{bcs as Zo,pureBcsSchemaFromTypeName as Qm}from"@mysten/sui/bcs";import{normalizeStructTag as Ym,normalizeSuiAddress as rs}from"@mysten/sui/utils";function ln(r){if(!r.Pure)throw new Error("not pure argument");return zm(r.Pure.bytes)}var Le=class r{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;get moveCallData(){if(this.moveCall.$kind!=="MoveCall")throw new Error("not move call command");return this.moveCall.MoveCall}get inputs(){return this.txb.getData().inputs}getInputIndex(e){let t=this.moveCallData.arguments[e];if(t.$kind!=="Input")throw new Error("not input type");return t.Input}getInputParam(e){return this.inputs[this.getInputIndex(e)]}decodeSharedObjectId(e){let t=this.getInputParam(e);return r.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return r.getOwnedObjectId(t)}decodeInputU64(e){let t=this.getInputParam(e);return BigInt(Zo.U64.parse(ln(t)))}decodeInputAddress(e){let t=this.getInputParam(e);return rs(Zo.Address.parse(ln(t)))}decodeInputString(e){let t=this.getInputParam(e);return Zo.String.parse(ln(t))}decodeInputBool(e){let t=this.getInputParam(e);return Zo.Bool.parse(ln(t))}decodePureArg(e,t){let n=this.getInputParam(e);return r.getPureInputValue(n,t)}static getPureInputValue(e,t){return r.getPureInput(e,t)}static getOwnedObjectId(e){let t=e.Object?.ImmOrOwnedObject?.objectId??e.Object?.Receiving?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not object argument: ${JSON.stringify(e)}`);return rs(t)}static getSharedObjectId(e){let t=e.Object?.SharedObject?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not shared object argument: ${JSON.stringify(e)}`);return rs(t)}static getPureInput(e,t){return Qm(t).parse(ln(e))}typeArg(e){return Ym(this.moveCallData.typeArguments[e])}txArg(e){return this.moveCallData.arguments[e]}};var tr=class{constructor(e,t){this.globals=e;this.txb=t}globals;txb;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.commands.filter(t=>t.$kind==="MoveCall"&&de(fe(t),this.contract.createStreamTarget));if(e.length===0)throw new Bt("No create stream transactions");return e.map(t=>new Le(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=Ze(t),a=e.decodeInputAddress(5),s=e.decodeInputU64(6),c=e.decodeInputU64(7),m=e.decodeInputU64(8),b=e.decodeInputU64(9),S=e.decodeInputU64(10),w=e.decodeInputBool(11),C=e.typeArg(0);return{name:n,groupId:o,recipient:a,timeStart:s,cliff:c,epochInterval:m,totalEpoch:b,amountPerEpoch:S,cancelable:w,coinType:C}}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 z("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}}get commands(){return this.txb.getData().commands}get contract(){return new Zt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Ne(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new we(this.globals,this.feeContract,this.contract)}};var er=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Zt(e.envConfig.contract,e)}globals;txb;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 commands(){return this.txb.getData().commands}isCreateStreamTransaction(){return this.commands.findIndex(t=>t.$kind==="MoveCall"&&de(fe(t),this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.commands.length===1&&this.commands[0].$kind==="MoveCall"&&de(fe(this.commands[0]),this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.commands.length===1&&this.commands[0].$kind==="MoveCall"&&de(fe(this.commands[0]),this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.commands.length===1&&this.commands[0].$kind==="MoveCall"&&de(fe(this.commands[0]),this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.commands.length===1&&this.commands[0].$kind==="MoveCall"&&de(fe(this.commands[0]),this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new tr(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.commands[0];if(e.$kind!=="MoveCall")throw new Error("MoveCall not found");return new Le(e,this.txb)}};import{TransactionType as Jm}from"@msafe/sui3-utils";var pn=class extends Kt{constructor(t){super(t);this.data=t}data;txType=Jm.Stream;txSubType="SetAutoClaim";async build(t){let{network:n,account:o,suiGrpcClient:a}=t;return(await this.getClient(n,o,a).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var nr=class{application="mpay";supportSDK="@mysten/sui-v2";async deserialize(e){let{network:t,transaction:n,suiGrpcClient:o}=e,a=Re.new(t==="sui:mainnet"?"prod":"dev",{suiGrpcClient:o}),c=new er(a,n).decode(),m;switch(c.type){case"CreateStream":m=new cn(c.info);break;case"SetAutoClaim":m=new pn({streamId:c.streamId,enabled:c.enabled});break;case"Claim":m=new sn({streamId:c.streamId});break;case"ClaimByProxy":m=new an({streamId:c.streamId});break;case"Cancel":m=new rn({streamId:c.streamId});break;default:throw new Error(`Unknown transaction type: ${c}`)}return{txType:m.txType,txSubType:m.txSubType,intentionData:m.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new cn(t);break;case"Claim":n=new sn(t);break;case"ClaimByProxy":n=new an(t);break;case"SetAutoClaim":n=new pn(t);break;case"Cancel":n=new rn(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as ed,TransactionSubTypes as pl}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Zm}from"@msafe/sui3-utils";var or=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiGrpcClient:n,account:o}=t;return Zm(n,this.data,o.address)}static fromData(t){return new r(t)}};import{buildObjectTransferTxb as td}from"@msafe/sui3-utils";var rr=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiGrpcClient:n,account:o}=t;return td(n,this.data,o.address)}static fromData(t){return new r(t)}};var ar=class{application="msafe-core";supportSDK="@mysten/sui-v2";constructor(){this.application=ed}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{account:t,network:n,suiGrpcClient:o}=e,a;switch(e.txSubType){case pl.assets.coin.send:a=or.fromData(e.intentionData);break;case pl.assets.object.send:a=rr.fromData(e.intentionData);break;default:throw new Error("not implemented")}return a.build({suiGrpcClient:o,account:t,network:n})}};import{TransactionType as Tl}from"@msafe/sui3-utils";var ul=!1,un={ProtocolPackage:"0x512f28261c1a293f49416d8885b8d5d32bde6dd68a99a0be36fe42b248e6833a",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 as(){if(!ul)try{let r=await fetch("https://open-api.naviprotocol.io/api/msafe").then(a=>a.json()),{packageId:e,borrowFee:t,borrowFeeAddress:n,pool:o}=r;e&&(un.ProtocolPackage=e),t&&(un.borrowFee=t),n&&(un.borrowFeeAddress=n),o&&(un.pool=o),ul=!0}catch(r){console.error(r.message)}}var te=un;import{TransactionType as Ce}from"@msafe/sui3-utils";import{bcs as mn,fromBase64 as dn}from"@mysten/bcs";import{normalizeStructTag as od,normalizeSuiAddress as is}from"@mysten/sui/utils";function ir(r){if(r.$kind!=="MoveCall")return null;let{package:e,module:t,function:n}=r.MoveCall;return`${e}::${t}::${n}`}var sr=class{constructor(e){this.txb=e}txb;decode(){if(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 commands(){return this.txb.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>ir(t)===e)}isClaimRewardTransaction(){return this.commands.some(e=>e.$kind==="MoveCall"&&e.MoveCall.function.includes("claim_reward"))}isEntryBorrowTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::entry_borrow_v2`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::borrow_v2`)}isEntryMultiDepositTransaction(){let e=`${te.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.commands.filter(o=>ir(o)===e);return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.function.includes("claim_reward"))?!1:t.length>1}isEntryClaimAndDepositTransaction(){let e=`${te.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.commands.filter(o=>ir(o)===e);return!!(this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.function.includes("claim_reward"))&&t.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallCommand(`${te.ProtocolPackage}::incentive_v3::withdraw_v2`)}decodeEntryClaimAndDeposit(){return{txType:Ce.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return{txType:Ce.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:Ce.Other,type:"EntryBorrow",intentionData:{amount:t,assetId:e}}}decodeEntryMultiDeposit(){let e=[],t=`${te.ProtocolPackage}::incentive_v3::entry_deposit`;return this.commands.forEach(n=>{if(ir(n)===t){let o=new cr(n,this.txb),a=o.decodeInputU8(3),s=o.decodeInputU64(5);e.push({assetId:a,amount:s})}}),{txType:Ce.Other,type:"EntryMultiDeposit",intentionData:{list:e}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5);return{txType:Ce.Other,type:"EntryDeposit",intentionData:{amount:t,assetId:e}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6);return{txType:Ce.Other,type:"EntryRepay",intentionData:{amount:t,assetId:e}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:Ce.Other,type:"EntryWithdraw",intentionData:{amount:t,assetId:e}}}get helper(){let e=this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.package===te.ProtocolPackage);if(!e)throw new Error("MoveCall not found");return new cr(e,this.txb)}},cr=class r{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;get moveCallData(){if(this.moveCall.$kind!=="MoveCall")throw new Error("not move call command");return this.moveCall.MoveCall}get inputs(){return this.txb.getData().inputs}getInputIndex(e){let t=this.moveCallData.arguments[e];if(t.$kind!=="Input")throw new Error("not input type");return t.Input}getInputParam(e){return this.inputs[this.getInputIndex(e)]}decodeSharedObjectId(e){let t=this.getInputParam(e);return r.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return r.getOwnedObjectId(t)}decodeInputU64(e){let t=this.getInputParam(e);return Number(mn.u64().parse(Uint8Array.from(dn(t.Pure.bytes))))}decodeInputU8(e){let t=this.getInputParam(e);return Number(mn.u8().parse(Uint8Array.from(dn(t.Pure.bytes))))}decodeInputAddress(e){let t=this.getInputParam(e);return is(mn.Address.parse(Uint8Array.from(dn(t.Pure.bytes))))}decodeInputString(e){let t=this.getInputParam(e);return mn.string().parse(Uint8Array.from(dn(t.Pure.bytes)))}decodeInputBool(e){let t=this.getInputParam(e);return mn.bool().parse(Uint8Array.from(dn(t.Pure.bytes)))}static getOwnedObjectId(e){let t=e.Object?.ImmOrOwnedObject?.objectId??e.Object?.Receiving?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not object argument: ${JSON.stringify(e)}`);return is(t)}static getSharedObjectId(e){let t=e.Object?.SharedObject?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not shared object argument: ${JSON.stringify(e)}`);return is(t)}typeArg(e){return od(this.moveCallData.typeArguments[e])}txArg(e){return this.moveCallData.arguments[e]}};import{Transaction as ml}from"@mysten/sui/transactions";import{depositCoinPTB as rd,withdrawCoinPTB as ad,repayCoinPTB as id,borrowCoinPTB as sd,claimLendingRewardsPTB as dl,getUserAvailableLendingRewards as fl}from"@naviprotocol/lending";async function je(r,e,t,n){return await rd(r,e,t,{amount:n}),r}async function hl(r,e,t,n){let[o]=await ad(r,e,t);return r.transferObjects([o],r.pure.address(n)),r}async function gl(r,e,t,n){let[o]=await sd(r,e,t);return r.transferObjects([o],r.pure.address(n)),r}async function ss(r,e,t,n){return await id(r,e,t,{amount:n}),r}async function yl(r,e){let t=new ml,n=await fl(e,{client:r});return await dl(t,n),t}async function bl(r,e){let t=new ml,n=await fl(e,{client:r});return await dl(t,n,{customCoinReceive:{type:"depositNAVI",depositNAVI:{fallbackReceiveAddress:e}}}),t}var lr=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await yl(t.suiClient,t.account.address)}static fromData(t){return new r(t)}};var pr=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await bl(t.suiClient,t.account.address)}static fromData(t){return new r(t)}};import{Transaction as ld}from"@mysten/sui/transactions";import{getPool as cd}from"@naviprotocol/lending";async function ee(r){return cd(r)}var ur=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,a=new ld;console.log("build",this.data);let s=await ee(n);return await gl(a,s,o,t.account.address)}static fromData(t){return new r(t)}};import{Transaction as pd}from"@mysten/sui/transactions";async function Ue(r,e,t){let n=await r.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var mr=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:a,amount:s}=this.data,c=new pd;console.log("build",this.data);let m=await ee(a);if(a===0){let[C]=c.splitCoins(c.gas,[s]);return await je(c,m,C,s)}let b=await Ue(n,o.address,m.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${m.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let C=1;for(;C<b.data.length;)c.mergeCoins(S,[b.data[C].coinObjectId]),C++}return await je(c,m,c.object(S),s)}static fromData(t){return new r(t)}};import{Transaction as ud}from"@mysten/sui/transactions";var dr=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:a,amount:s}=this.data,c=new ud;console.log("build",this.data);let m=await ee(a);if(a===0){let[w]=c.splitCoins(c.gas,[s]);return ss(c,m,w,s)}let b=await Ue(n,o.address,m.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${m.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let w=1;for(;w<b.data.length;)c.mergeCoins(S,[b.data[w].coinObjectId]),w++}return ss(c,m,c.object(S),s)}static fromData(t){return new r(t)}};import{Transaction as md}from"@mysten/sui/transactions";var fr=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,a=new md;console.log("build",this.data);let s=await ee(n);return await hl(a,s,o,t.account.address)}static fromData(t){return new r(t)}};import{Transaction as dd}from"@mysten/sui/transactions";var hr=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:a}=this.data,s=new dd;console.log("build",this.data);for(let c=0;c<a.length;c++){let{assetId:m,amount:b}=a[c],S=await ee(m);if(m===0){let[x]=s.splitCoins(s.gas,[b]);await je(s,S,x,b);continue}let w=await Ue(n,o.address,S.suiCoinType);if(!w.data[0])throw new Error(`Insufficient balance for ${S.suiCoinType} Token`);let C=w.data[0].coinObjectId;if(w.data.length>=2){let x=1;for(;x<w.data.length;)s.mergeCoins(C,[w.data[x].coinObjectId]),x++}await je(s,S,s.object(C),b)}return s}static fromData(t){return new r(t)}};import{Transaction as fd}from"@mysten/sui/transactions";var gr=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return console.log("build",this.data),fd.from(this.data.content)}static fromData(t){return new r(t)}};var yr=class{application="navi";supportSDK="@mysten/sui";async deserialize(e){if(await as(),e.appContext?.content)return{txType:Tl.Other,txSubType:"PlainTransaction",intentionData:{content:e.appContext.content,scene:e.appContext.scene||"unknown"}};let{transaction:t}=e,o=new sr(t).decode();return{txType:Tl.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await as(),e.txSubType){case"EntryDeposit":o=mr.fromData(e.intentionData);break;case"EntryBorrow":o=ur.fromData(e.intentionData);break;case"EntryRepay":o=dr.fromData(e.intentionData);break;case"EntryWithdraw":o=fr.fromData(e.intentionData);break;case"EntryMultiDeposit":o=hr.fromData(e.intentionData);break;case"ClaimReward":o=lr.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=pr.fromData(e.intentionData);break;case"PlainTransaction":o=gr.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as hd,TransactionType as Sl}from"@msafe/sui3-utils";import{fromHex as gd}from"@mysten/bcs";import{Transaction as yd}from"@mysten/sui/transactions";var bd="msafe-plain-tx",wl=hd.others.plain,cs=class r extends k{constructor(t){super(t);this.data=t}data;txType=Sl.Other;txSubType=wl;async build(t){return yd.from(gd(this.data.content))}static fromData(t){return new r(t)}},br=class{application;supportSDK="@mysten/sui-v2";constructor(){this.application=bd}async deserialize(e){let{content:t}=e.appContext;return{txType:Sl.Other,txSubType:wl,intentionData:{content:t}}}async build(e){let{suiGrpcClient:t,network:n,account:o}=e;return cs.fromData(e.intentionData).build({suiGrpcClient:t,network:n,account:o})}};import{Transaction as Tr,isTransaction as Td}from"@mysten/sui/transactions";function Il(r,e){return new vo({network:Do(r),baseUrl:e})}var Cl="0x2::sui::SUI",xl=1e8;async function kl(r){if(Td(r))return r;if(typeof r=="string"||r instanceof Uint8Array)return Tr.from(r);if(r&&typeof r=="object"&&"build"in r&&typeof r.build=="function"){let e=await r.build({onlyTransactionKind:!0});return Tr.from(e)}throw new Error("Unsupported transaction payload for deserialize")}var Sr=class r{apps;constructor(){this.apps=new Map}static fromHelpers(e){let t=new r;for(let n=0;n<e.length;n++){let o=e[n];switch(o.supportSDK){case"@mysten/sui":t.addHelper(o);break;case"@mysten/sui-v2":t.addGrpcHelper(o);break;default:{let a=o;throw new Error(`${a.application}: ${a.supportSDK} SDK not supported`)}}}return t}addHelper(e){this.setApp(e.application,new ls(e))}addGrpcHelper(e){this.setApp(e.application,new ps(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}setApp(e,t){this.apps.set(e,t)}},ls=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=Il(e.network,e.clientUrl),n=await kl(e.transactionBlock);return this.helper.deserialize({...e,suiClient:t,transaction:n})}async build(e){let t=Il(e.network,e.clientUrl),{balance:n}=await t.getBalance({owner:e.account.address,coinType:Cl});if(Number(n.balance)<xl)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiClient:t});o.setSender(e.account.address);let a=await o.build({client:t});return Tr.from(a)}},ps=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=Ye(e.network,e.clientUrl),n=await kl(e.transactionBlock);return this.helper.deserialize({...e,suiGrpcClient:t,transaction:n})}async build(e){let t=Ye(e.network,e.clientUrl),{balance:n}=await t.core.getBalance({owner:e.account.address,coinType:Cl});if(Number(n.balance)<xl)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiGrpcClient:t});o.setSender(e.account.address);let a=await o.build({client:t});return Tr.from(a)}};import{TransactionType as Md}from"@msafe/sui3-utils";import{Scallop as Od}from"@scallop-io/sui-scallop-sdk";import{TransactionType as _t}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as Pl}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as Sd}from"@mysten/sui/utils";var ge=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}`))}transaction;scallopClient;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:a}=Sd(t);return e?e.package===n&&e.module===o&&e.function===a:!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((a,s,c)=>(a[s]=c,a),{}),o=[];return this.commands.forEach(a=>{this.isMoveCall(a)&&a.MoveCall&&t.has(a.MoveCall.package)&&(o[n[a.MoveCall.package]]=a.MoveCall)}),o}hasMoveCallCommand(e){return this.movecallsAsSet.has(e)}};import{bcs as Dl}from"@mysten/sui/bcs";import{normalizeStructTag as wd,normalizeSuiAddress as fn}from"@mysten/sui/utils";var us=class r{constructor(e,t,n=0){this.moveCall=e;this.transaction=t;let o=[];e?.MoveCall&&t.getData().commands.filter((a,s)=>{if(a.$kind==="MoveCall"){let c=`${a.MoveCall.package}::${a.MoveCall.module}::${a.MoveCall.function}`,m=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return c===m?(o.push(s),!0):!1}return!1}),this.cmdIdx=o[n]}moveCall;transaction;cmdIdx;get txBlockTransactions(){return this.transaction.blockData.transactions[this.cmdIdx]}decodeSharedObjectId(e){let t=this.getInputParam(e);return r.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return r.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 fn(t)}decodeInputString(e){return this.decodePureArg(e,"String")}decodeInputBool(e){return this.decodePureArg(e,"Bool")}decodePureArg(e,t){let n=this.getInputParam(e);return r.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"&&t.kind!=="Result")throw new Error("not nested or result 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;return Dl[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 fn(e.value.Object.ImmOrOwned.objectId)}return fn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return fn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return fn(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 Dl.U64.parse(new Uint8Array(t))}typeArg(e){return wd(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},_=us;var ms=class{constructor(e,t){this.splitCoin=e;this.txb=t}splitCoin;txb;getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(_.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},Lt=ms;import{normalizeStructTag as vl,SUI_CLOCK_OBJECT_ID as Al,SUI_TYPE_ARG as Id}from"@mysten/sui/utils";var Ml=async(r,e)=>{let t=await r.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 a=r.address.get("borrowIncentive.object");return o===`${a.slice(2)}::incentive_account::IncentiveProgramLockKey`},Ge={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},$t={unstakeObligation:(r,e,t)=>r.moveCall(`${Ge.id}::user::unstake`,[Ge.incentivePools,Ge.incentiveAccounts,r.object(e),r.object(t),Al],[vl(Id)]),redeem_rewards:(r,e,t,n)=>r.moveCall(`${Ge.id}::user::redeem_rewards`,[Ge.incentivePools,Ge.incentiveAccounts,r.object(e),r.object(t),Al],[vl(n)])};var Ol=(r,e)=>{let t=[];for(let n=0;n<r.length;n+=e)t.push(r.slice(n,n+e));return t};var wr=class extends ge{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(`${Pl}::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 _(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new _(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 _(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${Pl}::user::redeem_rewards`)).map(t=>new _(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new _(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new _(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new _(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new _(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 _(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new _(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new _(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new _(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new _(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new _(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new _(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new _(e,this.transaction)}decodeMigrateScoin(){return{txType:_t.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:_t.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:_t.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Lt(t,this.transaction).getAmountInput().reduce((o,a)=>o+a,0);return{txType:_t.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 Lt(t,this.transaction).getAmountInput().reduce((o,a)=>o+a,0);return{txType:_t.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperBurnScoin.getNestedInputParam(1),n=new Lt(t,this.transaction).getAmountInput().reduce((o,a)=>o+a,0);return{txType:_t.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 Lt(t,this.transaction).getAmountInput().reduce((a,s)=>a+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:_t.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:_t.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:_t.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),a=this.helperBorrow.decodeOwnedObjectId(2);return{txType:_t.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:e,obligationKey:a,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),a=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:_t.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:e,obligationKey:a,obligationId:o,veScaKey:t}}}decodeRepay(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperRepay.getNestedInputParam(3),n=new Lt(t,this.transaction).getAmountInput().reduce((a,s)=>a+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:_t.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 Lt(n,this.transaction).getAmountInput().reduce((s,c)=>s+c,0),a=this.helperRepay.decodeSharedObjectId(1);return{txType:_t.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:a,coinName:e,veScaKey:t}}}decodeStakeSpool(){let e;this.isCreateStakeAccountTransaction()||(e=this.helperStake.decodeOwnedObjectId(1));let t=0;if(this.helperBurnScoin.moveCall){let a=this.helperBurnScoin.getNestedInputParam(1);t=new Lt(a,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}if(this.helperStake.moveCall&&t===0){let a=this.helperStake.getNestedInputParam(2);t=new Lt(a,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:_t.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:_t.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 Lt(t,this.transaction).getAmountInput().reduce((a,s)=>a+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:_t.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let e=[];this.helperUnstakes.forEach(o=>{let a=o.decodeOwnedObjectId(1),s=o.decodeInputU64(2);e.push({id:a,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 Lt(o,this.transaction).getAmountInput().reduce((a,s)=>a+s,0)}return{txType:_t.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:e}}}decodeClaimReward(){let e=[],t=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let a=o.decodeOwnedObjectId(2),s=o.typeArg(0),c=this.utils.parseCoinNameFromType(s);e.push({stakeMarketCoinName:c,stakeAccountId:a})}),this.helperClaimBorrowV2Reward.forEach(o=>{let a=o.decodeSharedObjectId(4),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:s,obligationKey:a,rewardCoinName:c})}),this.helperClaimBorrowReward.forEach(o=>{let a=o.decodeSharedObjectId(2),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:s,obligationKey:a,rewardCoinName:c})}),{txType:_t.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as fs}from"@msafe/sui3-utils";var Ir=class extends ge{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 _(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 _(e,this.transaction)}decodeCreateReferralLink(){return{txType:fs.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:fs.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:fs.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as ie}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as Cd}from"@scallop-io/sui-scallop-sdk";var Cr=class extends ge{async decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMergeVeSca())return this.decodeMergeVesca();if(this.isSplitVeSca())return this.decodeSplitVesca();if(this.isVeScaObligationBindings())return this.decodeVeScaObligationBindings();if(await this.isTransferVeScaKey())return this.decodeTransferVeScaKey()}isStakeScaFirsTime(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let e=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),t=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!e&&!!t}isRedeemSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}isMergeVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::merge`)}isSplitVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::split`)}isVeScaObligationBindings(){let e=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`)),o=e.length>0&&t.length>0&&e.length===t.length,a=n.length>0;return this.commands.length===e.length+t.length+n.length&&(o||a)}async isTransferVeScaKey(){let e=this.commands.filter(m=>m.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(m=>m.$kind==="Input").map(({Input:m})=>m);if(n.length!==t.length)return!1;let o=new Set(n),a=this.inputs.filter((m,b)=>m.$kind==="Object"&&o.has(b)).map(m=>m.Object.ImmOrOwnedObject),s=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,c=Ol(a.map(({objectId:m})=>m),50);for(let m=0;m<c.length;m++){let b=c[m];if((await this.scallopClient.scallopSuiKit.queryGetObjects(b,{showType:!0})).some(w=>w.type!==s))return!1}return a.length>0}get helperStakeMoreSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new _(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 _(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new _(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new _(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 _(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${Cd}::user::unstake`));return new _(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new _(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 _(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new _(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=[],a=0,s=0,c=0;return this.commands.forEach(m=>{this.filterMoveCallCommands(m,e)?(o.push({action:"unstake",helper:new _(m,this.transaction,a)}),a++):this.filterMoveCallCommands(m,t)?(o.push({action:"stake",helper:new _(m,this.transaction,s)}),s++):this.filterMoveCallCommands(m,n)&&(o.push({action:"deactivate",helper:new _(m,this.transaction,c)}),c++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:ie.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new Lt(e,this.transaction).getAmountInput().reduce((D,O)=>D+O,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),a=!!this.helperRedeemSca.moveCall,s=[],c=[],m=[];this.helperOldUnstakeObligation.moveCall&&(s=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(c=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(m=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let b=!1,S=!1,w,C,x=[{condition:s,isOld:!0},{condition:c,isOld:!1},{condition:m,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([C,w]=x[D].condition,b=!0,S=x[D].isOld);return{txType:ie.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:w,obligationKey:C,veScaKey:o,isHaveRedeem:a,isObligationLocked:b,isOldBorrowIncentive:S}}}decodeExtendStakePeriod(){let e=this.helperExtendStakePeriod.decodeInputU64(4),t=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],a=[];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&&(a=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let s=!1,c=!1,m,b,S=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:a,isOld:!1}];for(let w=0;w<S.length;w++)S[w].condition.length>1&&([b,m]=S[w].condition,s=!0,c=S[w].isOld);return{txType:ie.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:m,obligationKey:b,veScaKey:t,isObligationLocked:s,isOldBorrowIncentive:c}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new Lt(e,this.transaction).getAmountInput().reduce((x,D)=>x+D,0),o=[],a=[],s,c=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(a=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let m=!1,b=!1,S,w,C=[{condition:o,isOld:!0},{condition:a,isOld:!1},{condition:c,isOld:!1}];for(let x=0;x<C.length;x++)C[x].condition.length>1&&([w,S]=C[x].condition,m=!0,b=C[x].isOld);return{txType:ie.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:S,obligationKey:w,isOldBorrowIncentive:b,isObligationLocked:m}}}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 Lt(e,this.transaction).getAmountInput().reduce((x,D)=>x+D,0),o=[],a=[],s,c=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(a=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let m=!1,b=!1,S,w,C=[{condition:o,isOld:!0},{condition:a,isOld:!1},{condition:c,isOld:!1}];for(let x=0;x<C.length;x++)C[x].condition.length>1&&([w,S]=C[x].condition,m=!0,b=C[x].isOld);return{txType:ie.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:S,obligationKey:w,veScaKey:s,isObligationLocked:m,isOldBorrowIncentive:b}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:ie.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:ie.Other,type:"SplitVeSca",intentionData:t}}decodeVeScaObligationBindings(){let e=this.getVeScaObligationBindingHelpers(),t=(o,a)=>{switch(o){case"stake":return{veScaKey:a.decodeOwnedObjectId(9),obligationId:a.decodeSharedObjectId(4),obligationKey:a.decodeOwnedObjectId(3)};case"unstake":return{obligationId:a.decodeSharedObjectId(4),obligationKey:a.decodeOwnedObjectId(3)};case"deactivate":return{veScaKey:a.decodeOwnedObjectId(4),obligationId:a.decodeSharedObjectId(3)};default:throw new Error(`Invalid action ${o}`)}},n=e.map(({action:o,helper:a})=>({action:o,args:t(o,a)}));return{txType:ie.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),a=this.inputs.filter((s,c)=>s.$kind==="Object"&&o.has(c)).map(s=>s.Object.ImmOrOwnedObject);return{xType:ie.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:a}}}};import xd from"sort-keys-recursive";var M=class{constructor(e){this.data=e}data;get application(){return"msafe-core"}serialize(){return JSON.stringify(xd(this.data))}isObligationLocked=async(e,t)=>{let n=typeof t=="string"?t:t.objectId,{object:o}=await e.getObject({objectId:n,include:{json:!0}});return!!o.json?.lock_key};async buildTxWithRefreshObligation(e,t,n){let o=e.builder.createTxBlock();o.setSender(t.walletAddress);let{obligationId:a,obligationKey:s}=t;return await this.isObligationLocked(e.scallopSuiKit.client,a)?(await o.unstakeObligationQuick(a,s),await n(e,o,t),await o.stakeObligationWithVeScaQuick(a,s,t.veScaKey)):await n(e,o,t),o}};var xr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:a,obligationId:s,obligationKey:c}=this.data,m=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:m,obligationId:s,obligationKey:c},async(S,w)=>{let C=await w.borrowQuick(+a,o,s,c);w.transferObjects([C],m)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new r(t)}};var kr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:a,veScaKey:s,amount:c,coinName:m}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:a,veScaKey:s},async(S,w)=>{let C=await w.borrowQuick(+c,m,o,a);w.transferObjects([C],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new r(t)}};var Dr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:a,obligationKey:s,veScaKey:c,coinName:m,amount:b}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:a,obligationKey:s,veScaKey:c},async(w,C)=>{let x=C.claimReferralTicket(m),D=await C.borrowWithReferralQuick(+b,m,x,a,s);C.burnReferralTicket(x,m),C.transferObjects([D],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new r(t)}};import{SUI_TYPE_ARG as kd}from"@mysten/sui/utils";var vr=class r extends M{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),a=await e.query.getLendings(void 0,t),s=await e.query.getObligations(t),c=Object.values(await e.query.getObligationAccounts(t)??[]),m=(()=>{let C=[...e.constants.whitelist.spool].map(x=>e.utils.parseCoinName(x));return Object.values(a??[]).filter(x=>!!x&&C.includes(x.coinName)).reduce((x,D)=>{let O=e.utils.parseMarketCoinName(D.coinName);return x[O]||(x[O]=0),x[O]+=D.availableClaimCoin,x},{})})(),b={};Object.entries(o).forEach(([C,x])=>{for(let D=0;D<x.length;D++){let O=x[D];if(!m[C])continue;let G=n.claim(O.id,C);b.sui?b.sui.push(G):b.sui=[G]}});let S=(()=>{let C={};return C.sui=Object.values(m).reduce((x,D)=>x+D,0),c.forEach(x=>{Object.values(x.borrowIncentives).forEach(D=>{D&&D.rewards.forEach(O=>{C[O.coinName]||(C[O.coinName]=0),C[O.coinName]?C[O.coinName]+=O.availableClaimCoin:C[O.coinName]=O.availableClaimCoin})})}),C})();if(s.length>0&&c.length>0)for(let C=0;C<c.length;C++){let x=c[C],D=!1,O=s.find(U=>U.id===x.obligationId)?.keyId,G={};if(O){if(Object.values(x.borrowIncentives).forEach(U=>{if(U){let K=U.rewards.filter(V=>{let E=V.coinName;return V.availableClaimCoin>0&&!G[E]});D=K.length>0,K.forEach(V=>{let E=n.claimBorrowIncentive(x.obligationId,O,V.coinName);G[V.coinName]=!0,b[V.coinName]?b[V.coinName].push(E):b[V.coinName]=[E]})}}),S.sui>0){let U=$t.redeem_rewards(n,O,x.obligationId,kd);b.sui?b.sui.push(U):b.sui=[U]}if(D&&await Ml(e.query,x.obligationId)){n.unstakeObligation(x.obligationId,O);let K=await e.query.getBindedVeScaKey(x.obligationId);K?n.stakeObligationWithVesca(x.obligationId,O,K):n.stakeObligation(x.obligationId,O)}}}let w=(await Promise.all(Object.entries(b).map(async([C,x])=>{let D=x[0];if(x.length>1&&n.mergeCoins(D,x.slice(1)),C==="sui"){n.mergeCoins(n.gas,[D]);return}return await e.builder.utils.mergeSimilarCoins(n,D,e.utils.parseCoinType(C),t),D}))).filter(C=>!!C);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 r(e)}};var Ar=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.depositCollateral(this.data.collateralCoinName,+this.data.amount,!1,this.data.obligationId)}static fromData(t){return new r(t)}};var Mr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:a,obligationId:s,rewardCoinName:c,veScaKey:m}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=$t.redeem_rewards(b,a,s,n.utils.parseCoinType(c));return b.transferObjects([S],o),await b.unstakeObligationQuick(s,a),m?await b.stakeObligationWithVeScaQuick(s,a,m):await b.stakeObligationQuick(s,a),b.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new r(t)}};var Or=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new r(t)}};var Pr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.openObligation(!1)}static fromData(t){return new r(t)}};var Rr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:a,amount:s,obligationId:c,obligationKey:m}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:c,obligationKey:m},async(S,w)=>{await w.repayQuick(+s,a,c)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new r(t)}};var Br=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:a,amount:s,obligationId:c,veScaKey:m}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=n.constants.whitelist.borrowing.has(a);return S&&await b.unstakeObligationQuick(c,void 0),await b.repayQuick(+s,a,c),S&&await b.stakeObligationWithVeScaQuick(c,void 0,m),b.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new r(t)}};var Nr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.deposit(this.data.coinName,+this.data.amount,!1,t.account.address)}static fromData(t){return new r(t)}};var Er=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new r(t)}};var Wr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async unstakeAndWithdraw(t,n,o){let a=t.builder.createTxBlock();a.setSender(o);let{stakeAccountId:s,amount:c,coinName:m}=this.data,b=[];for(let S=0;S<s.length;S++){let{id:w,coin:C}=s[S],x=t.utils.parseMarketCoinName(m),[D]=await a.unstakeQuick(C,x,w,!1);if(D){let O=a.withdraw(D,m);b.push(O)}}if(c>0){let S=await a.withdrawQuick(c,m);b.push(S)}return b.length>1&&a.mergeCoins(b[0],b.slice(1)),a.transferObjects(b,o),a.txBlock}async build(t){return this.unstakeAndWithdraw(t.scallopClient,this.data,t.account.address)}static fromData(t){return new r(t)}};var _r=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await 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 r(t)}};var Lr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return await t.scallopClient.withdraw(this.data.coinName,Number(this.data.amount),!1,t.account.address)}static fromData(t){return new r(t)}};var jr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async bindReferral({account:t,scallopClient:n}){let o=t.address,a=n.builder.createTxBlock();return a.setSender(o),a.bindToReferral(this.data.veScaKey),a.txBlock}async build(t){return this.bindReferral(t)}static fromData(t){return new r(t)}};var Ur=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:a}=this.data,s=t.address,c=n.builder.createTxBlock();c.setSender(s);let m=a.map(b=>n.utils.parseCoinNameFromType(b));return await c.claimReferralRevenueQuick(o,m),c.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new r(t)}};var Gr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async createReferralLink({account:t,scallopClient:n}){let o=t.address,a=n.builder.createTxBlock();a.setSender(o);let s=a.mintEmptyVeSca();return a.transferObjects([s],o),a.txBlock}async build(t){return this.createReferralLink(t)}static fromData(t){return new r(t)}};import{SCA_COIN_TYPE as Dd}from"@scallop-io/sui-scallop-sdk";var qr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:a,unlockTime:s,obligationId:c,obligationKey:m,isOldBorrowIncentive:b,isObligationLocked:S}=this.data,w=t.address,C=n.builder.createTxBlock();C.setSender(w);let x=await n.utils.selectCoins(o,Dd,w),[D,O]=C.takeAmountFromCoins(x,o);return C.extendLockPeriod(a,s),C.extendLockAmount(a,D),C.transferObjects([O],w),!c||!m||(S&&(b?$t.unstakeObligation(C,c,m):C.unstakeObligation(c,m)),C.stakeObligationWithVesca(c,m,a)),C.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new r(t)}};var Fr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:a,unlockTime:s,obligationId:c,obligationKey:m,isObligationLocked:b,isOldBorrowIncentive:S}=this.data,w=n.builder.createTxBlock();return w.setSender(o),w.extendLockPeriod(a,s),c&&m&&(b&&(S?$t.unstakeObligation(w,m,c):w.unstakeObligation(c,m)),w.stakeObligationWithVesca(c,m,a)),w.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new r(t)}};var Kr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:a,sourceVeScaKey:s}=this.data,[c,m]=await Promise.all([n.getBindedObligationId(a),n.getBindedObligationId(s)]);c&&await t.unstakeObligationQuick(c),m&&await t.unstakeObligationQuick(m),o(t,a,s),c&&await t.stakeObligationWithVeScaQuick(c,void 0,a),m&&await t.stakeObligationWithVeScaQuick(m,void 0,s)}async build(t){let{scallopClient:n,account:{address:o}}=t,a=n.builder.createTxBlock();return a.setSender(o),await this.handleUnsubForKeys(a,n.query,async(s,c,m)=>{s.mergeVeSca(a.object(c),a.object(m))}),a.txBlock}static fromData(t){return new r(t)}};var $r=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async redeemSca({account:t,scallopClient:n}){let{veScaKey:o}=this.data,a=t.address,s=n.builder.createTxBlock();return s.setSender(a),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.redeemSca(t)}static fromData(t){return new r(t)}};import{SCA_COIN_TYPE as vd}from"@scallop-io/sui-scallop-sdk";var Vr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:a,unlockTime:s,veScaKey:c,isHaveRedeem:m,obligation:b,obligationKey:S,isObligationLocked:w,isOldBorrowIncentive:C}=this.data,x=n.builder.createTxBlock();if(x.setSender(o),m){let U=x.redeemSca(c);x.transferObjects([U],o)}let D=await n.builder.utils.selectCoins(a,vd,o),[O,G]=x.takeAmountFromCoins(D,a);return x.transferObjects([G],o),x.renewExpiredVeSca(c,O,s),!b||!S||(w&&(C?$t.unstakeObligation(x,S,b):x.unstakeObligation(b,S)),x.stakeObligationWithVesca(b,S,c)),x.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new r(t)}};var Hr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:a,splitAmount:s}=this.data,c=await n.getBindedObligationId(a);c&&await t.unstakeObligationQuick(c),o(t,a,s.toString()),c&&await t.stakeObligationWithVeScaQuick(c,void 0,a)}async build(t){let{scallopClient:n,account:{address:o}}=t,a=n.builder.createTxBlock();return a.setSender(o),await this.handleUnsubForKeys(a,n.query,(s,c,m)=>{let b=s.splitVeSca(c,m.toString());s.transferObjects([b],o)}),a.txBlock}static fromData(t){return new r(t)}};import{SCA_COIN_TYPE as Ad}from"@scallop-io/sui-scallop-sdk";var Xr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:a,isObligationLocked:s,isOldBorrowIncentive:c,obligationId:m,obligationKey:b,unlockTime:S,veScaKey:w}=this.data,C=n.builder.createTxBlock();C.setSender(o);let x=await n.utils.selectCoins(a,Ad,o),[D,O]=C.takeAmountFromCoins(x,a),G;return w?C.extendLockAmount(w,D):G=C.lockSca(D,S),m&&b&&(s&&(c?$t.unstakeObligation(C,b,m):C.unstakeObligation(m,b)),C.stakeObligationWithVesca(m,b,w||G)),w||C.transferObjects([G,O],o),C.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new r(t)}};var zr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:a,coinName:s,stakeAccountId:c}=this.data,m=n.builder.createTxBlock();m.setSender(o);let b=await m.depositQuick(+a,s),S=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(S))return m.txBlock;let w=await n.query.getStakeAccounts(S,o),C=c||(w.length>0?w[0].id:void 0);if(C)await m.stakeQuick(b,S,C);else{let x=m.createStakeAccount(S);await m.stakeQuick(b,S,x),m.transferObjects([x],o)}return m.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new r(t)}};var Qr=class r extends M{constructor(t){super(t);this.data=t}data;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,a=n.builder.createTxBlock();a.setSender(o);let{bindingDatas:s}=this.data;return s.forEach(c=>this.handleAction(a,c)),a.txBlock}static fromData(t){return new r(t)}};var Yr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{scallopClient:n,account:{address:o}}=t,a=n.builder.createTxBlock();a.setSender(o);let{veScaKeys:s}=this.data;return a.transferObjects(s.map(c=>a.objectRef(c)),a.pure.address(o)),a.txBlock}static fromData(t){return new r(t)}};var Jr=class r extends M{constructor(t){super(t);this.data=t}data;txType;txSubType;async withdrawUnlockedSca({account:t,scallopClient:n}){let{vescaKey:o}=this.data,a=t.address,s=n.builder.createTxBlock();return s.setSender(a),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.withdrawUnlockedSca(t)}static fromData(t){return new r(t)}};var Zr=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new Od({addressId:"695fcdc084f790c04eb068dc",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??Xt("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n);let a=new wr(t,this.scallopClient),s=new Ir(t,this.scallopClient),c=new Cr(t,this.scallopClient),m=a.decode()||s.decode()||await c.decode();if(!m)throw new Error("Unknown transaction type");return{txType:Md.Other,txSubType:m.type,intentionData:m.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:a,intentionData:s}=e;await this.initScallopClient(n.address,t);let c;switch(a){case"SupplyLending":c=Nr.fromData(s);break;case"WithdrawLending":c=Lr.fromData(s);break;case"Borrow":c=xr.fromData(s);break;case"Repay":c=Rr.fromData(s);break;case"DepositCollateral":c=Ar.fromData(s);break;case"WithdrawCollateral":c=_r.fromData(s);break;case"OpenObligation":c=Pr.fromData(s);break;case"UnstakeSpool":c=Er.fromData(s);break;case"ClaimIncentiveReward":c=vr.fromData(s);break;case"BorrowWithBoost":c=kr.fromData(s);break;case"StakeSca":c=Xr.fromData(s);break;case"ExtendStakePeriod":c=Fr.fromData(s);break;case"ExtendPeriodAndStakeMore":c=qr.fromData(s);break;case"RenewExpStakePeriod":c=Vr.fromData(s);break;case"WithdrawStakedSca":c=Jr.fromData(s);break;case"SupplyAndStakeLending":c=zr.fromData(s);break;case"WithdrawAndUnstakeLending":c=Wr.fromData(s);break;case"RedeemSca":c=$r.fromData(s);break;case"MigrateAndClaim":c=Mr.fromData(s);break;case"BorrowWithReferral":c=Dr.fromData(s);break;case"CreateReferralLink":c=Gr.fromData(s);break;case"ClaimRevenueReferral":c=Ur.fromData(s);break;case"BindReferral":c=jr.fromData(s);break;case"MigrateScoin":c=Or.fromData(s);break;case"RepayWithBoost":c=Br.fromData(s);break;case"MergeVeSca":c=Kr.fromData(s);break;case"SplitVeSca":c=Hr.fromData(s);break;case"VeScaObligationBindings":{c=Qr.fromData(s);break}case"TransferVeScaKeys":{c=Yr.fromData(s);break}default:throw new Error("not implemented")}return c.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as pf}from"@msafe/sui3-utils";import{TransactionType as yn}from"@msafe/sui3-utils";import{normalizeStructTag as xe}from"@mysten/sui/utils";import{API_URL as Vd}from"@suilend/sui-fe";import{TransactionType as Fd}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Kd,LENDING_MARKET_TYPE as $d,SuilendClient as hs}from"@suilend/sdk";import{TransactionType as Fe}from"@msafe/sui3-utils";import{fromBase64 as Rl,toHex as Bl}from"@mysten/bcs";import{normalizeStructTag as hn}from"@mysten/sui/utils";import{MAX_U64 as Ke}from"@suilend/sui-fe";import Nl from"bignumber.js";var ta=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=hn(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:Fe.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(m=>m.type.includes("lending_market::RedeemEvent"))},n=hn(t.RedeemEvent.parsedJson.coin_type.name),o=t.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let a=e.withdraw_ctokens.MoveCall.arguments[4].Input,s=new Nl(Bl(Rl(this.inputs[a].Pure.bytes)),16).toString(),c=s===Ke.toString();return console.log("decodeWithdraw - isMax:",c,"inputIndex:",a,"inputValue:",s,"MAX_U64.toString():",Ke.toString()),c&&(o=Ke.toString()),{txType:Fe.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(m=>m.type.includes("lending_market::BorrowEvent"))},n=hn(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 a=e.borrow_request.MoveCall.arguments[4].Input,s=new Nl(Bl(Rl(this.inputs[a].Pure.bytes)),16).toString(),c=s===Ke.toString();return console.log("decodeBorrow - isMax:",c,"inputIndex:",a,"inputValue:",s,"MAX_U64.toString():",Ke.toString()),c&&(o=Ke.toString()),{txType:Fe.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=hn(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:Fe.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],a=hn(o.parsedJson.coin_type.name),s=o.parsedJson.liquidity_amount;t[a]=`${+(t[a]??"0")+ +s}`}return console.log("Decoder.decodeClaimRewards",t),{txType:Fe.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:Fe.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as Bd}from"@mysten/sui/transactions";import Rd from"sort-keys-recursive";var jt=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Rd(this.data))}};var ea=class r extends jt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,obligationOwnerCap:s,obligation:c}=t;if(console.log("BorrowIntention.build",n,o,a,s,c),!s||!c)throw new Error("Obligation not found");let m=new Bd;return await a.borrowAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,m),m}static fromData(t){return console.log("BorrowIntention.fromData",t),new r(t)}};import{Transaction as Ld}from"@mysten/sui/transactions";import{normalizeStructTag as Nd}from"@mysten/sui/utils";import{Side as gn}from"@suilend/sdk";import{isSendPoints as Ed}from"@suilend/sui-fe";import Wd from"bignumber.js";var _d=(r,e)=>{let t={[gn.DEPOSIT]:[],[gn.BORROW]:[]};return r.lendingMarket.reserves.forEach(n=>{[gn.DEPOSIT,gn.BORROW].forEach(o=>{let a=o===gn.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,s=e.userRewardManagers.find(c=>c.poolRewardManagerId===a.id);s&&(t[o]=a.poolRewards.map((c,m)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(m),rewardCoinType:Nd(c.coinType.name),side:o})).filter(c=>!Ed(c.rewardCoinType)&&!!s.rewards[Number(c.rewardIndex)]&&new Wd(s.rewards[Number(c.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},na=_d;var oa=class r extends jt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimIntention.build",n,o,a,s,c),!s||!c)throw new Error("Obligation not found");let m=new Ld;return a.claimRewardsAndSendToUser(o.address,s.id,na(a,c),m),m}static fromData(t){return console.log("ClaimIntention.fromData",t),new r(t)}};import{Transaction as jd}from"@mysten/sui/transactions";var ra=class r extends jt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimAndDepositIntention.build",n,o,a,s,c),!s||!c)throw new Error("Obligation not found");let m=new jd;return a.claimRewardsAndDeposit(o.address,s.id,na(a,c),m),m}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new r(t)}};import{Transaction as Ud}from"@mysten/sui/transactions";var aa=class r extends jt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,obligationOwnerCap:s,obligation:c}=t;console.log("DepositIntention.build",n,o,a,s,c);let m=new Ud;return await a.depositIntoObligation(o.address,this.data.coinType,this.data.value,m,s?.id),m}static fromData(t){return console.log("DepositIntention.fromData",t),new r(t)}};import{Transaction as Gd}from"@mysten/sui/transactions";var ia=class r extends jt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,obligationOwnerCap:s,obligation:c}=t;if(console.log("RepayIntention.build",n,o,a,s,c),!s||!c)throw new Error("Obligation not found");let m=new Gd;return await a.repayIntoObligation(o.address,c.id,this.data.coinType,this.data.value,m),m}static fromData(t){return console.log("RepayIntention.fromData",t),new r(t)}};import{Transaction as qd}from"@mysten/sui/transactions";var sa=class r extends jt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,obligationOwnerCap:s,obligation:c}=t;if(console.log("WithdrawIntention.build",n,o,a,s,c),!s||!c)throw new Error("Obligation not found");let m=new qd;return await a.withdrawAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,m),m}static fromData(t){return console.log("WithdrawIntention.fromData",t),new r(t)}};var ca=async(r,e)=>{let t=await hs.initialize(Kd,$d,r),n=await hs.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,r),o=await Promise.all(n.map(a=>hs.getObligation(a.obligationId,t.lendingMarket.$typeArgs,r)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},la=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await ca(n,o));let a=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",a,"utils:",this.utils,"suiClient:",n);let c=new ta(t,a).decode();return{txType:Fd.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:a,account:s}=e;this.utils||(this.utils=await ca(a,s));let c;switch(n){case"deposit":c=aa.fromData(o);break;case"withdraw":c=sa.fromData(o);break;case"borrow":c=ea.fromData(o);break;case"repay":c=ia.fromData(o);break;case"claim":c=oa.fromData(o);break;case"claimAndDeposit":c=ra.fromData(o);break;default:throw new Error("not implemented")}let m=window.localStorage.getItem("obligationId"),b=this.utils.obligations?.find(w=>w.id===m)??this.utils.obligations?.[0],S=this.utils.obligationOwnerCaps?.find(w=>w.obligationId===b?.id);return c.build({network:t,suiClient:a,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:S,obligation:b})}};var gs=async(r,e)=>{let t=await ca(r,e),n=await fetch(`${Vd}/springsui/lst-info`),o=await n.json();if(n?.statusCode===500)throw new Error("Failed to fetch SpringSui LST data");let s=Object.fromEntries(Object.values(o).map(c=>[c.LIQUID_STAKING_INFO.type,c.LIQUID_STAKING_INFO]));return{...t,LIQUID_STAKING_INFO_MAP:s}};var pa=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=xe(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:yn.Other,type:"stake",intentionData:{amount:n,outCoinType:t}}}decodeStakeAndDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=xe(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:yn.Other,type:"stakeAndDeposit",intentionData:{amount:n,outCoinType:t}}}decodeConvert(){let e={RedeemEvent:this.simResult.events.find(a=>a.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(a=>a.type.includes("liquid_staking::MintEvent"))},t=xe(e.RedeemEvent.parsedJson.event.typename.name),n=xe(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:yn.Other,type:"convert",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeConvertAndDeposit(){let e={RedeemEvent:this.simResult.events.find(a=>a.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(a=>a.type.includes("liquid_staking::MintEvent"))},t=xe(e.RedeemEvent.parsedJson.event.typename.name),n=xe(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:yn.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=xe(e.RedeemEvent.parsedJson.event.typename.name),n=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:yn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as zd}from"@mysten/sui/transactions";import{LstClient as El,convertLstsAndRebalanceAndSendToUser as Qd}from"@suilend/springsui-sdk";import Xd from"sort-keys-recursive";var Vt=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Xd(this.data))}};var ua=class r extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("ConvertIntention.build",n,o,a,s,c,m);let b=await El.initialize(n,Object.values(s).find(C=>C.type===this.data.inCoinType)),S=await El.initialize(n,Object.values(s).find(C=>C.type===this.data.outCoinType)),w=new zd;return Qd(b,S,w,o.address,this.data.amount),w}static fromData(t){return console.log("ConvertIntention.fromData",t),new r(t)}};import{Transaction as Yd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Jd,sendObligationToUser as Zd}from"@suilend/sdk";import{LstClient as Wl,convertLstsAndRebalance as tf}from"@suilend/springsui-sdk";var ma=class r extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("ConvertAndDepositIntention.build",n,o,a,s,c,m);let b=await Wl.initialize(n,Object.values(s).find(O=>O.type===this.data.inCoinType)),S=await Wl.initialize(n,Object.values(s).find(O=>O.type===this.data.outCoinType)),w=new Yd,{obligationOwnerCapId:C,didCreate:x}=Jd(a,w,c),D=tf(b,S,w,o.address,this.data.amount);return a.deposit(D,this.data.outCoinType,C,w),x&&Zd(C,o.address,w),w}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new r(t)}};import{Transaction as ef}from"@mysten/sui/transactions";import{LstClient as nf}from"@suilend/springsui-sdk";var da=class r extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("StakeIntention.build",n,o,a,s,c,m);let b=await nf.initialize(n,Object.values(s).find(w=>w.type===this.data.outCoinType)),S=new ef;return b.mintAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("StakeIntention.fromData",t),new r(t)}};import{Transaction as of}from"@mysten/sui/transactions";import{createObligationIfNoneExists as rf,sendObligationToUser as af}from"@suilend/sdk";import{LstClient as sf}from"@suilend/springsui-sdk";var fa=class r extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("StakeAndDepositIntention.build",n,o,a,s,c,m);let b=await sf.initialize(n,Object.values(s).find(D=>D.type===this.data.outCoinType)),S=new of,{obligationOwnerCapId:w,didCreate:C}=rf(a,S,c),x=b.mintAmountAndRebalance(S,o.address,this.data.amount);return a.deposit(x,this.data.outCoinType,w,S),C&&af(w,o.address,S),S}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new r(t)}};import{Transaction as cf}from"@mysten/sui/transactions";import{LstClient as lf}from"@suilend/springsui-sdk";var ha=class r extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:a,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:m}=t;console.log("UnstakeIntention.build",n,o,a,s,c,m);let b=await lf.initialize(n,Object.values(s).find(w=>w.type===this.data.inCoinType)),S=new cf;return b.redeemAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("UnstakeIntention.fromData",t),new r(t)}};var ga=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await gs(n,o));let a=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",a);let c=new pa(t,a).decode();return{txType:pf.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:a,account:s}=e;this.utils||(this.utils=await gs(a,s));let c;switch(n){case"stake":c=da.fromData(o);break;case"stakeAndDeposit":c=fa.fromData(o);break;case"convert":c=ua.fromData(o);break;case"convertAndDeposit":c=ma.fromData(o);break;case"unstake":c=ha.fromData(o);break;default:throw new Error("not implemented")}return c.build({network:t,suiClient:a,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 ff}from"@msafe/sui3-utils";import{TransactionType as _l}from"@msafe/sui3-utils";var ya=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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:_l.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:_l.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as mf}from"@alphafi/stsui-sdk";var ba=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,a={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new mf(a).mint(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("MintIntention.fromData",t),new r(t)}};import{LST as df}from"@alphafi/stsui-sdk";var Ta=class r extends v{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,a={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new df(a).redeem(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("RedeemIntention.fromData",t),new r(t)}};var Sa=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 ya(t,o).decode();return{txType:ff.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=ba.fromData(e.intentionData);break;case"redeem":n=Ta.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as Ef}from"@msafe/sui3-utils";import{TurbosSdk as Wf}from"turbos-clmm-sdk";import{TransactionType as Ut}from"@msafe/sui3-utils";import{fromBase64 as $e}from"@mysten/bcs";import{bcs as Ve}from"@mysten/sui/bcs";import{BN as gf}from"turbos-clmm-sdk";var zt={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Qt={PackageId:"0xdee9"};var yf=(r,e,t,n)=>{if(r===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(a=>a===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},wa=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}txb;turbosSdk;config;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(`${zt.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${zt.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(`${Qt.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${Qt.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=yf(t,n,this.swap1Layer,this.swap2Layer),a=o.map((x,D)=>{let O=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(D)),G=this.helper.decodeInputU128(this.helper.getInputsIndex(4+D+t)),U=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new gf(G.toString()));return{pool:O,a2b:x,nextTickIndex:U}}),s=o[0]||t===1?e.MoveCall.typeArguments[0]:e.MoveCall.typeArguments[1],c=t===1?e.MoveCall.typeArguments[4]:o[0]?e.MoveCall.typeArguments[1]:e.MoveCall.typeArguments[0],m=this.helper.decodeInputAddress(this.helper.getInputsIndex(6+2*t)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(7+2*t)),S=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),w=this.helper.decodeInputU64(this.helper.getInputsIndex(2+t)),C=this.helper.decodeInputU64(this.helper.getInputsIndex(3+t));return{txType:Ut.Other,type:"Swap",intentionData:{routes:a,coinTypeA:s,coinTypeB:c,address:m,amountA:S?w:C,amountB:S?C:w,amountSpecifiedIsInput:S,slippage:"0.1",deadline:b}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeInputAddress(this.helper.getInputsIndex(12)),n=this.helper.decodeInputU64(this.helper.getInputsIndex(8)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(9)),a=this.helper.decodeInputU32(this.helper.getInputsIndex(4)),s=this.helper.decodeInputBool(this.helper.getInputsIndex(5)),c=this.helper.decodeInputU32(this.helper.getInputsIndex(6)),m=this.helper.decodeInputBool(this.helper.getInputsIndex(7)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(13));return{txType:Ut.Other,type:"AddLiquidity",intentionData:{pool:e,slippage:30,address:t,amountA:n,amountB:o,tickLower:s?-a:a,tickUpper:m?-c:c,deadline:b}}}decodeIncreaseLiquidity(e){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(4)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),a=this.helper.decodeInputU64(this.helper.getInputsIndex(6)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(9));return{txType:Ut.Other,type:"IncreaseLiquidity",intentionData:{pool:t,slippage:30,address:e,amountA:o,amountB:a,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)),a=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),c=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:Ut.Other,type:"DecreaseLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:a,amountB:s,slippage:10,address:e,deadline:c}}}decodeDecreaseLiquidityWithReturn(e){console.log(this.helper,"decodeDecreaseLiquidityWithReturn this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeOwnedObjectId(2),o=this.helper.decodeInputU64(3),a=this.helper.decodeInputU64(4),s=this.helper.decodeInputU64(5),c=this.helper.decodeInputU64(6);return{txType:Ut.Other,type:"DecreaseLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:a,amountB:s,slippage:10,address:e,deadline:c}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(5)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),a=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:Ut.Other,type:"CollectFee",intentionData:{pool:e,address:n,collectAmountA:o,collectAmountB:a,nft:t,deadline:s}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(6)),o=[0,0,0];this.collectRewardHelper.forEach(s=>{let c=s.decodeInputU64(s.getInputsIndex(4)),m=s.decodeInputU64(s.getInputsIndex(5));o[c]=m});let a=this.helper.decodeInputU64(7);return{txType:Ut.Other,type:"CollectReward",intentionData:{pool:e,address:n,rewardAmounts:o,nft:t,deadline:a}}}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:Ut.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)),a=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(3)),s=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(4)),c=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(5)),m=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(6)),b=[0,0,0];this.collectRewardHelper.forEach(C=>{let x=C.decodeInputU64(C.getInputsIndex(4)),D=C.decodeInputU64(C.getInputsIndex(5));b[x]=D});let S=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,w=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(4))||0;return{txType:Ut.Other,type:"RemoveLiquidity",intentionData:{pool:n,decreaseLiquidity:a,nft:o,amountA:(s/(100-t)*100).toFixed(0),amountB:(c/(100-t)*100).toFixed(0),slippage:t,address:e,collectAmountA:S,collectAmountB:w,rewardAmounts:b,deadline:m}}}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),a=this.decreaseLiquidityHelper.decodeInputU64(4),s=this.decreaseLiquidityHelper.decodeInputU64(5),c=this.decreaseLiquidityHelper.decodeInputU64(6),m=this.collectRewardHelper.map(w=>w.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,S=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:Ut.Other,type:"removeLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:a,amountB:s,slippage:10,address:e,collectAmountA:b,collectAmountB:S,rewardAmounts:m,deadline:c}}}decodePrixClaim(){return{txType:Ut.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:Ut.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:Ut.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:Ut.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 ye(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 ye(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 ye(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 ye(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Qt.PackageId}::clob_v2::swap_exact_base_for_quote`:!1);return new ye(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Qt.PackageId}::clob_v2::swap_exact_quote_for_base`:!1);return new ye(e,this.txb)}},ye=class{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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(Ve.u128().parse(Uint8Array.from($e(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(Ve.u64().parse(Uint8Array.from($e(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(Ve.u32().parse(Uint8Array.from($e(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(Ve.u8().parse(Uint8Array.from($e(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return Ve.Address.parse(Uint8Array.from($e(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return Ve.bool().parse(Uint8Array.from($e(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as bf}from"turbos-clmm-sdk";var Ia=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new bf(t.network.replace("sui:",""),t.suiGrpcClient),{pool:o,address:a,amountA:s,amountB:c,slippage:m,tickLower:b,tickUpper:S,deadline:w,txb:C}=this.data;return n.pool.addLiquidity({pool:o,slippage:m,address:a,amountA:s,amountB:c,tickLower:b,tickUpper:S,deadline:w,txb:C})}static fromData(t){return new r(t)}};import{TurbosSdk as Tf}from"turbos-clmm-sdk";var Ca=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Tf(t.network.replace("sui:",""),t.suiGrpcClient),{pool:o,nft:a,txb:s}=this.data;return n.position.burn({pool:o,nft:a,txb:s})}static fromData(t){return new r(t)}};import{TurbosSdk as Sf}from"turbos-clmm-sdk";var xa=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Sf(t.network.replace("sui:",""),t.suiGrpcClient),{pool:o,address:a,nft:s,collectAmountA:c,collectAmountB:m,deadline:b,txb:S}=this.data;return n.pool.collectFee({pool:o,address:a,collectAmountA:c,collectAmountB:m,nft:s,deadline:b,txb:S})}static fromData(t){return new r(t)}};import{TurbosSdk as wf}from"turbos-clmm-sdk";var ka=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new wf(t.network.replace("sui:",""),t.suiGrpcClient),{pool:o,address:a,nft:s,rewardAmounts:c,deadline:m,txb:b}=this.data;return n.pool.collectReward({pool:o,address:a,rewardAmounts:c,nft:s,deadline:m,txb:b})}static fromData(t){return new r(t)}};import{TurbosSdk as If}from"turbos-clmm-sdk";var Da=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new If(t.network.replace("sui:",""),t.suiGrpcClient),{fee:o,address:a,tickLower:s,tickUpper:c,sqrtPrice:m,slippage:b,coinTypeA:S,coinTypeB:w,amountA:C,amountB:x,deadline:D,txb:O}=this.data;return n.pool.createPool({fee:o,amountA:C,amountB:x,address:a,tickLower:s,tickUpper:c,sqrtPrice:m,slippage:b,coinTypeA:S,coinTypeB:w,deadline:D,txb:O})}static fromData(t){return new r(t)}};import{TurbosSdk as Cf}from"turbos-clmm-sdk";var va=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Cf(t.network.replace("sui:",""),t.suiGrpcClient),{pool:o,address:a,amountA:s,amountB:c,slippage:m,nft:b,decreaseLiquidity:S,deadline:w,txb:C}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:m,address:a,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:w,txb:C})}static fromData(t){return new r(t)}};import{TurbosSdk as xf}from"turbos-clmm-sdk";var Aa=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new xf(t.network.replace("sui:",""),t.suiGrpcClient),{pool:o,address:a,amountA:s,amountB:c,slippage:m,nft:b,decreaseLiquidity:S,deadline:w}=this.data,{txb:C,coinA:x,coinB:D}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:m,address:a,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:w});return C.transferObjects([x,D],this.data.address),C}static fromData(t){return new r(t)}};import{TurbosSdk as kf}from"turbos-clmm-sdk";var Ma=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new kf(t.network.replace("sui:",""),t.suiGrpcClient),{pool:o,address:a,amountA:s,amountB:c,slippage:m,nft:b,deadline:S,txb:w}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:m,address:a,amountA:s,amountB:c,nft:b,deadline:S,txb:w})}static fromData(t){return new r(t)}};import{Transaction as Df}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as vf}from"@mysten/sui/utils";var Oa=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Df;return n.moveCall({target:`${zt.PackageId}::claim::claim`,typeArguments:[zt.turbosCoinType],arguments:[n.object(zt.Claim),n.object(vf)]}),n}static fromData(t){return new r(t)}};import{Transaction as Af}from"@mysten/sui/transactions";var Pa=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Af;return n.moveCall({target:`${zt.PackageId}::claim::join`,typeArguments:[zt.turbosCoinType],arguments:[n.object(zt.Claim)]}),n}static fromData(t){return new r(t)}};import{Transaction as Mf}from"@mysten/sui/transactions";import{TurbosSdk as Of}from"turbos-clmm-sdk";var Ra=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Of(t.network.replace("sui:",""),t.suiGrpcClient),o=new Mf;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 r(t)}};import{TurbosSdk as Pf}from"turbos-clmm-sdk";var Ba=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Pf(t.network.replace("sui:",""),t.suiGrpcClient),{txb:o,coinA:a,coinB:s}=await n.pool.removeLiquidityWithReturn({...this.data});return o.transferObjects([a,s],this.data.address),o}static fromData(t){return new r(t)}};import{TurbosSdk as Rf}from"turbos-clmm-sdk";var Na=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new Rf(t.network.replace("sui:",""),t.suiGrpcClient),{routes:o,coinTypeA:a,coinTypeB:s,address:c,amountA:m,amountB:b,slippage:S,amountSpecifiedIsInput:w,deadline:C,txb:x}=this.data;return n.trade.swap({routes:o,coinTypeA:a,coinTypeB:s,address:c,amountA:m,amountB:b,amountSpecifiedIsInput:w,slippage:S,deadline:C,txb:x})}static fromData(t){return new r(t)}};import{TurbosSdk as Bf}from"turbos-clmm-sdk";import{Transaction as Ll}from"@mysten/sui/transactions";import{normalizeSuiObjectId as jl}from"@mysten/sui/utils";var bn=class{constructor(e){this.turbosSdk=e}turbosSdk;async getCoinsData(e,t,n){let o=[],a,s=!0;for(;s;){let b=await this.turbosSdk.provider.core.listCoins({owner:e,coinType:t,cursor:a??void 0});o.push(...b.objects.map(S=>({coinObjectId:S.objectId,balance:S.balance,coinType:S.type}))),s=b.hasNextPage,a=b.cursor}let c=[],m=0;return o.sort((b,S)=>Number(S.balance)-Number(b.balance)).some(b=>m>=n?!0:(m+=Number(b.balance),c.push(b),!1)),c}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[a]=n.splitCoins(o,[n.pure.u64(t)]);return[a,o]}isSuiCoinAddress(e){return e.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(e){return(await this.turbosSdk.provider.core.listOwnedObjects({owner:e,type:`${Qt.PackageId}::custodian_v2::AccountCap`})).objects[0]?.objectId}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${Qt.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var Ul=89,Gl=1e6,ql=async r=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:a,turbosSdk:s}=r,c=new Ll,m=new bn(s),b=await m.getCoinsData(a,t,o),[S,w]=m.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${t}`);let C=await m.IsAccountCap(a),x=C?c.object(C):m.createAccount(c),[D,O,G]=c.moveCall({typeArguments:[e,t],target:`${Qt.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[c.object(String(n)),c.pure.u64(Ul),x,c.pure.u64(o),c.object(jl("0x6")),S]});return w&&c.transferObjects([w],c.pure.address(a)),c.transferObjects([D],c.pure.address(a)),c.transferObjects([O],c.pure.address(a)),C||c.transferObjects([x],c.pure.address(a)),c.setSenderIfNotSet(a),c.setGasBudget(Gl),c},Fl=async r=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:a,turbosSdk:s}=r,c=new Ll,m=new bn(s),b=await m.getCoinsData(a,e,o),[S,w]=m.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${e}`);let C=await m.IsAccountCap(a),x=C?c.object(C):m.createAccount(c),D=m.zero(t,c),[O,G,U]=c.moveCall({typeArguments:[e,t],target:`${Qt.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[c.object(String(n)),c.pure.u64(Ul),x,c.pure.u64(o),S,D,c.object(jl("0x6"))]});return w&&c.transferObjects([w],c.pure.address(a)),c.transferObjects([O],c.pure.address(a)),c.transferObjects([G],c.pure.address(a)),C||c.transferObjects([x],c.pure.address(a)),c.setSenderIfNotSet(a),c.setGasBudget(Gl),c};var Ea=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Bf(t.network.replace("sui:",""),t.suiGrpcClient);return await Fl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new r(t)}};import{TurbosSdk as Nf}from"turbos-clmm-sdk";var Wa=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Nf(t.network.replace("sui:",""),t.suiGrpcClient);return await ql({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new r(t)}};var _a=class{application="turbos";supportSDK="@mysten/sui-v2";async deserialize(e){console.log(e,"input");let t=new Wf(e.network.replace("sui:",""),e.suiGrpcClient),n=await t.contract.getConfig(),{transaction:o,account:a}=e,c=await new wa(o,t,n).decode(a.address);return{txType:Ef.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{suiGrpcClient:t,account:n,network:o}=e;console.log(e.intentionData,"intentionData");let a;switch(e.txSubType){case"CreatePool":a=Da.fromData(e.intentionData);break;case"AddLiquidity":a=Ia.fromData(e.intentionData);break;case"IncreaseLiquidity":a=Ma.fromData(e.intentionData);break;case"DecreaseLiquidity":a=va.fromData(e.intentionData);break;case"DecreaseLiquidityWithReturn":a=Aa.fromData(e.intentionData);break;case"RemoveLiquidity":a=Ra.fromData(e.intentionData);break;case"removeLiquidityWithReturn":a=Ba.fromData(e.intentionData);break;case"CollectFee":a=xa.fromData(e.intentionData);break;case"CollectReward":a=ka.fromData(e.intentionData);break;case"Burn":a=Ca.fromData(e.intentionData);break;case"Swap":a=Na.fromData(e.intentionData);break;case"PrixJoin":a=Pa.fromData(e.intentionData);break;case"PrixClaim":a=Oa.fromData(e.intentionData);break;case"SwapExactBaseForQuote":a=Ea.fromData(e.intentionData);break;case"SwapExactQuoteForBase":a=Wa.fromData(e.intentionData);break;default:throw new Error("not implemented")}return a.build({suiGrpcClient:t,account:n,network:o})}};import{TransactionType as Vf}from"@msafe/sui3-utils";import{TransactionType as ys}from"@msafe/sui3-utils";import{bcs as jf,fromBase64 as Uf}from"@mysten/bcs";import{normalizeStructTag as RN,normalizeSuiAddress as Gf}from"@mysten/sui/utils";var _f={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},Pt=_f;function qf(r){if(r.$kind!=="MoveCall")return null;let{package:e,module:t,function:n}=r.MoveCall;return`${e}::${t}::${n}`}var La=class{constructor(e){this.txb=e}txb;decode(){if(this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get commands(){return this.txb.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>qf(t)===e)}isStakeTransaction(){return!!this.getMoveCallCommand(`${Pt.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallCommand(`${Pt.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallCommand(`${Pt.packageId}::native_pool::burn_ticket`)}decodeSplitAmount(){let e=this.commands.find(o=>o.$kind==="SplitCoins");if(!e||e.$kind!=="SplitCoins")throw new Error("SplitCoins command not found");let t=e.SplitCoins.amounts[0];if(t.$kind!=="Input")throw new Error("SplitCoins amount is not an Input");let n=this.txb.getData().inputs[t.Input];return Number(jf.u64().parse(Uint8Array.from(Uf(n.Pure.bytes))))}decodeStake(){return{txType:ys.Other,type:"Stake",intentionData:{amount:this.decodeSplitAmount()}}}decodeUnStake(){return{txType:ys.Other,type:"UnStake",intentionData:{amount:this.decodeSplitAmount()}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return{txType:ys.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.package===Pt.packageId);if(!e)throw new Error("MoveCall not found");return new bs(e,this.txb)}},bs=class r{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;get moveCallData(){if(this.moveCall.$kind!=="MoveCall")throw new Error("not move call command");return this.moveCall.MoveCall}get inputs(){return this.txb.getData().inputs}getInputIndex(e){let t=this.moveCallData.arguments[e];if(t.$kind!=="Input")throw new Error("not input type");return t.Input}getInputParam(e){return this.inputs[this.getInputIndex(e)]}decodeOwnedObjectId(e){let t=this.getInputParam(e);return r.getOwnedObjectId(t)}static getOwnedObjectId(e){let t=e.Object?.ImmOrOwnedObject?.objectId??e.Object?.Receiving?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not object argument: ${JSON.stringify(e)}`);return Gf(t)}};import{Transaction as Ff}from"@mysten/sui/transactions";var ja=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Ff,{ticketId:o}=this.data;return n.moveCall({target:`${Pt.packageId}::native_pool::burn_ticket`,arguments:[n.object(Pt.poolObjectId),n.object(Pt.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new r(t)}};import{Transaction as Kf}from"@mysten/sui/transactions";var Ua=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Kf,{amount:o}=this.data,[a]=n.splitCoins(n.gas,[o]);return n.moveCall({target:`${Pt.packageId}::native_pool::stake`,arguments:[n.object(Pt.poolObjectId),n.object(Pt.metadataObjectId),n.object(Pt.systemStateObjectId),a]}),n}static fromData(t){return new r(t)}};import{Transaction as $f}from"@mysten/sui/transactions";var Ga=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new $f,{amount:o}=this.data,a=await t.suiGrpcClient.listCoins({owner:t.account.address,coinType:Pt.certType,limit:100});if(a.objects.length===0)throw new Error("No cert coins found");let[s,...c]=a.objects,m=n.object(s.objectId);c.length&&n.mergeCoins(m,c.map(S=>n.object(S.objectId)));let[b]=n.splitCoins(n.object(s.objectId),[o]);return n.moveCall({target:`${Pt.packageId}::native_pool::unstake`,arguments:[n.object(Pt.poolObjectId),n.object(Pt.metadataObjectId),n.object(Pt.systemStateObjectId),b]}),n}static fromData(t){return new r(t)}};var qa=class{application="volo";supportSDK="@mysten/sui-v2";async deserialize(e){let n=new La(e.transaction).decode();return{txType:Vf.Other,txSubType:n.type,intentionData:n.intentionData}}async build(e){let{suiGrpcClient:t,account:n,network:o}=e,a;switch(e.txSubType){case"Stake":a=Ua.fromData(e.intentionData);break;case"UnStake":a=Ga.fromData(e.intentionData);break;case"ClaimTicket":a=ja.fromData(e.intentionData);break;default:throw new Error("not implemented")}return a.build({suiGrpcClient:t,account:n,network:o})}};import{TransactionType as sh}from"@msafe/sui3-utils";import{asIntN as Kl}from"@cetusprotocol/common-sdk";import{TransactionType as be}from"@msafe/sui3-utils";import{fromBase64 as Tn}from"@mysten/bcs";import{bcs as Sn}from"@mysten/sui/bcs";var Fa=class{constructor(e,t){this.transaction=e;this.appContext=t}transaction;appContext;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:be.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(Kl(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(Kl(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:be.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:be.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:be.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:be.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:be.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:be.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:be.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(Sn.u32().parse(Uint8Array.from(Tn(this.inputs[e].Pure.bytes))))}getU64(e){return Sn.u64().parse(Uint8Array.from(Tn(this.inputs[e].Pure.bytes)))}getU128(e){return Sn.u128().parse(Uint8Array.from(Tn(this.inputs[e].Pure.bytes)))}getBoolean(e){return Sn.bool().parse(Uint8Array.from(Tn(this.inputs[e].Pure.bytes)))}getAddress(e){return Sn.Address.parse(Uint8Array.from(Tn(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as Zf}from"@msafe/sui3-utils";import{buildTx as zf,getQuote as Qf}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as ke,ClmmPoolUtil as Yf}from"@firefly-exchange/library-sui";import{Decimal as Jf}from"turbos-clmm-sdk";import{SuiClient as Hf}from"@firefly-exchange/library-sui";import{OnChainCalls as Xf}from"@firefly-exchange/library-sui/spot";var $l={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x67b34b728c4e28e704dcfecf7c5cf55c7fc593b6c65c20d1836d97c209c1928a"}},ce=(r,e)=>{if(r!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new Hf({url:$l.rpc});return new Xf(t,$l.objects,{address:e.address,isUIWallet:!1})};var Nt=class{static async OpenPosition(e,t,n){let o=ce(n,t),a=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(a,{...e,slippage:0});return await o.openPositionWithFixedAmount(a,e.lowerTick,e.upperTick,s,{returnTx:!0,sender:t.address})}static async provideLiquidity(e,t,n){let o=ce(n,t),a=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(a,e);return await o.provideLiquidityWithFixedAmount(a,e.position,s,{returnTx:!0,sender:t.address})}static async removeLiquidity(e,t,n){let o=ce(n,t),a=await o.queryChain.getPool(e.pool);return await o.removeLiquidity(a,e.position,{liquidityAmount:new ke(e.liquidity),tokenMaxA:new ke(e.maxAmountTokenA),tokenMaxB:new ke(e.maxAmountTokenB)},{returnTx:!0,sender:t.address})}static async closePosition(e,t,n){let o=ce(n,t),a=await o.queryChain.getPool(e.pool);return await o.closePosition(a,e.position,{returnTx:!0,sender:t.address})}static async collectRewards(e,t,n){let o=ce(n,t),a=await o.queryChain.getPool(e.pool);return await o.collectRewards(a,e.position,{rewardCoinsType:e.collectRewardTokens,returnTx:!0,sender:t.address})}static async collectFee(e,t,n){let o=ce(n,t),a=await o.queryChain.getPool(e.pool);return await o.collectFee(a,e.position,{returnTx:!0,sender:t.address})}static async collectRewardsAndFee(e,t,n){let o=ce(n,t),a=await o.queryChain.getPool(e.pool);return console.log(e.position),await o.collectFeeAndRewards(a,e.position,{returnTx:!0,sender:t.address})}static async aggregator7KSwap(e,t,n){let o=ce(n,t),a=await Qf({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new Jf(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await zf({quoteResponse:a,accountAddress:t.address,slippage:e.maxSlippage,commission:{partner:"0x956d6ea2da156a037952964badc51f997cc5581c86a0e05f74049e6effab9347",commissionBps:0}});return s.tx.setSender(t.address),s.tx}buildLiqInput(e,t){return{...Yf.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new ke(t.tokenAmount),t.isTokenAFixed,!0,0,new ke(e.current_sqrt_price)),tokenMaxA:new ke(t.maxAmountTokenA),tokenMaxB:new ke(t.maxAmountTokenB)}}};var Ka=class r extends v{constructor(t){super(t);this.data=t}data;txType=Zf.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),Nt.aggregator7KSwap(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as th}from"@msafe/sui3-utils";var $a=class r extends v{constructor(t){super(t);this.data=t}data;txType=th.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Nt.closePosition(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as eh}from"@msafe/sui3-utils";var Va=class r extends v{constructor(t){super(t);this.data=t}data;txType=eh.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Nt.collectFee(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as nh}from"@msafe/sui3-utils";var Ha=class r extends v{constructor(t){super(t);this.data=t}data;txType=nh.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),Nt.collectRewards(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as oh}from"@msafe/sui3-utils";var Xa=class r extends v{constructor(t){super(t);this.data=t}data;txType=oh.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Nt.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as rh}from"@msafe/sui3-utils";var za=class r extends v{constructor(t){super(t);this.data=t}data;txType=rh.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Nt.OpenPosition(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as ah}from"@msafe/sui3-utils";var Qa=class r extends v{constructor(t){super(t);this.data=t}data;txType=ah.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Nt.provideLiquidity(this.data,n,o)}static fromData(t){return new r(t)}};import{TransactionType as ih}from"@msafe/sui3-utils";var Ya=class r extends v{constructor(t){super(t);this.data=t}data;txType=ih.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Nt.removeLiquidity(this.data,n,o)}static fromData(t){return new r(t)}};var Ja=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(e){console.log("Bluefin helper deserialize input: ",e);let{transaction:t,appContext:n}=e,a=await new Fa(t,n).decode();return{txType:sh.Other,txSubType:a.type,intentionData:{appContext:e.appContext,...a.intentionData}}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.txSubType);let a;switch(e.txSubType){case"OpenPosition":a=za.fromData(e.intentionData);break;case"ProvideLiquidity":a=Qa.fromData(e.intentionData);break;case"RemoveLiquidity":a=Ya.fromData(e.intentionData);break;case"ClosePosition":a=$a.fromData(e.intentionData);break;case"CollectFee":a=Va.fromData(e.intentionData);break;case"CollectRewards":a=Ha.fromData(e.intentionData);break;case"CollectRewardsAndFee":a=Xa.fromData(e.intentionData);break;case"Aggregator7KSwap":a=Ka.fromData(e.intentionData);break;default:throw new Error("not implemented")}return a.build({suiClient:t,account:n,network:o})}};import{TransactionType as Wh}from"@msafe/sui3-utils";import{Transaction as bh}from"@mysten/sui/transactions";var B=vp(Hl());import{TickMath as wn}from"@mmt-finance/clmm-sui-sdk";import mh from"bignumber.js";var ch="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Q=r=>r!=="0x2::sui::SUI"?r:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",lh=async({suiClient:r,address:e,type:t})=>{let n,o=[],a=0;do{try{let s=await r.listCoins({owner:e,coinType:t,cursor:n??void 0,limit:50});o=o.concat(s.objects.map(c=>({coinType:c.type,coinObjectId:c.objectId,version:c.version,digest:c.digest,balance:c.balance,previousTransaction:"0x0"}))),n=s.cursor,(!s.hasNextPage||a===8)&&(n=null)}catch(s){console.log(s),n=null}a++}while(n!==null);return o},ph=(r,e)=>{let t=[],n=BigInt(0);for(let o of e)n<r&&!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>=r)return t;throw new Error("Insufficient balance")},uh=(r,e,t,n)=>{if(r===ch){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=ph(t,e);o.length>1&&n.mergeCoins(n.object(o[0]),o.slice(1).map(s=>n.object(s)));let[a]=n.splitCoins(n.object(o[0]),[n.pure.u64(t)]);return a}};async function Xl(r,e,t,n,o){let a=await lh({suiClient:r.rpcClient,address:e,type:t});return uh(Q(t),a.map(c=>({balance:BigInt(c.balance),objectId:c.coinObjectId})),n,o)}var De=(r,e,t,n,o)=>{let a={poolId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType,tickSpacing:n.tickSpacing,isStable:n.isStable};n?.rewarders&&n?.rewarders.length>0&&r.Pool.collectAllRewards({txb:o,pool:a,rewarders:n.rewarders.map(s=>({coin_type:s.coinType,flow_rate:s.flowRate,reward_amount:s.rewardAmount,rewards_allocated:s.rewardsAllocated,hasEnded:s.hasEnded})),positionId:t.objectId,transferToAddress:e}),r.Pool.collectFee({txb:o,pool:a,positionId:t.objectId,transferToAddress:e})};async function zl({sdk:r,address:e,positionId:t,pool:n,txb:o,targetCoinType:a,slippage:s}){let c={poolId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType,tickSpacing:n.tickSpacing,isStable:n.isStable},m=n.rewarders.map(S=>S.coinType),b=await r.Pool.getAllPools();return m.length>0&&(console.log("claimRewardsAsTargetCoin input",{pool:c,positionId:t,rewarderCoinTypes:m,targetCoinType:a,slippage:s,toAddress:e}),await r.Pool.claimRewardsAs({txb:o,pool:c,positionId:t,rewarderCoinTypes:m,targetCoinType:a,slippage:s,toAddress:e,pools:b})),await r.Pool.claimFeeAs({txb:o,pool:c,positionId:t,targetCoinType:a,slippage:s,toAddress:e,pools:b}),o}function W(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}function dh(r){let e;return(r&1)!==0?e=new B.default("79232123823359799118286999567"):e=new B.default("79228162514264337593543950336"),(r&2)!==0&&(e=W(e.mul(new B.default("79236085330515764027303304731")),96,256)),(r&4)!==0&&(e=W(e.mul(new B.default("79244008939048815603706035061")),96,256)),(r&8)!==0&&(e=W(e.mul(new B.default("79259858533276714757314932305")),96,256)),(r&16)!==0&&(e=W(e.mul(new B.default("79291567232598584799939703904")),96,256)),(r&32)!==0&&(e=W(e.mul(new B.default("79355022692464371645785046466")),96,256)),(r&64)!==0&&(e=W(e.mul(new B.default("79482085999252804386437311141")),96,256)),(r&128)!==0&&(e=W(e.mul(new B.default("79736823300114093921829183326")),96,256)),(r&256)!==0&&(e=W(e.mul(new B.default("80248749790819932309965073892")),96,256)),(r&512)!==0&&(e=W(e.mul(new B.default("81282483887344747381513967011")),96,256)),(r&1024)!==0&&(e=W(e.mul(new B.default("83390072131320151908154831281")),96,256)),(r&2048)!==0&&(e=W(e.mul(new B.default("87770609709833776024991924138")),96,256)),(r&4096)!==0&&(e=W(e.mul(new B.default("97234110755111693312479820773")),96,256)),(r&8192)!==0&&(e=W(e.mul(new B.default("119332217159966728226237229890")),96,256)),(r&16384)!==0&&(e=W(e.mul(new B.default("179736315981702064433883588727")),96,256)),(r&32768)!==0&&(e=W(e.mul(new B.default("407748233172238350107850275304")),96,256)),(r&65536)!==0&&(e=W(e.mul(new B.default("2098478828474011932436660412517")),96,256)),(r&131072)!==0&&(e=W(e.mul(new B.default("55581415166113811149459800483533")),96,256)),(r&262144)!==0&&(e=W(e.mul(new B.default("38992368544603139932233054999993551")),96,256)),W(e,32,256)}function fh(r){let e=Math.abs(r),t;return(e&1)!==0?t=new B.default("18445821805675392311"):t=new B.default("18446744073709551616"),(e&2)!==0&&(t=W(t.mul(new B.default("18444899583751176498")),64,256)),(e&4)!==0&&(t=W(t.mul(new B.default("18443055278223354162")),64,256)),(e&8)!==0&&(t=W(t.mul(new B.default("18439367220385604838")),64,256)),(e&16)!==0&&(t=W(t.mul(new B.default("18431993317065449817")),64,256)),(e&32)!==0&&(t=W(t.mul(new B.default("18417254355718160513")),64,256)),(e&64)!==0&&(t=W(t.mul(new B.default("18387811781193591352")),64,256)),(e&128)!==0&&(t=W(t.mul(new B.default("18329067761203520168")),64,256)),(e&256)!==0&&(t=W(t.mul(new B.default("18212142134806087854")),64,256)),(e&512)!==0&&(t=W(t.mul(new B.default("17980523815641551639")),64,256)),(e&1024)!==0&&(t=W(t.mul(new B.default("17526086738831147013")),64,256)),(e&2048)!==0&&(t=W(t.mul(new B.default("16651378430235024244")),64,256)),(e&4096)!==0&&(t=W(t.mul(new B.default("15030750278693429944")),64,256)),(e&8192)!==0&&(t=W(t.mul(new B.default("12247334978882834399")),64,256)),(e&16384)!==0&&(t=W(t.mul(new B.default("8131365268884726200")),64,256)),(e&32768)!==0&&(t=W(t.mul(new B.default("3584323654723342297")),64,256)),(e&65536)!==0&&(t=W(t.mul(new B.default("696457651847595233")),64,256)),(e&131072)!==0&&(t=W(t.mul(new B.default("26294789957452057")),64,256)),(e&262144)!==0&&(t=W(t.mul(new B.default("37481735321082")),64,256)),t}var Ql=(r,e,t)=>{let n=wn.convertI32ToSigned(t?r+r%(e??1):r-r%(e??1));return n>0?new B.default(dh(n)):new B.default(fh(n))};function Yl(r,e){if(!/^(\d+)(\.\d+)?$/.test(r))return BigInt(0);let[t,n=""]=r.split("."),o=(n+"0".repeat(e)).slice(0,e),s=(t+o).replace(/^0+/,"")||"0";return BigInt(s)}async function ne({address:r,coinType:e,coinAmount:t,coinDecimals:n,tx:o,mmt:a}){let s=Yl(t,n),c;return Number(t)?c=await Xl(a,r,Q(e),s,o):[c]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),c}function Jl({mmt:r,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let a=Ql(wn.convertI32ToSigned(n),t.tickSpacing),s=Ql(wn.convertI32ToSigned(o),t.tickSpacing);return r.Position.openPosition({txb:e,pool:t,lowerTickSqrtPrice:a.toString(),upperTickSqrtPrice:s.toString()})}var hh=(r,e)=>{let n=1e4-Math.floor(e*100);return r*BigInt(n)/BigInt(1e4)};function Za(r,e,t){let n=Yl(r,e);return Number(r)===0?BigInt(0):hh(n,t)}async function ve({poolId:r,currentSqrtPrice:e,tokenX:t,tokenY:n,slippagePercentage:o,isTokenX:a,suiClient:s}){let{object:c}=await s.getObject({objectId:r,include:{json:!0}}),m=c?.json?.sqrt_price??e,b=wn.sqrtPriceX64ToPrice(new B.default(m?.toString()),t.decimals,n.decimals),S=a?(100-o)/100:(100+o)/100,w=wn.priceToSqrtPriceX64(b.mul(S),t.decimals,n.decimals);return BigInt(w.toString())}var Zl=async(r,e,t,n,o,a,s,c,m,b)=>{let S=await ne({mmt:r,address:t,coinType:a.tokenX.coinType,coinAmount:n,coinDecimals:a.tokenX.decimals,tx:e}),w=await ne({mmt:r,address:t,coinType:a.tokenY.coinType,coinAmount:o,coinDecimals:a.tokenY.decimals,tx:e}),C={poolId:s,tokenXType:a.tokenXType,tokenYType:a.tokenYType,tickSpacing:a.tickSpacing,isStable:a.isStable},x=Jl({mmt:r,tx:e,poolModel:C,selectedLowTick:c,selectedHighTick:m}),D=Za(n,a.tokenX.decimals,b),O=Za(o,a.tokenY.decimals,b);await r.Pool.addLiquidity({txb:e,pool:C,position:x,coinX:S,coinY:w,minAmountX:D,minAmountY:O,transferToAddress:t,useMvr:!0}),e.transferObjects([x],e.pure.address(t))},tp=async(r,e,t,n,o,a,s,c,m,b,S)=>{try{let w=await ne({mmt:r,address:n,coinType:a?s.tokenX.coinType:s.tokenY.coinType,coinAmount:o,coinDecimals:a?s.tokenX.decimals:s.tokenY.decimals,tx:e}),C={poolId:s.poolId,tokenXType:Q(s.tokenX.coinType),tokenYType:Q(s.tokenY.coinType),tickSpacing:s.tickSpacing,isStable:s.isStable},x=Jl({mmt:r,tx:e,poolModel:C,selectedLowTick:c,selectedHighTick:m}),D=await ve({suiClient:t,poolId:s.poolId,currentSqrtPrice:s.currentSqrtPrice,tokenX:s.tokenX,tokenY:s.tokenY,slippagePercentage:b,isTokenX:a});await r.Pool.zapInLiquidity({txb:e,pool:C,position:x,inputCoin:w,isXtoY:a,limitSqrtPrice:D,slippagePercentage:S,transferToAddress:n,useMvr:!0}),e.transferObjects([x],e.pure.address(n))}catch(w){console.error(w)}},ep=async(r,e,t,n,o,a,s,c)=>{let m=await ne({mmt:r,address:t,coinType:a.tokenX.coinType,coinAmount:n,coinDecimals:a.tokenX.decimals,tx:e}),b=await ne({mmt:r,address:t,coinType:a.tokenY.coinType,coinAmount:o,coinDecimals:a.tokenY.decimals,tx:e}),S={poolId:a.poolId,tokenXType:a.tokenXType,tokenYType:a.tokenYType,tickSpacing:a.tickSpacing,isStable:a.isStable},w=Za(n,a.tokenX.decimals,c),C=Za(o,a.tokenY.decimals,c);await r.Pool.addLiquidity({txb:e,pool:S,position:s,coinX:m,coinY:b,minAmountX:w,minAmountY:C,transferToAddress:t})},np=async(r,e,t,n,o,a,s,c,m)=>{try{let b=await ne({mmt:r,address:t,coinType:o?a.tokenX.coinType:a.tokenY.coinType,coinAmount:n,coinDecimals:o?a.tokenX.decimals:a.tokenY.decimals,tx:e}),S={poolId:a.poolId,tokenXType:a.tokenX.coinType,tokenYType:a.tokenY.coinType,tickSpacing:a.tickSpacing,isStable:a.isStable},w=await ve({suiClient:r.rpcClient,poolId:a.poolId,currentSqrtPrice:a.currentSqrtPrice,tokenX:a.tokenX,tokenY:a.tokenY,slippagePercentage:c,isTokenX:o});await r.Pool.zapInLiquidity({txb:e,pool:S,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:w,slippagePercentage:m,transferToAddress:t})}catch(b){throw console.error(b),b}},op=(r,e)=>BigInt(e===100?r:new mh(r).multipliedBy(e/100).toFixed(0)),rp=async(r,e,t,n,o,a)=>{let s=op(t.liquidity,o),c=n.tokenX.coinType,m=n.tokenY.coinType,b={poolId:n.poolId,tokenXType:c,tokenYType:m,tickSpacing:n.tickSpacing,isStable:n.isStable};await r.Pool.removeLiquidity({txb:a,pool:b,positionId:t.objectId,liquidity:s,minAmountX:BigInt(0),minAmountY:BigInt(0),transferToAddress:e}),De(r,e,t,n,a),o===100&&r.Position.closePosition({txb:a,positionId:t.objectId})},ap=async({sdk:r,address:e,position:t,pool:n,withdrawPercentage:o,txb:a,targetCoinType:s,slippage:c})=>{let m=op(t.liquidity,o),b=Q(n.tokenX.coinType),S=Q(n.tokenY.coinType),w=Q(s)===S,C={poolId:n.poolId,tokenXType:b,tokenYType:S,tickSpacing:n.tickSpacing,isStable:n.isStable},x=r.Pool.removeLiquidity({txb:a,pool:C,positionId:t.objectId,liquidity:m,minAmountX:BigInt(0),minAmountY:BigInt(0)}),D=x?.removeLpCoinA,O=x?.removeLpCoinB;if(!D||!O)throw new Error("Remove liquidity Failed: empty remove result");let G=await ve({suiClient:r.rpcClient,poolId:n.poolId,currentSqrtPrice:n.currentSqrtPrice,tokenX:n.tokenX,tokenY:n.tokenY,isTokenX:w,slippagePercentage:c}),U=w?D:O,K=a.moveCall({target:"0x2::coin::value",arguments:[U],typeArguments:[w?b:S]});a.transferObjects([w?O:D],e),r.Pool.swap({txb:a,transferToAddress:e,pool:C,limitSqrtPrice:G,amount:K,inputCoin:U,isXtoY:w}),De(r,e,t,n,a),o===100&&r.Position.closePosition({txb:a,positionId:t.objectId})};import{MmtSDK as gh}from"@mmt-finance/clmm-sui-sdk";import{VeMMT as yh}from"@mmt-finance/ve-sdk-v1";function Rt(r){return new gh({network:"mainnet",client:r})}function Ht(r){return new yh(r,"mainnet")}var ti=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:a,amountA:s,amountB:c,pool:m,selectedLowTick:b,selectedHighTick:S,slippage:w}=o,C=new bh;return await Zl(n,C,a,s,c,m,m.poolId,b,S,w),C}static fromData(t){return new r(t)}};import{Transaction as Th}from"@mysten/sui/transactions";var ei=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:a,amount:s,isTokenX:c,pool:m,selectedLowTick:b,selectedHighTick:S,swapSlippage:w,addLiquiditySlippage:C}=o,x=new Th;return await tp(n,x,t.suiGrpcClient,a,s,c,m,b,S,w,C),x}static fromData(t){return new r(t)}};import{Transaction as Sh}from"@mysten/sui/transactions";var He="0x35169bc93e1fddfcf3a82a9eae726d349689ed59e4b065369af8789fe59f8608::mmt::MMT";var In=async r=>{let e=await r.getSyncEpochInfo();if(!e)throw new Error("Failed to sync epoch");return e},ip=async(r,e,t,n,o,a,s,c)=>{let m=Number(n);if(!n||Number.isNaN(m)||m<=0)throw new Error(`Bond Failed: Invalid amount: ${n}. Amount must be greater than 0`);if(!a&&!s)throw new Error("Bond Failed: Failed to calculate unbond date");if(typeof s!="number"&&!a)throw new Error("Bond Failed: Invalid unbond date");let b=await ne({mmt:r,tx:c,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals});if(!b)throw new Error(`Bond Failed: Failed to get coin object for ${t.coinType}, amount: ${n}`);let S=await In(e);await e.syncOrAdvanceEpoch(c,S.currentEpoch,S.syncedEpoch);let w=c.getData().commands.length;a?await e.createMaxBond(c,b,o):await e.createBond(c,b,BigInt(s),o);let x=c.getData().commands.length;if(x===0)throw new Error(`Bond Failed: Transaction has no commands. enableAutoMaxBond: ${a}, unbondAt: ${s}, amount: ${n}`);if(x===w)throw new Error(`Bond Failed: No new commands were added by bond operation. Commands before: ${w}, after: ${x}`)},sp=async(r,e,t,n,o,a,s,c)=>{let m=await In(r);if(await r.syncOrAdvanceEpoch(c,m.currentEpoch,m.syncedEpoch),await r.claimReward(c,t,e),o)a||await r.setNormal(c,t);else if(a)await r.setMaxBond(c,t);else{if(typeof s!="number")throw new Error("Extend Failed: Failed to calculate unbond date");if(s<n)throw new Error("Extend Failed: New duration cannot be less than current duration");await r.extend(c,t,s)}},cp=async(r,e,t,n,o)=>{let a=await In(r);await r.syncOrAdvanceEpoch(o,a.currentEpoch,a.syncedEpoch),await r.claimReward(o,t,e),await n.reduce(async(s,c)=>{await s,await r.claimReward(o,c,e),await r.merge(o,t,c)},Promise.resolve())},lp=async(r,e,t,n)=>{let o=await In(r);await r.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await r.claimReward(n,t,e),await r.unbond(n,t,e)},pp=async(r,e,t,n)=>{if(t.length>0&&t.some(o=>o.userRewardAmount>0)){let o=await In(r);await r.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await t.reduce(async(a,s)=>{await a,s.userRewardAmount>0&&await r.claimReward(n,s.veId,e)},Promise.resolve())}},up=async(r,e,t,n,o,a,s,c,m)=>{let b=Q(a),S=[];for(let K of n)if(K.userRewardAmount>0){let V=await e.buildClaimRewardCoin(o,K.veId);S.push(V)}let w=[];for(let K of S)Array.isArray(K)?w.push(...K):w.push(K);if(w.length===0)return;if(a===Q(He)){o.transferObjects(w,o.pure.address(t));return}let C=c?.[a]?.[He];if(!C||C.length===0)throw new Error(`No swap route found from ${He} to ${a}`);let[x,...D]=w;D.length>0&&o.mergeCoins(x,D);let O=x,G=o.moveCall({target:"0x2::coin::value",arguments:[O],typeArguments:[He]}),U=Q(He);for(let K=0;K<C.length;K++){let V=C[K],E=m.find(X=>X.poolId===V);if(!E)throw new Error(`Pool ${V} not found`);let Et=Q(E.tokenXType||E.tokenX?.coinType||"")===U,oe={poolId:E.poolId,tokenXType:E.tokenXType||E.tokenX?.coinType||"",tokenYType:E.tokenYType||E.tokenY?.coinType||"",tickSpacing:E.tickSpacing,isStable:E.isStable},Cn=await ve({suiClient:r.rpcClient,poolId:E.poolId,currentSqrtPrice:E.currentSqrtPrice,tokenX:E.tokenX,tokenY:E.tokenY,slippagePercentage:s,isTokenX:Et}),{outputCoin:Xe,leftoverCoin:Ae}=r.Pool.swap({txb:o,pool:oe,amount:G,inputCoin:O,isXtoY:Et,limitSqrtPrice:Cn})||{};if(!Xe||!Ae)throw new Error(`Swap Failed: empty swap result for pool ${V}`);if(o.transferObjects([Ae],o.pure.address(t)),O=Xe,U=Et?Q(E.tokenYType||E.tokenY?.coinType||""):Q(E.tokenXType||E.tokenX?.coinType||""),U===a){o.transferObjects([O],o.pure.address(t));return}G=o.moveCall({target:"0x2::coin::value",arguments:[O],typeArguments:[U]})}o.transferObjects([O],o.pure.address(t))};var ni=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),o=Ht(t.suiGrpcClient),{params:a}=this.data,{address:s,positions:c,pools:m,veMMTs:b}=a,S=new Sh;for(let w of c){let C=m.find(x=>x.poolId===w.poolId);C&&De(n,s,w,C,S)}return await pp(o,s,b,S),S}static fromData(t){return new r(t)}};import{Transaction as wh}from"@mysten/sui/transactions";var oi=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),o=Ht(t.suiGrpcClient),{params:a}=this.data,{claimVeMMTParams:s}=a,{address:c,veMMTs:m,targetCoinType:b,slippage:S,claimRoutes:w,pools:C}=s,x=new wh;return await Promise.all(a.claimParams.map(D=>zl({...D,sdk:n,txb:x}))),await up(n,o,c,m,x,b,S,w,C),x}static fromData(t){return new r(t)}};import{Transaction as Ih}from"@mysten/sui/transactions";var ri=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:a,position:s,pool:c}=o,m=new Ih;return De(n,a,s,c,m),m}static fromData(t){return new r(t)}};import{Transaction as Ch}from"@mysten/sui/transactions";var ai=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:a,amountA:s,amountB:c,pool:m,positionObjectId:b,slippage:S}=o,w=new Ch;return await ep(n,w,a,s,c,m,b,S),w}static fromData(t){return new r(t)}};import{Transaction as xh}from"@mysten/sui/transactions";var ii=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{address:a,amount:s,isTokenX:c,pool:m,positionObjectId:b,swapSlippage:S,addLiquiditySlippage:w}=o,C=new xh;return await np(n,C,a,s,c,m,b,S,w),C}static fromData(t){return new r(t)}};import{Transaction as kh}from"@mysten/sui/transactions";var si=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),{params:o}=this.data,{pool:a,position:s,address:c,withdrawPercentage:m,zapOutOn:b,targetCoinType:S,slippage:w}=o,C=new kh;return b?await ap({sdk:n,address:c,position:s,pool:a,withdrawPercentage:m,txb:C,targetCoinType:S,slippage:w}):await rp(n,c,s,a,m,C),C}static fromData(t){return new r(t)}};import{Transaction as mp}from"@mysten/sui/transactions";import{LstClient as dp}from"@suilend/springsui-sdk";var Ss={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},fp=async(r,e,t)=>{let n=await dp.initialize(r,r,Ss),o=new mp,[a]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,a);return o.transferObjects([s],e),o},hp=async(r,e,t)=>{let n=await dp.initialize(r,r,Ss),o=await r.listCoins({owner:e,coinType:Ss.type,limit:1e3});if(o.objects.length===0)throw new Error("No lst coins found");let a=new mp,s=o.objects[0];o.objects.length>1&&a.mergeCoins(s.objectId,o.objects.slice(1).map(b=>b.objectId));let[c]=a.splitCoins(s.objectId,[BigInt(t)]),m=n.redeem(a,c);return a.transferObjects([m],e),a};var ci=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:a}=n;return fp(t.suiGrpcClient,o,a)}static fromData(t){return new r(t)}};import{Transaction as Ph}from"@mysten/sui/transactions";import{Utils as Dh}from"@mmt-finance/clmm-sui-sdk";function gp(r){return Array.isArray(r)&&(r.length===0||typeof r[0]=="string")}function vh(r){return typeof r=="object"&&r!==null&&"coinType"in r&&"decimals"in r}function Ah(r,e){if(!/^\d+$/.test(r))return r;if(e<=0)return r.replace(/^0+/,"")||"0";let t=BigInt(r),n=10n**BigInt(e),o=t/n,a=t%n;if(a===0n)return o.toString();let s=a.toString().padStart(e,"0").replace(/0+$/,"");return`${o}.${s}`}function Mh(r){return{poolSource:"mmt-v3",poolId:r.poolId,tokenXType:r.tokenXType,tokenYType:r.tokenYType,tickSpacing:r.tickSpacing,lpFeesPercent:r.lpFeesPercent,feeRate:Number(r.lpFeesPercent)||0,protocolFeesPercent:r.protocolFeesPercent,isStable:r.isStable,currentSqrtPrice:r.currentSqrtPrice,currentTickIndex:r.currentTickIndex,liquidity:r.liquidity,liquidityHM:r.liquidityHM,tokenXReserve:r.tokenXReserve,tokenYReserve:r.tokenYReserve,tvl:r.tvl,apy:r.apy,volume24h:r.volume24h,fees24h:r.fees24h,timestamp:r.timestamp,rewarders:(r.rewarders||[]).map(e=>({coinType:e.coin_type,flowRate:e.flow_rate,hasEnded:e.hasEnded,rewardAmount:e.reward_amount,rewardsAllocated:e.rewards_allocated})),tokenX:r.tokenX,tokenY:r.tokenY,aprBreakdown:{total:r.aprBreakdown?.total??r.apy??"0",fee:r.aprBreakdown?.fee??"0",rewards:(r.aprBreakdown?.rewards||[]).map(e=>({coinType:e.coinType,apr:e.rewarderApr?.toString?.()??String(e.rewarderApr??"0"),amountPerDay:Number(e.amountPerDay??0)}))}}}function Oh(r,e){let t=Q(e);for(let n of r){if(Q(n.tokenX?.coinType||"")===t)return n.tokenX;if(Q(n.tokenY?.coinType||"")===t)return n.tokenY}}async function yp(r,e){if(e.mode==="aggregator")throw new Error("Swap Failed: aggregator mode is not supported in MSafe rebuild path yet");let t=e.address,n=e.slippage??e.slippagePct;if(typeof n!="number")throw new Error("Swap Failed: missing slippage");if(!gp(e.route)&&vh(e.tokenIn))return{route:e.route,tokenIn:e.tokenIn,amountIn:e.amountIn,address:t,slippage:n};if(!gp(e.route))throw new Error("Swap Failed: route must be NormalizedPool[] or poolId string[]");if(typeof e.tokenIn!="string")throw new Error("Swap Failed: tokenIn must be a coinType string when route is poolId[]");if(e.route.length===0)throw new Error("Swap Failed: empty route");let a=(await Promise.all(e.route.map(m=>r.Pool.getPool(m)))).map(Mh),s=Oh(a,e.tokenIn);if(!s){let m=await r.Pool.getToken(e.tokenIn);s={coinType:m.coinType,tokenName:m.name,ticker:m.ticker,iconUrl:m.iconUrl,decimals:m.decimals,price:m.price,description:m.description,isVerified:m.isVerified}}let c=Ah(e.amountIn,s.decimals);return{route:a,tokenIn:s,amountIn:c,address:t,slippage:n}}var bp=async(r,e,t,n,o,a,s)=>{let c=await ne({mmt:r,tx:a,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals}),m=a.moveCall({target:"0x2::coin::value",typeArguments:[t.coinType],arguments:[c]}),b=t.coinType;for(let S=0;S<e.length;S+=1){let w=e[S],{poolId:C,tokenX:x,tokenY:D,isStable:O,currentSqrtPrice:G}=w;if(!x?.coinType||!D?.coinType)throw new Error(`Swap Failed: route[${S}] is missing tokenX/tokenY after resolve. poolId=${w.poolId}`);let{id:U,isReverse:K}=Dh.mappedMmtV3Pool[C]||{id:C,isReverse:!1},V=Q(x.coinType)===Q(b);V=K?!V:V;let E=K?D:x,le=K?x:D,Et=await ve({poolId:U,tokenX:E,tokenY:le,slippagePercentage:s,isTokenX:V,suiClient:r.rpcClient,currentSqrtPrice:G}),oe=r.Pool.swap({txb:a,pool:{poolId:U,tokenXType:E.coinType,tokenYType:le.coinType,tickSpacing:w.tickSpacing,isStable:O},amount:m,inputCoin:c,isXtoY:V,limitSqrtPrice:Et});if(!oe?.outputCoin)throw new Error("Swap Failed: empty swap result");a.transferObjects([c],a.pure.address(o)),c=oe.outputCoin,b=V?le.coinType:E.coinType,m=a.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[c]})}a.transferObjects([c],a.pure.address(o))};var li=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),o=await yp(n,this.data.params),a=new Ph;return await bp(n,o.route,o.tokenIn,o.amountIn,o.address,a,o.slippage),a}static fromData(t){return new r(t)}};var pi=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:a}=n;return hp(t.suiGrpcClient,o,a)}static fromData(t){return new r(t)}};import{Transaction as Rh}from"@mysten/sui/transactions";var ui=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Rt(t.suiGrpcClient),o=Ht(t.suiGrpcClient),{params:a}=this.data,{token:s,amount:c,address:m,enableAutoMaxBond:b,unbondAt:S}=a,w=new Rh;return await ip(n,o,s,c,m,b,S,w),w}static fromData(t){return new r(t)}};import{Transaction as Bh}from"@mysten/sui/transactions";var mi=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Ht(t.suiGrpcClient),{params:o}=this.data,{address:a,veId:s,currentUnbondAt:c,isCurrentlyMaxBond:m,enableAutoMaxBond:b,unbondAt:S}=o,w=new Bh;return await sp(n,a,s,c,m,b,S,w),w}static fromData(t){return new r(t)}};import{Transaction as Nh}from"@mysten/sui/transactions";var di=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Ht(t.suiGrpcClient),{params:o}=this.data,{address:a,veId:s,selectedVeMMTIds:c}=o,m=new Nh;return await cp(n,a,s,c,m),m}static fromData(t){return new r(t)}};import{Transaction as Eh}from"@mysten/sui/transactions";var fi=class r extends k{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Ht(t.suiGrpcClient),{params:o}=this.data,{address:a,veId:s}=o,c=new Eh;return await lp(n,a,s,c),c}static fromData(t){return new r(t)}};var hi=class{application="mmt-dex";supportSDK="@mysten/sui-v2";async deserialize(e){let{appContext:t}=e;return{txType:Wh.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=li.fromData(e.intentionData);break;case"AddLiquidity":t=ti.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=ei.fromData(e.intentionData);break;case"ClaimRewards":t=ri.fromData(e.intentionData);break;case"ClaimAllRewards":t=ni.fromData(e.intentionData);break;case"ClaimRewardsAs":t=oi.fromData(e.intentionData);break;case"RemoveLiquidity":t=si.fromData(e.intentionData);break;case"StakeXSui":t=ci.fromData(e.intentionData);break;case"UnstakeXSui":t=pi.fromData(e.intentionData);break;case"ManageLiquidity":t=ai.fromData(e.intentionData);break;case"ManageLiquiditySingleSide":t=ii.fromData(e.intentionData);break;case"Bond":t=ui.fromData(e.intentionData);break;case"Extend":t=mi.fromData(e.intentionData);break;case"Merge":t=di.fromData(e.intentionData);break;case"Unbond":t=fi.fromData(e.intentionData);break;default:throw new Error(`not implemented ${e.txSubType}`)}return t.build({suiGrpcClient:e.suiGrpcClient,account:e.account,network:e.network})}};var zW=Sr.fromHelpers([new ar,new yr,new nr,new br,new ko,new _a,new hi,new Zr,new qa,new Yn,new la,new ga,new Rn,new Ja,new Sa]);export{zW as appHelpers};
2
2
  //# sourceMappingURL=index.mjs.map