Are you sure?
+>>0,isFinite(p)?(p=p>>>0,y===void 0&&(y="utf8")):(y=p,p=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");const x=this.length-A;if((p===void 0||p>x)&&(p=x),s.length>0&&(p<0||A<0)||A>this.length)throw new RangeError("Attempt to write outside buffer bounds");y||(y="utf8");let Z=!1;for(;;)switch(y){case"hex":return L(this,s,A,p);case"utf8":case"utf-8":return z(this,s,A,p);case"ascii":case"latin1":case"binary":return _(this,s,A,p);case"base64":return O(this,s,A,p);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return H(this,s,A,p);default:if(Z)throw new TypeError("Unknown encoding: "+y);y=(""+y).toLowerCase(),Z=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function P(d,s,A){return s===0&&A===d.length?e.fromByteArray(d):e.fromByteArray(d.slice(s,A))}function $(d,s,A){A=Math.min(d.length,A);const p=[];let y=s;for(;y239?4:x>223?3:x>191?2:1;if(y+F<=A){let re,ne,ae,K;switch(F){case 1:x<128&&(Z=x);break;case 2:re=d[y+1],(re&192)===128&&(K=(x&31)<<6|re&63,K>127&&(Z=K));break;case 3:re=d[y+1],ne=d[y+2],(re&192)===128&&(ne&192)===128&&(K=(x&15)<<12|(re&63)<<6|ne&63,K>2047&&(K<55296||K>57343)&&(Z=K));break;case 4:re=d[y+1],ne=d[y+2],ae=d[y+3],(re&192)===128&&(ne&192)===128&&(ae&192)===128&&(K=(x&15)<<18|(re&63)<<12|(ne&63)<<6|ae&63,K>65535&&K<1114112&&(Z=K))}}Z===null?(Z=65533,F=1):Z>65535&&(Z-=65536,p.push(Z>>>10&1023|55296),Z=56320|Z&1023),p.push(Z),y+=F}return M(p)}const q=4096;function M(d){const s=d.length;if(s<=q)return String.fromCharCode.apply(String,d);let A="",p=0;for(;p >>0,p=p>>>0,!y){const F=Math.pow(2,8*p)-1;ee(this,s,A,p,F,0)}let x=p-1,Z=1;for(this[A+x]=s&255;--x>=0&&(Z*=256);)this[A+x]=s/Z&255;return A+p},l.prototype.writeUint8=l.prototype.writeUInt8=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,1,255,0),this[A]=s&255,A+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,2,65535,0),this[A]=s&255,this[A+1]=s>>>8,A+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,2,65535,0),this[A]=s>>>8,this[A+1]=s&255,A+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,4,4294967295,0),this[A+3]=s>>>24,this[A+2]=s>>>16,this[A+1]=s>>>8,this[A]=s&255,A+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,4,4294967295,0),this[A]=s>>>24,this[A+1]=s>>>16,this[A+2]=s>>>8,this[A+3]=s&255,A+4};function le(d,s,A,p,y){Xe(s,p,y,d,A,7);let x=Number(s&BigInt(4294967295));d[A++]=x,x=x>>8,d[A++]=x,x=x>>8,d[A++]=x,x=x>>8,d[A++]=x;let Z=Number(s>>BigInt(32)&BigInt(4294967295));return d[A++]=Z,Z=Z>>8,d[A++]=Z,Z=Z>>8,d[A++]=Z,Z=Z>>8,d[A++]=Z,A}function Be(d,s,A,p,y){Xe(s,p,y,d,A,7);let x=Number(s&BigInt(4294967295));d[A+7]=x,x=x>>8,d[A+6]=x,x=x>>8,d[A+5]=x,x=x>>8,d[A+4]=x;let Z=Number(s>>BigInt(32)&BigInt(4294967295));return d[A+3]=Z,Z=Z>>8,d[A+2]=Z,Z=Z>>8,d[A+1]=Z,Z=Z>>8,d[A]=Z,A+8}l.prototype.writeBigUInt64LE=ue(function(s,A=0){return le(this,s,A,BigInt(0),BigInt("0xffffffffffffffff"))}),l.prototype.writeBigUInt64BE=ue(function(s,A=0){return Be(this,s,A,BigInt(0),BigInt("0xffffffffffffffff"))}),l.prototype.writeIntLE=function(s,A,p,y){if(s=+s,A=A>>>0,!y){const re=Math.pow(2,8*p-1);ee(this,s,A,p,re-1,-re)}let x=0,Z=1,F=0;for(this[A]=s&255;++x >0)-F&255;return A+p},l.prototype.writeIntBE=function(s,A,p,y){if(s=+s,A=A>>>0,!y){const re=Math.pow(2,8*p-1);ee(this,s,A,p,re-1,-re)}let x=p-1,Z=1,F=0;for(this[A+x]=s&255;--x>=0&&(Z*=256);)s<0&&F===0&&this[A+x+1]!==0&&(F=1),this[A+x]=(s/Z>>0)-F&255;return A+p},l.prototype.writeInt8=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,1,127,-128),s<0&&(s=255+s+1),this[A]=s&255,A+1},l.prototype.writeInt16LE=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,2,32767,-32768),this[A]=s&255,this[A+1]=s>>>8,A+2},l.prototype.writeInt16BE=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,2,32767,-32768),this[A]=s>>>8,this[A+1]=s&255,A+2},l.prototype.writeInt32LE=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,4,2147483647,-2147483648),this[A]=s&255,this[A+1]=s>>>8,this[A+2]=s>>>16,this[A+3]=s>>>24,A+4},l.prototype.writeInt32BE=function(s,A,p){return s=+s,A=A>>>0,p||ee(this,s,A,4,2147483647,-2147483648),s<0&&(s=4294967295+s+1),this[A]=s>>>24,this[A+1]=s>>>16,this[A+2]=s>>>8,this[A+3]=s&255,A+4},l.prototype.writeBigInt64LE=ue(function(s,A=0){return le(this,s,A,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),l.prototype.writeBigInt64BE=ue(function(s,A=0){return Be(this,s,A,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function Ge(d,s,A,p,y,x){if(A+p>d.length)throw new RangeError("Index out of range");if(A<0)throw new RangeError("Index out of range")}function _e(d,s,A,p,y){return s=+s,A=A>>>0,y||Ge(d,s,A,4),n.write(d,s,A,p,23,4),A+4}l.prototype.writeFloatLE=function(s,A,p){return _e(this,s,A,!0,p)},l.prototype.writeFloatBE=function(s,A,p){return _e(this,s,A,!1,p)};function Te(d,s,A,p,y){return s=+s,A=A>>>0,y||Ge(d,s,A,8),n.write(d,s,A,p,52,8),A+8}l.prototype.writeDoubleLE=function(s,A,p){return Te(this,s,A,!0,p)},l.prototype.writeDoubleBE=function(s,A,p){return Te(this,s,A,!1,p)},l.prototype.copy=function(s,A,p,y){if(!l.isBuffer(s))throw new TypeError("argument should be a Buffer");if(p||(p=0),!y&&y!==0&&(y=this.length),A>=s.length&&(A=s.length),A||(A=0),y>0&&y =this.length)throw new RangeError("Index out of range");if(y<0)throw new RangeError("sourceEnd out of bounds");y>this.length&&(y=this.length),s.length-A 2**32?y=ke(String(A)):typeof A=="bigint"&&(y=String(A),(A>BigInt(2)**BigInt(32)||A<-(BigInt(2)**BigInt(32)))&&(y=ke(y)),y+="n"),p+=` It must be ${s}. Received ${y}`,p},RangeError);function ke(d){let s="",A=d.length;const p=d[0]==="-"?1:0;for(;A>=p+4;A-=3)s=`_${d.slice(A-3,A)}${s}`;return`${d.slice(0,A)}${s}`}function Le(d,s,A){Ne(s,"offset"),(d[s]===void 0||d[s+A]===void 0)&&Ee(s,d.length-(A+1))}function Xe(d,s,A,p,y,x){if(d>A||d 55295&&A<57344){if(!y){if(A>56319){(s-=3)>-1&&x.push(239,191,189);continue}else if(Z+1===p){(s-=3)>-1&&x.push(239,191,189);continue}y=A;continue}if(A<56320){(s-=3)>-1&&x.push(239,191,189),y=A;continue}A=(y-55296<<10|A-56320)+65536}else y&&(s-=3)>-1&&x.push(239,191,189);if(y=null,A<128){if((s-=1)<0)break;x.push(A)}else if(A<2048){if((s-=2)<0)break;x.push(A>>6|192,A&63|128)}else if(A<65536){if((s-=3)<0)break;x.push(A>>12|224,A>>6&63|128,A&63|128)}else if(A<1114112){if((s-=4)<0)break;x.push(A>>18|240,A>>12&63|128,A>>6&63|128,A&63|128)}else throw new Error("Invalid code point")}return x}function Qe(d){const s=[];for(let A=0;A =s.length||y>=d.length);++y)s[y+A]=d[y];return y}function ge(d,s){return d instanceof s||d!=null&&d.constructor!=null&&d.constructor.name!=null&&d.constructor.name===s.name}function Y(d){return d!==d}const ye=function(){const d="0123456789abcdef",s=new Array(256);for(let A=0;A<16;++A){const p=A*16;for(let y=0;y<16;++y)s[p+y]=d[A]+d[y]}return s}();function ue(d){return typeof BigInt>"u"?st:d}function st(){throw new Error("BigInt not supported")}})(sn);typeof window<"u"&&(window.Buffer=window.Buffer||sn.Buffer);let Vt=class extends nt.Client{constructor(e){super(new nt.Spec(["AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAHwAAAAAAAAAIT3ZlcmZsb3cAAAABAAAAAAAAABNJbnN1ZmZpY2llbnRCYWxhbmNlAAAAAAIAAAAAAAAADFVuYXV0aG9yaXplZAAAAAMAAAAAAAAADkNvbnRyYWN0UGF1c2VkAAAAAAAEAAAAAAAAABNDcmVkaXRMaW1pdEV4Y2VlZGVkAAAAAAUAAAAAAAAAFFVuc3VwcG9ydGVkTWlncmF0aW9uAAAABgAAAAAAAAARSW52YWxpZE11bHRpcGxpZXIAAAAAAAAHAAAAAAAAABFSYXRlTGltaXRFeGNlZWRlZAAAAAAAAAgAAAAAAAAAD1Zlc3RpbmdOb3RGb3VuZAAAAAAJAAAAAAAAAA5Ob1BlbmRpbmdBZG1pbgAAAAAACgAAAAAAAAATSW5zdWZmaWNpZW50UmVzZXJ2ZQAAAAALAAAAAAAAABVJbnZhbGlkUmVkZW1wdGlvblJhdGUAAAAAAAAMAAAAAAAAABFJbnZhbGlkQWRtaW5Ob25jZQAAAAAAAA0AAAAyQSByZWZlcnJlciBhbmQgcmVmZXJlZSBjYW5ub3QgYmUgdGhlIHNhbWUgYWRkcmVzcy4AAAAAAAxTZWxmUmVmZXJyYWwAAAAOAAAASlRoZSByZWZlcmVlIHdhcyBwcmV2aW91c2x5IHJld2FyZGVkIGFzIGEgcmVmZXJlZSBvZiB0aGlzIHJlZmVycmVyIChjeWNsZSkuAAAAAAAQQ2lyY3VsYXJSZWZlcnJhbAAAAA8AAABGVGhpcyByZWZlcmVlIGhhcyBhbHJlYWR5IHRyaWdnZXJlZCBhIHJlZmVycmFsIGJvbnVzIChvbmUgcGVyIHJlZmVyZWUpLgAAAAAAF1JlZmVycmFsQWxyZWFkeVJld2FyZGVkAAAAABAAAAA/UGF5aW5nIHRoaXMgYm9udXMgd291bGQgZXhjZWVkIHRoZSBjb25maWd1cmVkIHBlci1yZWZlcnJlciBjYXAuAAAAABNSZWZlcnJhbENhcEV4Y2VlZGVkAAAAABEAAAA/UmVmZXJyYWwgcmV3YXJkcyBoYXZlIG5vdCBiZWVuIGNvbmZpZ3VyZWQgKGJvbnVzIHJhdGUgaXMgemVybykuAAAAABVSZWZlcnJhbE5vdENvbmZpZ3VyZWQAAAAAAAASAAAAL1RoZSBzdXBwbGllZCByZWZlcnJhbCBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuAAAAABVJbnZhbGlkUmVmZXJyYWxDb25maWcAAAAAAAATAAAAMVRoZSBjb21wdXRlZCByZWZlcnJhbCBib251cyByb3VuZGVkIGRvd24gdG8gemVyby4AAAAAAAARWmVyb1JlZmVycmFsQm9udXMAAAAAAAAUAAAAIVNFUC00MSB0b2tlbiBtb2RlIGlzIG5vdCBlbmFibGVkLgAAAAAAABNUb2tlbk1vZGVOb3RFbmFibGVkAAAAABUAAAAzU0VQLTQxOiBhbGxvd2FuY2Ugbm90IHN1ZmZpY2llbnQgZm9yIHRyYW5zZmVyX2Zyb20uAAAAABFBbGxvd2FuY2VFeGNlZWRlZAAAAAAAABYAAAAuU0VQLTQxOiBhcHByb3ZhbCBleHBpcmF0aW9uIGxlZGdlciBoYXMgcGFzc2VkLgAAAAAAD0FwcHJvdmFsRXhwaXJlZAAAAAAXAAAAPVNFUC00MTogaW52YWxpZCBleHBpcmF0aW9uIGxlZGdlciAobXVzdCBiZSA+IGN1cnJlbnQgbGVkZ2VyKS4AAAAAAAARSW52YWxpZEV4cGlyYXRpb24AAAAAAAAYAAAAAAAAABBJbnZhbGlkVGhyZXNob2xkAAAAGQAAAAAAAAAWSW5zdWZmaWNpZW50U2lnbmF0dXJlcwAAAAAAGgAAAAAAAAALTm9uY2VSZXVzZWQAAAAAGwAAAAAAAAAPRHVwbGljYXRlU2lnbmVyAAAAABwAAAAAAAAADVVua25vd25TaWduZXIAAAAAAAAdAAABAk9wZXJhdGlvbiBhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyAoaXNzdWUgIzEwMjApLgoKQXNzaWduZWQgMzAvMzEgcmF0aGVyIHRoYW4gMjEvMjI6IHRoZSBTRVAtNDEgYmxvY2sgYWxyZWFkeSBwdWJsaXNoZWQKdGhvc2UgY29kZXMgdGhyb3VnaCB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdzIGFuZCBkb2NzL0NPTlRSQUNUU19BUEkubWQsCnNvIHJlbnVtYmVyaW5nIGl0IHdvdWxkIGJyZWFrIGRlY29kaW5nIGZvciBleGlzdGluZyBjbGllbnRzLgAAAAAAClplcm9BbW91bnQAAAAAAB4AAABJVHJhbnNmZXIgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjYW5ub3QgYmUgdGhlIHNhbWUgYWRkcmVzcyAoaXNzdWUgIzEwMjApLgAAAAAAAAxTZWxmVHJhbnNmZXIAAAAf","AAAAAQAAADRWZXN0aW5nIHNjaGVkdWxlIHJlY29yZCBzdG9yZWQgcGVyIHVzZXIgcGVyIHZlc3RfaWQuAAAAAAAAAA1WZXN0aW5nUmVjb3JkAAAAAAAABAAAAAAAAAAHY2xhaW1lZAAAAAAGAAAAAAAAAAplbmRfbGVkZ2VyAAAAAAAEAAAAAAAAAAxzdGFydF9sZWRnZXIAAAAEAAAAAAAAAAV0b3RhbAAAAAAAAAY=","AAAAAAAAACFSZXR1cm4gdGhlIGN1cnJlbnQgYWRtaW4gYWRkcmVzcy4AAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAACtDbGFpbSByZXdhcmRzIGZvciBhIHVzZXIgKHJlZHVjZXMgYmFsYW5jZSkuAAAAAAVjbGFpbQAAAAAAAAIAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAYAAAABAAAD6QAAAAYAAAAD","AAAAAAAAABhDcmVkaXQgcG9pbnRzIHRvIGEgdXNlci4AAAAGY3JlZGl0AAAAAAADAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAEdXNlcgAAABMAAAAAAAAABmFtb3VudAAAAAAABgAAAAEAAAPpAAAABgAAAAM=","AAAAAAAAAJZSZWRlZW0gcG9pbnRzIGZvciBhc3NldCB0b2tlbnMuCkJ1cm5zIHBvaW50c19hbW91bnQgZnJvbSB1c2VyIGJhbGFuY2UsIHRyYW5zZmVycyBhc3NldCB0b2tlbnMgdG8gdXNlci4KUmV0dXJucyB0aGUgYW1vdW50IG9mIGFzc2V0IHRva2VucyB0cmFuc2ZlcnJlZC4AAAAAAAZyZWRlZW0AAAAAAAIAAAAAAAAABHVzZXIAAAATAAAAAAAAAA1wb2ludHNfYW1vdW50AAAAAAAABgAAAAEAAAPpAAAACwAAAAM=","AAAAAAAAACpHZXQgdGhlIGN1cnJlbnQgcG9pbnRzIGJhbGFuY2UgZm9yIGEgdXNlci4AAAAAAAdiYWxhbmNlAAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAAAY=","AAAAAAAAALdNaWdyYXRpb24gZW50cnlwb2ludCBmb3IgZnV0dXJlIHNjaGVtYSBjaGFuZ2VzLgoKQ3VycmVudCBiZWhhdmlvciBpcyBpbnRlbnRpb25hbGx5IGlkZW1wb3RlbnQgZm9yIHZlcnNpb24gYDFgLCBzbyBvcGVyYXRpb25hbApzY3JpcHRzIGNhbiBjYWxsIHRoaXMgc2FmZWx5IGR1cmluZyBkZXBsb3ltZW50cy91cGdyYWRlcy4AAAAAB21pZ3JhdGUAAAAAAgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAA50YXJnZXRfdmVyc2lvbgAAAAAABAAAAAEAAAPpAAAABAAAAAM=","AAAAAAAAAh5SZXBsYWNlIHRoZSBjb250cmFjdCBXQVNNIGluLXBsYWNlIHdpdGhvdXQgcmVzZXR0aW5nIHBhcnRpY2lwYW50IHN0YXRlLgoKQ2FsbHMgYGNvbnRyYWN0X3VwZGF0ZV9jdXJyZW50X2NvbnRyYWN0X3dhc21gIHdpdGggdGhlIHN1cHBsaWVkIGhhc2ggb2YKdGhlIG5ldyBXQVNNIGJsb2IuICBCYWxhbmNlcyBhbmQgdmVzdGluZyByZWNvcmRzIGluIHBlcnNpc3RlbnQgc3RvcmFnZQpzdXJ2aXZlIGJlY2F1c2UgU29yb2JhbiBXQVNNLW9ubHkgdXBncmFkZXMgbmV2ZXIgdG91Y2ggc3RvcmFnZS4KUmVxdWlyZXMgYWRtaW4gYXV0aCBhbmQgYSB2YWxpZCBub25jZSBzbyB1cGdyYWRlcyBhcmUgcmVwbGF5LXNhZmUuCgpUeXBpY2FsIHdvcmtmbG93IChpc3N1ZSAjNTE4KToKMS4gVXBsb2FkIG5ldyBXQVNNIOKGkiBvYnRhaW4gYG5ld193YXNtX2hhc2hgLgoyLiBDYWxsIGB1cGdyYWRlKGFkbWluLCBub25jZSwgbmV3X3dhc21faGFzaClgLgozLiBJZiBzdG9yYWdlIGxheW91dCBjaGFuZ2VkLCBjYWxsIGBtaWdyYXRlKGFkbWluLCB0YXJnZXRfdmVyc2lvbilgLgAAAAAAB3VwZ3JhZGUAAAAAAwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAVub25jZQAAAAAAAAsAAAAAAAAADW5ld193YXNtX2hhc2gAAAAAAAPuAAAAIAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAChHZXQgY29udHJhY3QgbWV0YWRhdGEgKG5hbWUgYW5kIHN5bWJvbCkuAAAACG1ldGFkYXRhAAAAAAAAAAEAAAPtAAAAAgAAABEAAAAR","AAAAAAAAAQtSZWNvcmQgdGhlIGN1cnJlbnQgbGVkZ2VyIG51bWJlciB1bmRlciBgc25hcHNob3RfaWRgIChhZG1pbiBvbmx5KS4KRG9lcyBOT1QgY29weSBiYWxhbmNlcyDigJQgc3RvcmVzIGEgbGVkZ2VyIHJlZmVyZW5jZSBmb3Igb2ZmLWNoYWluIGluZGV4aW5nLgpPZmYtY2hhaW4gaW5kZXhlcnMgY2FuIHVzZSB0aGUgbGVkZ2VyIG51bWJlciB3aXRoIEhvcml6b24gYGdldExlZGdlckVudHJpZXNgCnRvIHJlY29uc3RydWN0IGJhbGFuY2VzIGF0IHRoYXQgcG9pbnQgaW4gdGltZS4AAAAACHNuYXBzaG90AAAAAgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAtzbmFwc2hvdF9pZAAAAAAGAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAABxDaGVjayBpZiBjb250cmFjdCBpcyBwYXVzZWQuAAAACWlzX3BhdXNlZAAAAAAAAAAAAAABAAAAAQ==","AAAAAAAAAEFDb25maWd1cmUgdGllcmVkIHJld2FyZCBkaXN0cmlidXRpb24gZm9yIGEgY2FtcGFpZ24gKGFkbWluIG9ubHkpLgAAAAAAAAlzZXRfdGllcnMAAAAAAAADAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAAC2NhbXBhaWduX2lkAAAAAAYAAAAAAAAABXRpZXJzAAAAAAAD6gAAA+0AAAACAAAABgAAAAYAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAChJbml0aWFsaXplIHRoZSByZXdhcmRzIGNvbnRyYWN0IChhZG1pbikuAAAACmluaXRpYWxpemUAAAAAAAMAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAEbmFtZQAAABEAAAAAAAAABnN5bWJvbAAAAAAAEQAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAFBTRVAtNDE6IEJ1cm4gYGFtb3VudGAgZnJvbSBgZnJvbWAncyBiYWxhbmNlLgpSZXF1aXJlcyBhdXRob3JpemF0aW9uIGZyb20gYGZyb21gLgAAAApzZXA0MV9idXJuAAAAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAACZTRVAtNDE6IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRva2VuLgAAAAAACnNlcDQxX25hbWUAAAAAAAAAAAABAAAAEQ==","AAAAAAAAAX1QYXVzZSB0aGUgY29udHJhY3QuIEJsb2NrcyBjcmVkaXQgYW5kIGNsYWltIG9wZXJhdGlvbnMuCgpUaGlzIGlzIGEgY3JpdGljYWwgb3BlcmF0aW9uOiB3aGVuIGEgbXVsdGlzaWcgdGhyZXNob2xkIGlzIGNvbmZpZ3VyZWQKKHNlZSBbYFNlbGY6OnNldF9tdWx0aXNpZ190aHJlc2hvbGRgXSksIGBzaWduYXR1cmVzYCBtdXN0IGNvbnRhaW4gYXQKbGVhc3QgYHJlcXVpcmVkYCB2YWxpZCBjby1hZG1pbiBzaWduYXR1cmVzIG92ZXIKYChvcCwgbm9uY2UsIHNoYTI1NihwYXVzZWQpKWA7IG90aGVyd2lzZSBwYXNzIGFuIGVtcHR5IGBWZWNgIGFuZCB0aGUKbGVnYWN5IHNpbmdsZS1hZG1pbiBjaGVjayBhcHBsaWVzIChgbm9uY2VgIGlzIGlnbm9yZWQgaW4gdGhhdCBjYXNlKS4AAAAAAAAKc2V0X3BhdXNlZAAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAVub25jZQAAAAAAAAYAAAAAAAAABnBhdXNlZAAAAAAAAQAAAAAAAAAKc2lnbmF0dXJlcwAAAAAD6gAAA+0AAAACAAAAEwAAA+4AAABAAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAADNDbGVhciBjb25maWd1cmVkIHRpZXJzIGZvciBhIGNhbXBhaWduIChhZG1pbiBvbmx5KS4AAAAAC2NsZWFyX3RpZXJzAAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAALY2FtcGFpZ25faWQAAAAABgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAJFBY2NlcHQgYWRtaW4gcm9sZS4gQ2FsbGVyIE1VU1QgYmUgdGhlIGFkZHJlc3MgdGhhdCB0aGUgY3VycmVudCBhZG1pbgpwcmV2aW91c2x5IHByb3Bvc2VkIHZpYSBgcHJvcG9zZV9hZG1pbmAuIENsZWFycyB0aGUgcGVuZGluZyBzbG90IG9uCnN1Y2Nlc3MuAAAAAAAADGFjY2VwdF9hZG1pbgAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAIhSZWdpc3RlciBhIGNvLWFkbWluJ3MgZWQyNTUxOSBwdWJsaWMga2V5IGZvciBtdWx0aXNpZyB2ZXJpZmljYXRpb24KKGFkbWluIG9ubHkpLiBPdmVyd3JpdGVzIHRoZSBrZXkgaWYgYGNvX2FkbWluYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuAAAADGFkZF9jb19hZG1pbgAAAAMAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAIY29fYWRtaW4AAAATAAAAAAAAAAZwdWJrZXkAAAAAA+4AAAAgAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAGVDcmVkaXQgcG9pbnRzIHRvIG11bHRpcGxlIHVzZXJzIGluIG9uZSBjYWxsLgpFYWNoIHJlY2lwaWVudCBjb3VudHMgYXMgb25lIGNhbGwgdG93YXJkIHRoZSByYXRlIGxpbWl0LgAAAAAAAAxiYXRjaF9jcmVkaXQAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAKcmVjaXBpZW50cwAAAAAD6gAAA+0AAAACAAAAEwAAAAYAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAJ1DbGFpbSB1cCB0byBgYW1vdW50YCBmcm9tIHRoZSB1bmxvY2tlZCBwb3J0aW9uIG9mIGEgc3BlY2lmaWMgdmVzdGluZyBzY2hlZHVsZS4KUmV0dXJucyB0aGUgcmVtYWluaW5nIGNsYWltYWJsZSBhbW91bnQgaW4gdGhhdCB2ZXN0IHNjaGVkdWxlIGFmdGVyIHRoaXMgY2xhaW0uAAAAAAAADGNsYWltX3Zlc3RlZAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAd2ZXN0X2lkAAAAAAYAAAAAAAAABmFtb3VudAAAAAAABgAAAAEAAAPpAAAABgAAAAM=","AAAAAAAAAHZGdW5kIHJlZGVtcHRpb24gcmVzZXJ2ZSAoY2FsbGFibGUgYnkgYW55b25lLCB0eXBpY2FsbHkgYWRtaW4pLgpUcmFuc2ZlcnMgYXNzZXQgdG9rZW5zIGZyb20gY2FsbGVyIHRvIGNvbnRyYWN0IHJlc2VydmUuAAAAAAAMZnVuZF9yZXNlcnZlAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAABgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAEBSZXR1cm5zIHRoZSBsZWRnZXIgbnVtYmVyIHJlY29yZGVkIGZvciBgc25hcHNob3RfaWRgLCBvciBgTm9uZWAuAAAADGdldF9zbmFwc2hvdAAAAAEAAAAAAAAAC3NuYXBzaG90X2lkAAAAAAYAAAABAAAD6AAAAAY=","AAAAAAAAAChTRVAtNDE6IFJldHVybnMgdGhlIHN5bWJvbCBvZiB0aGUgdG9rZW4uAAAADHNlcDQxX3N5bWJvbAAAAAAAAAABAAAAEQ==","AAAAAAAAAAAAAAAMdG90YWxfc3VwcGx5AAAAAAAAAAEAAAAG","AAAAAAAAAE5SZXR1cm5zIHRoZSBzdW0gb2YgYWxsIHZlc3Rpbmcgc2NoZWR1bGUgdG90YWxzIGZvciBhIHVzZXIgKHZlc3RlZCArIHVudmVzdGVkKS4AAAAAAAx0b3RhbF92ZXN0ZWQAAAABAAAAAAAAAAR1c2VyAAAAEwAAAAEAAAAG","AAAAAAAAAMtDcmVkaXQgYSBsaW5lYXJseS12ZXN0aW5nIGFtb3VudCB0byBhIHVzZXIgKGF1dGhvcml6ZWQgY2FsbGVyIG9ubHkpLgpWZXN0aW5nIGlzIGxpbmVhcjogYHVubG9ja2VkID0gdG90YWwgKiAobm93IC0gc3RhcnRfbGVkZ2VyKSAvIChlbmRfbGVkZ2VyIC0gc3RhcnRfbGVkZ2VyKWAuClJldHVybnMgdGhlIG5ldyB2ZXN0X2lkIGZvciB0aGlzIHNjaGVkdWxlLgAAAAANY3JlZGl0X3Zlc3RlZAAAAAAAAAUAAAAAAAAABGZyb20AAAATAAAAAAAAAAR1c2VyAAAAEwAAAAAAAAAMdG90YWxfYW1vdW50AAAABgAAAAAAAAAMc3RhcnRfbGVkZ2VyAAAABAAAAAAAAAAKZW5kX2xlZGdlcgAAAAAABAAAAAEAAAPpAAAABgAAAAM=","AAAAAAAAAB9DaGVjayBpZiB0b2tlbiBtb2RlIGlzIGVuYWJsZWQuAAAAAA1pc190b2tlbl9tb2RlAAAAAAAAAAAAAAEAAAAB","AAAAAAAAAHNSZXR1cm4gdGhlIHBlbmRpbmcgYWRtaW4gYWRkcmVzcyBwcm9wb3NlZCBieSB0aGUgY3VycmVudCBhZG1pbiwgaWYgYW55LgpgTm9uZWAgd2hlbiB0aGVyZSBpcyBubyBpbi1mbGlnaHQgdHJhbnNmZXIuAAAAAA1wZW5kaW5nX2FkbWluAAAAAAAAAAAAAAEAAAPoAAAAEw==","AAAAAAAAARxQcm9wb3NlIGEgbmV3IGFkbWluIChjdXJyZW50IGFkbWluIG9ubHkpLiBUaGUgdHJhbnNmZXIgZG9lcyBub3QgdGFrZQplZmZlY3QgdW50aWwgYGFjY2VwdF9hZG1pbmAgaXMgY2FsbGVkIGJ5IHRoZSBuZXcgYWRtaW4uCgpDYWxsaW5nIGFnYWluIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzIHBlbmRpbmcgYWRtaW4sIHNvIHRoZSBjdXJyZW50CmFkbWluIGNhbiBjYW5jZWwgYSBwcm9wb3NhbCBieSBjYWxsaW5nIGBjYW5jZWxfYWRtaW5fdHJhbnNmZXJgIG9yIGJ5CnByb3Bvc2luZyB0aGVtc2VsdmVzLgAAAA1wcm9wb3NlX2FkbWluAAAAAAAAAgAAAAAAAAANY3VycmVudF9hZG1pbgAAAAAAABMAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAIZTRVAtNDE6IFNldCBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byBzcGVuZCBgYW1vdW50YCBmcm9tIGNhbGxlcidzIGJhbGFuY2UuCklmIGV4cGlyYXRpb25fbGVkZ2VyIGlzIDAsIHRoZSBhbGxvd2FuY2UgZG9lcyBub3QgZXhwaXJlLgAAAAAADXNlcDQxX2FwcHJvdmUAAAAAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAGJTRVAtNDE6IFJldHVybnMgdGhlIGJhbGFuY2Ugb2YgYGlkYCBhcyBpMTI4LgpNYXBzIGludGVybmFsIHU2NCBwb2ludHMgdG8gaTEyOCBwZXIgU0VQLTQxIHN0YW5kYXJkLgAAAAAADXNlcDQxX2JhbGFuY2UAAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAOxTdG9yYWdlIHN0YXRzIGZvciBtb25pdG9yaW5nOiBgKHBhcnRpY2lwYW50X2NvdW50LCBub25jZV9jb3VudCwgZXhwaXJlZF9lc3RpbWF0ZSlgLgpgcGFydGljaXBhbnRfY291bnRgIGlzIGFsd2F5cyBgMGAgaGVyZTsgdGhlIHJld2FyZHMgY29udHJhY3QgdHJhY2tzCmJhbGFuY2VzLCBub3QgcGFydGljaXBhbnRzLiBgZXhwaXJlZF9lc3RpbWF0ZWAgY291bnRzIGN1cnJlbnRseS1zdGFsZQpub25jZSByZWNvcmRzLgAAAA1zdG9yYWdlX3N0YXRzAAAAAAAAAAAAAAEAAAPtAAAAAwAAAAYAAAAGAAAABg==","AAAAAAAAAClHZXQgdG90YWwgY2xhaW1lZCByZXdhcmRzIChnbG9iYWwgc3RhdHMpLgAAAAAAAA10b3RhbF9jbGFpbWVkAAAAAAAAAAAAAAEAAAAG","AAAAAAAAADZUcmFuc2ZlciBwb2ludHMgZnJvbSBvbmUgdXNlciB0byBhbm90aGVyIChhZG1pbiBvbmx5KS4AAAAAAA5hZG1pbl90cmFuc2ZlcgAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAABgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAACxDcmVkaXQgcG9pbnRzIHRvIGEgdXNlciBiYXNlZCBvbiB0aGVpciByYW5rLgAAAA5jcmVkaXRfYnlfcmFuawAAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAABHVzZXIAAAATAAAAAAAAAARyYW5rAAAABgAAAAAAAAALY2FtcGFpZ25faWQAAAAABgAAAAEAAAPpAAAABgAAAAM=","AAAAAAAAAENSZXR1cm5zIGFsbCBgKHNuYXBzaG90X2lkLCBsZWRnZXJfbnVtYmVyKWAgcGFpcnMgaW4gY3JlYXRpb24gb3JkZXIuAAAAAA5saXN0X3NuYXBzaG90cwAAAAAAAAAAAAEAAAPqAAAD7QAAAAIAAAAGAAAABg==","AAAAAAAAADxSZXR1cm5zIHRoZSBhY3RpdmUgc3RvcmFnZSBzY2hlbWEgdmVyc2lvbiBmb3IgdGhpcyBjb250cmFjdC4AAAAOc2NoZW1hX3ZlcnNpb24AAAAAAAAAAAABAAAABA==","AAAAAAAAADhTRVAtNDE6IFJldHVybnMgdGhlIG51bWJlciBvZiBkZWNpbWFscyB1c2VkIGZvciBkaXNwbGF5LgAAAA5zZXA0MV9kZWNpbWFscwAAAAAAAAAAAAEAAAAE","AAAAAAAAAFJTRVAtNDE6IFRyYW5zZmVyIGBhbW91bnRgIGZyb20gYGZyb21gIHRvIGB0b2AuClJlcXVpcmVzIGF1dGhvcml6YXRpb24gZnJvbSBgZnJvbWAuAAAAAAAOc2VwNDFfdHJhbnNmZXIAAAAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAGtSZXR1cm5zIHRoZSBjdXJyZW50bHkgdW5sb2NrZWQgYnV0IHVuY2xhaW1lZCB2ZXN0ZWQgYmFsYW5jZSBmb3IgYSB1c2VyCmFjcm9zcyBhbGwgYWN0aXZlIHZlc3Rpbmcgc2NoZWR1bGVzLgAAAAAOdmVzdGVkX2JhbGFuY2UAAAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAAAY=","AAAAAAAAAAAAAAAPaXNfcGF1c2VkX2NsYWltAAAAAAAAAAABAAAAAQ==","AAAAAAAAAF9HZXQgcmVkZW1wdGlvbiByYXRlIGNvbmZpZ3VyYXRpb24uClJldHVybnMgKGFzc2V0X2FkZHJlc3MsIHJhdGVfYnBzKSBvciBOb25lIGlmIG5vdCBjb25maWd1cmVkLgAAAAAPcmVkZW1wdGlvbl9yYXRlAAAAAAAAAAABAAAD6AAAA+0AAAACAAAAEwAAAAQ=","AAAAAAAAAIpSZXR1cm5zIHRoZSByZWZlcnJhbCBjb25maWd1cmF0aW9uIGFzIGAocmF0ZV9icHMsIHBlcl9yZWZlcnJlcl9jYXApYC4KRGVmYXVsdHMgdG8gYCgwLCAwKWAgd2hlbiByZWZlcnJhbCByZXdhcmRzIGhhdmUgbm90IGJlZW4gY29uZmlndXJlZC4AAAAAAA9yZWZlcnJhbF9jb25maWcAAAAAAAAAAAEAAAPtAAAAAgAAAAQAAAAG","AAAAAAAAADxSZW1vdmUgYSBjby1hZG1pbiBmcm9tIHRoZSBtdWx0aXNpZyBzaWduZXIgc2V0IChhZG1pbiBvbmx5KS4AAAAPcmVtb3ZlX2NvX2FkbWluAAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAIY29fYWRtaW4AAAATAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAD9TRVAtNDE6IFJldHVybnMgdGhlIGFsbG93YW5jZSBgb3duZXJgIGhhcyBncmFudGVkIHRvIGBzcGVuZGVyYC4AAAAAD3NlcDQxX2FsbG93YW5jZQAAAAACAAAAAAAAAAVvd25lcgAAAAAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAGNTRVAtNDE6IEJ1cm4gYGFtb3VudGAgZnJvbSBgZnJvbWAncyBiYWxhbmNlIHVzaW5nIGFsbG93YW5jZS4KUmVxdWlyZXMgYXV0aG9yaXphdGlvbiBmcm9tIGBzcGVuZGVyYC4AAAAAD3NlcDQxX2J1cm5fZnJvbQAAAAADAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAQaXNfcGF1c2VkX2NyZWRpdAAAAAAAAAABAAAAAQ==","AAAAAAAAAAAAAAAQaXNfcGF1c2VkX3JlZGVlbQAAAAAAAAABAAAAAQ==","AAAAAAAAAEdQYXVzZSBvciB1bnBhdXNlIHRoZSBgY2xhaW1gIC8gYGNsYWltX3Zlc3RlZGAgb3BlcmF0aW9ucyBpbmRlcGVuZGVudGx5LgAAAAAQc2V0X3BhdXNlZF9jbGFpbQAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAGcGF1c2VkAAAAAAABAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAF5XaXRoZHJhdyBhc3NldCB0b2tlbnMgZnJvbSByZWRlbXB0aW9uIHJlc2VydmUgKGFkbWluIG9ubHkpLgpVc2VkIHRvIHJlY2xhaW0gdW5yZWRlZW1lZCBhc3NldHMuAAAAAAAQd2l0aGRyYXdfcmVzZXJ2ZQAAAAMAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAFbm9uY2UAAAAAAAALAAAAAAAAAAZhbW91bnQAAAAAAAYAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAEZHZXQgdGhlIG51bWJlciBvZiBjcmVkaXQgY2FsbHMgbWFkZSBieSBgY2FsbGVyYCBpbiB0aGUgY3VycmVudCB3aW5kb3cuAAAAAAARY3JlZGl0X2NhbGxfY291bnQAAAAAAAABAAAAAAAAAAZjYWxsZXIAAAAAABMAAAABAAAABA==","AAAAAAAAAJdFbmFibGUgdG9rZW4gbW9kZSAoYWRtaW4gb25seSkuIE9uZS13YXk6IG9uY2UgZW5hYmxlZCwgY2Fubm90IGJlIGRpc2FibGVkLgpUaGlzIGVuYWJsZXMgU0VQLTQxLWNvbXBsaWFudCB0b2tlbiBpbnRlcmZhY2UgYWxvbmdzaWRlIGV4aXN0aW5nIHBvaW50cyBBUEkuAAAAABFlbmFibGVfdG9rZW5fbW9kZQAAAAAAAAQAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAEbmFtZQAAABEAAAAAAAAABnN5bWJvbAAAAAAAEQAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAADRHZXQgcG9pbnRzIHJld2FyZCBmb3IgYSBnaXZlbiByYW5rIHVuZGVyIGEgY2FtcGFpZ24uAAAAEWdldF90aWVyX2Zvcl9yYW5rAAAAAAAAAgAAAAAAAAAEcmFuawAAAAYAAAAAAAAAC2NhbXBhaWduX2lkAAAAAAYAAAABAAAABg==","AAAAAAAAALhSZW1vdmUgbXVsdGlzaWcgbm9uY2UgcmVjb3JkcyBvbGRlciB0aGFuIFtgTk9OQ0VfVFRMX0xFREdFUlNgXSwgdXAgdG8KYG1heF9lbnRyaWVzYCBwZXIgY2FsbC4gQ2FsbGFibGUgYnkgYW55b25lIHNpbmNlIGl0IG9ubHkgZGVsZXRlcwpzdGFsZSBkYXRhLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBwcnVuZWQuAAAAEXBydW5lX3VzZWRfbm9uY2VzAAAAAAAAAQAAAAAAAAALbWF4X2VudHJpZXMAAAAABAAAAAEAAAAE","AAAAAAAAAIFQYXVzZSBvciB1bnBhdXNlIHRoZSBgY3JlZGl0YCAvIGBiYXRjaF9jcmVkaXRgIC8gYGNyZWRpdF92ZXN0ZWRgIC8KYGNyZWRpdF9ieV9yYW5rYCBvcGVyYXRpb25zIGluZGVwZW5kZW50bHkgb2YgdGhlIGdsb2JhbCBwYXVzZS4AAAAAAAARc2V0X3BhdXNlZF9jcmVkaXQAAAAAAAACAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAABnBhdXNlZAAAAAAAAQAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAADZQYXVzZSBvciB1bnBhdXNlIHRoZSBgcmVkZWVtYCBvcGVyYXRpb24gaW5kZXBlbmRlbnRseS4AAAAAABFzZXRfcGF1c2VkX3JlZGVlbQAAAAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAGcGF1c2VkAAAAAAABAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAEBSZXR1cm5zIHRoZSBjb25maWd1cmVkIE0tb2YtTiBtdWx0aXNpZyB0aHJlc2hvbGQgKDAgPSBkaXNhYmxlZCkuAAAAEm11bHRpc2lnX3RocmVzaG9sZAAAAAAAAAAAAAEAAAAE","AAAAAAAAAxlQYXkgYSByZWZlcnJlciB0aGUgY29uZmlndXJlZCBib251cyBmb3IgYSByZWZlcmVlJ3MgcXVhbGlmeWluZyBhY3Rpb24KKGFkbWluIG9ubHkpLiBFbmZvcmNlcyB0aGUgYW50aS1hYnVzZSBpbnZhcmlhbnRzIG9uLWNoYWluOgoKLSAqKnNlbGYtcmVmZXJyYWwqKjogYHJlZmVycmVyID09IHJlZmVyZWVgIGlzIHJlamVjdGVkLgotICoqY2lyY3VsYXIqKjogcmVqZWN0ZWQgd2hlbiBgcmVmZXJyZXJgIHdhcyBpdHNlbGYgcHJldmlvdXNseSByZXdhcmRlZCBhcwphIHJlZmVyZWUgb2YgYHJlZmVyZWVgIChhbiBgQSDihpIgQmAgdGhlbiBgQiDihpIgQWAgY3ljbGUpLgotICoqdW5pcXVlbmVzcyAvIHN5YmlsIGdhdGUqKjogZWFjaCBgcmVmZXJlZWAgY2FuIHRyaWdnZXIgYXQgbW9zdCBvbmUKcmVmZXJyYWwgYm9udXMsIGV2ZXIg4oCUIG1ha2luZyB0aGUgcGF5b3V0IGlkZW1wb3RlbnQgYW5kIGFsbC1vci1ub3RoaW5nLgotICoqcGVyLXJlZmVycmVyIGNhcCoqOiB0aGUgcmVmZXJyZXIncyBjdW11bGF0aXZlIGJvbnVzIG1heSBub3QgZXhjZWVkIHRoZQpjb25maWd1cmVkIGNhcC4KCk9uIHN1Y2Nlc3MgdGhlIGJvbnVzIGlzIGNyZWRpdGVkIHRvIGByZWZlcnJlcmAncyBiYWxhbmNlIChlbWl0dGluZyB0aGUKc3RhbmRhcmQgYGNyZWRpdGAgZXZlbnQgc28gYmFsYW5jZSBpbmRleGVycyBzdGF5IGNvbnNpc3RlbnQpIGFuZCBhCmByZWZfYm9udXNgIGV2ZW50IGlzIHB1Ymxpc2hlZCBmb3IgYXR0cmlidXRpb24vaW5zdHJ1bWVudGF0aW9uLiBSZXR1cm5zCnRoZSBib251cyBhbW91bnQgY3JlZGl0ZWQuAAAAAAAAEnBheV9yZWZlcnJhbF9ib251cwAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAhyZWZlcnJlcgAAABMAAAAAAAAAB3JlZmVyZWUAAAAAEwAAAAAAAAARcXVhbGlmeWluZ19hbW91bnQAAAAAAAAGAAAAAQAAA+kAAAAGAAAAAw==","AAAAAAAAACdHZXQgY3VycmVudCByZWRlbXB0aW9uIHJlc2VydmUgYmFsYW5jZS4AAAAAEnJlZGVtcHRpb25fcmVzZXJ2ZQAAAAAAAAAAAAEAAAAG","AAAAAAAAAERSZXR1cm5zIG11bHRpcGxpZXIgaW4gYmFzaXMgcG9pbnRzIGZvciBjYW1wYWlnbiwgZGVmYXVsdHMgdG8gMTBfMDAwLgAAABNjYW1wYWlnbl9tdWx0aXBsaWVyAAAAAAEAAAAAAAAAC2NhbXBhaWduX2lkAAAAAAYAAAABAAAABA==","AAAAAAAAAHpDcmVkaXQgcG9pbnRzIHVzaW5nIGNhbXBhaWduIG11bHRpcGxpZXIuIFJvdW5kaW5nIHVzZXMgZmxvb3IgZGl2aXNpb246CmBhZGp1c3RlZCA9IGJhc2VfYW1vdW50ICogbXVsdGlwbGllcl9icHMgLyAxMF8wMDBgLgAAAAAAE2NyZWRpdF9mb3JfY2FtcGFpZ24AAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAtjYW1wYWlnbl9pZAAAAAAGAAAAAAAAAAtiYXNlX2Ftb3VudAAAAAAGAAAAAQAAA+kAAAAGAAAAAw==","AAAAAAAAAEZHZXQgbWF4aW11bSBhbW91bnQgYWxsb3dlZCBwZXIgc2luZ2xlIGNyZWRpdCBjYWxsICgwIG1lYW5zIHVubGltaXRlZCkuAAAAAAATbWF4X2NyZWRpdF9wZXJfY2FsbAAAAAAAAAAAAQAAAAY=","AAAAAAAAAGVTRVAtNDE6IFRyYW5zZmVyIGBhbW91bnRgIGZyb20gYGZyb21gIHRvIGB0b2AgdXNpbmcgYWxsb3dhbmNlLgpSZXF1aXJlcyBhdXRob3JpemF0aW9uIGZyb20gYHNwZW5kZXJgLgAAAAAAABNzZXA0MV90cmFuc2Zlcl9mcm9tAAAAAAQAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAEZnJvbQAAABMAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAMVTZXQgcmVkZW1wdGlvbiByYXRlIGZvciBwb2ludHMtdG8tYXNzZXQgY29udmVyc2lvbiAoYWRtaW4gb25seSkuCnJhdGVfYnBzOiBob3cgbWFueSB1bml0cyBvZiBhc3NldCBwZXIgMTAsMDAwIHBvaW50cyAoYmFzaXMgcG9pbnRzKS4KRXhhbXBsZTogcmF0ZV9icHMgPSAxMDAgbWVhbnMgMTAwLzEwLDAwMCA9IDAuMDEgYXNzZXQgcGVyIHBvaW50LgAAAAAAABNzZXRfcmVkZW1wdGlvbl9yYXRlAAAAAAQAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAFbm9uY2UAAAAAAAALAAAAAAAAAAVhc3NldAAAAAAAABMAAAAAAAAACHJhdGVfYnBzAAAABAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAU9Db25maWd1cmUgdGhlIG9uLWNoYWluIHJlZmVycmFsIHJld2FyZCBlbmdpbmUgKGFkbWluIG9ubHkpLgoKYHJhdGVfYnBzYCBpcyB0aGUgcmVmZXJyZXIgYm9udXMgYXMgYmFzaXMgcG9pbnRzIG9mIGEgcmVmZXJlZSdzCnF1YWxpZnlpbmcgYW1vdW50IChgYm9udXMgPSBxdWFsaWZ5aW5nX2Ftb3VudCAqIHJhdGVfYnBzIC8gMTBfMDAwYCkgYW5kCm11c3QgYmUgaW4gYDEuLj1NQVhfUkVGRVJSQUxfUkFURV9CUFNgLiBgcGVyX3JlZmVycmVyX2NhcGAgaXMgdGhlIG1heGltdW0KY3VtdWxhdGl2ZSBib251cyBhIHNpbmdsZSByZWZlcnJlciBtYXkgZWFybjsgYDBgIG1lYW5zIHVuY2FwcGVkLgAAAAATc2V0X3JlZmVycmFsX2NvbmZpZwAAAAADAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAACHJhdGVfYnBzAAAABAAAAAAAAAAQcGVyX3JlZmVycmVyX2NhcAAAAAYAAAABAAAD6QAAAAIAAAAD","AAAAAAAAADFDdW11bGF0aXZlIHJlZmVycmFsIGJvbnVzIGNyZWRpdGVkIHRvIGByZWZlcnJlcmAuAAAAAAAAFHJlZmVycmFsX2JvbnVzX3RvdGFsAAAAAQAAAAAAAAAIcmVmZXJyZXIAAAATAAAAAQAAAAY=","AAAAAAAAADVUaGUgcmVmZXJyZXIgdGhhdCB3YXMgcmV3YXJkZWQgZm9yIGByZWZlcmVlYCwgaWYgYW55LgAAAAAAABRyZXdhcmRlZF9yZWZlcnJlcl9vZgAAAAEAAAAAAAAAB3JlZmVyZWUAAAAAEwAAAAEAAAPoAAAAEw==","AAAAAAAAADhDYW5jZWwgYW4gaW4tZmxpZ2h0IGFkbWluIHRyYW5zZmVyIChjdXJyZW50IGFkbWluIG9ubHkpLgAAABVjYW5jZWxfYWRtaW5fdHJhbnNmZXIAAAAAAAABAAAAAAAAAA1jdXJyZW50X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAG9HZXQgdGhlIGN1cnJlbnQgcmF0ZSBsaW1pdCBjb25maWc6IGAobWF4X2NhbGxzLCB3aW5kb3dfbGVkZ2VycylgLgpSZXR1cm5zIGAoMCwgMClgIHdoZW4gbm8gbGltaXQgaXMgY29uZmlndXJlZC4AAAAAFWdldF9jcmVkaXRfcmF0ZV9saW1pdAAAAAAAAAAAAAABAAAD7QAAAAIAAAAEAAAABA==","AAAAAAAAADROdW1iZXIgb2YgcmVmZXJlZXMgYHJlZmVycmVyYCBoYXMgYmVlbiByZXdhcmRlZCBmb3IuAAAAFXJlZmVycmFsX3Jld2FyZF9jb3VudAAAAAAAAAEAAAAAAAAACHJlZmVycmVyAAAAEwAAAAEAAAAG","AAAAAAAAAJxTZXQgcGVyLWNhbGxlciBjcmVkaXQgcmF0ZSBsaW1pdCAoYWRtaW4gb25seSkuCmBtYXhfY2FsbHNgIGNyZWRpdHMgYWxsb3dlZCBwZXIgYHdpbmRvd19sZWRnZXJzYCBsZWRnZXIgd2luZG93LgpTZXQgYG1heF9jYWxscyA9IDBgIHRvIGRpc2FibGUgcmF0ZSBsaW1pdGluZy4AAAAVc2V0X2NyZWRpdF9yYXRlX2xpbWl0AAAAAAAAAwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltYXhfY2FsbHMAAAAAAAAEAAAAAAAAAA53aW5kb3dfbGVkZ2VycwAAAAAABAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAExBbGlhcyBmb3IgcmVkZW1wdGlvbl9yZXNlcnZlIOKAlCByZXR1cm5zIHRoZSBjdXJyZW50IHBheW91dCByZXNlcnZlIGJhbGFuY2UuAAAAFnBheW91dF9yZXNlcnZlX2JhbGFuY2UAAAAAAAAAAAABAAAACw==","AAAAAAAAAIxTZXQgdGhlIE0tb2YtTiBtdWx0aXNpZyB0aHJlc2hvbGQgZm9yIGNyaXRpY2FsIG9wZXJhdGlvbnMgKGFkbWluIG9ubHkpLgpgcmVxdWlyZWQgPSAwYCBkaXNhYmxlcyBtdWx0aXNpZyAobGVnYWN5IHNpbmdsZS1hZG1pbiBhdXRoIGFwcGxpZXMpLgAAABZzZXRfbXVsdGlzaWdfdGhyZXNob2xkAAAAAAACAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAACHJlcXVpcmVkAAAABAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAHtTZXQgY2FtcGFpZ24tc3BlY2lmaWMgcmV3YXJkIG11bHRpcGxpZXIgaW4gYmFzaXMgcG9pbnRzIChhZG1pbiBvbmx5KS4KRXhhbXBsZTogMTBfMDAwID0gMS4weCwgMTJfNTAwID0gMS4yNXgsIDVfMDAwID0gMC41eC4AAAAAF3NldF9jYW1wYWlnbl9tdWx0aXBsaWVyAAAAAAMAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAALY2FtcGFpZ25faWQAAAAABgAAAAAAAAAObXVsdGlwbGllcl9icHMAAAAAAAQAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAF5TZXQgbWF4aW11bSBhbW91bnQgYWxsb3dlZCBwZXIgc2luZ2xlIGNyZWRpdCBjYWxsIChhZG1pbiBvbmx5KS4KU2V0IHRvIDAgdG8gZGlzYWJsZSB0aGUgbGltaXQuAAAAAAAXc2V0X21heF9jcmVkaXRfcGVyX2NhbGwAAAAAAgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAptYXhfYW1vdW50AAAAAAAGAAAAAQAAA+kAAAACAAAAAw=="]),e),this.options=e,this.fromJSON={admin:this.txFromJSON,claim:this.txFromJSON,credit:this.txFromJSON,redeem:this.txFromJSON,balance:this.txFromJSON,migrate:this.txFromJSON,upgrade:this.txFromJSON,metadata:this.txFromJSON,snapshot:this.txFromJSON,is_paused:this.txFromJSON,set_tiers:this.txFromJSON,initialize:this.txFromJSON,sep41_burn:this.txFromJSON,sep41_name:this.txFromJSON,set_paused:this.txFromJSON,clear_tiers:this.txFromJSON,accept_admin:this.txFromJSON,add_co_admin:this.txFromJSON,batch_credit:this.txFromJSON,claim_vested:this.txFromJSON,fund_reserve:this.txFromJSON,get_snapshot:this.txFromJSON,sep41_symbol:this.txFromJSON,total_supply:this.txFromJSON,total_vested:this.txFromJSON,credit_vested:this.txFromJSON,is_token_mode:this.txFromJSON,pending_admin:this.txFromJSON,propose_admin:this.txFromJSON,sep41_approve:this.txFromJSON,sep41_balance:this.txFromJSON,storage_stats:this.txFromJSON,total_claimed:this.txFromJSON,admin_transfer:this.txFromJSON,credit_by_rank:this.txFromJSON,list_snapshots:this.txFromJSON,schema_version:this.txFromJSON,sep41_decimals:this.txFromJSON,sep41_transfer:this.txFromJSON,vested_balance:this.txFromJSON,is_paused_claim:this.txFromJSON,redemption_rate:this.txFromJSON,referral_config:this.txFromJSON,remove_co_admin:this.txFromJSON,sep41_allowance:this.txFromJSON,sep41_burn_from:this.txFromJSON,is_paused_credit:this.txFromJSON,is_paused_redeem:this.txFromJSON,set_paused_claim:this.txFromJSON,withdraw_reserve:this.txFromJSON,credit_call_count:this.txFromJSON,enable_token_mode:this.txFromJSON,get_tier_for_rank:this.txFromJSON,prune_used_nonces:this.txFromJSON,set_paused_credit:this.txFromJSON,set_paused_redeem:this.txFromJSON,multisig_threshold:this.txFromJSON,pay_referral_bonus:this.txFromJSON,redemption_reserve:this.txFromJSON,campaign_multiplier:this.txFromJSON,credit_for_campaign:this.txFromJSON,max_credit_per_call:this.txFromJSON,sep41_transfer_from:this.txFromJSON,set_redemption_rate:this.txFromJSON,set_referral_config:this.txFromJSON,referral_bonus_total:this.txFromJSON,rewarded_referrer_of:this.txFromJSON,cancel_admin_transfer:this.txFromJSON,get_credit_rate_limit:this.txFromJSON,referral_reward_count:this.txFromJSON,set_credit_rate_limit:this.txFromJSON,payout_reserve_balance:this.txFromJSON,set_multisig_threshold:this.txFromJSON,set_campaign_multiplier:this.txFromJSON,set_max_credit_per_call:this.txFromJSON}}static async deploy(e){return nt.Client.deploy(null,e)}};typeof window<"u"&&(window.Buffer=window.Buffer||sn.Buffer);class Ft extends nt.Client{constructor(e){super(new nt.Spec(["AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAFwAAAAAAAAAMVW5hdXRob3JpemVkAAAAZAAAAAAAAAART3V0c2lkZVRpbWVXaW5kb3cAAAAAAABlAAAAAAAAAApDYXBSZWFjaGVkAAAAAABmAAAAAAAAABBDYW1wYWlnbkluYWN0aXZlAAAAZwAAAAAAAAAOTm90SW5BbGxvd2xpc3QAAAAAAGgAAAAAAAAAFFVuc3VwcG9ydGVkTWlncmF0aW9uAAAAaQAAAAAAAAARSW52YWxpZEFkbWluTm9uY2UAAAAAAABqAAAAAAAAAA1JbnZhbGlkV2luZG93AAAAAAAAawAAAAAAAAAOTm9QZW5kaW5nQWRtaW4AAAAAAGwAAAAAAAAADFNlbGZSZWZlcnJhbAAAAG0AAAAAAAAAFVJlZmVycmVyTm90UmVnaXN0ZXJlZAAAAAAAAG4AAABGVGhlIGNhbXBhaWduJ3MgcHJpdmFjeSBtb2RlIGRvZXMgbm90IG1hdGNoIHRoZSByZWdpc3RyYXRpb24gcGF0aCB1c2VkLgAAAAAAEkludmFsaWRQcml2YWN5TW9kZQAAAAAAbwAAACNUaGUgWksgcHJvb2YgaXMgZW1wdHkgb3IgbWFsZm9ybWVkLgAAAAAMSW52YWxpZFByb29mAAAAcAAAAEhUaGUgbnVsbGlmaWVyIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBmb3IgYSByZWdpc3RyYXRpb24gaW4gdGhpcyBjYW1wYWlnbi4AAAAUTnVsbGlmaWVyQWxyZWFkeVVzZWQAAABxAAAAAAAAABJJbnZpdGVDb2RlUmVxdWlyZWQAAAAAAHIAAAAAAAAAEUludmFsaWRJbnZpdGVDb2RlAAAAAAAAcwAAAAAAAAARSW52aXRlQWxyZWFkeVVzZWQAAAAAAAB0AAAAAAAAAA5JbnZpdGVOb3RGb3VuZAAAAAAAdQAAAAAAAAAQSW52YWxpZFRocmVzaG9sZAAAAHYAAAAAAAAAFkluc3VmZmljaWVudFNpZ25hdHVyZXMAAAAAAHcAAAAAAAAAC05vbmNlUmV1c2VkAAAAAHgAAAAAAAAAD0R1cGxpY2F0ZVNpZ25lcgAAAAB5AAAAAAAAAA1Vbmtub3duU2lnbmVyAAAAAAAAeg==","AAAAAwAAAAAAAAAAAAAAC1ByaXZhY3lNb2RlAAAAAAMAAAApT3BlbiByZWdpc3RyYXRpb24g4oCUIG5vIHByb29mcyByZXF1aXJlZC4AAAAAAAAETm9uZQAAAAAAAAA4TWVya2xlIGFsbG93bGlzdCDigJQgc3RhbmRhcmQgbGVhZiArIHByb29mIHJlZ2lzdHJhdGlvbi4AAAAGTWVya2xlAAAAAAABAAAANFpLIHJlZ2lzdHJhdGlvbiDigJQgcmVxdWlyZXMgYSB6ZXJvLWtub3dsZWRnZSBwcm9vZi4AAAACWmsAAAAAAAI=","AAAAAgAAAAAAAAAAAAAADEFjdGl2aXR5S2luZAAAAAMAAAAAAAAAAAAAAAhSZWdpc3RlcgAAAAAAAAAAAAAABkNyZWRpdAAAAAAAAAAAAAAAAAAFQ2xhaW0AAAA=","AAAAAQAAAAAAAAAAAAAADUFjdGl2aXR5RW50cnkAAAAAAAAEAAAAAAAAAAVhY3RvcgAAAAAAABMAAAAAAAAABmFtb3VudAAAAAAD6AAAAAYAAAAAAAAABGtpbmQAAAfQAAAADEFjdGl2aXR5S2luZAAAAAAAAAAGbGVkZ2VyAAAAAAAE","AAAAAwAAAAAAAAAAAAAADlVuaXF1ZW5lc3NNb2RlAAAAAAACAAAAL05vIHVuaXF1ZW5lc3MgZW5mb3JjZW1lbnQg4oCUIGN1cnJlbnQgYmVoYXZpb3IuAAAAAAROb25lAAAAAAAAAD1OdWxsaWZpZXItYmFzZWQgdW5pcXVlbmVzcyDigJQgb25lIGVudHJ5IHBlciB1bmlxdWUgaWRlbnRpdHkuAAAAAAAACU51bGxpZmllcgAAAAAAAAE=","AAAAAAAAACFSZXR1cm4gdGhlIGN1cnJlbnQgYWRtaW4gYWRkcmVzcy4AAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAALZNaWdyYXRpb24gZW50cnlwb2ludCBmb3IgZnV0dXJlIHNjaGVtYSB0cmFuc2l0aW9ucy4KCkZvciBub3csIHZlcnNpb24gYDFgIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBzY2hlbWEgYW5kIHRoaXMgZnVuY3Rpb24Kc2VydmVzIGFzIGFuIGlkZW1wb3RlbnQgbWlncmF0aW9uIGhvb2sgZm9yIHVwZ3JhZGUgd29ya2Zsb3dzLgAAAAAAB21pZ3JhdGUAAAAAAgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAA50YXJnZXRfdmVyc2lvbgAAAAAABAAAAAEAAAPpAAAABAAAAAM=","AAAAAAAAAlxSZXBsYWNlIHRoZSBjb250cmFjdCBXQVNNIGluLXBsYWNlIHdpdGhvdXQgcmVzZXR0aW5nIHBhcnRpY2lwYW50IHN0YXRlLgoKQ2FsbHMgYGNvbnRyYWN0X3VwZGF0ZV9jdXJyZW50X2NvbnRyYWN0X3dhc21gIHdpdGggdGhlIHN1cHBsaWVkIGhhc2ggb2YKdGhlIG5ldyBXQVNNIGJsb2IgKG11c3QgYWxyZWFkeSBiZSB1cGxvYWRlZCB2aWEKYEVudjo6ZGVwbG95ZXIoKS51cGxvYWRfY29udHJhY3Rfd2FzbWApLiAgUGFydGljaXBhbnQgcmVjb3JkcyBpbgpwZXJzaXN0ZW50IHN0b3JhZ2Ugc3Vydml2ZSBiZWNhdXNlIFNvcm9iYW4gV0FTTS1vbmx5IHVwZ3JhZGVzIG5ldmVyCnRvdWNoIHN0b3JhZ2UuICBSZXF1aXJlcyBhZG1pbiBhdXRoIGFuZCBhIHZhbGlkIG5vbmNlIHNvIHVwZ3JhZGVzIGFyZQpyZXBsYXktc2FmZS4KClR5cGljYWwgd29ya2Zsb3cgKGlzc3VlICM1MTgpOgoxLiBVcGxvYWQgbmV3IFdBU00g4oaSIG9idGFpbiBgbmV3X3dhc21faGFzaGAuCjIuIENhbGwgYHVwZ3JhZGUoYWRtaW4sIG5vbmNlLCBuZXdfd2FzbV9oYXNoKWAuCjMuIElmIHN0b3JhZ2UgbGF5b3V0IGNoYW5nZWQsIGNhbGwgYG1pZ3JhdGUoYWRtaW4sIHRhcmdldF92ZXJzaW9uKWAuAAAAB3VwZ3JhZGUAAAAAAwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAVub25jZQAAAAAAAAYAAAAAAAAADW5ld193YXNtX2hhc2gAAAAAAAPuAAAAIAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAABABSZWdpc3RlciBhIHBhcnRpY2lwYW50LgoKYGxlYWZgICDigJMgdGhlIDMyLWJ5dGUgbGVhZiB2YWx1ZSBjb21taXR0ZWQgaW4gdGhlIE1lcmtsZSB0cmVlIGZvciB0aGlzCnBhcnRpY2lwYW50LiAgTXVzdCBiZSBgc2hhMjU2KGFkZHJlc3NfeGRyX2J5dGVzKWAgZm9yIHRoZQpjYWxsZXIncyBhZGRyZXNzLCBjb21wdXRlZCBieSBvZmYtY2hhaW4gdG9vbGluZy4KCmBwcm9vZmAg4oCTIG9yZGVyZWQgbGlzdCBvZiBzaWJsaW5nIGhhc2hlcyBmb3IgdGhlIE1lcmtsZSBwYXRoIGZyb20KYGxlYWZgIHRvIHRoZSBzdG9yZWQgcm9vdC4gIFBhc3MgYW4gZW1wdHkgYFZlY2Agd2hlbiBubyByb290CmlzIGNvbmZpZ3VyZWQuCgpgaW52aXRlX2NvZGVgIOKAkyByZXF1aXJlZCB3aGVuIGludml0ZS1vbmx5IG1vZGUgaXMgZW5hYmxlZCAoc2VlCltgU2VsZjo6c2V0X2ludml0ZV9vbmx5YF0pOyBgc2hhMjU2KGludml0ZV9jb2RlKWAgbXVzdCBtYXRjaAphIGhhc2ggaXNzdWVkIHZpYSBbYFNlbGY6Omlzc3VlX2ludml0ZWBdIHRoYXQgaGFzIG5vdCB5ZXQKYmVlbiByZWRlZW1lZC4gUGFzcyBgTm9uZWAgd2hlbiBpbnZpdGUtb25seSBtb2RlIGlzIG9mZi4KCmByZWZlcnJlcmAg4oCTIG9wdGlvbmFsIGFkZHJlc3Mgb2YgYW4gYWxyZWFkeS1yZWdpc3RlcmVkIHBhcnRpY2lwYW50IHdobwpyZWZlcnJlZCB0aGlzIHJlZ2lzdHJhbnQgKGlzc3VlICM0NTUpLiBXaGVuIHN1cHBsaWVkLCB0aGUKY29udHJhY3QgcmVjb3JkcyBgKHJlZmVyZWUgLT4gcmVmZXJyZXIpYCwgaW5jcmVtZW50cyB0aGUKcmVmZXJyZXIncyB0YWxseSwgYW5kIGVtaXRzIGEgYHJlZmVycmVkYCBldmVudCBzbyB0aGUgYmFja2VuZAppbmRleGVyIGNhbiBjcmVkaXQgdGhlIHJlZmVycmFsIGJvbnVzIHRydXN0bGVzc2x5LiBBIHJlZmVycmVyCmNhbm5vdCByZWZlciB0aGVtc2VsdmVzIChgRXJyb3I6OlNlbGZSZWZlcnJhbGApIGFuZCBtdXN0CmFscmVhZHkgYmUgcmVnaXN0ZXJlZCAoYEVycm9yOjpSZWZlcnJlck5vdFJlZ2lzdGVyZWRgKS4KUmVmZXJyAAAACHJlZ2lzdGVyAAAABQAAAAAAAAALcGFydGljaXBhbnQAAAAAEwAAAAAAAAAEbGVhZgAAA+4AAAAgAAAAAAAAAAVwcm9vZgAAAAAAA+oAAAPuAAAAIAAAAAAAAAALaW52aXRlX2NvZGUAAAAD6AAAAA4AAAAAAAAACHJlZmVycmVyAAAD6AAAABMAAAABAAAD6QAAAAEAAAAD","AAAAAAAAABxDaGVjayBpZiBjYW1wYWlnbiBpcyBhY3RpdmUuAAAACWlzX2FjdGl2ZQAAAAAAAAAAAAABAAAAAQ==","AAAAAAAAAJ1EZXJlZ2lzdGVyIGEgcGFydGljaXBhbnQuCgpDaGVja3MgbGl2ZW5lc3Mvd2luZG93OiBpZiBlbmRfdGltZSBpcyB1NjQ6Ok1BWCwgY2hlY2tzIGlmIGNhbXBhaWduIGlzIGFjdGl2ZTsKb3RoZXJ3aXNlLCBjaGVja3MgaWYgY3VycmVudCB0aW1lc3RhbXAgPD0gZW5kX3RpbWUuAAAAAAAACmRlcmVnaXN0ZXIAAAAAAAEAAAAAAAAAC3BhcnRpY2lwYW50AAAAABMAAAABAAAD6QAAAAEAAAAD","AAAAAAAAAJxHZXQgdGhlIGNvbmZpZ3VyZWQgYChzdGFydCwgZW5kKWAgcmVnaXN0cmF0aW9uIHdpbmRvdy4KCkRlZmF1bHRzIHRvIGAoMCwgdTY0OjpNQVgpYCB3aGVuIG5vIHdpbmRvdyBoYXMgYmVlbiBzZXQsIHdoaWNoCmNhbGxlcnMgY2FuIGludGVycHJldCBhcyAidW5ib3VuZGVkIi4AAAAKZ2V0X3dpbmRvdwAAAAAAAAAAAAEAAAPtAAAAAgAAAAYAAAAG","AAAAAAAAACtJbml0aWFsaXplIGNhbXBhaWduIGNvbnRyYWN0IHdpdGggYW4gYWRtaW4uAAAAAAppbml0aWFsaXplAAAAAAABAAAAAAAAAAVhZG1pbgAAAAAAABMAAAABAAAD6QAAAAIAAAAD","AAAAAAAAACZTZXQgY2FtcGFpZ24gYWN0aXZlIGZsYWcgKGFkbWluIG9ubHkpLgAAAAAACnNldF9hY3RpdmUAAAAAAAMAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAFbm9uY2UAAAAAAAAGAAAAAAAAAAZhY3RpdmUAAAAAAAEAAAABAAAD6QAAAAIAAAAD","AAAAAAAAANlTZXQgcmVnaXN0cmF0aW9uIHRpbWUgd2luZG93IChhZG1pbiBvbmx5KS4KCkJvdGggYm91bmRzIGFyZSBpbmNsdXNpdmU6IGByZWdpc3RlcmAgc3VjY2VlZHMgd2hlbgpgc3RhcnQgPD0gbm93IDw9IGVuZGAuIFVzZSBgMGAgYW5kIGB1NjQ6Ok1BWGAgZm9yIGFuIGVmZmVjdGl2ZWx5Cm9wZW4gd2luZG93LiBSZWplY3RzIGBzdGFydCA+IGVuZGAgd2l0aCBgSW52YWxpZFdpbmRvd2AuAAAAAAAACnNldF93aW5kb3cAAAAAAAQAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAFbm9uY2UAAAAAAAAGAAAAAAAAAAVzdGFydAAAAAAAAAYAAAAAAAAAA2VuZAAAAAAGAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAADtHZXQgdGhlIG5leHQgcmVxdWlyZWQgYWRtaW4gbm9uY2UgZm9yIHNlbnNpdGl2ZSBvcGVyYXRpb25zLgAAAAALYWRtaW5fbm9uY2UAAAAAAAAAAAEAAAAG","AAAAAAAAADBHZXQgbWF4aW11bSBwYXJ0aWNpcGFudCBjYXAgKDAgbWVhbnMgdW5saW1pdGVkKS4AAAALZ2V0X21heF9jYXAAAAAAAAAAAAEAAAAG","AAAAAAAAAEBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGludml0ZSBoYXNoIGhhcyBhbHJlYWR5IGJlZW4gcmVkZWVtZWQuAAAAC2ludml0ZV91c2VkAAAAAAEAAAAAAAAAC2ludml0ZV9oYXNoAAAAA+4AAAAgAAAAAQAAAAE=","AAAAAAAAAHZSZXR1cm4gdGhlIHJlZmVycmVyIHJlY29yZGVkIGZvciBgcGFydGljaXBhbnRgIGF0IHJlZ2lzdHJhdGlvbiwgb3IKYE5vbmVgIGlmIHRoZXkgcmVnaXN0ZXJlZCB3aXRob3V0IG9uZSAoaXNzdWUgIzQ1NSkuAAAAAAALcmVmZXJyZXJfb2YAAAAAAQAAAAAAAAALcGFydGljaXBhbnQAAAAAEwAAAAEAAAPoAAAAEw==","AAAAAAAAAEFTZXQgbWF4aW11bSBwYXJ0aWNpcGFudCBjYXAgKGFkbWluIG9ubHkpLiBTZXQgdG8gMCBmb3IgdW5saW1pdGVkLgAAAAAAAAtzZXRfbWF4X2NhcAAAAAADAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAABW5vbmNlAAAAAAAABgAAAAAAAAAHbWF4X2NhcAAAAAAGAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAJFBY2NlcHQgYWRtaW4gcm9sZS4gQ2FsbGVyIE1VU1QgYmUgdGhlIGFkZHJlc3MgdGhhdCB0aGUgY3VycmVudCBhZG1pbgpwcmV2aW91c2x5IHByb3Bvc2VkIHZpYSBgcHJvcG9zZV9hZG1pbmAuIENsZWFycyB0aGUgcGVuZGluZyBzbG90IG9uCnN1Y2Nlc3MuAAAAAAAADGFjY2VwdF9hZG1pbgAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAEpSZXR1cm4gdGhlIGFjdGl2aXR5IGxvZyByaW5nIGJ1ZmZlciBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyIChvbGRlc3QgZmlyc3QpLgAAAAAADGFjdGl2aXR5X2xvZwAAAAAAAAABAAAD6gAAB9AAAAANQWN0aXZpdHlFbnRyeQAAAA==","AAAAAAAAAIhSZWdpc3RlciBhIGNvLWFkbWluJ3MgZWQyNTUxOSBwdWJsaWMga2V5IGZvciBtdWx0aXNpZyB2ZXJpZmljYXRpb24KKGFkbWluIG9ubHkpLiBPdmVyd3JpdGVzIHRoZSBrZXkgaWYgYGNvX2FkbWluYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuAAAADGFkZF9jb19hZG1pbgAAAAQAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAFbm9uY2UAAAAAAAAGAAAAAAAAAAhjb19hZG1pbgAAABMAAAAAAAAABnB1YmtleQAAAAAD7gAAACAAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAJZJc3N1ZSBhbiBpbnZpdGUgYnkgc3RvcmluZyBpdHMgaGFzaCAoYWRtaW4gb25seSkuIFRoZSBoYXNoIHNob3VsZCBiZQpgc2hhMjU2KGludml0ZV9jb2RlKWAsIGNvbXB1dGVkIG9mZi1jaGFpbjsgdGhlIHJhdyBjb2RlIGlzIG5ldmVyCnN0b3JlZCBvbi1jaGFpbi4AAAAAAAxpc3N1ZV9pbnZpdGUAAAADAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAABW5vbmNlAAAAAAAABgAAAAAAAAALaW52aXRlX2hhc2gAAAAD7gAAACAAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAEdSZXR1cm4gdGhlIHBlbmRpbmcgYWRtaW4gYWRkcmVzcyBwcm9wb3NlZCBieSB0aGUgY3VycmVudCBhZG1pbiwgaWYgYW55LgAAAAANcGVuZGluZ19hZG1pbgAAAAAAAAAAAAABAAAD6AAAABM=","AAAAAAAAAHxQcm9wb3NlIGEgbmV3IGFkbWluIChjdXJyZW50IGFkbWluIG9ubHkpLiBUaGUgdHJhbnNmZXIgZG9lcyBub3QgdGFrZQplZmZlY3QgdW50aWwgYGFjY2VwdF9hZG1pbmAgaXMgY2FsbGVkIGJ5IHRoZSBuZXcgYWRtaW4uAAAADXByb3Bvc2VfYWRtaW4AAAAAAAACAAAAAAAAAA1jdXJyZW50X2FkbWluAAAAAAAAEwAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAC9SZXZva2UgYSBwcmV2aW91c2x5IGlzc3VlZCBpbnZpdGUgKGFkbWluIG9ubHkpLgAAAAANcmV2b2tlX2ludml0ZQAAAAAAAAMAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAFbm9uY2UAAAAAAAAGAAAAAAAAAAtpbnZpdGVfaGFzaAAAAAPuAAAAIAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAOdTdG9yYWdlIHN0YXRzIGZvciBtb25pdG9yaW5nOiBgKHBhcnRpY2lwYW50X2NvdW50LCBub25jZV9jb3VudCwgZXhwaXJlZF9lc3RpbWF0ZSlgLgpgZXhwaXJlZF9lc3RpbWF0ZWAgY291bnRzIGBQQVJUSUNJUEFOVF9SRUdJU1RSWWAgZW50cmllcyB3aG9zZSBwZXJzaXN0ZW50CnJlY29yZCBpcyBhbHJlYWR5IGdvbmUgKGRlcmVnaXN0ZXJlZCBvciBUVEwtYXJjaGl2ZWQpIGFuZCBhd2FpdGluZyBwcnVuZS4AAAAADXN0b3JhZ2Vfc3RhdHMAAAAAAAAAAAAAAQAAA+0AAAADAAAABgAAAAYAAAAG","AAAAAAAAADlSZXR1cm5zIHdoZXRoZXIgaW52aXRlLW9ubHkgcmVnaXN0cmF0aW9uIG1vZGUgaXMgZW5hYmxlZC4AAAAAAAAOaXNfaW52aXRlX29ubHkAAAAAAAAAAAABAAAAAQ==","AAAAAAAAAGpDaGVjayBpZiBhIHBhcnRpY2lwYW50IGlzIHJlZ2lzdGVyZWQuICgjMjgwKSBSZWFkcyBmcm9tCnBlcnNpc3RlbnQgc3RvcmFnZSB3aGVyZSBwYXJ0aWNpcGFudCByZWNvcmRzIGxpdmUuAAAAAAAOaXNfcGFydGljaXBhbnQAAAAAAAEAAAAAAAAAC3BhcnRpY2lwYW50AAAAABMAAAABAAAAAQ==","AAAAAAAAAJ9SZXR1cm4gaG93IG1hbnkgcGFydGljaXBhbnRzIHJlZ2lzdGVyZWQgd2l0aCBgcmVmZXJyZXJgIGFzIHRoZWlyCm9uLWNoYWluIHJlZmVycmVyIChpc3N1ZSAjNDU1KS4gRGVmYXVsdHMgdG8gYDBgIGZvciBhbiBhZGRyZXNzIHRoYXQKaGFzIG5ldmVyIHJlZmVycmVkIGFueW9uZS4AAAAADnJlZmVycmFsX2NvdW50AAAAAAABAAAAAAAAAAhyZWZlcnJlcgAAABMAAAABAAAABg==","AAAAAAAAADxSZXR1cm5zIHRoZSBhY3RpdmUgc3RvcmFnZSBzY2hlbWEgdmVyc2lvbiBmb3IgdGhpcyBjb250cmFjdC4AAAAOc2NoZW1hX3ZlcnNpb24AAAAAAAAAAAABAAAABA==","AAAAAAAAAEtSZXR1cm4gdGhlIGN1cnJlbnQgTWVya2xlIHJvb3QsIG9yIGBOb25lYCB3aGVuIG9wZW4gcmVnaXN0cmF0aW9uIGlzIGFjdGl2ZS4AAAAAD2dldF9tZXJrbGVfcm9vdAAAAAAAAAAAAQAAA+gAAAPuAAAAIA==","AAAAAAAAAKhSZWdpc3RlciBhIHBhcnRpY2lwYW50IHdpdGggdW5pcXVlbmVzcyBwcm9vZiAoWksgdW5pcXVlIHJlZ2lzdHJhdGlvbikuCgpBbGlhcyBmb3IgYHJlZ2lzdGVyX3ByaXZhdGVgIHRoYXQgZW1waGFzaXplcyB0aGUgdW5pcXVlbmVzcyBndWFyYW50ZWUKcHJvdmlkZWQgYnkgdGhlIG51bGxpZmllci4AAAAPcmVnaXN0ZXJfdW5pcXVlAAAAAAQAAAAAAAAAC3BhcnRpY2lwYW50AAAAABMAAAAAAAAACW51bGxpZmllcgAAAAAAA+4AAAAgAAAAAAAAAAVwcm9vZgAAAAAAA+oAAAPuAAAAIAAAAAAAAAAIcmVmZXJyZXIAAAPoAAAAEwAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAADxSZW1vdmUgYSBjby1hZG1pbiBmcm9tIHRoZSBtdWx0aXNpZyBzaWduZXIgc2V0IChhZG1pbiBvbmx5KS4AAAAPcmVtb3ZlX2NvX2FkbWluAAAAAAMAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAFbm9uY2UAAAAAAAAGAAAAAAAAAAhjb19hZG1pbgAAABMAAAABAAAD6QAAAAIAAAAD","AAAAAAAAADJUb2dnbGUgaW52aXRlLW9ubHkgcmVnaXN0cmF0aW9uIG1vZGUgKGFkbWluIG9ubHkpLgAAAAAAD3NldF9pbnZpdGVfb25seQAAAAADAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAABW5vbmNlAAAAAAAABgAAAAAAAAAHZW5hYmxlZAAAAAABAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAgJTZXQgdGhlIE1lcmtsZSByb290IGZvciBhbGxvd2xpc3QtZ2F0ZWQgcmVnaXN0cmF0aW9uLgoKT25jZSBzZXQsIGV2ZXJ5IGByZWdpc3RlcmAgY2FsbCBtdXN0IHN1cHBseSBhIHZhbGlkIGAobGVhZiwgcHJvb2YpYC4KUmVtb3ZlIHRoZSByb290IGJ5IGNhbGxpbmcgdGhpcyBhZ2FpbiB3aXRoIGEgcm9vdCBvZiBhbGwgemVyb3MgdG8KcmV2ZXJ0IHRvIG9wZW4gcmVnaXN0cmF0aW9uLgoKVGhpcyBpcyBhIGNyaXRpY2FsIG9wZXJhdGlvbjogd2hlbiBhIG11bHRpc2lnIHRocmVzaG9sZCBpcyBjb25maWd1cmVkCihzZWUgW2BTZWxmOjpzZXRfbXVsdGlzaWdfdGhyZXNob2xkYF0pLCBgc2lnbmF0dXJlc2AgbXVzdCBjb250YWluIGF0CmxlYXN0IGByZXF1aXJlZGAgdmFsaWQgY28tYWRtaW4gc2lnbmF0dXJlcyBvdmVyCmAob3AsIG5vbmNlLCBzaGEyNTYocm9vdCkpYDsgb3RoZXJ3aXNlIHBhc3MgYW4gZW1wdHkgYFZlY2AgYW5kIHRoZQpsZWdhY3kgc2luZ2xlLWFkbWluIG5vbmNlIGNoZWNrIGFwcGxpZXMuAAAAAAAPc2V0X21lcmtsZV9yb290AAAAAAQAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAFbm9uY2UAAAAAAAAGAAAAAAAAAARyb290AAAD7gAAACAAAAAAAAAACnNpZ25hdHVyZXMAAAAAA+oAAAPtAAAAAgAAABMAAAPuAAAAQAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAHtEZXJlZ2lzdGVyIGEgcGFydGljaXBhbnQgYnkgdGhlIGFkbWluLgoKQnlwYXNzZXMgdGltZSB3aW5kb3cgYW5kIGxpdmVuZXNzIGNoZWNrcy4gUmVxdWlyZXMgYWRtaW4gYXV0aCBhbmQgbm9uY2UgdmFsaWRhdGlvbi4AAAAAEGFkbWluX2RlcmVnaXN0ZXIAAAADAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAABW5vbmNlAAAAAAAABgAAAAAAAAALcGFydGljaXBhbnQAAAAAEwAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAFJHZXQgdGhlIGN1cnJlbnQgcHJpdmFjeSBtb2RlLgpEZWZhdWx0cyB0byBgUHJpdmFjeU1vZGU6Ok5vbmVgIChvcGVuKSB3aGVuIG5vdCBzZXQuAAAAAAAQZ2V0X3ByaXZhY3lfbW9kZQAAAAAAAAABAAAH0AAAAAtQcml2YWN5TW9kZQA=","AAAAAAAAAQNSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBjdXJyZW50IGxlZGdlciB0aW1lc3RhbXAgaXMgd2l0aGluCmBbc3RhcnQsIGVuZF1gIG9mIHRoZSBjb25maWd1cmVkIHdpbmRvdy4KCk9mZi1jaGFpbiBjYWxsZXJzIGFuZCBkZXBlbmRlbnQgY29udHJhY3RzIChlLmcuIHJld2FyZHMgbG9naWMpCmNhbiB1c2UgdGhpcyB2aWV3IHRvIGdhdGUgb3BlcmF0aW9ucyBvbiBjYW1wYWlnbiBsaXZlbmVzcyB3aXRob3V0CmR1cGxpY2F0aW5nIHRoZSB3aW5kb3cgY2hlY2suAAAAABBpc193aXRoaW5fd2luZG93AAAAAAAAAAEAAAAB","AAAAAAAAAXVSZWdpc3RlciBhIHBhcnRpY2lwYW50IHVzaW5nIGEgWksgcHJvb2YgKHByaXZhdGUgcmVnaXN0cmF0aW9uKS4KCk9ubHkgY2FsbGFibGUgd2hlbiB0aGUgY2FtcGFpZ24ncyBwcml2YWN5IG1vZGUgaXMgYFprYC4KVGhlIGBwcm9vZmAgZmllbGQgY2FycmllcyB0aGUgWksgcHJvb2YgYnl0ZXM7IHRoZSBjb250cmFjdCB2ZXJpZmllcwp0aGF0IHRoZSBwcm9vZiBpcyBub24tZW1wdHkgYXMgYSBiYXNpYyBzYW5pdHkgY2hlY2suIEZ1bGwgb24tY2hhaW4KdmVyaWZpY2F0aW9uIGlzIG91dCBvZiBzY29wZSAoc2VlIE5FVy0wMDEvMDAyKS4KClJldHVybnMgYHRydWVgIG9uIGZpcnN0IHJlZ2lzdHJhdGlvbiwgYGZhbHNlYCBpZiBhbHJlYWR5IHJlZ2lzdGVyZWQuAAAAAAAAEHJlZ2lzdGVyX3ByaXZhdGUAAAAEAAAAAAAAAAtwYXJ0aWNpcGFudAAAAAATAAAAAAAAAAludWxsaWZpZXIAAAAAAAPuAAAAIAAAAAAAAAAFcHJvb2YAAAAAAAPqAAAD7gAAACAAAAAAAAAACHJlZmVycmVyAAAD6AAAABMAAAABAAAD6QAAAAEAAAAD","AAAAAAAAAY9TZXQgdGhlIHByaXZhY3kgbW9kZSBmb3IgdGhpcyBjYW1wYWlnbiAoYWRtaW4gb25seSkuCgpDb250cm9scyB3aGljaCByZWdpc3RyYXRpb24gcGF0aCBpcyB1c2VkOgotIGBOb25lYDogb3BlbiByZWdpc3RyYXRpb24sIG5vIHByb29mcyByZXF1aXJlZC4KLSBgTWVya2xlYDogc3RhbmRhcmQgTWVya2xlIGFsbG93bGlzdCByZWdpc3RyYXRpb24uCi0gYFprYDogemVyby1rbm93bGVkZ2UgcHJvb2YgcmVnaXN0cmF0aW9uIChyZXF1aXJlcyBgcmVnaXN0ZXJfcHJpdmF0ZWApLgoKYGZhbGxiYWNrX2FsbG93ZWRgOiB3aGVuIHRydWUgYW5kIHRoZSB1c2VyJ3MgYnJvd3NlciBjYW5ub3QgcHJvdmUgaW4gWksKbW9kZSwgdGhlIGZyb250ZW5kIG1heSBmYWxsIGJhY2sgdG8gTWVya2xlIHJlZ2lzdHJhdGlvbi4AAAAAEHNldF9wcml2YWN5X21vZGUAAAAEAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAABW5vbmNlAAAAAAAABgAAAAAAAAAEbW9kZQAAB9AAAAALUHJpdmFjeU1vZGUAAAAAAAAAABBmYWxsYmFja19hbGxvd2VkAAAAAQAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAALhSZW1vdmUgbXVsdGlzaWcgbm9uY2UgcmVjb3JkcyBvbGRlciB0aGFuIFtgTk9OQ0VfVFRMX0xFREdFUlNgXSwgdXAgdG8KYG1heF9lbnRyaWVzYCBwZXIgY2FsbC4gQ2FsbGFibGUgYnkgYW55b25lIHNpbmNlIGl0IG9ubHkgZGVsZXRlcwpzdGFsZSBkYXRhLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBwcnVuZWQuAAAAEXBydW5lX3VzZWRfbm9uY2VzAAAAAAAAAQAAAAAAAAALbWF4X2VudHJpZXMAAAAABAAAAAEAAAAE","AAAAAAAAAEBSZXR1cm5zIHRoZSBjb25maWd1cmVkIE0tb2YtTiBtdWx0aXNpZyB0aHJlc2hvbGQgKDAgPSBkaXNhYmxlZCkuAAAAEm11bHRpc2lnX3RocmVzaG9sZAAAAAAAAAAAAAEAAAAE","AAAAAAAAAFFHZXQgdGhlIGN1cnJlbnQgdW5pcXVlbmVzcyBtb2RlLgpEZWZhdWx0cyB0byBgVW5pcXVlbmVzc01vZGU6Ok5vbmVgIHdoZW4gbm90IHNldC4AAAAAAAATZ2V0X3VuaXF1ZW5lc3NfbW9kZQAAAAAAAAAAAQAAB9AAAAAOVW5pcXVlbmVzc01vZGUAAA==","AAAAAAAAAEpDaGVjayB3aGV0aGVyIGZhbGxiYWNrIHRvIE1lcmtsZSByZWdpc3RyYXRpb24gaXMgYWxsb3dlZCBmb3IgWksgY2FtcGFpZ25zLgAAAAAAE2lzX2ZhbGxiYWNrX2FsbG93ZWQAAAAAAAAAAAEAAAAB","AAAAAAAAAStTZXQgdGhlIHVuaXF1ZW5lc3MgbW9kZSBmb3IgdGhpcyBjYW1wYWlnbiAoYWRtaW4gb25seSkuCgpDb250cm9scyB3aGV0aGVyIGFudGktc3liaWwgdW5pcXVlbmVzcyBpcyBlbmZvcmNlZDoKLSBgTm9uZWA6IG5vIHVuaXF1ZW5lc3MgZW5mb3JjZW1lbnQgKGN1cnJlbnQgYmVoYXZpb3IpLgotIGBOdWxsaWZpZXJgOiByZXF1aXJlcyBhIG51bGxpZmllciByZWdpc3RyeSBwcm9vZiBmb3IgdW5pcXVlbmVzcy4KCmByZWdpc3RyeV9hZGRyZXNzYCBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gc2V0dGluZyBgTnVsbGlmaWVyYCBtb2RlLgAAAAATc2V0X3VuaXF1ZW5lc3NfbW9kZQAAAAAEAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAABW5vbmNlAAAAAAAABgAAAAAAAAAEbW9kZQAAB9AAAAAOVW5pcXVlbmVzc01vZGUAAAAAAAAAAAAQcmVnaXN0cnlfYWRkcmVzcwAAA+gAAAATAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAADhDYW5jZWwgYW4gaW4tZmxpZ2h0IGFkbWluIHRyYW5zZmVyIChjdXJyZW50IGFkbWluIG9ubHkpLgAAABVjYW5jZWxfYWRtaW5fdHJhbnNmZXIAAAAAAAABAAAAAAAAAA1jdXJyZW50X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAACxHZXQgdGhlIGNvbmZpZ3VyZWQgYWN0aXZpdHkgbG9nIGJ1ZmZlciBzaXplLgAAABVnZXRfYWN0aXZpdHlfbG9nX3NpemUAAAAAAAAAAAAAAQAAAAQ=","AAAAAAAAAB5HZXQgY3VycmVudCBwYXJ0aWNpcGFudCBjb3VudC4AAAAAABVnZXRfcGFydGljaXBhbnRfY291bnQAAAAAAAAAAAAAAQAAAAY=","AAAAAAAAAI5TZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYWN0aXZpdHkgbG9nIHJpbmcgYnVmZmVyIChhZG1pbiBvbmx5KS4KTXVzdCBiZSBiZXR3ZWVuIE1JTl9BQ1RJVklUWV9MT0dfU0laRSAoMTApIGFuZCBNQVhfQUNUSVZJVFlfTE9HX1NJWkUgKDIwMCkuAAAAAAAVc2V0X2FjdGl2aXR5X2xvZ19zaXplAAAAAAAAAwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAVub25jZQAAAAAAAAYAAAAAAAAABHNpemUAAAAEAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAADJHZXQgdGhlIG51bGxpZmllciByZWdpc3RyeSBhZGRyZXNzLCBpZiBjb25maWd1cmVkLgAAAAAAFmdldF9udWxsaWZpZXJfcmVnaXN0cnkAAAAAAAAAAAABAAAD6AAAABM=","AAAAAAAAAIxTZXQgdGhlIE0tb2YtTiBtdWx0aXNpZyB0aHJlc2hvbGQgZm9yIGNyaXRpY2FsIG9wZXJhdGlvbnMgKGFkbWluIG9ubHkpLgpgcmVxdWlyZWQgPSAwYCBkaXNhYmxlcyBtdWx0aXNpZyAobGVnYWN5IHNpbmdsZS1hZG1pbiBhdXRoIGFwcGxpZXMpLgAAABZzZXRfbXVsdGlzaWdfdGhyZXNob2xkAAAAAAADAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAABW5vbmNlAAAAAAAABgAAAAAAAAAIcmVxdWlyZWQAAAAEAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAcZSZWdpc3RlciBhIHBhcnRpY2lwYW50IHdpdGggdW5pcXVlbmVzcyBwcm9vZiAoYW50aS1zeWJpbCkuCgpXaGVuIHRoZSBjYW1wYWlnbidzIHVuaXF1ZW5lc3MgbW9kZSBpcyBgTnVsbGlmaWVyYCwgdGhpcyBmdW5jdGlvbjoKMS4gVmVyaWZpZXMgdGhlIG51bGxpZmllciBoYXMgbm90IGJlZW4gc3BlbnQgdmlhIHRoZSBudWxsaWZpZXIgcmVnaXN0cnkuCjIuIFNwZW5kcyB0aGUgbnVsbGlmaWVyIHRvIHByZXZlbnQgZG91YmxlLXJlZ2lzdHJhdGlvbi4KClRoZSBgdW5pcXVlbmVzc19wcm9vZmAgaXMgcGFzc2VkIHRocm91Z2ggdG8gdGhlIHJlZ2lzdHJ5IGZvcgpmdXR1cmUgdmVyaWZpY2F0aW9uLiBGb3Igbm93LCBpdCdzIHN0b3JlZCBhbG9uZ3NpZGUgdGhlIG51bGxpZmllci4KClJldHVybnMgYHRydWVgIG9uIGZpcnN0IHJlZ2lzdHJhdGlvbiwgYGZhbHNlYCBpZiBhbHJlYWR5IHJlZ2lzdGVyZWQuAAAAAAAYcmVnaXN0ZXJfd2l0aF91bmlxdWVuZXNzAAAAAwAAAAAAAAALcGFydGljaXBhbnQAAAAAEwAAAAAAAAAJbnVsbGlmaWVyAAAAAAAD7gAAACAAAAAAAAAAEHVuaXF1ZW5lc3NfcHJvb2YAAAAOAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAfRHYXJiYWdlLWNvbGxlY3QgYFBBUlRJQ0lQQU5UX1JFR0lTVFJZYCBlbnRyaWVzIHdob3NlIHBlcnNpc3RlbnQKcGFydGljaXBhbnQgcmVjb3JkIGlzIGdvbmUg4oCUIGVpdGhlciBleHBsaWNpdGx5IGRlcmVnaXN0ZXJlZCwgb3IKYXJjaGl2ZWQgYnkgdGhlIG5ldHdvcmsgYWZ0ZXIgaXRzIFRUTCBsYXBzZWQgKCMyODApIOKAlCB1cCB0bwpgbWF4X2VudHJpZXNgIHBlciBjYWxsLiBDYWxsYWJsZSBieSBhbnlvbmUgc2luY2UgaXQgb25seSBkZWxldGVzCnN0YWxlIGJvb2trZWVwaW5nLCBuZXZlciBsaXZlIGRhdGEuIFJldHVybnMgdGhlIG51bWJlciBwcnVuZWQuCgpVc2VzIHN3YXAtcmVtb3ZlIHNvIGVhY2ggcHJ1bmVkIGVudHJ5IGlzIE8oMSk7IGEgcGVyc2lzdGVkIGN1cnNvcgpsZXRzIHJlcGVhdGVkIGNhbGxzIHN3ZWVwIHRoZSB3aG9sZSByZWdpc3RyeSBvdmVyIHRpbWUgd2l0aG91dApyZXNjYW5uaW5nIGZyb20gdGhlIHN0YXJ0LCBib3VuZGluZyB3b3JrIHBlciBjYWxsLgAAABpwcnVuZV9leHBpcmVkX3BhcnRpY2lwYW50cwAAAAAAAQAAAAAAAAALbWF4X2VudHJpZXMAAAAABAAAAAEAAAAE"]),e),this.options=e,this.fromJSON={admin:this.txFromJSON,migrate:this.txFromJSON,upgrade:this.txFromJSON,register:this.txFromJSON,is_active:this.txFromJSON,deregister:this.txFromJSON,get_window:this.txFromJSON,initialize:this.txFromJSON,set_active:this.txFromJSON,set_window:this.txFromJSON,admin_nonce:this.txFromJSON,get_max_cap:this.txFromJSON,invite_used:this.txFromJSON,referrer_of:this.txFromJSON,set_max_cap:this.txFromJSON,accept_admin:this.txFromJSON,activity_log:this.txFromJSON,add_co_admin:this.txFromJSON,issue_invite:this.txFromJSON,pending_admin:this.txFromJSON,propose_admin:this.txFromJSON,revoke_invite:this.txFromJSON,storage_stats:this.txFromJSON,is_invite_only:this.txFromJSON,is_participant:this.txFromJSON,referral_count:this.txFromJSON,schema_version:this.txFromJSON,get_merkle_root:this.txFromJSON,register_unique:this.txFromJSON,remove_co_admin:this.txFromJSON,set_invite_only:this.txFromJSON,set_merkle_root:this.txFromJSON,admin_deregister:this.txFromJSON,get_privacy_mode:this.txFromJSON,is_within_window:this.txFromJSON,register_private:this.txFromJSON,set_privacy_mode:this.txFromJSON,prune_used_nonces:this.txFromJSON,multisig_threshold:this.txFromJSON,get_uniqueness_mode:this.txFromJSON,is_fallback_allowed:this.txFromJSON,set_uniqueness_mode:this.txFromJSON,cancel_admin_transfer:this.txFromJSON,get_activity_log_size:this.txFromJSON,get_participant_count:this.txFromJSON,set_activity_log_size:this.txFromJSON,get_nullifier_registry:this.txFromJSON,set_multisig_threshold:this.txFromJSON,register_with_uniqueness:this.txFromJSON,prune_expired_participants:this.txFromJSON}}static async deploy(e){return nt.Client.deploy(null,e)}}const D={RETRY:"retry",RE_SIGN:"re_sign",SWITCH_WALLET:"switch_wallet",TOP_UP:"top_up",VIEW_EXPLORER:"view_explorer",REPORT:"report"},pn={wallet:[D.RE_SIGN],network:[D.RETRY],rpc:[D.RETRY],validation:[],contract:[D.VIEW_EXPLORER],unknown:[D.RETRY,D.REPORT]},hn={2:[D.TOP_UP],100:[D.SWITCH_WALLET],104:[D.SWITCH_WALLET],3:[D.SWITCH_WALLET],105:[D.RETRY],106:[D.RETRY],4:[D.RETRY],429:[D.RETRY],500:[D.RETRY,D.REPORT],503:[D.RETRY],101:[D.VIEW_EXPLORER],102:[D.VIEW_EXPLORER],103:[D.VIEW_EXPLORER]},Ta={[D.RETRY]:{label:"Try again",description:"Resubmit the transaction"},[D.RE_SIGN]:{label:"Sign again",description:"Re-open your wallet to sign the transaction"},[D.SWITCH_WALLET]:{label:"Switch wallet",description:"Connect a different wallet or account"},[D.TOP_UP]:{label:"Add funds",description:"Add XLM or tokens to your wallet"},[D.VIEW_EXPLORER]:{label:"View on explorer",description:"Open the transaction on Stellar Expert"},[D.REPORT]:{label:"Report issue",description:"Open a support request for this error"}},It={100:"You don't have permission to perform this action",101:"This campaign is not currently accepting registrations",102:"This campaign has reached its participant limit",103:"This campaign is not active",104:"Your address is not eligible for this campaign",105:"Contract migration failed or this action has already been processed",106:"This action has already been processed",1:"Balance calculation error. Please contact support",2:"Insufficient balance to claim this amount",3:"You don't have permission to perform this action",4:"The rewards contract is temporarily unavailable",5:"Credit amount exceeds the maximum allowed per transaction",6:"Invalid reward configuration. Please contact support",7:"Invalid reward multiplier configuration. Please contact support",400:"Invalid input. Please check your data and try again",401:"API key is required or invalid",404:"The requested resource was not found",429:"Too many requests. Please wait before trying again",500:"An unexpected error occurred. Please try again later",503:"The blockchain service is temporarily unavailable"},pe={CONTRACT:"contract",WALLET:"wallet",NETWORK:"network",RPC:"rpc",VALIDATION:"validation",UNKNOWN:"unknown"},La={[pe.WALLET]:"Signing was cancelled in your wallet. Nothing was submitted.",[pe.NETWORK]:"Network problem reaching the blockchain — your action was not submitted. Check your connection and try again.",[pe.RPC]:"The Soroban network is temporarily unavailable. Your action was not applied; please try again in a moment.",[pe.VALIDATION]:"Please check your input and try again.",[pe.UNKNOWN]:"An unexpected error occurred. Your action was not applied."};function tr(t){var r;if(t==null)return null;if(typeof t=="number")return Number.isFinite(t)?t:null;if(typeof t=="string"){const a=t.match(/(?:Error\(Contract,\s*#|contract.*?#|code[:\s]+)(\d+)/i);return a?Number(a[1]):null}if(typeof t.code=="number")return t.code;if(typeof t.status=="number")return t.status;const n=(t.message||((r=t.toString)==null?void 0:r.call(t))||"").match(/(?:Error\(Contract,\s*#|contract.*?#|code[:\s]+)(\d+)/i);return n?Number(n[1]):null}function Ha(t){var r;if(!t)return pe.UNKNOWN;const e=tr(t),n=(typeof t=="string"?t:t.message||((r=t.toString)==null?void 0:r.call(t))||"").toLowerCase();return/error\(contract|contract.*?#\d+/i.test(n)?pe.CONTRACT:/user (rejected|declined)|reject|declin|denied|cancel|freighter|wallet|not allowed/.test(n)?pe.WALLET:/failed to fetch|networkerror|offline|timeout|timed out|enotfound|econnrefused|etimedout|dns/.test(n)?pe.NETWORK:/rpc|simulat|soroban|horizon|gateway|bad gateway|service unavailable|50[023]/.test(n)?pe.RPC:/invalid|required|must be|too large|not a number/.test(n)?pe.VALIDATION:typeof e=="number"&&e>=1&&e<=199?pe.CONTRACT:pe.UNKNOWN}function Ja(t,e){return e!==null&&hn[e]?hn[e]:pn[t]??pn[pe.UNKNOWN]}function Pa(t){const e=Ha(t),n=tr(t),r=e===pe.CONTRACT&&n&&It[n]?Dt(n):La[e]||Dt(t),a=Ja(e,n??null);return{class:e,code:n??null,message:r,recovery:n?Ua(n):null,recoveryActions:a,retryable:e===pe.NETWORK||e===pe.RPC||(n?Oa(n):!1)}}function Dt(t){if(!t)return"An unknown error occurred";let e=null;if(typeof t=="number")e=t;else if(typeof t=="string")e=parseInt(t,10);else if(t.code!==void 0)e=t.code;else if(t.status!==void 0)e=t.status;else if(t.message){const n=t.message.match(/code[:\s]+(\d+)/i);n&&(e=parseInt(n[1],10))}return e&&It[e]?It[e]:t.message&&typeof t.message=="string"?t.message:"An unexpected error occurred"}function Ua(t){return{100:"Use an admin account to perform this action",101:"Check the campaign details for registration dates",102:"Try registering for another campaign",103:"Wait for the campaign to be activated",104:"Contact the campaign operator for eligibility",105:"Retry the action with a new transaction",1:"Contact support if the issue persists",2:"Earn more rewards before claiming",3:"Use the correct account for this action",4:"Try again in a few moments",5:"Split your credit into multiple transactions",6:"Contact support for configuration help",429:"Wait a moment and try again",503:"Try again in a few moments"}[t]||null}function Oa(t){return[4,429,500,503].includes(t)}class Da{constructor(){this.providers=new Map,this.activeProvider=null,this.connectedAddress=null}registerProvider(e){if(!e||typeof e.getName!="function")throw new Error("Invalid provider: must implement getName()");const n=e.getName();this.providers.set(n,e)}getProvider(e){const n=this.providers.get(e);if(!n)throw new Error(`Wallet provider "${e}" not found`);return n}async getAvailableProviders(){const e=[];for(const[n,r]of this.providers.entries())try{await r.isAvailable()&&e.push({name:n,provider:r})}catch(a){console.warn(`Failed to check availability for ${n}:`,a)}return e}async connect(e){const n=this.getProvider(e);if(!await n.isAvailable())throw new Error(`Wallet provider "${e}" is not available`);const a=await n.connect();return this.activeProvider=n,this.connectedAddress=a,{address:a,provider:e}}async disconnect(){this.activeProvider&&(await this.activeProvider.disconnect(),this.activeProvider=null,this.connectedAddress=null)}async getAddress(){if(!this.activeProvider)throw new Error("No wallet connected");if(this.connectedAddress)return this.connectedAddress;const e=await this.activeProvider.getAddress();return this.connectedAddress=e,e}async signTransaction(e,n={}){if(!this.activeProvider)throw new Error("No wallet connected");return this.activeProvider.signTransaction(e,n)}async batchSignTransactions(e,n={}){if(!this.activeProvider)throw new Error("No wallet connected");if(!Array.isArray(e)||e.length===0)throw new Error("batchSignTransactions requires a non-empty array of XDRs");if(e.length===1)return[await this.activeProvider.signTransaction(e[0],n)];const r=[];for(const a of e){const o=await this.activeProvider.signTransaction(a,n);r.push(o)}return r}async isConnected(){return this.activeProvider?this.activeProvider.isConnected():!1}getActiveProviderName(){return this.activeProvider?this.activeProvider.getName():null}async getNetwork(){return this.activeProvider?this.activeProvider.getNetwork():null}}class We{constructor(){if(new.target===We)throw new TypeError("Cannot construct WalletProvider instances directly")}async isAvailable(){throw new Error("isAvailable() must be implemented")}async connect(){throw new Error("connect() must be implemented")}async disconnect(){throw new Error("disconnect() must be implemented")}async getAddress(){throw new Error("getAddress() must be implemented")}async signTransaction(e,n){throw new Error("signTransaction() must be implemented")}async isConnected(){throw new Error("isConnected() must be implemented")}getName(){throw new Error("getName() must be implemented")}async getNetwork(){return null}}class za extends We{constructor(){super(),this.name="Freighter"}getName(){return this.name}getApi(){if(!window.freighterApi)throw new Error("Freighter API is unavailable. Install or unlock the Freighter browser extension.");return window.freighterApi}async isAvailable(){try{return!!window.freighterApi}catch{return!1}}async isConnected(){try{const n=await this.getApi().isConnected();return n.error?!1:n.isConnected}catch{return!1}}async connect(){const e=this.getApi(),n=await e.isConnected();if(n.error)throw new Error(n.error);if(!n.isConnected)throw new Error("Freighter extension was not detected. Install or unlock Freighter to connect a wallet.");const r=await e.getAddress();if(r.error)throw new Error(r.error);if(r.address)return r.address;const a=await e.requestAccess();if(a.error)throw new Error(a.error);if(!a.address)throw new Error("Freighter did not return a wallet address.");return a.address}async disconnect(){return!0}async getAddress(){const n=await this.getApi().getAddress();if(n.error)throw new Error(n.error);if(!n.address)throw new Error("No address available. Please connect your wallet first.");return n.address}async signTransaction(e,n={}){const a=await this.getApi().signTransaction(e,{networkPassphrase:n.networkPassphrase,address:n.address});if(a.error)throw new Error(a.error);if(!a.signedTxXdr)throw new Error("Freighter did not return a signed transaction.");return a.signedTxXdr}}class Ma extends We{constructor(){super(),this.name="xBull"}getName(){return this.name}getApi(){if(!window.xBullSDK)throw new Error("xBull SDK is unavailable. Install or unlock the xBull browser extension.");return window.xBullSDK}async isAvailable(){try{return!!window.xBullSDK}catch{return!1}}async isConnected(){try{return!!window.xBullSDK}catch{return!1}}async connect(){const e=this.getApi();await e.connect();const n=await e.getPublicKey();if(!n)throw new Error("xBull did not return a wallet address.");return n}async disconnect(){return!0}async getAddress(){const n=await this.getApi().getPublicKey();if(!n)throw new Error("No address available. Please connect your wallet first.");return n}async signTransaction(e,n={}){var c;const r=this.getApi(),a=(c=n.networkPassphrase)!=null&&c.includes("Test SDF")?"TESTNET":"PUBLIC",o=await r.signXDR(e,{network:a});if(!o)throw new Error("xBull did not return a signed transaction.");return o}async getNetwork(){try{const e=this.getApi();if(typeof e.getNetwork=="function")return await e.getNetwork()??null;if(typeof e.getNetworkDetails=="function"){const n=await e.getNetworkDetails();return(n==null?void 0:n.networkPassphrase)??null}return null}catch{return null}}}class Qa extends We{constructor(){super(),this.name="Rabet"}getName(){return this.name}getApi(){if(!window.rabet)throw new Error("Rabet is not installed. Please install the Rabet browser extension from https://rabet.io and reload the page.");return window.rabet}async isAvailable(){try{return!!window.rabet}catch{return!1}}async isConnected(){try{return!!window.rabet}catch{return!1}}async connect(){const n=await this.getApi().connect();if(!(n!=null&&n.publicKey))throw new Error("Rabet did not return a wallet address.");return n.publicKey}async disconnect(){return!0}async getAddress(){const n=await this.getApi().connect();if(!(n!=null&&n.publicKey))throw new Error("No address available. Please connect your Rabet wallet first.");return n.publicKey}async getNetwork(){const n=await this.getApi().connect();if(!(n!=null&&n.network))throw new Error("Rabet did not return a network passphrase.");return n.network}async signTransaction(e,n={}){const r=this.getApi(),a=n.networkPassphrase??await this.getNetwork(),o=await r.sign(e,a);if(!(o!=null&&o.xdr))throw new Error("Rabet did not return a signed transaction.");return o.xdr}}class $a extends We{constructor(){super(),this.name="Lobstr"}getName(){return this.name}getApi(){const e=window.lobstr??window.lobstrApi;if(!e)throw new Error("Lobstr is unavailable. Install or unlock the Lobstr browser extension.");return e}async isAvailable(){try{return!!(window.lobstr??window.lobstrApi)}catch{return!1}}async isConnected(){try{return!!(window.lobstr??window.lobstrApi)}catch{return!1}}async connect(){const e=this.getApi();if(typeof e.connect=="function"){const n=await e.connect(),r=(n==null?void 0:n.publicKey)??(n==null?void 0:n.address)??n;if(!r||typeof r!="string")throw new Error("Lobstr did not return a wallet address.");return r}if(typeof e.getPublicKey=="function"){const n=await e.getPublicKey();if(!n)throw new Error("Lobstr did not return a wallet address.");return n}throw new Error("Lobstr extension API is not compatible with this version of Trivela.")}async disconnect(){return!0}async getAddress(){const e=this.getApi();if(typeof e.getPublicKey=="function"){const n=await e.getPublicKey();if(!n)throw new Error("No address available. Please connect your wallet first.");return n}if(typeof e.connect=="function")return this.connect();throw new Error("Lobstr extension API is not compatible with this version of Trivela.")}async signTransaction(e,n={}){const r=this.getApi();if(typeof r.signTransaction=="function"){const a=await r.signTransaction(e,{networkPassphrase:n.networkPassphrase}),o=(a==null?void 0:a.signedTxXdr)??(a==null?void 0:a.xdr)??a;if(!o||typeof o!="string")throw new Error("Lobstr did not return a signed transaction.");return o}if(typeof r.sign=="function"){const a=await r.sign(e,n.networkPassphrase),o=(a==null?void 0:a.xdr)??a;if(!o||typeof o!="string")throw new Error("Lobstr did not return a signed transaction.");return o}throw new Error("Lobstr extension does not support transaction signing.")}}class Ka extends We{constructor(){super(),this.name="WalletConnect",this._address=null}getName(){return this.name}_getClient(){return window.__walletConnectClient??null}async isAvailable(){return this._getClient()!==null}async isConnected(){var e,n;try{const r=this._getClient();return r?(((n=(e=r.session)==null?void 0:e.getAll)==null?void 0:n.call(e))??[]).length>0:!1}catch{return!1}}async connect(){var l,u,g;const e=this._getClient();if(!e)throw new Error("WalletConnect is not configured. Set up a WalletConnect project ID and initialise the Sign Client to enable QR-code wallet connections.");const{uri:n,approval:r}=await e.connect({requiredNamespaces:{stellar:{methods:["stellar_signTransaction"],chains:["stellar:pubnet","stellar:testnet"],events:["accountsChanged"]}}});n&&typeof window.open=="function"&&window.open(n,"_blank","noopener,noreferrer");const c=(((g=(u=(l=(await r()).namespaces)==null?void 0:l.stellar)==null?void 0:u.accounts)==null?void 0:g[0])??"").split(":").pop();if(!c)throw new Error("WalletConnect session did not provide a Stellar address.");return this._address=c,c}async disconnect(){var n,r;const e=this._getClient();if(!e)return!0;try{const a=((r=(n=e.session)==null?void 0:n.getAll)==null?void 0:r.call(n))??[];for(const o of a)await e.disconnect({topic:o.topic,reason:{code:6e3,message:"User disconnected"}})}catch{}return this._address=null,!0}async getAddress(){if(this._address)return this._address;throw new Error("No WalletConnect session active. Please connect first.")}async signTransaction(e,n={}){var g,m,b;const r=this._getClient();if(!r)throw new Error("WalletConnect is not configured.");const a=((m=(g=r.session)==null?void 0:g.getAll)==null?void 0:m.call(g))??[];if(a.length===0)throw new Error("No active WalletConnect session.");const o=a[0],c=(b=n.networkPassphrase)!=null&&b.includes("Test SDF")?"stellar:testnet":"stellar:pubnet",l=await r.request({topic:o.topic,chainId:c,request:{method:"stellar_signTransaction",params:{xdr:e}}}),u=(l==null?void 0:l.signedTxXdr)??(l==null?void 0:l.xdr)??l;if(!u||typeof u!="string")throw new Error("WalletConnect did not return a signed transaction.");return u}}const qa="Trivela",_t=typeof window<"u"?window.location.hostname:"localhost";class ei extends We{constructor(){super(),this.credential=null,this.address=null}getName(){return"Passkey"}async isAvailable(){if(typeof window>"u"||!window.PublicKeyCredential)return!1;try{return await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()}catch{return!1}}async connect(){if(!await this.isAvailable())throw new Error("WebAuthn is not available in this browser");const e=this.loadStoredCredential();return e?(this.credential=e,this.address=this.deriveAddress(e),this.address):this.createWallet()}async createWallet(){const e=crypto.getRandomValues(new Uint8Array(32)),n=crypto.getRandomValues(new Uint8Array(16)),r=await navigator.credentials.create({publicKey:{challenge:e,rp:{name:qa,id:_t},user:{id:n,name:`trivela-user-${Date.now()}`,displayName:"Trivela User"},pubKeyCredParams:[{alg:-7,type:"public-key"},{alg:-257,type:"public-key"}],authenticatorSelection:{authenticatorAttachment:"platform",userVerification:"required",residentKey:"preferred"},timeout:6e4,attestation:"none"}});return this.credential=r,this.address=this.deriveAddress(r),this.storeCredential(r),this.address}async disconnect(){this.credential=null,this.address=null,this.clearStoredCredential()}async getAddress(){if(!this.address)throw new Error("No wallet connected");return this.address}async signTransaction(e,n={}){if(!this.credential)throw new Error("No wallet connected");const r=crypto.getRandomValues(new Uint8Array(32)),a=await navigator.credentials.get({publicKey:{challenge:r,rpId:_t,allowCredentials:[{id:this.credential.rawId,type:"public-key",transports:["internal"]}],userVerification:"required",timeout:6e4}});return{signedXdr:e,signature:a.response.signature,authenticatorData:a.response.authenticatorData,clientDataJSON:a.response.clientDataJSON,credentialId:this.credential.rawId}}async isConnected(){return this.credential!==null&&this.address!==null}deriveAddress(e){const n=new TextEncoder().encode(`${_t}:${e.id}`),r=crypto.subtle.digest("SHA-256",n),o=new Uint8Array(r).slice(0,32),c="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let l="G";for(let u=0;u<56;u++){const g=Math.floor(u*5/8),m=u*5%8,b=o[g]||0,h=o[g+1]||0,f=(b<<8|h)>>11-m&31;l+=c[f]||"A"}return l}storeCredential(e){try{const n={id:e.id,rawId:Array.from(new Uint8Array(e.rawId)),type:e.type};localStorage.setItem("trivela_passkey",JSON.stringify(n))}catch{}}loadStoredCredential(){try{const e=localStorage.getItem("trivela_passkey");if(!e)return null;const n=JSON.parse(e);return{...n,rawId:new Uint8Array(n.rawId).buffer}}catch{return null}}clearStoredCredential(){try{localStorage.removeItem("trivela_passkey")}catch{}}}class ti extends We{constructor(){super(),this.name="Hana"}getName(){return this.name}getApi(){var e;if(!((e=window==null?void 0:window.hana)!=null&&e.stellar))throw new Error("Hana wallet is unavailable. Install or unlock the Hana browser extension.");return window.hana.stellar}async isAvailable(){var e;try{return!!((e=window==null?void 0:window.hana)!=null&&e.stellar)}catch{return!1}}async isConnected(){try{return!!await this.getApi().isConnected()}catch{return!1}}async connect(){const n=await this.getApi().connect();if(!(n!=null&&n.publicKey))throw new Error("Hana did not return a wallet address.");return n.publicKey}async disconnect(){try{const e=this.getApi();typeof e.disconnect=="function"&&await e.disconnect()}catch{}return!0}async getAddress(){var r;const e=this.getApi(),n=await((r=e.getPublicKey)==null?void 0:r.call(e))??await e.connect();if(!(n!=null&&n.publicKey)&&typeof n!="string")throw new Error("No address available. Please connect your wallet first.");return typeof n=="string"?n:n.publicKey}async signTransaction(e,n={}){const a=await this.getApi().signTransaction(e,{networkPassphrase:n.networkPassphrase});if(!(a!=null&&a.signedTxXdr))throw new Error("Hana did not return a signed transaction.");return a.signedTxXdr}}const gn="44'/148'/0'";async function ni(){const t=await Ae(()=>import("@ledgerhq/hw-transport-webusb"),[]).catch(()=>{throw new Error("Ledger transport library is not installed. Run: npm install @ledgerhq/hw-transport-webusb @ledgerhq/hw-app-stellar")});return t.default??t}async function mn(){const t=await Ae(()=>import("@ledgerhq/hw-app-stellar"),[]).catch(()=>{throw new Error("Ledger Stellar app library is not installed.")});return t.default??t}class ri extends We{constructor(){super(),this.name="Ledger",this._transport=null,this._address=null}getName(){return this.name}async isAvailable(){try{return typeof navigator<"u"&&!!navigator.usb}catch{return!1}}async isConnected(){return!!this._transport&&!!this._address}async connect(){if(!await this.isAvailable())throw new Error("WebUSB is not supported in this browser. Use Chrome or Edge to connect a Ledger device.");const e=await ni();this._transport=await e.create();const n=await mn(),r=new n(this._transport),{publicKey:a}=await r.getPublicKey(gn);if(!a)throw new Error("Ledger did not return a public key. Ensure the Stellar app is open on your device.");return this._address=a,a}async disconnect(){return this._transport&&(await this._transport.close().catch(()=>{}),this._transport=null),this._address=null,!0}async getAddress(){if(!this._address)throw new Error("Ledger not connected. Call connect() first.");return this._address}async signTransaction(e,n={}){if(!this._transport||!this._address)throw new Error("Ledger not connected. Call connect() first.");const{Transaction:r,Networks:a,Keypair:o,xdr:c}=await Ae(async()=>{const{Transaction:B,Networks:I,Keypair:W,xdr:R}=await import("./vendor-stellar-BhxI8NIn.js").then(X=>X.s);return{Transaction:B,Networks:I,Keypair:W,xdr:R}},__vite__mapDeps([0,1])),l=await mn(),u=n.networkPassphrase??a.PUBLIC,g=new r(e,u),m=new l(this._transport),{signature:b}=await m.signTransaction(gn,g.hash());if(!b)throw new Error("Ledger did not return a signature. Ensure you approved the transaction on the device.");const f=o.fromPublicKey(this._address).rawPublicKey().slice(-4),v=new c.DecoratedSignature({hint:f,signature:b});return g.signatures.push(v),g.toEnvelope().toXDR("base64")}}class ai extends We{constructor(){super(),this.name="Albedo",this._connectedPubkey=null}getName(){return this.name}getApi(){if(typeof window>"u"||!window.albedo)throw new Error("Albedo is not available. Open https://albedo.link to use web-based signing.");return window.albedo}async isAvailable(){try{return typeof window<"u"&&!!window.albedo}catch{return!1}}async isConnected(){return!!this._connectedPubkey}async connect(){var n;const e=this.getApi();try{const r=await e.publicKey({});if(!(r!=null&&r.pubkey))throw new Error("Albedo did not return a public key.");return this._connectedPubkey=r.pubkey,r.pubkey}catch(r){throw(n=r.message)!=null&&n.includes("User rejected")||r.code==="user_rejected"?new Error("Albedo connection was rejected by the user."):r}}async disconnect(){return this._connectedPubkey=null,!0}async getAddress(){return this._connectedPubkey?this._connectedPubkey:this.connect()}async signTransaction(e,n={}){var a;const r=this.getApi();try{const o=await r.signTransaction({xdr:e,pubkey:this._connectedPubkey??void 0,network_passphrase:n.networkPassphrase}),c=(o==null?void 0:o.signed_envelope_xdr)??(o==null?void 0:o.xdr);if(!c)throw new Error("Albedo did not return a signed transaction.");return c}catch(o){throw(a=o.message)!=null&&a.includes("User rejected")||o.code==="user_rejected"?new Error("Transaction signing was rejected by the user."):o}}}const fe=new Da;fe.registerProvider(new za);fe.registerProvider(new Ma);fe.registerProvider(new Qa);fe.registerProvider(new $a);fe.registerProvider(new Ka);fe.registerProvider(new ei);fe.registerProvider(new ti);fe.registerProvider(new ri);fe.registerProvider(new ai);async function ii(t="Freighter"){return fe.connect(t)}async function si(){return fe.getAddress()}async function oi(){return fe.isConnected()}function jt(t){return typeof t=="bigint"?t.toString():typeof t=="number"?String(t):"0"}function Ai(t){const e=Number(t);return Number.isFinite(e)?`${e.toFixed(2)} XLM`:"0 XLM"}function nr(t){var a;if(!t)return"Unable to load points right now.";const e=o=>{var u;const c=typeof o=="string"?o:(o==null?void 0:o.message)||((u=o==null?void 0:o.toString)==null?void 0:u.call(o))||"",l=[/Error\(Contract,\s*#(\d+)\)/i,/contract.*?#(\d+)/i,/code[:\s]+(\d+)/i];for(const g of l){const m=c.match(g);if(m)return Number(m[1])}return null},n=typeof t=="string"?t:t.message||((a=t.toString)==null?void 0:a.call(t))||"Unable to load points right now.",r=e(t);return typeof r=="number"&&Number.isFinite(r)&&It[r]?Dt(r):/not found|missing|404/i.test(n)?"Rewards contract is not deployed on the configured Soroban network yet.":/unsupported address type/i.test(n)?"Connected wallet address is invalid for Soroban calls.":n}async function li(t){var a;const e=await fetch(`${Qr()}/accounts/${encodeURIComponent(t)}`);if(!e.ok)throw new Error(`Horizon returned ${e.status} while loading the wallet balance.`);const r=(a=(await e.json()).balances)==null?void 0:a.find(o=>o.asset_type==="native");return(r==null?void 0:r.balance)||"0"}async function ci(t){const e=gt();if(!e)throw new Error("Set VITE_REWARDS_CONTRACT_ID to load on-chain points.");return await(await new Vt({rpcUrl:Fe(),networkPassphrase:ve(),contractId:e}).balance({user:t})).simulate()}async function di(t,e){const n=gt();if(!n)throw new Error("Set VITE_REWARDS_CONTRACT_ID before claiming rewards.");const a=await new Vt({rpcUrl:Fe(),networkPassphrase:ve(),contractId:n,publicKey:t,signTransaction:async u=>({signedTxXdr:await fe.signTransaction(u,{networkPassphrase:ve(),address:t})})}).claim({user:t,amount:BigInt(e)}),o=await a.signAndSend(),c=a.signed.hash().toString("hex"),l=jt(o);return{hash:c,newBalance:l}}async function ui(t,e){const n=gt();if(!n)throw new Error("Set VITE_REWARDS_CONTRACT_ID before redeeming.");const a=await new Vt({rpcUrl:Fe(),networkPassphrase:ve(),contractId:n,publicKey:t,signTransaction:async u=>({signedTxXdr:await fe.signTransaction(u,{networkPassphrase:ve(),address:t})})}).redeem({user:t,points_amount:BigInt(e)}),o=await a.signAndSend(),c=a.signed.hash().toString("hex"),l=jt(o);return{hash:c,assetAmount:l}}async function fn(){const t=gt();if(!t)return"0";const r=await(await new Vt({rpcUrl:Fe(),networkPassphrase:ve(),contractId:t}).payout_reserve_balance()).simulate();return jt(r)}async function OA(t){const e=t||mt();if(!e)return null;const n=new Ft({rpcUrl:Fe(),networkPassphrase:ve(),contractId:e}),[r,a,o]=await Promise.all([n.is_active().then(c=>c.simulate()),n.is_within_window().then(c=>c.simulate()),n.get_participant_count().then(c=>c.simulate())]);return{isActive:r,isWithinWindow:a,participantCount:Number(o)}}async function pi(t){const e=mt();if(!e)throw new Error("Set VITE_CAMPAIGN_CONTRACT_ID to check participant status.");return await(await new Ft({rpcUrl:Fe(),networkPassphrase:ve(),contractId:e}).is_participant({participant:t})).simulate()}async function hi(t){const e=mt();if(!e)throw new Error("Set VITE_CAMPAIGN_CONTRACT_ID before registering.");const n=new Ft({rpcUrl:Fe(),networkPassphrase:ve(),contractId:e,publicKey:t,signTransaction:async u=>({signedTxXdr:await fe.signTransaction(u,{networkPassphrase:ve(),address:t})})}),r=new Uint8Array(32),a=[],o=await n.register({participant:t,leaf:r,proof:a}),c=await o.signAndSend();return{hash:o.signed.hash().toString("hex"),alreadyRegistered:!c}}async function gi(t,e){const r=await new Ft({rpcUrl:Fe(),networkPassphrase:ve(),contractId:e,publicKey:t,signTransaction:async o=>({signedTxXdr:await fe.signTransaction(o,{networkPassphrase:ve(),address:t})})}).initialize({admin:t});return await r.signAndSend(),{hash:r.signed.hash().toString("hex")}}const bn="https://stellar.expert/explorer",mi="https://github.com/FinesseStudioLab/Trivela/issues/new";function fi({onRetry:t,onSwitchWallet:e,onTopUp:n,network:r="testnet",hash:a}={}){const o=w.useCallback(()=>{t==null||t()},[t]),c=w.useCallback(()=>{t==null||t()},[t]),l=w.useCallback(()=>{e==null||e()},[e]),u=w.useCallback(()=>{n==null||n()},[n]),g=w.useCallback(v=>{const B=v??a;return B?`${bn}/${r}/tx/${B}`:`${bn}/${r}`},[r,a]),m=w.useCallback((v=null)=>{const B=new URLSearchParams({labels:"bug",title:`Transaction error${v!=null?` (code ${v})`:""}`});return`${mi}?${B.toString()}`},[]),b=w.useCallback(()=>{window.open(g(),"_blank","noopener,noreferrer")},[g]),h=w.useCallback((v=null)=>{window.open(m(v),"_blank","noopener,noreferrer")},[m]);return{handlers:{[D.RETRY]:o,[D.RE_SIGN]:c,[D.SWITCH_WALLET]:l,[D.TOP_UP]:u,[D.VIEW_EXPLORER]:b,[D.REPORT]:h},getExplorerUrl:g,getReportUrl:m}}const yn={success:"✓",pending:"⏳",error:"✕"},wn={success:"Success",pending:"Awaiting confirmation…",error:"Failed"};function ut({hash:t,network:e="testnet",variant:n="success",status:r,message:a,mappedError:o,onRetry:c,onSwitchWallet:l,onTopUp:u}){var k;const[g,m]=w.useState(!1),{handlers:b,getExplorerUrl:h,getReportUrl:f}=fi({onRetry:c,onSwitchWallet:l,onTopUp:u,network:e,hash:t}),v=t?`${t.substring(0,8)}...${t.substring(t.length-8)}`:"",B=t?h(t):null,I=r??wn[n]??wn.success,W=n==="error",R=W&&((k=o==null?void 0:o.recoveryActions)!=null&&k.length)?o.recoveryActions:[],X=async()=>{try{await navigator.clipboard.writeText(t),m(!0),setTimeout(()=>m(!1),2e3)}catch(G){console.error("Failed to copy transaction hash:",G)}};return!t&&n==="success"?null:i.jsxs("div",{className:`tx-status tx-status--${n}`,role:W?"alert":"status","aria-live":W?"assertive":"polite",children:[i.jsxs("div",{className:"tx-status-header",children:[i.jsx("span",{className:"tx-status-icon","aria-hidden":"true",children:yn[n]??yn.success}),i.jsx("span",{className:"tx-status-label",children:I})]}),a&&i.jsx("p",{className:"tx-status-message",children:a}),R.length>0&&i.jsx("div",{className:"tx-recovery-actions",role:"group","aria-label":"Recovery options",children:R.map(G=>{const S=Ta[G];if(!S)return null;if(G===D.VIEW_EXPLORER&&B)return i.jsxs("a",{href:B,target:"_blank",rel:"noopener noreferrer",className:"tx-recovery-btn tx-recovery-btn--secondary","aria-label":S.description,children:[S.label,i.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[i.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),i.jsx("polyline",{points:"15 3 21 3 21 9"}),i.jsx("line",{x1:"10",y1:"14",x2:"21",y2:"3"})]})]},G);if(G===D.REPORT)return i.jsx("a",{href:f((o==null?void 0:o.code)??null),target:"_blank",rel:"noopener noreferrer",className:"tx-recovery-btn tx-recovery-btn--ghost","aria-label":S.description,children:S.label},G);const j=G===D.RETRY||G===D.RE_SIGN;return i.jsx("button",{type:"button",className:`tx-recovery-btn ${j?"tx-recovery-btn--primary":"tx-recovery-btn--secondary"}`,onClick:()=>{var L;return(L=b[G])==null?void 0:L.call(b)},"aria-label":S.description,children:S.label},G)})}),t&&i.jsxs("div",{className:"tx-status-body",children:[i.jsxs("div",{className:"tx-hash-container",children:[i.jsx("span",{className:"tx-hash-label",children:"Transaction Hash"}),i.jsxs("div",{className:"tx-hash-row",children:[i.jsx("code",{className:"tx-hash-value",title:t,children:v}),i.jsx("button",{type:"button",className:`tx-copy-btn ${g?"copied":""}`,onClick:X,"aria-label":g?"Copied to clipboard":"Copy transaction hash",children:g?i.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:i.jsx("polyline",{points:"20 6 9 17 4 12"})}):i.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[i.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),i.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})})]})]}),B&&!R.includes(D.VIEW_EXPLORER)&&i.jsxs("a",{href:B,target:"_blank",rel:"noopener noreferrer",className:"tx-explorer-link",children:["View on Stellar Expert",i.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[i.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),i.jsx("polyline",{points:"15 3 21 3 21 9"}),i.jsx("line",{x1:"10",y1:"14",x2:"21",y2:"3"})]})]})]})]})}function rr({mapError:t=Pa}={}){const[e,n]=w.useState("idle"),[r,a]=w.useState(null),o=w.useRef(!1),c=w.useCallback(async(u,{optimistic:g,rollback:m,reconcile:b}={})=>{if(o.current)return{ok:!1,skipped:!0};o.current=!0,n("pending"),a(null);let h=!1;try{g&&(g(),h=!0);const f=await u();return b==null||b(f),n("success"),{ok:!0,result:f}}catch(f){h&&(m==null||m());const v=t(f);return a(v),n("error"),{ok:!1,error:v}}finally{o.current=!1}},[t]),l=w.useCallback(()=>{n("idle"),a(null)},[]);return{status:e,error:r,isPending:e==="pending",isSuccess:e==="success",isError:e==="error",run:c,reset:l}}const bi=80,it={getItem(t){if(typeof window>"u"||!window.localStorage)return null;try{return window.localStorage.getItem(t)}catch{return null}},setItem(t,e){if(!(typeof window>"u"||!window.localStorage))try{window.localStorage.setItem(t,e)}catch{}},removeItem(t){if(!(typeof window>"u"||!window.localStorage))try{window.localStorage.removeItem(t)}catch{}}};function Tt(t){if(typeof t!="string")return;const e=t.replace(/[^a-zA-Z0-9 _:\-./]/g,"").trim();if(e)return e.slice(0,bi)}function Oe(t,e={}){if(typeof window>"u"||typeof t!="string")return;const n={event:Tt(t)||"unknown_event",timestamp:new Date().toISOString(),metadata:Object.fromEntries(Object.entries(e).map(([r,a])=>[Tt(r),Tt(String(a))]).filter(([r,a])=>!!r&&!!a))};console.info("[analytics-safe]",n)}const xn="trivela_analytics_session",yi="trivela_analytics_consent",An="trivela_analytics_buffer",wi=10,xi=5e3;let Je=null,Lt=null,we=[],at=null;function vi(){return navigator.doNotTrack==="1"||navigator.doNotTrack==="yes"||window.doNotTrack==="1"}function Bi(){if(Je)return Je;const t=it.getItem(xn);return t?(Je=t,Je):(Je=`anon_${Zi()}`,it.setItem(xn,Je),Je)}function Zi(){const t=new Uint8Array(16);return crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("").substring(0,16)}function Ii(){return vi()?!1:(Lt===null&&(Lt=it.getItem(yi)==="true"),Lt!==!1)}function Ni(){const t=new URLSearchParams(window.location.search);return{source:t.get("utm_source")||void 0,medium:t.get("utm_medium")||void 0,campaign:t.get("utm_campaign")||void 0}}async function se(t,e={},n={}){if(!Ii())return;const r=Ni(),a={event_name:t,session_id:Bi(),campaign_id:n.campaignId||e.campaign_id,source:r.source,medium:r.medium,campaign:r.campaign,properties:Wi(e),timestamp:new Date().toISOString()};we.push(a),Bt(),we.length>=wi?await zt():(at&&clearTimeout(at),at=setTimeout(()=>zt(),xi))}function Wi(t){const e={...t},n=["wallet_address","ip","email","name","address"];for(const r of n)delete e[r];return e.balance_points&&(e.balance_points=Math.floor(e.balance_points/100)*100),e.amount_requested&&(e.amount_requested=Math.floor(e.amount_requested/100)*100),e.amount_claimed&&(e.amount_claimed=Math.floor(e.amount_claimed/100)*100),e}function Bt(){try{it.setItem(An,JSON.stringify(we))}catch(t){console.warn("Failed to save analytics buffer:",t)}}function Gi(){try{const t=it.getItem(An);t&&(we=JSON.parse(t))}catch(t){console.warn("Failed to load analytics buffer:",t),we=[]}}async function zt(){if(we.length===0)return;const t=[...we];we=[],Bt(),at&&(clearTimeout(at),at=null);try{(await fetch("/api/v1/analytics/events/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({events:t})})).ok||(we.unshift(...t),Bt())}catch{we.unshift(...t),Bt()}}function vn(){if(we.length>0){const t=new Blob([JSON.stringify({events:we})],{type:"application/json"});navigator.sendBeacon("/api/v1/analytics/events/batch",t),we=[],it.removeItem(An)}}typeof window<"u"&&(Gi(),we.length>0&&zt(),window.addEventListener("beforeunload",vn),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&vn()}));const bt={trackWalletConnectInitiated:(t,e,n)=>se("wallet_connect_initiated",{provider:t,page:e,campaign_id:n}),trackWalletConnectSuccess:(t,e,n)=>se("wallet_connect_success",{provider:t,network:e,time_to_connect_ms:n}),trackWalletConnectFailed:(t,e,n)=>se("wallet_connect_failed",{provider:t,error_type:e,time_to_failure_ms:n}),trackRegistrationViewed:(t,e,n,r)=>se("registration_viewed",{campaign_id:t,privacy_mode:e,is_registered:n,time_remaining_hours:r}),trackRegistrationInitiated:(t,e,n)=>se("registration_initiated",{campaign_id:t,privacy_mode:e,has_allowlist_proof:n}),trackRegistrationTxSigned:(t,e,n)=>se("registration_tx_signed",{campaign_id:t,privacy_mode:e,time_to_sign_ms:n}),trackRegistrationSuccess:(t,e,n,r,a)=>se("registration_success",{campaign_id:t,privacy_mode:e,tx_fee_xlm:n,time_to_confirm_ms:r,already_registered:a}),trackRegistrationFailed:(t,e,n,r)=>se("registration_failed",{campaign_id:t,privacy_mode:e,error_type:n,stage:r}),trackRewardsViewed:(t,e,n)=>se("rewards_viewed",{campaign_id:t,balance_points:e,has_payout_asset:n}),trackClaimInitiated:(t,e,n)=>se("claim_initiated",{campaign_id:t,claim_type:e,amount_requested:n}),trackClaimTxSigned:(t,e,n)=>se("claim_tx_signed",{campaign_id:t,claim_type:e,time_to_sign_ms:n}),trackClaimSuccess:(t,e,n,r,a)=>se("claim_success",{campaign_id:t,claim_type:e,amount_claimed:n,tx_fee_xlm:r,time_to_confirm_ms:a}),trackClaimFailed:(t,e,n,r)=>se("claim_failed",{campaign_id:t,claim_type:e,error_type:n,stage:r}),trackCampaignListViewed:(t,e,n)=>se("campaign_list_viewed",{filter_status:t,filter_category:e,campaigns_visible:n}),trackCampaignCardClicked:(t,e,n,r)=>se("campaign_card_clicked",{campaign_id:t,campaign_status:e,position:n,source_page:r}),trackCampaignDetailViewed:(t,e,n,r,a)=>se("campaign_detail_viewed",{campaign_id:t,campaign_status:e,has_payout_asset:n,privacy_mode:r,days_remaining:a}),trackCampaignCreateStarted:(t,e)=>se("campaign_create_started",{is_admin:t,has_created_before:e}),trackCampaignCreateStepCompleted:(t,e,n)=>se("campaign_create_step_completed",{step:t,step_number:e,time_on_step_ms:n}),trackCampaignCreateSuccess:(t,e,n,r,a)=>se("campaign_create_success",{campaign_id:t,privacy_mode:e,has_payout_asset:n,total_time_ms:r,steps_visited:a}),trackCampaignCreateAbandoned:(t,e)=>se("campaign_create_abandoned",{last_step:t,time_spent_ms:e}),trackSessionStarted:(t,e,n,r,a)=>se("session_started",{entry_page:t,source:e,medium:n,campaign:r,referrer_domain:a}),trackPageViewed:(t,e,n)=>se("page_viewed",{page_path:t,page_title:e,previous_page:n})};function Si({walletAddress:t,hasPayoutAsset:e=!1,onClaimSuccess:n}){const[r,a]=w.useState(""),[o,c]=w.useState(""),[l,u]=w.useState(null),[g,m]=w.useState(""),[b,h]=w.useState(e?"redeem":"claim"),f=w.useId(),v=w.useId(),B=w.useId(),I=an(),{run:W,isPending:R,isError:X,error:k}=rr();w.useEffect(()=>{e&&t&&fn().then(m).catch(()=>m(""))},[e,t]),w.useEffect(()=>{h(e?"redeem":"claim")},[e]);const G=Number(r),S=Number.isInteger(G)&&G>0,j=o||X?B:void 0,L=async z=>{if(z.preventDefault(),!t||!S)return;c(""),u(null);const _=r;b==="redeem"?await W(()=>ui(t,G),{optimistic:()=>a(""),rollback:()=>a(_),reconcile:({hash:O,assetAmount:H})=>{c(O),u({points:_,asset:H}),n==null||n(),fn().then(m).catch(()=>{})}}):await W(()=>di(t,G),{optimistic:()=>a(""),rollback:()=>a(_),reconcile:({hash:O,newBalance:H})=>{c(O),n==null||n(H)}})};return i.jsxs("section",{className:"claim-section","aria-labelledby":v,children:[i.jsx("h3",{id:v,className:"claim-heading",children:b==="redeem"?"Redeem for asset":"Claim rewards"}),e&&i.jsxs("div",{className:"claim-mode-toggle",style:{display:"flex",gap:"8px",marginBottom:"12px"},children:[i.jsx("button",{type:"button",className:`btn ${b==="redeem"?"btn-primary":"btn-secondary"}`,onClick:()=>h("redeem"),style:{fontSize:"0.85rem",padding:"6px 12px"},children:"Redeem asset"}),i.jsx("button",{type:"button",className:`btn ${b==="claim"?"btn-primary":"btn-secondary"}`,onClick:()=>h("claim"),style:{fontSize:"0.85rem",padding:"6px 12px"},children:"Claim points"})]}),b==="redeem"&&g&&i.jsxs("p",{className:"claim-reserve-info",style:{fontSize:"0.85rem",color:"#94a3b8",marginBottom:"8px"},children:["Reserve: ",g," tokens available"]}),i.jsxs("form",{className:"claim-form",onSubmit:L,children:[i.jsx("label",{htmlFor:f,className:"claim-label",children:b==="redeem"?"Points to redeem":"Amount to claim"}),i.jsxs("div",{className:"claim-input-row",children:[i.jsx("input",{id:f,type:"number",min:"1",step:"1",placeholder:"e.g. 100",className:"claim-input",value:r,disabled:R||!t,"aria-invalid":X,"aria-describedby":j,onChange:z=>a(z.target.value)}),i.jsx("button",{type:"submit",className:"btn btn-primary btn-button",disabled:!t||!S||R,children:R?"Signing…":b==="redeem"?"Redeem":"Claim"})]})]}),R&&i.jsx(ut,{variant:"pending",network:I,status:b==="redeem"?"Redeeming…":"Claiming…"}),!R&&o&&i.jsx(ut,{hash:o,network:I,status:"Transaction confirmed"}),!R&&l&&i.jsxs("div",{className:"claim-redeem-result",style:{background:"rgba(34, 197, 94, 0.1)",border:"1px solid rgba(34, 197, 94, 0.3)",borderRadius:"8px",padding:"10px 14px",marginTop:"8px",fontSize:"0.9rem"},children:["Redeemed ",l.points," points → received ",l.asset," tokens"]}),X&&k&&i.jsxs("p",{id:B,className:"claim-error",role:"alert",children:[k.message,k.recovery?` ${k.recovery}.`:""]})]})}const me={NONE:0,MERKLE:1,ZK:2},Ri={[me.NONE]:"Open",[me.MERKLE]:"Allowlist",[me.ZK]:"Zero-Knowledge"},Ci={background:"rgba(99, 102, 241, 0.1)",border:"1px solid rgba(99, 102, 241, 0.3)",borderRadius:"8px",padding:"10px 14px",fontSize:"0.85rem",color:"#a5b4fc",marginTop:"8px"},ki={background:"rgba(251, 191, 36, 0.1)",border:"1px solid rgba(251, 191, 36, 0.3)",borderRadius:"8px",padding:"10px 14px",fontSize:"0.85rem",color:"#fbbf24",marginTop:"8px"};function Ei({walletAddress:t,onRegistered:e}){const[n,r]=w.useState(null),[a,o]=w.useState(!1),[c,l]=w.useState(""),[u,g]=w.useState(""),[m,b]=w.useState(""),[h,f]=w.useState(null),[v,B]=w.useState(!1),[I,W]=w.useState(null),[R,X]=w.useState(null),k=w.useId(),G=w.useId(),S=mt(),j=an(),{run:L,isPending:z,isError:_,error:O}=rr();w.useEffect(()=>{if(!S)return;let N=!1;const V=new dt.CampaignClient({rpcUrl:Fe(),networkPassphrase:ve(),contractId:S});return Promise.all([V.get_privacy_mode().then(Q=>Q.simulate()),V.is_fallback_allowed().then(Q=>Q.simulate())]).then(([Q,ie])=>{N||(f(Q),B(ie))}).catch(()=>{N||f(me.NONE)}),()=>{N=!0}},[S]),w.useEffect(()=>{if(h!==me.ZK)return;let N=!1;return(async()=>{try{if(typeof Worker>"u"){N||W(!1);return}if(typeof WebAssembly>"u"){N||W(!1);return}N||W(!0)}catch{N||W(!1)}})(),()=>{N=!0}},[h]),w.useEffect(()=>{if(!t||!S){r(null),g(""),b("");return}let N=!1;return o(!0),g(""),b(""),bt.trackRegistrationViewed(S,h===me.NONE?"open":h===me.MERKLE?"merkle":"zk",n,null),pi(t).then(V=>{N||r(V)}).catch(V=>{N||g(nr(V))}).finally(()=>{N||o(!1)}),()=>{N=!0}},[t,S,h]);const H=async()=>{if(!t)return;b(""),l(""),g("");const N=n,V=Date.now();X(V),bt.trackRegistrationInitiated(S,h===me.NONE?"open":h===me.MERKLE?"merkle":"zk",!1),await L(()=>hi(t),{optimistic:()=>r(!0),rollback:()=>{r(N),bt.trackRegistrationFailed(S,h===me.NONE?"open":h===me.MERKLE?"merkle":"zk","unknown","rollback")},reconcile:({hash:Q,alreadyRegistered:ie})=>{l(Q);const J=Date.now()-V;ie?b("You were already registered in this campaign."):e==null||e(),bt.trackRegistrationSuccess(S,h===me.NONE?"open":h===me.MERKLE?"merkle":"zk","0.0001",J,ie||!1)}})};if(!S)return null;const P=h!==null?Ri[h]:"…",$=a?"Checking…":z?"Registering…":n===!0?"✓ Registered":n===!1?"Not registered":"—",q=!n&&(h!==me.ZK||I===!0||I===!1&&v),M=h===me.ZK&&I===!1&&!v;return i.jsxs("section",{className:"register-section","aria-labelledby":k,"aria-busy":a||z,children:[i.jsx("h3",{id:k,className:"register-heading",children:"Campaign registration"}),i.jsxs("div",{className:"register-status",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"8px"},children:[i.jsxs("div",{children:[i.jsx("span",{className:"register-status-label",children:"Participant status "}),i.jsx("strong",{id:G,className:n?"register-active":"","aria-live":"polite",children:$})]}),h!==null&&i.jsxs("span",{style:{fontSize:"0.75rem",padding:"3px 8px",borderRadius:"12px",background:"rgba(99, 102, 241, 0.15)",color:"#a5b4fc"},children:[P," mode"]})]}),q&&i.jsx("button",{type:"button",className:"btn btn-primary btn-button",disabled:z||a||!t,"aria-describedby":G,onClick:H,children:z?"Signing…":"Register in campaign"}),M&&i.jsx("div",{style:ki,children:"Your browser does not support zero-knowledge proofs. Contact the campaign operator to enable fallback registration."}),h===me.ZK&&I===!0&&!n&&i.jsx("div",{style:Ci,children:"This campaign uses zero-knowledge proofs for privacy-preserving registration."}),z&&i.jsx(ut,{variant:"pending",network:j,status:"Registering…"}),!z&&c&&i.jsx(ut,{hash:c,network:j,status:"Registered"}),m&&i.jsx("p",{className:"register-note",role:"status",children:m}),_&&O&&i.jsxs("p",{className:"register-error",role:"alert",children:[O.message,O.recovery?` ${O.recovery}.`:""]}),u&&i.jsx("p",{className:"register-error",role:"alert",children:u})]})}function Vi({network:t="testnet",onChange:e}){return null}const Fi=3e4;function ji(t){const e=Date.now()-new Date(t).getTime(),n=Math.floor(e/6e4);if(n<1)return"just now";if(n<60)return`${n}m ago`;const r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Xi(){const[t,e]=w.useState(!1),[n,r]=w.useState([]),[a,o]=w.useState(0),[c,l]=w.useState(!1),u=w.useRef(null),g=w.useRef(null),m=w.useCallback(async()=>{try{const f=await rt.getNotifications({limit:20}),v=Array.isArray(f)?f:f.data??f.notifications??[];r(v),o(v.filter(B=>!B.read).length)}catch{}},[]);w.useEffect(()=>{m();const f=setInterval(m,Fi);return()=>clearInterval(f)},[m]),w.useEffect(()=>{if(!t)return;function f(B){B.key==="Escape"&&e(!1)}function v(B){u.current&&!u.current.contains(B.target)&&g.current&&!g.current.contains(B.target)&&e(!1)}return document.addEventListener("keydown",f),document.addEventListener("mousedown",v),()=>{document.removeEventListener("keydown",f),document.removeEventListener("mousedown",v)}},[t]);const b=async f=>{try{await rt.markNotificationRead(f),r(v=>v.map(B=>B.id===f?{...B,read:!0}:B)),o(v=>Math.max(0,v-1))}catch{}},h=async()=>{l(!0);try{await rt.markAllNotificationsRead(),r(f=>f.map(v=>({...v,read:!0}))),o(0)}catch{}finally{l(!1)}};return i.jsxs("div",{style:{position:"relative",display:"inline-flex"},children:[i.jsxs("button",{ref:g,type:"button",className:"btn btn-secondary btn-button","aria-label":`Notifications${a>0?`, ${a} unread`:""}`,"aria-expanded":t,"aria-haspopup":"true",onClick:()=>e(f=>!f),style:{position:"relative",padding:"0.45rem 0.75rem"},children:[i.jsx("span",{"aria-hidden":"true",children:"🔔"}),a>0&&i.jsx("span",{"aria-hidden":"true",style:{position:"absolute",top:2,right:2,background:"var(--danger)",color:"#fff",borderRadius:"999px",fontSize:"0.65rem",fontWeight:700,minWidth:16,height:16,display:"flex",alignItems:"center",justifyContent:"center",padding:"0 4px"},children:a>99?"99+":a})]}),t&&i.jsxs("div",{ref:u,role:"dialog","aria-label":"Notifications",style:{position:"absolute",top:"calc(100% + 8px)",right:0,width:"min(360px, 92vw)",background:"var(--bg-card-solid)",border:"1px solid var(--border)",borderRadius:14,boxShadow:"var(--shadow-lg)",zIndex:100,overflow:"hidden"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderBottom:"1px solid var(--border)"},children:[i.jsx("h2",{style:{margin:0,fontSize:"0.95rem",fontWeight:700},children:"Notifications"}),i.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[a>0&&i.jsx("button",{type:"button",className:"btn btn-secondary",onClick:h,disabled:c,style:{fontSize:"0.75rem",padding:"3px 10px"},children:"Mark all read"}),i.jsx("button",{type:"button","aria-label":"Close notifications",onClick:()=>e(!1),style:{background:"none",border:"none",cursor:"pointer",color:"var(--text-muted)",fontSize:"1.1rem",lineHeight:1,padding:"2px 4px"},children:"✕"})]})]}),i.jsx("ul",{role:"list",style:{listStyle:"none",margin:0,padding:0,maxHeight:360,overflowY:"auto"},children:n.length===0?i.jsx("li",{style:{padding:"32px 16px",textAlign:"center",color:"var(--text-muted)",fontSize:"0.875rem"},children:"No notifications yet."}):n.map(f=>i.jsxs("li",{style:{display:"flex",gap:12,padding:"12px 16px",borderBottom:"1px solid var(--border)",background:f.read?"transparent":"var(--accent-soft)",cursor:f.read?"default":"pointer"},onClick:()=>!f.read&&b(f.id),children:[i.jsxs("div",{style:{flex:1,minWidth:0},children:[i.jsx("p",{style:{margin:0,fontSize:"0.875rem",fontWeight:f.read?400:600,color:"var(--text)",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:f.title??f.message??"New notification"}),f.body&&i.jsx("p",{style:{margin:"2px 0 0",fontSize:"0.8rem",color:"var(--text-muted)"},children:f.body}),i.jsx("p",{style:{margin:"4px 0 0",fontSize:"0.72rem",color:"var(--text-muted)"},children:f.created_at?ji(f.created_at):""})]}),!f.read&&i.jsx("span",{"aria-label":"Unread",style:{flexShrink:0,width:8,height:8,borderRadius:"50%",background:"var(--accent)",marginTop:6}})]},f.id))})]})]})}function Yi({isOpen:t,onClose:e,publicKey:n,onSuccess:r}){const[a,o]=w.useState(!1),[c,l]=w.useState(null),[u,g]=w.useState(!1),[m,b]=w.useState(null),h=Mr(),f=async()=>{if(!n){l("No wallet connected");return}o(!0),l(null),g(!1);try{const v=await fetch("/api/v1/faucet/fund",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({publicKey:n})}),B=await v.json();if(!v.ok)throw new Error(B.error||"Failed to fund account");g(!0),b(B.hash),r==null||r(B)}catch(v){l(v.message)}finally{o(!1)}};return t?i.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:i.jsxs("div",{className:"bg-white rounded-lg p-6 max-w-md w-full mx-4",children:[i.jsxs("div",{className:"flex justify-between items-center mb-4",children:[i.jsx("h2",{className:"text-xl font-bold",children:"Fund Testnet Account"}),i.jsx("button",{onClick:e,className:"text-gray-500 hover:text-gray-700",children:"✕"})]}),h.network!=="testnet"?i.jsx("div",{className:"bg-yellow-50 border border-yellow-200 rounded-lg p-4",children:i.jsxs("p",{className:"text-yellow-800 text-sm",children:[i.jsx("strong",{children:"Mainnet Notice:"})," The faucet is only available on testnet. To acquire assets on mainnet, please use a Stellar exchange or transfer from another wallet."]})}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"mb-4",children:[i.jsx("p",{className:"text-gray-600 text-sm mb-2",children:"Get 10,000 test XLM from Friendbot to start participating in campaigns."}),i.jsxs("div",{className:"bg-gray-50 rounded-lg p-3",children:[i.jsx("p",{className:"text-xs text-gray-500 mb-1",children:"Connected Wallet:"}),i.jsx("p",{className:"text-sm font-mono break-all",children:n||"Not connected"})]})]}),c&&i.jsx("div",{className:"bg-red-50 border border-red-200 rounded-lg p-3 mb-4",children:i.jsx("p",{className:"text-red-800 text-sm",children:c})}),u&&i.jsxs("div",{className:"bg-green-50 border border-green-200 rounded-lg p-3 mb-4",children:[i.jsx("p",{className:"text-green-800 text-sm font-medium mb-1",children:"✓ Account funded successfully!"}),m&&i.jsxs("p",{className:"text-xs text-green-600 font-mono break-all",children:["TX: ",m]})]}),i.jsxs("div",{className:"flex gap-3",children:[i.jsx("button",{onClick:f,disabled:a||!n||u,className:"flex-1 bg-blue-600 text-white py-2 px-4 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors",children:a?"Funding...":u?"Funded":"Fund Account"}),i.jsx("button",{onClick:e,className:"px-4 py-2 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors",children:"Close"})]}),i.jsx("p",{className:"text-xs text-gray-400 mt-3",children:"Rate limited to 5 requests per hour to prevent abuse."})]})]})}):null}const Mt={"nav.campaigns":"Campaigns","nav.explore":"Explore","nav.analytics":"Analytics","nav.notifications":"Notifications","nav.about":"About","nav.admin":"Admin","nav.github":"GitHub","nav.stellar":"Stellar","wallet.connect":"Connect wallet","wallet.disconnect":"Disconnect","wallet.connecting":"Connecting…","wallet.modal.title":"Connect wallet","wallet.modal.detected":"Detected","wallet.modal.install":"Install →","wallet.modal.soon":"Soon","wallet.modal.newToStellar":"New to Stellar?","wallet.modal.newToStellarDesc":"are great places to start.","wallet.modal.comingSoon":"WalletConnect integration coming soon","wallet.error.notFound":"Wallet not found","wallet.balance":"Balance","wallet.points":"My points","wallet.freighter.desc":"The official Stellar browser extension wallet","wallet.xbull.desc":"Feature-rich Stellar wallet with DeFi support","wallet.lobstr.desc":"Popular mobile & desktop Stellar wallet","wallet.walletconnect.desc":"Connect any compatible mobile wallet via QR code","wallet.rabet.desc":"Lightweight Stellar browser extension","campaigns.title":"Campaigns","campaigns.search":"Search campaigns…","campaigns.empty":"No campaigns found","campaigns.loading":"Loading campaigns…","campaigns.error":"Could not load campaigns","campaigns.retry":"Retry","campaigns.activeOnly":"Active only","campaigns.sort.newest":"Newest","campaigns.sort.oldest":"Oldest","campaigns.sort.nameAsc":"Name A–Z","campaigns.sort.nameDesc":"Name Z–A","campaigns.sort.rewardDesc":"Highest reward","campaigns.join":"Join campaign","campaigns.claim":"Claim rewards","common.loading":"Loading…","common.error":"An error occurred","common.retry":"Retry","common.apply":"Apply","common.reset":"Reset","common.close":"Close","common.save":"Save","common.cancel":"Cancel","common.previous":"Previous","common.next":"Next","common.darkMode":"Dark mode","common.lightMode":"Light mode","common.language":"Language","points.myPoints":"My points","points.totalPoints":"Total points","points.loading":"Loading points…","points.refresh":"Refresh points","points.claim":"Claim","network.testnet":"Testnet","network.mainnet":"Mainnet","network.switch":"Switch network","audit.title":"Org Activity Feed","audit.subtitle":"All privileged actions taken by org members.","audit.export.csv":"Export CSV","audit.export.json":"Export JSON","audit.filter.actor":"Actor","audit.filter.action":"Action","audit.filter.resource":"Resource","audit.filter.from":"From","audit.filter.to":"To","audit.filter.allActions":"All actions","audit.filter.actorPlaceholder":"Wallet or user ID","audit.filter.resourcePlaceholder":"campaign/member/key…","audit.empty":"No audit entries match your filters.","audit.loading":"Loading audit log…","audit.error":"Could not load audit log.","audit.col.timestamp":"Timestamp","audit.col.actor":"Actor","audit.col.action":"Action","audit.col.resource":"Resource","audit.col.details":"Details","admin.title":"Admin","admin.campaigns":"Manage campaigns","about.title":"About Trivela"},_i={"nav.campaigns":"活动","nav.explore":"探索","nav.analytics":"数据分析","nav.notifications":"通知","nav.about":"关于","nav.admin":"管理员","nav.github":"GitHub","nav.stellar":"Stellar","wallet.connect":"连接钱包","wallet.disconnect":"断开连接","wallet.connecting":"连接中…","wallet.modal.title":"连接钱包","wallet.modal.detected":"已检测到","wallet.modal.install":"安装 →","wallet.modal.soon":"即将推出","wallet.modal.newToStellar":"初次使用 Stellar?","wallet.modal.newToStellarDesc":"是很好的起点。","wallet.modal.comingSoon":"WalletConnect 集成即将推出","wallet.error.notFound":"未找到钱包","wallet.balance":"余额","wallet.points":"我的积分","wallet.freighter.desc":"官方 Stellar 浏览器扩展钱包","wallet.xbull.desc":"功能丰富的 Stellar DeFi 钱包","wallet.lobstr.desc":"流行的移动端和桌面端 Stellar 钱包","wallet.walletconnect.desc":"通过二维码连接任意兼容的移动端钱包","wallet.rabet.desc":"轻量级 Stellar 浏览器扩展","campaigns.title":"活动列表","campaigns.search":"搜索活动…","campaigns.empty":"未找到任何活动","campaigns.loading":"加载活动中…","campaigns.error":"无法加载活动","campaigns.retry":"重试","campaigns.activeOnly":"仅显示进行中","campaigns.sort.newest":"最新","campaigns.sort.oldest":"最早","campaigns.sort.nameAsc":"名称 A–Z","campaigns.sort.nameDesc":"名称 Z–A","campaigns.sort.rewardDesc":"最高奖励","campaigns.join":"加入活动","campaigns.claim":"领取奖励","common.loading":"加载中…","common.error":"发生错误","common.retry":"重试","common.apply":"应用","common.reset":"重置","common.close":"关闭","common.save":"保存","common.cancel":"取消","common.previous":"上一页","common.next":"下一页","common.darkMode":"深色模式","common.lightMode":"浅色模式","common.language":"语言","points.myPoints":"我的积分","points.totalPoints":"总积分","points.loading":"积分加载中…","points.refresh":"刷新积分","points.claim":"领取","network.testnet":"测试网","network.mainnet":"主网","network.switch":"切换网络","audit.title":"组织操作记录","audit.subtitle":"记录所有组织成员的特权操作。","audit.export.csv":"导出 CSV","audit.export.json":"导出 JSON","audit.filter.actor":"操作者","audit.filter.action":"操作类型","audit.filter.resource":"资源","audit.filter.from":"开始日期","audit.filter.to":"结束日期","audit.filter.allActions":"全部操作","audit.filter.actorPlaceholder":"钱包地址或用户 ID","audit.filter.resourcePlaceholder":"活动/成员/密钥…","audit.empty":"没有符合筛选条件的审计记录。","audit.loading":"加载审计日志中…","audit.error":"无法加载审计日志。","audit.col.timestamp":"时间","audit.col.actor":"操作者","audit.col.action":"操作","audit.col.resource":"资源","audit.col.details":"详情","admin.title":"管理员","admin.campaigns":"管理活动","about.title":"关于 Trivela"},ar={en:Mt,"zh-CN":_i},ir="trivela_locale",Nt=Object.keys(ar);function Ti(){try{const e=localStorage.getItem(ir);if(e&&Nt.includes(e))return e}catch{}return(navigator.language??"en").startsWith("zh")?"zh-CN":"en"}const sr=w.createContext({locale:"en",setLocale:()=>{},t:t=>t});function Li({children:t}){const[e,n]=w.useState(Ti),r=w.useCallback(c=>{if(Nt.includes(c)){n(c);try{localStorage.setItem(ir,c)}catch{}}},[]);w.useEffect(()=>{document.documentElement.lang=e},[e]);const a=w.useCallback((c,l)=>(ar[e]??Mt)[c]??Mt[c]??l??c,[e]),o=w.useMemo(()=>({locale:e,setLocale:r,t:a,supported:Nt}),[e,r,a]);return i.jsx(sr.Provider,{value:o,children:t})}function ln(){return w.useContext(sr)}const Hi={en:"EN","zh-CN":"中文"};function Ji(t){return t?t.length<=14?t:`${t.slice(0,6)}...${t.slice(-4)}`:""}const Pi=[{href:"/analytics",key:"nav.analytics"},{href:"/notification-settings",key:"nav.notifications"},{href:"https://github.com/FinesseStudioLab/Trivela",key:"nav.github"},{href:"https://developers.stellar.org/docs",key:"nav.stellar"},{href:"/",key:"nav.campaigns"},{href:"/explore",key:"nav.explore"},{href:"/about",key:"nav.about"},{href:"/admin",key:"nav.admin"}];function or({theme:t="dark",onToggleTheme:e,stellarNetwork:n="testnet",onChangeStellarNetwork:r,walletAddress:a="",walletBalance:o="",isWalletBalanceLoading:c=!1,isWalletLoading:l=!1,onConnectWallet:u,onDisconnectWallet:g}){const m=t==="dark"?"light":"dark",{t:b,locale:h,setLocale:f}=ln(),v=`${b(n==="mainnet"?"network.mainnet":"network.testnet")} balance`,B=Pi.map(N=>({...N,label:b(N.key)})),{pathname:I}=tn(),[W,R]=w.useState(!1),[X,k]=w.useState(!1),[G,S]=w.useState(null),[j,L]=w.useState("red"),[z,_]=w.useState(!1),[O,H]=w.useState(()=>{try{const N=localStorage.getItem("rpc_latency_history");return N?JSON.parse(N):[]}catch{return[]}});w.useEffect(()=>{const N=async()=>{const Q=Date.now();try{const ie=await fetch(U("/health/rpc")),ee=Date.now()-Q;if(ie.ok){S(ee);let le="green";ee>=2e3?le="red":ee>=500&&(le="yellow"),L(le),H(Be=>{const Ge=[...Be.slice(-4),ee];return localStorage.setItem("rpc_latency_history",JSON.stringify(Ge)),Ge})}else S(null),L("red"),H(le=>{const Be=[...le.slice(-4),0];return localStorage.setItem("rpc_latency_history",JSON.stringify(Be)),Be})}catch{S(null),L("red"),H(J=>{const ee=[...J.slice(-4),0];return localStorage.setItem("rpc_latency_history",JSON.stringify(ee)),ee})}};N();const V=setInterval(N,3e4);return()=>clearInterval(V)},[n]);const P=n==="mainnet"?"https://soroban-mainnet.stellar.org":"https://soroban-testnet.stellar.org",$=G!==null?`RPC Latency: ${G}ms — ${n==="mainnet"?"Mainnet":"Testnet"}`:`RPC Offline — ${n==="mainnet"?"Mainnet":"Testnet"}`,q=()=>R(N=>!N),M=()=>R(!1);return i.jsxs(i.Fragment,{children:[i.jsx("header",{className:"site-header",children:i.jsxs("nav",{className:"nav","aria-label":"Primary",children:[i.jsxs("div",{className:"nav-top-row",children:[i.jsxs("a",{href:"/",className:"nav-logo","aria-label":"Trivela home",onClick:M,children:[i.jsx("span",{className:"nav-logo-icon","aria-hidden":"true",children:"◇"}),"Trivela"]}),i.jsxs("button",{type:"button",className:"nav-hamburger",onClick:q,"aria-expanded":W,"aria-controls":"nav-mobile-menu","aria-label":W?"Close navigation menu":"Open navigation menu",children:[i.jsx("span",{className:"nav-hamburger-bar","aria-hidden":"true"}),i.jsx("span",{className:"nav-hamburger-bar","aria-hidden":"true"}),i.jsx("span",{className:"nav-hamburger-bar","aria-hidden":"true"})]})]}),i.jsxs("div",{id:"nav-mobile-menu",className:`nav-actions${W?" nav-actions--open":""}`,children:[i.jsxs("div",{className:"nav-links",children:[B.map(N=>{const V=N.href.startsWith("http");return i.jsx("a",{href:N.href,...V?{target:"_blank",rel:"noopener noreferrer"}:{},children:N.label},N.href)}),B.map(N=>i.jsx("a",{href:N.href,className:I===N.href?"nav-link-active":void 0,"aria-current":I===N.href?"page":void 0,onClick:M,children:N.label},N.href)),a&&i.jsx("a",{href:"/profile",className:I==="/profile"?"nav-link-active":void 0,"aria-current":I==="/profile"?"page":void 0,onClick:M,children:"Profile"}),a&&i.jsx("a",{href:"/history",className:I==="/history"?"nav-link-active":void 0,"aria-current":I==="/history"?"page":void 0,onClick:M,children:"History"})]}),i.jsxs("div",{className:"nav-utilities",children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",position:"relative"},children:[i.jsxs("button",{type:"button",onClick:()=>_(!z),style:{background:"none",border:"none",padding:"4px",cursor:"pointer",display:"flex",alignItems:"center",gap:"6px"},title:$,children:[i.jsx("span",{style:{width:"10px",height:"10px",borderRadius:"50%",backgroundColor:j==="green"?"#10b981":j==="yellow"?"#f59e0b":"#ef4444",display:"inline-block"}}),G!==null&&i.jsxs("span",{style:{fontSize:"0.75rem",color:"var(--color-text-secondary, #94a3b8)"},children:[G,"ms"]})]}),z&&i.jsxs("div",{style:{position:"absolute",top:"100%",right:0,backgroundColor:"var(--color-surface, #1e293b)",border:"1px solid var(--color-border, #334155)",borderRadius:"8px",padding:"16px",zIndex:100,width:"260px",textAlign:"left",boxShadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)"},children:[i.jsx("h4",{style:{margin:"0 0 8px 0",fontSize:"0.875rem",fontWeight:600,color:"var(--color-text, #f8fafc)"},children:"Soroban RPC Status"}),i.jsxs("p",{style:{margin:"0 0 12px 0",fontSize:"0.75rem",color:"var(--color-text-secondary, #94a3b8)",wordBreak:"break-all"},children:[i.jsx("strong",{children:"URL:"})," ",P]}),i.jsxs("div",{style:{marginBottom:"12px"},children:[i.jsx("p",{style:{margin:"0 0 4px 0",fontSize:"0.75rem",fontWeight:600,color:"var(--color-text, #f8fafc)"},children:"Latency Sparkline (last 5):"}),i.jsx("div",{style:{display:"flex",alignItems:"flex-end",gap:"4px",height:"30px",background:"rgba(0,0,0,0.2)",padding:"4px",borderRadius:"4px"},children:O.map((N,V)=>{const Q=Math.max(...O,500),ie=N>0?N/Q*100:5,J=N===0?"#ef4444":N<500?"#10b981":N<2e3?"#f59e0b":"#ef4444";return i.jsx("div",{style:{flex:1,height:`${ie}%`,backgroundColor:J,borderRadius:"2px"},title:N>0?`${N}ms`:"Failed/Error"},V)})})]}),i.jsx("a",{href:"https://stellar.org/status",target:"_blank",rel:"noopener noreferrer",style:{fontSize:"0.75rem",color:"#38bdf8",textDecoration:"underline"},children:"Stellar Network Status"})]})]}),i.jsx(Xi,{}),i.jsx(Vi,{network:n,onChange:r}),a&&i.jsxs("p",{className:"nav-wallet","aria-live":"polite",children:[i.jsx("span",{className:"nav-wallet-label",children:"Wallet"}),i.jsx("span",{className:"nav-wallet-value",children:Ji(a)})]}),a&&i.jsxs("p",{className:"nav-wallet nav-wallet-balance","aria-live":"polite",children:[i.jsx("span",{className:"nav-wallet-label",children:v}),i.jsx("span",{className:"nav-wallet-value",children:c?"Loading…":o||"0 XLM"})]}),a&&n==="testnet"&&i.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>k(!0),style:{fontSize:"0.85rem",padding:"6px 12px"},children:"💧 Fund"}),u&&i.jsx("button",{type:"button",className:"btn btn-primary btn-button wallet-toggle",onClick:a?g:u,disabled:l,"aria-label":b(a?"wallet.disconnect":"wallet.connect"),children:l?b("wallet.connecting"):a?b("wallet.disconnect"):j==="red"?`${b("wallet.connect")} (Network degraded)`:b("wallet.connect")}),i.jsxs("button",{type:"button",className:"btn btn-secondary btn-button theme-toggle",onClick:e,"aria-label":`Switch to ${m} theme`,children:[i.jsx("span",{className:"theme-toggle-label",children:b(t==="dark"?"common.lightMode":"common.darkMode")}),i.jsx("span",{className:"theme-toggle-state","aria-hidden":"true",children:t})]}),i.jsx("select",{value:h,onChange:N=>f(N.target.value),"aria-label":b("common.language"),style:{background:"var(--color-surface, #1e293b)",border:"1px solid var(--color-border, rgba(255,255,255,0.1))",borderRadius:"6px",color:"var(--color-text, #e2e8f0)",fontSize:"0.8rem",padding:"4px 8px",cursor:"pointer"},children:Nt.map(N=>i.jsx("option",{value:N,children:Hi[N]??N},N))})]})]})]})}),i.jsx(Yi,{isOpen:X,onClose:()=>k(!1),publicKey:a,onSuccess:()=>{k(!1),u&&typeof u=="function"&&window.location.reload()}})]})}const Ui=({status:t})=>{const e=(t==null?void 0:t.toLowerCase())||"active",n=r=>{switch(r){case"upcoming":return"Upcoming";case"ended":return"Ended";case"active":default:return"Active"}};return i.jsxs("span",{className:`status-badge status-${e}`,children:[i.jsx("span",{className:"status-dot"}),n(e)]})};function Ar(t,e=new Date){if(!t)return null;const n=new Date(t);if(Number.isNaN(n.getTime()))return null;const r=n.getTime()-e.getTime();if(r<0)return null;const a=Math.floor(r/(1e3*60*60)),o=Math.floor(r%(1e3*60*60)/(1e3*60));return{hours:a,minutes:o,totalMs:r}}function Oi(t,e){return t===0&&e===0?"Ending soon":t===0?`${e}m`:e===0?`${t}h`:`${t}h ${e}m`}function Di(t,e=new Date){const n=Ar(t,e);if(!n)return!1;const r=24*60*60*1e3;return n.totalMs c(q,xe))Qp)&&(A=p);let y="";for(let x=s;xp&&(s=p),A<0?(A+=p,A<0&&(A=0)):A>p&&(A=p),AA)throw new RangeError("Trying to access beyond buffer length")}l.prototype.readUintLE=l.prototype.readUIntLE=function(s,A,p){s=s>>>0,A=A>>>0,p||J(s,A,this.length);let y=this[s],x=1,Z=0;for(;++Z>>0,A=A>>>0,p||J(s,A,this.length);let y=this[s+--A],x=1;for(;A>0&&(x*=256);)y+=this[s+--A]*x;return y},l.prototype.readUint8=l.prototype.readUInt8=function(s,A){return s=s>>>0,A||J(s,1,this.length),this[s]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(s,A){return s=s>>>0,A||J(s,2,this.length),this[s]|this[s+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(s,A){return s=s>>>0,A||J(s,2,this.length),this[s]<<8|this[s+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(s,A){return s=s>>>0,A||J(s,4,this.length),(this[s]|this[s+1]<<8|this[s+2]<<16)+this[s+3]*16777216},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(s,A){return s=s>>>0,A||J(s,4,this.length),this[s]*16777216+(this[s+1]<<16|this[s+2]<<8|this[s+3])},l.prototype.readBigUInt64LE=ue(function(s){s=s>>>0,Ne(s,"offset");const A=this[s],p=this[s+7];(A===void 0||p===void 0)&&Ee(s,this.length-8);const y=A+this[++s]*2**8+this[++s]*2**16+this[++s]*2**24,x=this[++s]+this[++s]*2**8+this[++s]*2**16+p*2**24;return BigInt(y)+(BigInt(x)<= 0${Z} and < 2${Z} ** ${(x+1)*8}${Z}`:F=`>= -(2${Z} ** ${(x+1)*8-1}${Z}) and < 2 ** ${(x+1)*8-1}${Z}`,new Ie.ERR_OUT_OF_RANGE("value",F,d)}Le(p,y,x)}function Ne(d,s){if(typeof d!="number")throw new Ie.ERR_INVALID_ARG_TYPE(s,"number",d)}function Ee(d,s,A){throw Math.floor(d)!==d?(Ne(d,A),new Ie.ERR_OUT_OF_RANGE("offset","an integer",d)):s<0?new Ie.ERR_BUFFER_OUT_OF_BOUNDS:new Ie.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${s}`,d)}const Ye=/[^+/0-9A-Za-z-_]/g;function Me(d){if(d=d.split("=")[0],d=d.trim().replace(Ye,""),d.length<2)return"";for(;d.length%4!==0;)d=d+"=";return d}function Ve(d,s){s=s||1/0;let A;const p=d.length;let y=null;const x=[];for(let Z=0;Z