@msafe/sui-app-store 0.0.241 → 0.0.243

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 ll=Object.create;var ni=Object.defineProperty;var ul=Object.getOwnPropertyDescriptor;var ml=Object.getOwnPropertyNames;var pl=Object.getPrototypeOf,dl=Object.prototype.hasOwnProperty;var fl=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var hl=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),ls=(a,e)=>{for(var t in e)ni(a,t,{get:e[t],enumerable:!0})},gl=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ml(e))!dl.call(a,o)&&o!==t&&ni(a,o,{get:()=>e[o],enumerable:!(n=ul(e,o))||n.enumerable});return a};var yl=(a,e,t)=>(t=a!=null?ll(pl(a)):{},gl(e||!a||!a.__esModule?ni(t,"default",{value:a,enumerable:!0}):t,a));var al=hl((ol,Ki)=>{"use strict";(function(a,e){"use strict";function t(y,i){if(!y)throw new Error(i||"Assertion failed")}function n(y,i){y.super_=i;var l=function(){};l.prototype=i.prototype,y.prototype=new l,y.prototype.constructor=y}function o(y,i,l){if(o.isBN(y))return y;this.negative=0,this.words=null,this.length=0,this.red=null,y!==null&&((i==="le"||i==="be")&&(l=i,i=10),this._init(y||0,i||10,l||"be"))}typeof a=="object"?a.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var r;try{typeof window<"u"&&typeof window.Buffer<"u"?r=window.Buffer:r=fl("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,l){return i.cmp(l)>0?i:l},o.min=function(i,l){return i.cmp(l)<0?i:l},o.prototype._init=function(i,l,m){if(typeof i=="number")return this._initNumber(i,l,m);if(typeof i=="object")return this._initArray(i,l,m);l==="hex"&&(l=16),t(l===(l|0)&&l>=2&&l<=36),i=i.toString().replace(/\s+/g,"");var p=0;i[0]==="-"&&(p++,this.negative=1),p<i.length&&(l===16?this._parseHex(i,p,m):(this._parseBase(i,l,p),m==="le"&&this._initArray(this.toArray(),l,m)))},o.prototype._initNumber=function(i,l,m){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),m==="le"&&this._initArray(this.toArray(),l,m)},o.prototype._initArray=function(i,l,m){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 p=0;p<this.length;p++)this.words[p]=0;var h,b,T=0;if(m==="be")for(p=i.length-1,h=0;p>=0;p-=3)b=i[p]|i[p-1]<<8|i[p-2]<<16,this.words[h]|=b<<T&67108863,this.words[h+1]=b>>>26-T&67108863,T+=24,T>=26&&(T-=26,h++);else if(m==="le")for(p=0,h=0;p<i.length;p+=3)b=i[p]|i[p+1]<<8|i[p+2]<<16,this.words[h]|=b<<T&67108863,this.words[h+1]=b>>>26-T&67108863,T+=24,T>=26&&(T-=26,h++);return this._strip()};function c(y,i){var l=y.charCodeAt(i);if(l>=48&&l<=57)return l-48;if(l>=65&&l<=70)return l-55;if(l>=97&&l<=102)return l-87;t(!1,"Invalid character in "+y)}function u(y,i,l){var m=c(y,l);return l-1>=i&&(m|=c(y,l-1)<<4),m}o.prototype._parseHex=function(i,l,m){this.length=Math.ceil((i.length-l)/6),this.words=new Array(this.length);for(var p=0;p<this.length;p++)this.words[p]=0;var h=0,b=0,T;if(m==="be")for(p=i.length-1;p>=l;p-=2)T=u(i,l,p)<<h,this.words[b]|=T&67108863,h>=18?(h-=18,b+=1,this.words[b]|=T>>>26):h+=8;else{var f=i.length-l;for(p=f%2===0?l+1:l;p<i.length;p+=2)T=u(i,l,p)<<h,this.words[b]|=T&67108863,h>=18?(h-=18,b+=1,this.words[b]|=T>>>26):h+=8}this._strip()};function d(y,i,l,m){for(var p=0,h=0,b=Math.min(y.length,l),T=i;T<b;T++){var f=y.charCodeAt(T)-48;p*=m,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<m,"Invalid character"),p+=h}return p}o.prototype._parseBase=function(i,l,m){this.words=[0],this.length=1;for(var p=0,h=1;h<=67108863;h*=l)p++;p--,h=h/l|0;for(var b=i.length-m,T=b%p,f=Math.min(b,b-T)+m,s=0,g=m;g<f;g+=p)s=d(i,g,g+p,l),this.imuln(h),this.words[0]+s<67108864?this.words[0]+=s:this._iaddn(s);if(T!==0){var D=1;for(s=d(i,g,i.length,l),g=0;g<T;g++)D*=l;this.imuln(D),this.words[0]+s<67108864?this.words[0]+=s:this._iaddn(s)}this._strip()},o.prototype.copy=function(i){i.words=new Array(this.length);for(var l=0;l<this.length;l++)i.words[l]=this.words[l];i.length=this.length,i.negative=this.negative,i.red=this.red};function S(y,i){y.words=i.words,y.length=i.length,y.negative=i.negative,y.red=i.red}if(o.prototype._move=function(i){S(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")]=w}catch{o.prototype.inspect=w}else o.prototype.inspect=w;function w(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var I=["","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(i,l){i=i||10,l=l|0||1;var m;if(i===16||i==="hex"){m="";for(var p=0,h=0,b=0;b<this.length;b++){var T=this.words[b],f=((T<<p|h)&16777215).toString(16);h=T>>>24-p&16777215,p+=2,p>=26&&(p-=26,b--),h!==0||b!==this.length-1?m=I[6-f.length]+f+m:m=f+m}for(h!==0&&(m=h.toString(16)+m);m.length%l!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}if(i===(i|0)&&i>=2&&i<=36){var s=C[i],g=k[i];m="";var D=this.clone();for(D.negative=0;!D.isZero();){var O=D.modrn(g).toString(i);D=D.idivn(g),D.isZero()?m=O+m:m=I[s-O.length]+O+m}for(this.isZero()&&(m="0"+m);m.length%l!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}t(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var 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)},r&&(o.prototype.toBuffer=function(i,l){return this.toArrayLike(r,i,l)}),o.prototype.toArray=function(i,l){return this.toArrayLike(Array,i,l)};var x=function(i,l){return i.allocUnsafe?i.allocUnsafe(l):new i(l)};o.prototype.toArrayLike=function(i,l,m){this._strip();var p=this.byteLength(),h=m||Math.max(1,p);t(p<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var b=x(i,h),T=l==="le"?"LE":"BE";return this["_toArrayLike"+T](b,p),b},o.prototype._toArrayLikeLE=function(i,l){for(var m=0,p=0,h=0,b=0;h<this.length;h++){var T=this.words[h]<<b|p;i[m++]=T&255,m<i.length&&(i[m++]=T>>8&255),m<i.length&&(i[m++]=T>>16&255),b===6?(m<i.length&&(i[m++]=T>>24&255),p=0,b=0):(p=T>>>24,b+=2)}if(m<i.length)for(i[m++]=p;m<i.length;)i[m++]=0},o.prototype._toArrayLikeBE=function(i,l){for(var m=i.length-1,p=0,h=0,b=0;h<this.length;h++){var T=this.words[h]<<b|p;i[m--]=T&255,m>=0&&(i[m--]=T>>8&255),m>=0&&(i[m--]=T>>16&255),b===6?(m>=0&&(i[m--]=T>>24&255),p=0,b=0):(p=T>>>24,b+=2)}if(m>=0)for(i[m--]=p;m>=0;)i[m--]=0},Math.clz32?o.prototype._countBits=function(i){return 32-Math.clz32(i)}:o.prototype._countBits=function(i){var l=i,m=0;return l>=4096&&(m+=13,l>>>=13),l>=64&&(m+=7,l>>>=7),l>=8&&(m+=4,l>>>=4),l>=2&&(m+=2,l>>>=2),m+l},o.prototype._zeroBits=function(i){if(i===0)return 26;var l=i,m=0;return l&8191||(m+=13,l>>>=13),l&127||(m+=7,l>>>=7),l&15||(m+=4,l>>>=4),l&3||(m+=2,l>>>=2),l&1||m++,m},o.prototype.bitLength=function(){var i=this.words[this.length-1],l=this._countBits(i);return(this.length-1)*26+l};function P(y){for(var i=new Array(y.bitLength()),l=0;l<i.length;l++){var m=l/26|0,p=l%26;i[l]=y.words[m]>>>p&1}return i}o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var i=0,l=0;l<this.length;l++){var m=this._zeroBits(this.words[l]);if(i+=m,m!==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 l=0;l<i.length;l++)this.words[l]=this.words[l]|i.words[l];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 l;this.length>i.length?l=i:l=this;for(var m=0;m<l.length;m++)this.words[m]=this.words[m]&i.words[m];return this.length=l.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 l,m;this.length>i.length?(l=this,m=i):(l=i,m=this);for(var p=0;p<m.length;p++)this.words[p]=l.words[p]^m.words[p];if(this!==l)for(;p<l.length;p++)this.words[p]=l.words[p];return this.length=l.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 l=Math.ceil(i/26)|0,m=i%26;this._expand(l),m>0&&l--;for(var p=0;p<l;p++)this.words[p]=~this.words[p]&67108863;return m>0&&(this.words[p]=~this.words[p]&67108863>>26-m),this._strip()},o.prototype.notn=function(i){return this.clone().inotn(i)},o.prototype.setn=function(i,l){t(typeof i=="number"&&i>=0);var m=i/26|0,p=i%26;return this._expand(m+1),l?this.words[m]=this.words[m]|1<<p:this.words[m]=this.words[m]&~(1<<p),this._strip()},o.prototype.iadd=function(i){var l;if(this.negative!==0&&i.negative===0)return this.negative=0,l=this.isub(i),this.negative^=1,this._normSign();if(this.negative===0&&i.negative!==0)return i.negative=0,l=this.isub(i),i.negative=1,l._normSign();var m,p;this.length>i.length?(m=this,p=i):(m=i,p=this);for(var h=0,b=0;b<p.length;b++)l=(m.words[b]|0)+(p.words[b]|0)+h,this.words[b]=l&67108863,h=l>>>26;for(;h!==0&&b<m.length;b++)l=(m.words[b]|0)+h,this.words[b]=l&67108863,h=l>>>26;if(this.length=m.length,h!==0)this.words[this.length]=h,this.length++;else if(m!==this)for(;b<m.length;b++)this.words[b]=m.words[b];return this},o.prototype.add=function(i){var l;return i.negative!==0&&this.negative===0?(i.negative=0,l=this.sub(i),i.negative^=1,l):i.negative===0&&this.negative!==0?(this.negative=0,l=i.sub(this),this.negative=1,l):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 l=this.iadd(i);return i.negative=1,l._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(i),this.negative=1,this._normSign();var m=this.cmp(i);if(m===0)return this.negative=0,this.length=1,this.words[0]=0,this;var p,h;m>0?(p=this,h=i):(p=i,h=this);for(var b=0,T=0;T<h.length;T++)l=(p.words[T]|0)-(h.words[T]|0)+b,b=l>>26,this.words[T]=l&67108863;for(;b!==0&&T<p.length;T++)l=(p.words[T]|0)+b,b=l>>26,this.words[T]=l&67108863;if(b===0&&T<p.length&&p!==this)for(;T<p.length;T++)this.words[T]=p.words[T];return this.length=Math.max(this.length,T),p!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(i){return this.clone().isub(i)};function L(y,i,l){l.negative=i.negative^y.negative;var m=y.length+i.length|0;l.length=m,m=m-1|0;var p=y.words[0]|0,h=i.words[0]|0,b=p*h,T=b&67108863,f=b/67108864|0;l.words[0]=T;for(var s=1;s<m;s++){for(var g=f>>>26,D=f&67108863,O=Math.min(s,i.length-1),M=Math.max(0,s-y.length+1);M<=O;M++){var E=s-M|0;p=y.words[E]|0,h=i.words[M]|0,b=p*h+D,g+=b/67108864|0,D=b&67108863}l.words[s]=D|0,f=g|0}return f!==0?l.words[s]=f|0:l.length--,l._strip()}var V=function(i,l,m){var p=i.words,h=l.words,b=m.words,T=0,f,s,g,D=p[0]|0,O=D&8191,M=D>>>13,E=p[1]|0,_=E&8191,U=E>>>13,te=p[2]|0,q=te&8191,F=te>>>13,Hi=p[3]|0,G=Hi&8191,Q=Hi>>>13,Gi=p[4]|0,z=Gi&8191,J=Gi>>>13,Qi=p[5]|0,X=Qi&8191,Y=Qi>>>13,zi=p[6]|0,Z=zi&8191,tt=zi>>>13,Ji=p[7]|0,et=Ji&8191,nt=Ji>>>13,Xi=p[8]|0,ot=Xi&8191,at=Xi>>>13,Yi=p[9]|0,rt=Yi&8191,it=Yi>>>13,Zi=h[0]|0,st=Zi&8191,ct=Zi>>>13,ts=h[1]|0,lt=ts&8191,ut=ts>>>13,es=h[2]|0,mt=es&8191,pt=es>>>13,ns=h[3]|0,dt=ns&8191,ft=ns>>>13,os=h[4]|0,ht=os&8191,gt=os>>>13,as=h[5]|0,yt=as&8191,bt=as>>>13,rs=h[6]|0,St=rs&8191,Tt=rs>>>13,is=h[7]|0,wt=is&8191,It=is>>>13,ss=h[8]|0,Ct=ss&8191,kt=ss>>>13,cs=h[9]|0,vt=cs&8191,xt=cs>>>13;m.negative=i.negative^l.negative,m.length=19,f=Math.imul(O,st),s=Math.imul(O,ct),s=s+Math.imul(M,st)|0,g=Math.imul(M,ct);var _r=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(_r>>>26)|0,_r&=67108863,f=Math.imul(_,st),s=Math.imul(_,ct),s=s+Math.imul(U,st)|0,g=Math.imul(U,ct),f=f+Math.imul(O,lt)|0,s=s+Math.imul(O,ut)|0,s=s+Math.imul(M,lt)|0,g=g+Math.imul(M,ut)|0;var Lr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Lr>>>26)|0,Lr&=67108863,f=Math.imul(q,st),s=Math.imul(q,ct),s=s+Math.imul(F,st)|0,g=Math.imul(F,ct),f=f+Math.imul(_,lt)|0,s=s+Math.imul(_,ut)|0,s=s+Math.imul(U,lt)|0,g=g+Math.imul(U,ut)|0,f=f+Math.imul(O,mt)|0,s=s+Math.imul(O,pt)|0,s=s+Math.imul(M,mt)|0,g=g+Math.imul(M,pt)|0;var jr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(jr>>>26)|0,jr&=67108863,f=Math.imul(G,st),s=Math.imul(G,ct),s=s+Math.imul(Q,st)|0,g=Math.imul(Q,ct),f=f+Math.imul(q,lt)|0,s=s+Math.imul(q,ut)|0,s=s+Math.imul(F,lt)|0,g=g+Math.imul(F,ut)|0,f=f+Math.imul(_,mt)|0,s=s+Math.imul(_,pt)|0,s=s+Math.imul(U,mt)|0,g=g+Math.imul(U,pt)|0,f=f+Math.imul(O,dt)|0,s=s+Math.imul(O,ft)|0,s=s+Math.imul(M,dt)|0,g=g+Math.imul(M,ft)|0;var Ur=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Ur>>>26)|0,Ur&=67108863,f=Math.imul(z,st),s=Math.imul(z,ct),s=s+Math.imul(J,st)|0,g=Math.imul(J,ct),f=f+Math.imul(G,lt)|0,s=s+Math.imul(G,ut)|0,s=s+Math.imul(Q,lt)|0,g=g+Math.imul(Q,ut)|0,f=f+Math.imul(q,mt)|0,s=s+Math.imul(q,pt)|0,s=s+Math.imul(F,mt)|0,g=g+Math.imul(F,pt)|0,f=f+Math.imul(_,dt)|0,s=s+Math.imul(_,ft)|0,s=s+Math.imul(U,dt)|0,g=g+Math.imul(U,ft)|0,f=f+Math.imul(O,ht)|0,s=s+Math.imul(O,gt)|0,s=s+Math.imul(M,ht)|0,g=g+Math.imul(M,gt)|0;var qr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(qr>>>26)|0,qr&=67108863,f=Math.imul(X,st),s=Math.imul(X,ct),s=s+Math.imul(Y,st)|0,g=Math.imul(Y,ct),f=f+Math.imul(z,lt)|0,s=s+Math.imul(z,ut)|0,s=s+Math.imul(J,lt)|0,g=g+Math.imul(J,ut)|0,f=f+Math.imul(G,mt)|0,s=s+Math.imul(G,pt)|0,s=s+Math.imul(Q,mt)|0,g=g+Math.imul(Q,pt)|0,f=f+Math.imul(q,dt)|0,s=s+Math.imul(q,ft)|0,s=s+Math.imul(F,dt)|0,g=g+Math.imul(F,ft)|0,f=f+Math.imul(_,ht)|0,s=s+Math.imul(_,gt)|0,s=s+Math.imul(U,ht)|0,g=g+Math.imul(U,gt)|0,f=f+Math.imul(O,yt)|0,s=s+Math.imul(O,bt)|0,s=s+Math.imul(M,yt)|0,g=g+Math.imul(M,bt)|0;var Fr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Fr>>>26)|0,Fr&=67108863,f=Math.imul(Z,st),s=Math.imul(Z,ct),s=s+Math.imul(tt,st)|0,g=Math.imul(tt,ct),f=f+Math.imul(X,lt)|0,s=s+Math.imul(X,ut)|0,s=s+Math.imul(Y,lt)|0,g=g+Math.imul(Y,ut)|0,f=f+Math.imul(z,mt)|0,s=s+Math.imul(z,pt)|0,s=s+Math.imul(J,mt)|0,g=g+Math.imul(J,pt)|0,f=f+Math.imul(G,dt)|0,s=s+Math.imul(G,ft)|0,s=s+Math.imul(Q,dt)|0,g=g+Math.imul(Q,ft)|0,f=f+Math.imul(q,ht)|0,s=s+Math.imul(q,gt)|0,s=s+Math.imul(F,ht)|0,g=g+Math.imul(F,gt)|0,f=f+Math.imul(_,yt)|0,s=s+Math.imul(_,bt)|0,s=s+Math.imul(U,yt)|0,g=g+Math.imul(U,bt)|0,f=f+Math.imul(O,St)|0,s=s+Math.imul(O,Tt)|0,s=s+Math.imul(M,St)|0,g=g+Math.imul(M,Tt)|0;var Kr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Kr>>>26)|0,Kr&=67108863,f=Math.imul(et,st),s=Math.imul(et,ct),s=s+Math.imul(nt,st)|0,g=Math.imul(nt,ct),f=f+Math.imul(Z,lt)|0,s=s+Math.imul(Z,ut)|0,s=s+Math.imul(tt,lt)|0,g=g+Math.imul(tt,ut)|0,f=f+Math.imul(X,mt)|0,s=s+Math.imul(X,pt)|0,s=s+Math.imul(Y,mt)|0,g=g+Math.imul(Y,pt)|0,f=f+Math.imul(z,dt)|0,s=s+Math.imul(z,ft)|0,s=s+Math.imul(J,dt)|0,g=g+Math.imul(J,ft)|0,f=f+Math.imul(G,ht)|0,s=s+Math.imul(G,gt)|0,s=s+Math.imul(Q,ht)|0,g=g+Math.imul(Q,gt)|0,f=f+Math.imul(q,yt)|0,s=s+Math.imul(q,bt)|0,s=s+Math.imul(F,yt)|0,g=g+Math.imul(F,bt)|0,f=f+Math.imul(_,St)|0,s=s+Math.imul(_,Tt)|0,s=s+Math.imul(U,St)|0,g=g+Math.imul(U,Tt)|0,f=f+Math.imul(O,wt)|0,s=s+Math.imul(O,It)|0,s=s+Math.imul(M,wt)|0,g=g+Math.imul(M,It)|0;var Vr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,f=Math.imul(ot,st),s=Math.imul(ot,ct),s=s+Math.imul(at,st)|0,g=Math.imul(at,ct),f=f+Math.imul(et,lt)|0,s=s+Math.imul(et,ut)|0,s=s+Math.imul(nt,lt)|0,g=g+Math.imul(nt,ut)|0,f=f+Math.imul(Z,mt)|0,s=s+Math.imul(Z,pt)|0,s=s+Math.imul(tt,mt)|0,g=g+Math.imul(tt,pt)|0,f=f+Math.imul(X,dt)|0,s=s+Math.imul(X,ft)|0,s=s+Math.imul(Y,dt)|0,g=g+Math.imul(Y,ft)|0,f=f+Math.imul(z,ht)|0,s=s+Math.imul(z,gt)|0,s=s+Math.imul(J,ht)|0,g=g+Math.imul(J,gt)|0,f=f+Math.imul(G,yt)|0,s=s+Math.imul(G,bt)|0,s=s+Math.imul(Q,yt)|0,g=g+Math.imul(Q,bt)|0,f=f+Math.imul(q,St)|0,s=s+Math.imul(q,Tt)|0,s=s+Math.imul(F,St)|0,g=g+Math.imul(F,Tt)|0,f=f+Math.imul(_,wt)|0,s=s+Math.imul(_,It)|0,s=s+Math.imul(U,wt)|0,g=g+Math.imul(U,It)|0,f=f+Math.imul(O,Ct)|0,s=s+Math.imul(O,kt)|0,s=s+Math.imul(M,Ct)|0,g=g+Math.imul(M,kt)|0;var $r=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+($r>>>26)|0,$r&=67108863,f=Math.imul(rt,st),s=Math.imul(rt,ct),s=s+Math.imul(it,st)|0,g=Math.imul(it,ct),f=f+Math.imul(ot,lt)|0,s=s+Math.imul(ot,ut)|0,s=s+Math.imul(at,lt)|0,g=g+Math.imul(at,ut)|0,f=f+Math.imul(et,mt)|0,s=s+Math.imul(et,pt)|0,s=s+Math.imul(nt,mt)|0,g=g+Math.imul(nt,pt)|0,f=f+Math.imul(Z,dt)|0,s=s+Math.imul(Z,ft)|0,s=s+Math.imul(tt,dt)|0,g=g+Math.imul(tt,ft)|0,f=f+Math.imul(X,ht)|0,s=s+Math.imul(X,gt)|0,s=s+Math.imul(Y,ht)|0,g=g+Math.imul(Y,gt)|0,f=f+Math.imul(z,yt)|0,s=s+Math.imul(z,bt)|0,s=s+Math.imul(J,yt)|0,g=g+Math.imul(J,bt)|0,f=f+Math.imul(G,St)|0,s=s+Math.imul(G,Tt)|0,s=s+Math.imul(Q,St)|0,g=g+Math.imul(Q,Tt)|0,f=f+Math.imul(q,wt)|0,s=s+Math.imul(q,It)|0,s=s+Math.imul(F,wt)|0,g=g+Math.imul(F,It)|0,f=f+Math.imul(_,Ct)|0,s=s+Math.imul(_,kt)|0,s=s+Math.imul(U,Ct)|0,g=g+Math.imul(U,kt)|0,f=f+Math.imul(O,vt)|0,s=s+Math.imul(O,xt)|0,s=s+Math.imul(M,vt)|0,g=g+Math.imul(M,xt)|0;var Hr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Hr>>>26)|0,Hr&=67108863,f=Math.imul(rt,lt),s=Math.imul(rt,ut),s=s+Math.imul(it,lt)|0,g=Math.imul(it,ut),f=f+Math.imul(ot,mt)|0,s=s+Math.imul(ot,pt)|0,s=s+Math.imul(at,mt)|0,g=g+Math.imul(at,pt)|0,f=f+Math.imul(et,dt)|0,s=s+Math.imul(et,ft)|0,s=s+Math.imul(nt,dt)|0,g=g+Math.imul(nt,ft)|0,f=f+Math.imul(Z,ht)|0,s=s+Math.imul(Z,gt)|0,s=s+Math.imul(tt,ht)|0,g=g+Math.imul(tt,gt)|0,f=f+Math.imul(X,yt)|0,s=s+Math.imul(X,bt)|0,s=s+Math.imul(Y,yt)|0,g=g+Math.imul(Y,bt)|0,f=f+Math.imul(z,St)|0,s=s+Math.imul(z,Tt)|0,s=s+Math.imul(J,St)|0,g=g+Math.imul(J,Tt)|0,f=f+Math.imul(G,wt)|0,s=s+Math.imul(G,It)|0,s=s+Math.imul(Q,wt)|0,g=g+Math.imul(Q,It)|0,f=f+Math.imul(q,Ct)|0,s=s+Math.imul(q,kt)|0,s=s+Math.imul(F,Ct)|0,g=g+Math.imul(F,kt)|0,f=f+Math.imul(_,vt)|0,s=s+Math.imul(_,xt)|0,s=s+Math.imul(U,vt)|0,g=g+Math.imul(U,xt)|0;var Gr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Gr>>>26)|0,Gr&=67108863,f=Math.imul(rt,mt),s=Math.imul(rt,pt),s=s+Math.imul(it,mt)|0,g=Math.imul(it,pt),f=f+Math.imul(ot,dt)|0,s=s+Math.imul(ot,ft)|0,s=s+Math.imul(at,dt)|0,g=g+Math.imul(at,ft)|0,f=f+Math.imul(et,ht)|0,s=s+Math.imul(et,gt)|0,s=s+Math.imul(nt,ht)|0,g=g+Math.imul(nt,gt)|0,f=f+Math.imul(Z,yt)|0,s=s+Math.imul(Z,bt)|0,s=s+Math.imul(tt,yt)|0,g=g+Math.imul(tt,bt)|0,f=f+Math.imul(X,St)|0,s=s+Math.imul(X,Tt)|0,s=s+Math.imul(Y,St)|0,g=g+Math.imul(Y,Tt)|0,f=f+Math.imul(z,wt)|0,s=s+Math.imul(z,It)|0,s=s+Math.imul(J,wt)|0,g=g+Math.imul(J,It)|0,f=f+Math.imul(G,Ct)|0,s=s+Math.imul(G,kt)|0,s=s+Math.imul(Q,Ct)|0,g=g+Math.imul(Q,kt)|0,f=f+Math.imul(q,vt)|0,s=s+Math.imul(q,xt)|0,s=s+Math.imul(F,vt)|0,g=g+Math.imul(F,xt)|0;var Qr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Qr>>>26)|0,Qr&=67108863,f=Math.imul(rt,dt),s=Math.imul(rt,ft),s=s+Math.imul(it,dt)|0,g=Math.imul(it,ft),f=f+Math.imul(ot,ht)|0,s=s+Math.imul(ot,gt)|0,s=s+Math.imul(at,ht)|0,g=g+Math.imul(at,gt)|0,f=f+Math.imul(et,yt)|0,s=s+Math.imul(et,bt)|0,s=s+Math.imul(nt,yt)|0,g=g+Math.imul(nt,bt)|0,f=f+Math.imul(Z,St)|0,s=s+Math.imul(Z,Tt)|0,s=s+Math.imul(tt,St)|0,g=g+Math.imul(tt,Tt)|0,f=f+Math.imul(X,wt)|0,s=s+Math.imul(X,It)|0,s=s+Math.imul(Y,wt)|0,g=g+Math.imul(Y,It)|0,f=f+Math.imul(z,Ct)|0,s=s+Math.imul(z,kt)|0,s=s+Math.imul(J,Ct)|0,g=g+Math.imul(J,kt)|0,f=f+Math.imul(G,vt)|0,s=s+Math.imul(G,xt)|0,s=s+Math.imul(Q,vt)|0,g=g+Math.imul(Q,xt)|0;var zr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(zr>>>26)|0,zr&=67108863,f=Math.imul(rt,ht),s=Math.imul(rt,gt),s=s+Math.imul(it,ht)|0,g=Math.imul(it,gt),f=f+Math.imul(ot,yt)|0,s=s+Math.imul(ot,bt)|0,s=s+Math.imul(at,yt)|0,g=g+Math.imul(at,bt)|0,f=f+Math.imul(et,St)|0,s=s+Math.imul(et,Tt)|0,s=s+Math.imul(nt,St)|0,g=g+Math.imul(nt,Tt)|0,f=f+Math.imul(Z,wt)|0,s=s+Math.imul(Z,It)|0,s=s+Math.imul(tt,wt)|0,g=g+Math.imul(tt,It)|0,f=f+Math.imul(X,Ct)|0,s=s+Math.imul(X,kt)|0,s=s+Math.imul(Y,Ct)|0,g=g+Math.imul(Y,kt)|0,f=f+Math.imul(z,vt)|0,s=s+Math.imul(z,xt)|0,s=s+Math.imul(J,vt)|0,g=g+Math.imul(J,xt)|0;var Jr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Jr>>>26)|0,Jr&=67108863,f=Math.imul(rt,yt),s=Math.imul(rt,bt),s=s+Math.imul(it,yt)|0,g=Math.imul(it,bt),f=f+Math.imul(ot,St)|0,s=s+Math.imul(ot,Tt)|0,s=s+Math.imul(at,St)|0,g=g+Math.imul(at,Tt)|0,f=f+Math.imul(et,wt)|0,s=s+Math.imul(et,It)|0,s=s+Math.imul(nt,wt)|0,g=g+Math.imul(nt,It)|0,f=f+Math.imul(Z,Ct)|0,s=s+Math.imul(Z,kt)|0,s=s+Math.imul(tt,Ct)|0,g=g+Math.imul(tt,kt)|0,f=f+Math.imul(X,vt)|0,s=s+Math.imul(X,xt)|0,s=s+Math.imul(Y,vt)|0,g=g+Math.imul(Y,xt)|0;var Xr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Xr>>>26)|0,Xr&=67108863,f=Math.imul(rt,St),s=Math.imul(rt,Tt),s=s+Math.imul(it,St)|0,g=Math.imul(it,Tt),f=f+Math.imul(ot,wt)|0,s=s+Math.imul(ot,It)|0,s=s+Math.imul(at,wt)|0,g=g+Math.imul(at,It)|0,f=f+Math.imul(et,Ct)|0,s=s+Math.imul(et,kt)|0,s=s+Math.imul(nt,Ct)|0,g=g+Math.imul(nt,kt)|0,f=f+Math.imul(Z,vt)|0,s=s+Math.imul(Z,xt)|0,s=s+Math.imul(tt,vt)|0,g=g+Math.imul(tt,xt)|0;var Yr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Yr>>>26)|0,Yr&=67108863,f=Math.imul(rt,wt),s=Math.imul(rt,It),s=s+Math.imul(it,wt)|0,g=Math.imul(it,It),f=f+Math.imul(ot,Ct)|0,s=s+Math.imul(ot,kt)|0,s=s+Math.imul(at,Ct)|0,g=g+Math.imul(at,kt)|0,f=f+Math.imul(et,vt)|0,s=s+Math.imul(et,xt)|0,s=s+Math.imul(nt,vt)|0,g=g+Math.imul(nt,xt)|0;var Zr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Zr>>>26)|0,Zr&=67108863,f=Math.imul(rt,Ct),s=Math.imul(rt,kt),s=s+Math.imul(it,Ct)|0,g=Math.imul(it,kt),f=f+Math.imul(ot,vt)|0,s=s+Math.imul(ot,xt)|0,s=s+Math.imul(at,vt)|0,g=g+Math.imul(at,xt)|0;var ti=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(ti>>>26)|0,ti&=67108863,f=Math.imul(rt,vt),s=Math.imul(rt,xt),s=s+Math.imul(it,vt)|0,g=Math.imul(it,xt);var ei=(T+f|0)+((s&8191)<<13)|0;return T=(g+(s>>>13)|0)+(ei>>>26)|0,ei&=67108863,b[0]=_r,b[1]=Lr,b[2]=jr,b[3]=Ur,b[4]=qr,b[5]=Fr,b[6]=Kr,b[7]=Vr,b[8]=$r,b[9]=Hr,b[10]=Gr,b[11]=Qr,b[12]=zr,b[13]=Jr,b[14]=Xr,b[15]=Yr,b[16]=Zr,b[17]=ti,b[18]=ei,T!==0&&(b[19]=T,m.length++),m};Math.imul||(V=L);function Wt(y,i,l){l.negative=i.negative^y.negative,l.length=y.length+i.length;for(var m=0,p=0,h=0;h<l.length-1;h++){var b=p;p=0;for(var T=m&67108863,f=Math.min(h,i.length-1),s=Math.max(0,h-y.length+1);s<=f;s++){var g=h-s,D=y.words[g]|0,O=i.words[s]|0,M=D*O,E=M&67108863;b=b+(M/67108864|0)|0,E=E+T|0,T=E&67108863,b=b+(E>>>26)|0,p+=b>>>26,b&=67108863}l.words[h]=T,m=b,b=p}return m!==0?l.words[h]=m:l.length--,l._strip()}function Rt(y,i,l){return Wt(y,i,l)}o.prototype.mulTo=function(i,l){var m,p=this.length+i.length;return this.length===10&&i.length===10?m=V(this,i,l):p<63?m=L(this,i,l):p<1024?m=Wt(this,i,l):m=Rt(this,i,l),m};function Et(y,i){this.x=y,this.y=i}Et.prototype.makeRBT=function(i){for(var l=new Array(i),m=o.prototype._countBits(i)-1,p=0;p<i;p++)l[p]=this.revBin(p,m,i);return l},Et.prototype.revBin=function(i,l,m){if(i===0||i===m-1)return i;for(var p=0,h=0;h<l;h++)p|=(i&1)<<l-h-1,i>>=1;return p},Et.prototype.permute=function(i,l,m,p,h,b){for(var T=0;T<b;T++)p[T]=l[i[T]],h[T]=m[i[T]]},Et.prototype.transform=function(i,l,m,p,h,b){this.permute(b,i,l,m,p,h);for(var T=1;T<h;T<<=1)for(var f=T<<1,s=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),D=0;D<h;D+=f)for(var O=s,M=g,E=0;E<T;E++){var _=m[D+E],U=p[D+E],te=m[D+E+T],q=p[D+E+T],F=O*te-M*q;q=O*q+M*te,te=F,m[D+E]=_+te,p[D+E]=U+q,m[D+E+T]=_-te,p[D+E+T]=U-q,E!==f&&(F=s*O-g*M,M=s*M+g*O,O=F)}},Et.prototype.guessLen13b=function(i,l){var m=Math.max(l,i)|1,p=m&1,h=0;for(m=m/2|0;m;m=m>>>1)h++;return 1<<h+1+p},Et.prototype.conjugate=function(i,l,m){if(!(m<=1))for(var p=0;p<m/2;p++){var h=i[p];i[p]=i[m-p-1],i[m-p-1]=h,h=l[p],l[p]=-l[m-p-1],l[m-p-1]=-h}},Et.prototype.normalize13b=function(i,l){for(var m=0,p=0;p<l/2;p++){var h=Math.round(i[2*p+1]/l)*8192+Math.round(i[2*p]/l)+m;i[p]=h&67108863,h<67108864?m=0:m=h/67108864|0}return i},Et.prototype.convert13b=function(i,l,m,p){for(var h=0,b=0;b<l;b++)h=h+(i[b]|0),m[2*b]=h&8191,h=h>>>13,m[2*b+1]=h&8191,h=h>>>13;for(b=2*l;b<p;++b)m[b]=0;t(h===0),t((h&-8192)===0)},Et.prototype.stub=function(i){for(var l=new Array(i),m=0;m<i;m++)l[m]=0;return l},Et.prototype.mulp=function(i,l,m){var p=2*this.guessLen13b(i.length,l.length),h=this.makeRBT(p),b=this.stub(p),T=new Array(p),f=new Array(p),s=new Array(p),g=new Array(p),D=new Array(p),O=new Array(p),M=m.words;M.length=p,this.convert13b(i.words,i.length,T,p),this.convert13b(l.words,l.length,g,p),this.transform(T,b,f,s,p,h),this.transform(g,b,D,O,p,h);for(var E=0;E<p;E++){var _=f[E]*D[E]-s[E]*O[E];s[E]=f[E]*O[E]+s[E]*D[E],f[E]=_}return this.conjugate(f,s,p),this.transform(f,s,M,b,p,h),this.conjugate(M,b,p),this.normalize13b(M,p),m.negative=i.negative^l.negative,m.length=i.length+l.length,m._strip()},o.prototype.mul=function(i){var l=new o(null);return l.words=new Array(this.length+i.length),this.mulTo(i,l)},o.prototype.mulf=function(i){var l=new o(null);return l.words=new Array(this.length+i.length),Rt(this,i,l)},o.prototype.imul=function(i){return this.clone().mulTo(i,this)},o.prototype.imuln=function(i){var l=i<0;l&&(i=-i),t(typeof i=="number"),t(i<67108864);for(var m=0,p=0;p<this.length;p++){var h=(this.words[p]|0)*i,b=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=b>>>26,this.words[p]=b&67108863}return m!==0&&(this.words[p]=m,this.length++),l?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 l=P(i);if(l.length===0)return new o(1);for(var m=this,p=0;p<l.length&&l[p]===0;p++,m=m.sqr());if(++p<l.length)for(var h=m.sqr();p<l.length;p++,h=h.sqr())l[p]!==0&&(m=m.mul(h));return m},o.prototype.iushln=function(i){t(typeof i=="number"&&i>=0);var l=i%26,m=(i-l)/26,p=67108863>>>26-l<<26-l,h;if(l!==0){var b=0;for(h=0;h<this.length;h++){var T=this.words[h]&p,f=(this.words[h]|0)-T<<l;this.words[h]=f|b,b=T>>>26-l}b&&(this.words[h]=b,this.length++)}if(m!==0){for(h=this.length-1;h>=0;h--)this.words[h+m]=this.words[h];for(h=0;h<m;h++)this.words[h]=0;this.length+=m}return this._strip()},o.prototype.ishln=function(i){return t(this.negative===0),this.iushln(i)},o.prototype.iushrn=function(i,l,m){t(typeof i=="number"&&i>=0);var p;l?p=(l-l%26)/26:p=0;var h=i%26,b=Math.min((i-h)/26,this.length),T=67108863^67108863>>>h<<h,f=m;if(p-=b,p=Math.max(0,p),f){for(var s=0;s<b;s++)f.words[s]=this.words[s];f.length=b}if(b!==0)if(this.length>b)for(this.length-=b,s=0;s<this.length;s++)this.words[s]=this.words[s+b];else this.words[0]=0,this.length=1;var g=0;for(s=this.length-1;s>=0&&(g!==0||s>=p);s--){var D=this.words[s]|0;this.words[s]=g<<26-h|D>>>h,g=D&T}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,l,m){return t(this.negative===0),this.iushrn(i,l,m)},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 l=i%26,m=(i-l)/26,p=1<<l;if(this.length<=m)return!1;var h=this.words[m];return!!(h&p)},o.prototype.imaskn=function(i){t(typeof i=="number"&&i>=0);var l=i%26,m=(i-l)/26;if(t(this.negative===0,"imaskn works only with positive numbers"),this.length<=m)return this;if(l!==0&&m++,this.length=Math.min(m,this.length),l!==0){var p=67108863^67108863>>>l<<l;this.words[this.length-1]&=p}return 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 l=0;l<this.length&&this.words[l]>=67108864;l++)this.words[l]-=67108864,l===this.length-1?this.words[l+1]=1:this.words[l+1]++;return this.length=Math.max(this.length,l+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 l=0;l<this.length&&this.words[l]<0;l++)this.words[l]+=67108864,this.words[l+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,l,m){var p=i.length+m,h;this._expand(p);var b,T=0;for(h=0;h<i.length;h++){b=(this.words[h+m]|0)+T;var f=(i.words[h]|0)*l;b-=f&67108863,T=(b>>26)-(f/67108864|0),this.words[h+m]=b&67108863}for(;h<this.length-m;h++)b=(this.words[h+m]|0)+T,T=b>>26,this.words[h+m]=b&67108863;if(T===0)return this._strip();for(t(T===-1),T=0,h=0;h<this.length;h++)b=-(this.words[h]|0)+T,T=b>>26,this.words[h]=b&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(i,l){var m=this.length-i.length,p=this.clone(),h=i,b=h.words[h.length-1]|0,T=this._countBits(b);m=26-T,m!==0&&(h=h.ushln(m),p.iushln(m),b=h.words[h.length-1]|0);var f=p.length-h.length,s;if(l!=="mod"){s=new o(null),s.length=f+1,s.words=new Array(s.length);for(var g=0;g<s.length;g++)s.words[g]=0}var D=p.clone()._ishlnsubmul(h,1,f);D.negative===0&&(p=D,s&&(s.words[f]=1));for(var O=f-1;O>=0;O--){var M=(p.words[h.length+O]|0)*67108864+(p.words[h.length+O-1]|0);for(M=Math.min(M/b|0,67108863),p._ishlnsubmul(h,M,O);p.negative!==0;)M--,p.negative=0,p._ishlnsubmul(h,1,O),p.isZero()||(p.negative^=1);s&&(s.words[O]=M)}return s&&s._strip(),p._strip(),l!=="div"&&m!==0&&p.iushrn(m),{div:s||null,mod:p}},o.prototype.divmod=function(i,l,m){if(t(!i.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var p,h,b;return this.negative!==0&&i.negative===0?(b=this.neg().divmod(i,l),l!=="mod"&&(p=b.div.neg()),l!=="div"&&(h=b.mod.neg(),m&&h.negative!==0&&h.iadd(i)),{div:p,mod:h}):this.negative===0&&i.negative!==0?(b=this.divmod(i.neg(),l),l!=="mod"&&(p=b.div.neg()),{div:p,mod:b.mod}):this.negative&i.negative?(b=this.neg().divmod(i.neg(),l),l!=="div"&&(h=b.mod.neg(),m&&h.negative!==0&&h.isub(i)),{div:b.div,mod:h}):i.length>this.length||this.cmp(i)<0?{div:new o(0),mod:this}:i.length===1?l==="div"?{div:this.divn(i.words[0]),mod:null}:l==="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,l)},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 l=this.divmod(i);if(l.mod.isZero())return l.div;var m=l.div.negative!==0?l.mod.isub(i):l.mod,p=i.ushrn(1),h=i.andln(1),b=m.cmp(p);return b<0||h===1&&b===0?l.div:l.div.negative!==0?l.div.isubn(1):l.div.iaddn(1)},o.prototype.modrn=function(i){var l=i<0;l&&(i=-i),t(i<=67108863);for(var m=(1<<26)%i,p=0,h=this.length-1;h>=0;h--)p=(m*p+(this.words[h]|0))%i;return l?-p:p},o.prototype.modn=function(i){return this.modrn(i)},o.prototype.idivn=function(i){var l=i<0;l&&(i=-i),t(i<=67108863);for(var m=0,p=this.length-1;p>=0;p--){var h=(this.words[p]|0)+m*67108864;this.words[p]=h/i|0,m=h%i}return this._strip(),l?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 l=this,m=i.clone();l.negative!==0?l=l.umod(i):l=l.clone();for(var p=new o(1),h=new o(0),b=new o(0),T=new o(1),f=0;l.isEven()&&m.isEven();)l.iushrn(1),m.iushrn(1),++f;for(var s=m.clone(),g=l.clone();!l.isZero();){for(var D=0,O=1;!(l.words[0]&O)&&D<26;++D,O<<=1);if(D>0)for(l.iushrn(D);D-- >0;)(p.isOdd()||h.isOdd())&&(p.iadd(s),h.isub(g)),p.iushrn(1),h.iushrn(1);for(var M=0,E=1;!(m.words[0]&E)&&M<26;++M,E<<=1);if(M>0)for(m.iushrn(M);M-- >0;)(b.isOdd()||T.isOdd())&&(b.iadd(s),T.isub(g)),b.iushrn(1),T.iushrn(1);l.cmp(m)>=0?(l.isub(m),p.isub(b),h.isub(T)):(m.isub(l),b.isub(p),T.isub(h))}return{a:b,b:T,gcd:m.iushln(f)}},o.prototype._invmp=function(i){t(i.negative===0),t(!i.isZero());var l=this,m=i.clone();l.negative!==0?l=l.umod(i):l=l.clone();for(var p=new o(1),h=new o(0),b=m.clone();l.cmpn(1)>0&&m.cmpn(1)>0;){for(var T=0,f=1;!(l.words[0]&f)&&T<26;++T,f<<=1);if(T>0)for(l.iushrn(T);T-- >0;)p.isOdd()&&p.iadd(b),p.iushrn(1);for(var s=0,g=1;!(m.words[0]&g)&&s<26;++s,g<<=1);if(s>0)for(m.iushrn(s);s-- >0;)h.isOdd()&&h.iadd(b),h.iushrn(1);l.cmp(m)>=0?(l.isub(m),p.isub(h)):(m.isub(l),h.isub(p))}var D;return l.cmpn(1)===0?D=p:D=h,D.cmpn(0)<0&&D.iadd(i),D},o.prototype.gcd=function(i){if(this.isZero())return i.abs();if(i.isZero())return this.abs();var l=this.clone(),m=i.clone();l.negative=0,m.negative=0;for(var p=0;l.isEven()&&m.isEven();p++)l.iushrn(1),m.iushrn(1);do{for(;l.isEven();)l.iushrn(1);for(;m.isEven();)m.iushrn(1);var h=l.cmp(m);if(h<0){var b=l;l=m,m=b}else if(h===0||m.cmpn(1)===0)break;l.isub(m)}while(!0);return m.iushln(p)},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 l=i%26,m=(i-l)/26,p=1<<l;if(this.length<=m)return this._expand(m+1),this.words[m]|=p,this;for(var h=p,b=m;h!==0&&b<this.length;b++){var T=this.words[b]|0;T+=h,h=T>>>26,T&=67108863,this.words[b]=T}return h!==0&&(this.words[b]=h,this.length++),this},o.prototype.isZero=function(){return this.length===1&&this.words[0]===0},o.prototype.cmpn=function(i){var l=i<0;if(this.negative!==0&&!l)return-1;if(this.negative===0&&l)return 1;this._strip();var m;if(this.length>1)m=1;else{l&&(i=-i),t(i<=67108863,"Number is too big");var p=this.words[0]|0;m=p===i?0:p<i?-1:1}return this.negative!==0?-m|0:m},o.prototype.cmp=function(i){if(this.negative!==0&&i.negative===0)return-1;if(this.negative===0&&i.negative!==0)return 1;var l=this.ucmp(i);return this.negative!==0?-l|0:l},o.prototype.ucmp=function(i){if(this.length>i.length)return 1;if(this.length<i.length)return-1;for(var l=0,m=this.length-1;m>=0;m--){var p=this.words[m]|0,h=i.words[m]|0;if(p!==h){p<h?l=-1:p>h&&(l=1);break}}return l},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 $(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 Nr={k256:null,p224:null,p192:null,p25519:null};function Lt(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()}Lt.prototype._tmp=function(){var i=new o(null);return i.words=new Array(Math.ceil(this.n/13)),i},Lt.prototype.ireduce=function(i){var l=i,m;do this.split(l,this.tmp),l=this.imulK(l),l=l.iadd(this.tmp),m=l.bitLength();while(m>this.n);var p=m<this.n?-1:l.ucmp(this.p);return p===0?(l.words[0]=0,l.length=1):p>0?l.isub(this.p):l.strip!==void 0?l.strip():l._strip(),l},Lt.prototype.split=function(i,l){i.iushrn(this.n,0,l)},Lt.prototype.imulK=function(i){return i.imul(this.k)};function un(){Lt.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(un,Lt),un.prototype.split=function(i,l){for(var m=4194303,p=Math.min(i.length,9),h=0;h<p;h++)l.words[h]=i.words[h];if(l.length=p,i.length<=9){i.words[0]=0,i.length=1;return}var b=i.words[9];for(l.words[l.length++]=b&m,h=10;h<i.length;h++){var T=i.words[h]|0;i.words[h-10]=(T&m)<<4|b>>>22,b=T}b>>>=22,i.words[h-10]=b,b===0&&i.length>10?i.length-=10:i.length-=9},un.prototype.imulK=function(i){i.words[i.length]=0,i.words[i.length+1]=0,i.length+=2;for(var l=0,m=0;m<i.length;m++){var p=i.words[m]|0;l+=p*977,i.words[m]=l&67108863,l=p*64+(l/67108864|0)}return i.words[i.length-1]===0&&(i.length--,i.words[i.length-1]===0&&i.length--),i};function Vi(){Lt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(Vi,Lt);function $i(){Lt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n($i,Lt);function Wr(){Lt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Wr,Lt),Wr.prototype.imulK=function(i){for(var l=0,m=0;m<i.length;m++){var p=(i.words[m]|0)*19+l,h=p&67108863;p>>>=26,i.words[m]=h,l=p}return l!==0&&(i.words[i.length++]=l),i},o._prime=function(i){if(Nr[i])return Nr[i];var l;if(i==="k256")l=new un;else if(i==="p224")l=new Vi;else if(i==="p192")l=new $i;else if(i==="p25519")l=new Wr;else throw new Error("Unknown prime "+i);return Nr[i]=l,l};function $(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}$.prototype._verify1=function(i){t(i.negative===0,"red works only with positives"),t(i.red,"red works only with red numbers")},$.prototype._verify2=function(i,l){t((i.negative|l.negative)===0,"red works only with positives"),t(i.red&&i.red===l.red,"red works only with red numbers")},$.prototype.imod=function(i){return this.prime?this.prime.ireduce(i)._forceRed(this):(S(i,i.umod(this.m)._forceRed(this)),i)},$.prototype.neg=function(i){return i.isZero()?i.clone():this.m.sub(i)._forceRed(this)},$.prototype.add=function(i,l){this._verify2(i,l);var m=i.add(l);return m.cmp(this.m)>=0&&m.isub(this.m),m._forceRed(this)},$.prototype.iadd=function(i,l){this._verify2(i,l);var m=i.iadd(l);return m.cmp(this.m)>=0&&m.isub(this.m),m},$.prototype.sub=function(i,l){this._verify2(i,l);var m=i.sub(l);return m.cmpn(0)<0&&m.iadd(this.m),m._forceRed(this)},$.prototype.isub=function(i,l){this._verify2(i,l);var m=i.isub(l);return m.cmpn(0)<0&&m.iadd(this.m),m},$.prototype.shl=function(i,l){return this._verify1(i),this.imod(i.ushln(l))},$.prototype.imul=function(i,l){return this._verify2(i,l),this.imod(i.imul(l))},$.prototype.mul=function(i,l){return this._verify2(i,l),this.imod(i.mul(l))},$.prototype.isqr=function(i){return this.imul(i,i.clone())},$.prototype.sqr=function(i){return this.mul(i,i)},$.prototype.sqrt=function(i){if(i.isZero())return i.clone();var l=this.m.andln(3);if(t(l%2===1),l===3){var m=this.m.add(new o(1)).iushrn(2);return this.pow(i,m)}for(var p=this.m.subn(1),h=0;!p.isZero()&&p.andln(1)===0;)h++,p.iushrn(1);t(!p.isZero());var b=new o(1).toRed(this),T=b.redNeg(),f=this.m.subn(1).iushrn(1),s=this.m.bitLength();for(s=new o(2*s*s).toRed(this);this.pow(s,f).cmp(T)!==0;)s.redIAdd(T);for(var g=this.pow(s,p),D=this.pow(i,p.addn(1).iushrn(1)),O=this.pow(i,p),M=h;O.cmp(b)!==0;){for(var E=O,_=0;E.cmp(b)!==0;_++)E=E.redSqr();t(_<M);var U=this.pow(g,new o(1).iushln(M-_-1));D=D.redMul(U),g=U.redSqr(),O=O.redMul(g),M=_}return D},$.prototype.invm=function(i){var l=i._invmp(this.m);return l.negative!==0?(l.negative=0,this.imod(l).redNeg()):this.imod(l)},$.prototype.pow=function(i,l){if(l.isZero())return new o(1).toRed(this);if(l.cmpn(1)===0)return i.clone();var m=4,p=new Array(1<<m);p[0]=new o(1).toRed(this),p[1]=i;for(var h=2;h<p.length;h++)p[h]=this.mul(p[h-1],i);var b=p[0],T=0,f=0,s=l.bitLength()%26;for(s===0&&(s=26),h=l.length-1;h>=0;h--){for(var g=l.words[h],D=s-1;D>=0;D--){var O=g>>D&1;if(b!==p[0]&&(b=this.sqr(b)),O===0&&T===0){f=0;continue}T<<=1,T|=O,f++,!(f!==m&&(h!==0||D!==0))&&(b=this.mul(b,p[T]),f=0,T=0)}s=26}return b},$.prototype.convertTo=function(i){var l=i.umod(this.m);return l===i?l.clone():l},$.prototype.convertFrom=function(i){var l=i.clone();return l.red=null,l},o.mont=function(i){return new me(i)};function me(y){$.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(me,$),me.prototype.convertTo=function(i){return this.imod(i.ushln(this.shift))},me.prototype.convertFrom=function(i){var l=this.imod(i.mul(this.rinv));return l.red=null,l},me.prototype.imul=function(i,l){if(i.isZero()||l.isZero())return i.words[0]=0,i.length=1,i;var m=i.imul(l),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),b=h;return h.cmp(this.m)>=0?b=h.isub(this.m):h.cmpn(0)<0&&(b=h.iadd(this.m)),b._forceRed(this)},me.prototype.mul=function(i,l){if(i.isZero()||l.isZero())return new o(0)._forceRed(this);var m=i.mul(l),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),b=h;return h.cmp(this.m)>=0?b=h.isub(this.m):h.cmpn(0)<0&&(b=h.iadd(this.m)),b._forceRed(this)},me.prototype.invm=function(i){var l=this.imod(i._invmp(this.m).mul(this.r2));return l._forceRed(this)}})(typeof Ki>"u"||Ki,ol)});import{TransactionType as Al}from"@msafe/sui3-utils";import{coinsList as Sl,poolIdPoolNameMap as Tl,poolInfo as us,singleAssetPoolCoinMap as wl}from"@alphafi/alphafi-sdk";import{TransactionType as We}from"@msafe/sui3-utils";import{bcs as mn,fromBase64 as pn}from"@mysten/bcs";var dn=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isClaimRewardTransaction())return this.decodeClaimReward();let e=this.getLiquidityChangeEvent();if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson,n=t.pool_id,o=Tl[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&&us[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&us[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=mn.u64().parse(pn(t)):t.length===24?n=mn.u128().parse(pn(t)):t.length===44?n=mn.u256().parse(pn(t)):n=mn.u64().parse(pn(t)),n}decodeDoubleAssetDeposit(e,t){let{amount_a:n,amount_b:o}=t,r=Number(n)>0;return console.log("Decoder.decodeDoubleAssetDeposit",n,o,r),{txType:We.Other,type:"depositDoubleAsset",intentionData:{poolName:e,amount:r?n:o,isAmountA:r}}}decodeSingleAssetDeposit(e,t){let{amount:n}=t;if(console.log("Decoder.decodeSingleAssetDeposit",n),this.getLiquidityChangeEvent().type.includes(":alphafi_navi_pool:")){let{coin:r}=wl[e],{expo:c}=Sl[r];n=Math.floor(Number(n)/10**(9-c)).toString()}return{txType:We.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:We.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:We.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:We.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as Cl}from"@alphafi/alphafi-sdk";import Il from"sort-keys-recursive";var v=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Il(this.data))}};var fn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t;return await Cl(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as kl}from"@alphafi/alphafi-sdk";var hn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:r,isAmountA:c}=this.data;return await kl(o,n.address,r,c)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as vl}from"@alphafi/alphafi-sdk";var gn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:r}=this.data;return await vl(o,n.address,r)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as xl}from"@alphafi/alphafi-sdk";var yn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:r}=this.data;return await xl(r,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as Dl}from"@alphafi/alphafi-sdk";var bn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:r}=this.data;return await Dl(r,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new a(t)}};var Sn=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n,account:o}=e,r=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("AlphaFiHelper Sim result - ",r);let u=new dn(t,r).decode();return{txType:Al.Other,txSubType:u.type,intentionData:u.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=gn.fromData(e.intentionData);break;case"depositDoubleAsset":n=hn.fromData(e.intentionData);break;case"withdraw":n=yn.fromData(e.intentionData);break;case"withdrawAlpha":n=bn.fromData(e.intentionData);break;case"claimReward":n=fn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as Xl}from"@msafe/sui3-utils";import{TransactionType as _t}from"@msafe/sui3-utils";import{bcs as oi}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as ai}from"bucket-protocol-sdk";var Tn=class{constructor(e){this.transaction=e}decode(){if(this.isSBUCKDepositTransaction())return this.decodeSBUCKDeposit();if(this.isSBUCKUnstakeTransaction())return this.decodeSBUCKUnstake();if(this.isSBUCKWithdrawTransaction())return this.decodeSBUCKWithdraw();if(this.isSBUCKClaimTransaction())return this.decodeSBUCKClaim();if(this.isLockedClaimTransaction())return this.decodeLockedClaim();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isCloseTransaction())return this.decodeClose();if(this.isTankDepositTransaction())return this.decodeTankDeposit();if(this.isTankWithdrawTransaction())return this.decodeTankWithdraw();if(this.isTankClaimTransaction())return this.decodeTankClaim();if(this.isPsmTransaction())return this.decodePsm();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getMoveCallModuleCommand(e,t){return this.commands.find(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getMoveCallPackageModuleCommand(e,t,n){return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.package===e&&o.MoveCall.module===t&&o.MoveCall.function===n)}getMoveCallModuleCommands(e,t){return this.commands.filter(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(e=>e.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(e=>e.$kind==="TransferObjects")}isPsmTransaction(){return!!this.getMoveCallCommand("charge_reservoir")||!!this.getMoveCallCommand("discharge_reservoir")}isStrapNewTransaction(){return!!this.getMoveCallModuleCommand("strap","new")}isBorrowTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","high_top_up")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow_with_strap")}isRepayTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","fully_repay")||!!this.getMoveCallModuleCommand("bucket_operations","fully_repay_with_strap")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw_with_strap")}isWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","withdraw")||!!this.getMoveCallModuleCommand("buck","withdraw_with_strap")}isCloseTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","destroy_empty_strap")}isTankDepositTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","deposit")}isTankWithdrawTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","withdraw")}isTankClaimTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","claim")}isSBUCKDepositTransaction(){return!!this.getMoveCallModuleCommand("buck","buck_to_sbuck")}isSBUCKWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","sbuck_to_buck")}isSBUCKStakeTransaction(){return!!this.getMoveCallPackageModuleCommand(ai,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(ai,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(ai,"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:_t.Other,type:"psm",intentionData:{coinType:e,amount:n,buckToCoin:t}}}decodeBorrow(){let e="",t="0",n,o=this.getStrapId(),r="0",c=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(c.$kind==="Input"&&(r=this.getPureInputU64(c.Input)),this.getMoveCallCommand("high_top_up")){let u=this.getMoveCallCommand("high_top_up").MoveCall;[e]=u.typeArguments;let d=u.arguments[1];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let S=u.arguments[3];if(S.$kind==="Input"){let w=this.getPureAddresses(S.Input);w.length===1&&([n]=w)}}else if(this.getMoveCallCommand("high_borrow")){let u=this.getMoveCallCommand("high_borrow").MoveCall;[e]=u.typeArguments;let d=u.arguments[4];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let S=u.arguments[5];if(S.$kind==="Input"){let w=this.getPureAddresses(S.Input);w.length===1&&([n]=w)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let u=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=u.typeArguments;let d=u.arguments[5];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let S=u.arguments[6];if(S.$kind==="Input"){let w=this.getPureAddresses(S.Input);w.length===1&&([n]=w)}}return{txType:_t.Other,type:"borrow",intentionData:{collateralType:e,collateralAmount:r,borrowAmount:t,insertionPlace:n,strapId:o}}}decodeRepay(){let e="",t="0",n="0",r,c=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 u=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=u.typeArguments;let d=u.arguments[4];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let S=u.arguments[5];if(S.$kind==="Input"){let I=this.getPureAddresses(S.Input);I.length===1&&([r]=I)}let w=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];w.$kind==="Input"&&(t=this.getPureInputU64(w.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let u=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=u.typeArguments;let d=u.arguments[5];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let S=u.arguments[6];if(S.$kind==="Input"){let I=this.getPureAddresses(S.Input);I.length===1&&([r]=I)}let w=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];w.$kind==="Input"&&(t=this.getPureInputU64(w.Input))}return{txType:_t.Other,type:"repay",intentionData:{collateralType:e,repayAmount:t,withdrawAmount:n,isSurplus:!1,insertionPlace:r,strapId:c}}}decodeWithdraw(){let e="",t="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let r=this.getMoveCallCommand("withdraw_with_strap").MoveCall;[e]=r.typeArguments;let c=r.arguments[4];c.$kind==="Input"&&(t=this.getPureInputU64(c.Input));let u=r.arguments[5];if(u.$kind==="Input"){let d=this.getPureAddresses(u.Input);d.length===1&&([n]=d)}}else if(this.getMoveCallCommand("withdraw")){let r=this.getMoveCallCommand("withdraw").MoveCall;[e]=r.typeArguments;let c=r.arguments[3];c.$kind==="Input"&&(t=this.getPureInputU64(c.Input));let u=r.arguments[4];if(u.$kind==="Input"){let d=this.getPureAddresses(u.Input);d.length===1&&([n]=d)}}return{txType:_t.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:_t.Other,type:"close",intentionData:{collateralType:e,strapId:t}}}decodeSBUCKDeposit(){let t=this.getMoveCallCommand("into_balance").MoveCall.typeArguments[0],n="0",r=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];r.$kind==="Input"&&(n=this.getPureInputU64(r.Input));let c=this.isSBUCKStakeTransaction();return console.log("Decoder.decodeSBUCKDeposit",t,n,c),{txType:_t.Other,type:"sbuck-deposit",intentionData:{coinType:t,amount:n,isStake:c}}}decodeSBUCKUnstake(){let e="0",t=this.isSBUCKStakeTransaction();if(t){let d=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];d.$kind==="Input"&&(e=this.getPureInputU64(d.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let u=0;u<o.length;u++){let d=o[u];n.push("")}else{let u=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let d=0;d<u.length;d++){let w=u[d].MoveCall.arguments[2];if(w.$kind==="Input"){let{objectId:I}=this.inputs[w.Input].UnresolvedObject;n.push(I)}}}let r=this.isSBUCKWithdrawTransaction(),c={stakeProofs:n,amount:e,isStake:t,toBuck:r};return console.log("Decoder.decodeSBUCKUnstake",c),{txType:_t.Other,type:"sbuck-unstake",intentionData:c}}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:_t.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 r=t[n].MoveCall.arguments[2];if(r.$kind==="Input"){let{objectId:c}=this.inputs[r.Input].UnresolvedObject;e.push(c)}}return console.log("Decoder.decodeSBUCKClaim",e),{txType:_t.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 r=this.getMoveCallModuleCommand("tank_operations","deposit").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankDeposit",r,e),{txType:_t.Other,type:"tank-deposit",intentionData:{coinType:r,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:_t.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:_t.Other,type:"tank-claim",intentionData:{coinType:t}}}decodeLockedClaim(){let e="",t=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let r=0;r<n.length;r++)[e]=n[r].MoveCall.typeArguments,t++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let r=0;r<o.length;r++)[e]=o[r].MoveCall.typeArguments,t++;return console.log("Decoder.decodeLockedClaim",e,t),{txType:_t.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 oi.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return oi.vector(oi.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as Bl}from"@msafe/sui3-utils";import{Transaction as Ml}from"@mysten/sui/transactions";import{buildPsmTx as Pl}from"bucket-protocol-sdk";import{BucketClient as Ol}from"bucket-protocol-sdk";var Ot=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new Ol(t,e.address)};var ms=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:r}=a,c=new Ml,u=Ot(t,e);return await Pl(u,c,n,o,r,e.address),c};var wn=class a extends v{constructor(t){super(t);this.data=t}txType=Bl.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await ms(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as _l}from"@msafe/sui3-utils";import{Transaction as In}from"@mysten/sui/transactions";import{buildBorrowTx as Rl,buildCloseTx as El,buildRepayTx as Nl,buildWithdrawTx as Wl}from"bucket-protocol-sdk";var ps=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:r,insertionPlace:c,strapId:u}=a,d=new In,S=Ot(t,e);return await Rl(S,d,n,o,r,e.address,c,u),d},ds=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:r,strapId:c}=a,u=new In,d=Ot(t,e);return await Wl(d,u,n,o,e.address,r,c),u},fs=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:r,isSurplus:c,insertionPlace:u,strapId:d}=a,S=new In,w=Ot(t,e);return await Nl(w,S,n,o,r,e.address,c,u,d),S},hs=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:r}=a,c=new In,u=Ot(t,e);return await El(u,c,n,o,r),c};var Cn=class a extends v{constructor(t){super(t);this.data=t}txType=_l.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await ps(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ll}from"@msafe/sui3-utils";var kn=class a extends v{constructor(t){super(t);this.data=t}txType=Ll.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await fs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as jl}from"@msafe/sui3-utils";var vn=class a extends v{constructor(t){super(t);this.data=t}txType=jl.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await ds(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ul}from"@msafe/sui3-utils";var xn=class a extends v{constructor(t){super(t);this.data=t}txType=Ul.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await hs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bn}from"@msafe/sui3-utils";import{Transaction as Dn}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as ql,buildSBUCKDepositTx as Fl,buildSBUCKUnstakeTx as Kl,buildSBUCKWithdrawTx as Vl}from"bucket-protocol-sdk";var gs=async(a,e,t)=>{let{coinType:n,amount:o,isStake:r}=a,c=new Dn,u=Ot(t,e);return await Fl(u,c,n,o,e.address,r),c},ys=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:r,toBuck:c}=a,u=new Dn,d=Ot(t,e);return await Kl(d,u,n,o,e.address,r,c),u},bs=async(a,e,t)=>{let{amount:n}=a,o=new Dn,r=Ot(t,e);return await Vl(r,o,n,e.address),o},Ss=async(a,e,t)=>{let{stakeProofs:n}=a,o=new Dn,r=Ot(t,e);return await ql(r,o,n,e.address),o};var An=class a extends v{constructor(t){super(t);this.data=t}txType=Bn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await gs(this.data,n,o)}static fromData(t){return new a(t)}},On=class a extends v{constructor(t){super(t);this.data=t}txType=Bn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await ys(this.data,n,o)}static fromData(t){return new a(t)}},Mn=class a extends v{constructor(t){super(t);this.data=t}txType=Bn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await bs(this.data,n,o)}static fromData(t){return new a(t)}},Pn=class a extends v{constructor(t){super(t);this.data=t}txType=Bn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Ss(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ii}from"@msafe/sui3-utils";import{Transaction as ri}from"@mysten/sui/transactions";import{buildTankClaimTx as $l,buildTankDepositTx as Hl,buildTankWithdrawTx as Gl}from"bucket-protocol-sdk";var Ts=async(a,e,t)=>{let{coinType:n,amount:o}=a,r=new ri,c=Ot(t,e);return await Hl(c,r,n,o,e.address),r},ws=async(a,e,t)=>{let{coinType:n,amount:o}=a,r=new ri,c=Ot(t,e);return await Gl(c,r,n,o,e.address),r},Is=async(a,e,t)=>{let{coinType:n}=a,o=new ri,r=Ot(t,e);return await $l(r,o,n,e.address),o};import{Transaction as Ql}from"@mysten/sui/transactions";import{buildLockedClaimTx as zl}from"bucket-protocol-sdk";var Cs=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,r=new Ql,c=Ot(t,e);return await zl(c,r,n,o,e.address),r};var Rn=class a extends v{constructor(t){super(t);this.data=t}txType=ii.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await Ts(this.data,n,o)}static fromData(t){return new a(t)}},En=class a extends v{constructor(t){super(t);this.data=t}txType=ii.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await ws(this.data,n,o)}static fromData(t){return new a(t)}},Nn=class a extends v{constructor(t){super(t);this.data=t}txType=ii.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await Is(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Jl}from"@msafe/sui3-utils";var Wn=class a extends v{constructor(t){super(t);this.data=t}txType=Jl.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await Cs(this.data,n,o)}static fromData(t){return new a(t)}};var _n=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new Tn(t).decode();return{txType:Xl.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e,r;switch(e.txSubType){case"psm":r=wn.fromData(e.intentionData);break;case"borrow":r=Cn.fromData(e.intentionData);break;case"withdraw":r=vn.fromData(e.intentionData);break;case"repay":r=kn.fromData(e.intentionData);break;case"close":r=xn.fromData(e.intentionData);break;case"tank-deposit":r=Rn.fromData(e.intentionData);break;case"tank-withdraw":r=En.fromData(e.intentionData);break;case"tank-claim":r=Nn.fromData(e.intentionData);break;case"sbuck-deposit":r=An.fromData(e.intentionData);break;case"sbuck-unstake":r=On.fromData(e.intentionData);break;case"sbuck-withdraw":r=Mn.fromData(e.intentionData);break;case"sbuck-claim":r=Pn.fromData(e.intentionData);break;case"lock-claim":r=Wn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:n,network:o})}};import{TransactionType as Pu}from"@msafe/sui3-utils";import{TransactionType as ru}from"@msafe/sui3-utils";import{AggregatorClient as Yl,Env as Zl}from"@cetusprotocol/aggregator-sdk";import{CetusFarmsSDK as tu}from"@cetusprotocol/farms-sdk";import{CetusClmmSDK as eu}from"@cetusprotocol/sui-clmm-sdk";import{CetusVaultsSDK as nu}from"@cetusprotocol/vaults-sdk";import{CetusXcetusSDK as ou}from"@cetusprotocol/xcetus-sdk";import{SuiClient as si,getFullnodeUrl as ks}from"@mysten/sui/client";var be=(a,e)=>{let t=eu.createSDK({env:"mainnet",sui_client:new si({url:ks("mainnet")})});return t.setSenderAddress(e.address),t},Qt=(a,e)=>{let t=tu.createSDK({env:"mainnet",sui_client:new si({url:ks("mainnet")})});return t.setSenderAddress(e.address),t},au="https://api-sui.cetus.zone/router_v2/find_routes",vs=(a,e)=>{let t=new si({url:"https://fullnode.mainnet.sui.io/"});return new Yl({endpoint:au,signer:e.address,client:t,env:Zl.Mainnet})},ci=(a,e)=>{let t=nu.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t},Se=(a,e)=>{let t=ou.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t};var xs=async(a,e,t)=>await be(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Ds=async(a,e,t)=>await be(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),As=async(a,e,t)=>await be(t,e).Position.closePositionPayload(a),Os=async(a,e,t)=>await be(t,e).Position.removeLiquidityPayload(a),Ms=async(a,e,t)=>await be(t,e).Rewarder.collectRewarderPayload(a);var Ln=class a extends v{constructor(t){super(t);this.data=t}txType=ru.Other;txSubType="OpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await xs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as iu}from"@msafe/sui3-utils";var jn=class a extends v{constructor(t){super(t);this.data=t}txType=iu.Other;txSubType="ClaimFeeAndMining";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ms(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as su}from"@msafe/sui3-utils";var Un=class a extends v{constructor(t){super(t);this.data=t}txType=su.Other;txSubType="DecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Os(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as cu}from"@msafe/sui3-utils";var Ps=async(a,e,t)=>await Qt(t,e).Farms.openPositionAddLiquidityStakePayload(a),Bs=async(a,e,t)=>await Qt(t,e).Farms.addLiquidityFixCoinPayload(a),Rs=async(a,e,t)=>await Qt(t,e).Farms.removeLiquidityPayload(a),Es=async(a,e,t)=>await Qt(t,e).Farms.removeLiquidityPayload(a),Ns=async(a,e,t)=>await Qt(t,e).Farms.claimFeeAndClmmReward(a),Ws=async(a,e,t)=>await Qt(t,e).Farms.harvestPayload(a),_s=async(a,e,t)=>{let n=Qt(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},Ls=async(a,e,t)=>await Qt(t,e).Farms.depositPayload(a),js=async(a,e,t)=>await Qt(t,e).Farms.withdrawPayload(a);var qn=class a extends v{constructor(t){super(t);this.data=t}txType=cu.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ps(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as lu}from"@msafe/sui3-utils";var Fn=class a extends v{constructor(t){super(t);this.data=t}txType=lu.Other;txSubType="FarmingBatchHarvest";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await _s(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as uu}from"@msafe/sui3-utils";var Kn=class a extends v{constructor(t){super(t);this.data=t}txType=uu.Other;txSubType="FarmingClaimFeeAndReward";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ns(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as mu}from"@msafe/sui3-utils";var Vn=class a extends v{constructor(t){super(t);this.data=t}txType=mu.Other;txSubType="FarmingDecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Rs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as pu}from"@msafe/sui3-utils";var $n=class a extends v{constructor(t){super(t);this.data=t}txType=pu.Other;txSubType="FarmingHarvest";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ws(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as du}from"@msafe/sui3-utils";var Hn=class a extends v{constructor(t){super(t);this.data=t}txType=du.Other;txSubType="FarmingIncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Bs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as fu}from"@msafe/sui3-utils";var Gn=class a extends v{constructor(t){super(t);this.data=t}txType=fu.Other;txSubType="FarmingRemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Es(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as hu}from"@msafe/sui3-utils";var Qn=class a extends v{constructor(t){super(t);this.data=t}txType=hu.Other;txSubType="FarmingStake";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ls(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as gu}from"@msafe/sui3-utils";var zn=class a extends v{constructor(t){super(t);this.data=t}txType=gu.Other;txSubType="FarmingUnstake";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await js(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as yu}from"@msafe/sui3-utils";var Jn=class a extends v{constructor(t){super(t);this.data=t}txType=yu.Other;txSubType="IncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ds(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as bu}from"@msafe/sui3-utils";var Xn=class a extends v{constructor(t){super(t);this.data=t}txType=bu.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await As(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wu}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as Su}from"@cetusprotocol/aggregator-sdk";import{Transaction as Tu}from"@mysten/sui/transactions";var Us=async(a,e,t)=>{let n=vs(t,e),o=new Tu;return await n.fastRouterSwap({...a,routers:Su(a.routers),txb:o}),o};var Yn=class a extends v{constructor(t){super(t);this.data=t}txType=wu.Other;txSubType="AggregatorSwap";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Us(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Iu}from"@msafe/sui3-utils";import{Transaction as qs}from"@mysten/sui/transactions";var Fs=async(a,e,t)=>{let n=ci(t,e),o=new qs;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},Ks=async(a,e,t)=>{let n=ci(t,e),o=new qs;return await n.Vaults.withdraw(a,o),o};var Zn=class a extends v{constructor(t){super(t);this.data=t}txType=Iu.Other;txSubType="AddVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Fs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Cu}from"@msafe/sui3-utils";var to=class a extends v{constructor(t){super(t);this.data=t}txType=Cu.Other;txSubType="RemoveVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ks(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as vu}from"@msafe/sui3-utils";import{Transaction as ku}from"@mysten/sui/transactions";var Vs={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},$s=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:r,CLOCK_ADDRESS:c}=a,u=new ku;return r.forEach(d=>{u.moveCall({target:`${Vs.published_at}::router::redeem`,typeArguments:[Vs.cetus_coin_type],arguments:[u.object(n),u.object(o),u.pure(d),u.object(c)]})}),u};var eo=class a extends v{constructor(t){super(t);this.data=t}txType=vu.Other;txSubType="VestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await $s(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as xu}from"@msafe/sui3-utils";var Hs=async(a,e,t)=>await Se(t,e).XCetusModule.convertPayload(a),Gs=async(a,e,t)=>await Se(t,e).XCetusModule.redeemLockPayload(a),Qs=async(a,e,t)=>await Se(t,e).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),zs=async(a,e,t)=>await Se(t,e).XCetusModule.cancelRedeemPayload(a),Js=async(a,e,t)=>await Se(t,e).XCetusModule.redeemPayload(a);var no=class a extends v{constructor(t){super(t);this.data=t}txType=xu.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await zs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Du}from"@msafe/sui3-utils";var oo=class a extends v{constructor(t){super(t);this.data=t}txType=Du.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Qs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Au}from"@msafe/sui3-utils";var ao=class a extends v{constructor(t){super(t);this.data=t}txType=Au.Other;txSubType="xCETUSConvert";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Hs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ou}from"@msafe/sui3-utils";var ro=class a extends v{constructor(t){super(t);this.data=t}txType=Ou.Other;txSubType="xCETUSRedeem";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Js(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Mu}from"@msafe/sui3-utils";var io=class a extends v{constructor(t){super(t);this.data=t}txType=Mu.Other;txSubType="xCETUSRedeemLock";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Gs(r,n,o)}static fromData(t){return new a(t)}};var so=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:Pu.Other,txSubType:n,intentionData:{txbParams:{...t},action:n}}}async build(e){let{suiClient:t,account:n,network:o}=e,r;switch(e.txSubType){case"OpenAndAddLiquidity":r=Ln.fromData(e.intentionData);break;case"IncreaseLiquidity":r=Jn.fromData(e.intentionData);break;case"DecreaseLiquidity":r=Un.fromData(e.intentionData);break;case"RemoveLiquidity":r=Xn.fromData(e.intentionData);break;case"ClaimFeeAndMining":r=jn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":r=qn.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":r=Hn.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":r=Vn.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":r=Gn.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":r=Kn.fromData(e.intentionData);break;case"FarmingHarvest":r=$n.fromData(e.intentionData);break;case"FarmingBatchHarvest":r=Fn.fromData(e.intentionData);break;case"FarmingStake":r=Qn.fromData(e.intentionData);break;case"FarmingUnstake":r=zn.fromData(e.intentionData);break;case"xCETUSConvert":r=ao.fromData(e.intentionData);break;case"xCETUSRedeemLock":r=io.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":r=oo.fromData(e.intentionData);break;case"xCETUSCancelRedeem":r=no.fromData(e.intentionData);break;case"xCETUSRedeem":r=ro.fromData(e.intentionData);break;case"VestingRedeem":r=eo.fromData(e.intentionData);break;case"AggregatorSwap":r=Yn.fromData(e.intentionData);break;case"AddVaultsPosition":r=Zn.fromData(e.intentionData);break;case"RemoveVaultsPosition":r=to.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:n,network:o})}};import{TransactionType as Om}from"@msafe/sui3-utils";import Bu from"sort-keys-recursive";var B=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Bu(this.data))}};import{getFullnodeUrl as co}from"@mysten/sui.js/client";var li={};ls(li,{contractId:()=>Nu,default:()=>Uu,feeObjId:()=>Lu,roleObjId:()=>Wu,status:()=>Eu,transaction:()=>Ru,upgradeCapObjId:()=>ju,vaultObjId:()=>_u});var Ru="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Eu="success",Nu="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Wu="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",_u="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Lu="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",ju="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Uu={transaction:Ru,status:Eu,contractId:Nu,roleObjId:Wu,vaultObjId:_u,feeObjId:Lu,upgradeCapObjId:ju};var ui={};ls(ui,{contractId:()=>Ku,default:()=>Qu,feeObjId:()=>Hu,roleObjId:()=>Vu,status:()=>Fu,transaction:()=>qu,upgradeCapObjId:()=>Gu,vaultObjId:()=>$u});var qu="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Fu="success",Ku="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Vu="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",$u="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Hu="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",Gu="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Qu={transaction:qu,status:Fu,contractId:Ku,roleObjId:Vu,vaultObjId:$u,feeObjId:Hu,upgradeCapObjId:Gu};var zu=co("testnet"),Ju=co("testnet"),Xu=co("mainnet"),Yu=co("mainnet"),Zu="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",tm="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",em="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",nm="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Xs=li,Ys=ui,om=new Map([["dev",{env:"dev",rpc:{url:zu},backend:{url:Zu},contract:Xs}],["stg",{env:"stg",rpc:{url:Ju},backend:{url:tm},contract:Xs}],["prev",{env:"prev",rpc:{url:Xu},backend:{url:em},contract:Ys}],["prod",{env:"prod",rpc:{url:Yu},backend:{url:nm},contract:Ys}]]);function Zs(a,e){let t=om.get(a);if(!t)throw new Error(`Env not supported: ${a}`);return e&&e.rpc&&(t.rpc=e.rpc),e&&e.backend&&(t.backend=e.backend),e&&e.contract&&(t.contract=e.contract),t}import{SuiClient as rm}from"@mysten/sui.js/client";var j=class extends Error{mpayErrorCode;context;constructor(e,t,n={}){let{cause:o,context:r}=n;o?super(`[MPay] ${t}: ${o}`):super(`[MPay] ${t}`),this.mpayErrorCode=e,this.context=r}};var lo=class extends j{constructor(){super(11,"Backend is not specified")}};var uo=class extends j{constructor(){super(1,"Wallet not connected")}};import we,{AxiosError as am}from"axios";var Te=class extends j{constructor(e,t){super(10,e,{context:t})}};var mo=class a{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof am)throw new Te(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new Te(e.data.code)}throw new Te(e.status.toString())}async getIncomingStreams(e,t){let n=await we.post(`${this.apiURL}/stream`,{recipient:e,...t});return a.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await we.post(`${this.apiURL}/stream`,{sender:e,...t});return a.parseResponseData(n)}async getStreamHistory(e){let t=await we.post(`${this.apiURL}/stream-events`,e),n=a.parseResponseData(t);return n.data.forEach(o=>{let r=o;return r.data.type==="create_stream"?r.data.balance=BigInt(r.data.balance):r.data.type==="cancel_stream"?r.data.withdrawAmount=BigInt(r.data.withdrawAmount):r.data.type==="claim"||r.data.type==="auto_claim"?r.data.claimAmount=BigInt(r.data.claimAmount):r.data.type==="set_auto_claim"&&(r.data.enabled=!!r.data.enabled),r.createdAt=new Date(r.createdAt),r}),n}async getAllCoinTypes(e){let t=await we.post(`${this.apiURL}/stream-info`,{address:e});return a.parseResponseData(t)}async getAllRecipients(e,t){let n=await we.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return a.parseResponseData(n)}async getAllSenders(e,t){let n=await we.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return a.parseResponseData(n)}};var Ie=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new rm({url:e.rpc.url}),e.backend&&(this._backend=new mo(e.backend.url))}static new(e,t){let n=Zs(e,t);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new lo;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 uo;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as xm,normalizeStructTag as Dm,normalizeSuiAddress as Cc}from"@mysten/sui.js/utils";import{TransactionBlock as bo}from"@mysten/sui.js/transactions";import{TransactionBlock as cc}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as lc,normalizeStructTag as lm}from"@mysten/sui.js/utils";var mi=50n,po=10000n,tc=25n,pi=100000000n;var zt=class{constructor(e){this.object=e}moveArg(e){return e.object(this.object)}},_e=class{constructor(e){this.objects=e}moveArgs(e){return e.makeMoveVec({objects:this.objects.map(t=>e.object(t))})}},oe=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=c=>new a(t.result[c]);if(n===Symbol.iterator)return function*(){let c=0;for(;;)yield o(c),c++};if(typeof n=="symbol")return;let r=parseInt(n,10);if(!(Number.isNaN(r)||r<0))return o(r)}})}moveArg(){return this.result}};import{Buffer as ec}from"buffer";import{normalizeSuiAddress as im}from"@mysten/sui.js/utils";var Le=class extends j{constructor(e,t){super(3,e,{context:t})}};var fo=class{constructor(e){this.results=e}callResult(e){return this.results.results[e]}returnValue(e,t){return e.returnValues[t]}getValue(e=0,t=0){let n=this.callResult(e);return this.returnValue(n,t)}getAddress(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="address")throw new Le("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return im(ec.from(n).toString("hex"))}getU64(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="u64")throw new Le("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return ec.from(n).readBigInt64LE()}};import{bcs as oc}from"@mysten/sui.js/bcs";var H=class extends j{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var ac={groupId:"string",name:"string"},sm=64;function rc(a){return ic(a),oc.ser(ac,a).toString("base64")}function je(a){let e=oc.de(ac,a,"base64");return ic(e),e}function ic(a){if(!nc(a.name))throw new H("Invalid metadata: Name contains unknown character");if(!nc(a.groupId))throw new H("Invalid metadata: Group ID contains unknown character");if(a.name.length>sm)throw new H("Invalid metadata: Name exceed max length 64")}function nc(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as ho}from"@mysten/sui.js/utils";function go(a,e){return ho(a)===ho(e)}function ae(a,e){return ho(a)===ho(e)}var yo="txn.gas";import{nanoid as cm}from"nanoid";function sc(){return cm()}var pe=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:rc({name:e.name,groupId:sc()}),coinType:lm(e.coinType),recipients:e.recipients.map(t=>({address:t.address,cliffAmount:t.cliffAmount,amountPerEpoch:t.amountPerStep})),epochInterval:e.interval,numberEpoch:e.steps,startTime:e.startTimeMs,cancelable:e.cancelable}}async buildCreateStreamTransactionBlock(e){let t=new cc,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),r=await this.wallet.requestCoins(o),c=await this.addMergeCoins(t,r[0]),u;o.length>1?u=await this.addMergeCoins(t,r[1]):u=c;for(let d=0;d<e.recipients.length;d++){let S=e.recipients[d],w=this.amountForRecipient(S,e.numberEpoch),I=this.getStreamFeeLocal(w),[C]=t.splitCoins(c,[t.pure(w+I,"u64")]),[k]=t.splitCoins(u,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new oe(C),flatFeeCoin:new oe(k),metadata:e.metadata,recipient:S.address,timeStart:e.startTime,cliff:S.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:S.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return t}calculateCreateStreamFees(e){let t=a.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(t)}feeParams(){return{createFeePercent:{numerator:mi,denominator:po},claimFeePercent:{numerator:tc,denominator:po},flatFeePerStream:pi}}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===yo?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return go(n,lc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:lc,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,r)=>{let c=this.amountForRecipient(r,e.numberEpoch),u=this.getStreamFeeLocal(c);return{totalAmount:o.totalAmount+c,streamFeeAmount:o.streamFeeAmount+u}},{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 pi}getStreamFeeLocal(e){return e*mi/po}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new cc,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new fo(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as mc}from"@mysten/sui.js/transactions";var uc="0x0000000000000000000000000000000000000000000000000000000000000006";var Ce=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.add(mc.MoveCall({target:n,arguments:t.arguments.map(o=>o instanceof _e?o.moveArgs(e):o instanceof zt?o.moveArg(e):o instanceof oe?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,n=[],o=[]){e.add(mc.MoveCall({target:t,arguments:n.map(r=>r instanceof _e?r.moveArgs(e):r instanceof zt?r.moveArg(e):r instanceof oe?r.moveArg():e.pure(r)),typeArguments:o}))}makeObject(e){return typeof e=="string"?new zt(e):e}vaultObject(){return new zt(this.config.vaultObjId)}roleObject(){return new zt(this.config.roleObjId)}feeObject(){return new zt(this.config.feeObjId)}clockObject(){return new zt(uc)}};var ke=class a extends Ce{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(t,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_fee,arguments:[o,r,n],typeArgs:[]})}setStreamingFlatFee(t,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_flat_fee,arguments:[o,r,n],typeArgs:[]})}setClaimFee(t,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_claim_fee,arguments:[o,r,n],typeArgs:[]})}streamingFee(t,n){let o=this.feeObject();return this.addContractCall(t,{method:a.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(t,n){return this.addContractCall(t,{method:a.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(t){return this.addContractCall(t,{method:a.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var Jt=class a extends Ce{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(t,n){let o=this.feeObject(),r=this.vaultObject(),c=this.makeObject(n.paymentCoin),u=this.makeObject(n.flatFeeCoin),d=this.clockObject();return this.addContractCall(t,{method:a.MethodName.create_stream,arguments:[o,r,c,u,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,d],typeArgs:[n.coinType]})}setAutoClaim(t,n){let o=this.makeObject(n.streamId);return this.addContractCall(t,{method:a.MethodName.set_auto_claim,arguments:[o,n.enabled],typeArgs:[n.coinType]})}cancelStream(t,n){let o=this.makeObject(n.streamId),r=this.clockObject();return this.addContractCall(t,{method:a.MethodName.cancel_stream,arguments:[o,r],typeArgs:[n.coinType]})}claimStream(t,n){let o=this.makeObject(n.streamId),r=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream,arguments:[o,r],typeArgs:[n.coinType]})}claimStreamByProxy(t,n){let o=this.makeObject(n.streamId),r=this.vaultObject(),c=this.feeObject(),u=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,r,c,u],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream_by_proxy}`}};var ve=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new ke(t,e),this.streamContract=new Jt(t,e)}feeContract;streamContract;async createStreams(e){let t=pe.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new pe(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,n){let o=new bo;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new bo;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new bo;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new bo;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as di,SUI_TYPE_ARG as um}from"@mysten/sui.js/utils";import{Duration as pc}from"luxon";var So=class extends j{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var mm=1e3,To=class{constructor(e){this.globals=e;this.coinMetaHelper=new fi(e.suiClient),this.createStreamHelper=new ve(e).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new So(e.effects?.status.status,e.effects?.status.error);return e.objectChanges.filter(t=>t.type==="created"&&t.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(t=>t.objectId)}calculateCreateStreamFees(e){return this.createStreamHelper.calculateCreateStreamFees(e)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(e){if(e.steps===0n)throw new H("Invalid stream steps: 0");let t=e.cliff?e.cliff:{numerator:0n,denominator:100n},n=e.totalAmount*t.numerator/t.denominator,o=(e.totalAmount-n)/e.steps,c={realTotalAmount:o*e.steps+n,cliffAmount:n,amountPerStep:o};return this.validateStreamAmount(c,e.totalAmount),c}calculateTimelineByInterval(e){if(e.steps===0n)throw new H("Invalid stream steps: 0");let t=e.timeStart.plus(e.interval.toMillis()*Number(e.steps)),n={timeStart:e.timeStart,timeEnd:t,interval:e.interval,steps:e.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(e){if(e.steps===0n)throw new H("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(pc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:pc.fromMillis(Number(t)),steps:e.steps};return this.validateTimeline(o),o}async getBalance(e,t){let n=await this.globals.suiClient.getBalance({owner:e,coinType:t}),o=await this.getCoinMeta(t);return{...n,coinType:di(n.coinType),coinMeta:o}}async getAllBalance(e){let t=await this.globals.suiClient.getAllBalances({owner:e}),n=await Promise.all(t.map(o=>this.getCoinMeta(o.coinType)));return t.map((o,r)=>({...o,coinType:di(o.coinType),coinMeta:n[r]}))}async getCoinMeta(e){return this.coinMetaHelper.getCoinMeta(e)}async simulateTransactionBlock(e){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:e,sender:await this.globals.wallet.address()})}validateStreamAmount(e,t){if(e.amountPerStep===0n)throw new H("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new H("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<mm)throw new H("Interval shall be at least 1 second","interval",e.interval)}},fi=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(e){let t=di(e||um);if(this.coinMetaReg.has(t))return this.coinMetaReg.get(t);let n=await this.queryCoinMeta(t);return n&&this.coinMetaReg.set(t,n),n}async queryCoinMeta(e){return await this.suiClient.getCoinMetadata({coinType:e})||void 0}};import{normalizeStructTag as hc,normalizeSuiAddress as xo}from"@mysten/sui.js/utils";import{DateTime as gc}from"luxon";import{TransactionBlock as ko}from"@mysten/sui.js/transactions";import{normalizeStructTag as fc,parseStructTag as fm}from"@mysten/sui.js/utils";import{DateTime as hm}from"luxon";var wo=class extends j{constructor(){super(7,"Connected wallet is not creator")}};var Ue=class extends j{constructor(){super(8,"Connected wallet is not recipient")}};var qe=class extends j{constructor(e,t){super(6,e,{context:t})}};var At=class extends j{constructor(e,t={}){super(0,e,t)}};var Io=class extends j{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as pm,Duration as dm}from"luxon";var dc=(1n<<64n)-1n,Co=1e3;function hi(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Co);return pm.fromMillis(t*Co)}function gi(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Co);return dm.fromMillis(t*Co)}var re=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Jt(e.envConfig.contract,e)}streamContract;type="Stream";static async new(e,t){let n=await a.fetchStreamData(e,t);return new a(e,t,n)}static fromObjectData(e,t,n){let o=a.parseRawStreamData(t,n);return new a(e,t,o)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await a.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new At("Object Id does not align");this.rawData=a.parseRawStreamData(this.streamId,e)}async historyEvents(e){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:e})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new wo;let e=new ko;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Ue;let e=new ko;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new Ue;let t=new ko;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new ko;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 fc(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 gi(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return je(e).groupId}get name(){let{metadata:e}=this.rawData.config;return je(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 gi(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===dc?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=hm.now().toMillis(),t=this.timeStart.toMillis();if(e<t)return-1n;let n=Math.floor((e-t)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let e=this.rawData.config;return e.amountPerEpoch*e.totalEpoch+e.cliff}get isCanceled(){let e=this.rawData.status.status;return e===16||e===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(e,t){let n=await e.suiClient.getObject({id:t,options:{showContent:!0,showType:!0}});return a.parseRawStreamData(t,n)}static parseRawStreamData(e,t){if(t.error)throw t.error.code==="notExists"?new Io(e):new qe(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new qe("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=fm(n.type),r=fc(o[0]),c=n.fields,u=c.config.fields,d=c.status.fields;return{coinType:r,autoClaim:c.auto_claim,balance:BigInt(c.balance.fields.balance),config:{amountPerEpoch:BigInt(u.amount_per_epoch),cancelable:u.cancelable,cliff:BigInt(u.cliff),creator:u.creator,epochInterval:BigInt(u.epoch_interval),metadata:u.metadata,recipient:u.recipient,timeStart:BigInt(u.time_start),totalEpoch:BigInt(u.total_epoch)},status:{status:d.status,epochCanceled:BigInt(d.epoch_canceled),epochClaimed:BigInt(d.epoch_claimed)}}}};var xe=class extends j{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function bi(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 yi=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},De=class{constructor(e){this.requester=e;this.pager=new yi(e),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};var gm=25;async function Ti(a,e,t){let n=new Fe(e),o=new Ke(a,n,t);return await bi(o)}var Fe=class{constructor(e){this.ids=e;this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},Ke=class extends De{constructor(t,n,o){super(new Si(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}},Si=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||gm,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let e=[];for(;e.length<this.pageSize&&await this.stringIter.hasNext();){let r=await this.stringIter.next();r&&e.push(r)}let t=await this.suiClient.multiGetObjects({ids:e,options:this.objectOptions}),n;if(this.filter){let{filter:o}=this;n=t.filter(r=>o?.(r))}else n=t;return{data:n,hasNext:await this.stringIter.hasNext()}}};var vo=class a{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new xe("stream size 0");let n=t.map(r=>r.groupId);if(new Set(n).size!==1)throw new H("Stream does not have same group ID")}type="StreamGroup";static async new(e,t){let n=await Ti(e.suiClient,t);return n.forEach(o=>{if(!o)throw new At("stream group object data undefined")}),a.newFromObjectResponse(e,t,n)}static async newFromObjectResponse(e,t,n){let o=await a.parseGroupStreams(e,t,n);return new a(e,o)}static checkStreamGroup(e){let t=e.map(r=>r.groupCommonInfo),n=t[0],o=!0;return t.forEach(r=>{ym(n,r)||(o=!1)}),o}async refresh(){let e=await Ti(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((r,c)=>re.fromObjectData(e,t[c],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new xe("Not same group ID");if(!this.checkStreamGroup(o))throw new xe("Not same stream settings");return o}};function ym(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 Ve=class a{constructor(e,t){this.it=e;this.pageSize=t}static async newIncoming(e){let t=await Do.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Do.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}},Do=class a{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let t=await Ao.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await Ao.newOutgoingQuery(e);return new a(t)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let t=await this.requester.doNextRequest();if(t===null)throw new At("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new At("No more results");return e}},Ao=class a{constructor(e,t,n,o){this.globals=e;this.recipient=t;this.groupRefs=n;this.query=o;this.current=0;let r=new Fe(n.flat().map(c=>c.streamId));this.objectIter=new Ke(e.suiClient,r)}current=0;objectIter;static async newIncomingQuery(e){let t=Im(e.query),n=await e.globals.walletAddress(),r=(await e.globals.backend.getIncomingStreams(n,t)).filter(u=>xo(u.recipient)===xo(n)),c=yc(r);return new a(e.globals,n,c,e.query)}static async newOutgoingQuery(e){let t=Cm(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),r=yc(o);return new a(e.globals,n,r,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 Tm(this.globals,e[0].streamId,this.objectIter);return this.current++,bc(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await wm(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,Sm(t,this.query)?t:this.doNextRequest()}throw new At("Stream group with no stream")}};function yc(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)=>gc.fromISO(n[0].createDate).toMillis()-gc.fromISO(t[0].createDate).toMillis())}function bc(a,e){if(e===void 0)return!0;let t=bm(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 bm(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function Sm(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{bc(n,e)&&(t=!0)}),t}async function Tm(a,e,t){let n=await Sc(t,e);return re.fromObjectData(a,e,n)}async function wm(a,e,t){let n=[];for(;n.length<e.length;){let o=await Sc(t,e[n.length]);n.push(o)}return vo.newFromObjectResponse(a,e,n)}async function Sc(a,e){if(!await a.hasNext())throw new At("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new At("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new At("stream id not aligned");return t}function Im(a){return{status:wi(a?.status),coinType:Tc(a?.coinType),sender:wc(a?.sender)}}function Cm(a){return{status:wi(a?.status),coinType:Tc(a?.coinType),recipient:wc(a?.recipient)}}function wi(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=wi(t);return!e||e===n?n:"all"},void 0):km(a)}function km(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new H("Unknown stream filtered status")}}function Tc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>hc(e)):void 0:hc(a)}function wc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>xo(e)):void 0:xo(a)}var Oo=class extends j{constructor(t,n,o){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:n,gotAmount:o}});this.coinType=t;this.requestAmount=n;this.gotAmount=o}};var vm=25;async function Ic(a,e,t,n="0x2::sui::SUI",o=vm){let r=new Ii(a,e,n,o),c=BigInt(0),u=[];for(;await r.hasNext()&&c<t;){let d=await r.next();d&&(u.push(d),c+=BigInt(d.balance))}if(c<t)throw new Oo(n,t,c);return u}var Ii=class extends De{constructor(t,n,o,r){super(new Ci(t,n,o,r));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=r}},Ci=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new At("Invalid reqPageSize")}nextCursor;async doNextRequest(){let e=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=e.nextCursor,{data:e.data,hasNext:e.hasNextPage}}};var ki=class{constructor(e){this.msafe=e}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},Mo=class{constructor(e){this.account=e}async address(){return this.account.address}},vi=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(e){return Promise.all(e.map(t=>this.requestCoin(t)))}async requestCoin(e){if(go(e.coinType,xm))return{primaryCoin:yo};if(e.amount<=0)throw new H("Invalid coin request","coinAmount",e.amount);let t=await Ic(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new At("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},Po=class{globals;helper;constructor(e,t){this.globals=Ie.new(e,t),this.helper=new To(this.globals)}connectSingleWallet(e){let t=new vi(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new ki(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return re.new(this.globals,e)}async getIncomingStreams(e,t=10){return Ve.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return Ve.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=>Dm(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Cc(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Cc(o))}get wallet(){return this.globals.wallet}builder(){return new ve(this.globals)}};var Ut=class extends B{application="mpay";getClient(e,t){let n=new Po(e==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new Mo(t)),n}};var $e=class extends Ut{constructor(t){super(t);this.data=t}txType=Om.Stream;txSubType="Cancel";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).cancel()}};import{TransactionType as Mm}from"@msafe/sui3-utils";var He=class extends Ut{constructor(t){super(t);this.data=t}txType=Mm.Stream;txSubType="ClaimByProxy";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as Pm}from"@msafe/sui3-utils";var Ge=class extends Ut{constructor(t){super(t);this.data=t}txType=Pm.Stream;txSubType="Claim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claim()}};import{TransactionType as Bm}from"@msafe/sui3-utils";var Qe=class extends Ut{constructor(t){super(t);this.data=t}txType=Bm.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as kc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Rm,normalizeSuiAddress as ze}from"@mysten/sui.js/utils";var Ae=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return BigInt(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return ze(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return kc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return ze(e.value.Object.ImmOrOwned.objectId)}return ze(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return ze(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return ze(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return kc.de(t,new Uint8Array(n))}typeArg(e){return Rm(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var Bo=class{constructor(e,t){this.globals=e;this.txb=t}decode(){let e=this.decodeCreateStreamInfo(),t=this.createStreamHelper().calculateCreateStreamFees(e);return{type:"CreateStream",info:e,fees:t}}decodeCreateStreamInfo(){let t=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(t)}createStreamTransactions(){let e=this.transactions.filter(t=>t.kind==="MoveCall"&&ae(t.target,this.contract.createStreamTarget));if(e.length===0)throw new At("No create stream transactions");return e.map(t=>new Ae(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=je(t),r=e.decodeInputAddress(5),c=e.decodeInputU64(6),u=e.decodeInputU64(7),d=e.decodeInputU64(8),S=e.decodeInputU64(9),w=e.decodeInputU64(10),I=e.decodeInputBool(11),C=e.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:c,cliff:u,epochInterval:d,totalEpoch:S,amountPerEpoch:w,cancelable:I,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 H("Stream group not have common info");let n=e.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:e[0].name,coinType:e[0].coinType,recipients:n,interval:e[0].epochInterval,steps:e[0].totalEpoch,startTimeMs:e[0].timeStart,cancelable:e[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(e=>e.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new Jt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new ke(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new pe(this.globals,this.feeContract,this.contract)}getInputArg(e){if(e.kind!=="Input")throw new Error("not input type");return"value"in e?e:this.txb.blockData.inputs[e.index]}};var Ro=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Jt(e.envConfig.contract,e)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(t=>t.kind==="MoveCall"&&ae(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ae(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ae(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ae(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ae(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Bo(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:e,enabled:t}}decodeClaimTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Claim",streamId:e}}decodeClaimByProxyTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"ClaimByProxy",streamId:e}}decodeCancelStreamTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Cancel",streamId:e}}get helper(){let e=this.transactions[0];return new Ae(e,this.txb)}};import{TransactionType as Em}from"@msafe/sui3-utils";var Je=class extends Ut{constructor(t){super(t);this.data=t}txType=Em.Stream;txSubType="SetAutoClaim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var Eo=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(e){let{network:t,transactionBlock:n}=e,o=Ie.new(t==="sui:mainnet"?"prod":"dev"),c=new Ro(o,n).decode(),u;switch(c.type){case"CreateStream":u=new Qe(c.info);break;case"SetAutoClaim":u=new Je({streamId:c.streamId,enabled:c.enabled});break;case"Claim":u=new Ge({streamId:c.streamId});break;case"ClaimByProxy":u=new He({streamId:c.streamId});break;case"Cancel":u=new $e({streamId:c.streamId});break;default:throw new Error(`Unknown transaction type: ${c}`)}return{txType:u.txType,txSubType:u.txSubType,intentionData:u.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new Qe(t);break;case"Claim":n=new Ge(t);break;case"ClaimByProxy":n=new He(t);break;case"SetAutoClaim":n=new Je(t);break;case"Cancel":n=new $e(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as _m,TransactionSubTypes as vc}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Nm}from"@msafe/sui3-utils";var No=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return Nm(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as Wm}from"@msafe/sui3-utils";var Wo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return Wm(n,this.data,o.address)}static fromData(t){return new a(t)}};var _o=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=_m}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case vc.assets.coin.send:o=No.fromData(e.intentionData);break;case vc.assets.object.send:o=Wo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Ym}from"@msafe/sui3-utils";var xc=!1,Xe={ProtocolPackage:"0x81c408448d0d57b3e371ea94de1d40bf852784d3e225de1e74acab3e8395c18f",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function xi(){if(!xc)try{let a=await fetch("https://open-api.naviprotocol.io/api/msafe").then(r=>r.json()),{packageId:e,borrowFee:t,borrowFeeAddress:n,pool:o}=a;e&&(Xe.ProtocolPackage=e),t&&(Xe.borrowFee=t),n&&(Xe.borrowFeeAddress=n),o&&(Xe.pool=o),xc=!0}catch(a){console.error(a.message)}}var Vt=Xe;import{TransactionType as fe}from"@msafe/sui3-utils";import{bcs as Dc}from"@mysten/sui.js/bcs";import{normalizeStructTag as jm,normalizeSuiAddress as Ye}from"@mysten/sui.js/utils";var Lo=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();if(this.isEntryClaimAndDepositTransaction())return this.decodeEntryClaimAndDeposit();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isClaimRewardTransaction(){return!!this.transactions.find(t=>!!(t.kind==="MoveCall"&&t.target.includes("claim_reward")))}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::borrow`)}isEntryMultiDepositTransaction(){let e=`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))?!1:t.length>1}isEntryClaimAndDepositTransaction(){let e=`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return!!(this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))&&t.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::withdraw`)}findPoolByAssetId(e){let t=Object.values(Vt.pool).find(n=>n.assetId===e);if(!t)throw new Error("Pool not found");return t}decodeEntryClaimAndDeposit(){return{txType:fe.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return console.log("decode claims"),{txType:fe.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:fe.Other,type:"EntryBorrow",intentionData:{amount:t,assetId:e}}}decodeEntryMultiDeposit(){let e=[],t=`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===t){let o=new jo(n,this.txb),r=o.decodeInputU8(3),c=o.decodeInputU64(5);e.push({assetId:r,amount:c})}}),{txType:fe.Other,type:"EntryMultiDeposit",intentionData:{list:e}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5);return{txType:fe.Other,type:"EntryDeposit",intentionData:{amount:t,assetId:e}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6);return{txType:fe.Other,type:"EntryRepay",intentionData:{amount:t,assetId:e}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:fe.Other,type:"EntryWithdraw",intentionData:{amount:t,assetId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(Vt.ProtocolPackage));return new jo(e,this.txb)}},jo=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return Ye(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 Dc.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 Ye(e.value.Object.ImmOrOwned.objectId)}return Ye(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Ye(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Ye(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 Dc.de(t,new Uint8Array(n))}typeArg(e){return jm(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{depositCoin as Um,withdrawCoin as qm,repayDebt as Fm,borrowCoin as Km,claimAllRewardsPTB as Vm,claimAllRewardsResupplyPTB as $m}from"navi-sdk";async function Oe(a,e,t,n){return await Um(a,e,t,n),a}async function Ac(a,e,t,n){let[o]=await qm(a,e,t);return a.transferObjects([o],a.pure(n)),a}async function Oc(a,e,t,n){let[o]=await Km(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Di(a,e,t,n){return await Fm(a,e,t,n),a}async function Mc(a,e){return await Vm(a,e)}async function Pc(a,e){return await $m(a,e)}var Uo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await Mc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var qo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await Pc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Gm}from"@mysten/sui.js/transactions";import{pool as Hm}from"navi-sdk";function Xt(a){return Object.values(Hm).find(e=>String(e.assetId)===String(a))}var Fo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,r=new Gm;console.log("build",this.data);let c=Xt(n);return await Oc(r,c,o,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Qm}from"@mysten/sui.js/transactions";async function Me(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var Ko=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:r,amount:c}=this.data,u=new Qm;console.log("build",this.data);let d=Xt(r);if(r===0){let[C]=u.splitCoins(u.gas,[c]);return await Oe(u,d,C,c)}let S=await Me(n,o.address,d.type);if(!S.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let w=S.data[0].coinObjectId;if(S.data.length>=2){let C=1;for(;C<S.data.length;)u.mergeCoins(w,[S.data[C].coinObjectId]),C++}return await Oe(u,d,u.object(w),c)}static fromData(t){return new a(t)}};import{TransactionBlock as zm}from"@mysten/sui.js/transactions";var Vo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:r,amount:c}=this.data,u=new zm;console.log("build",this.data);let d=Xt(r);if(r===0){let[I]=u.splitCoins(u.gas,[c]);return Di(u,d,I,c)}let S=await Me(n,o.address,d.type);if(!S.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let w=S.data[0].coinObjectId;if(S.data.length>=2){let I=1;for(;I<S.data.length;)u.mergeCoins(w,[S.data[I].coinObjectId]),I++}return Di(u,d,u.object(w),c)}static fromData(t){return new a(t)}};import{TransactionBlock as Jm}from"@mysten/sui.js/transactions";var $o=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,r=new Jm;console.log("build",this.data);let c=Xt(n);return await Ac(r,c,o,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Xm}from"@mysten/sui.js/transactions";var Ho=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:r}=this.data,c=new Xm;console.log("build",this.data);for(let u=0;u<r.length;u++){let{assetId:d,amount:S}=r[u],w=Xt(d);if(d===0){let[k]=c.splitCoins(c.gas,[S]);await Oe(c,w,k,S);continue}let I=await Me(n,o.address,w.type);if(!I.data[0])throw new Error(`Insufficient balance for ${w.name} Token`);let C=I.data[0].coinObjectId;if(I.data.length>=2){let k=1;for(;k<I.data.length;)c.mergeCoins(C,[I.data[k].coinObjectId]),k++}await Oe(c,w,c.object(C),S)}return c}static fromData(t){return new a(t)}};var Go=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(e){await xi();let{transactionBlock:t}=e,o=new Lo(t).decode();return{txType:Ym.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await xi(),e.txSubType){case"EntryDeposit":o=Ko.fromData(e.intentionData);break;case"EntryBorrow":o=Fo.fromData(e.intentionData);break;case"EntryRepay":o=Vo.fromData(e.intentionData);break;case"EntryWithdraw":o=$o.fromData(e.intentionData);break;case"EntryMultiDeposit":o=Ho.fromData(e.intentionData);break;case"ClaimReward":o=Uo.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=qo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as Zm,TransactionType as Bc}from"@msafe/sui3-utils";import{fromHex as tp}from"@mysten/bcs";import{Transaction as ep}from"@mysten/sui/transactions";import np from"sort-keys-recursive";var Rc="msafe-plain-tx",Ec=Zm.others.plain,Ai=class a{constructor(e){this.data=e}application=Rc;txType=Bc.Other;txSubType=Ec;serialize(){return JSON.stringify(np(this.data))}async build(e){return ep.from(tp(this.data.content))}static fromData(e){return new a(e)}},Qo=class{application;supportSDK="@mysten/sui";constructor(){this.application=Rc}async deserialize(e){let{content:t}=e.appContext;return{txType:Bc.Other,txSubType:Ec,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return Ai.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{SuiClient as Nc}from"@mysten/sui/client";import{Transaction as lp}from"@mysten/sui/transactions";import{SuiClient as Pi}from"@mysten/sui.js/client";import{TransactionBlock as up}from"@mysten/sui.js/transactions";import{RequestManager as ip,HTTPTransport as sp,Client as cp}from"@open-rpc/client-js";var op={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Oi=class extends Error{},zo=class extends Oi{code;type;constructor(e,t){super(e),this.code=t,this.type=op[t]??"ServerError"}};function ap(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var rp={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},Jo=class{endpoint;options;#n=0;#a=0;#t=null;#e=null;#r=new Set;#o=new Map;constructor(e,t={}){this.endpoint=e,this.options={...rp,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=ap(this.endpoint))}async makeRequest(e,t){let n=await this.#i();return new Promise((o,r)=>{this.#n+=1,this.#o.set(this.#n,{resolve:o,reject:r,timeout:setTimeout(()=>{this.#o.delete(this.#n),r(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:r})=>{if(o)throw new zo(o.message,o.code);return r})}#i(){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:r}=this.#o.get(n.id);clearTimeout(r),o(n)}else if("params"in n){let{params:o}=n;this.#r.forEach(r=>{r.subscriptionId===o.subscription&&o.subscription===r.subscriptionId&&r.onMessage(o.result)})}})}),this.#e)}async#s(){return this.#t?.close(),this.#e=null,Promise.allSettled([...this.#r].map(e=>e.subscribe(this)))}async subscribe(e){let t=new Mi(e);return this.#r.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},Mi=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 ie=class{rpcClient;websocketClient;constructor({url:e,websocket:{url:t,...n}={},rpc:o}){let r=new sp(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new cp(new ip([r])),this.websocketClient=new Jo(t??e,n)}async request(e){return await this.rpcClient.request(e)}async subscribe(e){let t=await this.websocketClient.subscribe(e);return async()=>!!await t()}};var Xo=class a{apps;constructor(){this.apps=new Map}static fromHelpers(e){let t=new a;for(let n=0;n<e.length;n++){let o=e[n];switch(o.supportSDK){case"@mysten/sui.js":t.addLegacyHelper(o);break;case"@mysten/sui":t.addHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return t}addLegacyHelper(e){this.apps.set(e.application,new Ri(e))}addHelper(e){this.apps.set(e.application,new Bi(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},Bi=class{constructor(e){this.helper=e}async deserialize(e){let t=new Nc({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new Pi({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),r=lp.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:r})}async build(e){let t=new Nc({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiClient:t});o.setSender(e.account.address);let r=await o.build({client:t});return up.from(r)}},Ri=class{constructor(e){this.helper=e}async deserialize(e){let t=new Pi({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})});return this.helper.deserialize({...e,transactionBlock:e.transactionBlock,suiClient:t})}async build(e){let t=new Pi({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");return this.helper.build({...e,suiClient:t})}};import{TransactionType as Tp}from"@msafe/sui3-utils";import{getFullnodeUrl as wp}from"@mysten/sui/client";import{Scallop as Ip}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Mt}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as Uc}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as mp}from"@mysten/sui/utils";var se=class{constructor(e,t){this.transaction=e;this.scallopClient=t;this.scallopClient=t,this.inputs=e.getData().inputs,this.commands=e.getData().commands,this.movecallsAsSet=new Set(this.commands.filter(this.isMoveCall).map(n=>`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`))}inputs;commands;movecallsAsSet;get address(){return this.scallopClient.address}get utils(){return this.scallopClient.utils}get coreId(){return{protocolPkg:this.address.get("core.packages.protocol.id"),market:this.address.get("core.market"),version:this.address.get("core.version"),coinDecimalsRegistry:this.address.get("core.coinDecimalsRegistry"),xOracle:this.address.get("core.oracles.xOracle"),spoolPkg:this.address.get("spool.id"),borrowIncentivePkg:this.address.get("borrowIncentive.id"),veScaPkgId:this.address.get("vesca.id"),veScaObjId:this.address.get("vesca.object"),scoin:this.address.get("scoin.id"),referral:this.address.get("referral.id")}}matchMoveCallCommand(e,t){let{address:n,module:o,name:r}=mp(t);return e?e.package===n&&e.module===o&&e.function===r:!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((r,c,u)=>(r[c]=u,r),{}),o=[];return this.commands.forEach(r=>{this.isMoveCall(r)&&r.MoveCall&&t.has(r.MoveCall.package)&&(o[n[r.MoveCall.package]]=r.MoveCall)}),o}hasMoveCallCommand(e){return this.movecallsAsSet.has(e)}};import{bcs as Ei}from"@mysten/sui/bcs";import{normalizeStructTag as pp,normalizeSuiAddress as Ze}from"@mysten/sui/utils";var Ni=class a{constructor(e,t,n=0){this.moveCall=e;this.transaction=t;let o=[];e?.MoveCall&&t.getData().commands.filter((r,c)=>{if(r.$kind==="MoveCall"){let u=`${r.MoveCall.package}::${r.MoveCall.module}::${r.MoveCall.function}`,d=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return u===d?(o.push(c),!0):!1}return!1}),this.cmdIdx=o[n]}cmdIdx;get txBlockTransactions(){return this.transaction.blockData.transactions[this.cmdIdx]}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"U64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"U8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"Address");return Ze(t)}decodeInputString(e){return this.decodePureArg(e,"String")}decodeInputBool(e){return this.decodePureArg(e,"Bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return t}getNestedInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="NestedResult")throw new Error("not input type");return this.transaction.blockData.transactions[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure,o=Ei[t];return Ei[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 Ze(e.value.Object.ImmOrOwned.objectId)}return Ze(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Ze(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Ze(e.value.Object.Shared.objectId)}static getPureInput(e){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 Ei.U64.parse(new Uint8Array(t))}typeArg(e){return pp(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},W=Ni;var Wi=class{constructor(e,t){this.splitCoin=e;this.txb=t}getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(W.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},Bt=Wi;import{normalizeStructTag as Wc,SUI_CLOCK_OBJECT_ID as _c,SUI_TYPE_ARG as dp}from"@mysten/sui/utils";var Lc=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 r=a.address.get("borrowIncentive.object");return o===`${r.slice(2)}::incentive_account::IncentiveProgramLockKey`},Pe={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},qt={unstakeObligation:(a,e,t)=>a.moveCall(`${Pe.id}::user::unstake`,[Pe.incentivePools,Pe.incentiveAccounts,a.object(e),a.object(t),_c],[Wc(dp)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${Pe.id}::user::redeem_rewards`,[Pe.incentivePools,Pe.incentiveAccounts,a.object(e),a.object(t),_c],[Wc(n)])};var jc=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var Yo=class extends se{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(`${Uc}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`),n=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake`);return e&&(t||n)}get helperClaimLendingReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${Uc}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new W(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new W(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new W(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new W(e,this.transaction)}get helperBurnScoin(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new W(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new W(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new W(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new W(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new W(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new W(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new W(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new W(e,this.transaction)}decodeMigrateScoin(){return{txType:Mt.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:Mt.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Mt.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Bt(t,this.transaction).getAmountInput().reduce((o,r)=>o+r,0);return{txType:Mt.Other,type:"SupplyLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLending(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperRedeem.getNestedInputParam(2),n=new Bt(t,this.transaction).getAmountInput().reduce((o,r)=>o+r,0);return{txType:Mt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0));console.log({coinName:e});let t=this.helperBurnScoin.getNestedInputParam(1),n=new Bt(t,this.transaction).getAmountInput().reduce((o,r)=>o+r,0);return{txType:Mt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeDepositCollateral(){let e=this.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),t=this.helperDepositCollateral.getNestedInputParam(3),n=new Bt(t,this.transaction).getAmountInput().reduce((r,c)=>r+c,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Mt.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:Mt.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:Mt.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),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Mt.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:e,obligationKey:r,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),r=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:Mt.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:e,obligationKey:r,obligationId:o,veScaKey:t}}}decodeRepay(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperRepay.getNestedInputParam(3),n=new Bt(t,this.transaction).getAmountInput().reduce((r,c)=>r+c,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Mt.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:e}}}decodeRepayWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new Bt(n,this.transaction).getAmountInput().reduce((c,u)=>c+u,0),r=this.helperRepay.decodeSharedObjectId(1);return{txType:Mt.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:r,coinName:e,veScaKey:t}}}decodeStakeSpool(){let e;this.isCreateStakeAccountTransaction()||(e=this.helperStake.decodeOwnedObjectId(1));let t=0;if(this.helperBurnScoin.moveCall){let r=this.helperBurnScoin.getNestedInputParam(1);t=new Bt(r,this.transaction).getAmountInput().reduce((c,u)=>c+u,0)}if(this.helperStake.moveCall&&t===0){let r=this.helperStake.getNestedInputParam(2);t=new Bt(r,this.transaction).getAmountInput().reduce((c,u)=>c+u,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Mt.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:Mt.Other,type:"UnstakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeSupplyWithStakeSpool(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Bt(t,this.transaction).getAmountInput().reduce((r,c)=>r+c,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Mt.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let e=[];this.helperUnstakes.forEach(o=>{let r=o.decodeOwnedObjectId(1),c=o.decodeInputU64(2);e.push({id:r,coin:c})});let t=this.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new Bt(o,this.transaction).getAmountInput().reduce((r,c)=>r+c,0)}return{txType:Mt.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:e}}}decodeClaimReward(){let e=[],t=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let r=o.decodeOwnedObjectId(2),c=o.typeArg(0),u=this.utils.parseCoinNameFromType(c);e.push({stakeMarketCoinName:u,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(o=>{let r=o.decodeSharedObjectId(4),c=o.decodeOwnedObjectId(3),u=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:c,obligationKey:r,rewardCoinName:u})}),this.helperClaimBorrowReward.forEach(o=>{let r=o.decodeSharedObjectId(2),c=o.decodeOwnedObjectId(3),u=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:c,obligationKey:r,rewardCoinName:u})}),{txType:Mt.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as Li}from"@msafe/sui3-utils";var Zo=class extends se{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(t=>new W(t,this.transaction))}get helperBindReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new W(e,this.transaction)}decodeCreateReferralLink(){return{txType:Li.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Li.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:Li.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as Zt}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as fp}from"@scallop-io/sui-scallop-sdk";var ta=class extends se{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(u=>this.filterMoveCallCommands(u,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(u=>this.filterMoveCallCommands(u,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(u=>this.filterMoveCallCommands(u,`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`)),o=e.length>0&&t.length>0&&e.length===t.length,r=n.length>0;return this.commands.length===e.length+t.length+n.length&&(o||r)}async isTransferVeScaKey(){let e=this.commands.filter(d=>d.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(d=>d.$kind==="Input").map(({Input:d})=>d);if(n.length!==t.length)return!1;let o=new Set(n),r=this.inputs.filter((d,S)=>d.$kind==="Object"&&o.has(S)).map(d=>d.Object.ImmOrOwnedObject),c=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,u=jc(r.map(({objectId:d})=>d),50);for(let d=0;d<u.length;d++){let S=u[d];if((await this.scallopClient.scallopSuiKit.queryGetObjects(S,{showType:!0})).some(I=>I.type!==c))return!1}return r.length>0}get helperStakeMoreSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new W(e,this.transaction)}get helperStakeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new W(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new W(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new W(e,this.transaction)}get helperRenewExpired(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new W(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${fp}::user::unstake`));return new W(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new W(e,this.transaction)}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new W(t,this.transaction)}getVeScaObligationBindingHelpers(){let e=`${this.coreId.borrowIncentivePkg}::user::unstake_v2`,t=`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,n=`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`,o=[],r=0,c=0,u=0;return this.commands.forEach(d=>{this.filterMoveCallCommands(d,e)?(o.push({action:"unstake",helper:new W(d,this.transaction,r)}),r++):this.filterMoveCallCommands(d,t)?(o.push({action:"stake",helper:new W(d,this.transaction,c)}),c++):this.filterMoveCallCommands(d,n)&&(o.push({action:"deactivate",helper:new W(d,this.transaction,u)}),u++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:Zt.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new Bt(e,this.transaction).getAmountInput().reduce((x,P)=>x+P,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,c=[],u=[],d=[];this.helperOldUnstakeObligation.moveCall&&(c=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(u=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(d=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let S=!1,w=!1,I,C,k=[{condition:c,isOld:!0},{condition:u,isOld:!1},{condition:d,isOld:!1}];for(let x=0;x<k.length;x++)k[x].condition.length>1&&([C,I]=k[x].condition,S=!0,w=k[x].isOld);return{txType:Zt.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:I,obligationKey:C,veScaKey:o,isHaveRedeem:r,isObligationLocked:S,isOldBorrowIncentive:w}}}decodeExtendStakePeriod(){let e=this.helperExtendStakePeriod.decodeInputU64(4),t=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],r=[];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&&(r=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,u=!1,d,S,w=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let I=0;I<w.length;I++)w[I].condition.length>1&&([S,d]=w[I].condition,c=!0,u=w[I].isOld);return{txType:Zt.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:d,obligationKey:S,veScaKey:t,isObligationLocked:c,isOldBorrowIncentive:u}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new Bt(e,this.transaction).getAmountInput().reduce((k,x)=>k+x,0),o=[],r=[],c,u=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(c=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(u=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,S=!1,w,I,C=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:u,isOld:!1}];for(let k=0;k<C.length;k++)C[k].condition.length>1&&([I,w]=C[k].condition,d=!0,S=C[k].isOld);return{txType:Zt.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:c,unlockTime:t,obligationId:w,obligationKey:I,isOldBorrowIncentive:S,isObligationLocked:d}}}decodeStakeSca(){let e,t;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(e=this.helperStakeSca.getNestedInputParam(3),t=this.helperStakeSca.decodeInputU64(4)):e=this.helperStakeMoreSca.getNestedInputParam(4);let n=new Bt(e,this.transaction).getAmountInput().reduce((k,x)=>k+x,0),o=[],r=[],c,u=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(c=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(u=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,S=!1,w,I,C=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:u,isOld:!1}];for(let k=0;k<C.length;k++)C[k].condition.length>1&&([I,w]=C[k].condition,d=!0,S=C[k].isOld);return{txType:Zt.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:w,obligationKey:I,veScaKey:c,isObligationLocked:d,isOldBorrowIncentive:S}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:Zt.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:Zt.Other,type:"SplitVeSca",intentionData:t}}decodeVeScaObligationBindings(){let e=this.getVeScaObligationBindingHelpers(),t=(o,r)=>{switch(o){case"stake":return{veScaKey:r.decodeOwnedObjectId(9),obligationId:r.decodeSharedObjectId(4),obligationKey:r.decodeOwnedObjectId(3)};case"unstake":return{obligationId:r.decodeSharedObjectId(4),obligationKey:r.decodeOwnedObjectId(3)};case"deactivate":return{veScaKey:r.decodeOwnedObjectId(4),obligationId:r.decodeSharedObjectId(3)};default:throw new Error(`Invalid action ${o}`)}},n=e.map(({action:o,helper:r})=>({action:o,args:t(o,r)}));return{txType:Zt.Other,type:"VeScaObligationBindings",intentionData:{bindingDatas:n}}}decodeTransferVeScaKey(){let e=this.commands.filter(c=>c.$kind==="TransferObjects"),{objects:t}=e[0].TransferObjects,n=t.filter(c=>c.$kind==="Input").map(({Input:c})=>c);if(n.length!==t.length)return!1;let o=new Set(n),r=this.inputs.filter((c,u)=>c.$kind==="Object"&&o.has(u)).map(c=>c.Object.ImmOrOwnedObject);return{xType:Zt.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:r}}}};import hp from"sort-keys-recursive";var A=class{constructor(e){this.data=e}get application(){return"msafe-core"}serialize(){return JSON.stringify(hp(this.data))}isObligationLocked=async(e,t)=>{let n=await e.getObject({id:typeof t=="string"?t:t.objectId,options:{showContent:!0}}),o=!1;return n&&n?.data.content?.dataType==="moveObject"&&"lock_key"in n.data.content.fields&&(o=!!n.data.content.fields.lock_key),o};async buildTxWithRefreshObligation(e,t,n){let o=e.builder.createTxBlock();o.setSender(t.walletAddress);let{obligationId:r,obligationKey:c}=t;return await this.isObligationLocked(e.scallopSuiKit.client,r)?(await o.unstakeObligationQuick(r,c),await n(e,o,t),await o.stakeObligationWithVeScaQuick(r,c,t.veScaKey)):await n(e,o,t),o}};var ea=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:r,obligationId:c,obligationKey:u}=this.data,d=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:d,obligationId:c,obligationKey:u},async(w,I)=>{let C=await I.borrowQuick(+r,o,c,u);I.transferObjects([C],d)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var na=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:r,veScaKey:c,amount:u,coinName:d}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:r,veScaKey:c},async(w,I)=>{let C=await I.borrowQuick(+u,d,o,r);I.transferObjects([C],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var oa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:r,obligationKey:c,veScaKey:u,coinName:d,amount:S}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:r,obligationKey:c,veScaKey:u},async(I,C)=>{let k=C.claimReferralTicket(d),x=await C.borrowWithReferralQuick(+S,d,k,r,c);C.burnReferralTicket(k,d),C.transferObjects([x],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as gp}from"@mysten/sui/utils";var aa=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),r=await e.query.getLendings(void 0,t),c=await e.query.getObligations(t),u=Object.values(await e.query.getObligationAccounts(t)??[]),d=(()=>{let C=[...e.constants.whitelist.spool].map(k=>e.utils.parseCoinName(k));return Object.values(r??[]).filter(k=>!!k&&C.includes(k.coinName)).reduce((k,x)=>{let P=e.utils.parseMarketCoinName(x.coinName);return k[P]||(k[P]=0),k[P]+=x.availableClaimCoin,k},{})})(),S={};Object.entries(o).forEach(([C,k])=>{for(let x=0;x<k.length;x++){let P=k[x];if(!d[C])continue;let L=n.claim(P.id,C);S.sui?S.sui.push(L):S.sui=[L]}});let w=(()=>{let C={};return C.sui=Object.values(d).reduce((k,x)=>k+x,0),u.forEach(k=>{Object.values(k.borrowIncentives).forEach(x=>{x&&x.rewards.forEach(P=>{C[P.coinName]||(C[P.coinName]=0),C[P.coinName]?C[P.coinName]+=P.availableClaimCoin:C[P.coinName]=P.availableClaimCoin})})}),C})();if(c.length>0&&u.length>0)for(let C=0;C<u.length;C++){let k=u[C],x=!1,P=c.find(V=>V.id===k.obligationId)?.keyId,L={};if(P){if(Object.values(k.borrowIncentives).forEach(V=>{if(V){let Wt=V.rewards.filter(Rt=>{let Et=Rt.coinName;return Rt.availableClaimCoin>0&&!L[Et]});x=Wt.length>0,Wt.forEach(Rt=>{let Et=n.claimBorrowIncentive(k.obligationId,P,Rt.coinName);L[Rt.coinName]=!0,S[Rt.coinName]?S[Rt.coinName].push(Et):S[Rt.coinName]=[Et]})}}),w.sui>0){let V=qt.redeem_rewards(n,P,k.obligationId,gp);S.sui?S.sui.push(V):S.sui=[V]}if(x&&await Lc(e.query,k.obligationId)){n.unstakeObligation(k.obligationId,P);let Wt=await e.query.getBindedVeScaKey(k.obligationId);Wt?n.stakeObligationWithVesca(k.obligationId,P,Wt):n.stakeObligation(k.obligationId,P)}}}let I=(await Promise.all(Object.entries(S).map(async([C,k])=>{let x=k[0];if(k.length>1&&n.mergeCoins(x,k.slice(1)),C==="sui"){n.mergeCoins(n.gas,[x]);return}return await e.builder.utils.mergeSimilarCoins(n,x,e.utils.parseCoinType(C),t),x}))).filter(C=>!!C);return I.length>0&&n.transferObjects(I,t),n.txBlock}async build(e){return this.claimIncentiveRewards(e.scallopClient,e.account.address)}static fromData(e={}){return new a(e)}};var ra=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.depositCollateral(this.data.collateralCoinName,+this.data.amount,!1,this.data.obligationId)}static fromData(t){return new a(t)}};var ia=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:r,obligationId:c,rewardCoinName:u,veScaKey:d}=this.data,S=n.builder.createTxBlock();S.setSender(o);let w=qt.redeem_rewards(S,r,c,n.utils.parseCoinType(u));return S.transferObjects([w],o),await S.unstakeObligationQuick(c,r),d?await S.stakeObligationWithVeScaQuick(c,r,d):await S.stakeObligationQuick(c,r),S.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new a(t)}};var sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new a(t)}};var ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.openObligation(!1)}static fromData(t){return new a(t)}};var la=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:r,amount:c,obligationId:u,obligationKey:d}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:u,obligationKey:d},async(w,I)=>{await I.repayQuick(+c,r,u)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var ua=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:r,amount:c,obligationId:u,veScaKey:d}=this.data,S=n.builder.createTxBlock();S.setSender(o);let w=n.constants.whitelist.borrowing.has(r);return w&&await S.unstakeObligationQuick(u,void 0),await S.repayQuick(+c,r,u),w&&await S.stakeObligationWithVeScaQuick(u,void 0,d),S.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var ma=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.deposit(this.data.coinName,+this.data.amount,!1,t.account.address)}static fromData(t){return new a(t)}};var pa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new a(t)}};var da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async unstakeAndWithdraw(t,n,o){let r=t.builder.createTxBlock();r.setSender(o);let{stakeAccountId:c,amount:u,coinName:d}=this.data,S=[];for(let w=0;w<c.length;w++){let{id:I,coin:C}=c[w],k=t.utils.parseMarketCoinName(d),[x]=await r.unstakeQuick(C,k,I);if(x){let P=r.withdraw(x,d);S.push(P)}}if(u>0){let w=await r.withdrawQuick(u,d);S.push(w)}return S.length>1&&r.mergeCoins(S[0],S.slice(1)),r.transferObjects(S,o),r.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}txType;txSubType;async build(t){return t.scallopClient.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),!1,this.data.obligationId,this.data.obligationKey,t.account.address)}static fromData(t){return new a(t)}};var ha=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdraw(this.data.coinName,Number(this.data.amount),!1,t.account.address)}static fromData(t){return new a(t)}};var ga=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async bindReferral({account:t,scallopClient:n}){let o=t.address,r=n.builder.createTxBlock();return r.setSender(o),r.bindToReferral(this.data.veScaKey),r.txBlock}async build(t){return this.bindReferral(t)}static fromData(t){return new a(t)}};var ya=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:r}=this.data,c=t.address,u=n.builder.createTxBlock();u.setSender(c);let d=r.map(S=>n.utils.parseCoinNameFromType(S));return await u.claimReferralRevenueQuick(o,d),u.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new a(t)}};var ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async createReferralLink({account:t,scallopClient:n}){let o=t.address,r=n.builder.createTxBlock();r.setSender(o);let c=r.mintEmptyVeSca();return r.transferObjects([c],o),r.txBlock}async build(t){return this.createReferralLink(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as yp}from"@scallop-io/sui-scallop-sdk";var Sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:r,unlockTime:c,obligationId:u,obligationKey:d,isOldBorrowIncentive:S,isObligationLocked:w}=this.data,I=t.address,C=n.builder.createTxBlock();C.setSender(I);let k=await n.utils.selectCoins(o,yp,I),[x,P]=C.takeAmountFromCoins(k,o);return C.extendLockPeriod(r,c),C.extendLockAmount(r,x),C.transferObjects([P],I),!u||!d||(w&&(S?qt.unstakeObligation(C,u,d):C.unstakeObligation(u,d)),C.stakeObligationWithVesca(u,d,r)),C.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var Ta=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:r,unlockTime:c,obligationId:u,obligationKey:d,isObligationLocked:S,isOldBorrowIncentive:w}=this.data,I=n.builder.createTxBlock();return I.setSender(o),I.extendLockPeriod(r,c),u&&d&&(S&&(w?qt.unstakeObligation(I,d,u):I.unstakeObligation(u,d)),I.stakeObligationWithVesca(u,d,r)),I.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:r,sourceVeScaKey:c}=this.data,[u,d]=await Promise.all([n.getBindedObligationId(r),n.getBindedObligationId(c)]);u&&await t.unstakeObligationQuick(u),d&&await t.unstakeObligationQuick(d),o(t,r,c),u&&await t.stakeObligationWithVeScaQuick(u,void 0,r),d&&await t.stakeObligationWithVeScaQuick(d,void 0,c)}async build(t){let{scallopClient:n,account:{address:o}}=t,r=n.builder.createTxBlock();return r.setSender(o),await this.handleUnsubForKeys(r,n.query,async(c,u,d)=>{c.mergeVeSca(r.object(u),r.object(d))}),r.txBlock}static fromData(t){return new a(t)}};var Ia=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async redeemSca({account:t,scallopClient:n}){let{veScaKey:o}=this.data,r=t.address,c=n.builder.createTxBlock();return c.setSender(r),await c.redeemScaQuick(o),c.txBlock}async build(t){return this.redeemSca(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as bp}from"@scallop-io/sui-scallop-sdk";var Ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:r,unlockTime:c,veScaKey:u,isHaveRedeem:d,obligation:S,obligationKey:w,isObligationLocked:I,isOldBorrowIncentive:C}=this.data,k=n.builder.createTxBlock();if(k.setSender(o),d){let V=k.redeemSca(u);k.transferObjects([V],o)}let x=await n.builder.utils.selectCoins(r,bp,o),[P,L]=k.takeAmountFromCoins(x,r);return k.transferObjects([L],o),k.renewExpiredVeSca(u,P,c),!S||!w||(I&&(C?qt.unstakeObligation(k,w,S):k.unstakeObligation(S,w)),k.stakeObligationWithVesca(S,w,u)),k.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var ka=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:r,splitAmount:c}=this.data,u=await n.getBindedObligationId(r);u&&await t.unstakeObligationQuick(u),o(t,r,c.toString()),u&&await t.stakeObligationWithVeScaQuick(u,void 0,r)}async build(t){let{scallopClient:n,account:{address:o}}=t,r=n.builder.createTxBlock();return r.setSender(o),await this.handleUnsubForKeys(r,n.query,(c,u,d)=>{let S=c.splitVeSca(u,d.toString());c.transferObjects([S],o)}),r.txBlock}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as Sp}from"@scallop-io/sui-scallop-sdk";var va=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:r,isObligationLocked:c,isOldBorrowIncentive:u,obligationId:d,obligationKey:S,unlockTime:w,veScaKey:I}=this.data,C=n.builder.createTxBlock();C.setSender(o);let k=await n.utils.selectCoins(r,Sp,o),[x,P]=C.takeAmountFromCoins(k,r),L;return I?C.extendLockAmount(I,x):L=C.lockSca(x,w),d&&S&&(c&&(u?qt.unstakeObligation(C,S,d):C.unstakeObligation(d,S)),C.stakeObligationWithVesca(d,S,I||L)),I||C.transferObjects([L,P],o),C.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var xa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:r,coinName:c,stakeAccountId:u}=this.data,d=n.builder.createTxBlock();d.setSender(o);let S=await d.depositQuick(+r,c),w=n.utils.parseMarketCoinName(c);if(n.constants.whitelist.spool.has(w))return d.txBlock;let I=await n.query.getStakeAccounts(w,o),C=u||(I.length>0?I[0].id:void 0);if(C)await d.stakeQuick(S,w,C);else{let k=d.createStakeAccount(w);await d.stakeQuick(S,w,k),d.transferObjects([k],o)}return d.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var Da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;handleAction(t,{action:n,args:o}){switch(n){case"deactivate":return t.deactivateBoost(o.obligationId,o.veScaKey);case"stake":return t.stakeObligationWithVesca(o.obligationId,o.obligationKey,o.veScaKey);case"unstake":return t.unstakeObligation(o.obligationId,o.obligationKey);default:throw new Error("Invalid action")}}async build(t){let{scallopClient:n,account:{address:o}}=t,r=n.builder.createTxBlock();r.setSender(o);let{bindingDatas:c}=this.data;return c.forEach(u=>this.handleAction(r,u)),r.txBlock}static fromData(t){return new a(t)}};var Aa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{scallopClient:n,account:{address:o}}=t,r=n.builder.createTxBlock();r.setSender(o);let{veScaKeys:c}=this.data;return r.transferObjects(c.map(u=>r.objectRef(u)),r.pure.address(o)),r.txBlock}static fromData(t){return new a(t)}};var Oa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async withdrawUnlockedSca({account:t,scallopClient:n}){let{vescaKey:o}=this.data,r=t.address,c=n.builder.createTxBlock();return c.setSender(r),await c.redeemScaQuick(o),c.txBlock}async build(t){return this.withdrawUnlockedSca(t)}static fromData(t){return new a(t)}};var Ma=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new Ip({addressId:"67c44a103fe1b8c454eb9699",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??wp("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n),console.log("transaction",t);let r=new Yo(t,this.scallopClient),c=new Zo(t,this.scallopClient),u=new ta(t,this.scallopClient),d=r.decode()||c.decode()||await u.decode();if(!d)throw new Error("Unknown transaction type");return{txType:Tp.Other,txSubType:d.type,intentionData:d.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:r,intentionData:c}=e;await this.initScallopClient(n.address,t);let u;switch(r){case"SupplyLending":u=ma.fromData(c);break;case"WithdrawLending":u=ha.fromData(c);break;case"Borrow":u=ea.fromData(c);break;case"Repay":u=la.fromData(c);break;case"DepositCollateral":u=ra.fromData(c);break;case"WithdrawCollateral":u=fa.fromData(c);break;case"OpenObligation":u=ca.fromData(c);break;case"UnstakeSpool":u=pa.fromData(c);break;case"ClaimIncentiveReward":u=aa.fromData(c);break;case"BorrowWithBoost":u=na.fromData(c);break;case"StakeSca":u=va.fromData(c);break;case"ExtendStakePeriod":u=Ta.fromData(c);break;case"ExtendPeriodAndStakeMore":u=Sa.fromData(c);break;case"RenewExpStakePeriod":u=Ca.fromData(c);break;case"WithdrawStakedSca":u=Oa.fromData(c);break;case"SupplyAndStakeLending":u=xa.fromData(c);break;case"WithdrawAndUnstakeLending":u=da.fromData(c);break;case"RedeemSca":u=Ia.fromData(c);break;case"MigrateAndClaim":u=ia.fromData(c);break;case"BorrowWithReferral":u=oa.fromData(c);break;case"CreateReferralLink":u=ba.fromData(c);break;case"ClaimRevenueReferral":u=ya.fromData(c);break;case"BindReferral":u=ga.fromData(c);break;case"MigrateScoin":u=sa.fromData(c);break;case"RepayWithBoost":u=ua.fromData(c);break;case"MergeVeSca":u=wa.fromData(c);break;case"SplitVeSca":u=ka.fromData(c);break;case"VeScaObligationBindings":{u=Da.fromData(c);break}case"TransferVeScaKeys":{u=Aa.fromData(c);break}default:throw new Error("not implemented")}return u.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as ed}from"@msafe/sui3-utils";import{TransactionType as nn}from"@msafe/sui3-utils";import{normalizeStructTag as he}from"@mysten/sui/utils";import{fetchRegistryLiquidStakingInfoMap as Lp}from"@suilend/springsui-sdk/client";import{TransactionType as Np}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Wp,LENDING_MARKET_TYPE as _p,SuilendClient as ji}from"@suilend/sdk";import{TransactionType as Be}from"@msafe/sui3-utils";import{fromBase64 as qc,toHex as Fc}from"@mysten/bcs";import{normalizeStructTag as tn}from"@mysten/sui/utils";import{MAX_U64 as Re}from"@suilend/frontend-sui";import Kc from"bignumber.js";var Pa=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("lending_market::MintEvent"))},t=tn(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:Be.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(d=>d.type.includes("lending_market::RedeemEvent"))},n=tn(t.RedeemEvent.parsedJson.coin_type.name),o=t.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let r=e.withdraw_ctokens.MoveCall.arguments[4].Input,c=new Kc(Fc(qc(this.inputs[r].Pure.bytes)),16).toString(),u=c===Re.toString();return console.log("decodeWithdraw - isMax:",u,"inputIndex:",r,"inputValue:",c,"MAX_U64.toString():",Re.toString()),u&&(o=Re.toString()),{txType:Be.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(d=>d.type.includes("lending_market::BorrowEvent"))},n=tn(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 r=e.borrow_request.MoveCall.arguments[4].Input,c=new Kc(Fc(qc(this.inputs[r].Pure.bytes)),16).toString(),u=c===Re.toString();return console.log("decodeBorrow - isMax:",u,"inputIndex:",r,"inputValue:",c,"MAX_U64.toString():",Re.toString()),u&&(o=Re.toString()),{txType:Be.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=tn(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:Be.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],r=tn(o.parsedJson.coin_type.name),c=o.parsedJson.liquidity_amount;t[r]=`${+(t[r]??"0")+ +c}`}return console.log("Decoder.decodeClaimRewards",t),{txType:Be.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:Be.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as vp}from"@mysten/sui/transactions";import kp from"sort-keys-recursive";var Nt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(kp(this.data))}};var Ba=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("BorrowIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new vp;return await r.borrowAndSendToUser(o.address,c.id,u.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("BorrowIntention.fromData",t),new a(t)}};import{Transaction as Mp}from"@mysten/sui/transactions";import{normalizeStructTag as xp}from"@mysten/sui/utils";import{isSendPoints as Dp}from"@suilend/frontend-sui";import{Side as en}from"@suilend/sdk";import Ap from"bignumber.js";var Op=(a,e)=>{let t={[en.DEPOSIT]:[],[en.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[en.DEPOSIT,en.BORROW].forEach(o=>{let r=o===en.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,c=e.userRewardManagers.find(u=>u.poolRewardManagerId===r.id);c&&(t[o]=r.poolRewards.map((u,d)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(d),rewardCoinType:xp(u.coinType.name),side:o})).filter(u=>!Dp(u.rewardCoinType)&&!!c.rewards[Number(u.rewardIndex)]&&new Ap(c.rewards[Number(u.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},Ra=Op;var Ea=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("ClaimIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new Mp;return r.claimRewardsAndSendToUser(o.address,c.id,Ra(r,u),d),d}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as Pp}from"@mysten/sui/transactions";var Na=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("ClaimAndDepositIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new Pp;return r.claimRewardsAndDeposit(o.address,c.id,Ra(r,u),d),d}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Bp}from"@mysten/sui/transactions";var Wa=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;console.log("DepositIntention.build",n,o,r,c,u);let d=new Bp;return await r.depositIntoObligation(o.address,this.data.coinType,this.data.value,d,c?.id),d}static fromData(t){return console.log("DepositIntention.fromData",t),new a(t)}};import{Transaction as Rp}from"@mysten/sui/transactions";var _a=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("RepayIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new Rp;return await r.repayIntoObligation(o.address,u.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("RepayIntention.fromData",t),new a(t)}};import{Transaction as Ep}from"@mysten/sui/transactions";var La=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("WithdrawIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new Ep;return await r.withdrawAndSendToUser(o.address,c.id,u.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};var ja=async(a,e)=>{let t=await ji.initialize(Wp,_p,a),n=await ji.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(r=>ji.getObligation(r.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},Ua=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await ja(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",r,"utils:",this.utils,"suiClient:",n);let u=new Pa(t,r).decode();return{txType:Np.Other,txSubType:u.type,intentionData:u.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:r,account:c}=e;this.utils||(this.utils=await ja(r,c));let u;switch(n){case"deposit":u=Wa.fromData(o);break;case"withdraw":u=La.fromData(o);break;case"borrow":u=Ba.fromData(o);break;case"repay":u=_a.fromData(o);break;case"claim":u=Ea.fromData(o);break;case"claimAndDeposit":u=Na.fromData(o);break;default:throw new Error("not implemented")}let d=window.localStorage.getItem("obligationId"),S=this.utils.obligations?.find(I=>I.id===d)??this.utils.obligations?.[0],w=this.utils.obligationOwnerCaps?.find(I=>I.obligationId===S?.id);return u.build({network:t,suiClient:r,account:c,suilendClient:this.utils.suilendClient,obligationOwnerCap:w,obligation:S})}};var Ui=async(a,e)=>{let t=await ja(a,e),n=await Lp(a);return{...t,LIQUID_STAKING_INFO_MAP:n}};var qa=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isStakeTransaction())return this.decodeStake();if(this.isStakeAndDepositTransaction())return this.decodeStakeAndDeposit();if(this.isConvertTransaction())return this.decodeConvert();if(this.isConvertAndDepositTransaction())return this.decodeConvertAndDeposit();if(this.isUnstakeTransaction())return this.decodeUnstake();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintMoveCallCommands(){return!!this.getMoveCallCommand("mint")}hasRedeemMoveCallCommands(){return!!this.getMoveCallCommand("redeem")}isStakeTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isStakeAndDepositTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isConvertTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isConvertAndDepositTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isUnstakeTransaction(){return!this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}decodeStake(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=he(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:nn.Other,type:"stake",intentionData:{amount:n,outCoinType:t}}}decodeStakeAndDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=he(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:nn.Other,type:"stakeAndDeposit",intentionData:{amount:n,outCoinType:t}}}decodeConvert(){let e={RedeemEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::MintEvent"))},t=he(e.RedeemEvent.parsedJson.event.typename.name),n=he(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:nn.Other,type:"convert",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeConvertAndDeposit(){let e={RedeemEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::MintEvent"))},t=he(e.RedeemEvent.parsedJson.event.typename.name),n=he(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:nn.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=he(e.RedeemEvent.parsedJson.event.typename.name),n=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:nn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as qp}from"@mysten/sui/transactions";import{convertLstsAndSendToUser as Fp,LstClient as Vc}from"@suilend/springsui-sdk";import Up from"sort-keys-recursive";var Ft=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Up(this.data))}};var Fa=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("ConvertIntention.build",n,o,r,c,u,d);let S=await Vc.initialize(n,Object.values(c).find(C=>C.type===this.data.inCoinType)),w=await Vc.initialize(n,Object.values(c).find(C=>C.type===this.data.outCoinType)),I=new qp;return Fp(S,w,I,o.address,this.data.amount),I}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as Kp}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Vp,sendObligationToUser as $p}from"@suilend/sdk";import{convertLsts as Hp,LstClient as $c}from"@suilend/springsui-sdk";var Ka=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("ConvertAndDepositIntention.build",n,o,r,c,u,d);let S=await $c.initialize(n,Object.values(c).find(P=>P.type===this.data.inCoinType)),w=await $c.initialize(n,Object.values(c).find(P=>P.type===this.data.outCoinType)),I=new Kp,{obligationOwnerCapId:C,didCreate:k}=Vp(r,I,u),x=Hp(S,w,I,o.address,this.data.amount);return r.deposit(x,this.data.outCoinType,C,I),k&&$p(C,o.address,I),I}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Gp}from"@mysten/sui/transactions";import{LstClient as Qp}from"@suilend/springsui-sdk";var Va=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("StakeIntention.build",n,o,r,c,u,d);let S=await Qp.initialize(n,Object.values(c).find(I=>I.type===this.data.outCoinType)),w=new Gp;return S.mintAmountAndRebalanceAndSendToUser(w,o.address,this.data.amount),w}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as zp}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Jp,sendObligationToUser as Xp}from"@suilend/sdk";import{LstClient as Yp}from"@suilend/springsui-sdk";var $a=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("StakeAndDepositIntention.build",n,o,r,c,u,d);let S=await Yp.initialize(n,Object.values(c).find(x=>x.type===this.data.outCoinType)),w=new zp,{obligationOwnerCapId:I,didCreate:C}=Jp(r,w,u),k=S.mintAmountAndRebalance(w,o.address,this.data.amount);return r.deposit(k,this.data.outCoinType,I,w),C&&Xp(I,o.address,w),w}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Zp}from"@mysten/sui/transactions";import{LstClient as td}from"@suilend/springsui-sdk";var Ha=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("UnstakeIntention.build",n,o,r,c,u,d);let S=await td.initialize(n,Object.values(c).find(I=>I.type===this.data.inCoinType)),w=new Zp;return S.redeemAmountAndSendToUser(w,o.address,this.data.amount),w}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(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 Ui(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",r);let u=new qa(t,r).decode();return{txType:ed.Other,txSubType:u.type,intentionData:u.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:r,account:c}=e;this.utils||(this.utils=await Ui(r,c));let u;switch(n){case"stake":u=Va.fromData(o);break;case"stakeAndDeposit":u=$a.fromData(o);break;case"convert":u=Fa.fromData(o);break;case"convertAndDeposit":u=Ka.fromData(o);break;case"unstake":u=Ha.fromData(o);break;default:throw new Error("not implemented")}return u.build({network:t,suiClient:r,account:c,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 rd}from"@msafe/sui3-utils";import{TransactionType as Hc}from"@msafe/sui3-utils";var Qa=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isMintTransaction()){let e=this.getLiquidityChangeEvent("MintEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeMint(t)}if(this.isRedeemTransaction()){let e=this.getLiquidityChangeEvent("RedeemEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeRedeem(t)}throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(e){return this.simResult.events.find(t=>this.isLiquidityChangeEventType(t.type,e))}isLiquidityChangeEventType(e,t){return e.includes(t)}isMintTransaction(){return!!this.getMoveCallCommand("mint")}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(e){let{event:{sui_amount_in:t}}=e;return console.log("Decoder.decodeMint",t),{txType:Hc.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:Hc.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as od}from"@alphafi/stsui-sdk";var za=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,r={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},u=await new od(r).mint(o,n.address);return u.setGasBudget(1e8),u}static fromData(t){return console.log("MintIntention.fromData",t),new a(t)}};import{LST as ad}from"@alphafi/stsui-sdk";var Ja=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,r={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},u=await new ad(r).redeem(o,n.address);return u.setGasBudget(1e8),u}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var Xa=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 c=new Qa(t,o).decode();return{txType:rd.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{account:t}=e;console.log("StSui build transaction type",e.txSubType);let n;switch(e.txSubType){case"mint":n=za.fromData(e.intentionData);break;case"redeem":n=Ja.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as xd}from"@msafe/sui3-utils";import{TurbosSdk as Dd}from"turbos-clmm-sdk";import{TransactionType as Kt}from"@msafe/sui3-utils";import{bcs as Gc}from"@mysten/sui.js/bcs";import{normalizeStructTag as sd,normalizeSuiAddress as on}from"@mysten/sui.js/utils";import{BN as cd}from"turbos-clmm-sdk";var $t={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Ht={PackageId:"0xdee9"};var ld=(a,e,t,n)=>{if(a===1)switch(n.findIndex(c=>c===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(r=>r===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},Ya=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}get transactions(){return this.txb.blockData.transactions}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.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.target===e)}getMoveCallsTransaction(e){return e.every(t=>this.transactions.find(n=>n.kind==="MoveCall"&&n.target===t))}getSwapMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&e.includes(t.target))}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`)}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(`${$t.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${$t.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let e=this.transactions.find(k=>k.kind==="MoveCall"),t=0;this.swap2Layer.includes(e.target)&&(t=1);let n=ld(t,e.target,this.swap1Layer,this.swap2Layer),o=n.map((k,x)=>{let P=this.helper.decodeSharedObjectId(x),L=this.helper.decodeInputU128(4+x+t),V=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new cd(L.toString()));return{pool:P,a2b:k,nextTickIndex:V}}),r=n[0]||t===1?e.typeArguments[0]:e.typeArguments[1],c=t===1?e.typeArguments[4]:n[0]?e.typeArguments[1]:e.typeArguments[0],u=this.helper.decodeInputAddress(6+2*t),d=this.helper.decodeInputU64(7+2*t),S=this.helper.decodeInputBool(5+2*t),w=this.helper.decodeInputU64(2+t),I=this.helper.decodeInputU64(3+t),C=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:o[0].pool,a2b:o[0].a2b,amountSpecified:w}],address:u,amountSpecifiedIsInput:S});return{txType:Kt.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:c,address:u,amountA:S?w:I,amountB:S?I:w,amountSpecifiedIsInput:S,slippage:"0.1",deadline:d}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),o=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),c=this.helper.decodeInputBool(5),u=this.helper.decodeInputU32(6),d=this.helper.decodeInputBool(7),S=this.helper.decodeInputU64(13);return{txType:Kt.Other,type:"AddLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:n,amountB:o,tickLower:c?-r:r,tickUpper:d?-u:u,deadline:S}}}decodeIncreaseLiquidity(e){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),c=this.helper.decodeInputU64(9);return{txType:Kt.Other,type:"IncreaseLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:o,amountB:r,nft:n,deadline:c}}}decodeDecreaseLiquidity(e){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(2),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),c=this.helper.decodeInputU64(5),u=this.helper.decodeInputU64(6);return{txType:Kt.Other,type:"DecreaseLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:r,amountB:c,slippage:10,address:e,deadline:u}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(5),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),c=this.helper.decodeInputU64(6);return{txType:Kt.Other,type:"CollectFee",intentionData:{pool:e,address:n,collectAmountA:o,collectAmountB:r,nft:t,deadline:c}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(6),o=this.collectRewardHelper.map(c=>c.decodeInputU64(5)),r=this.helper.decodeInputU64(7);return{txType:Kt.Other,type:"CollectReward",intentionData:{pool:e,address:n,rewardAmounts:o,nft:t,deadline:r}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeSharedObjectId(2);return{txType:Kt.Other,type:"Burn",intentionData:{pool:e,nft:t}}}decodeRemoveLiquidity(e){console.log(this.helper,"decodeRemoveLiquidity this.helper");let t=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeSharedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),c=this.decreaseLiquidityHelper.decodeInputU64(5),u=this.decreaseLiquidityHelper.decodeInputU64(6),d=this.collectRewardHelper.map(I=>I.decodeInputU64(5)),S=this.collectFeeHelper.decodeInputU64(3)||0,w=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:Kt.Other,type:"RemoveLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:r,amountB:c,slippage:10,address:e,collectAmountA:S,collectAmountB:w,rewardAmounts:d,deadline:u}}}decodePrixClaim(){return{txType:Kt.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:Kt.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:Kt.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:Kt.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target!=="0x2::coin::zero"&&t.target!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero");return new ce(e,this.txb)}get collectRewardHelper(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target===`${this.config.PackageId}::position_manager::collect_reward`).map(t=>new ce(t,this.txb))}get collectFeeHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${this.config.PackageId}::position_manager::collect`);return new ce(e,this.txb)}get decreaseLiquidityHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${this.config.PackageId}::position_manager::decrease_liquidity`);return new ce(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${Ht.PackageId}::clob_v2::swap_exact_base_for_quote`);return new ce(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${Ht.PackageId}::clob_v2::swap_exact_quote_for_base`);return new ce(e,this.txb)}},ce=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU128(e){let t=this.decodePureArg(e,"u128");return Number(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU32(e){let t=this.decodePureArg(e,"u32");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return on(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.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 Gc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return on(e.value.Object.ImmOrOwned.objectId)}return on(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return on(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return on(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Gc.de(t,new Uint8Array(n))}typeArg(e){return sd(this.moveCall.typeArguments[e])}shortTypeArg(e){return this.moveCall.typeArguments[e]}txArg(e){return this.moveCall.arguments[e]}};import{TurbosSdk as ud}from"turbos-clmm-sdk";var Za=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ud(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,amountA:c,amountB:u,slippage:d,tickLower:S,tickUpper:w,deadline:I,txb:C}=this.data;return n.pool.addLiquidity({pool:o,slippage:d,address:r,amountA:c,amountB:u,tickLower:S,tickUpper:w,deadline:I,txb:C})}static fromData(t){return new a(t)}};import{TurbosSdk as md}from"turbos-clmm-sdk";var tr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new md(t.network.replace("sui:",""),t.suiClient),{pool:o,nft:r,txb:c}=this.data;return n.nft.burn({pool:o,nft:r,txb:c})}static fromData(t){return new a(t)}};import{TurbosSdk as pd}from"turbos-clmm-sdk";var er=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new pd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,nft:c,collectAmountA:u,collectAmountB:d,deadline:S,txb:w}=this.data;return n.pool.collectFee({pool:o,address:r,collectAmountA:u,collectAmountB:d,nft:c,deadline:S,txb:w})}static fromData(t){return new a(t)}};import{TurbosSdk as dd}from"turbos-clmm-sdk";var nr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new dd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,nft:c,rewardAmounts:u,deadline:d,txb:S}=this.data;return n.pool.collectReward({pool:o,address:r,rewardAmounts:u,nft:c,deadline:d,txb:S})}static fromData(t){return new a(t)}};import{TurbosSdk as fd}from"turbos-clmm-sdk";var or=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new fd(t.network.replace("sui:",""),t.suiClient),{fee:o,address:r,tickLower:c,tickUpper:u,sqrtPrice:d,slippage:S,coinTypeA:w,coinTypeB:I,amountA:C,amountB:k,deadline:x,txb:P}=this.data;return n.pool.createPool({fee:o,amountA:C,amountB:k,address:r,tickLower:c,tickUpper:u,sqrtPrice:d,slippage:S,coinTypeA:w,coinTypeB:I,deadline:x,txb:P})}static fromData(t){return new a(t)}};import{TurbosSdk as hd}from"turbos-clmm-sdk";var ar=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new hd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,amountA:c,amountB:u,slippage:d,nft:S,decreaseLiquidity:w,deadline:I,txb:C}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:d,address:r,amountA:c,amountB:u,nft:S,decreaseLiquidity:w,deadline:I,txb:C})}static fromData(t){return new a(t)}};import{TurbosSdk as gd}from"turbos-clmm-sdk";var rr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new gd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,amountA:c,amountB:u,slippage:d,nft:S,deadline:w,txb:I}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:d,address:r,amountA:c,amountB:u,nft:S,deadline:w,txb:I})}static fromData(t){return new a(t)}};import{TransactionBlock as yd}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as bd}from"@mysten/sui.js/utils";var ir=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new yd;return n.moveCall({target:`${$t.PackageId}::claim::claim`,typeArguments:[$t.turbosCoinType],arguments:[n.object($t.Claim),n.object(bd)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Sd}from"@mysten/sui.js/transactions";var sr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Sd;return n.moveCall({target:`${$t.PackageId}::claim::join`,typeArguments:[$t.turbosCoinType],arguments:[n.object($t.Claim)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Td}from"@mysten/sui.js/transactions";import{TurbosSdk as wd}from"turbos-clmm-sdk";var cr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new wd(t.network.replace("sui:",""),t.suiClient),o=new Td;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.nft.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(t){return new a(t)}};import{TurbosSdk as Id}from"turbos-clmm-sdk";var lr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new Id(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:r,coinTypeB:c,address:u,amountA:d,amountB:S,slippage:w,amountSpecifiedIsInput:I,deadline:C,txb:k}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:c,address:u,amountA:d,amountB:S,amountSpecifiedIsInput:I,slippage:w,deadline:C,txb:k})}static fromData(t){return new a(t)}};import{TurbosSdk as kd}from"turbos-clmm-sdk";import{TransactionBlock as Qc}from"@mysten/sui.js/transactions";import{normalizeSuiObjectId as zc}from"@mysten/sui.js/utils";import{unstable_getObjectId as Cd}from"turbos-clmm-sdk";var an=class{constructor(e){this.turbosSdk=e}async getCoinsData(e,t,n){let o=[],r;do r=await this.turbosSdk.provider.getCoins({owner:e,coinType:t,cursor:r?.nextCursor}),o.push(...r.data);while(r.hasNextPage);let c=[],u=0;return o.sort((d,S)=>Number(S.balance)-Number(d.balance)).some(d=>u>=n?!0:(u+=Number(d.balance),c.push(d),!1)),c}splitAndMergeCoin(e,t,n){if(!e||e.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(e[0].coinType)){let[c]=n.splitCoins(n.gas,[n.pure(t)]);return[c,void 0]}let o=n.object(e[0].coinObjectId);e.length>1&&n.mergeCoins(o,e.slice(1).map(c=>n.object(c.coinObjectId)));let[r]=n.splitCoins(o,[n.pure(t)]);return[r,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:`${Ht.PackageId}::custodian_v2::AccountCap`}});return t.data[0]?.data?Cd(t.data[0].data):void 0}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${Ht.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var Jc=89,Xc=1e6,Yc=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:r,turbosSdk:c}=a,u=new Qc,d=new an(c),S=await d.getCoinsData(r,t,o),[w,I]=d.splitAndMergeCoin(S,o,u);if(!w)throw new Error(`Not enough balance: ${t}`);let C=await d.IsAccountCap(r),k=C?u.object(C):d.createAccount(u),[x,P,L]=u.moveCall({typeArguments:[e,t],target:`${Ht.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[u.object(String(n)),u.pure(Jc),k,u.pure(o),u.object(zc("0x6")),w]});return I&&u.transferObjects([I],u.pure(r)),u.transferObjects([x],u.pure(r)),u.transferObjects([P],u.pure(r)),C||u.transferObjects([k],u.pure(r)),u.setSenderIfNotSet(r),u.setGasBudget(Xc),u},Zc=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:r,turbosSdk:c}=a,u=new Qc,d=new an(c),S=await d.getCoinsData(r,e,o),[w,I]=d.splitAndMergeCoin(S,o,u);if(!w)throw new Error(`Not enough balance: ${e}`);let C=await d.IsAccountCap(r),k=C?u.object(C):d.createAccount(u),x=d.zero(t,u),[P,L,V]=u.moveCall({typeArguments:[e,t],target:`${Ht.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[u.object(String(n)),u.pure(Jc),k,u.pure(o),w,x,u.object(zc("0x6"))]});return I&&u.transferObjects([I],u.pure(r)),u.transferObjects([P],u.pure(r)),u.transferObjects([L],u.pure(r)),C||u.transferObjects([k],u.pure(r)),u.setSenderIfNotSet(r),u.setGasBudget(Xc),u};var ur=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new kd(t.network.replace("sui:",""),t.suiClient);return await Zc({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as vd}from"turbos-clmm-sdk";var mr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new vd(t.network.replace("sui:",""),t.suiClient);return await Yc({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var pr=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(e){let t=new Dd(e.network.replace("sui:",""),e.suiClient),n=await t.contract.getConfig(),{transactionBlock:o,account:r}=e;console.log(e,"input");let u=await new Ya(o,t,n).decode(r.address);return{txType:xd.Other,txSubType:u.type,intentionData:u.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e,r;switch(console.log(e.intentionData,"intentionData"),e.txSubType){case"CreatePool":r=or.fromData(e.intentionData);break;case"AddLiquidity":r=Za.fromData(e.intentionData);break;case"IncreaseLiquidity":r=rr.fromData(e.intentionData);break;case"DecreaseLiquidity":r=ar.fromData(e.intentionData);break;case"RemoveLiquidity":r=cr.fromData(e.intentionData);break;case"CollectFee":r=er.fromData(e.intentionData);break;case"CollectReward":r=nr.fromData(e.intentionData);break;case"Burn":r=tr.fromData(e.intentionData);break;case"Swap":r=lr.fromData(e.intentionData);break;case"PrixJoin":r=sr.fromData(e.intentionData);break;case"PrixClaim":r=ir.fromData(e.intentionData);break;case"SwapExactBaseForQuote":r=ur.fromData(e.intentionData);break;case"SwapExactQuoteForBase":r=mr.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:n,network:o})}};import{TransactionType as Ed}from"@msafe/sui3-utils";import{TransactionType as qi}from"@msafe/sui3-utils";import{bcs as tl}from"@mysten/sui.js/bcs";import{normalizeStructTag as Md,normalizeSuiAddress as rn}from"@mysten/sui.js/utils";var Ad={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},Dt=Ad;var dr=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${Dt.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${Dt.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${Dt.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:qi.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:qi.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:qi.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(Dt.packageId));return new Fi(e,this.txb)}},Fi=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return rn(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return tl.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return rn(e.value.Object.ImmOrOwned.objectId)}return rn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return rn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return rn(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return tl.de(t,new Uint8Array(n))}typeArg(e){return Md(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as Pd}from"@mysten/sui.js/transactions";var fr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Pd,{ticketId:o}=this.data;return n.moveCall({target:`${Dt.packageId}::native_pool::burn_ticket`,arguments:[n.object(Dt.poolObjectId),n.object(Dt.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Bd}from"@mysten/sui.js/transactions";var hr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Bd,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${Dt.packageId}::native_pool::stake`,arguments:[n.object(Dt.poolObjectId),n.object(Dt.metadataObjectId),n.object(Dt.systemStateObjectId),r]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Rd}from"@mysten/sui.js/transactions";var gr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Rd,{amount:o}=this.data,r=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[c,...u]=r.filter(w=>w.coinType.split("::")[0]===Dt.certType.split("::")[0]),d=n.object(c.coinObjectId);u.length&&n.mergeCoins(d,u.map(w=>n.object(w.coinObjectId)));let S=n.splitCoins(n.object(c.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${Dt.packageId}::native_pool::unstake`,arguments:[n.object(Dt.poolObjectId),n.object(Dt.metadataObjectId),n.object(Dt.systemStateObjectId),S]}),n}static fromData(t){return new a(t)}};var yr=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new dr(t).decode();return{txType:Ed.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=hr.fromData(e.intentionData);break;case"UnStake":o=gr.fromData(e.intentionData);break;case"ClaimTicket":o=fr.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as $d}from"@msafe/sui3-utils";import{asIntN as el}from"@cetusprotocol/common-sdk";import{TransactionType as ge}from"@msafe/sui3-utils";import{fromBase64 as sn}from"@mysten/bcs";import{bcs as cn}from"@mysten/sui/bcs";var br=class{constructor(e){this.transaction=e}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();throw new Error("Unknown transaction type")}decodeOpenPositionTx(){let e=this.getMoveCallCommand("open_position"),t=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:ge.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(el(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(el(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:ge.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:ge.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:ge.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:ge.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:ge.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:ge.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}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")}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(sn(this.inputs[e].Pure.bytes))))}getU64(e){return cn.u64().parse(Uint8Array.from(sn(this.inputs[e].Pure.bytes)))}getU128(e){return cn.u128().parse(Uint8Array.from(sn(this.inputs[e].Pure.bytes)))}getBoolean(e){return cn.bool().parse(Uint8Array.from(sn(this.inputs[e].Pure.bytes)))}getAddress(e){return cn.Address.parse(Uint8Array.from(sn(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as Ld}from"@msafe/sui3-utils";import{BN as ye,ClmmPoolUtil as _d}from"@firefly-exchange/library-sui";import{SuiClient as Nd}from"@firefly-exchange/library-sui";import{OnChainCalls as Wd}from"@firefly-exchange/library-sui/dist/src/spot";var nl={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x406f52151e7dd65addd93b0bdad7989e82aec20c3ae6971954a5140f14a59e4b"}},ue=(a,e)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new Nd({url:nl.rpc});return new Wd(t,nl.objects,{address:e.address,isUIWallet:!1})};var Pt=class{static async OpenPosition(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool),c=this.prototype.buildLiqInput(r,{...e,slippage:0});return await o.openPositionWithFixedAmount(r,e.lowerTick,e.upperTick,c,{returnTx:!0,sender:t.address})}static async provideLiquidity(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool),c=this.prototype.buildLiqInput(r,e);return await o.provideLiquidityWithFixedAmount(r,e.position,c,{returnTx:!0,sender:t.address})}static async removeLiquidity(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return await o.removeLiquidity(r,e.position,{liquidityAmount:new ye(e.liquidity),tokenMaxA:new ye(e.maxAmountTokenA),tokenMaxB:new ye(e.maxAmountTokenB)},{returnTx:!0,sender:t.address})}static async closePosition(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return await o.closePosition(r,e.position,{returnTx:!0,sender:t.address})}static async collectRewards(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return await o.collectRewards(r,e.position,{rewardCoinsType:e.collectRewardTokens,returnTx:!0,sender:t.address})}static async collectFee(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return await o.collectFee(r,e.position,{returnTx:!0,sender:t.address})}static async collectRewardsAndFee(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return console.log(e.position),await o.collectFeeAndRewards(r,e.position,{returnTx:!0,sender:t.address})}buildLiqInput(e,t){return{..._d.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new ye(t.tokenAmount),t.isTokenAFixed,!0,0,new ye(e.current_sqrt_price)),tokenMaxA:new ye(t.maxAmountTokenA),tokenMaxB:new ye(t.maxAmountTokenB)}}};var Sr=class a extends v{constructor(t){super(t);this.data=t}txType=Ld.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as jd}from"@msafe/sui3-utils";var Tr=class a extends v{constructor(t){super(t);this.data=t}txType=jd.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ud}from"@msafe/sui3-utils";var wr=class a extends v{constructor(t){super(t);this.data=t}txType=Ud.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as qd}from"@msafe/sui3-utils";var Ir=class a extends v{constructor(t){super(t);this.data=t}txType=qd.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Fd}from"@msafe/sui3-utils";var Cr=class a extends v{constructor(t){super(t);this.data=t}txType=Fd.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Kd}from"@msafe/sui3-utils";var kr=class a extends v{constructor(t){super(t);this.data=t}txType=Kd.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Vd}from"@msafe/sui3-utils";var vr=class a extends v{constructor(t){super(t);this.data=t}txType=Vd.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var xr=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(e){console.log("Bluefin helper deserialize input: ",e);let{transaction:t}=e,o=new br(t).decode();return{txType:$d.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.txSubType);let r;switch(e.txSubType){case"OpenPosition":r=Cr.fromData(e.intentionData);break;case"ProvideLiquidity":r=kr.fromData(e.intentionData);break;case"RemoveLiquidity":r=vr.fromData(e.intentionData);break;case"ClosePosition":r=Sr.fromData(e.intentionData);break;case"CollectFee":r=Tr.fromData(e.intentionData);break;case"CollectRewards":r=wr.fromData(e.intentionData);break;case"CollectRewardsAndFee":r=Ir.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:n,network:o})}};import{TransactionType as df}from"@msafe/sui3-utils";import{MmtSDK as Yd}from"@mmt-finance/clmm-sdk";import{Transaction as Zd}from"@mysten/sui/transactions";var R=yl(al());import{convertI32ToSigned as ln,TickMath as rl}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";var Hd="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Gt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Gd=async({suiClient:a,address:e,type:t})=>{let n,o=[],r=0;do{try{let c=await a.getCoins({owner:e,coinType:t,cursor:n,limit:50});o=o.concat(c.data),n=c.nextCursor,(!c.hasNextPage||r===8)&&(n=null)}catch(c){console.log(c),n=null}r++}while(n!==null);return o},Qd=(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")},zd=(a,e,t,n)=>{if(a===Hd){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=Qd(t,e);o.length>1&&n.mergeCoins(n.object(o[0]),o.slice(1).map(c=>n.object(c)));let[r]=n.splitCoins(n.object(o[0]),[n.pure.u64(t)]);return r}};async function Ee(a,e,t,n,o){let r=await Gd({suiClient:a.rpcClient,address:e,type:t});return zd(Gt(t),r.map(u=>({balance:BigInt(u.balance),objectId:u.coinObjectId})),n,o)}function N(a,e,t){let n=a.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}function Jd(a){let e;return a&1?e=new R.default("79232123823359799118286999567"):e=new R.default("79228162514264337593543950336"),a&2&&(e=N(e.mul(new R.default("79236085330515764027303304731")),96,256)),a&4&&(e=N(e.mul(new R.default("79244008939048815603706035061")),96,256)),a&8&&(e=N(e.mul(new R.default("79259858533276714757314932305")),96,256)),a&16&&(e=N(e.mul(new R.default("79291567232598584799939703904")),96,256)),a&32&&(e=N(e.mul(new R.default("79355022692464371645785046466")),96,256)),a&64&&(e=N(e.mul(new R.default("79482085999252804386437311141")),96,256)),a&128&&(e=N(e.mul(new R.default("79736823300114093921829183326")),96,256)),a&256&&(e=N(e.mul(new R.default("80248749790819932309965073892")),96,256)),a&512&&(e=N(e.mul(new R.default("81282483887344747381513967011")),96,256)),a&1024&&(e=N(e.mul(new R.default("83390072131320151908154831281")),96,256)),a&2048&&(e=N(e.mul(new R.default("87770609709833776024991924138")),96,256)),a&4096&&(e=N(e.mul(new R.default("97234110755111693312479820773")),96,256)),a&8192&&(e=N(e.mul(new R.default("119332217159966728226237229890")),96,256)),a&16384&&(e=N(e.mul(new R.default("179736315981702064433883588727")),96,256)),a&32768&&(e=N(e.mul(new R.default("407748233172238350107850275304")),96,256)),a&65536&&(e=N(e.mul(new R.default("2098478828474011932436660412517")),96,256)),a&131072&&(e=N(e.mul(new R.default("55581415166113811149459800483533")),96,256)),a&262144&&(e=N(e.mul(new R.default("38992368544603139932233054999993551")),96,256)),N(e,32,256)}function Xd(a){let e=Math.abs(a),t;return e&1?t=new R.default("18445821805675392311"):t=new R.default("18446744073709551616"),e&2&&(t=N(t.mul(new R.default("18444899583751176498")),64,256)),e&4&&(t=N(t.mul(new R.default("18443055278223354162")),64,256)),e&8&&(t=N(t.mul(new R.default("18439367220385604838")),64,256)),e&16&&(t=N(t.mul(new R.default("18431993317065449817")),64,256)),e&32&&(t=N(t.mul(new R.default("18417254355718160513")),64,256)),e&64&&(t=N(t.mul(new R.default("18387811781193591352")),64,256)),e&128&&(t=N(t.mul(new R.default("18329067761203520168")),64,256)),e&256&&(t=N(t.mul(new R.default("18212142134806087854")),64,256)),e&512&&(t=N(t.mul(new R.default("17980523815641551639")),64,256)),e&1024&&(t=N(t.mul(new R.default("17526086738831147013")),64,256)),e&2048&&(t=N(t.mul(new R.default("16651378430235024244")),64,256)),e&4096&&(t=N(t.mul(new R.default("15030750278693429944")),64,256)),e&8192&&(t=N(t.mul(new R.default("12247334978882834399")),64,256)),e&16384&&(t=N(t.mul(new R.default("8131365268884726200")),64,256)),e&32768&&(t=N(t.mul(new R.default("3584323654723342297")),64,256)),e&65536&&(t=N(t.mul(new R.default("696457651847595233")),64,256)),e&131072&&(t=N(t.mul(new R.default("26294789957452057")),64,256)),e&262144&&(t=N(t.mul(new R.default("37481735321082")),64,256)),t}var Dr=(a,e,t)=>{let n=ln(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default(Jd(n)):new R.default(Xd(n))},il=async(a,e,t,n,o,r,c,u,d)=>{let S=Dr(ln(u),r.tickSpacing),w=Dr(ln(d),r.tickSpacing),I=BigInt(Math.ceil(Number(n)*10**r.tokenX.decimals)),C=BigInt(Math.ceil(Number(o)*10**r.tokenY.decimals)),k,x;Number(n)?k=await Ee(a,t,Gt(r.tokenX.coinType),I,e):[k]=e.moveCall({target:"0x2::coin::zero",typeArguments:[r.tokenX.coinType],arguments:[]}),Number(o)?x=await Ee(a,t,Gt(r.tokenY.coinType),C,e):[x]=e.moveCall({target:"0x2::coin::zero",typeArguments:[r.tokenY.coinType],arguments:[]});let P={objectId:c,tokenXType:r.tokenXType,tokenYType:r.tokenYType,tickSpacing:r.tickSpacing},L=a.Position.openPosition(e,P,S.toString(),w.toString());a.Pool.addLiquidity(e,P,L,k,x,BigInt(0),BigInt(0),t),e.transferObjects([L],e.pure.address(t))},sl=async(a,e,t,n,o,r,c,u,d)=>{try{let S=BigInt(Math.ceil(Number(o)*10**(r?c.tokenX.decimals:c.tokenY.decimals))),w=r?c.tokenX.coinType:c.tokenY.coinType;w=Gt(w);let I=await Ee(a,n,w,S,e),C={objectId:c.objectId,tokenXType:Gt(c.tokenX.coinType),tokenYType:Gt(c.tokenY.coinType),tickSpacing:c.tickSpacing},k=Dr(ln(u),c.tickSpacing),x=Dr(ln(d),c.tickSpacing),P=a.Position.openPosition(e,C,k.toString(),x.toString()),V=(await t.getObject({id:c.objectId,options:{showContent:!0}}))?.data?.content?.fields?.sqrt_price??c.currentSqrtPrice,Wt=rl.sqrtPriceX64ToPrice(new R.default(V?.toString()),c.tokenX.decimals,c.tokenY.decimals),Rt=rl.priceToSqrtPriceX64(Wt.mul(r?.99:1.01),c.tokenX.decimals,c.tokenY.decimals);await a.Pool.addLiquiditySingleSided(e,C,P,I,BigInt(0),BigInt(0),r,n,BigInt(Rt.toString())),e.transferObjects([P],e.pure.address(n))}catch(S){console.error(S)}};var Ar=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Yd.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:r,amountB:c,pool:u,selectedLowTick:d,selectedHighTick:S}=n,w=new Zd;return await il(t,w,o,r,c,u,u.objectId,d,S),w}static fromData(t){return new a(t)}};import{MmtSDK as tf}from"@mmt-finance/clmm-sdk";import{Transaction as ef}from"@mysten/sui/transactions";var Or=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=tf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:r,isTokenX:c,pool:u,selectedLowTick:d,selectedHighTick:S}=n,w=new ef;return await sl(t,w,t.rpcClient,o,r,c,u,d,S),w}static fromData(t){return new a(t)}};import{MmtSDK as nf}from"@mmt-finance/clmm-sdk";import{Transaction as of}from"@mysten/sui/transactions";var Ne=(a,e,t,n,o)=>{let r={objectId:n.objectId,tokenXType:n.tokenXType,tokenYType:n.tokenYType};(n?.rewarders?.length??0)>0&&a.Pool.collectAllRewards(o,r,n.rewarders,t.objectId,e),a.Pool.collectFee(o,n,t.objectId,e)};var Mr=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=nf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,positions:r,pools:c}=n,u=new of;for(let d of r){let S=c.find(w=>w.objectId===d.poolId);Ne(t,o,d,S,u)}return u}static fromData(t){return new a(t)}};import{MmtSDK as af}from"@mmt-finance/clmm-sdk";import{Transaction as rf}from"@mysten/sui/transactions";var Pr=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=af.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:r,pool:c}=n,u=new rf;return Ne(t,o,r,c,u),u}static fromData(t){return new a(t)}};import{MmtSDK as sf}from"@mmt-finance/clmm-sdk";import{Transaction as cf}from"@mysten/sui/transactions";import lf from"bignumber.js";var Br=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=sf.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:r,address:c,withdrawPercentage:u}=n,d=new cf,S=o.tokenX.coinType,w=o.tokenY.coinType,I={objectId:o.objectId,tokenXType:S,tokenYType:w},C=BigInt(u===100?r.liquidity:new lf(r.liquidity).multipliedBy(u/100).toFixed(0));return t.Pool.removeLiquidity(d,I,r.objectId,C,BigInt(0),BigInt(0),c),Ne(t,c,r,o,d),u===100&&t.Position.closePosition(d,r.objectId),d}static fromData(t){return new a(t)}};import{MmtSDK as mf}from"@mmt-finance/clmm-sdk";import{Transaction as pf}from"@mysten/sui/transactions";import{mappedMmtV3Pool as uf}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var cl=async(a,e,t,n,o,r)=>{let c=BigInt(Math.ceil(Number(n)*10**t.decimals)),u=await Ee(a,o,Gt(t.coinType),c,r),d=t.coinType;for(let S=0;S<e.length;S+=1){let{objectId:w,tokenX:I,tokenY:C,isStable:k}=e[S],{id:x,isReverse:P}=uf[w]||{id:w,isReverse:!1},L=Gt(I.coinType)===Gt(d);L=P?!L:L;let V=P?C.coinType:I.coinType,Wt=P?I.coinType:C.coinType,Rt=a.Pool.swap(r,{objectId:x,tokenXType:V,tokenYType:Wt,isStable:k},c,u,L,void 0);r.transferObjects([u],r.pure.address(o)),u=Rt,d=L?Wt:V,[c]=r.moveCall({target:"0x2::coin::value",typeArguments:[d],arguments:[u]})}r.transferObjects([u],r.pure.address(o))};var Rr=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=mf.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:r,amountIn:c,address:u}=n,d=new pf;return await cl(t,o,r,c,u,d),d}static fromData(t){return new a(t)}};var Er=class{application="mmt-dex";supportSDK="@mysten/sui";async deserialize(e){let{appContext:t}=e;return{txType:df.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=Rr.fromData(e.intentionData);break;case"AddLiquidity":t=Ar.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=Or.fromData(e.intentionData);break;case"ClaimRewards":t=Pr.fromData(e.intentionData);break;case"ClaimAllRewards":t=Mr.fromData(e.intentionData);break;case"RemoveLiquidity":t=Br.fromData(e.intentionData);break;default:throw new Error("not implemented")}return t.build()}};var qE=Xo.fromHelpers([new _o,new Go,new Eo,new Qo,new so,new pr,new Er,new Ma,new yr,new _n,new Ua,new Ga,new Sn,new xr,new Xa]);export{qE as appHelpers};
1
+ var ll=Object.create;var ni=Object.defineProperty;var ul=Object.getOwnPropertyDescriptor;var ml=Object.getOwnPropertyNames;var pl=Object.getPrototypeOf,dl=Object.prototype.hasOwnProperty;var fl=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var hl=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),ls=(a,e)=>{for(var t in e)ni(a,t,{get:e[t],enumerable:!0})},gl=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ml(e))!dl.call(a,o)&&o!==t&&ni(a,o,{get:()=>e[o],enumerable:!(n=ul(e,o))||n.enumerable});return a};var yl=(a,e,t)=>(t=a!=null?ll(pl(a)):{},gl(e||!a||!a.__esModule?ni(t,"default",{value:a,enumerable:!0}):t,a));var al=hl((ol,Ki)=>{"use strict";(function(a,e){"use strict";function t(y,i){if(!y)throw new Error(i||"Assertion failed")}function n(y,i){y.super_=i;var l=function(){};l.prototype=i.prototype,y.prototype=new l,y.prototype.constructor=y}function o(y,i,l){if(o.isBN(y))return y;this.negative=0,this.words=null,this.length=0,this.red=null,y!==null&&((i==="le"||i==="be")&&(l=i,i=10),this._init(y||0,i||10,l||"be"))}typeof a=="object"?a.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var r;try{typeof window<"u"&&typeof window.Buffer<"u"?r=window.Buffer:r=fl("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,l){return i.cmp(l)>0?i:l},o.min=function(i,l){return i.cmp(l)<0?i:l},o.prototype._init=function(i,l,m){if(typeof i=="number")return this._initNumber(i,l,m);if(typeof i=="object")return this._initArray(i,l,m);l==="hex"&&(l=16),t(l===(l|0)&&l>=2&&l<=36),i=i.toString().replace(/\s+/g,"");var p=0;i[0]==="-"&&(p++,this.negative=1),p<i.length&&(l===16?this._parseHex(i,p,m):(this._parseBase(i,l,p),m==="le"&&this._initArray(this.toArray(),l,m)))},o.prototype._initNumber=function(i,l,m){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),m==="le"&&this._initArray(this.toArray(),l,m)},o.prototype._initArray=function(i,l,m){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 p=0;p<this.length;p++)this.words[p]=0;var h,b,T=0;if(m==="be")for(p=i.length-1,h=0;p>=0;p-=3)b=i[p]|i[p-1]<<8|i[p-2]<<16,this.words[h]|=b<<T&67108863,this.words[h+1]=b>>>26-T&67108863,T+=24,T>=26&&(T-=26,h++);else if(m==="le")for(p=0,h=0;p<i.length;p+=3)b=i[p]|i[p+1]<<8|i[p+2]<<16,this.words[h]|=b<<T&67108863,this.words[h+1]=b>>>26-T&67108863,T+=24,T>=26&&(T-=26,h++);return this._strip()};function c(y,i){var l=y.charCodeAt(i);if(l>=48&&l<=57)return l-48;if(l>=65&&l<=70)return l-55;if(l>=97&&l<=102)return l-87;t(!1,"Invalid character in "+y)}function u(y,i,l){var m=c(y,l);return l-1>=i&&(m|=c(y,l-1)<<4),m}o.prototype._parseHex=function(i,l,m){this.length=Math.ceil((i.length-l)/6),this.words=new Array(this.length);for(var p=0;p<this.length;p++)this.words[p]=0;var h=0,b=0,T;if(m==="be")for(p=i.length-1;p>=l;p-=2)T=u(i,l,p)<<h,this.words[b]|=T&67108863,h>=18?(h-=18,b+=1,this.words[b]|=T>>>26):h+=8;else{var f=i.length-l;for(p=f%2===0?l+1:l;p<i.length;p+=2)T=u(i,l,p)<<h,this.words[b]|=T&67108863,h>=18?(h-=18,b+=1,this.words[b]|=T>>>26):h+=8}this._strip()};function d(y,i,l,m){for(var p=0,h=0,b=Math.min(y.length,l),T=i;T<b;T++){var f=y.charCodeAt(T)-48;p*=m,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<m,"Invalid character"),p+=h}return p}o.prototype._parseBase=function(i,l,m){this.words=[0],this.length=1;for(var p=0,h=1;h<=67108863;h*=l)p++;p--,h=h/l|0;for(var b=i.length-m,T=b%p,f=Math.min(b,b-T)+m,s=0,g=m;g<f;g+=p)s=d(i,g,g+p,l),this.imuln(h),this.words[0]+s<67108864?this.words[0]+=s:this._iaddn(s);if(T!==0){var D=1;for(s=d(i,g,i.length,l),g=0;g<T;g++)D*=l;this.imuln(D),this.words[0]+s<67108864?this.words[0]+=s:this._iaddn(s)}this._strip()},o.prototype.copy=function(i){i.words=new Array(this.length);for(var l=0;l<this.length;l++)i.words[l]=this.words[l];i.length=this.length,i.negative=this.negative,i.red=this.red};function S(y,i){y.words=i.words,y.length=i.length,y.negative=i.negative,y.red=i.red}if(o.prototype._move=function(i){S(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")]=w}catch{o.prototype.inspect=w}else o.prototype.inspect=w;function w(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var I=["","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(i,l){i=i||10,l=l|0||1;var m;if(i===16||i==="hex"){m="";for(var p=0,h=0,b=0;b<this.length;b++){var T=this.words[b],f=((T<<p|h)&16777215).toString(16);h=T>>>24-p&16777215,p+=2,p>=26&&(p-=26,b--),h!==0||b!==this.length-1?m=I[6-f.length]+f+m:m=f+m}for(h!==0&&(m=h.toString(16)+m);m.length%l!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}if(i===(i|0)&&i>=2&&i<=36){var s=C[i],g=k[i];m="";var D=this.clone();for(D.negative=0;!D.isZero();){var O=D.modrn(g).toString(i);D=D.idivn(g),D.isZero()?m=O+m:m=I[s-O.length]+O+m}for(this.isZero()&&(m="0"+m);m.length%l!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}t(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var 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)},r&&(o.prototype.toBuffer=function(i,l){return this.toArrayLike(r,i,l)}),o.prototype.toArray=function(i,l){return this.toArrayLike(Array,i,l)};var x=function(i,l){return i.allocUnsafe?i.allocUnsafe(l):new i(l)};o.prototype.toArrayLike=function(i,l,m){this._strip();var p=this.byteLength(),h=m||Math.max(1,p);t(p<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var b=x(i,h),T=l==="le"?"LE":"BE";return this["_toArrayLike"+T](b,p),b},o.prototype._toArrayLikeLE=function(i,l){for(var m=0,p=0,h=0,b=0;h<this.length;h++){var T=this.words[h]<<b|p;i[m++]=T&255,m<i.length&&(i[m++]=T>>8&255),m<i.length&&(i[m++]=T>>16&255),b===6?(m<i.length&&(i[m++]=T>>24&255),p=0,b=0):(p=T>>>24,b+=2)}if(m<i.length)for(i[m++]=p;m<i.length;)i[m++]=0},o.prototype._toArrayLikeBE=function(i,l){for(var m=i.length-1,p=0,h=0,b=0;h<this.length;h++){var T=this.words[h]<<b|p;i[m--]=T&255,m>=0&&(i[m--]=T>>8&255),m>=0&&(i[m--]=T>>16&255),b===6?(m>=0&&(i[m--]=T>>24&255),p=0,b=0):(p=T>>>24,b+=2)}if(m>=0)for(i[m--]=p;m>=0;)i[m--]=0},Math.clz32?o.prototype._countBits=function(i){return 32-Math.clz32(i)}:o.prototype._countBits=function(i){var l=i,m=0;return l>=4096&&(m+=13,l>>>=13),l>=64&&(m+=7,l>>>=7),l>=8&&(m+=4,l>>>=4),l>=2&&(m+=2,l>>>=2),m+l},o.prototype._zeroBits=function(i){if(i===0)return 26;var l=i,m=0;return l&8191||(m+=13,l>>>=13),l&127||(m+=7,l>>>=7),l&15||(m+=4,l>>>=4),l&3||(m+=2,l>>>=2),l&1||m++,m},o.prototype.bitLength=function(){var i=this.words[this.length-1],l=this._countBits(i);return(this.length-1)*26+l};function P(y){for(var i=new Array(y.bitLength()),l=0;l<i.length;l++){var m=l/26|0,p=l%26;i[l]=y.words[m]>>>p&1}return i}o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var i=0,l=0;l<this.length;l++){var m=this._zeroBits(this.words[l]);if(i+=m,m!==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 l=0;l<i.length;l++)this.words[l]=this.words[l]|i.words[l];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 l;this.length>i.length?l=i:l=this;for(var m=0;m<l.length;m++)this.words[m]=this.words[m]&i.words[m];return this.length=l.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 l,m;this.length>i.length?(l=this,m=i):(l=i,m=this);for(var p=0;p<m.length;p++)this.words[p]=l.words[p]^m.words[p];if(this!==l)for(;p<l.length;p++)this.words[p]=l.words[p];return this.length=l.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 l=Math.ceil(i/26)|0,m=i%26;this._expand(l),m>0&&l--;for(var p=0;p<l;p++)this.words[p]=~this.words[p]&67108863;return m>0&&(this.words[p]=~this.words[p]&67108863>>26-m),this._strip()},o.prototype.notn=function(i){return this.clone().inotn(i)},o.prototype.setn=function(i,l){t(typeof i=="number"&&i>=0);var m=i/26|0,p=i%26;return this._expand(m+1),l?this.words[m]=this.words[m]|1<<p:this.words[m]=this.words[m]&~(1<<p),this._strip()},o.prototype.iadd=function(i){var l;if(this.negative!==0&&i.negative===0)return this.negative=0,l=this.isub(i),this.negative^=1,this._normSign();if(this.negative===0&&i.negative!==0)return i.negative=0,l=this.isub(i),i.negative=1,l._normSign();var m,p;this.length>i.length?(m=this,p=i):(m=i,p=this);for(var h=0,b=0;b<p.length;b++)l=(m.words[b]|0)+(p.words[b]|0)+h,this.words[b]=l&67108863,h=l>>>26;for(;h!==0&&b<m.length;b++)l=(m.words[b]|0)+h,this.words[b]=l&67108863,h=l>>>26;if(this.length=m.length,h!==0)this.words[this.length]=h,this.length++;else if(m!==this)for(;b<m.length;b++)this.words[b]=m.words[b];return this},o.prototype.add=function(i){var l;return i.negative!==0&&this.negative===0?(i.negative=0,l=this.sub(i),i.negative^=1,l):i.negative===0&&this.negative!==0?(this.negative=0,l=i.sub(this),this.negative=1,l):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 l=this.iadd(i);return i.negative=1,l._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(i),this.negative=1,this._normSign();var m=this.cmp(i);if(m===0)return this.negative=0,this.length=1,this.words[0]=0,this;var p,h;m>0?(p=this,h=i):(p=i,h=this);for(var b=0,T=0;T<h.length;T++)l=(p.words[T]|0)-(h.words[T]|0)+b,b=l>>26,this.words[T]=l&67108863;for(;b!==0&&T<p.length;T++)l=(p.words[T]|0)+b,b=l>>26,this.words[T]=l&67108863;if(b===0&&T<p.length&&p!==this)for(;T<p.length;T++)this.words[T]=p.words[T];return this.length=Math.max(this.length,T),p!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(i){return this.clone().isub(i)};function L(y,i,l){l.negative=i.negative^y.negative;var m=y.length+i.length|0;l.length=m,m=m-1|0;var p=y.words[0]|0,h=i.words[0]|0,b=p*h,T=b&67108863,f=b/67108864|0;l.words[0]=T;for(var s=1;s<m;s++){for(var g=f>>>26,D=f&67108863,O=Math.min(s,i.length-1),M=Math.max(0,s-y.length+1);M<=O;M++){var E=s-M|0;p=y.words[E]|0,h=i.words[M]|0,b=p*h+D,g+=b/67108864|0,D=b&67108863}l.words[s]=D|0,f=g|0}return f!==0?l.words[s]=f|0:l.length--,l._strip()}var V=function(i,l,m){var p=i.words,h=l.words,b=m.words,T=0,f,s,g,D=p[0]|0,O=D&8191,M=D>>>13,E=p[1]|0,_=E&8191,U=E>>>13,te=p[2]|0,q=te&8191,F=te>>>13,Hi=p[3]|0,G=Hi&8191,Q=Hi>>>13,Gi=p[4]|0,z=Gi&8191,J=Gi>>>13,Qi=p[5]|0,X=Qi&8191,Y=Qi>>>13,zi=p[6]|0,Z=zi&8191,tt=zi>>>13,Ji=p[7]|0,et=Ji&8191,nt=Ji>>>13,Xi=p[8]|0,ot=Xi&8191,at=Xi>>>13,Yi=p[9]|0,rt=Yi&8191,it=Yi>>>13,Zi=h[0]|0,st=Zi&8191,ct=Zi>>>13,ts=h[1]|0,lt=ts&8191,ut=ts>>>13,es=h[2]|0,mt=es&8191,pt=es>>>13,ns=h[3]|0,dt=ns&8191,ft=ns>>>13,os=h[4]|0,ht=os&8191,gt=os>>>13,as=h[5]|0,yt=as&8191,bt=as>>>13,rs=h[6]|0,St=rs&8191,Tt=rs>>>13,is=h[7]|0,wt=is&8191,It=is>>>13,ss=h[8]|0,Ct=ss&8191,kt=ss>>>13,cs=h[9]|0,vt=cs&8191,xt=cs>>>13;m.negative=i.negative^l.negative,m.length=19,f=Math.imul(O,st),s=Math.imul(O,ct),s=s+Math.imul(M,st)|0,g=Math.imul(M,ct);var _r=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(_r>>>26)|0,_r&=67108863,f=Math.imul(_,st),s=Math.imul(_,ct),s=s+Math.imul(U,st)|0,g=Math.imul(U,ct),f=f+Math.imul(O,lt)|0,s=s+Math.imul(O,ut)|0,s=s+Math.imul(M,lt)|0,g=g+Math.imul(M,ut)|0;var Lr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Lr>>>26)|0,Lr&=67108863,f=Math.imul(q,st),s=Math.imul(q,ct),s=s+Math.imul(F,st)|0,g=Math.imul(F,ct),f=f+Math.imul(_,lt)|0,s=s+Math.imul(_,ut)|0,s=s+Math.imul(U,lt)|0,g=g+Math.imul(U,ut)|0,f=f+Math.imul(O,mt)|0,s=s+Math.imul(O,pt)|0,s=s+Math.imul(M,mt)|0,g=g+Math.imul(M,pt)|0;var jr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(jr>>>26)|0,jr&=67108863,f=Math.imul(G,st),s=Math.imul(G,ct),s=s+Math.imul(Q,st)|0,g=Math.imul(Q,ct),f=f+Math.imul(q,lt)|0,s=s+Math.imul(q,ut)|0,s=s+Math.imul(F,lt)|0,g=g+Math.imul(F,ut)|0,f=f+Math.imul(_,mt)|0,s=s+Math.imul(_,pt)|0,s=s+Math.imul(U,mt)|0,g=g+Math.imul(U,pt)|0,f=f+Math.imul(O,dt)|0,s=s+Math.imul(O,ft)|0,s=s+Math.imul(M,dt)|0,g=g+Math.imul(M,ft)|0;var Ur=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Ur>>>26)|0,Ur&=67108863,f=Math.imul(z,st),s=Math.imul(z,ct),s=s+Math.imul(J,st)|0,g=Math.imul(J,ct),f=f+Math.imul(G,lt)|0,s=s+Math.imul(G,ut)|0,s=s+Math.imul(Q,lt)|0,g=g+Math.imul(Q,ut)|0,f=f+Math.imul(q,mt)|0,s=s+Math.imul(q,pt)|0,s=s+Math.imul(F,mt)|0,g=g+Math.imul(F,pt)|0,f=f+Math.imul(_,dt)|0,s=s+Math.imul(_,ft)|0,s=s+Math.imul(U,dt)|0,g=g+Math.imul(U,ft)|0,f=f+Math.imul(O,ht)|0,s=s+Math.imul(O,gt)|0,s=s+Math.imul(M,ht)|0,g=g+Math.imul(M,gt)|0;var qr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(qr>>>26)|0,qr&=67108863,f=Math.imul(X,st),s=Math.imul(X,ct),s=s+Math.imul(Y,st)|0,g=Math.imul(Y,ct),f=f+Math.imul(z,lt)|0,s=s+Math.imul(z,ut)|0,s=s+Math.imul(J,lt)|0,g=g+Math.imul(J,ut)|0,f=f+Math.imul(G,mt)|0,s=s+Math.imul(G,pt)|0,s=s+Math.imul(Q,mt)|0,g=g+Math.imul(Q,pt)|0,f=f+Math.imul(q,dt)|0,s=s+Math.imul(q,ft)|0,s=s+Math.imul(F,dt)|0,g=g+Math.imul(F,ft)|0,f=f+Math.imul(_,ht)|0,s=s+Math.imul(_,gt)|0,s=s+Math.imul(U,ht)|0,g=g+Math.imul(U,gt)|0,f=f+Math.imul(O,yt)|0,s=s+Math.imul(O,bt)|0,s=s+Math.imul(M,yt)|0,g=g+Math.imul(M,bt)|0;var Fr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Fr>>>26)|0,Fr&=67108863,f=Math.imul(Z,st),s=Math.imul(Z,ct),s=s+Math.imul(tt,st)|0,g=Math.imul(tt,ct),f=f+Math.imul(X,lt)|0,s=s+Math.imul(X,ut)|0,s=s+Math.imul(Y,lt)|0,g=g+Math.imul(Y,ut)|0,f=f+Math.imul(z,mt)|0,s=s+Math.imul(z,pt)|0,s=s+Math.imul(J,mt)|0,g=g+Math.imul(J,pt)|0,f=f+Math.imul(G,dt)|0,s=s+Math.imul(G,ft)|0,s=s+Math.imul(Q,dt)|0,g=g+Math.imul(Q,ft)|0,f=f+Math.imul(q,ht)|0,s=s+Math.imul(q,gt)|0,s=s+Math.imul(F,ht)|0,g=g+Math.imul(F,gt)|0,f=f+Math.imul(_,yt)|0,s=s+Math.imul(_,bt)|0,s=s+Math.imul(U,yt)|0,g=g+Math.imul(U,bt)|0,f=f+Math.imul(O,St)|0,s=s+Math.imul(O,Tt)|0,s=s+Math.imul(M,St)|0,g=g+Math.imul(M,Tt)|0;var Kr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Kr>>>26)|0,Kr&=67108863,f=Math.imul(et,st),s=Math.imul(et,ct),s=s+Math.imul(nt,st)|0,g=Math.imul(nt,ct),f=f+Math.imul(Z,lt)|0,s=s+Math.imul(Z,ut)|0,s=s+Math.imul(tt,lt)|0,g=g+Math.imul(tt,ut)|0,f=f+Math.imul(X,mt)|0,s=s+Math.imul(X,pt)|0,s=s+Math.imul(Y,mt)|0,g=g+Math.imul(Y,pt)|0,f=f+Math.imul(z,dt)|0,s=s+Math.imul(z,ft)|0,s=s+Math.imul(J,dt)|0,g=g+Math.imul(J,ft)|0,f=f+Math.imul(G,ht)|0,s=s+Math.imul(G,gt)|0,s=s+Math.imul(Q,ht)|0,g=g+Math.imul(Q,gt)|0,f=f+Math.imul(q,yt)|0,s=s+Math.imul(q,bt)|0,s=s+Math.imul(F,yt)|0,g=g+Math.imul(F,bt)|0,f=f+Math.imul(_,St)|0,s=s+Math.imul(_,Tt)|0,s=s+Math.imul(U,St)|0,g=g+Math.imul(U,Tt)|0,f=f+Math.imul(O,wt)|0,s=s+Math.imul(O,It)|0,s=s+Math.imul(M,wt)|0,g=g+Math.imul(M,It)|0;var Vr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,f=Math.imul(ot,st),s=Math.imul(ot,ct),s=s+Math.imul(at,st)|0,g=Math.imul(at,ct),f=f+Math.imul(et,lt)|0,s=s+Math.imul(et,ut)|0,s=s+Math.imul(nt,lt)|0,g=g+Math.imul(nt,ut)|0,f=f+Math.imul(Z,mt)|0,s=s+Math.imul(Z,pt)|0,s=s+Math.imul(tt,mt)|0,g=g+Math.imul(tt,pt)|0,f=f+Math.imul(X,dt)|0,s=s+Math.imul(X,ft)|0,s=s+Math.imul(Y,dt)|0,g=g+Math.imul(Y,ft)|0,f=f+Math.imul(z,ht)|0,s=s+Math.imul(z,gt)|0,s=s+Math.imul(J,ht)|0,g=g+Math.imul(J,gt)|0,f=f+Math.imul(G,yt)|0,s=s+Math.imul(G,bt)|0,s=s+Math.imul(Q,yt)|0,g=g+Math.imul(Q,bt)|0,f=f+Math.imul(q,St)|0,s=s+Math.imul(q,Tt)|0,s=s+Math.imul(F,St)|0,g=g+Math.imul(F,Tt)|0,f=f+Math.imul(_,wt)|0,s=s+Math.imul(_,It)|0,s=s+Math.imul(U,wt)|0,g=g+Math.imul(U,It)|0,f=f+Math.imul(O,Ct)|0,s=s+Math.imul(O,kt)|0,s=s+Math.imul(M,Ct)|0,g=g+Math.imul(M,kt)|0;var $r=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+($r>>>26)|0,$r&=67108863,f=Math.imul(rt,st),s=Math.imul(rt,ct),s=s+Math.imul(it,st)|0,g=Math.imul(it,ct),f=f+Math.imul(ot,lt)|0,s=s+Math.imul(ot,ut)|0,s=s+Math.imul(at,lt)|0,g=g+Math.imul(at,ut)|0,f=f+Math.imul(et,mt)|0,s=s+Math.imul(et,pt)|0,s=s+Math.imul(nt,mt)|0,g=g+Math.imul(nt,pt)|0,f=f+Math.imul(Z,dt)|0,s=s+Math.imul(Z,ft)|0,s=s+Math.imul(tt,dt)|0,g=g+Math.imul(tt,ft)|0,f=f+Math.imul(X,ht)|0,s=s+Math.imul(X,gt)|0,s=s+Math.imul(Y,ht)|0,g=g+Math.imul(Y,gt)|0,f=f+Math.imul(z,yt)|0,s=s+Math.imul(z,bt)|0,s=s+Math.imul(J,yt)|0,g=g+Math.imul(J,bt)|0,f=f+Math.imul(G,St)|0,s=s+Math.imul(G,Tt)|0,s=s+Math.imul(Q,St)|0,g=g+Math.imul(Q,Tt)|0,f=f+Math.imul(q,wt)|0,s=s+Math.imul(q,It)|0,s=s+Math.imul(F,wt)|0,g=g+Math.imul(F,It)|0,f=f+Math.imul(_,Ct)|0,s=s+Math.imul(_,kt)|0,s=s+Math.imul(U,Ct)|0,g=g+Math.imul(U,kt)|0,f=f+Math.imul(O,vt)|0,s=s+Math.imul(O,xt)|0,s=s+Math.imul(M,vt)|0,g=g+Math.imul(M,xt)|0;var Hr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Hr>>>26)|0,Hr&=67108863,f=Math.imul(rt,lt),s=Math.imul(rt,ut),s=s+Math.imul(it,lt)|0,g=Math.imul(it,ut),f=f+Math.imul(ot,mt)|0,s=s+Math.imul(ot,pt)|0,s=s+Math.imul(at,mt)|0,g=g+Math.imul(at,pt)|0,f=f+Math.imul(et,dt)|0,s=s+Math.imul(et,ft)|0,s=s+Math.imul(nt,dt)|0,g=g+Math.imul(nt,ft)|0,f=f+Math.imul(Z,ht)|0,s=s+Math.imul(Z,gt)|0,s=s+Math.imul(tt,ht)|0,g=g+Math.imul(tt,gt)|0,f=f+Math.imul(X,yt)|0,s=s+Math.imul(X,bt)|0,s=s+Math.imul(Y,yt)|0,g=g+Math.imul(Y,bt)|0,f=f+Math.imul(z,St)|0,s=s+Math.imul(z,Tt)|0,s=s+Math.imul(J,St)|0,g=g+Math.imul(J,Tt)|0,f=f+Math.imul(G,wt)|0,s=s+Math.imul(G,It)|0,s=s+Math.imul(Q,wt)|0,g=g+Math.imul(Q,It)|0,f=f+Math.imul(q,Ct)|0,s=s+Math.imul(q,kt)|0,s=s+Math.imul(F,Ct)|0,g=g+Math.imul(F,kt)|0,f=f+Math.imul(_,vt)|0,s=s+Math.imul(_,xt)|0,s=s+Math.imul(U,vt)|0,g=g+Math.imul(U,xt)|0;var Gr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Gr>>>26)|0,Gr&=67108863,f=Math.imul(rt,mt),s=Math.imul(rt,pt),s=s+Math.imul(it,mt)|0,g=Math.imul(it,pt),f=f+Math.imul(ot,dt)|0,s=s+Math.imul(ot,ft)|0,s=s+Math.imul(at,dt)|0,g=g+Math.imul(at,ft)|0,f=f+Math.imul(et,ht)|0,s=s+Math.imul(et,gt)|0,s=s+Math.imul(nt,ht)|0,g=g+Math.imul(nt,gt)|0,f=f+Math.imul(Z,yt)|0,s=s+Math.imul(Z,bt)|0,s=s+Math.imul(tt,yt)|0,g=g+Math.imul(tt,bt)|0,f=f+Math.imul(X,St)|0,s=s+Math.imul(X,Tt)|0,s=s+Math.imul(Y,St)|0,g=g+Math.imul(Y,Tt)|0,f=f+Math.imul(z,wt)|0,s=s+Math.imul(z,It)|0,s=s+Math.imul(J,wt)|0,g=g+Math.imul(J,It)|0,f=f+Math.imul(G,Ct)|0,s=s+Math.imul(G,kt)|0,s=s+Math.imul(Q,Ct)|0,g=g+Math.imul(Q,kt)|0,f=f+Math.imul(q,vt)|0,s=s+Math.imul(q,xt)|0,s=s+Math.imul(F,vt)|0,g=g+Math.imul(F,xt)|0;var Qr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Qr>>>26)|0,Qr&=67108863,f=Math.imul(rt,dt),s=Math.imul(rt,ft),s=s+Math.imul(it,dt)|0,g=Math.imul(it,ft),f=f+Math.imul(ot,ht)|0,s=s+Math.imul(ot,gt)|0,s=s+Math.imul(at,ht)|0,g=g+Math.imul(at,gt)|0,f=f+Math.imul(et,yt)|0,s=s+Math.imul(et,bt)|0,s=s+Math.imul(nt,yt)|0,g=g+Math.imul(nt,bt)|0,f=f+Math.imul(Z,St)|0,s=s+Math.imul(Z,Tt)|0,s=s+Math.imul(tt,St)|0,g=g+Math.imul(tt,Tt)|0,f=f+Math.imul(X,wt)|0,s=s+Math.imul(X,It)|0,s=s+Math.imul(Y,wt)|0,g=g+Math.imul(Y,It)|0,f=f+Math.imul(z,Ct)|0,s=s+Math.imul(z,kt)|0,s=s+Math.imul(J,Ct)|0,g=g+Math.imul(J,kt)|0,f=f+Math.imul(G,vt)|0,s=s+Math.imul(G,xt)|0,s=s+Math.imul(Q,vt)|0,g=g+Math.imul(Q,xt)|0;var zr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(zr>>>26)|0,zr&=67108863,f=Math.imul(rt,ht),s=Math.imul(rt,gt),s=s+Math.imul(it,ht)|0,g=Math.imul(it,gt),f=f+Math.imul(ot,yt)|0,s=s+Math.imul(ot,bt)|0,s=s+Math.imul(at,yt)|0,g=g+Math.imul(at,bt)|0,f=f+Math.imul(et,St)|0,s=s+Math.imul(et,Tt)|0,s=s+Math.imul(nt,St)|0,g=g+Math.imul(nt,Tt)|0,f=f+Math.imul(Z,wt)|0,s=s+Math.imul(Z,It)|0,s=s+Math.imul(tt,wt)|0,g=g+Math.imul(tt,It)|0,f=f+Math.imul(X,Ct)|0,s=s+Math.imul(X,kt)|0,s=s+Math.imul(Y,Ct)|0,g=g+Math.imul(Y,kt)|0,f=f+Math.imul(z,vt)|0,s=s+Math.imul(z,xt)|0,s=s+Math.imul(J,vt)|0,g=g+Math.imul(J,xt)|0;var Jr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Jr>>>26)|0,Jr&=67108863,f=Math.imul(rt,yt),s=Math.imul(rt,bt),s=s+Math.imul(it,yt)|0,g=Math.imul(it,bt),f=f+Math.imul(ot,St)|0,s=s+Math.imul(ot,Tt)|0,s=s+Math.imul(at,St)|0,g=g+Math.imul(at,Tt)|0,f=f+Math.imul(et,wt)|0,s=s+Math.imul(et,It)|0,s=s+Math.imul(nt,wt)|0,g=g+Math.imul(nt,It)|0,f=f+Math.imul(Z,Ct)|0,s=s+Math.imul(Z,kt)|0,s=s+Math.imul(tt,Ct)|0,g=g+Math.imul(tt,kt)|0,f=f+Math.imul(X,vt)|0,s=s+Math.imul(X,xt)|0,s=s+Math.imul(Y,vt)|0,g=g+Math.imul(Y,xt)|0;var Xr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Xr>>>26)|0,Xr&=67108863,f=Math.imul(rt,St),s=Math.imul(rt,Tt),s=s+Math.imul(it,St)|0,g=Math.imul(it,Tt),f=f+Math.imul(ot,wt)|0,s=s+Math.imul(ot,It)|0,s=s+Math.imul(at,wt)|0,g=g+Math.imul(at,It)|0,f=f+Math.imul(et,Ct)|0,s=s+Math.imul(et,kt)|0,s=s+Math.imul(nt,Ct)|0,g=g+Math.imul(nt,kt)|0,f=f+Math.imul(Z,vt)|0,s=s+Math.imul(Z,xt)|0,s=s+Math.imul(tt,vt)|0,g=g+Math.imul(tt,xt)|0;var Yr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Yr>>>26)|0,Yr&=67108863,f=Math.imul(rt,wt),s=Math.imul(rt,It),s=s+Math.imul(it,wt)|0,g=Math.imul(it,It),f=f+Math.imul(ot,Ct)|0,s=s+Math.imul(ot,kt)|0,s=s+Math.imul(at,Ct)|0,g=g+Math.imul(at,kt)|0,f=f+Math.imul(et,vt)|0,s=s+Math.imul(et,xt)|0,s=s+Math.imul(nt,vt)|0,g=g+Math.imul(nt,xt)|0;var Zr=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(Zr>>>26)|0,Zr&=67108863,f=Math.imul(rt,Ct),s=Math.imul(rt,kt),s=s+Math.imul(it,Ct)|0,g=Math.imul(it,kt),f=f+Math.imul(ot,vt)|0,s=s+Math.imul(ot,xt)|0,s=s+Math.imul(at,vt)|0,g=g+Math.imul(at,xt)|0;var ti=(T+f|0)+((s&8191)<<13)|0;T=(g+(s>>>13)|0)+(ti>>>26)|0,ti&=67108863,f=Math.imul(rt,vt),s=Math.imul(rt,xt),s=s+Math.imul(it,vt)|0,g=Math.imul(it,xt);var ei=(T+f|0)+((s&8191)<<13)|0;return T=(g+(s>>>13)|0)+(ei>>>26)|0,ei&=67108863,b[0]=_r,b[1]=Lr,b[2]=jr,b[3]=Ur,b[4]=qr,b[5]=Fr,b[6]=Kr,b[7]=Vr,b[8]=$r,b[9]=Hr,b[10]=Gr,b[11]=Qr,b[12]=zr,b[13]=Jr,b[14]=Xr,b[15]=Yr,b[16]=Zr,b[17]=ti,b[18]=ei,T!==0&&(b[19]=T,m.length++),m};Math.imul||(V=L);function Wt(y,i,l){l.negative=i.negative^y.negative,l.length=y.length+i.length;for(var m=0,p=0,h=0;h<l.length-1;h++){var b=p;p=0;for(var T=m&67108863,f=Math.min(h,i.length-1),s=Math.max(0,h-y.length+1);s<=f;s++){var g=h-s,D=y.words[g]|0,O=i.words[s]|0,M=D*O,E=M&67108863;b=b+(M/67108864|0)|0,E=E+T|0,T=E&67108863,b=b+(E>>>26)|0,p+=b>>>26,b&=67108863}l.words[h]=T,m=b,b=p}return m!==0?l.words[h]=m:l.length--,l._strip()}function Rt(y,i,l){return Wt(y,i,l)}o.prototype.mulTo=function(i,l){var m,p=this.length+i.length;return this.length===10&&i.length===10?m=V(this,i,l):p<63?m=L(this,i,l):p<1024?m=Wt(this,i,l):m=Rt(this,i,l),m};function Et(y,i){this.x=y,this.y=i}Et.prototype.makeRBT=function(i){for(var l=new Array(i),m=o.prototype._countBits(i)-1,p=0;p<i;p++)l[p]=this.revBin(p,m,i);return l},Et.prototype.revBin=function(i,l,m){if(i===0||i===m-1)return i;for(var p=0,h=0;h<l;h++)p|=(i&1)<<l-h-1,i>>=1;return p},Et.prototype.permute=function(i,l,m,p,h,b){for(var T=0;T<b;T++)p[T]=l[i[T]],h[T]=m[i[T]]},Et.prototype.transform=function(i,l,m,p,h,b){this.permute(b,i,l,m,p,h);for(var T=1;T<h;T<<=1)for(var f=T<<1,s=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),D=0;D<h;D+=f)for(var O=s,M=g,E=0;E<T;E++){var _=m[D+E],U=p[D+E],te=m[D+E+T],q=p[D+E+T],F=O*te-M*q;q=O*q+M*te,te=F,m[D+E]=_+te,p[D+E]=U+q,m[D+E+T]=_-te,p[D+E+T]=U-q,E!==f&&(F=s*O-g*M,M=s*M+g*O,O=F)}},Et.prototype.guessLen13b=function(i,l){var m=Math.max(l,i)|1,p=m&1,h=0;for(m=m/2|0;m;m=m>>>1)h++;return 1<<h+1+p},Et.prototype.conjugate=function(i,l,m){if(!(m<=1))for(var p=0;p<m/2;p++){var h=i[p];i[p]=i[m-p-1],i[m-p-1]=h,h=l[p],l[p]=-l[m-p-1],l[m-p-1]=-h}},Et.prototype.normalize13b=function(i,l){for(var m=0,p=0;p<l/2;p++){var h=Math.round(i[2*p+1]/l)*8192+Math.round(i[2*p]/l)+m;i[p]=h&67108863,h<67108864?m=0:m=h/67108864|0}return i},Et.prototype.convert13b=function(i,l,m,p){for(var h=0,b=0;b<l;b++)h=h+(i[b]|0),m[2*b]=h&8191,h=h>>>13,m[2*b+1]=h&8191,h=h>>>13;for(b=2*l;b<p;++b)m[b]=0;t(h===0),t((h&-8192)===0)},Et.prototype.stub=function(i){for(var l=new Array(i),m=0;m<i;m++)l[m]=0;return l},Et.prototype.mulp=function(i,l,m){var p=2*this.guessLen13b(i.length,l.length),h=this.makeRBT(p),b=this.stub(p),T=new Array(p),f=new Array(p),s=new Array(p),g=new Array(p),D=new Array(p),O=new Array(p),M=m.words;M.length=p,this.convert13b(i.words,i.length,T,p),this.convert13b(l.words,l.length,g,p),this.transform(T,b,f,s,p,h),this.transform(g,b,D,O,p,h);for(var E=0;E<p;E++){var _=f[E]*D[E]-s[E]*O[E];s[E]=f[E]*O[E]+s[E]*D[E],f[E]=_}return this.conjugate(f,s,p),this.transform(f,s,M,b,p,h),this.conjugate(M,b,p),this.normalize13b(M,p),m.negative=i.negative^l.negative,m.length=i.length+l.length,m._strip()},o.prototype.mul=function(i){var l=new o(null);return l.words=new Array(this.length+i.length),this.mulTo(i,l)},o.prototype.mulf=function(i){var l=new o(null);return l.words=new Array(this.length+i.length),Rt(this,i,l)},o.prototype.imul=function(i){return this.clone().mulTo(i,this)},o.prototype.imuln=function(i){var l=i<0;l&&(i=-i),t(typeof i=="number"),t(i<67108864);for(var m=0,p=0;p<this.length;p++){var h=(this.words[p]|0)*i,b=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=b>>>26,this.words[p]=b&67108863}return m!==0&&(this.words[p]=m,this.length++),l?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 l=P(i);if(l.length===0)return new o(1);for(var m=this,p=0;p<l.length&&l[p]===0;p++,m=m.sqr());if(++p<l.length)for(var h=m.sqr();p<l.length;p++,h=h.sqr())l[p]!==0&&(m=m.mul(h));return m},o.prototype.iushln=function(i){t(typeof i=="number"&&i>=0);var l=i%26,m=(i-l)/26,p=67108863>>>26-l<<26-l,h;if(l!==0){var b=0;for(h=0;h<this.length;h++){var T=this.words[h]&p,f=(this.words[h]|0)-T<<l;this.words[h]=f|b,b=T>>>26-l}b&&(this.words[h]=b,this.length++)}if(m!==0){for(h=this.length-1;h>=0;h--)this.words[h+m]=this.words[h];for(h=0;h<m;h++)this.words[h]=0;this.length+=m}return this._strip()},o.prototype.ishln=function(i){return t(this.negative===0),this.iushln(i)},o.prototype.iushrn=function(i,l,m){t(typeof i=="number"&&i>=0);var p;l?p=(l-l%26)/26:p=0;var h=i%26,b=Math.min((i-h)/26,this.length),T=67108863^67108863>>>h<<h,f=m;if(p-=b,p=Math.max(0,p),f){for(var s=0;s<b;s++)f.words[s]=this.words[s];f.length=b}if(b!==0)if(this.length>b)for(this.length-=b,s=0;s<this.length;s++)this.words[s]=this.words[s+b];else this.words[0]=0,this.length=1;var g=0;for(s=this.length-1;s>=0&&(g!==0||s>=p);s--){var D=this.words[s]|0;this.words[s]=g<<26-h|D>>>h,g=D&T}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,l,m){return t(this.negative===0),this.iushrn(i,l,m)},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 l=i%26,m=(i-l)/26,p=1<<l;if(this.length<=m)return!1;var h=this.words[m];return!!(h&p)},o.prototype.imaskn=function(i){t(typeof i=="number"&&i>=0);var l=i%26,m=(i-l)/26;if(t(this.negative===0,"imaskn works only with positive numbers"),this.length<=m)return this;if(l!==0&&m++,this.length=Math.min(m,this.length),l!==0){var p=67108863^67108863>>>l<<l;this.words[this.length-1]&=p}return 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 l=0;l<this.length&&this.words[l]>=67108864;l++)this.words[l]-=67108864,l===this.length-1?this.words[l+1]=1:this.words[l+1]++;return this.length=Math.max(this.length,l+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 l=0;l<this.length&&this.words[l]<0;l++)this.words[l]+=67108864,this.words[l+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,l,m){var p=i.length+m,h;this._expand(p);var b,T=0;for(h=0;h<i.length;h++){b=(this.words[h+m]|0)+T;var f=(i.words[h]|0)*l;b-=f&67108863,T=(b>>26)-(f/67108864|0),this.words[h+m]=b&67108863}for(;h<this.length-m;h++)b=(this.words[h+m]|0)+T,T=b>>26,this.words[h+m]=b&67108863;if(T===0)return this._strip();for(t(T===-1),T=0,h=0;h<this.length;h++)b=-(this.words[h]|0)+T,T=b>>26,this.words[h]=b&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(i,l){var m=this.length-i.length,p=this.clone(),h=i,b=h.words[h.length-1]|0,T=this._countBits(b);m=26-T,m!==0&&(h=h.ushln(m),p.iushln(m),b=h.words[h.length-1]|0);var f=p.length-h.length,s;if(l!=="mod"){s=new o(null),s.length=f+1,s.words=new Array(s.length);for(var g=0;g<s.length;g++)s.words[g]=0}var D=p.clone()._ishlnsubmul(h,1,f);D.negative===0&&(p=D,s&&(s.words[f]=1));for(var O=f-1;O>=0;O--){var M=(p.words[h.length+O]|0)*67108864+(p.words[h.length+O-1]|0);for(M=Math.min(M/b|0,67108863),p._ishlnsubmul(h,M,O);p.negative!==0;)M--,p.negative=0,p._ishlnsubmul(h,1,O),p.isZero()||(p.negative^=1);s&&(s.words[O]=M)}return s&&s._strip(),p._strip(),l!=="div"&&m!==0&&p.iushrn(m),{div:s||null,mod:p}},o.prototype.divmod=function(i,l,m){if(t(!i.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var p,h,b;return this.negative!==0&&i.negative===0?(b=this.neg().divmod(i,l),l!=="mod"&&(p=b.div.neg()),l!=="div"&&(h=b.mod.neg(),m&&h.negative!==0&&h.iadd(i)),{div:p,mod:h}):this.negative===0&&i.negative!==0?(b=this.divmod(i.neg(),l),l!=="mod"&&(p=b.div.neg()),{div:p,mod:b.mod}):this.negative&i.negative?(b=this.neg().divmod(i.neg(),l),l!=="div"&&(h=b.mod.neg(),m&&h.negative!==0&&h.isub(i)),{div:b.div,mod:h}):i.length>this.length||this.cmp(i)<0?{div:new o(0),mod:this}:i.length===1?l==="div"?{div:this.divn(i.words[0]),mod:null}:l==="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,l)},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 l=this.divmod(i);if(l.mod.isZero())return l.div;var m=l.div.negative!==0?l.mod.isub(i):l.mod,p=i.ushrn(1),h=i.andln(1),b=m.cmp(p);return b<0||h===1&&b===0?l.div:l.div.negative!==0?l.div.isubn(1):l.div.iaddn(1)},o.prototype.modrn=function(i){var l=i<0;l&&(i=-i),t(i<=67108863);for(var m=(1<<26)%i,p=0,h=this.length-1;h>=0;h--)p=(m*p+(this.words[h]|0))%i;return l?-p:p},o.prototype.modn=function(i){return this.modrn(i)},o.prototype.idivn=function(i){var l=i<0;l&&(i=-i),t(i<=67108863);for(var m=0,p=this.length-1;p>=0;p--){var h=(this.words[p]|0)+m*67108864;this.words[p]=h/i|0,m=h%i}return this._strip(),l?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 l=this,m=i.clone();l.negative!==0?l=l.umod(i):l=l.clone();for(var p=new o(1),h=new o(0),b=new o(0),T=new o(1),f=0;l.isEven()&&m.isEven();)l.iushrn(1),m.iushrn(1),++f;for(var s=m.clone(),g=l.clone();!l.isZero();){for(var D=0,O=1;!(l.words[0]&O)&&D<26;++D,O<<=1);if(D>0)for(l.iushrn(D);D-- >0;)(p.isOdd()||h.isOdd())&&(p.iadd(s),h.isub(g)),p.iushrn(1),h.iushrn(1);for(var M=0,E=1;!(m.words[0]&E)&&M<26;++M,E<<=1);if(M>0)for(m.iushrn(M);M-- >0;)(b.isOdd()||T.isOdd())&&(b.iadd(s),T.isub(g)),b.iushrn(1),T.iushrn(1);l.cmp(m)>=0?(l.isub(m),p.isub(b),h.isub(T)):(m.isub(l),b.isub(p),T.isub(h))}return{a:b,b:T,gcd:m.iushln(f)}},o.prototype._invmp=function(i){t(i.negative===0),t(!i.isZero());var l=this,m=i.clone();l.negative!==0?l=l.umod(i):l=l.clone();for(var p=new o(1),h=new o(0),b=m.clone();l.cmpn(1)>0&&m.cmpn(1)>0;){for(var T=0,f=1;!(l.words[0]&f)&&T<26;++T,f<<=1);if(T>0)for(l.iushrn(T);T-- >0;)p.isOdd()&&p.iadd(b),p.iushrn(1);for(var s=0,g=1;!(m.words[0]&g)&&s<26;++s,g<<=1);if(s>0)for(m.iushrn(s);s-- >0;)h.isOdd()&&h.iadd(b),h.iushrn(1);l.cmp(m)>=0?(l.isub(m),p.isub(h)):(m.isub(l),h.isub(p))}var D;return l.cmpn(1)===0?D=p:D=h,D.cmpn(0)<0&&D.iadd(i),D},o.prototype.gcd=function(i){if(this.isZero())return i.abs();if(i.isZero())return this.abs();var l=this.clone(),m=i.clone();l.negative=0,m.negative=0;for(var p=0;l.isEven()&&m.isEven();p++)l.iushrn(1),m.iushrn(1);do{for(;l.isEven();)l.iushrn(1);for(;m.isEven();)m.iushrn(1);var h=l.cmp(m);if(h<0){var b=l;l=m,m=b}else if(h===0||m.cmpn(1)===0)break;l.isub(m)}while(!0);return m.iushln(p)},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 l=i%26,m=(i-l)/26,p=1<<l;if(this.length<=m)return this._expand(m+1),this.words[m]|=p,this;for(var h=p,b=m;h!==0&&b<this.length;b++){var T=this.words[b]|0;T+=h,h=T>>>26,T&=67108863,this.words[b]=T}return h!==0&&(this.words[b]=h,this.length++),this},o.prototype.isZero=function(){return this.length===1&&this.words[0]===0},o.prototype.cmpn=function(i){var l=i<0;if(this.negative!==0&&!l)return-1;if(this.negative===0&&l)return 1;this._strip();var m;if(this.length>1)m=1;else{l&&(i=-i),t(i<=67108863,"Number is too big");var p=this.words[0]|0;m=p===i?0:p<i?-1:1}return this.negative!==0?-m|0:m},o.prototype.cmp=function(i){if(this.negative!==0&&i.negative===0)return-1;if(this.negative===0&&i.negative!==0)return 1;var l=this.ucmp(i);return this.negative!==0?-l|0:l},o.prototype.ucmp=function(i){if(this.length>i.length)return 1;if(this.length<i.length)return-1;for(var l=0,m=this.length-1;m>=0;m--){var p=this.words[m]|0,h=i.words[m]|0;if(p!==h){p<h?l=-1:p>h&&(l=1);break}}return l},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 $(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 Nr={k256:null,p224:null,p192:null,p25519:null};function Lt(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()}Lt.prototype._tmp=function(){var i=new o(null);return i.words=new Array(Math.ceil(this.n/13)),i},Lt.prototype.ireduce=function(i){var l=i,m;do this.split(l,this.tmp),l=this.imulK(l),l=l.iadd(this.tmp),m=l.bitLength();while(m>this.n);var p=m<this.n?-1:l.ucmp(this.p);return p===0?(l.words[0]=0,l.length=1):p>0?l.isub(this.p):l.strip!==void 0?l.strip():l._strip(),l},Lt.prototype.split=function(i,l){i.iushrn(this.n,0,l)},Lt.prototype.imulK=function(i){return i.imul(this.k)};function un(){Lt.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(un,Lt),un.prototype.split=function(i,l){for(var m=4194303,p=Math.min(i.length,9),h=0;h<p;h++)l.words[h]=i.words[h];if(l.length=p,i.length<=9){i.words[0]=0,i.length=1;return}var b=i.words[9];for(l.words[l.length++]=b&m,h=10;h<i.length;h++){var T=i.words[h]|0;i.words[h-10]=(T&m)<<4|b>>>22,b=T}b>>>=22,i.words[h-10]=b,b===0&&i.length>10?i.length-=10:i.length-=9},un.prototype.imulK=function(i){i.words[i.length]=0,i.words[i.length+1]=0,i.length+=2;for(var l=0,m=0;m<i.length;m++){var p=i.words[m]|0;l+=p*977,i.words[m]=l&67108863,l=p*64+(l/67108864|0)}return i.words[i.length-1]===0&&(i.length--,i.words[i.length-1]===0&&i.length--),i};function Vi(){Lt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(Vi,Lt);function $i(){Lt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n($i,Lt);function Wr(){Lt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Wr,Lt),Wr.prototype.imulK=function(i){for(var l=0,m=0;m<i.length;m++){var p=(i.words[m]|0)*19+l,h=p&67108863;p>>>=26,i.words[m]=h,l=p}return l!==0&&(i.words[i.length++]=l),i},o._prime=function(i){if(Nr[i])return Nr[i];var l;if(i==="k256")l=new un;else if(i==="p224")l=new Vi;else if(i==="p192")l=new $i;else if(i==="p25519")l=new Wr;else throw new Error("Unknown prime "+i);return Nr[i]=l,l};function $(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}$.prototype._verify1=function(i){t(i.negative===0,"red works only with positives"),t(i.red,"red works only with red numbers")},$.prototype._verify2=function(i,l){t((i.negative|l.negative)===0,"red works only with positives"),t(i.red&&i.red===l.red,"red works only with red numbers")},$.prototype.imod=function(i){return this.prime?this.prime.ireduce(i)._forceRed(this):(S(i,i.umod(this.m)._forceRed(this)),i)},$.prototype.neg=function(i){return i.isZero()?i.clone():this.m.sub(i)._forceRed(this)},$.prototype.add=function(i,l){this._verify2(i,l);var m=i.add(l);return m.cmp(this.m)>=0&&m.isub(this.m),m._forceRed(this)},$.prototype.iadd=function(i,l){this._verify2(i,l);var m=i.iadd(l);return m.cmp(this.m)>=0&&m.isub(this.m),m},$.prototype.sub=function(i,l){this._verify2(i,l);var m=i.sub(l);return m.cmpn(0)<0&&m.iadd(this.m),m._forceRed(this)},$.prototype.isub=function(i,l){this._verify2(i,l);var m=i.isub(l);return m.cmpn(0)<0&&m.iadd(this.m),m},$.prototype.shl=function(i,l){return this._verify1(i),this.imod(i.ushln(l))},$.prototype.imul=function(i,l){return this._verify2(i,l),this.imod(i.imul(l))},$.prototype.mul=function(i,l){return this._verify2(i,l),this.imod(i.mul(l))},$.prototype.isqr=function(i){return this.imul(i,i.clone())},$.prototype.sqr=function(i){return this.mul(i,i)},$.prototype.sqrt=function(i){if(i.isZero())return i.clone();var l=this.m.andln(3);if(t(l%2===1),l===3){var m=this.m.add(new o(1)).iushrn(2);return this.pow(i,m)}for(var p=this.m.subn(1),h=0;!p.isZero()&&p.andln(1)===0;)h++,p.iushrn(1);t(!p.isZero());var b=new o(1).toRed(this),T=b.redNeg(),f=this.m.subn(1).iushrn(1),s=this.m.bitLength();for(s=new o(2*s*s).toRed(this);this.pow(s,f).cmp(T)!==0;)s.redIAdd(T);for(var g=this.pow(s,p),D=this.pow(i,p.addn(1).iushrn(1)),O=this.pow(i,p),M=h;O.cmp(b)!==0;){for(var E=O,_=0;E.cmp(b)!==0;_++)E=E.redSqr();t(_<M);var U=this.pow(g,new o(1).iushln(M-_-1));D=D.redMul(U),g=U.redSqr(),O=O.redMul(g),M=_}return D},$.prototype.invm=function(i){var l=i._invmp(this.m);return l.negative!==0?(l.negative=0,this.imod(l).redNeg()):this.imod(l)},$.prototype.pow=function(i,l){if(l.isZero())return new o(1).toRed(this);if(l.cmpn(1)===0)return i.clone();var m=4,p=new Array(1<<m);p[0]=new o(1).toRed(this),p[1]=i;for(var h=2;h<p.length;h++)p[h]=this.mul(p[h-1],i);var b=p[0],T=0,f=0,s=l.bitLength()%26;for(s===0&&(s=26),h=l.length-1;h>=0;h--){for(var g=l.words[h],D=s-1;D>=0;D--){var O=g>>D&1;if(b!==p[0]&&(b=this.sqr(b)),O===0&&T===0){f=0;continue}T<<=1,T|=O,f++,!(f!==m&&(h!==0||D!==0))&&(b=this.mul(b,p[T]),f=0,T=0)}s=26}return b},$.prototype.convertTo=function(i){var l=i.umod(this.m);return l===i?l.clone():l},$.prototype.convertFrom=function(i){var l=i.clone();return l.red=null,l},o.mont=function(i){return new me(i)};function me(y){$.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(me,$),me.prototype.convertTo=function(i){return this.imod(i.ushln(this.shift))},me.prototype.convertFrom=function(i){var l=this.imod(i.mul(this.rinv));return l.red=null,l},me.prototype.imul=function(i,l){if(i.isZero()||l.isZero())return i.words[0]=0,i.length=1,i;var m=i.imul(l),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),b=h;return h.cmp(this.m)>=0?b=h.isub(this.m):h.cmpn(0)<0&&(b=h.iadd(this.m)),b._forceRed(this)},me.prototype.mul=function(i,l){if(i.isZero()||l.isZero())return new o(0)._forceRed(this);var m=i.mul(l),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),b=h;return h.cmp(this.m)>=0?b=h.isub(this.m):h.cmpn(0)<0&&(b=h.iadd(this.m)),b._forceRed(this)},me.prototype.invm=function(i){var l=this.imod(i._invmp(this.m).mul(this.r2));return l._forceRed(this)}})(typeof Ki>"u"||Ki,ol)});import{TransactionType as Al}from"@msafe/sui3-utils";import{coinsList as Sl,poolIdPoolNameMap as Tl,poolInfo as us,singleAssetPoolCoinMap as wl}from"@alphafi/alphafi-sdk";import{TransactionType as We}from"@msafe/sui3-utils";import{bcs as mn,fromBase64 as pn}from"@mysten/bcs";var dn=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isClaimRewardTransaction())return this.decodeClaimReward();let e=this.getLiquidityChangeEvent();if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson,n=t.pool_id,o=Tl[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&&us[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&us[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=mn.u64().parse(pn(t)):t.length===24?n=mn.u128().parse(pn(t)):t.length===44?n=mn.u256().parse(pn(t)):n=mn.u64().parse(pn(t)),n}decodeDoubleAssetDeposit(e,t){let{amount_a:n,amount_b:o}=t,r=Number(n)>0;return console.log("Decoder.decodeDoubleAssetDeposit",n,o,r),{txType:We.Other,type:"depositDoubleAsset",intentionData:{poolName:e,amount:r?n:o,isAmountA:r}}}decodeSingleAssetDeposit(e,t){let{amount:n}=t;if(console.log("Decoder.decodeSingleAssetDeposit",n),this.getLiquidityChangeEvent().type.includes(":alphafi_navi_pool:")){let{coin:r}=wl[e],{expo:c}=Sl[r];n=Math.floor(Number(n)/10**(9-c)).toString()}return{txType:We.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:We.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:We.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:We.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as Cl}from"@alphafi/alphafi-sdk";import Il from"sort-keys-recursive";var v=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Il(this.data))}};var fn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t;return await Cl(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as kl}from"@alphafi/alphafi-sdk";var hn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:r,isAmountA:c}=this.data;return await kl(o,n.address,r,c)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as vl}from"@alphafi/alphafi-sdk";var gn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:r}=this.data;return await vl(o,n.address,r)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as xl}from"@alphafi/alphafi-sdk";var yn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:r}=this.data;return await xl(r,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as Dl}from"@alphafi/alphafi-sdk";var bn=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:r}=this.data;return await Dl(r,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new a(t)}};var Sn=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n,account:o}=e,r=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("AlphaFiHelper Sim result - ",r);let u=new dn(t,r).decode();return{txType:Al.Other,txSubType:u.type,intentionData:u.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=gn.fromData(e.intentionData);break;case"depositDoubleAsset":n=hn.fromData(e.intentionData);break;case"withdraw":n=yn.fromData(e.intentionData);break;case"withdrawAlpha":n=bn.fromData(e.intentionData);break;case"claimReward":n=fn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as Xl}from"@msafe/sui3-utils";import{TransactionType as _t}from"@msafe/sui3-utils";import{bcs as oi}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as ai}from"bucket-protocol-sdk";var Tn=class{constructor(e){this.transaction=e}decode(){if(this.isSBUCKDepositTransaction())return this.decodeSBUCKDeposit();if(this.isSBUCKUnstakeTransaction())return this.decodeSBUCKUnstake();if(this.isSBUCKWithdrawTransaction())return this.decodeSBUCKWithdraw();if(this.isSBUCKClaimTransaction())return this.decodeSBUCKClaim();if(this.isLockedClaimTransaction())return this.decodeLockedClaim();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isCloseTransaction())return this.decodeClose();if(this.isTankDepositTransaction())return this.decodeTankDeposit();if(this.isTankWithdrawTransaction())return this.decodeTankWithdraw();if(this.isTankClaimTransaction())return this.decodeTankClaim();if(this.isPsmTransaction())return this.decodePsm();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getMoveCallModuleCommand(e,t){return this.commands.find(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getMoveCallPackageModuleCommand(e,t,n){return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.package===e&&o.MoveCall.module===t&&o.MoveCall.function===n)}getMoveCallModuleCommands(e,t){return this.commands.filter(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(e=>e.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(e=>e.$kind==="TransferObjects")}isPsmTransaction(){return!!this.getMoveCallCommand("charge_reservoir")||!!this.getMoveCallCommand("discharge_reservoir")}isStrapNewTransaction(){return!!this.getMoveCallModuleCommand("strap","new")}isBorrowTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","high_top_up")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow_with_strap")}isRepayTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","fully_repay")||!!this.getMoveCallModuleCommand("bucket_operations","fully_repay_with_strap")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw_with_strap")}isWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","withdraw")||!!this.getMoveCallModuleCommand("buck","withdraw_with_strap")}isCloseTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","destroy_empty_strap")}isTankDepositTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","deposit")}isTankWithdrawTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","withdraw")}isTankClaimTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","claim")}isSBUCKDepositTransaction(){return!!this.getMoveCallModuleCommand("buck","buck_to_sbuck")}isSBUCKWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","sbuck_to_buck")}isSBUCKStakeTransaction(){return!!this.getMoveCallPackageModuleCommand(ai,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(ai,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(ai,"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:_t.Other,type:"psm",intentionData:{coinType:e,amount:n,buckToCoin:t}}}decodeBorrow(){let e="",t="0",n,o=this.getStrapId(),r="0",c=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(c.$kind==="Input"&&(r=this.getPureInputU64(c.Input)),this.getMoveCallCommand("high_top_up")){let u=this.getMoveCallCommand("high_top_up").MoveCall;[e]=u.typeArguments;let d=u.arguments[1];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let S=u.arguments[3];if(S.$kind==="Input"){let w=this.getPureAddresses(S.Input);w.length===1&&([n]=w)}}else if(this.getMoveCallCommand("high_borrow")){let u=this.getMoveCallCommand("high_borrow").MoveCall;[e]=u.typeArguments;let d=u.arguments[4];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let S=u.arguments[5];if(S.$kind==="Input"){let w=this.getPureAddresses(S.Input);w.length===1&&([n]=w)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let u=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=u.typeArguments;let d=u.arguments[5];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let S=u.arguments[6];if(S.$kind==="Input"){let w=this.getPureAddresses(S.Input);w.length===1&&([n]=w)}}return{txType:_t.Other,type:"borrow",intentionData:{collateralType:e,collateralAmount:r,borrowAmount:t,insertionPlace:n,strapId:o}}}decodeRepay(){let e="",t="0",n="0",r,c=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 u=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=u.typeArguments;let d=u.arguments[4];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let S=u.arguments[5];if(S.$kind==="Input"){let I=this.getPureAddresses(S.Input);I.length===1&&([r]=I)}let w=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];w.$kind==="Input"&&(t=this.getPureInputU64(w.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let u=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=u.typeArguments;let d=u.arguments[5];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let S=u.arguments[6];if(S.$kind==="Input"){let I=this.getPureAddresses(S.Input);I.length===1&&([r]=I)}let w=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];w.$kind==="Input"&&(t=this.getPureInputU64(w.Input))}return{txType:_t.Other,type:"repay",intentionData:{collateralType:e,repayAmount:t,withdrawAmount:n,isSurplus:!1,insertionPlace:r,strapId:c}}}decodeWithdraw(){let e="",t="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let r=this.getMoveCallCommand("withdraw_with_strap").MoveCall;[e]=r.typeArguments;let c=r.arguments[4];c.$kind==="Input"&&(t=this.getPureInputU64(c.Input));let u=r.arguments[5];if(u.$kind==="Input"){let d=this.getPureAddresses(u.Input);d.length===1&&([n]=d)}}else if(this.getMoveCallCommand("withdraw")){let r=this.getMoveCallCommand("withdraw").MoveCall;[e]=r.typeArguments;let c=r.arguments[3];c.$kind==="Input"&&(t=this.getPureInputU64(c.Input));let u=r.arguments[4];if(u.$kind==="Input"){let d=this.getPureAddresses(u.Input);d.length===1&&([n]=d)}}return{txType:_t.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:_t.Other,type:"close",intentionData:{collateralType:e,strapId:t}}}decodeSBUCKDeposit(){let t=this.getMoveCallCommand("into_balance").MoveCall.typeArguments[0],n="0",r=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];r.$kind==="Input"&&(n=this.getPureInputU64(r.Input));let c=this.isSBUCKStakeTransaction();return console.log("Decoder.decodeSBUCKDeposit",t,n,c),{txType:_t.Other,type:"sbuck-deposit",intentionData:{coinType:t,amount:n,isStake:c}}}decodeSBUCKUnstake(){let e="0",t=this.isSBUCKStakeTransaction();if(t){let d=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];d.$kind==="Input"&&(e=this.getPureInputU64(d.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let u=0;u<o.length;u++){let d=o[u];n.push("")}else{let u=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let d=0;d<u.length;d++){let w=u[d].MoveCall.arguments[2];if(w.$kind==="Input"){let{objectId:I}=this.inputs[w.Input].UnresolvedObject;n.push(I)}}}let r=this.isSBUCKWithdrawTransaction(),c={stakeProofs:n,amount:e,isStake:t,toBuck:r};return console.log("Decoder.decodeSBUCKUnstake",c),{txType:_t.Other,type:"sbuck-unstake",intentionData:c}}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:_t.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 r=t[n].MoveCall.arguments[2];if(r.$kind==="Input"){let{objectId:c}=this.inputs[r.Input].UnresolvedObject;e.push(c)}}return console.log("Decoder.decodeSBUCKClaim",e),{txType:_t.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 r=this.getMoveCallModuleCommand("tank_operations","deposit").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankDeposit",r,e),{txType:_t.Other,type:"tank-deposit",intentionData:{coinType:r,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:_t.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:_t.Other,type:"tank-claim",intentionData:{coinType:t}}}decodeLockedClaim(){let e="",t=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let r=0;r<n.length;r++)[e]=n[r].MoveCall.typeArguments,t++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let r=0;r<o.length;r++)[e]=o[r].MoveCall.typeArguments,t++;return console.log("Decoder.decodeLockedClaim",e,t),{txType:_t.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 oi.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return oi.vector(oi.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as Bl}from"@msafe/sui3-utils";import{Transaction as Ml}from"@mysten/sui/transactions";import{buildPsmTx as Pl}from"bucket-protocol-sdk";import{BucketClient as Ol}from"bucket-protocol-sdk";var Ot=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new Ol(t,e.address)};var ms=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:r}=a,c=new Ml,u=Ot(t,e);return await Pl(u,c,n,o,r,e.address),c};var wn=class a extends v{constructor(t){super(t);this.data=t}txType=Bl.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await ms(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as _l}from"@msafe/sui3-utils";import{Transaction as In}from"@mysten/sui/transactions";import{buildBorrowTx as Rl,buildCloseTx as El,buildRepayTx as Nl,buildWithdrawTx as Wl}from"bucket-protocol-sdk";var ps=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:r,insertionPlace:c,strapId:u}=a,d=new In,S=Ot(t,e);return await Rl(S,d,n,o,r,e.address,c,u),d},ds=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:r,strapId:c}=a,u=new In,d=Ot(t,e);return await Wl(d,u,n,o,e.address,r,c),u},fs=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:r,isSurplus:c,insertionPlace:u,strapId:d}=a,S=new In,w=Ot(t,e);return await Nl(w,S,n,o,r,e.address,c,u,d),S},hs=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:r}=a,c=new In,u=Ot(t,e);return await El(u,c,n,o,r),c};var Cn=class a extends v{constructor(t){super(t);this.data=t}txType=_l.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await ps(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ll}from"@msafe/sui3-utils";var kn=class a extends v{constructor(t){super(t);this.data=t}txType=Ll.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await fs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as jl}from"@msafe/sui3-utils";var vn=class a extends v{constructor(t){super(t);this.data=t}txType=jl.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await ds(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ul}from"@msafe/sui3-utils";var xn=class a extends v{constructor(t){super(t);this.data=t}txType=Ul.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await hs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bn}from"@msafe/sui3-utils";import{Transaction as Dn}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as ql,buildSBUCKDepositTx as Fl,buildSBUCKUnstakeTx as Kl,buildSBUCKWithdrawTx as Vl}from"bucket-protocol-sdk";var gs=async(a,e,t)=>{let{coinType:n,amount:o,isStake:r}=a,c=new Dn,u=Ot(t,e);return await Fl(u,c,n,o,e.address,r),c},ys=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:r,toBuck:c}=a,u=new Dn,d=Ot(t,e);return await Kl(d,u,n,o,e.address,r,c),u},bs=async(a,e,t)=>{let{amount:n}=a,o=new Dn,r=Ot(t,e);return await Vl(r,o,n,e.address),o},Ss=async(a,e,t)=>{let{stakeProofs:n}=a,o=new Dn,r=Ot(t,e);return await ql(r,o,n,e.address),o};var An=class a extends v{constructor(t){super(t);this.data=t}txType=Bn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await gs(this.data,n,o)}static fromData(t){return new a(t)}},On=class a extends v{constructor(t){super(t);this.data=t}txType=Bn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await ys(this.data,n,o)}static fromData(t){return new a(t)}},Mn=class a extends v{constructor(t){super(t);this.data=t}txType=Bn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await bs(this.data,n,o)}static fromData(t){return new a(t)}},Pn=class a extends v{constructor(t){super(t);this.data=t}txType=Bn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Ss(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ii}from"@msafe/sui3-utils";import{Transaction as ri}from"@mysten/sui/transactions";import{buildTankClaimTx as $l,buildTankDepositTx as Hl,buildTankWithdrawTx as Gl}from"bucket-protocol-sdk";var Ts=async(a,e,t)=>{let{coinType:n,amount:o}=a,r=new ri,c=Ot(t,e);return await Hl(c,r,n,o,e.address),r},ws=async(a,e,t)=>{let{coinType:n,amount:o}=a,r=new ri,c=Ot(t,e);return await Gl(c,r,n,o,e.address),r},Is=async(a,e,t)=>{let{coinType:n}=a,o=new ri,r=Ot(t,e);return await $l(r,o,n,e.address),o};import{Transaction as Ql}from"@mysten/sui/transactions";import{buildLockedClaimTx as zl}from"bucket-protocol-sdk";var Cs=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,r=new Ql,c=Ot(t,e);return await zl(c,r,n,o,e.address),r};var Rn=class a extends v{constructor(t){super(t);this.data=t}txType=ii.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await Ts(this.data,n,o)}static fromData(t){return new a(t)}},En=class a extends v{constructor(t){super(t);this.data=t}txType=ii.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await ws(this.data,n,o)}static fromData(t){return new a(t)}},Nn=class a extends v{constructor(t){super(t);this.data=t}txType=ii.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await Is(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Jl}from"@msafe/sui3-utils";var Wn=class a extends v{constructor(t){super(t);this.data=t}txType=Jl.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await Cs(this.data,n,o)}static fromData(t){return new a(t)}};var _n=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new Tn(t).decode();return{txType:Xl.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e,r;switch(e.txSubType){case"psm":r=wn.fromData(e.intentionData);break;case"borrow":r=Cn.fromData(e.intentionData);break;case"withdraw":r=vn.fromData(e.intentionData);break;case"repay":r=kn.fromData(e.intentionData);break;case"close":r=xn.fromData(e.intentionData);break;case"tank-deposit":r=Rn.fromData(e.intentionData);break;case"tank-withdraw":r=En.fromData(e.intentionData);break;case"tank-claim":r=Nn.fromData(e.intentionData);break;case"sbuck-deposit":r=An.fromData(e.intentionData);break;case"sbuck-unstake":r=On.fromData(e.intentionData);break;case"sbuck-withdraw":r=Mn.fromData(e.intentionData);break;case"sbuck-claim":r=Pn.fromData(e.intentionData);break;case"lock-claim":r=Wn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:n,network:o})}};import{TransactionType as Pu}from"@msafe/sui3-utils";import{TransactionType as ru}from"@msafe/sui3-utils";import{AggregatorClient as Yl,Env as Zl}from"@cetusprotocol/aggregator-sdk";import{CetusFarmsSDK as tu}from"@cetusprotocol/farms-sdk";import{CetusClmmSDK as eu}from"@cetusprotocol/sui-clmm-sdk";import{CetusVaultsSDK as nu}from"@cetusprotocol/vaults-sdk";import{CetusXcetusSDK as ou}from"@cetusprotocol/xcetus-sdk";import{SuiClient as si,getFullnodeUrl as ks}from"@mysten/sui/client";var be=(a,e)=>{let t=eu.createSDK({env:"mainnet",sui_client:new si({url:ks("mainnet")})});return t.setSenderAddress(e.address),t},Qt=(a,e)=>{let t=tu.createSDK({env:"mainnet",sui_client:new si({url:ks("mainnet")})});return t.setSenderAddress(e.address),t},au="https://api-sui.cetus.zone/router_v2/find_routes",vs=(a,e)=>{let t=new si({url:"https://fullnode.mainnet.sui.io/"});return new Yl({endpoint:au,signer:e.address,client:t,env:Zl.Mainnet})},ci=(a,e)=>{let t=nu.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t},Se=(a,e)=>{let t=ou.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t};var xs=async(a,e,t)=>await be(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Ds=async(a,e,t)=>await be(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),As=async(a,e,t)=>await be(t,e).Position.closePositionPayload(a),Os=async(a,e,t)=>await be(t,e).Position.removeLiquidityPayload(a),Ms=async(a,e,t)=>await be(t,e).Rewarder.collectRewarderPayload(a);var Ln=class a extends v{constructor(t){super(t);this.data=t}txType=ru.Other;txSubType="OpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await xs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as iu}from"@msafe/sui3-utils";var jn=class a extends v{constructor(t){super(t);this.data=t}txType=iu.Other;txSubType="ClaimFeeAndMining";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ms(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as su}from"@msafe/sui3-utils";var Un=class a extends v{constructor(t){super(t);this.data=t}txType=su.Other;txSubType="DecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Os(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as cu}from"@msafe/sui3-utils";var Ps=async(a,e,t)=>await Qt(t,e).Farms.openPositionAddLiquidityStakePayload(a),Bs=async(a,e,t)=>await Qt(t,e).Farms.addLiquidityFixCoinPayload(a),Rs=async(a,e,t)=>await Qt(t,e).Farms.removeLiquidityPayload(a),Es=async(a,e,t)=>await Qt(t,e).Farms.removeLiquidityPayload(a),Ns=async(a,e,t)=>await Qt(t,e).Farms.claimFeeAndClmmReward(a),Ws=async(a,e,t)=>await Qt(t,e).Farms.harvestPayload(a),_s=async(a,e,t)=>{let n=Qt(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},Ls=async(a,e,t)=>await Qt(t,e).Farms.depositPayload(a),js=async(a,e,t)=>await Qt(t,e).Farms.withdrawPayload(a);var qn=class a extends v{constructor(t){super(t);this.data=t}txType=cu.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ps(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as lu}from"@msafe/sui3-utils";var Fn=class a extends v{constructor(t){super(t);this.data=t}txType=lu.Other;txSubType="FarmingBatchHarvest";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await _s(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as uu}from"@msafe/sui3-utils";var Kn=class a extends v{constructor(t){super(t);this.data=t}txType=uu.Other;txSubType="FarmingClaimFeeAndReward";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ns(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as mu}from"@msafe/sui3-utils";var Vn=class a extends v{constructor(t){super(t);this.data=t}txType=mu.Other;txSubType="FarmingDecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Rs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as pu}from"@msafe/sui3-utils";var $n=class a extends v{constructor(t){super(t);this.data=t}txType=pu.Other;txSubType="FarmingHarvest";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ws(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as du}from"@msafe/sui3-utils";var Hn=class a extends v{constructor(t){super(t);this.data=t}txType=du.Other;txSubType="FarmingIncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Bs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as fu}from"@msafe/sui3-utils";var Gn=class a extends v{constructor(t){super(t);this.data=t}txType=fu.Other;txSubType="FarmingRemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Es(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as hu}from"@msafe/sui3-utils";var Qn=class a extends v{constructor(t){super(t);this.data=t}txType=hu.Other;txSubType="FarmingStake";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ls(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as gu}from"@msafe/sui3-utils";var zn=class a extends v{constructor(t){super(t);this.data=t}txType=gu.Other;txSubType="FarmingUnstake";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await js(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as yu}from"@msafe/sui3-utils";var Jn=class a extends v{constructor(t){super(t);this.data=t}txType=yu.Other;txSubType="IncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ds(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as bu}from"@msafe/sui3-utils";var Xn=class a extends v{constructor(t){super(t);this.data=t}txType=bu.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await As(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wu}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as Su}from"@cetusprotocol/aggregator-sdk";import{Transaction as Tu}from"@mysten/sui/transactions";var Us=async(a,e,t)=>{let n=vs(t,e),o=new Tu;return await n.fastRouterSwap({...a,routers:Su(a.routers),txb:o}),o};var Yn=class a extends v{constructor(t){super(t);this.data=t}txType=wu.Other;txSubType="AggregatorSwap";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Us(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Iu}from"@msafe/sui3-utils";import{Transaction as qs}from"@mysten/sui/transactions";var Fs=async(a,e,t)=>{let n=ci(t,e),o=new qs;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},Ks=async(a,e,t)=>{let n=ci(t,e),o=new qs;return await n.Vaults.withdraw(a,o),o};var Zn=class a extends v{constructor(t){super(t);this.data=t}txType=Iu.Other;txSubType="AddVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Fs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Cu}from"@msafe/sui3-utils";var to=class a extends v{constructor(t){super(t);this.data=t}txType=Cu.Other;txSubType="RemoveVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Ks(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as vu}from"@msafe/sui3-utils";import{Transaction as ku}from"@mysten/sui/transactions";var Vs={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},$s=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:r,CLOCK_ADDRESS:c}=a,u=new ku;return r.forEach(d=>{u.moveCall({target:`${Vs.published_at}::router::redeem`,typeArguments:[Vs.cetus_coin_type],arguments:[u.object(n),u.object(o),u.pure(d),u.object(c)]})}),u};var eo=class a extends v{constructor(t){super(t);this.data=t}txType=vu.Other;txSubType="VestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await $s(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as xu}from"@msafe/sui3-utils";var Hs=async(a,e,t)=>await Se(t,e).XCetusModule.convertPayload(a),Gs=async(a,e,t)=>await Se(t,e).XCetusModule.redeemLockPayload(a),Qs=async(a,e,t)=>await Se(t,e).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),zs=async(a,e,t)=>await Se(t,e).XCetusModule.cancelRedeemPayload(a),Js=async(a,e,t)=>await Se(t,e).XCetusModule.redeemPayload(a);var no=class a extends v{constructor(t){super(t);this.data=t}txType=xu.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await zs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Du}from"@msafe/sui3-utils";var oo=class a extends v{constructor(t){super(t);this.data=t}txType=Du.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Qs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Au}from"@msafe/sui3-utils";var ao=class a extends v{constructor(t){super(t);this.data=t}txType=Au.Other;txSubType="xCETUSConvert";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Hs(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ou}from"@msafe/sui3-utils";var ro=class a extends v{constructor(t){super(t);this.data=t}txType=Ou.Other;txSubType="xCETUSRedeem";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Js(r,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Mu}from"@msafe/sui3-utils";var io=class a extends v{constructor(t){super(t);this.data=t}txType=Mu.Other;txSubType="xCETUSRedeemLock";async build(t){let{account:n,network:o}=t,{txbParams:r}=this.data;return await Gs(r,n,o)}static fromData(t){return new a(t)}};var so=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:Pu.Other,txSubType:n,intentionData:{txbParams:{...t},action:n}}}async build(e){let{suiClient:t,account:n,network:o}=e,r;switch(e.txSubType){case"OpenAndAddLiquidity":r=Ln.fromData(e.intentionData);break;case"IncreaseLiquidity":r=Jn.fromData(e.intentionData);break;case"DecreaseLiquidity":r=Un.fromData(e.intentionData);break;case"RemoveLiquidity":r=Xn.fromData(e.intentionData);break;case"ClaimFeeAndMining":r=jn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":r=qn.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":r=Hn.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":r=Vn.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":r=Gn.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":r=Kn.fromData(e.intentionData);break;case"FarmingHarvest":r=$n.fromData(e.intentionData);break;case"FarmingBatchHarvest":r=Fn.fromData(e.intentionData);break;case"FarmingStake":r=Qn.fromData(e.intentionData);break;case"FarmingUnstake":r=zn.fromData(e.intentionData);break;case"xCETUSConvert":r=ao.fromData(e.intentionData);break;case"xCETUSRedeemLock":r=io.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":r=oo.fromData(e.intentionData);break;case"xCETUSCancelRedeem":r=no.fromData(e.intentionData);break;case"xCETUSRedeem":r=ro.fromData(e.intentionData);break;case"VestingRedeem":r=eo.fromData(e.intentionData);break;case"AggregatorSwap":r=Yn.fromData(e.intentionData);break;case"AddVaultsPosition":r=Zn.fromData(e.intentionData);break;case"RemoveVaultsPosition":r=to.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:n,network:o})}};import{TransactionType as Om}from"@msafe/sui3-utils";import Bu from"sort-keys-recursive";var B=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Bu(this.data))}};import{getFullnodeUrl as co}from"@mysten/sui.js/client";var li={};ls(li,{contractId:()=>Nu,default:()=>Uu,feeObjId:()=>Lu,roleObjId:()=>Wu,status:()=>Eu,transaction:()=>Ru,upgradeCapObjId:()=>ju,vaultObjId:()=>_u});var Ru="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Eu="success",Nu="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Wu="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",_u="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Lu="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",ju="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Uu={transaction:Ru,status:Eu,contractId:Nu,roleObjId:Wu,vaultObjId:_u,feeObjId:Lu,upgradeCapObjId:ju};var ui={};ls(ui,{contractId:()=>Ku,default:()=>Qu,feeObjId:()=>Hu,roleObjId:()=>Vu,status:()=>Fu,transaction:()=>qu,upgradeCapObjId:()=>Gu,vaultObjId:()=>$u});var qu="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Fu="success",Ku="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Vu="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",$u="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Hu="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",Gu="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Qu={transaction:qu,status:Fu,contractId:Ku,roleObjId:Vu,vaultObjId:$u,feeObjId:Hu,upgradeCapObjId:Gu};var zu=co("testnet"),Ju=co("testnet"),Xu=co("mainnet"),Yu=co("mainnet"),Zu="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",tm="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",em="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",nm="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Xs=li,Ys=ui,om=new Map([["dev",{env:"dev",rpc:{url:zu},backend:{url:Zu},contract:Xs}],["stg",{env:"stg",rpc:{url:Ju},backend:{url:tm},contract:Xs}],["prev",{env:"prev",rpc:{url:Xu},backend:{url:em},contract:Ys}],["prod",{env:"prod",rpc:{url:Yu},backend:{url:nm},contract:Ys}]]);function Zs(a,e){let t=om.get(a);if(!t)throw new Error(`Env not supported: ${a}`);return e&&e.rpc&&(t.rpc=e.rpc),e&&e.backend&&(t.backend=e.backend),e&&e.contract&&(t.contract=e.contract),t}import{SuiClient as rm}from"@mysten/sui.js/client";var j=class extends Error{mpayErrorCode;context;constructor(e,t,n={}){let{cause:o,context:r}=n;o?super(`[MPay] ${t}: ${o}`):super(`[MPay] ${t}`),this.mpayErrorCode=e,this.context=r}};var lo=class extends j{constructor(){super(11,"Backend is not specified")}};var uo=class extends j{constructor(){super(1,"Wallet not connected")}};import we,{AxiosError as am}from"axios";var Te=class extends j{constructor(e,t){super(10,e,{context:t})}};var mo=class a{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof am)throw new Te(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new Te(e.data.code)}throw new Te(e.status.toString())}async getIncomingStreams(e,t){let n=await we.post(`${this.apiURL}/stream`,{recipient:e,...t});return a.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await we.post(`${this.apiURL}/stream`,{sender:e,...t});return a.parseResponseData(n)}async getStreamHistory(e){let t=await we.post(`${this.apiURL}/stream-events`,e),n=a.parseResponseData(t);return n.data.forEach(o=>{let r=o;return r.data.type==="create_stream"?r.data.balance=BigInt(r.data.balance):r.data.type==="cancel_stream"?r.data.withdrawAmount=BigInt(r.data.withdrawAmount):r.data.type==="claim"||r.data.type==="auto_claim"?r.data.claimAmount=BigInt(r.data.claimAmount):r.data.type==="set_auto_claim"&&(r.data.enabled=!!r.data.enabled),r.createdAt=new Date(r.createdAt),r}),n}async getAllCoinTypes(e){let t=await we.post(`${this.apiURL}/stream-info`,{address:e});return a.parseResponseData(t)}async getAllRecipients(e,t){let n=await we.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return a.parseResponseData(n)}async getAllSenders(e,t){let n=await we.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return a.parseResponseData(n)}};var Ie=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new rm({url:e.rpc.url}),e.backend&&(this._backend=new mo(e.backend.url))}static new(e,t){let n=Zs(e,t);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new lo;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 uo;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as xm,normalizeStructTag as Dm,normalizeSuiAddress as Cc}from"@mysten/sui.js/utils";import{TransactionBlock as bo}from"@mysten/sui.js/transactions";import{TransactionBlock as cc}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as lc,normalizeStructTag as lm}from"@mysten/sui.js/utils";var mi=50n,po=10000n,tc=25n,pi=100000000n;var zt=class{constructor(e){this.object=e}moveArg(e){return e.object(this.object)}},_e=class{constructor(e){this.objects=e}moveArgs(e){return e.makeMoveVec({objects:this.objects.map(t=>e.object(t))})}},oe=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=c=>new a(t.result[c]);if(n===Symbol.iterator)return function*(){let c=0;for(;;)yield o(c),c++};if(typeof n=="symbol")return;let r=parseInt(n,10);if(!(Number.isNaN(r)||r<0))return o(r)}})}moveArg(){return this.result}};import{Buffer as ec}from"buffer";import{normalizeSuiAddress as im}from"@mysten/sui.js/utils";var Le=class extends j{constructor(e,t){super(3,e,{context:t})}};var fo=class{constructor(e){this.results=e}callResult(e){return this.results.results[e]}returnValue(e,t){return e.returnValues[t]}getValue(e=0,t=0){let n=this.callResult(e);return this.returnValue(n,t)}getAddress(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="address")throw new Le("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return im(ec.from(n).toString("hex"))}getU64(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="u64")throw new Le("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return ec.from(n).readBigInt64LE()}};import{bcs as oc}from"@mysten/sui.js/bcs";var H=class extends j{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var ac={groupId:"string",name:"string"},sm=64;function rc(a){return ic(a),oc.ser(ac,a).toString("base64")}function je(a){let e=oc.de(ac,a,"base64");return ic(e),e}function ic(a){if(!nc(a.name))throw new H("Invalid metadata: Name contains unknown character");if(!nc(a.groupId))throw new H("Invalid metadata: Group ID contains unknown character");if(a.name.length>sm)throw new H("Invalid metadata: Name exceed max length 64")}function nc(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as ho}from"@mysten/sui.js/utils";function go(a,e){return ho(a)===ho(e)}function ae(a,e){return ho(a)===ho(e)}var yo="txn.gas";import{nanoid as cm}from"nanoid";function sc(){return cm()}var pe=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:rc({name:e.name,groupId:sc()}),coinType:lm(e.coinType),recipients:e.recipients.map(t=>({address:t.address,cliffAmount:t.cliffAmount,amountPerEpoch:t.amountPerStep})),epochInterval:e.interval,numberEpoch:e.steps,startTime:e.startTimeMs,cancelable:e.cancelable}}async buildCreateStreamTransactionBlock(e){let t=new cc,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),r=await this.wallet.requestCoins(o),c=await this.addMergeCoins(t,r[0]),u;o.length>1?u=await this.addMergeCoins(t,r[1]):u=c;for(let d=0;d<e.recipients.length;d++){let S=e.recipients[d],w=this.amountForRecipient(S,e.numberEpoch),I=this.getStreamFeeLocal(w),[C]=t.splitCoins(c,[t.pure(w+I,"u64")]),[k]=t.splitCoins(u,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new oe(C),flatFeeCoin:new oe(k),metadata:e.metadata,recipient:S.address,timeStart:e.startTime,cliff:S.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:S.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return t}calculateCreateStreamFees(e){let t=a.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(t)}feeParams(){return{createFeePercent:{numerator:mi,denominator:po},claimFeePercent:{numerator:tc,denominator:po},flatFeePerStream:pi}}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===yo?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return go(n,lc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:lc,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,r)=>{let c=this.amountForRecipient(r,e.numberEpoch),u=this.getStreamFeeLocal(c);return{totalAmount:o.totalAmount+c,streamFeeAmount:o.streamFeeAmount+u}},{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 pi}getStreamFeeLocal(e){return e*mi/po}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new cc,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new fo(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as mc}from"@mysten/sui.js/transactions";var uc="0x0000000000000000000000000000000000000000000000000000000000000006";var Ce=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.add(mc.MoveCall({target:n,arguments:t.arguments.map(o=>o instanceof _e?o.moveArgs(e):o instanceof zt?o.moveArg(e):o instanceof oe?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,n=[],o=[]){e.add(mc.MoveCall({target:t,arguments:n.map(r=>r instanceof _e?r.moveArgs(e):r instanceof zt?r.moveArg(e):r instanceof oe?r.moveArg():e.pure(r)),typeArguments:o}))}makeObject(e){return typeof e=="string"?new zt(e):e}vaultObject(){return new zt(this.config.vaultObjId)}roleObject(){return new zt(this.config.roleObjId)}feeObject(){return new zt(this.config.feeObjId)}clockObject(){return new zt(uc)}};var ke=class a extends Ce{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(t,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_fee,arguments:[o,r,n],typeArgs:[]})}setStreamingFlatFee(t,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_flat_fee,arguments:[o,r,n],typeArgs:[]})}setClaimFee(t,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_claim_fee,arguments:[o,r,n],typeArgs:[]})}streamingFee(t,n){let o=this.feeObject();return this.addContractCall(t,{method:a.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(t,n){return this.addContractCall(t,{method:a.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(t){return this.addContractCall(t,{method:a.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var Jt=class a extends Ce{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(t,n){let o=this.feeObject(),r=this.vaultObject(),c=this.makeObject(n.paymentCoin),u=this.makeObject(n.flatFeeCoin),d=this.clockObject();return this.addContractCall(t,{method:a.MethodName.create_stream,arguments:[o,r,c,u,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,d],typeArgs:[n.coinType]})}setAutoClaim(t,n){let o=this.makeObject(n.streamId);return this.addContractCall(t,{method:a.MethodName.set_auto_claim,arguments:[o,n.enabled],typeArgs:[n.coinType]})}cancelStream(t,n){let o=this.makeObject(n.streamId),r=this.clockObject();return this.addContractCall(t,{method:a.MethodName.cancel_stream,arguments:[o,r],typeArgs:[n.coinType]})}claimStream(t,n){let o=this.makeObject(n.streamId),r=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream,arguments:[o,r],typeArgs:[n.coinType]})}claimStreamByProxy(t,n){let o=this.makeObject(n.streamId),r=this.vaultObject(),c=this.feeObject(),u=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,r,c,u],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream_by_proxy}`}};var ve=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new ke(t,e),this.streamContract=new Jt(t,e)}feeContract;streamContract;async createStreams(e){let t=pe.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new pe(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,n){let o=new bo;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new bo;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new bo;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new bo;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as di,SUI_TYPE_ARG as um}from"@mysten/sui.js/utils";import{Duration as pc}from"luxon";var So=class extends j{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var mm=1e3,To=class{constructor(e){this.globals=e;this.coinMetaHelper=new fi(e.suiClient),this.createStreamHelper=new ve(e).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new So(e.effects?.status.status,e.effects?.status.error);return e.objectChanges.filter(t=>t.type==="created"&&t.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(t=>t.objectId)}calculateCreateStreamFees(e){return this.createStreamHelper.calculateCreateStreamFees(e)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(e){if(e.steps===0n)throw new H("Invalid stream steps: 0");let t=e.cliff?e.cliff:{numerator:0n,denominator:100n},n=e.totalAmount*t.numerator/t.denominator,o=(e.totalAmount-n)/e.steps,c={realTotalAmount:o*e.steps+n,cliffAmount:n,amountPerStep:o};return this.validateStreamAmount(c,e.totalAmount),c}calculateTimelineByInterval(e){if(e.steps===0n)throw new H("Invalid stream steps: 0");let t=e.timeStart.plus(e.interval.toMillis()*Number(e.steps)),n={timeStart:e.timeStart,timeEnd:t,interval:e.interval,steps:e.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(e){if(e.steps===0n)throw new H("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(pc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:pc.fromMillis(Number(t)),steps:e.steps};return this.validateTimeline(o),o}async getBalance(e,t){let n=await this.globals.suiClient.getBalance({owner:e,coinType:t}),o=await this.getCoinMeta(t);return{...n,coinType:di(n.coinType),coinMeta:o}}async getAllBalance(e){let t=await this.globals.suiClient.getAllBalances({owner:e}),n=await Promise.all(t.map(o=>this.getCoinMeta(o.coinType)));return t.map((o,r)=>({...o,coinType:di(o.coinType),coinMeta:n[r]}))}async getCoinMeta(e){return this.coinMetaHelper.getCoinMeta(e)}async simulateTransactionBlock(e){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:e,sender:await this.globals.wallet.address()})}validateStreamAmount(e,t){if(e.amountPerStep===0n)throw new H("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new H("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<mm)throw new H("Interval shall be at least 1 second","interval",e.interval)}},fi=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(e){let t=di(e||um);if(this.coinMetaReg.has(t))return this.coinMetaReg.get(t);let n=await this.queryCoinMeta(t);return n&&this.coinMetaReg.set(t,n),n}async queryCoinMeta(e){return await this.suiClient.getCoinMetadata({coinType:e})||void 0}};import{normalizeStructTag as hc,normalizeSuiAddress as xo}from"@mysten/sui.js/utils";import{DateTime as gc}from"luxon";import{TransactionBlock as ko}from"@mysten/sui.js/transactions";import{normalizeStructTag as fc,parseStructTag as fm}from"@mysten/sui.js/utils";import{DateTime as hm}from"luxon";var wo=class extends j{constructor(){super(7,"Connected wallet is not creator")}};var Ue=class extends j{constructor(){super(8,"Connected wallet is not recipient")}};var qe=class extends j{constructor(e,t){super(6,e,{context:t})}};var At=class extends j{constructor(e,t={}){super(0,e,t)}};var Io=class extends j{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as pm,Duration as dm}from"luxon";var dc=(1n<<64n)-1n,Co=1e3;function hi(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Co);return pm.fromMillis(t*Co)}function gi(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Co);return dm.fromMillis(t*Co)}var re=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Jt(e.envConfig.contract,e)}streamContract;type="Stream";static async new(e,t){let n=await a.fetchStreamData(e,t);return new a(e,t,n)}static fromObjectData(e,t,n){let o=a.parseRawStreamData(t,n);return new a(e,t,o)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await a.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new At("Object Id does not align");this.rawData=a.parseRawStreamData(this.streamId,e)}async historyEvents(e){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:e})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new wo;let e=new ko;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Ue;let e=new ko;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new Ue;let t=new ko;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new ko;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 fc(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 gi(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return je(e).groupId}get name(){let{metadata:e}=this.rawData.config;return je(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 gi(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===dc?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=hm.now().toMillis(),t=this.timeStart.toMillis();if(e<t)return-1n;let n=Math.floor((e-t)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let e=this.rawData.config;return e.amountPerEpoch*e.totalEpoch+e.cliff}get isCanceled(){let e=this.rawData.status.status;return e===16||e===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(e,t){let n=await e.suiClient.getObject({id:t,options:{showContent:!0,showType:!0}});return a.parseRawStreamData(t,n)}static parseRawStreamData(e,t){if(t.error)throw t.error.code==="notExists"?new Io(e):new qe(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new qe("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=fm(n.type),r=fc(o[0]),c=n.fields,u=c.config.fields,d=c.status.fields;return{coinType:r,autoClaim:c.auto_claim,balance:BigInt(c.balance.fields.balance),config:{amountPerEpoch:BigInt(u.amount_per_epoch),cancelable:u.cancelable,cliff:BigInt(u.cliff),creator:u.creator,epochInterval:BigInt(u.epoch_interval),metadata:u.metadata,recipient:u.recipient,timeStart:BigInt(u.time_start),totalEpoch:BigInt(u.total_epoch)},status:{status:d.status,epochCanceled:BigInt(d.epoch_canceled),epochClaimed:BigInt(d.epoch_claimed)}}}};var xe=class extends j{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function bi(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 yi=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},De=class{constructor(e){this.requester=e;this.pager=new yi(e),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};var gm=25;async function Ti(a,e,t){let n=new Fe(e),o=new Ke(a,n,t);return await bi(o)}var Fe=class{constructor(e){this.ids=e;this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},Ke=class extends De{constructor(t,n,o){super(new Si(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}},Si=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||gm,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let e=[];for(;e.length<this.pageSize&&await this.stringIter.hasNext();){let r=await this.stringIter.next();r&&e.push(r)}let t=await this.suiClient.multiGetObjects({ids:e,options:this.objectOptions}),n;if(this.filter){let{filter:o}=this;n=t.filter(r=>o?.(r))}else n=t;return{data:n,hasNext:await this.stringIter.hasNext()}}};var vo=class a{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new xe("stream size 0");let n=t.map(r=>r.groupId);if(new Set(n).size!==1)throw new H("Stream does not have same group ID")}type="StreamGroup";static async new(e,t){let n=await Ti(e.suiClient,t);return n.forEach(o=>{if(!o)throw new At("stream group object data undefined")}),a.newFromObjectResponse(e,t,n)}static async newFromObjectResponse(e,t,n){let o=await a.parseGroupStreams(e,t,n);return new a(e,o)}static checkStreamGroup(e){let t=e.map(r=>r.groupCommonInfo),n=t[0],o=!0;return t.forEach(r=>{ym(n,r)||(o=!1)}),o}async refresh(){let e=await Ti(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((r,c)=>re.fromObjectData(e,t[c],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new xe("Not same group ID");if(!this.checkStreamGroup(o))throw new xe("Not same stream settings");return o}};function ym(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 Ve=class a{constructor(e,t){this.it=e;this.pageSize=t}static async newIncoming(e){let t=await Do.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Do.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}},Do=class a{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let t=await Ao.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await Ao.newOutgoingQuery(e);return new a(t)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let t=await this.requester.doNextRequest();if(t===null)throw new At("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new At("No more results");return e}},Ao=class a{constructor(e,t,n,o){this.globals=e;this.recipient=t;this.groupRefs=n;this.query=o;this.current=0;let r=new Fe(n.flat().map(c=>c.streamId));this.objectIter=new Ke(e.suiClient,r)}current=0;objectIter;static async newIncomingQuery(e){let t=Im(e.query),n=await e.globals.walletAddress(),r=(await e.globals.backend.getIncomingStreams(n,t)).filter(u=>xo(u.recipient)===xo(n)),c=yc(r);return new a(e.globals,n,c,e.query)}static async newOutgoingQuery(e){let t=Cm(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),r=yc(o);return new a(e.globals,n,r,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 Tm(this.globals,e[0].streamId,this.objectIter);return this.current++,bc(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await wm(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,Sm(t,this.query)?t:this.doNextRequest()}throw new At("Stream group with no stream")}};function yc(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)=>gc.fromISO(n[0].createDate).toMillis()-gc.fromISO(t[0].createDate).toMillis())}function bc(a,e){if(e===void 0)return!0;let t=bm(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 bm(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function Sm(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{bc(n,e)&&(t=!0)}),t}async function Tm(a,e,t){let n=await Sc(t,e);return re.fromObjectData(a,e,n)}async function wm(a,e,t){let n=[];for(;n.length<e.length;){let o=await Sc(t,e[n.length]);n.push(o)}return vo.newFromObjectResponse(a,e,n)}async function Sc(a,e){if(!await a.hasNext())throw new At("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new At("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new At("stream id not aligned");return t}function Im(a){return{status:wi(a?.status),coinType:Tc(a?.coinType),sender:wc(a?.sender)}}function Cm(a){return{status:wi(a?.status),coinType:Tc(a?.coinType),recipient:wc(a?.recipient)}}function wi(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=wi(t);return!e||e===n?n:"all"},void 0):km(a)}function km(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new H("Unknown stream filtered status")}}function Tc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>hc(e)):void 0:hc(a)}function wc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>xo(e)):void 0:xo(a)}var Oo=class extends j{constructor(t,n,o){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:n,gotAmount:o}});this.coinType=t;this.requestAmount=n;this.gotAmount=o}};var vm=25;async function Ic(a,e,t,n="0x2::sui::SUI",o=vm){let r=new Ii(a,e,n,o),c=BigInt(0),u=[];for(;await r.hasNext()&&c<t;){let d=await r.next();d&&(u.push(d),c+=BigInt(d.balance))}if(c<t)throw new Oo(n,t,c);return u}var Ii=class extends De{constructor(t,n,o,r){super(new Ci(t,n,o,r));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=r}},Ci=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new At("Invalid reqPageSize")}nextCursor;async doNextRequest(){let e=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=e.nextCursor,{data:e.data,hasNext:e.hasNextPage}}};var ki=class{constructor(e){this.msafe=e}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},Mo=class{constructor(e){this.account=e}async address(){return this.account.address}},vi=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(e){return Promise.all(e.map(t=>this.requestCoin(t)))}async requestCoin(e){if(go(e.coinType,xm))return{primaryCoin:yo};if(e.amount<=0)throw new H("Invalid coin request","coinAmount",e.amount);let t=await Ic(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new At("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},Po=class{globals;helper;constructor(e,t){this.globals=Ie.new(e,t),this.helper=new To(this.globals)}connectSingleWallet(e){let t=new vi(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new ki(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return re.new(this.globals,e)}async getIncomingStreams(e,t=10){return Ve.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return Ve.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=>Dm(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Cc(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Cc(o))}get wallet(){return this.globals.wallet}builder(){return new ve(this.globals)}};var Ut=class extends B{application="mpay";getClient(e,t){let n=new Po(e==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new Mo(t)),n}};var $e=class extends Ut{constructor(t){super(t);this.data=t}txType=Om.Stream;txSubType="Cancel";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).cancel()}};import{TransactionType as Mm}from"@msafe/sui3-utils";var He=class extends Ut{constructor(t){super(t);this.data=t}txType=Mm.Stream;txSubType="ClaimByProxy";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as Pm}from"@msafe/sui3-utils";var Ge=class extends Ut{constructor(t){super(t);this.data=t}txType=Pm.Stream;txSubType="Claim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claim()}};import{TransactionType as Bm}from"@msafe/sui3-utils";var Qe=class extends Ut{constructor(t){super(t);this.data=t}txType=Bm.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as kc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Rm,normalizeSuiAddress as ze}from"@mysten/sui.js/utils";var Ae=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return BigInt(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return ze(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return kc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return ze(e.value.Object.ImmOrOwned.objectId)}return ze(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return ze(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return ze(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return kc.de(t,new Uint8Array(n))}typeArg(e){return Rm(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var Bo=class{constructor(e,t){this.globals=e;this.txb=t}decode(){let e=this.decodeCreateStreamInfo(),t=this.createStreamHelper().calculateCreateStreamFees(e);return{type:"CreateStream",info:e,fees:t}}decodeCreateStreamInfo(){let t=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(t)}createStreamTransactions(){let e=this.transactions.filter(t=>t.kind==="MoveCall"&&ae(t.target,this.contract.createStreamTarget));if(e.length===0)throw new At("No create stream transactions");return e.map(t=>new Ae(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=je(t),r=e.decodeInputAddress(5),c=e.decodeInputU64(6),u=e.decodeInputU64(7),d=e.decodeInputU64(8),S=e.decodeInputU64(9),w=e.decodeInputU64(10),I=e.decodeInputBool(11),C=e.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:c,cliff:u,epochInterval:d,totalEpoch:S,amountPerEpoch:w,cancelable:I,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 H("Stream group not have common info");let n=e.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:e[0].name,coinType:e[0].coinType,recipients:n,interval:e[0].epochInterval,steps:e[0].totalEpoch,startTimeMs:e[0].timeStart,cancelable:e[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(e=>e.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new Jt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new ke(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new pe(this.globals,this.feeContract,this.contract)}getInputArg(e){if(e.kind!=="Input")throw new Error("not input type");return"value"in e?e:this.txb.blockData.inputs[e.index]}};var Ro=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Jt(e.envConfig.contract,e)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(t=>t.kind==="MoveCall"&&ae(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ae(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ae(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ae(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&ae(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Bo(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:e,enabled:t}}decodeClaimTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Claim",streamId:e}}decodeClaimByProxyTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"ClaimByProxy",streamId:e}}decodeCancelStreamTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Cancel",streamId:e}}get helper(){let e=this.transactions[0];return new Ae(e,this.txb)}};import{TransactionType as Em}from"@msafe/sui3-utils";var Je=class extends Ut{constructor(t){super(t);this.data=t}txType=Em.Stream;txSubType="SetAutoClaim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var Eo=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(e){let{network:t,transactionBlock:n}=e,o=Ie.new(t==="sui:mainnet"?"prod":"dev"),c=new Ro(o,n).decode(),u;switch(c.type){case"CreateStream":u=new Qe(c.info);break;case"SetAutoClaim":u=new Je({streamId:c.streamId,enabled:c.enabled});break;case"Claim":u=new Ge({streamId:c.streamId});break;case"ClaimByProxy":u=new He({streamId:c.streamId});break;case"Cancel":u=new $e({streamId:c.streamId});break;default:throw new Error(`Unknown transaction type: ${c}`)}return{txType:u.txType,txSubType:u.txSubType,intentionData:u.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new Qe(t);break;case"Claim":n=new Ge(t);break;case"ClaimByProxy":n=new He(t);break;case"SetAutoClaim":n=new Je(t);break;case"Cancel":n=new $e(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as _m,TransactionSubTypes as vc}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Nm}from"@msafe/sui3-utils";var No=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return Nm(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as Wm}from"@msafe/sui3-utils";var Wo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return Wm(n,this.data,o.address)}static fromData(t){return new a(t)}};var _o=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=_m}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case vc.assets.coin.send:o=No.fromData(e.intentionData);break;case vc.assets.object.send:o=Wo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Ym}from"@msafe/sui3-utils";var xc=!1,Xe={ProtocolPackage:"0x81c408448d0d57b3e371ea94de1d40bf852784d3e225de1e74acab3e8395c18f",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function xi(){if(!xc)try{let a=await fetch("https://open-api.naviprotocol.io/api/msafe").then(r=>r.json()),{packageId:e,borrowFee:t,borrowFeeAddress:n,pool:o}=a;e&&(Xe.ProtocolPackage=e),t&&(Xe.borrowFee=t),n&&(Xe.borrowFeeAddress=n),o&&(Xe.pool=o),xc=!0}catch(a){console.error(a.message)}}var Vt=Xe;import{TransactionType as fe}from"@msafe/sui3-utils";import{bcs as Dc}from"@mysten/sui.js/bcs";import{normalizeStructTag as jm,normalizeSuiAddress as Ye}from"@mysten/sui.js/utils";var Lo=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();if(this.isEntryClaimAndDepositTransaction())return this.decodeEntryClaimAndDeposit();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isClaimRewardTransaction(){return!!this.transactions.find(t=>!!(t.kind==="MoveCall"&&t.target.includes("claim_reward")))}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::borrow`)}isEntryMultiDepositTransaction(){let e=`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))?!1:t.length>1}isEntryClaimAndDepositTransaction(){let e=`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return!!(this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))&&t.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${Vt.ProtocolPackage}::incentive_v3::withdraw`)}findPoolByAssetId(e){let t=Object.values(Vt.pool).find(n=>n.assetId===e);if(!t)throw new Error("Pool not found");return t}decodeEntryClaimAndDeposit(){return{txType:fe.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return console.log("decode claims"),{txType:fe.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:fe.Other,type:"EntryBorrow",intentionData:{amount:t,assetId:e}}}decodeEntryMultiDeposit(){let e=[],t=`${Vt.ProtocolPackage}::incentive_v3::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===t){let o=new jo(n,this.txb),r=o.decodeInputU8(3),c=o.decodeInputU64(5);e.push({assetId:r,amount:c})}}),{txType:fe.Other,type:"EntryMultiDeposit",intentionData:{list:e}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5);return{txType:fe.Other,type:"EntryDeposit",intentionData:{amount:t,assetId:e}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6);return{txType:fe.Other,type:"EntryRepay",intentionData:{amount:t,assetId:e}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:fe.Other,type:"EntryWithdraw",intentionData:{amount:t,assetId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(Vt.ProtocolPackage));return new jo(e,this.txb)}},jo=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return Ye(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 Dc.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 Ye(e.value.Object.ImmOrOwned.objectId)}return Ye(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Ye(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Ye(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 Dc.de(t,new Uint8Array(n))}typeArg(e){return jm(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{depositCoin as Um,withdrawCoin as qm,repayDebt as Fm,borrowCoin as Km,claimAllRewardsPTB as Vm,claimAllRewardsResupplyPTB as $m}from"navi-sdk";async function Oe(a,e,t,n){return await Um(a,e,t,n),a}async function Ac(a,e,t,n){let[o]=await qm(a,e,t);return a.transferObjects([o],a.pure(n)),a}async function Oc(a,e,t,n){let[o]=await Km(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Di(a,e,t,n){return await Fm(a,e,t,n),a}async function Mc(a,e){return await Vm(a,e)}async function Pc(a,e){return await $m(a,e)}var Uo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await Mc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var qo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await Pc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Gm}from"@mysten/sui.js/transactions";import{pool as Hm}from"navi-sdk";function Xt(a){return Object.values(Hm).find(e=>String(e.assetId)===String(a))}var Fo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,r=new Gm;console.log("build",this.data);let c=Xt(n);return await Oc(r,c,o,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Qm}from"@mysten/sui.js/transactions";async function Me(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var Ko=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:r,amount:c}=this.data,u=new Qm;console.log("build",this.data);let d=Xt(r);if(r===0){let[C]=u.splitCoins(u.gas,[c]);return await Oe(u,d,C,c)}let S=await Me(n,o.address,d.type);if(!S.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let w=S.data[0].coinObjectId;if(S.data.length>=2){let C=1;for(;C<S.data.length;)u.mergeCoins(w,[S.data[C].coinObjectId]),C++}return await Oe(u,d,u.object(w),c)}static fromData(t){return new a(t)}};import{TransactionBlock as zm}from"@mysten/sui.js/transactions";var Vo=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:r,amount:c}=this.data,u=new zm;console.log("build",this.data);let d=Xt(r);if(r===0){let[I]=u.splitCoins(u.gas,[c]);return Di(u,d,I,c)}let S=await Me(n,o.address,d.type);if(!S.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let w=S.data[0].coinObjectId;if(S.data.length>=2){let I=1;for(;I<S.data.length;)u.mergeCoins(w,[S.data[I].coinObjectId]),I++}return Di(u,d,u.object(w),c)}static fromData(t){return new a(t)}};import{TransactionBlock as Jm}from"@mysten/sui.js/transactions";var $o=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,r=new Jm;console.log("build",this.data);let c=Xt(n);return await Ac(r,c,o,t.account.address)}static fromData(t){return new a(t)}};import{TransactionBlock as Xm}from"@mysten/sui.js/transactions";var Ho=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:r}=this.data,c=new Xm;console.log("build",this.data);for(let u=0;u<r.length;u++){let{assetId:d,amount:S}=r[u],w=Xt(d);if(d===0){let[k]=c.splitCoins(c.gas,[S]);await Oe(c,w,k,S);continue}let I=await Me(n,o.address,w.type);if(!I.data[0])throw new Error(`Insufficient balance for ${w.name} Token`);let C=I.data[0].coinObjectId;if(I.data.length>=2){let k=1;for(;k<I.data.length;)c.mergeCoins(C,[I.data[k].coinObjectId]),k++}await Oe(c,w,c.object(C),S)}return c}static fromData(t){return new a(t)}};var Go=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(e){await xi();let{transactionBlock:t}=e,o=new Lo(t).decode();return{txType:Ym.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await xi(),e.txSubType){case"EntryDeposit":o=Ko.fromData(e.intentionData);break;case"EntryBorrow":o=Fo.fromData(e.intentionData);break;case"EntryRepay":o=Vo.fromData(e.intentionData);break;case"EntryWithdraw":o=$o.fromData(e.intentionData);break;case"EntryMultiDeposit":o=Ho.fromData(e.intentionData);break;case"ClaimReward":o=Uo.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=qo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as Zm,TransactionType as Bc}from"@msafe/sui3-utils";import{fromHex as tp}from"@mysten/bcs";import{Transaction as ep}from"@mysten/sui/transactions";import np from"sort-keys-recursive";var Rc="msafe-plain-tx",Ec=Zm.others.plain,Ai=class a{constructor(e){this.data=e}application=Rc;txType=Bc.Other;txSubType=Ec;serialize(){return JSON.stringify(np(this.data))}async build(e){return ep.from(tp(this.data.content))}static fromData(e){return new a(e)}},Qo=class{application;supportSDK="@mysten/sui";constructor(){this.application=Rc}async deserialize(e){let{content:t}=e.appContext;return{txType:Bc.Other,txSubType:Ec,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return Ai.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{SuiClient as Nc}from"@mysten/sui/client";import{Transaction as lp}from"@mysten/sui/transactions";import{SuiClient as Pi}from"@mysten/sui.js/client";import{TransactionBlock as up}from"@mysten/sui.js/transactions";import{RequestManager as ip,HTTPTransport as sp,Client as cp}from"@open-rpc/client-js";var op={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Oi=class extends Error{},zo=class extends Oi{code;type;constructor(e,t){super(e),this.code=t,this.type=op[t]??"ServerError"}};function ap(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var rp={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},Jo=class{endpoint;options;#n=0;#a=0;#t=null;#e=null;#r=new Set;#o=new Map;constructor(e,t={}){this.endpoint=e,this.options={...rp,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=ap(this.endpoint))}async makeRequest(e,t){let n=await this.#i();return new Promise((o,r)=>{this.#n+=1,this.#o.set(this.#n,{resolve:o,reject:r,timeout:setTimeout(()=>{this.#o.delete(this.#n),r(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:r})=>{if(o)throw new zo(o.message,o.code);return r})}#i(){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:r}=this.#o.get(n.id);clearTimeout(r),o(n)}else if("params"in n){let{params:o}=n;this.#r.forEach(r=>{r.subscriptionId===o.subscription&&o.subscription===r.subscriptionId&&r.onMessage(o.result)})}})}),this.#e)}async#s(){return this.#t?.close(),this.#e=null,Promise.allSettled([...this.#r].map(e=>e.subscribe(this)))}async subscribe(e){let t=new Mi(e);return this.#r.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},Mi=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 ie=class{rpcClient;websocketClient;constructor({url:e,websocket:{url:t,...n}={},rpc:o}){let r=new sp(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new cp(new ip([r])),this.websocketClient=new Jo(t??e,n)}async request(e){return await this.rpcClient.request(e)}async subscribe(e){let t=await this.websocketClient.subscribe(e);return async()=>!!await t()}};var Xo=class a{apps;constructor(){this.apps=new Map}static fromHelpers(e){let t=new a;for(let n=0;n<e.length;n++){let o=e[n];switch(o.supportSDK){case"@mysten/sui.js":t.addLegacyHelper(o);break;case"@mysten/sui":t.addHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return t}addLegacyHelper(e){this.apps.set(e.application,new Ri(e))}addHelper(e){this.apps.set(e.application,new Bi(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},Bi=class{constructor(e){this.helper=e}async deserialize(e){let t=new Nc({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new Pi({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),r=lp.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:r})}async build(e){let t=new Nc({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiClient:t});o.setSender(e.account.address);let r=await o.build({client:t});return up.from(r)}},Ri=class{constructor(e){this.helper=e}async deserialize(e){let t=new Pi({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})});return this.helper.deserialize({...e,transactionBlock:e.transactionBlock,suiClient:t})}async build(e){let t=new Pi({transport:new ie({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");return this.helper.build({...e,suiClient:t})}};import{TransactionType as Tp}from"@msafe/sui3-utils";import{getFullnodeUrl as wp}from"@mysten/sui/client";import{Scallop as Ip}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Mt}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as Uc}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as mp}from"@mysten/sui/utils";var se=class{constructor(e,t){this.transaction=e;this.scallopClient=t;this.scallopClient=t,this.inputs=e.getData().inputs,this.commands=e.getData().commands,this.movecallsAsSet=new Set(this.commands.filter(this.isMoveCall).map(n=>`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`))}inputs;commands;movecallsAsSet;get address(){return this.scallopClient.address}get utils(){return this.scallopClient.utils}get coreId(){return{protocolPkg:this.address.get("core.packages.protocol.id"),market:this.address.get("core.market"),version:this.address.get("core.version"),coinDecimalsRegistry:this.address.get("core.coinDecimalsRegistry"),xOracle:this.address.get("core.oracles.xOracle"),spoolPkg:this.address.get("spool.id"),borrowIncentivePkg:this.address.get("borrowIncentive.id"),veScaPkgId:this.address.get("vesca.id"),veScaObjId:this.address.get("vesca.object"),scoin:this.address.get("scoin.id"),referral:this.address.get("referral.id")}}matchMoveCallCommand(e,t){let{address:n,module:o,name:r}=mp(t);return e?e.package===n&&e.module===o&&e.function===r:!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((r,c,u)=>(r[c]=u,r),{}),o=[];return this.commands.forEach(r=>{this.isMoveCall(r)&&r.MoveCall&&t.has(r.MoveCall.package)&&(o[n[r.MoveCall.package]]=r.MoveCall)}),o}hasMoveCallCommand(e){return this.movecallsAsSet.has(e)}};import{bcs as Ei}from"@mysten/sui/bcs";import{normalizeStructTag as pp,normalizeSuiAddress as Ze}from"@mysten/sui/utils";var Ni=class a{constructor(e,t,n=0){this.moveCall=e;this.transaction=t;let o=[];e?.MoveCall&&t.getData().commands.filter((r,c)=>{if(r.$kind==="MoveCall"){let u=`${r.MoveCall.package}::${r.MoveCall.module}::${r.MoveCall.function}`,d=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return u===d?(o.push(c),!0):!1}return!1}),this.cmdIdx=o[n]}cmdIdx;get txBlockTransactions(){return this.transaction.blockData.transactions[this.cmdIdx]}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"U64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"U8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"Address");return Ze(t)}decodeInputString(e){return this.decodePureArg(e,"String")}decodeInputBool(e){return this.decodePureArg(e,"Bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return t}getNestedInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="NestedResult")throw new Error("not input type");return this.transaction.blockData.transactions[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure,o=Ei[t];return Ei[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 Ze(e.value.Object.ImmOrOwned.objectId)}return Ze(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Ze(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Ze(e.value.Object.Shared.objectId)}static getPureInput(e){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 Ei.U64.parse(new Uint8Array(t))}typeArg(e){return pp(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},W=Ni;var Wi=class{constructor(e,t){this.splitCoin=e;this.txb=t}getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(W.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},Bt=Wi;import{normalizeStructTag as Wc,SUI_CLOCK_OBJECT_ID as _c,SUI_TYPE_ARG as dp}from"@mysten/sui/utils";var Lc=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 r=a.address.get("borrowIncentive.object");return o===`${r.slice(2)}::incentive_account::IncentiveProgramLockKey`},Pe={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},qt={unstakeObligation:(a,e,t)=>a.moveCall(`${Pe.id}::user::unstake`,[Pe.incentivePools,Pe.incentiveAccounts,a.object(e),a.object(t),_c],[Wc(dp)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${Pe.id}::user::redeem_rewards`,[Pe.incentivePools,Pe.incentiveAccounts,a.object(e),a.object(t),_c],[Wc(n)])};var jc=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var Yo=class extends se{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(`${Uc}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`),n=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake`);return e&&(t||n)}get helperClaimLendingReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${Uc}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new W(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new W(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new W(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new W(e,this.transaction)}get helperBurnScoin(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new W(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new W(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new W(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new W(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new W(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new W(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new W(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new W(e,this.transaction)}decodeMigrateScoin(){return{txType:Mt.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:Mt.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Mt.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Bt(t,this.transaction).getAmountInput().reduce((o,r)=>o+r,0);return{txType:Mt.Other,type:"SupplyLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLending(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperRedeem.getNestedInputParam(2),n=new Bt(t,this.transaction).getAmountInput().reduce((o,r)=>o+r,0);return{txType:Mt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0));console.log({coinName:e});let t=this.helperBurnScoin.getNestedInputParam(1),n=new Bt(t,this.transaction).getAmountInput().reduce((o,r)=>o+r,0);return{txType:Mt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeDepositCollateral(){let e=this.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),t=this.helperDepositCollateral.getNestedInputParam(3),n=new Bt(t,this.transaction).getAmountInput().reduce((r,c)=>r+c,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Mt.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:Mt.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:Mt.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),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Mt.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:e,obligationKey:r,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),r=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:Mt.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:e,obligationKey:r,obligationId:o,veScaKey:t}}}decodeRepay(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperRepay.getNestedInputParam(3),n=new Bt(t,this.transaction).getAmountInput().reduce((r,c)=>r+c,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Mt.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:e}}}decodeRepayWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new Bt(n,this.transaction).getAmountInput().reduce((c,u)=>c+u,0),r=this.helperRepay.decodeSharedObjectId(1);return{txType:Mt.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:r,coinName:e,veScaKey:t}}}decodeStakeSpool(){let e;this.isCreateStakeAccountTransaction()||(e=this.helperStake.decodeOwnedObjectId(1));let t=0;if(this.helperBurnScoin.moveCall){let r=this.helperBurnScoin.getNestedInputParam(1);t=new Bt(r,this.transaction).getAmountInput().reduce((c,u)=>c+u,0)}if(this.helperStake.moveCall&&t===0){let r=this.helperStake.getNestedInputParam(2);t=new Bt(r,this.transaction).getAmountInput().reduce((c,u)=>c+u,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Mt.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:Mt.Other,type:"UnstakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeSupplyWithStakeSpool(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Bt(t,this.transaction).getAmountInput().reduce((r,c)=>r+c,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Mt.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let e=[];this.helperUnstakes.forEach(o=>{let r=o.decodeOwnedObjectId(1),c=o.decodeInputU64(2);e.push({id:r,coin:c})});let t=this.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new Bt(o,this.transaction).getAmountInput().reduce((r,c)=>r+c,0)}return{txType:Mt.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:e}}}decodeClaimReward(){let e=[],t=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let r=o.decodeOwnedObjectId(2),c=o.typeArg(0),u=this.utils.parseCoinNameFromType(c);e.push({stakeMarketCoinName:u,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(o=>{let r=o.decodeSharedObjectId(4),c=o.decodeOwnedObjectId(3),u=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:c,obligationKey:r,rewardCoinName:u})}),this.helperClaimBorrowReward.forEach(o=>{let r=o.decodeSharedObjectId(2),c=o.decodeOwnedObjectId(3),u=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:c,obligationKey:r,rewardCoinName:u})}),{txType:Mt.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as Li}from"@msafe/sui3-utils";var Zo=class extends se{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(t=>new W(t,this.transaction))}get helperBindReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new W(e,this.transaction)}decodeCreateReferralLink(){return{txType:Li.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Li.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:Li.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as Zt}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as fp}from"@scallop-io/sui-scallop-sdk";var ta=class extends se{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(u=>this.filterMoveCallCommands(u,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(u=>this.filterMoveCallCommands(u,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(u=>this.filterMoveCallCommands(u,`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`)),o=e.length>0&&t.length>0&&e.length===t.length,r=n.length>0;return this.commands.length===e.length+t.length+n.length&&(o||r)}async isTransferVeScaKey(){let e=this.commands.filter(d=>d.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(d=>d.$kind==="Input").map(({Input:d})=>d);if(n.length!==t.length)return!1;let o=new Set(n),r=this.inputs.filter((d,S)=>d.$kind==="Object"&&o.has(S)).map(d=>d.Object.ImmOrOwnedObject),c=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,u=jc(r.map(({objectId:d})=>d),50);for(let d=0;d<u.length;d++){let S=u[d];if((await this.scallopClient.scallopSuiKit.queryGetObjects(S,{showType:!0})).some(I=>I.type!==c))return!1}return r.length>0}get helperStakeMoreSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new W(e,this.transaction)}get helperStakeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new W(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new W(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new W(e,this.transaction)}get helperRenewExpired(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new W(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${fp}::user::unstake`));return new W(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new W(e,this.transaction)}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new W(t,this.transaction)}getVeScaObligationBindingHelpers(){let e=`${this.coreId.borrowIncentivePkg}::user::unstake_v2`,t=`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,n=`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`,o=[],r=0,c=0,u=0;return this.commands.forEach(d=>{this.filterMoveCallCommands(d,e)?(o.push({action:"unstake",helper:new W(d,this.transaction,r)}),r++):this.filterMoveCallCommands(d,t)?(o.push({action:"stake",helper:new W(d,this.transaction,c)}),c++):this.filterMoveCallCommands(d,n)&&(o.push({action:"deactivate",helper:new W(d,this.transaction,u)}),u++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:Zt.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new Bt(e,this.transaction).getAmountInput().reduce((x,P)=>x+P,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,c=[],u=[],d=[];this.helperOldUnstakeObligation.moveCall&&(c=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(u=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(d=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let S=!1,w=!1,I,C,k=[{condition:c,isOld:!0},{condition:u,isOld:!1},{condition:d,isOld:!1}];for(let x=0;x<k.length;x++)k[x].condition.length>1&&([C,I]=k[x].condition,S=!0,w=k[x].isOld);return{txType:Zt.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:I,obligationKey:C,veScaKey:o,isHaveRedeem:r,isObligationLocked:S,isOldBorrowIncentive:w}}}decodeExtendStakePeriod(){let e=this.helperExtendStakePeriod.decodeInputU64(4),t=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],r=[];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&&(r=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,u=!1,d,S,w=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let I=0;I<w.length;I++)w[I].condition.length>1&&([S,d]=w[I].condition,c=!0,u=w[I].isOld);return{txType:Zt.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:d,obligationKey:S,veScaKey:t,isObligationLocked:c,isOldBorrowIncentive:u}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new Bt(e,this.transaction).getAmountInput().reduce((k,x)=>k+x,0),o=[],r=[],c,u=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(c=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(u=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,S=!1,w,I,C=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:u,isOld:!1}];for(let k=0;k<C.length;k++)C[k].condition.length>1&&([I,w]=C[k].condition,d=!0,S=C[k].isOld);return{txType:Zt.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:c,unlockTime:t,obligationId:w,obligationKey:I,isOldBorrowIncentive:S,isObligationLocked:d}}}decodeStakeSca(){let e,t;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(e=this.helperStakeSca.getNestedInputParam(3),t=this.helperStakeSca.decodeInputU64(4)):e=this.helperStakeMoreSca.getNestedInputParam(4);let n=new Bt(e,this.transaction).getAmountInput().reduce((k,x)=>k+x,0),o=[],r=[],c,u=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(c=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(u=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,S=!1,w,I,C=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:u,isOld:!1}];for(let k=0;k<C.length;k++)C[k].condition.length>1&&([I,w]=C[k].condition,d=!0,S=C[k].isOld);return{txType:Zt.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:w,obligationKey:I,veScaKey:c,isObligationLocked:d,isOldBorrowIncentive:S}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:Zt.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:Zt.Other,type:"SplitVeSca",intentionData:t}}decodeVeScaObligationBindings(){let e=this.getVeScaObligationBindingHelpers(),t=(o,r)=>{switch(o){case"stake":return{veScaKey:r.decodeOwnedObjectId(9),obligationId:r.decodeSharedObjectId(4),obligationKey:r.decodeOwnedObjectId(3)};case"unstake":return{obligationId:r.decodeSharedObjectId(4),obligationKey:r.decodeOwnedObjectId(3)};case"deactivate":return{veScaKey:r.decodeOwnedObjectId(4),obligationId:r.decodeSharedObjectId(3)};default:throw new Error(`Invalid action ${o}`)}},n=e.map(({action:o,helper:r})=>({action:o,args:t(o,r)}));return{txType:Zt.Other,type:"VeScaObligationBindings",intentionData:{bindingDatas:n}}}decodeTransferVeScaKey(){let e=this.commands.filter(c=>c.$kind==="TransferObjects"),{objects:t}=e[0].TransferObjects,n=t.filter(c=>c.$kind==="Input").map(({Input:c})=>c);if(n.length!==t.length)return!1;let o=new Set(n),r=this.inputs.filter((c,u)=>c.$kind==="Object"&&o.has(u)).map(c=>c.Object.ImmOrOwnedObject);return{xType:Zt.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:r}}}};import hp from"sort-keys-recursive";var A=class{constructor(e){this.data=e}get application(){return"msafe-core"}serialize(){return JSON.stringify(hp(this.data))}isObligationLocked=async(e,t)=>{let n=await e.getObject({id:typeof t=="string"?t:t.objectId,options:{showContent:!0}}),o=!1;return n&&n?.data.content?.dataType==="moveObject"&&"lock_key"in n.data.content.fields&&(o=!!n.data.content.fields.lock_key),o};async buildTxWithRefreshObligation(e,t,n){let o=e.builder.createTxBlock();o.setSender(t.walletAddress);let{obligationId:r,obligationKey:c}=t;return await this.isObligationLocked(e.scallopSuiKit.client,r)?(await o.unstakeObligationQuick(r,c),await n(e,o,t),await o.stakeObligationWithVeScaQuick(r,c,t.veScaKey)):await n(e,o,t),o}};var ea=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:r,obligationId:c,obligationKey:u}=this.data,d=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:d,obligationId:c,obligationKey:u},async(w,I)=>{let C=await I.borrowQuick(+r,o,c,u);I.transferObjects([C],d)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var na=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:r,veScaKey:c,amount:u,coinName:d}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:r,veScaKey:c},async(w,I)=>{let C=await I.borrowQuick(+u,d,o,r);I.transferObjects([C],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var oa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:r,obligationKey:c,veScaKey:u,coinName:d,amount:S}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:r,obligationKey:c,veScaKey:u},async(I,C)=>{let k=C.claimReferralTicket(d),x=await C.borrowWithReferralQuick(+S,d,k,r,c);C.burnReferralTicket(k,d),C.transferObjects([x],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as gp}from"@mysten/sui/utils";var aa=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),r=await e.query.getLendings(void 0,t),c=await e.query.getObligations(t),u=Object.values(await e.query.getObligationAccounts(t)??[]),d=(()=>{let C=[...e.constants.whitelist.spool].map(k=>e.utils.parseCoinName(k));return Object.values(r??[]).filter(k=>!!k&&C.includes(k.coinName)).reduce((k,x)=>{let P=e.utils.parseMarketCoinName(x.coinName);return k[P]||(k[P]=0),k[P]+=x.availableClaimCoin,k},{})})(),S={};Object.entries(o).forEach(([C,k])=>{for(let x=0;x<k.length;x++){let P=k[x];if(!d[C])continue;let L=n.claim(P.id,C);S.sui?S.sui.push(L):S.sui=[L]}});let w=(()=>{let C={};return C.sui=Object.values(d).reduce((k,x)=>k+x,0),u.forEach(k=>{Object.values(k.borrowIncentives).forEach(x=>{x&&x.rewards.forEach(P=>{C[P.coinName]||(C[P.coinName]=0),C[P.coinName]?C[P.coinName]+=P.availableClaimCoin:C[P.coinName]=P.availableClaimCoin})})}),C})();if(c.length>0&&u.length>0)for(let C=0;C<u.length;C++){let k=u[C],x=!1,P=c.find(V=>V.id===k.obligationId)?.keyId,L={};if(P){if(Object.values(k.borrowIncentives).forEach(V=>{if(V){let Wt=V.rewards.filter(Rt=>{let Et=Rt.coinName;return Rt.availableClaimCoin>0&&!L[Et]});x=Wt.length>0,Wt.forEach(Rt=>{let Et=n.claimBorrowIncentive(k.obligationId,P,Rt.coinName);L[Rt.coinName]=!0,S[Rt.coinName]?S[Rt.coinName].push(Et):S[Rt.coinName]=[Et]})}}),w.sui>0){let V=qt.redeem_rewards(n,P,k.obligationId,gp);S.sui?S.sui.push(V):S.sui=[V]}if(x&&await Lc(e.query,k.obligationId)){n.unstakeObligation(k.obligationId,P);let Wt=await e.query.getBindedVeScaKey(k.obligationId);Wt?n.stakeObligationWithVesca(k.obligationId,P,Wt):n.stakeObligation(k.obligationId,P)}}}let I=(await Promise.all(Object.entries(S).map(async([C,k])=>{let x=k[0];if(k.length>1&&n.mergeCoins(x,k.slice(1)),C==="sui"){n.mergeCoins(n.gas,[x]);return}return await e.builder.utils.mergeSimilarCoins(n,x,e.utils.parseCoinType(C),t),x}))).filter(C=>!!C);return I.length>0&&n.transferObjects(I,t),n.txBlock}async build(e){return this.claimIncentiveRewards(e.scallopClient,e.account.address)}static fromData(e={}){return new a(e)}};var ra=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.depositCollateral(this.data.collateralCoinName,+this.data.amount,!1,this.data.obligationId)}static fromData(t){return new a(t)}};var ia=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:r,obligationId:c,rewardCoinName:u,veScaKey:d}=this.data,S=n.builder.createTxBlock();S.setSender(o);let w=qt.redeem_rewards(S,r,c,n.utils.parseCoinType(u));return S.transferObjects([w],o),await S.unstakeObligationQuick(c,r),d?await S.stakeObligationWithVeScaQuick(c,r,d):await S.stakeObligationQuick(c,r),S.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new a(t)}};var sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new a(t)}};var ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.openObligation(!1)}static fromData(t){return new a(t)}};var la=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:r,amount:c,obligationId:u,obligationKey:d}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:u,obligationKey:d},async(w,I)=>{await I.repayQuick(+c,r,u)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var ua=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:r,amount:c,obligationId:u,veScaKey:d}=this.data,S=n.builder.createTxBlock();S.setSender(o);let w=n.constants.whitelist.borrowing.has(r);return w&&await S.unstakeObligationQuick(u,void 0),await S.repayQuick(+c,r,u),w&&await S.stakeObligationWithVeScaQuick(u,void 0,d),S.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var ma=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.deposit(this.data.coinName,+this.data.amount,!1,t.account.address)}static fromData(t){return new a(t)}};var pa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new a(t)}};var da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async unstakeAndWithdraw(t,n,o){let r=t.builder.createTxBlock();r.setSender(o);let{stakeAccountId:c,amount:u,coinName:d}=this.data,S=[];for(let w=0;w<c.length;w++){let{id:I,coin:C}=c[w],k=t.utils.parseMarketCoinName(d),[x]=await r.unstakeQuick(C,k,I);if(x){let P=r.withdraw(x,d);S.push(P)}}if(u>0){let w=await r.withdrawQuick(u,d);S.push(w)}return S.length>1&&r.mergeCoins(S[0],S.slice(1)),r.transferObjects(S,o),r.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}txType;txSubType;async build(t){return t.scallopClient.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),!1,this.data.obligationId,this.data.obligationKey,t.account.address)}static fromData(t){return new a(t)}};var ha=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdraw(this.data.coinName,Number(this.data.amount),!1,t.account.address)}static fromData(t){return new a(t)}};var ga=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async bindReferral({account:t,scallopClient:n}){let o=t.address,r=n.builder.createTxBlock();return r.setSender(o),r.bindToReferral(this.data.veScaKey),r.txBlock}async build(t){return this.bindReferral(t)}static fromData(t){return new a(t)}};var ya=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:r}=this.data,c=t.address,u=n.builder.createTxBlock();u.setSender(c);let d=r.map(S=>n.utils.parseCoinNameFromType(S));return await u.claimReferralRevenueQuick(o,d),u.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new a(t)}};var ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async createReferralLink({account:t,scallopClient:n}){let o=t.address,r=n.builder.createTxBlock();r.setSender(o);let c=r.mintEmptyVeSca();return r.transferObjects([c],o),r.txBlock}async build(t){return this.createReferralLink(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as yp}from"@scallop-io/sui-scallop-sdk";var Sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:r,unlockTime:c,obligationId:u,obligationKey:d,isOldBorrowIncentive:S,isObligationLocked:w}=this.data,I=t.address,C=n.builder.createTxBlock();C.setSender(I);let k=await n.utils.selectCoins(o,yp,I),[x,P]=C.takeAmountFromCoins(k,o);return C.extendLockPeriod(r,c),C.extendLockAmount(r,x),C.transferObjects([P],I),!u||!d||(w&&(S?qt.unstakeObligation(C,u,d):C.unstakeObligation(u,d)),C.stakeObligationWithVesca(u,d,r)),C.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var Ta=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:r,unlockTime:c,obligationId:u,obligationKey:d,isObligationLocked:S,isOldBorrowIncentive:w}=this.data,I=n.builder.createTxBlock();return I.setSender(o),I.extendLockPeriod(r,c),u&&d&&(S&&(w?qt.unstakeObligation(I,d,u):I.unstakeObligation(u,d)),I.stakeObligationWithVesca(u,d,r)),I.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:r,sourceVeScaKey:c}=this.data,[u,d]=await Promise.all([n.getBindedObligationId(r),n.getBindedObligationId(c)]);u&&await t.unstakeObligationQuick(u),d&&await t.unstakeObligationQuick(d),o(t,r,c),u&&await t.stakeObligationWithVeScaQuick(u,void 0,r),d&&await t.stakeObligationWithVeScaQuick(d,void 0,c)}async build(t){let{scallopClient:n,account:{address:o}}=t,r=n.builder.createTxBlock();return r.setSender(o),await this.handleUnsubForKeys(r,n.query,async(c,u,d)=>{c.mergeVeSca(r.object(u),r.object(d))}),r.txBlock}static fromData(t){return new a(t)}};var Ia=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async redeemSca({account:t,scallopClient:n}){let{veScaKey:o}=this.data,r=t.address,c=n.builder.createTxBlock();return c.setSender(r),await c.redeemScaQuick(o),c.txBlock}async build(t){return this.redeemSca(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as bp}from"@scallop-io/sui-scallop-sdk";var Ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:r,unlockTime:c,veScaKey:u,isHaveRedeem:d,obligation:S,obligationKey:w,isObligationLocked:I,isOldBorrowIncentive:C}=this.data,k=n.builder.createTxBlock();if(k.setSender(o),d){let V=k.redeemSca(u);k.transferObjects([V],o)}let x=await n.builder.utils.selectCoins(r,bp,o),[P,L]=k.takeAmountFromCoins(x,r);return k.transferObjects([L],o),k.renewExpiredVeSca(u,P,c),!S||!w||(I&&(C?qt.unstakeObligation(k,w,S):k.unstakeObligation(S,w)),k.stakeObligationWithVesca(S,w,u)),k.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var ka=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:r,splitAmount:c}=this.data,u=await n.getBindedObligationId(r);u&&await t.unstakeObligationQuick(u),o(t,r,c.toString()),u&&await t.stakeObligationWithVeScaQuick(u,void 0,r)}async build(t){let{scallopClient:n,account:{address:o}}=t,r=n.builder.createTxBlock();return r.setSender(o),await this.handleUnsubForKeys(r,n.query,(c,u,d)=>{let S=c.splitVeSca(u,d.toString());c.transferObjects([S],o)}),r.txBlock}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as Sp}from"@scallop-io/sui-scallop-sdk";var va=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:r,isObligationLocked:c,isOldBorrowIncentive:u,obligationId:d,obligationKey:S,unlockTime:w,veScaKey:I}=this.data,C=n.builder.createTxBlock();C.setSender(o);let k=await n.utils.selectCoins(r,Sp,o),[x,P]=C.takeAmountFromCoins(k,r),L;return I?C.extendLockAmount(I,x):L=C.lockSca(x,w),d&&S&&(c&&(u?qt.unstakeObligation(C,S,d):C.unstakeObligation(d,S)),C.stakeObligationWithVesca(d,S,I||L)),I||C.transferObjects([L,P],o),C.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var xa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:r,coinName:c,stakeAccountId:u}=this.data,d=n.builder.createTxBlock();d.setSender(o);let S=await d.depositQuick(+r,c),w=n.utils.parseMarketCoinName(c);if(n.constants.whitelist.spool.has(w))return d.txBlock;let I=await n.query.getStakeAccounts(w,o),C=u||(I.length>0?I[0].id:void 0);if(C)await d.stakeQuick(S,w,C);else{let k=d.createStakeAccount(w);await d.stakeQuick(S,w,k),d.transferObjects([k],o)}return d.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var Da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;handleAction(t,{action:n,args:o}){switch(n){case"deactivate":return t.deactivateBoost(o.obligationId,o.veScaKey);case"stake":return t.stakeObligationWithVesca(o.obligationId,o.obligationKey,o.veScaKey);case"unstake":return t.unstakeObligation(o.obligationId,o.obligationKey);default:throw new Error("Invalid action")}}async build(t){let{scallopClient:n,account:{address:o}}=t,r=n.builder.createTxBlock();r.setSender(o);let{bindingDatas:c}=this.data;return c.forEach(u=>this.handleAction(r,u)),r.txBlock}static fromData(t){return new a(t)}};var Aa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{scallopClient:n,account:{address:o}}=t,r=n.builder.createTxBlock();r.setSender(o);let{veScaKeys:c}=this.data;return r.transferObjects(c.map(u=>r.objectRef(u)),r.pure.address(o)),r.txBlock}static fromData(t){return new a(t)}};var Oa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async withdrawUnlockedSca({account:t,scallopClient:n}){let{vescaKey:o}=this.data,r=t.address,c=n.builder.createTxBlock();return c.setSender(r),await c.redeemScaQuick(o),c.txBlock}async build(t){return this.withdrawUnlockedSca(t)}static fromData(t){return new a(t)}};var Ma=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new Ip({addressId:"67c44a103fe1b8c454eb9699",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??wp("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n),console.log("transaction",t);let r=new Yo(t,this.scallopClient),c=new Zo(t,this.scallopClient),u=new ta(t,this.scallopClient),d=r.decode()||c.decode()||await u.decode();if(!d)throw new Error("Unknown transaction type");return{txType:Tp.Other,txSubType:d.type,intentionData:d.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:r,intentionData:c}=e;await this.initScallopClient(n.address,t);let u;switch(r){case"SupplyLending":u=ma.fromData(c);break;case"WithdrawLending":u=ha.fromData(c);break;case"Borrow":u=ea.fromData(c);break;case"Repay":u=la.fromData(c);break;case"DepositCollateral":u=ra.fromData(c);break;case"WithdrawCollateral":u=fa.fromData(c);break;case"OpenObligation":u=ca.fromData(c);break;case"UnstakeSpool":u=pa.fromData(c);break;case"ClaimIncentiveReward":u=aa.fromData(c);break;case"BorrowWithBoost":u=na.fromData(c);break;case"StakeSca":u=va.fromData(c);break;case"ExtendStakePeriod":u=Ta.fromData(c);break;case"ExtendPeriodAndStakeMore":u=Sa.fromData(c);break;case"RenewExpStakePeriod":u=Ca.fromData(c);break;case"WithdrawStakedSca":u=Oa.fromData(c);break;case"SupplyAndStakeLending":u=xa.fromData(c);break;case"WithdrawAndUnstakeLending":u=da.fromData(c);break;case"RedeemSca":u=Ia.fromData(c);break;case"MigrateAndClaim":u=ia.fromData(c);break;case"BorrowWithReferral":u=oa.fromData(c);break;case"CreateReferralLink":u=ba.fromData(c);break;case"ClaimRevenueReferral":u=ya.fromData(c);break;case"BindReferral":u=ga.fromData(c);break;case"MigrateScoin":u=sa.fromData(c);break;case"RepayWithBoost":u=ua.fromData(c);break;case"MergeVeSca":u=wa.fromData(c);break;case"SplitVeSca":u=ka.fromData(c);break;case"VeScaObligationBindings":{u=Da.fromData(c);break}case"TransferVeScaKeys":{u=Aa.fromData(c);break}default:throw new Error("not implemented")}return u.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as ed}from"@msafe/sui3-utils";import{TransactionType as nn}from"@msafe/sui3-utils";import{normalizeStructTag as he}from"@mysten/sui/utils";import{API_URL as Lp}from"@suilend/sui-fe";import{TransactionType as Np}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Wp,LENDING_MARKET_TYPE as _p,SuilendClient as ji}from"@suilend/sdk";import{TransactionType as Be}from"@msafe/sui3-utils";import{fromBase64 as qc,toHex as Fc}from"@mysten/bcs";import{normalizeStructTag as tn}from"@mysten/sui/utils";import{MAX_U64 as Re}from"@suilend/sui-fe";import Kc from"bignumber.js";var Pa=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("lending_market::MintEvent"))},t=tn(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:Be.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(d=>d.type.includes("lending_market::RedeemEvent"))},n=tn(t.RedeemEvent.parsedJson.coin_type.name),o=t.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let r=e.withdraw_ctokens.MoveCall.arguments[4].Input,c=new Kc(Fc(qc(this.inputs[r].Pure.bytes)),16).toString(),u=c===Re.toString();return console.log("decodeWithdraw - isMax:",u,"inputIndex:",r,"inputValue:",c,"MAX_U64.toString():",Re.toString()),u&&(o=Re.toString()),{txType:Be.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(d=>d.type.includes("lending_market::BorrowEvent"))},n=tn(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 r=e.borrow_request.MoveCall.arguments[4].Input,c=new Kc(Fc(qc(this.inputs[r].Pure.bytes)),16).toString(),u=c===Re.toString();return console.log("decodeBorrow - isMax:",u,"inputIndex:",r,"inputValue:",c,"MAX_U64.toString():",Re.toString()),u&&(o=Re.toString()),{txType:Be.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=tn(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:Be.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],r=tn(o.parsedJson.coin_type.name),c=o.parsedJson.liquidity_amount;t[r]=`${+(t[r]??"0")+ +c}`}return console.log("Decoder.decodeClaimRewards",t),{txType:Be.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:Be.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as vp}from"@mysten/sui/transactions";import kp from"sort-keys-recursive";var Nt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(kp(this.data))}};var Ba=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("BorrowIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new vp;return await r.borrowAndSendToUser(o.address,c.id,u.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("BorrowIntention.fromData",t),new a(t)}};import{Transaction as Mp}from"@mysten/sui/transactions";import{normalizeStructTag as xp}from"@mysten/sui/utils";import{Side as en}from"@suilend/sdk";import{isSendPoints as Dp}from"@suilend/sui-fe";import Ap from"bignumber.js";var Op=(a,e)=>{let t={[en.DEPOSIT]:[],[en.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[en.DEPOSIT,en.BORROW].forEach(o=>{let r=o===en.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,c=e.userRewardManagers.find(u=>u.poolRewardManagerId===r.id);c&&(t[o]=r.poolRewards.map((u,d)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(d),rewardCoinType:xp(u.coinType.name),side:o})).filter(u=>!Dp(u.rewardCoinType)&&!!c.rewards[Number(u.rewardIndex)]&&new Ap(c.rewards[Number(u.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},Ra=Op;var Ea=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("ClaimIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new Mp;return r.claimRewardsAndSendToUser(o.address,c.id,Ra(r,u),d),d}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as Pp}from"@mysten/sui/transactions";var Na=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("ClaimAndDepositIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new Pp;return r.claimRewardsAndDeposit(o.address,c.id,Ra(r,u),d),d}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Bp}from"@mysten/sui/transactions";var Wa=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;console.log("DepositIntention.build",n,o,r,c,u);let d=new Bp;return await r.depositIntoObligation(o.address,this.data.coinType,this.data.value,d,c?.id),d}static fromData(t){return console.log("DepositIntention.fromData",t),new a(t)}};import{Transaction as Rp}from"@mysten/sui/transactions";var _a=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("RepayIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new Rp;return await r.repayIntoObligation(o.address,u.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("RepayIntention.fromData",t),new a(t)}};import{Transaction as Ep}from"@mysten/sui/transactions";var La=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:c,obligation:u}=t;if(console.log("WithdrawIntention.build",n,o,r,c,u),!c||!u)throw new Error("Obligation not found");let d=new Ep;return await r.withdrawAndSendToUser(o.address,c.id,u.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};var ja=async(a,e)=>{let t=await ji.initialize(Wp,_p,a),n=await ji.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(r=>ji.getObligation(r.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},Ua=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await ja(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",r,"utils:",this.utils,"suiClient:",n);let u=new Pa(t,r).decode();return{txType:Np.Other,txSubType:u.type,intentionData:u.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:r,account:c}=e;this.utils||(this.utils=await ja(r,c));let u;switch(n){case"deposit":u=Wa.fromData(o);break;case"withdraw":u=La.fromData(o);break;case"borrow":u=Ba.fromData(o);break;case"repay":u=_a.fromData(o);break;case"claim":u=Ea.fromData(o);break;case"claimAndDeposit":u=Na.fromData(o);break;default:throw new Error("not implemented")}let d=window.localStorage.getItem("obligationId"),S=this.utils.obligations?.find(I=>I.id===d)??this.utils.obligations?.[0],w=this.utils.obligationOwnerCaps?.find(I=>I.obligationId===S?.id);return u.build({network:t,suiClient:r,account:c,suilendClient:this.utils.suilendClient,obligationOwnerCap:w,obligation:S})}};var Ui=async(a,e)=>{let t=await ja(a,e),n=await fetch(`${Lp}/springsui/lst-info`),o=await n.json();if(n?.statusCode===500)throw new Error("Failed to fetch SpringSui LST data");let c=Object.fromEntries(Object.values(o).map(u=>[u.LIQUID_STAKING_INFO.type,u.LIQUID_STAKING_INFO]));return{...t,LIQUID_STAKING_INFO_MAP:c}};var qa=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isStakeTransaction())return this.decodeStake();if(this.isStakeAndDepositTransaction())return this.decodeStakeAndDeposit();if(this.isConvertTransaction())return this.decodeConvert();if(this.isConvertAndDepositTransaction())return this.decodeConvertAndDeposit();if(this.isUnstakeTransaction())return this.decodeUnstake();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintMoveCallCommands(){return!!this.getMoveCallCommand("mint")}hasRedeemMoveCallCommands(){return!!this.getMoveCallCommand("redeem")}isStakeTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isStakeAndDepositTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isConvertTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isConvertAndDepositTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isUnstakeTransaction(){return!this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}decodeStake(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=he(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:nn.Other,type:"stake",intentionData:{amount:n,outCoinType:t}}}decodeStakeAndDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=he(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:nn.Other,type:"stakeAndDeposit",intentionData:{amount:n,outCoinType:t}}}decodeConvert(){let e={RedeemEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::MintEvent"))},t=he(e.RedeemEvent.parsedJson.event.typename.name),n=he(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:nn.Other,type:"convert",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeConvertAndDeposit(){let e={RedeemEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::MintEvent"))},t=he(e.RedeemEvent.parsedJson.event.typename.name),n=he(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:nn.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=he(e.RedeemEvent.parsedJson.event.typename.name),n=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:nn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as qp}from"@mysten/sui/transactions";import{convertLstsAndSendToUser as Fp,LstClient as Vc}from"@suilend/springsui-sdk";import Up from"sort-keys-recursive";var Ft=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Up(this.data))}};var Fa=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("ConvertIntention.build",n,o,r,c,u,d);let S=await Vc.initialize(n,Object.values(c).find(C=>C.type===this.data.inCoinType)),w=await Vc.initialize(n,Object.values(c).find(C=>C.type===this.data.outCoinType)),I=new qp;return Fp(S,w,I,o.address,this.data.amount),I}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as Kp}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Vp,sendObligationToUser as $p}from"@suilend/sdk";import{convertLsts as Hp,LstClient as $c}from"@suilend/springsui-sdk";var Ka=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("ConvertAndDepositIntention.build",n,o,r,c,u,d);let S=await $c.initialize(n,Object.values(c).find(P=>P.type===this.data.inCoinType)),w=await $c.initialize(n,Object.values(c).find(P=>P.type===this.data.outCoinType)),I=new Kp,{obligationOwnerCapId:C,didCreate:k}=Vp(r,I,u),x=Hp(S,w,I,o.address,this.data.amount);return r.deposit(x,this.data.outCoinType,C,I),k&&$p(C,o.address,I),I}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Gp}from"@mysten/sui/transactions";import{LstClient as Qp}from"@suilend/springsui-sdk";var Va=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("StakeIntention.build",n,o,r,c,u,d);let S=await Qp.initialize(n,Object.values(c).find(I=>I.type===this.data.outCoinType)),w=new Gp;return S.mintAmountAndRebalanceAndSendToUser(w,o.address,this.data.amount),w}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as zp}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Jp,sendObligationToUser as Xp}from"@suilend/sdk";import{LstClient as Yp}from"@suilend/springsui-sdk";var $a=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("StakeAndDepositIntention.build",n,o,r,c,u,d);let S=await Yp.initialize(n,Object.values(c).find(x=>x.type===this.data.outCoinType)),w=new zp,{obligationOwnerCapId:I,didCreate:C}=Jp(r,w,u),k=S.mintAmountAndRebalance(w,o.address,this.data.amount);return r.deposit(k,this.data.outCoinType,I,w),C&&Xp(I,o.address,w),w}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Zp}from"@mysten/sui/transactions";import{LstClient as td}from"@suilend/springsui-sdk";var Ha=class a extends Ft{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:c,obligationOwnerCap:u,obligation:d}=t;console.log("UnstakeIntention.build",n,o,r,c,u,d);let S=await td.initialize(n,Object.values(c).find(I=>I.type===this.data.inCoinType)),w=new Zp;return S.redeemAmountAndSendToUser(w,o.address,this.data.amount),w}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(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 Ui(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",r);let u=new qa(t,r).decode();return{txType:ed.Other,txSubType:u.type,intentionData:u.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:r,account:c}=e;this.utils||(this.utils=await Ui(r,c));let u;switch(n){case"stake":u=Va.fromData(o);break;case"stakeAndDeposit":u=$a.fromData(o);break;case"convert":u=Fa.fromData(o);break;case"convertAndDeposit":u=Ka.fromData(o);break;case"unstake":u=Ha.fromData(o);break;default:throw new Error("not implemented")}return u.build({network:t,suiClient:r,account:c,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 rd}from"@msafe/sui3-utils";import{TransactionType as Hc}from"@msafe/sui3-utils";var Qa=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isMintTransaction()){let e=this.getLiquidityChangeEvent("MintEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeMint(t)}if(this.isRedeemTransaction()){let e=this.getLiquidityChangeEvent("RedeemEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeRedeem(t)}throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(e){return this.simResult.events.find(t=>this.isLiquidityChangeEventType(t.type,e))}isLiquidityChangeEventType(e,t){return e.includes(t)}isMintTransaction(){return!!this.getMoveCallCommand("mint")}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(e){let{event:{sui_amount_in:t}}=e;return console.log("Decoder.decodeMint",t),{txType:Hc.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:Hc.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as od}from"@alphafi/stsui-sdk";var za=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,r={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},u=await new od(r).mint(o,n.address);return u.setGasBudget(1e8),u}static fromData(t){return console.log("MintIntention.fromData",t),new a(t)}};import{LST as ad}from"@alphafi/stsui-sdk";var Ja=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,r={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},u=await new ad(r).redeem(o,n.address);return u.setGasBudget(1e8),u}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var Xa=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 c=new Qa(t,o).decode();return{txType:rd.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{account:t}=e;console.log("StSui build transaction type",e.txSubType);let n;switch(e.txSubType){case"mint":n=za.fromData(e.intentionData);break;case"redeem":n=Ja.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as xd}from"@msafe/sui3-utils";import{TurbosSdk as Dd}from"turbos-clmm-sdk";import{TransactionType as Kt}from"@msafe/sui3-utils";import{bcs as Gc}from"@mysten/sui.js/bcs";import{normalizeStructTag as sd,normalizeSuiAddress as on}from"@mysten/sui.js/utils";import{BN as cd}from"turbos-clmm-sdk";var $t={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Ht={PackageId:"0xdee9"};var ld=(a,e,t,n)=>{if(a===1)switch(n.findIndex(c=>c===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(r=>r===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},Ya=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}get transactions(){return this.txb.blockData.transactions}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.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.target===e)}getMoveCallsTransaction(e){return e.every(t=>this.transactions.find(n=>n.kind==="MoveCall"&&n.target===t))}getSwapMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&e.includes(t.target))}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`)}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(`${$t.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${$t.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let e=this.transactions.find(k=>k.kind==="MoveCall"),t=0;this.swap2Layer.includes(e.target)&&(t=1);let n=ld(t,e.target,this.swap1Layer,this.swap2Layer),o=n.map((k,x)=>{let P=this.helper.decodeSharedObjectId(x),L=this.helper.decodeInputU128(4+x+t),V=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new cd(L.toString()));return{pool:P,a2b:k,nextTickIndex:V}}),r=n[0]||t===1?e.typeArguments[0]:e.typeArguments[1],c=t===1?e.typeArguments[4]:n[0]?e.typeArguments[1]:e.typeArguments[0],u=this.helper.decodeInputAddress(6+2*t),d=this.helper.decodeInputU64(7+2*t),S=this.helper.decodeInputBool(5+2*t),w=this.helper.decodeInputU64(2+t),I=this.helper.decodeInputU64(3+t),C=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:o[0].pool,a2b:o[0].a2b,amountSpecified:w}],address:u,amountSpecifiedIsInput:S});return{txType:Kt.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:c,address:u,amountA:S?w:I,amountB:S?I:w,amountSpecifiedIsInput:S,slippage:"0.1",deadline:d}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),o=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),c=this.helper.decodeInputBool(5),u=this.helper.decodeInputU32(6),d=this.helper.decodeInputBool(7),S=this.helper.decodeInputU64(13);return{txType:Kt.Other,type:"AddLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:n,amountB:o,tickLower:c?-r:r,tickUpper:d?-u:u,deadline:S}}}decodeIncreaseLiquidity(e){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),c=this.helper.decodeInputU64(9);return{txType:Kt.Other,type:"IncreaseLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:o,amountB:r,nft:n,deadline:c}}}decodeDecreaseLiquidity(e){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(2),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),c=this.helper.decodeInputU64(5),u=this.helper.decodeInputU64(6);return{txType:Kt.Other,type:"DecreaseLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:r,amountB:c,slippage:10,address:e,deadline:u}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(5),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),c=this.helper.decodeInputU64(6);return{txType:Kt.Other,type:"CollectFee",intentionData:{pool:e,address:n,collectAmountA:o,collectAmountB:r,nft:t,deadline:c}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(6),o=this.collectRewardHelper.map(c=>c.decodeInputU64(5)),r=this.helper.decodeInputU64(7);return{txType:Kt.Other,type:"CollectReward",intentionData:{pool:e,address:n,rewardAmounts:o,nft:t,deadline:r}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeSharedObjectId(2);return{txType:Kt.Other,type:"Burn",intentionData:{pool:e,nft:t}}}decodeRemoveLiquidity(e){console.log(this.helper,"decodeRemoveLiquidity this.helper");let t=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeSharedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),c=this.decreaseLiquidityHelper.decodeInputU64(5),u=this.decreaseLiquidityHelper.decodeInputU64(6),d=this.collectRewardHelper.map(I=>I.decodeInputU64(5)),S=this.collectFeeHelper.decodeInputU64(3)||0,w=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:Kt.Other,type:"RemoveLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:r,amountB:c,slippage:10,address:e,collectAmountA:S,collectAmountB:w,rewardAmounts:d,deadline:u}}}decodePrixClaim(){return{txType:Kt.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:Kt.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:Kt.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:Kt.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target!=="0x2::coin::zero"&&t.target!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero");return new ce(e,this.txb)}get collectRewardHelper(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target===`${this.config.PackageId}::position_manager::collect_reward`).map(t=>new ce(t,this.txb))}get collectFeeHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${this.config.PackageId}::position_manager::collect`);return new ce(e,this.txb)}get decreaseLiquidityHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${this.config.PackageId}::position_manager::decrease_liquidity`);return new ce(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${Ht.PackageId}::clob_v2::swap_exact_base_for_quote`);return new ce(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${Ht.PackageId}::clob_v2::swap_exact_quote_for_base`);return new ce(e,this.txb)}},ce=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU128(e){let t=this.decodePureArg(e,"u128");return Number(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU32(e){let t=this.decodePureArg(e,"u32");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return on(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.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 Gc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return on(e.value.Object.ImmOrOwned.objectId)}return on(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return on(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return on(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Gc.de(t,new Uint8Array(n))}typeArg(e){return sd(this.moveCall.typeArguments[e])}shortTypeArg(e){return this.moveCall.typeArguments[e]}txArg(e){return this.moveCall.arguments[e]}};import{TurbosSdk as ud}from"turbos-clmm-sdk";var Za=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ud(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,amountA:c,amountB:u,slippage:d,tickLower:S,tickUpper:w,deadline:I,txb:C}=this.data;return n.pool.addLiquidity({pool:o,slippage:d,address:r,amountA:c,amountB:u,tickLower:S,tickUpper:w,deadline:I,txb:C})}static fromData(t){return new a(t)}};import{TurbosSdk as md}from"turbos-clmm-sdk";var tr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new md(t.network.replace("sui:",""),t.suiClient),{pool:o,nft:r,txb:c}=this.data;return n.nft.burn({pool:o,nft:r,txb:c})}static fromData(t){return new a(t)}};import{TurbosSdk as pd}from"turbos-clmm-sdk";var er=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new pd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,nft:c,collectAmountA:u,collectAmountB:d,deadline:S,txb:w}=this.data;return n.pool.collectFee({pool:o,address:r,collectAmountA:u,collectAmountB:d,nft:c,deadline:S,txb:w})}static fromData(t){return new a(t)}};import{TurbosSdk as dd}from"turbos-clmm-sdk";var nr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new dd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,nft:c,rewardAmounts:u,deadline:d,txb:S}=this.data;return n.pool.collectReward({pool:o,address:r,rewardAmounts:u,nft:c,deadline:d,txb:S})}static fromData(t){return new a(t)}};import{TurbosSdk as fd}from"turbos-clmm-sdk";var or=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new fd(t.network.replace("sui:",""),t.suiClient),{fee:o,address:r,tickLower:c,tickUpper:u,sqrtPrice:d,slippage:S,coinTypeA:w,coinTypeB:I,amountA:C,amountB:k,deadline:x,txb:P}=this.data;return n.pool.createPool({fee:o,amountA:C,amountB:k,address:r,tickLower:c,tickUpper:u,sqrtPrice:d,slippage:S,coinTypeA:w,coinTypeB:I,deadline:x,txb:P})}static fromData(t){return new a(t)}};import{TurbosSdk as hd}from"turbos-clmm-sdk";var ar=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new hd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,amountA:c,amountB:u,slippage:d,nft:S,decreaseLiquidity:w,deadline:I,txb:C}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:d,address:r,amountA:c,amountB:u,nft:S,decreaseLiquidity:w,deadline:I,txb:C})}static fromData(t){return new a(t)}};import{TurbosSdk as gd}from"turbos-clmm-sdk";var rr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new gd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,amountA:c,amountB:u,slippage:d,nft:S,deadline:w,txb:I}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:d,address:r,amountA:c,amountB:u,nft:S,deadline:w,txb:I})}static fromData(t){return new a(t)}};import{TransactionBlock as yd}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as bd}from"@mysten/sui.js/utils";var ir=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new yd;return n.moveCall({target:`${$t.PackageId}::claim::claim`,typeArguments:[$t.turbosCoinType],arguments:[n.object($t.Claim),n.object(bd)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Sd}from"@mysten/sui.js/transactions";var sr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Sd;return n.moveCall({target:`${$t.PackageId}::claim::join`,typeArguments:[$t.turbosCoinType],arguments:[n.object($t.Claim)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Td}from"@mysten/sui.js/transactions";import{TurbosSdk as wd}from"turbos-clmm-sdk";var cr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new wd(t.network.replace("sui:",""),t.suiClient),o=new Td;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.nft.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(t){return new a(t)}};import{TurbosSdk as Id}from"turbos-clmm-sdk";var lr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new Id(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:r,coinTypeB:c,address:u,amountA:d,amountB:S,slippage:w,amountSpecifiedIsInput:I,deadline:C,txb:k}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:c,address:u,amountA:d,amountB:S,amountSpecifiedIsInput:I,slippage:w,deadline:C,txb:k})}static fromData(t){return new a(t)}};import{TurbosSdk as kd}from"turbos-clmm-sdk";import{TransactionBlock as Qc}from"@mysten/sui.js/transactions";import{normalizeSuiObjectId as zc}from"@mysten/sui.js/utils";import{unstable_getObjectId as Cd}from"turbos-clmm-sdk";var an=class{constructor(e){this.turbosSdk=e}async getCoinsData(e,t,n){let o=[],r;do r=await this.turbosSdk.provider.getCoins({owner:e,coinType:t,cursor:r?.nextCursor}),o.push(...r.data);while(r.hasNextPage);let c=[],u=0;return o.sort((d,S)=>Number(S.balance)-Number(d.balance)).some(d=>u>=n?!0:(u+=Number(d.balance),c.push(d),!1)),c}splitAndMergeCoin(e,t,n){if(!e||e.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(e[0].coinType)){let[c]=n.splitCoins(n.gas,[n.pure(t)]);return[c,void 0]}let o=n.object(e[0].coinObjectId);e.length>1&&n.mergeCoins(o,e.slice(1).map(c=>n.object(c.coinObjectId)));let[r]=n.splitCoins(o,[n.pure(t)]);return[r,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:`${Ht.PackageId}::custodian_v2::AccountCap`}});return t.data[0]?.data?Cd(t.data[0].data):void 0}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${Ht.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var Jc=89,Xc=1e6,Yc=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:r,turbosSdk:c}=a,u=new Qc,d=new an(c),S=await d.getCoinsData(r,t,o),[w,I]=d.splitAndMergeCoin(S,o,u);if(!w)throw new Error(`Not enough balance: ${t}`);let C=await d.IsAccountCap(r),k=C?u.object(C):d.createAccount(u),[x,P,L]=u.moveCall({typeArguments:[e,t],target:`${Ht.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[u.object(String(n)),u.pure(Jc),k,u.pure(o),u.object(zc("0x6")),w]});return I&&u.transferObjects([I],u.pure(r)),u.transferObjects([x],u.pure(r)),u.transferObjects([P],u.pure(r)),C||u.transferObjects([k],u.pure(r)),u.setSenderIfNotSet(r),u.setGasBudget(Xc),u},Zc=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:r,turbosSdk:c}=a,u=new Qc,d=new an(c),S=await d.getCoinsData(r,e,o),[w,I]=d.splitAndMergeCoin(S,o,u);if(!w)throw new Error(`Not enough balance: ${e}`);let C=await d.IsAccountCap(r),k=C?u.object(C):d.createAccount(u),x=d.zero(t,u),[P,L,V]=u.moveCall({typeArguments:[e,t],target:`${Ht.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[u.object(String(n)),u.pure(Jc),k,u.pure(o),w,x,u.object(zc("0x6"))]});return I&&u.transferObjects([I],u.pure(r)),u.transferObjects([P],u.pure(r)),u.transferObjects([L],u.pure(r)),C||u.transferObjects([k],u.pure(r)),u.setSenderIfNotSet(r),u.setGasBudget(Xc),u};var ur=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new kd(t.network.replace("sui:",""),t.suiClient);return await Zc({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as vd}from"turbos-clmm-sdk";var mr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new vd(t.network.replace("sui:",""),t.suiClient);return await Yc({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var pr=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(e){let t=new Dd(e.network.replace("sui:",""),e.suiClient),n=await t.contract.getConfig(),{transactionBlock:o,account:r}=e;console.log(e,"input");let u=await new Ya(o,t,n).decode(r.address);return{txType:xd.Other,txSubType:u.type,intentionData:u.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e,r;switch(console.log(e.intentionData,"intentionData"),e.txSubType){case"CreatePool":r=or.fromData(e.intentionData);break;case"AddLiquidity":r=Za.fromData(e.intentionData);break;case"IncreaseLiquidity":r=rr.fromData(e.intentionData);break;case"DecreaseLiquidity":r=ar.fromData(e.intentionData);break;case"RemoveLiquidity":r=cr.fromData(e.intentionData);break;case"CollectFee":r=er.fromData(e.intentionData);break;case"CollectReward":r=nr.fromData(e.intentionData);break;case"Burn":r=tr.fromData(e.intentionData);break;case"Swap":r=lr.fromData(e.intentionData);break;case"PrixJoin":r=sr.fromData(e.intentionData);break;case"PrixClaim":r=ir.fromData(e.intentionData);break;case"SwapExactBaseForQuote":r=ur.fromData(e.intentionData);break;case"SwapExactQuoteForBase":r=mr.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:n,network:o})}};import{TransactionType as Ed}from"@msafe/sui3-utils";import{TransactionType as qi}from"@msafe/sui3-utils";import{bcs as tl}from"@mysten/sui.js/bcs";import{normalizeStructTag as Md,normalizeSuiAddress as rn}from"@mysten/sui.js/utils";var Ad={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},Dt=Ad;var dr=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${Dt.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${Dt.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${Dt.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:qi.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:qi.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:qi.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(Dt.packageId));return new Fi(e,this.txb)}},Fi=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return rn(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return tl.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return rn(e.value.Object.ImmOrOwned.objectId)}return rn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return rn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return rn(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return tl.de(t,new Uint8Array(n))}typeArg(e){return Md(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as Pd}from"@mysten/sui.js/transactions";var fr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Pd,{ticketId:o}=this.data;return n.moveCall({target:`${Dt.packageId}::native_pool::burn_ticket`,arguments:[n.object(Dt.poolObjectId),n.object(Dt.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Bd}from"@mysten/sui.js/transactions";var hr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Bd,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${Dt.packageId}::native_pool::stake`,arguments:[n.object(Dt.poolObjectId),n.object(Dt.metadataObjectId),n.object(Dt.systemStateObjectId),r]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Rd}from"@mysten/sui.js/transactions";var gr=class a extends B{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Rd,{amount:o}=this.data,r=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[c,...u]=r.filter(w=>w.coinType.split("::")[0]===Dt.certType.split("::")[0]),d=n.object(c.coinObjectId);u.length&&n.mergeCoins(d,u.map(w=>n.object(w.coinObjectId)));let S=n.splitCoins(n.object(c.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${Dt.packageId}::native_pool::unstake`,arguments:[n.object(Dt.poolObjectId),n.object(Dt.metadataObjectId),n.object(Dt.systemStateObjectId),S]}),n}static fromData(t){return new a(t)}};var yr=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new dr(t).decode();return{txType:Ed.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=hr.fromData(e.intentionData);break;case"UnStake":o=gr.fromData(e.intentionData);break;case"ClaimTicket":o=fr.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as $d}from"@msafe/sui3-utils";import{asIntN as el}from"@cetusprotocol/common-sdk";import{TransactionType as ge}from"@msafe/sui3-utils";import{fromBase64 as sn}from"@mysten/bcs";import{bcs as cn}from"@mysten/sui/bcs";var br=class{constructor(e){this.transaction=e}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();throw new Error("Unknown transaction type")}decodeOpenPositionTx(){let e=this.getMoveCallCommand("open_position"),t=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:ge.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(el(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(el(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:ge.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:ge.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:ge.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:ge.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:ge.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:ge.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}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")}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(sn(this.inputs[e].Pure.bytes))))}getU64(e){return cn.u64().parse(Uint8Array.from(sn(this.inputs[e].Pure.bytes)))}getU128(e){return cn.u128().parse(Uint8Array.from(sn(this.inputs[e].Pure.bytes)))}getBoolean(e){return cn.bool().parse(Uint8Array.from(sn(this.inputs[e].Pure.bytes)))}getAddress(e){return cn.Address.parse(Uint8Array.from(sn(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as Ld}from"@msafe/sui3-utils";import{BN as ye,ClmmPoolUtil as _d}from"@firefly-exchange/library-sui";import{SuiClient as Nd}from"@firefly-exchange/library-sui";import{OnChainCalls as Wd}from"@firefly-exchange/library-sui/dist/src/spot";var nl={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x406f52151e7dd65addd93b0bdad7989e82aec20c3ae6971954a5140f14a59e4b"}},ue=(a,e)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new Nd({url:nl.rpc});return new Wd(t,nl.objects,{address:e.address,isUIWallet:!1})};var Pt=class{static async OpenPosition(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool),c=this.prototype.buildLiqInput(r,{...e,slippage:0});return await o.openPositionWithFixedAmount(r,e.lowerTick,e.upperTick,c,{returnTx:!0,sender:t.address})}static async provideLiquidity(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool),c=this.prototype.buildLiqInput(r,e);return await o.provideLiquidityWithFixedAmount(r,e.position,c,{returnTx:!0,sender:t.address})}static async removeLiquidity(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return await o.removeLiquidity(r,e.position,{liquidityAmount:new ye(e.liquidity),tokenMaxA:new ye(e.maxAmountTokenA),tokenMaxB:new ye(e.maxAmountTokenB)},{returnTx:!0,sender:t.address})}static async closePosition(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return await o.closePosition(r,e.position,{returnTx:!0,sender:t.address})}static async collectRewards(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return await o.collectRewards(r,e.position,{rewardCoinsType:e.collectRewardTokens,returnTx:!0,sender:t.address})}static async collectFee(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return await o.collectFee(r,e.position,{returnTx:!0,sender:t.address})}static async collectRewardsAndFee(e,t,n){let o=ue(n,t),r=await o.queryChain.getPool(e.pool);return console.log(e.position),await o.collectFeeAndRewards(r,e.position,{returnTx:!0,sender:t.address})}buildLiqInput(e,t){return{..._d.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new ye(t.tokenAmount),t.isTokenAFixed,!0,0,new ye(e.current_sqrt_price)),tokenMaxA:new ye(t.maxAmountTokenA),tokenMaxB:new ye(t.maxAmountTokenB)}}};var Sr=class a extends v{constructor(t){super(t);this.data=t}txType=Ld.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as jd}from"@msafe/sui3-utils";var Tr=class a extends v{constructor(t){super(t);this.data=t}txType=jd.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ud}from"@msafe/sui3-utils";var wr=class a extends v{constructor(t){super(t);this.data=t}txType=Ud.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as qd}from"@msafe/sui3-utils";var Ir=class a extends v{constructor(t){super(t);this.data=t}txType=qd.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Fd}from"@msafe/sui3-utils";var Cr=class a extends v{constructor(t){super(t);this.data=t}txType=Fd.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Kd}from"@msafe/sui3-utils";var kr=class a extends v{constructor(t){super(t);this.data=t}txType=Kd.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Vd}from"@msafe/sui3-utils";var vr=class a extends v{constructor(t){super(t);this.data=t}txType=Vd.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var xr=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(e){console.log("Bluefin helper deserialize input: ",e);let{transaction:t}=e,o=new br(t).decode();return{txType:$d.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.txSubType);let r;switch(e.txSubType){case"OpenPosition":r=Cr.fromData(e.intentionData);break;case"ProvideLiquidity":r=kr.fromData(e.intentionData);break;case"RemoveLiquidity":r=vr.fromData(e.intentionData);break;case"ClosePosition":r=Sr.fromData(e.intentionData);break;case"CollectFee":r=Tr.fromData(e.intentionData);break;case"CollectRewards":r=wr.fromData(e.intentionData);break;case"CollectRewardsAndFee":r=Ir.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:n,network:o})}};import{TransactionType as df}from"@msafe/sui3-utils";import{MmtSDK as Yd}from"@mmt-finance/clmm-sdk";import{Transaction as Zd}from"@mysten/sui/transactions";var R=yl(al());import{convertI32ToSigned as ln,TickMath as rl}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";var Hd="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Gt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Gd=async({suiClient:a,address:e,type:t})=>{let n,o=[],r=0;do{try{let c=await a.getCoins({owner:e,coinType:t,cursor:n,limit:50});o=o.concat(c.data),n=c.nextCursor,(!c.hasNextPage||r===8)&&(n=null)}catch(c){console.log(c),n=null}r++}while(n!==null);return o},Qd=(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")},zd=(a,e,t,n)=>{if(a===Hd){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=Qd(t,e);o.length>1&&n.mergeCoins(n.object(o[0]),o.slice(1).map(c=>n.object(c)));let[r]=n.splitCoins(n.object(o[0]),[n.pure.u64(t)]);return r}};async function Ee(a,e,t,n,o){let r=await Gd({suiClient:a.rpcClient,address:e,type:t});return zd(Gt(t),r.map(u=>({balance:BigInt(u.balance),objectId:u.coinObjectId})),n,o)}function N(a,e,t){let n=a.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}function Jd(a){let e;return a&1?e=new R.default("79232123823359799118286999567"):e=new R.default("79228162514264337593543950336"),a&2&&(e=N(e.mul(new R.default("79236085330515764027303304731")),96,256)),a&4&&(e=N(e.mul(new R.default("79244008939048815603706035061")),96,256)),a&8&&(e=N(e.mul(new R.default("79259858533276714757314932305")),96,256)),a&16&&(e=N(e.mul(new R.default("79291567232598584799939703904")),96,256)),a&32&&(e=N(e.mul(new R.default("79355022692464371645785046466")),96,256)),a&64&&(e=N(e.mul(new R.default("79482085999252804386437311141")),96,256)),a&128&&(e=N(e.mul(new R.default("79736823300114093921829183326")),96,256)),a&256&&(e=N(e.mul(new R.default("80248749790819932309965073892")),96,256)),a&512&&(e=N(e.mul(new R.default("81282483887344747381513967011")),96,256)),a&1024&&(e=N(e.mul(new R.default("83390072131320151908154831281")),96,256)),a&2048&&(e=N(e.mul(new R.default("87770609709833776024991924138")),96,256)),a&4096&&(e=N(e.mul(new R.default("97234110755111693312479820773")),96,256)),a&8192&&(e=N(e.mul(new R.default("119332217159966728226237229890")),96,256)),a&16384&&(e=N(e.mul(new R.default("179736315981702064433883588727")),96,256)),a&32768&&(e=N(e.mul(new R.default("407748233172238350107850275304")),96,256)),a&65536&&(e=N(e.mul(new R.default("2098478828474011932436660412517")),96,256)),a&131072&&(e=N(e.mul(new R.default("55581415166113811149459800483533")),96,256)),a&262144&&(e=N(e.mul(new R.default("38992368544603139932233054999993551")),96,256)),N(e,32,256)}function Xd(a){let e=Math.abs(a),t;return e&1?t=new R.default("18445821805675392311"):t=new R.default("18446744073709551616"),e&2&&(t=N(t.mul(new R.default("18444899583751176498")),64,256)),e&4&&(t=N(t.mul(new R.default("18443055278223354162")),64,256)),e&8&&(t=N(t.mul(new R.default("18439367220385604838")),64,256)),e&16&&(t=N(t.mul(new R.default("18431993317065449817")),64,256)),e&32&&(t=N(t.mul(new R.default("18417254355718160513")),64,256)),e&64&&(t=N(t.mul(new R.default("18387811781193591352")),64,256)),e&128&&(t=N(t.mul(new R.default("18329067761203520168")),64,256)),e&256&&(t=N(t.mul(new R.default("18212142134806087854")),64,256)),e&512&&(t=N(t.mul(new R.default("17980523815641551639")),64,256)),e&1024&&(t=N(t.mul(new R.default("17526086738831147013")),64,256)),e&2048&&(t=N(t.mul(new R.default("16651378430235024244")),64,256)),e&4096&&(t=N(t.mul(new R.default("15030750278693429944")),64,256)),e&8192&&(t=N(t.mul(new R.default("12247334978882834399")),64,256)),e&16384&&(t=N(t.mul(new R.default("8131365268884726200")),64,256)),e&32768&&(t=N(t.mul(new R.default("3584323654723342297")),64,256)),e&65536&&(t=N(t.mul(new R.default("696457651847595233")),64,256)),e&131072&&(t=N(t.mul(new R.default("26294789957452057")),64,256)),e&262144&&(t=N(t.mul(new R.default("37481735321082")),64,256)),t}var Dr=(a,e,t)=>{let n=ln(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default(Jd(n)):new R.default(Xd(n))},il=async(a,e,t,n,o,r,c,u,d)=>{let S=Dr(ln(u),r.tickSpacing),w=Dr(ln(d),r.tickSpacing),I=BigInt(Math.ceil(Number(n)*10**r.tokenX.decimals)),C=BigInt(Math.ceil(Number(o)*10**r.tokenY.decimals)),k,x;Number(n)?k=await Ee(a,t,Gt(r.tokenX.coinType),I,e):[k]=e.moveCall({target:"0x2::coin::zero",typeArguments:[r.tokenX.coinType],arguments:[]}),Number(o)?x=await Ee(a,t,Gt(r.tokenY.coinType),C,e):[x]=e.moveCall({target:"0x2::coin::zero",typeArguments:[r.tokenY.coinType],arguments:[]});let P={objectId:c,tokenXType:r.tokenXType,tokenYType:r.tokenYType,tickSpacing:r.tickSpacing},L=a.Position.openPosition(e,P,S.toString(),w.toString());a.Pool.addLiquidity(e,P,L,k,x,BigInt(0),BigInt(0),t),e.transferObjects([L],e.pure.address(t))},sl=async(a,e,t,n,o,r,c,u,d)=>{try{let S=BigInt(Math.ceil(Number(o)*10**(r?c.tokenX.decimals:c.tokenY.decimals))),w=r?c.tokenX.coinType:c.tokenY.coinType;w=Gt(w);let I=await Ee(a,n,w,S,e),C={objectId:c.objectId,tokenXType:Gt(c.tokenX.coinType),tokenYType:Gt(c.tokenY.coinType),tickSpacing:c.tickSpacing},k=Dr(ln(u),c.tickSpacing),x=Dr(ln(d),c.tickSpacing),P=a.Position.openPosition(e,C,k.toString(),x.toString()),V=(await t.getObject({id:c.objectId,options:{showContent:!0}}))?.data?.content?.fields?.sqrt_price??c.currentSqrtPrice,Wt=rl.sqrtPriceX64ToPrice(new R.default(V?.toString()),c.tokenX.decimals,c.tokenY.decimals),Rt=rl.priceToSqrtPriceX64(Wt.mul(r?.99:1.01),c.tokenX.decimals,c.tokenY.decimals);await a.Pool.addLiquiditySingleSided(e,C,P,I,BigInt(0),BigInt(0),r,n,BigInt(Rt.toString())),e.transferObjects([P],e.pure.address(n))}catch(S){console.error(S)}};var Ar=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Yd.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:r,amountB:c,pool:u,selectedLowTick:d,selectedHighTick:S}=n,w=new Zd;return await il(t,w,o,r,c,u,u.objectId,d,S),w}static fromData(t){return new a(t)}};import{MmtSDK as tf}from"@mmt-finance/clmm-sdk";import{Transaction as ef}from"@mysten/sui/transactions";var Or=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=tf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:r,isTokenX:c,pool:u,selectedLowTick:d,selectedHighTick:S}=n,w=new ef;return await sl(t,w,t.rpcClient,o,r,c,u,d,S),w}static fromData(t){return new a(t)}};import{MmtSDK as nf}from"@mmt-finance/clmm-sdk";import{Transaction as of}from"@mysten/sui/transactions";var Ne=(a,e,t,n,o)=>{let r={objectId:n.objectId,tokenXType:n.tokenXType,tokenYType:n.tokenYType};(n?.rewarders?.length??0)>0&&a.Pool.collectAllRewards(o,r,n.rewarders,t.objectId,e),a.Pool.collectFee(o,n,t.objectId,e)};var Mr=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=nf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,positions:r,pools:c}=n,u=new of;for(let d of r){let S=c.find(w=>w.objectId===d.poolId);Ne(t,o,d,S,u)}return u}static fromData(t){return new a(t)}};import{MmtSDK as af}from"@mmt-finance/clmm-sdk";import{Transaction as rf}from"@mysten/sui/transactions";var Pr=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=af.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:r,pool:c}=n,u=new rf;return Ne(t,o,r,c,u),u}static fromData(t){return new a(t)}};import{MmtSDK as sf}from"@mmt-finance/clmm-sdk";import{Transaction as cf}from"@mysten/sui/transactions";import lf from"bignumber.js";var Br=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=sf.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:r,address:c,withdrawPercentage:u}=n,d=new cf,S=o.tokenX.coinType,w=o.tokenY.coinType,I={objectId:o.objectId,tokenXType:S,tokenYType:w},C=BigInt(u===100?r.liquidity:new lf(r.liquidity).multipliedBy(u/100).toFixed(0));return t.Pool.removeLiquidity(d,I,r.objectId,C,BigInt(0),BigInt(0),c),Ne(t,c,r,o,d),u===100&&t.Position.closePosition(d,r.objectId),d}static fromData(t){return new a(t)}};import{MmtSDK as mf}from"@mmt-finance/clmm-sdk";import{Transaction as pf}from"@mysten/sui/transactions";import{mappedMmtV3Pool as uf}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var cl=async(a,e,t,n,o,r)=>{let c=BigInt(Math.ceil(Number(n)*10**t.decimals)),u=await Ee(a,o,Gt(t.coinType),c,r),d=t.coinType;for(let S=0;S<e.length;S+=1){let{objectId:w,tokenX:I,tokenY:C,isStable:k}=e[S],{id:x,isReverse:P}=uf[w]||{id:w,isReverse:!1},L=Gt(I.coinType)===Gt(d);L=P?!L:L;let V=P?C.coinType:I.coinType,Wt=P?I.coinType:C.coinType,Rt=a.Pool.swap(r,{objectId:x,tokenXType:V,tokenYType:Wt,isStable:k},c,u,L,void 0);r.transferObjects([u],r.pure.address(o)),u=Rt,d=L?Wt:V,[c]=r.moveCall({target:"0x2::coin::value",typeArguments:[d],arguments:[u]})}r.transferObjects([u],r.pure.address(o))};var Rr=class a extends v{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=mf.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:r,amountIn:c,address:u}=n,d=new pf;return await cl(t,o,r,c,u,d),d}static fromData(t){return new a(t)}};var Er=class{application="mmt-dex";supportSDK="@mysten/sui";async deserialize(e){let{appContext:t}=e;return{txType:df.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=Rr.fromData(e.intentionData);break;case"AddLiquidity":t=Ar.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=Or.fromData(e.intentionData);break;case"ClaimRewards":t=Pr.fromData(e.intentionData);break;case"ClaimAllRewards":t=Mr.fromData(e.intentionData);break;case"RemoveLiquidity":t=Br.fromData(e.intentionData);break;default:throw new Error("not implemented")}return t.build()}};var UE=Xo.fromHelpers([new _o,new Go,new Eo,new Qo,new so,new pr,new Er,new Ma,new yr,new _n,new Ua,new Ga,new Sn,new xr,new Xa]);export{UE as appHelpers};
2
2
  //# sourceMappingURL=index.mjs.map