lnlink-server 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/app.js +2 -2
  2. package/dist/build-info.json +1 -1
  3. package/dist/index.js +3 -2
  4. package/dist/index.js.map +2 -2
  5. package/dist/node_modules/debug/.coveralls.yml +1 -0
  6. package/dist/node_modules/debug/.eslintrc +11 -0
  7. package/dist/node_modules/debug/.travis.yml +14 -0
  8. package/dist/node_modules/debug/CHANGELOG.md +362 -0
  9. package/dist/node_modules/debug/LICENSE +19 -0
  10. package/dist/node_modules/debug/Makefile +50 -0
  11. package/dist/node_modules/debug/README.md +312 -0
  12. package/dist/node_modules/debug/component.json +19 -0
  13. package/dist/node_modules/debug/karma.conf.js +70 -0
  14. package/dist/node_modules/debug/node.js +1 -0
  15. package/dist/node_modules/debug/package.json +49 -0
  16. package/dist/node_modules/debug/src/browser.js +185 -0
  17. package/dist/node_modules/debug/src/debug.js +202 -0
  18. package/dist/node_modules/debug/src/index.js +10 -0
  19. package/dist/node_modules/debug/src/inspector-log.js +15 -0
  20. package/dist/node_modules/debug/src/node.js +248 -0
  21. package/dist/node_modules/depd/History.md +96 -0
  22. package/dist/node_modules/depd/LICENSE +22 -0
  23. package/dist/node_modules/depd/Readme.md +280 -0
  24. package/dist/node_modules/depd/index.js +522 -0
  25. package/dist/node_modules/depd/lib/browser/index.js +77 -0
  26. package/dist/node_modules/depd/lib/compat/callsite-tostring.js +103 -0
  27. package/dist/node_modules/depd/lib/compat/event-listener-count.js +22 -0
  28. package/dist/node_modules/depd/lib/compat/index.js +79 -0
  29. package/dist/node_modules/depd/package.json +41 -0
  30. package/dist/node_modules/http-errors/HISTORY.md +132 -0
  31. package/dist/node_modules/http-errors/LICENSE +23 -0
  32. package/dist/node_modules/http-errors/README.md +135 -0
  33. package/dist/node_modules/http-errors/index.js +260 -0
  34. package/dist/node_modules/http-errors/package.json +48 -0
  35. package/dist/node_modules/inherits/LICENSE +16 -0
  36. package/dist/node_modules/inherits/README.md +42 -0
  37. package/dist/node_modules/inherits/inherits.js +7 -0
  38. package/dist/node_modules/inherits/inherits_browser.js +23 -0
  39. package/dist/node_modules/inherits/package.json +29 -0
  40. package/dist/node_modules/ms/index.js +152 -0
  41. package/dist/node_modules/ms/license.md +21 -0
  42. package/dist/node_modules/ms/package.json +37 -0
  43. package/dist/node_modules/ms/readme.md +51 -0
  44. package/dist/node_modules/setprototypeof/LICENSE +13 -0
  45. package/dist/node_modules/setprototypeof/README.md +26 -0
  46. package/dist/node_modules/setprototypeof/index.d.ts +2 -0
  47. package/dist/node_modules/setprototypeof/index.js +15 -0
  48. package/dist/node_modules/setprototypeof/package.json +25 -0
  49. package/dist/node_modules/statuses/HISTORY.md +65 -0
  50. package/dist/node_modules/statuses/LICENSE +23 -0
  51. package/dist/node_modules/statuses/README.md +127 -0
  52. package/dist/node_modules/statuses/codes.json +66 -0
  53. package/dist/node_modules/statuses/index.js +113 -0
  54. package/dist/node_modules/statuses/package.json +48 -0
  55. package/dist/package.json +1 -1
  56. package/dist/public/js/init.js +1 -1
  57. package/dist/setting.regtest.json +2 -1
  58. package/package.json +1 -1
package/dist/app.js CHANGED
@@ -2152,7 +2152,7 @@ ${e}`;return Object.assign(new Error(r),t,{stack:i})}a(Twt,"callErrorFromStatus"
2152
2152
  `).trim();d&&e.info(`[tor] ${d}`),d.includes("100%")&&(e.info("[tor] is ready"),o(!0))}),u.stderr.on("data",l=>{let d=l.toString();e.error(`[tor] ${d}`),(d.includes("User option")||d.includes("setuid"))&&e.info("[tor] Detected User permission issue, this is normal in Docker")}),u.on("error",l=>{e.error(`Start tor failed: ${l?.message}`),c(l)})})}a(ICt,"startTorService");function CCt(t){let e=new Dp("processManager");return Kx()?(e.info("External nodes mode: skipping RGB local spawn (managed externally)"),Promise.resolve(!0)):new Promise((r,n)=>{let i=dc("rgb");if(!i)return n(new Error("rgb service not found"));let s=!1,o=a(l=>{s||(s=!0,r(l))},"settleResolve"),c=a(l=>{s||(s=!0,n(l))},"settleReject"),u=gW(i.command,t,{stdio:"pipe"});cf("rgb",u),u.once("exit",(l,d)=>{e.info(`rgb process exited with code ${l??"null"}, signal ${d??"null"}`),dc("rgb")?.process===u&&cf("rgb",null),s||c(new Error(`rgb exited before startup completed (code: ${l??"null"}, signal: ${d??"null"})`))}),u.stdout.on("data",l=>{l.toString().replace(/\n+/g,`
2153
2153
  `).trim().includes("Listening on")&&(e.info("rgb is ready"),o(!0))}),u.on("error",l=>{e.error(`Start rgb failed: ${l?.message}`),c(l)}),u.stderr.on("data",l=>{let d=l.toString();e.error(`[rgb] ${d}`),(d.toLowerCase().includes("fatal")||d.toLowerCase().includes("cannot")||d.toLowerCase().includes("failed to start"))&&c(new Error(`Start rgb failed: ${d}`))})})}a(CCt,"startRgbService");function bW(t,e,r=1e4){let n=new Dp("processManager"),i=!1,s=null,o=t;return new Promise(c=>{let u=a(l=>{i||(i=!0,s&&clearTimeout(s),c(l))},"safeResolve");t.kill("SIGTERM"),t.on("exit",l=>{n.info(`${e} exited with code ${l}`),dc(e)?.process===o&&cf(e,null),u(!0)}),s=setTimeout(()=>{let d=dc(e)?.process;d&&d===o&&(n.info(`${e} did not exit in time, forcing shutdown...`),d.kill("SIGKILL"),cf(e,null)),u(!0)},r)})}a(bW,"killProcess");async function xW(t,e){let r=new Dp("processManager");try{let n=nA?t.split(/[/\\]/).pop().replace(".exe",""):t;r.info(`Looking for ${e} processes matching: ${n}`);let i=await Vke(n);if(i.length===0)return r.info(`No ${e} processes found`),!1;r.info(`Found ${i.length} ${e} process(es): ${i.join(", ")}`),await Promise.all(i.map(o=>Kke(o,!1))),await yW(2e3);let s=await Vke(n);return s.length>0&&(r.warn(`${s.length} ${e} process(es) still running, force killing...`),await Promise.all(s.map(o=>Kke(o,!0)))),r.info(`${e} processes terminated successfully`),!0}catch(n){return r.error(`Failed to find and kill ${e} processes: ${n.message}`),!1}}a(xW,"findAndKillProcess");async function zke(){let t=new Dp("processManager");if(Kx())return t.info("External nodes mode: skipping litd stop (managed externally)"),!0;let e=dc("litd");if(!e)throw new Error("litd service not found");try{t.info("Attempting graceful shutdown via RPC..."),await ACt().stopDaemon(),t.info("LND daemon stopped gracefully via RPC");let i=0,s=30;for(;i<s;){let o=dc("litd")?.process??e.process;if(!o||o.killed)return cf("litd",null),!0;await yW(1e3),i++}t.warn("Process did not exit after RPC shutdown, proceeding with fallback...")}catch(n){t.warn(`RPC shutdown failed: ${n.message}, falling back to process termination`)}let r=dc("litd")??e;return r.process?await bW(r.process,"litd"):await xW(r.command,"litd")}a(zke,"stopLitdService");async function Jke(){let t=new Dp("processManager");if(Kx())return t.info("External nodes mode: skipping Tor stop (managed externally)"),!0;let e=dc("tor");if(!e)throw new Error("tor service not found");return e.process?await bW(e.process,"tor",5e3):await xW(e.command,"tor")}a(Jke,"stopTorService");async function Wke(){let t=new Dp("processManager");if(Kx())return t.info("External nodes mode: skipping RGB stop (managed externally)"),!0;let e=dc("rgb");if(!e)throw new Error("rgb service not found");try{if(t.info("Attempting graceful shutdown of RGB via SIGTERM..."),await new Promise(i=>{nA?BR("taskkill /F /IM rgb-lightning-node.exe",(s,o)=>{s?(t.warn(`Graceful shutdown of RGB failed: ${s?.message}`),i(!1)):(t.info(`RGB stopped gracefully: ${o}`),i(!0))}):BR("pkill -SIGTERM -f 'rgb-lightning-node'",(s,o)=>{s?(t.warn(`Graceful shutdown of RGB failed: ${s?.message}`),i(!1)):(t.info(`RGB stopped gracefully: ${o}`),i(!0))})}))return await yW(2e3),cf("rgb",null),!0;t.info("Graceful shutdown failed, proceeding with process termination...")}catch(r){t.warn(`RGB graceful shutdown failed: ${r.message}, falling back to process termination`)}return e.process?await bW(e.process,"rgb"):await xW("rgb-lightning-node","rgb")}a(Wke,"stopRgbService");async function RCt(t){switch(t){case"litd":return await zke();case"tor":return await Jke();case"rgb":return await Wke();default:throw new Error(`Unknown service: ${t}`)}}a(RCt,"stopService");async function PCt(t,e){switch(t){case"litd":return await OCt(e);case"tor":return await ICt(e);case"rgb":return await CCt(e);default:throw new Error(`Unknown service: ${t}`)}}a(PCt,"startService");function LCt(){let t=vW();return{litd:{hasProcess:!!t.litd?.process,command:t.litd?.command},tor:{hasProcess:!!t.tor?.process,command:t.tor?.command},rgb:{hasProcess:!!t.rgb?.process,command:t.rgb?.command}}}a(LCt,"getServicesState");Xke.exports={startService:PCt,stopService:RCt,stopLitdService:zke,stopTorService:Jke,stopRgbService:Wke,getServicesState:LCt}});var TW=v(EW=>{"use strict";Object.defineProperty(EW,"__esModule",{value:!0});var Qke=require("child_process"),DCt=1024*1024,Yke={exec(t,e){let r={maxBuffer:2*DCt,windowsHide:!0};(0,Qke.exec)(t,r,e)},spawn(t,e,r){return(0,Qke.spawn)(t,e,r)},stripLine(t,e){let r=0;for(;e-- >0;){let n=t.indexOf(`
2154
2154
  `,r);n>=0&&(r=n+1)}return r>0?t.substring(r):t},split(t,e){let r=t.trim().split(/\s+/);return r.length>e&&(r[e-1]=r.slice(e-1).join(" ")),r},extractColumns(t,e,r){let n=t.split(/(\r\n|\n|\r)/),i=[];return r||(r=Math.max.apply(null,e)+1),n.forEach(s=>{let o=Yke.split(s,r),c=[];e.forEach(u=>{c.push(o[u]||"")}),i.push(c)}),i},parseTable(t){let e=t.split(/(\r\n\r\n|\r\n\n|\n\r\n|\n\n)/).filter(r=>r&&r.trim().length>0).map(r=>r.split(/(\r\n|\n|\r)/).filter(n=>n.trim().length>0));return e.forEach(r=>{for(let n=0;r[n];){let i=r[n];i.startsWith(" ")?(r[n-1]+=i.trimLeft(),r.splice(n,1)):n+=1}}),e.map(r=>{let n={};return r.forEach(i=>{let s=i.indexOf(":"),o=i.slice(0,s).trim();n[o]=i.slice(s+1).trim()}),n})}};EW.default=Yke});var eNe=v((Zke,MR)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define(e):typeof MR=="object"&&MR.exports?MR.exports=e():t.log=e()})(Zke,function(){"use strict";var t=a(function(){},"noop"),e="undefined",r=typeof window!==e&&typeof window.navigator!==e&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],i={},s=null;function o(h,m){var g=h[m];if(typeof g.bind=="function")return g.bind(h);try{return Function.prototype.bind.call(g,h)}catch{return function(){return Function.prototype.apply.apply(g,[h,arguments])}}}a(o,"bindMethod");function c(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}a(c,"traceForIE");function u(h){return h==="debug"&&(h="log"),typeof console===e?!1:h==="trace"&&r?c:console[h]!==void 0?o(console,h):console.log!==void 0?o(console,"log"):t}a(u,"realMethod");function l(){for(var h=this.getLevel(),m=0;m<n.length;m++){var g=n[m];this[g]=m<h?t:this.methodFactory(g,h,this.name)}if(this.log=this.debug,typeof console===e&&h<this.levels.SILENT)return"No console available for logging"}a(l,"replaceLoggingMethods");function d(h){return function(){typeof console!==e&&(l.call(this),this[h].apply(this,arguments))}}a(d,"enableLoggingWhenConsoleArrives");function f(h,m,g){return u(h)||d.apply(this,arguments)}a(f,"defaultMethodFactory");function p(h,m){var g=this,y,w,E,A="loglevel";typeof h=="string"?A+=":"+h:typeof h=="symbol"&&(A=void 0);function I(L){var b=(n[L]||"silent").toUpperCase();if(!(typeof window===e||!A)){try{window.localStorage[A]=b;return}catch{}try{window.document.cookie=encodeURIComponent(A)+"="+b+";"}catch{}}}a(I,"persistLevelIfPossible");function R(){var L;if(!(typeof window===e||!A)){try{L=window.localStorage[A]}catch{}if(typeof L===e)try{var b=window.document.cookie,T=encodeURIComponent(A),k=b.indexOf(T+"=");k!==-1&&(L=/^([^;]+)/.exec(b.slice(k+T.length+1))[1])}catch{}return g.levels[L]===void 0&&(L=void 0),L}}a(R,"getPersistedLevel");function $(){if(!(typeof window===e||!A)){try{window.localStorage.removeItem(A)}catch{}try{window.document.cookie=encodeURIComponent(A)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}a($,"clearPersistedLevel");function B(L){var b=L;if(typeof b=="string"&&g.levels[b.toUpperCase()]!==void 0&&(b=g.levels[b.toUpperCase()]),typeof b=="number"&&b>=0&&b<=g.levels.SILENT)return b;throw new TypeError("log.setLevel() called with invalid level: "+L)}a(B,"normalizeLevel"),g.name=h,g.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},g.methodFactory=m||f,g.getLevel=function(){return E??w??y},g.setLevel=function(L,b){return E=B(L),b!==!1&&I(E),l.call(g)},g.setDefaultLevel=function(L){w=B(L),R()||g.setLevel(L,!1)},g.resetLevel=function(){E=null,$(),l.call(g)},g.enableAll=function(L){g.setLevel(g.levels.TRACE,L)},g.disableAll=function(L){g.setLevel(g.levels.SILENT,L)},g.rebuild=function(){if(s!==g&&(y=B(s.getLevel())),l.call(g),s===g)for(var L in i)i[L].rebuild()},y=B(s?s.getLevel():"WARN");var U=R();U!=null&&(E=B(U)),l.call(g)}a(p,"Logger"),s=new p,s.getLogger=a(function(m){if(typeof m!="symbol"&&typeof m!="string"||m==="")throw new TypeError("You must supply a name when creating a logger.");var g=i[m];return g||(g=i[m]=new p(m,s.methodFactory)),g},"getLogger");var _=typeof window!==e?window.log:void 0;return s.noConflict=function(){return typeof window!==e&&window.log===s&&(window.log=_),s},s.getLoggers=a(function(){return i},"getLoggers"),s.default=s,s})});var SW=v(iA=>{"use strict";var BCt=iA&&iA.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iA,"__esModule",{value:!0});var MCt=BCt(eNe());iA.default=MCt.default});var nNe=v(Sl=>{"use strict";var FCt=Sl&&Sl.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:a(function(){return e[r]},"get")}),Object.defineProperty(t,n,i)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),UCt=Sl&&Sl.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),tNe=Sl&&Sl.__importStar||(function(){var t=a(function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},t(e)},"ownKeys");return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),i=0;i<n.length;i++)n[i]!=="default"&&FCt(r,e,n[i]);return UCt(r,e),r}})(),rNe=Sl&&Sl.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Sl,"__esModule",{value:!0});var qCt=tNe(require("os")),FR=tNe(require("fs")),fc=rNe(TW()),HCt=rNe(SW()),jCt=a(t=>new Promise((e,r)=>{FR.existsSync(t)?e():FR.mkdir(t,n=>{n?r(n):e()})}),"ensureDir"),zx={darwin(t){return new Promise((e,r)=>{fc.default.exec("netstat -anv -p TCP && netstat -anv -p UDP",function(n,i,s){if(n)r(n);else{let o=s.toString().trim();if(o){r(new Error(o));return}let c=fc.default.stripLine(i.toString(),1),u=c.slice(0,c.indexOf(`
2155
- `)),l=fc.default.stripLine(c,1),d=u.indexOf("rxbytes")>=0?10:8,f=fc.default.extractColumns(l,[0,3,d],10).filter(p=>!!String(p[0]).match(/^(udp|tcp)/)).find(p=>{let _=String(p[1]).match(/\.(\d+)$/);return!!(_&&_[1]===String(t))});f&&f[2].length?e(parseInt(f[2],10)):r(new Error(`pid of port (${t}) not found`))}})})},linux(t){return new Promise((e,r)=>{fc.default.exec("netstat -tunlp",function(i,s,o){if(i)r(i);else{let c=o.toString().trim();c&&HCt.default.warn(c);let u=fc.default.stripLine(s.toString(),2),l=fc.default.extractColumns(u,[3,6],7).find(d=>{let f=String(d[0]).match(/:(\d+)$/);return!!(f&&f[1]===String(t))});if(l&&l[1]){let d=l[1].split("/",1)[0];d.length?e(parseInt(d,10)):r(new Error(`pid of port (${t}) not found`))}else r(new Error(`pid of port (${t}) not found`))}})})},win32(t){return new Promise((e,r)=>{fc.default.exec("netstat -ano",function(n,i,s){if(n)r(n);else{let o=s.toString().trim();if(o){r(new Error(o));return}let c=fc.default.stripLine(i.toString(),4),u=fc.default.extractColumns(c,[1,4],5).find(l=>{let d=String(l[0]).match(/:(\d+)$/);return!!(d&&d[1]===String(t))});u&&u[1].length&&parseInt(u[1],10)>0?e(parseInt(u[1],10)):r(new Error(`pid of port (${t}) not found`))}})})},android(t){return new Promise((e,r)=>{let n=qCt.tmpdir()+"/.find-process",i=n+"/"+process.pid,s='netstat -tunp >> "'+i+'"';jCt(n).then(()=>{fc.default.exec(s,()=>{FR.readFile(i,"utf8",(o,c)=>{if(FR.unlink(i,()=>{}),o)r(o);else{c=fc.default.stripLine(c,2);let u=fc.default.extractColumns(c,[3,6],7).find(l=>{let d=String(l[0]).match(/:(\d+)$/);return!!(d&&d[1]===String(t))});if(u&&u[1]){let l=u[1].split("/",1)[0];l.length?e(parseInt(l,10)):r(new Error(`pid of port (${t}) not found`))}else r(new Error(`pid of port (${t}) not found`))}})})})})}};zx.freebsd=zx.darwin;zx.sunos=zx.darwin;function $Ct(t){let e=process.platform;return new Promise((r,n)=>{if(!(e in zx))return n(new Error(`platform ${e} is unsupported`));let i=zx[e];i(t).then(r,n)})}a($Ct,"findPidByPort");Sl.default=$Ct});var sNe=v(Al=>{"use strict";var GCt=Al&&Al.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:a(function(){return e[r]},"get")}),Object.defineProperty(t,n,i)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),VCt=Al&&Al.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),KCt=Al&&Al.__importStar||(function(){var t=a(function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},t(e)},"ownKeys");return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),i=0;i<n.length;i++)n[i]!=="default"&&GCt(r,e,n[i]);return VCt(r,e),r}})(),zCt=Al&&Al.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Al,"__esModule",{value:!0});var UR=KCt(require("path")),Xh=zCt(TW());function AW(t,e){return e?t&&t.match?t.match(e)!==null:!1:!0}a(AW,"matchName");function iNe(t){let e=t.split(UR.sep),r=e[e.length-1];r&&(e[e.length-1]=r.split(" ")[0]);let n=[];for(let i of e){let s=i.indexOf(" -");if(s>=0){n.push(i.substring(0,s).trim());break}else if(i.endsWith(" ")){n.push(i.trim());break}n.push(i)}return n.join(UR.sep)}a(iNe,"fetchBin");function aNe(t){if(process.platform==="darwin"){let e=t.indexOf(".app/");if(e>=0)return UR.basename(t.substring(0,e))}return UR.basename(t)}a(aNe,"fetchName");var ry={darwin(t){return new Promise((e,r)=>{let n;"pid"in t&&t.pid!==void 0?n=`ps -p ${t.pid} -ww -o pid,ppid,uid,gid,args`:n="ps ax -ww -o pid,ppid,uid,gid,args",Xh.default.exec(n,function(i,s,o){if(i)"pid"in t&&t.pid!==void 0?e([]):r(i);else{let c=o.toString().trim();if(c){r(new Error(c));return}let u=Xh.default.stripLine(s.toString(),1),d=Xh.default.extractColumns(u,[0,1,2,3,4],5).filter(f=>f[0]&&t.pid!==void 0?f[0]===String(t.pid):f[4]&&t.name?AW(f[4],t.name):!!f[0]).map(f=>{let p=String(f[4]),_=iNe(p);return{pid:parseInt(f[0],10),ppid:parseInt(f[1],10),uid:parseInt(f[2],10),gid:parseInt(f[3],10),name:aNe(_),bin:_,cmd:f[4]}});t.config.strict&&t.name&&(d=d.filter(f=>f.name===t.name)),e(d)}})})},win32(t){return new Promise((e,r)=>{let n="[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-CimInstance -className win32_process | select Name,ProcessId,ParentProcessId,CommandLine,ExecutablePath",i=[],s=Xh.default.spawn("powershell.exe",["/c",n],{detached:!1,windowsHide:!0});s.stdout.on("data",o=>{i.push(o.toString())}),s.on("error",o=>{r(new Error("Command '"+n+"' failed with reason: "+o.toString()))}),s.on("close",o=>{if(o!==0)return r(new Error("Command '"+n+"' terminated with code: "+o));let c=Xh.default.parseTable(i.join("")).filter(u=>{if(t.pid!==void 0)return u.ProcessId===String(t.pid);if(t.name){let l=u.Name||"";return t.config.strict?l===t.name||l.endsWith(".exe")&&l.slice(0,-4)===t.name:AW(u.CommandLine||l,t.name)}else return!0}).map(u=>({pid:parseInt(u.ProcessId,10),ppid:parseInt(u.ParentProcessId,10),bin:u.ExecutablePath,name:u.Name||"",cmd:u.CommandLine}));e(c)})})},android(t){return new Promise((e,r)=>{Xh.default.exec("ps",function(i,s,o){if(i)t.pid!==void 0?e([]):r(i);else{let c=o.toString().trim();if(c){r(new Error(c));return}let u=Xh.default.stripLine(s.toString(),1),d=Xh.default.extractColumns(u,[0,3],4).filter(f=>f[0]&&t.pid!==void 0?f[0]===String(t.pid):f[1]&&t.name?AW(f[1],t.name):!!f[0]).map(f=>{let p=String(f[1]),_=iNe(p);return{pid:parseInt(f[0],10),ppid:0,name:aNe(_),bin:_,cmd:f[1]}});t.config.strict&&t.name&&(d=d.filter(f=>f.name===t.name)),e(d)}})})}};ry.linux=ry.darwin;ry.sunos=ry.darwin;ry.freebsd=ry.darwin;function JCt(t){let e=process.platform,r=ry[e];return r?r(t):Promise.reject(new Error(`Platform "${e}" is not supported`))}a(JCt,"findProcess");Al.default=JCt});var cNe=v(aA=>{"use strict";var NW=aA&&aA.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(aA,"__esModule",{value:!0});var WCt=NW(nNe()),oNe=NW(sNe()),XCt=NW(SW()),kW={port(t,e){return(0,WCt.default)(t).then(r=>kW.pid(r,e),()=>[])},pid(t,e){return(0,oNe.default)({pid:t,config:e})},name(t,e){return(0,oNe.default)({name:t,config:e,skipSelf:!0})}};function QCt(t,e,r){let n=Object.assign({logLevel:"warn",strict:typeof r=="boolean"?r:!1},typeof r=="object"?r:{});return n.logLevel&&XCt.default.setLevel(n.logLevel),new Promise((i,s)=>{if(!(t in kW))s(new Error(`do not support find by "${t}"`));else{let o=/^\d+$/.test(String(e));t==="pid"&&!o?s(new Error("pid must be a number")):t==="port"&&!o?s(new Error("port must be a number")):kW[t](e,n).then(i,s)}})}a(QCt,"find");aA.default=QCt});var lNe=v(uNe=>{"use strict";Object.defineProperty(uNe,"__esModule",{value:!0})});var dNe=v(kl=>{"use strict";var YCt=kl&&kl.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:a(function(){return e[r]},"get")}),Object.defineProperty(t,n,i)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),ZCt=kl&&kl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&YCt(e,t,r)},e6t=kl&&kl.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kl,"__esModule",{value:!0});kl.default=void 0;var t6t=cNe();Object.defineProperty(kl,"default",{enumerable:!0,get:a(function(){return e6t(t6t).default},"get")});ZCt(lNe(),kl)});var pNe=v(Bp=>{"use strict";Object.defineProperties(Bp,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var r6t=_W(),HR=class{static{a(this,"R")}constructor(e){this.client=e}async getAddress(){return this.client._request("post","/address")}async getBtcBalance(e={}){return this.client._request("post","/btcbalance",e)}async sendBtc(e){return this.client._request("post","/sendbtc",e)}async createUtxos(e={}){return this.client._request("post","/createutxos",e)}async estimateFee(e){return this.client._request("post","/estimatefee",e)}async listOnchainTransactions(e={}){return this.client._request("post","/listtransactions",e)}async listUnspents(e={}){return this.client._request("post","/listunspents",e)}},jR=class{static{a(this,"N")}constructor(e){this.client=e,this.rgbTransactionSubscriptions=new Map,this.rgbTransactionPollingIntervals=new Map}async getAssetBalance(e){return this.client._request("post","/assetbalance",e)}async getAssetMetadata(e){return this.client._request("post","/assetmetadata",e)}async listAssets(e={}){let r={filter_asset_schemas:e.filter_asset_schemas};return this.client._request("post","/listassets",r)}async listTransactions(e={skip_sync:!1}){return this.client._request("post","/listtransactions",e)}async listTransfers(e){return this.client._request("post","/listtransfers",{asset_id:e})}async issueAssetCfa(e){return this.client._request("post","/issueassetcfa",e)}async issueAssetNia(e){return this.client._request("post","/issueassetnia",e)}async issueAssetUda(e){return this.client._request("post","/issueassetuda",e)}async sendAsset(e){return this.client._request("post","/sendasset",e)}async createRgbInvoice(e){let r={asset_id:e.asset_id,duration_seconds:e.duration_seconds,min_confirmations:e.min_confirmations,witness:e.witness||!1};return this.client._request("post","/rgbinvoice",r)}async payRgbInvoice(e){var r;let n=await this.decodeRgbInvoice({invoice:e.invoice}),i={recipient_id:n.recipient_id,asset_id:e.asset_id||n.asset_id,assignment:{type:"Fungible",value:e.amount||((r=n?.assignment)==null?void 0:r.value)},fee_rate:e.fee_rate,skip_sync:e.skip_sync,donation:e.donation||!1,min_confirmations:e.min_confirmations||1,transport_endpoints:e.transport_endpoints||n.transport_endpoints||[]};return this.sendAsset(i)}async decodeRgbInvoice(e){return this.client._request("post","/decodergbinvoice",e)}async failTransfers(e){return this.client._request("post","/failtransfers",e)}async getAssetMedia(e){return this.client._request("post","/getassetmedia",e)}async refreshTransfers(e={}){let r={skip_sync:e.skip_sync};return this.client._request("post","/refreshtransfers",r)}async syncRgbWallet(){return this.client._request("post","/sync",{})}async postAssetMedia(e){let r=new FormData;return r.append("file",e.file),this.client._request("post","/postassetmedia",r)}subscribeToRgbTransactions(e){let{onTransaction:r,onError:n,pollingInterval:i=5e3,maxStoredIds:s=1e3,skipInitialFetch:o=!1}=e;if(!r||typeof r!="function")throw new Error("onTransaction callback is required and must be a function");i<1e3&&console.warn("Warning: Polling interval less than 1000ms may cause performance issues");let c=`rgb-tx-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,u=Date.now(),l=new Set,d=new Map,f=a(g=>typeof g=="string"?new Date(g).getTime():g||0,"d"),p=a(()=>{l.size<=s||[...d.entries()].sort((g,y)=>g[1]-y[1]).map(g=>g[0]).slice(0,l.size-s).forEach(g=>{l.delete(g),d.delete(g)})},"f");o||this.listTransactions().then(g=>{g&&g.transfers&&Array.isArray(g.transfers)&&(g.transfers.forEach(y=>{l.add(y.idx),d.set(y.idx,f(y.created_at))}),p())}).catch(g=>{n&&typeof n=="function"&&n(g)});let _=i,h=0,m=setInterval(async()=>{try{let g=await this.listTransactions();if(g&&g.transfers&&Array.isArray(g.transfers)){let y=g.transfers.filter(w=>{if(!l.has(w.idx))return l.add(w.idx),d.set(w.idx,f(w.created_at)),!0;let E=f(w.created_at);return l.has(w.idx)&&E>(d.get(w.idx)||0)?(d.set(w.idx,E),!0):!1});if(g.transfers.length>0){let w=Math.max(...g.transfers.map(E=>f(E.created_at)));u=Math.max(u,w)}if(p(),y.length>0)y.forEach(w=>{r(w)}),h=0;else if(h++,h>5){let w=Math.min(i*3,i*(1+h/10));if(w!==_){_=w,clearInterval(m);let E=setInterval(m.callback,_);this.rgbTransactionPollingIntervals.set(c,E)}}}}catch(g){n&&typeof n=="function"&&n(g)}},i);return m.callback=m._onTimeout,this.rgbTransactionSubscriptions.set(c,{onTransaction:r,onError:n,pollingInterval:i,currentPollingInterval:_,maxStoredIds:s}),this.rgbTransactionPollingIntervals.set(c,m),c}unsubscribeFromRgbTransactions(e){if(!this.rgbTransactionSubscriptions.has(e))return!1;let r=this.rgbTransactionPollingIntervals.get(e);return r&&(clearInterval(r),this.rgbTransactionPollingIntervals.delete(e)),this.rgbTransactionSubscriptions.delete(e),!0}},ny={},fNe;function n6t(){if(fNe)return ny;fNe=1,Object.defineProperty(ny,"__esModule",{value:!0}),ny.bech32m=ny.bech32=void 0;let t="qpzry9x8gf2tvdw0s3jn54khce6mua7l",e={};for(let l=0;l<t.length;l++){let d=t.charAt(l);e[d]=l}function r(l){let d=l>>25;return(l&33554431)<<5^-(d>>0&1)&996825010^-(d>>1&1)&642813549^-(d>>2&1)&513874426^-(d>>3&1)&1027748829^-(d>>4&1)&705979059}a(r,"t");function n(l){let d=1;for(let f=0;f<l.length;++f){let p=l.charCodeAt(f);if(p<33||p>126)return"Invalid prefix ("+l+")";d=r(d)^p>>5}d=r(d);for(let f=0;f<l.length;++f){let p=l.charCodeAt(f);d=r(d)^p&31}return d}a(n,"r");function i(l,d,f,p){let _=0,h=0,m=(1<<f)-1,g=[];for(let y=0;y<l.length;++y)for(_=_<<d|l[y],h+=d;h>=f;)h-=f,g.push(_>>h&m);if(p)h>0&&g.push(_<<f-h&m);else{if(h>=d)return"Excess padding";if(_<<f-h&m)return"Non-zero padding"}return g}a(i,"c");function s(l){return i(l,8,5,!0)}a(s,"u");function o(l){let d=i(l,5,8,!1);if(Array.isArray(d))return d}a(o,"p");function c(l){let d=i(l,5,8,!1);if(Array.isArray(d))return d;throw new Error(d)}a(c,"g");function u(l){let d;l==="bech32"?d=1:d=734539939;function f(m,g,y){if(y=y||90,m.length+7+g.length>y)throw new TypeError("Exceeds length limit");m=m.toLowerCase();let w=n(m);if(typeof w=="string")throw new Error(w);let E=m+"1";for(let A=0;A<g.length;++A){let I=g[A];if(I>>5!==0)throw new Error("Non 5-bit word");w=r(w)^I,E+=t.charAt(I)}for(let A=0;A<6;++A)w=r(w);w^=d;for(let A=0;A<6;++A){let I=w>>(5-A)*5&31;E+=t.charAt(I)}return E}a(f,"d");function p(m,g){if(g=g||90,m.length<8)return m+" too short";if(m.length>g)return"Exceeds length limit";let y=m.toLowerCase(),w=m.toUpperCase();if(m!==y&&m!==w)return"Mixed-case string "+m;m=y;let E=m.lastIndexOf("1");if(E===-1)return"No separator character for "+m;if(E===0)return"Missing prefix for "+m;let A=m.slice(0,E),I=m.slice(E+1);if(I.length<6)return"Data too short";let R=n(A);if(typeof R=="string")return R;let $=[];for(let B=0;B<I.length;++B){let U=I.charAt(B),L=e[U];if(L===void 0)return"Unknown character "+U;R=r(R)^L,!(B+6>=I.length)&&$.push(L)}return R!==d?"Invalid checksum for "+m:{prefix:A,words:$}}a(p,"f");function _(m,g){let y=p(m,g);if(typeof y=="object")return y}a(_,"m");function h(m,g){let y=p(m,g);if(typeof y=="object")return y;throw new Error(y)}return a(h,"y"),{decodeUnsafe:_,decode:h,encode:f,toWords:s,fromWordsUnsafe:o,fromWords:c}}return a(u,"b"),ny.bech32=u("bech32"),ny.bech32m=u("bech32m"),ny}a(n6t,"B");var i6t=n6t(),a6t=1,s6t=13,o6t=19,c6t=23,u6t=6,l6t=24,d6t=16,f6t=27,p6t=5,_6t=30,h6t=31,m6t={bc:"Mainnet",tb:"Testnet",bcrt:"Regtest",sb:"Signet",tbs:"Signet"},g6t={m:.001,u:1e-6,n:1e-9,p:1e-12};function qR(t){let e=0;for(let r of t)e=e*32+r;return e}a(qR,"E");function Qh(t){let e=[],r=0,n=0;for(let i of t)for(r=r<<5|i,n+=5;n>=8;)e.push(r>>>n-8&255),n-=8;return new Uint8Array(e)}a(Qh,"v");function Jx(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}a(Jx,"A");function y6t(t){let e=t.match(/^ln([a-z]+)(\d*)([munp]?)$/);if(!e)throw new Error("Invalid HRP format");let[,r,n,i]=e;return{currency:r,amount:n?parseInt(n):null,siPrefix:i||null,network:m6t[r]||"Unknown"}}a(y6t,"ee");function v6t(t){let e={},r=0;for(;r<t.length;){if(r+3>t.length)throw new Error("Unexpected end of tagged fields");let n=t[r],i=t[r+1]<<5|t[r+2];if(r+=3,r+i>t.length)throw new Error("Tagged field length exceeds remaining data");let s=t.slice(r,r+i);r+=i;try{switch(n){case a6t:s.length===52&&(e.paymentHash=Jx(Qh(s)));break;case s6t:let o=Qh(s);e.description=new TextDecoder().decode(o);break;case o6t:s.length===53&&(e.payeePubkey=Jx(Qh(s)));break;case c6t:s.length===52&&(e.descriptionHash=Jx(Qh(s)));break;case u6t:e.expiryTime=qR(s);break;case l6t:e.minFinalCltvExpiryDelta=qR(s);break;case d6t:s.length===52&&(e.paymentSecret=Jx(Qh(s)));break;case f6t:e.paymentMetadata=Jx(Qh(s));break;case p6t:e.features=Jx(Qh(s));break;case _6t:e.rgbAmount=qR(s);break;case h6t:let c=Qh(s);e.rgbContractId=new TextDecoder().decode(c);break;default:break}}catch{continue}}return e}a(v6t,"te");function b6t(t){try{let e=i6t.bech32.decode(t,2e3),{prefix:r,words:n}=e,i=y6t(r);if(n.length<111)throw new Error("Invoice data too short");let s=n.slice(0,7),o=qR(s),c=n.slice(7,n.length-104),u=v6t(c),l=null;if(i.amount!==null){let p=i.amount;i.siPrefix&&g6t[i.siPrefix]?i.siPrefix==="u"?l=p*1e5:i.siPrefix==="m"?l=p*1e8:i.siPrefix==="n"?l=p*100:i.siPrefix==="p"&&(l=Math.floor(p/10)):l=Math.floor(p/10)}let d=u.expiryTime||3600,f=null;return u.rgbContractId&&(f=u.rgbContractId),{amt_msat:l,expiry_sec:d,timestamp:o,asset_id:f,asset_amount:u.rgbAmount||null,payment_hash:u.paymentHash||null,payment_secret:u.paymentSecret||null,payee_pubkey:u.payeePubkey||null,network:i.network}}catch(e){throw new Error(`Failed to decode Lightning invoice: ${e.message}`)}}a(b6t,"se");var $R=class{static{a(this,"D")}constructor(e){this.client=e,this.paymentSubscriptions=new Map,this.paymentPollingIntervals=new Map}async connectPeer(e){return this.client._request("post","/connectpeer",e)}async listPeers(){return this.client._request("get","/listpeers")}async disconnectPeer(e){return this.client._request("post","/disconnectpeer",e)}async openChannel(e){return this.client._request("post","/openchannel",e)}async closeChannel(e){return this.client._request("post","/closechannel",e)}async listChannels(){return this.client._request("get","/listchannels")}async getChannelIdByTempId(e){return this.client._request("post","/getchannelid",e)}async createInvoice(e){return this.client._request("post","/lninvoice",e)}async payInvoice(e){return this.client._request("post","/sendpayment",e)}async decodeLnInvoice(e){return this.client._request("post","/decodelninvoice",e)}async getInvoiceStatus(e){return this.client._request("post","/invoicestatus",e)}async getPayment(e){return this.client._request("post","/getpayment",e)}async listPayments(){return this.client._request("get","/listpayments")}async keysend(e){return this.client._request("post","/keysend",e)}subscribeToPastPayments(e){let{onPayment:r,onError:n,pollingInterval:i=5e3,maxStoredIds:s=1e3,skipInitialFetch:o=!1}=e;if(!r||typeof r!="function")throw new Error("onPayment callback is required and must be a function");i<1e3&&console.warn("Warning: Polling interval less than 1000ms may cause performance issues");let c=`payment-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,u=Date.now(),l=new Set,d=new Map,f=a(()=>{l.size<=s||[...d.entries()].sort((m,g)=>m[1]-g[1]).map(m=>m[0]).slice(0,l.size-s).forEach(m=>{l.delete(m),d.delete(m)})},"d");o||this.listPayments().then(m=>{m&&m.payments&&Array.isArray(m.payments)&&(m.payments.forEach(g=>{l.add(g.payment_hash),d.set(g.payment_hash,g.created_at||Date.now())}),f())}).catch(m=>{n&&typeof n=="function"&&n(m)});let p=i,_=0,h=setInterval(async()=>{try{let m=await this.listPayments();if(m&&m.payments&&Array.isArray(m.payments)){let g=m.payments.filter(y=>l.has(y.payment_hash)?l.has(y.payment_hash)&&y.updated_at>(d.get(y.payment_hash)||0)?(d.set(y.payment_hash,y.updated_at||Date.now()),!0):!1:(l.add(y.payment_hash),d.set(y.payment_hash,y.created_at||Date.now()),!0));if(m.payments.length>0){let y=Math.max(...m.payments.map(w=>w.updated_at||0));u=Math.max(u,y)}if(f(),g.length>0)g.forEach(y=>{r(y)}),_=0;else if(_++,_>5){let y=Math.min(i*3,i*(1+_/10));if(y!==p){p=y,clearInterval(h);let w=setInterval(h.callback,p);this.paymentPollingIntervals.set(c,w)}}}}catch(m){n&&typeof n=="function"&&n(m)}},i);return h.callback=h._onTimeout,this.paymentSubscriptions.set(c,{onPayment:r,onError:n,pollingInterval:i,currentPollingInterval:p,maxStoredIds:s}),this.paymentPollingIntervals.set(c,h),c}unsubscribeFromPayments(e){if(!this.paymentSubscriptions.has(e))return!1;let r=this.paymentPollingIntervals.get(e);return r&&(clearInterval(r),this.paymentPollingIntervals.delete(e)),this.paymentSubscriptions.delete(e),!0}decodeRGBLNInvoice(e){return b6t(e)}},GR=class{static{a(this,"C")}constructor(e){this.client=e}async makerInitSwap(e){return this.client._request("post","/makerinit",e)}async makerExecuteSwap(e){return this.client._request("post","/makerexecute",e)}async takerAcceptSwap(e){return this.client._request("post","/taker",e)}async getSwap(e){return this.client._request("post","/getswap",e)}async listSwaps(){return this.client._request("get","/listswaps")}},VR=class{static{a(this,"U")}constructor(e){this.client=e}async getNodeInfo(){return this.client._request("get","/nodeinfo")}async getNodeState(){try{let e=await this.client._request("get","/nodestate");return e?.state}catch(e){if(e.message.includes("Network Error"))return"NonExisting";throw e}}async getNetworkInfo(){return this.client._request("get","/networkinfo")}async checkIndexerUrl(e){return this.client._request("post","/checkindexerurl",e)}async checkProxyEndpoint(e){return this.client._request("post","/checkproxyendpoint",e)}async sendOnionMessage(e){return this.client._request("post","/sendonionmessage",e)}async signMessage(e){return this.client._request("post","/signmessage",e)}async initNode(e){return this.client._request("post","/init",e)}async unlockNode(e){return this.client._request("post","/unlock",e)}async lockNode(){return this.client._request("post","/lock")}async changePassword(e){return this.client._request("post","/changepassword",e)}async backupNode(e){return this.client._request("post","/backup",e)}async restoreNode(e){return this.client._request("post","/restore",e)}},KR=class{static{a(this,"G")}constructor(e={},r=null){let n={};typeof e=="string"?(n.baseUrl=e,r&&(n.headers={Authorization:`Bearer ${r}`})):n=e,this.baseUrl=n.baseUrl||"http://localhost:3001",this.axios=r6t.create({baseURL:this.baseUrl,headers:{"Content-Type":"application/json",...n.headers},...n.axiosConfig}),this.onchain=new HR(this),this.rgb=new jR(this),this.lightning=new $R(this),this.swaps=new GR(this),this.node=new VR(this)}async _request(e,r,n=null){var i,s;try{let o={method:e,url:r};return n!==null&&(e==="post"||e==="put"||e==="patch")?o.data=n:n!==null&&e==="get"&&(o.params=n),(await this.axios.request(o)).data}catch(o){if(o.response){let c=((i=o.response.data)==null?void 0:i.message)||((s=o.response.data)==null?void 0:s.error)||o.response.statusText;throw new Error(`API Error (${o.response.status}): ${c}`)}else throw o.request?new Error(`Network Error: Unable to reach RGB API at ${this.baseUrl}`):new Error(`Request Error: ${o.message}`)}}};Bp.LightningMethods=$R;Bp.NodeMethods=VR;Bp.OnchainMethods=HR;Bp.RgbApiClient=KR;Bp.RgbMethods=jR;Bp.SwapMethods=GR;Bp.default=KR});var sA=v((EMr,_Ne)=>{var{getConfig:x6t}=Vt(),{RgbApiClient:w6t}=pNe(),OW=null;function E6t(){if(!OW){let t=x6t();if(!t.LINK_RGB_LISTENING_PORT)throw new Error("RGB configuration not available");OW=new w6t({baseUrl:`http://127.0.0.1:${t.LINK_RGB_LISTENING_PORT}`})}return OW}a(E6t,"getRgbClient");_Ne.exports=E6t});var oA=v((SMr,gNe)=>{var{checkObjectArgs:hNe}=Qi(),{getConfig:T6t}=Vt(),{decryptNostrString:zR}=Mr(),{getConfigFilePath:mNe}=HS(),{TASKS:S6t}=rt(),{reportTaskCompletion:A6t}=Lp(),Wx=sA();async function JR(){let t=await Wx().node.getNodeState(),e={};switch(t){case"None":e.state=0;break;case"Locked":e.state=1;break;case"Changing":e.state=3;break;case"Running":e.state=4;break;case"NonExisting":e.state=255;break;default:e.state=0}return e}a(JR,"getNodeState");async function k6t(){return(await Wx().rgb.listAssets({filter_asset_schemas:[]}))?.nia??[]}a(k6t,"getRGBAssetsList");async function N6t({password:t}){if(!t)throw new Error("password is required");let e=Wx(),r=await zR(t);return await e.node.initNode({password:r})}a(N6t,"genSeed");async function O6t({password:t,lnlinkUser:e}){if(!t)throw new Error("password is required");let r=Wx(),{LINK_BITCOIND_RPCHOST:n,LINK_BITCOIND_RPCUSER:i,LINK_BITCOIND_RPCPASS:s,LINK_RGB_LDK_PEER_LISTENING_PORT:o=9735,LINK_NAME:c,LINK_RGB_ELECTRS_HOST:u,LINK_RGB_PROXY_ENDPOINT:l}=T6t(),d=await zR(t),f=n?.split(":")[0],p=Number(n?.split(":")[1]),_={bitcoind_rpc_username:i,bitcoind_rpc_password:s,bitcoind_rpc_host:f,bitcoind_rpc_port:p,indexer_url:u,proxy_endpoint:l,password:d,announce_addresses:[`0.0.0.0:${o}`],announce_alias:`${c}`};e&&A6t({nostrAddress:e?.npub,tag:S6t.EnableRGBNode});let h=r.node.unlockNode(_),m=3e4,g,y=new Promise(E=>{g=setTimeout(async()=>{let A=await JR();E({message:"Request submitted, current node status:",status:A})},m)}),w=await Promise.race([h,y]);return clearTimeout(g),w||!0}a(O6t,"unlockNode");async function I6t({password:t}){let{rgbBackupPath:e}=mNe(),r={password:t,backup_path:e},n=Wx();hNe(r,["password","backup_path"]),(await JR()).state===4&&await n.node.lockNode();let s=await zR(t);return r.password=s,await n.node.backupNode(r)||!0}a(I6t,"backupNode");async function C6t({password:t}){let{rgbBackupPath:e}=mNe(),r={password:t,backup_path:e},n=Wx();(await JR()).state===4&&await n.node.lockNode(),hNe(r,["password","backup_path"]);let s=await zR(t);return r.password=s,await n.node.restoreNode(r)||!0}a(C6t,"restoreNode");gNe.exports={getNodeState:JR,genSeed:N6t,unlockNode:O6t,backupNode:I6t,restoreNode:C6t,getRGBAssetsList:k6t}});var CW=v((NMr,xNe)=>{var IW=dNe().default,{getWalletState:R6t}=Qi(),{getConfig:P6t}=Vt(),{WALLET_STATE_CODE:kMr}=rt(),Yh=Ke(),{getNodeState:L6t}=oA(),{getServiceConfig:yNe}=rA(),{getServicesState:D6t}=wW();function vNe(){let t=P6t();return t.LINK_EXTERNAL_NODES==="true"||t.LINK_EXTERNAL_NODES===!0}a(vNe,"isExternalNodesMode");var va={RUNNING:"Running",STOPPED:"Stopped"};async function B6t(){let t=new Yh("statusChecker");try{return D6t()?.tor?.hasProcess?va.RUNNING:va.STOPPED}catch(e){return t.error(`Error checking tor process: ${e.message}`),va.STOPPED}}a(B6t,"checkTorProcess");async function M6t(){let t=new Yh("statusChecker");try{if(vNe()){t.info("External nodes mode: checking litd via RPC...");try{let r=await R6t();if(r!=null)return t.info(`Litd is running (wallet state: ${r})`),va.RUNNING}catch(r){t.warn(`RPC check failed: ${r.message}`)}return va.STOPPED}let e=await IW("name","litd");return e.length>0?(t.info(`Found litd process(es): ${e.map(r=>r.pid).join(", ")}`),va.RUNNING):va.STOPPED}catch(e){return t.warn(`Failed to check litd process: ${e.message}`),va.STOPPED}}a(M6t,"checkLitdProcess");async function bNe(){let t=new Yh("statusChecker");try{if(vNe()){t.info("External nodes mode: checking RGB via SDK...");try{let r=await L6t();if(r!=null)return t.info("RGB is running (node state received)"),va.RUNNING}catch(r){t.warn(`RGB SDK check failed: ${r.message}`)}return va.STOPPED}let e=await IW("name","rgb-lightning-node");return e.length>0?(t.info(`Found rgb-lightning-node process(es): ${e.map(r=>r.pid).join(", ")}`),va.RUNNING):va.STOPPED}catch(e){return t.warn(`Failed to check rgb process: ${e.message}`),va.STOPPED}}a(bNe,"checkRgbProcess");async function WR(t){let e=new Yh("statusChecker");try{let r=yNe();if(!r[t])throw new Error(`${t} does not exist.`);switch(t){case"tor":return await B6t();case"litd":return await M6t();case"rgb":return await bNe();default:{let i=r[t].command.split(/[\/\\]/).pop().replace(".exe","");return(await IW("name",i)).length>0?va.RUNNING:va.STOPPED}}}catch(r){throw e.error(`Error checking ${t} process: ${r.message}`),r}}a(WR,"checkProcess");function F6t(t=""){let e=yNe(),r=new Yh("statusChecker"),n=a(s=>s!=="rgb"&&(!t||s.includes(t)),"shouldInclude"),i=Object.keys(e).filter(n);return Promise.all(i.map(async s=>{try{let o=await WR(s);return{service_name:s,status:o}}catch(o){return r.error(`Error checking ${s} status: ${o.message}`),{service_name:s,status:va.STOPPED,error:o.message}}}))}a(F6t,"getTerminalStatus");async function U6t(){let t=new Yh("statusChecker");try{return{service_name:"rgb",status:await bNe()}}catch(e){return t.error(`Error checking rgb status: ${e.message}`),{service_name:"rgb",status:va.STOPPED,error:e.message}}}a(U6t,"getRGBStatus");async function q6t(t){let e=new Yh("statusChecker");try{return await WR(t)===va.RUNNING}catch(r){return e.error(`Error checking if ${t} is running: ${r.message}`),!1}}a(q6t,"isServiceRunning");function H6t(t,e,r=3e4,n=1e3){let i=new Yh("statusChecker");return new Promise(s=>{let o=Date.now(),c=a(async()=>{try{if(await WR(t)===e){s(!0);return}}catch(u){i.error(`Error waiting for ${t} status: ${u.message}`)}if(Date.now()-o>=r){i.warn(`Timeout waiting for ${t} to reach status: ${e}`),s(!1);return}setTimeout(c,n)},"checkStatus");c()})}a(H6t,"waitForServiceStatus");xNe.exports={ServiceStatus:va,checkProcess:WR,getRGBStatus:U6t,getTerminalStatus:F6t,isServiceRunning:q6t,waitForServiceStatus:H6t}});var Ol=v((IMr,CNe)=>{var{getConfig:ENe,reloadConfig:j6t}=Vt(),{TASKS:RW}=rt(),nu=Ke(),{sleep:TNe}=jS(),{updateMainLnlinkConfig:$6t}=Mr(),{reportTaskCompletion:PW}=Lp(),{buildLitdArgs:G6t,buildTorArgs:V6t,buildRgbArgs:K6t}=rA(),{startService:XR,stopService:Xx}=wW(),{getTerminalStatus:cA,isServiceRunning:Qx,getRGBStatus:uA,ServiceStatus:Nl}=CW();async function SNe(t,{timeoutMs:e=15e3,pollIntervalMs:r=1e3}={}){let n=new nu("litdService"),i=Date.now()+e,s=[];for(;;){if(s=await cA("litd"),s.find(d=>d.service_name==="litd")?.status===t)return n.info(`Litd reached target status: ${t}`),{matched:!0,statuses:s};let u=Date.now();if(u>=i)break;let l=Math.min(r,Math.max(0,i-u));l>0&&await TNe(l)}let o=s.find(c=>c.service_name==="litd")?.status||"Unknown";return n.warn(`Timed out waiting for Litd status "${t}". Last observed status: ${o}`),{matched:!1,statuses:s}}a(SNe,"waitForLitdStatus");async function wNe(t,{timeoutMs:e=15e3,pollIntervalMs:r=1e3}={}){let n=new nu("rgbService"),i=Date.now()+e,s=null;for(;;){if(s=await uA(),s?.status===t)return n.info(`RGB reached target status: ${t}`),{matched:!0,statuses:s};let u=Date.now();if(u>=i)break;let l=Math.min(r,Math.max(0,i-u));l>0&&await TNe(l)}let o=s?.status||"Unknown";return n.warn(`Timed out waiting for RGB status "${t}". Last observed status: ${o}`),{matched:!1,statuses:s}}a(wNe,"waitForRgbStatus");async function ANe({waitForRunning:t=!0}={}){let e=new nu("litdService"),{LINK_ENABLE_TOR:r}=ENe(),n=r==="true"||r===!0;e.info("Starting terminal services...");let i=await cA(),s=i.find(c=>c.service_name==="litd"),o=i.find(c=>c.service_name==="tor");e.info(`Current status - Litd: ${s?.status}, Tor: ${o?.status}`);try{if(n&&o?.status===Nl.STOPPED){e.info("Starting Tor service...");let l=V6t();await XR("tor",l),e.info("Tor service started successfully")}if(s?.status===Nl.STOPPED){e.info("Starting Litd service...");let l=G6t(n);await XR("litd",l),e.info("Litd service started successfully")}let c=await cA(),u=c.find(l=>l.service_name==="litd")?.status;if(t&&u!==Nl.RUNNING){e.info("Waiting for Litd to reach running state after start...");let{matched:l,statuses:d}=await SNe(Nl.RUNNING,{timeoutMs:2e4,pollIntervalMs:1e3});if(!l)throw new Error("Litd failed to reach RUNNING state after start");return e.info("Terminal services started and Litd is running"),d}return e.info("Terminal services started successfully"),c}catch(c){throw e.error(`Failed to start terminal services: ${c.message}`),c}}a(ANe,"startTerminal");async function kNe(t={}){let e=new nu("litdService"),{lnlinkUser:r,waitForStopped:n=!0,waitOptions:i={}}=t||{};e.info("Stopping terminal services...");try{if(!await Xx("litd"))return e.warn("stopService returned a falsy result"),!1;if(r&&PW({nostrAddress:r.npub,tag:RW.StopTaprootAssetNode}),!n)return e.info("Terminal services stopped (waiting for STOPPED state skipped)"),!0;e.info("Waiting for Litd to confirm STOPPED state...");let{matched:o}=await SNe(Nl.STOPPED,{timeoutMs:15e3,pollIntervalMs:1e3,...i});if(!o)throw new Error("Litd did not stop within the expected time window");return e.info("Terminal services stopped successfully and Litd is confirmed STOPPED"),!0}catch(s){throw e.error(`Failed to stop terminal services: ${s.message}`),s}}a(kNe,"stopTerminal");async function LW(t={}){let e=new nu("litdService");e.info("Restarting terminal services...");try{if(!await kNe({...t,waitForStopped:!0}))return e.warn("Stopping Litd returned a falsy result, aborting restart."),!1;e.info("Starting Litd...");let n=await ANe({waitForRunning:!0});return e.info("Terminal services restarted successfully"),n}catch(r){throw e.error(`Failed to restart terminal services: ${r.message}`),r}}a(LW,"restartTerminal");async function z6t(t={}){let e=new nu("litdService");if(Object.keys(t).length===0)throw new Error("config is empty");return e.info("Applying new configuration..."),await LW()}a(z6t,"configTerminal");async function J6t(){let t=new nu("litdService");try{let e=await cA(),r=await Qx("litd"),n=await Qx("tor");return{healthy:r,services:{litd:{running:r,status:e.find(i=>i.service_name==="litd")?.status||"Unknown"},tor:{running:n,status:e.find(i=>i.service_name==="tor")?.status||"Unknown"}},timestamp:new Date().toISOString()}}catch(e){return t.error(`Health check failed: ${e.message}`),{healthy:!1,error:e.message,timestamp:new Date().toISOString()}}}a(J6t,"healthCheck");async function NNe(t){let e=new nu("rgbService");e.info("Starting RGB service...");try{let r=await uA();if(r?.status===Nl.STOPPED){e.info("RGB service is stopped, starting...");let i=K6t();await XR("rgb",i),t?.lnlinkUser&&PW({nostrAddress:t?.lnlinkUser?.npub,tag:RW.EnableRGBNode}),e.info("RGB service started successfully")}else e.info(`RGB service is already ${r?.status}`);return await uA()}catch(r){throw e.error(`Failed to start RGB service: ${r.message}`),r}}a(NNe,"startRGB");async function ONe(t){let e=new nu("rgbService");e.info("Stopping RGB service...");let r=t?.lnlinkUser;try{let n=await Xx("rgb");return e.info("RGB service stopped successfully"),r&&PW({nostrAddress:r.npub,tag:RW.StopRGBNode}),n}catch(n){throw e.error(`Failed to stop RGB service: ${n.message}`),n}}a(ONe,"stopRGB");async function INe(t={}){let e=new nu("rgbService");e.info("Restarting RGB service...");try{let r=await uA(),n=!!r?.error;if(r?.status===Nl.RUNNING||n){if(e.info(n?"RGB status check failed; forcing stop before restart...":"Stopping RGB service..."),!await ONe(t))return e.warn("Stopping RGB returned a falsy result, aborting restart."),!1;e.info("Waiting for RGB to stop...");let{matched:d}=await wNe(Nl.STOPPED,{timeoutMs:15e3,pollIntervalMs:1e3});if(!d)throw new Error("RGB did not stop within the expected time window")}e.info("Starting RGB...");let s=await NNe(t);if(s?.status===Nl.RUNNING)return e.info("RGB service restarted successfully"),s;e.info("Waiting for RGB to reach running state...");let{matched:c,statuses:u}=await wNe(Nl.RUNNING,{timeoutMs:2e4,pollIntervalMs:1e3});if(!c)throw new Error("RGB failed to reach RUNNING state after restart");return e.info("RGB service restarted successfully"),u}catch(r){throw e.error(`Failed to restart RGB service: ${r.message}`),r}}a(INe,"restartRGB");async function W6t(t={}){let e=new nu("nodeManage");e.info("Updating node name...");try{let{node_name:r}=t;if(!r)throw new Error("node_name is required");let n=await $6t({node_name:r});if(n!==1)throw new Error("Failed to update node name in DB");await j6t();let s=ENe()?.LINK_NAME||r,o=await LW(t);if(!o)throw new Error("Failed to restart litd after updating node name");let u=(Array.isArray(o)?o.find(f=>f.service_name==="litd"):null)?.status||(Array.isArray(o)?"Unknown":o?.status||"Unknown"),l=await INe(t),d=Array.isArray(l)?l.find(f=>f.service_name==="rgb")?.status||"Unknown":l?.status||"Unknown";return{update_status:n===1,node_name:s,litd_status:u,litd_details:o,rgb_status:d,rgb_details:l}}catch(r){throw e.error(`Failed to update nodename: ${r.message}`),r}}a(W6t,"updateNodeName");if(globalThis.addCleanupFunction){let t=new nu("nodeManage");globalThis.addCleanupFunction(async()=>{t.info("Cleaning up node processes...");try{await Qx("litd")&&(await Xx("litd"),t.info("litd process stopped")),await Qx("tor")&&(await Xx("tor"),t.info("tor process stopped")),await Qx("rgb")&&(await Xx("rgb"),t.info("RGB process stopped"))}catch(e){t.error(`Error during node cleanup: ${e.message}`)}})}CNe.exports={startTerminal:ANe,stopTerminal:kNe,restartTerminal:LW,configTerminal:z6t,getTerminalStatus:cA,healthCheck:J6t,startRGB:NNe,stopRGB:ONe,restartRGB:INe,getRGBStatus:uA,startService:XR,stopService:Xx,isServiceRunning:Qx,ServiceStatus:Nl,updateNodeName:W6t}});var BW=v((RMr,PNe)=>{var{getConfig:X6t}=Vt(),{getWalletState:Q6t}=Qi(),{getMainLnlinkConfig:DW,updateMainLnlinkConfig:RNe}=Mr(),{nip19:Y6t,getPublicKey:Z6t,generatePrivateKey:eRt}=nc();async function tRt({owner:t,settings:e,nodeName:r,enableTor:n}){if(!t)throw new Error("ownerNostrAddr is null");if(!/^npub[a-z0-9]{59,}$/.test(t))throw new Error("owner nostr address format error");let i={...e,enableTor:n!==void 0?n:!0},s=await DW();if(s&&s.node_sk&&s.owner_npub){let c={settings:i};r&&(c.node_name=r),await RNe(c)}else{let c=eRt(),u=Y6t.npubEncode(Z6t(c)),l={owner_npub:t,node_sk:c,node_npub:u,settings:i};r&&(l.node_name=r),await RNe(l)}return await DW()}a(tRt,"initConfig");async function rRt(){let t=X6t(),e=[],{getTerminalStatus:r,getRGBStatus:n,isServiceRunning:i}=Ol(),s=await i("litd"),o=await Q6t(!0);if(s&&o===4){let d=await r(),f=await n(),p=[...new Set([f,...d])];e.push(...p)}else{let d=await n();e.push(d),e.push({service_name:"litd",status:s?"Running":"Stopped"})}let c=await DW(),u=c?.settings||{},l=u.enableTor!==void 0?u.enableTor:!0;return{linkName:t?.LINK_NAME,owner:t?.LINK_OWNER,nodeAddr:t?.LINK_NODE_ADDR,relayUri:t?.LINK_RELAY_URI,settings:c?.settings,enableTor:l,linkStatus:e}}a(rRt,"getInfo");PNe.exports={initConfig:tRt,getInfo:rRt}});var MW=v((LMr,LNe)=>{var nRt=require("node:events"),iRt=new nRt;LNe.exports=iRt});var FW=v((DMr,DNe)=>{var{getConfig:aRt}=Vt(),{startTerminal:sRt}=Ol(),oRt=Ke();async function cRt(){let t=new oRt("job");try{if(!aRt().LINK_READY)return t.info("LND job startLitd not set, skipping."),!1;let e=await sRt();return e&&t.info(`LND job startLitd complete:${JSON.stringify(e)}`),!0}catch(e){t.error(`LND job startLitd error--->${e.message}`)}}a(cRt,"startLitd");DNe.exports=cRt});var UW=v((MMr,BNe)=>{var{getConfig:uRt}=Vt(),{startRGB:lRt}=Ol(),dRt=Ke();async function fRt(){let t=new dRt("job");try{if(!uRt().LINK_READY)return t.info("RGB job startRGB not set, skipping."),!1;let e=await lRt();t.info(`RGB job startRGB complete:${JSON.stringify(e)}`)}catch(e){t.error(`RGB job startRGB error--->${e.message}`)}}a(fRt,"startRGB");BNe.exports=fRt});var qW=v((UMr,MNe)=>{var QR=new Map;async function pRt(t,e=[],r,n=60*1e3,i){let s=a(async()=>{try{await t(...e),i.info(`\u2705 Attempt ${r} succeeded`)}catch(o){i.error(`Attempt ${r} failed with: ${o.message}, retrying in ${n/1e3} seconds`)}finally{setTimeout(s,n)}},"retry");s()}a(pRt,"executeWithRetry");async function _Rt(t,e,r,n=0,i=60*1e3,s){QR.has(r)&&(clearTimeout(QR.get(r)),QR.delete(r));let o=a(async(c=1)=>{try{Array.isArray(e)?await t(...e):await t(e),s.info(`\u2705 Attempt ${r} succeeded`)}catch(u){if(s.warn(`Attempt ${r} failed with: ${u.message}, retrying in ${i/1e3} seconds`),n&&c>=n)return s.error(`Attempt ${r} failed after ${c} attempts`),!1;let l=setTimeout(()=>o(c+1),i);QR.set(r,l)}},"retry");o()}a(_Rt,"terminateableRetryExecute");async function hRt(t,e,r,n=10,i=1e3,s){return new Promise((o,c)=>{let u=a(async(l=1)=>{try{let d=await t(...e);if(d!==void 0){s.info(`\u2705 Attempt ${r} succeeded`),o(d);return}throw new Error(`${r} returned falsy value`)}catch(d){if(s.warn(`Attempt ${l}/${n} for ${r} failed: ${d.message}`),l>=n){s.error(`\u274C ${r} failed after ${n} attempts`),c(d);return}setTimeout(()=>{u(l+1).catch(c)},i)}},"retry");u(1).catch(c)})}a(hRt,"retryUntilSuccess");MNe.exports={executeWithRetry:pRt,terminateableRetryExecute:_Rt,retryUntilSuccess:hRt}});var HW=v((HMr,mRt)=>{mRt.exports={name:"lnlink-server",version:"1.0.6",private:!1,main:"dist/index.js",files:["dist","prisma","README.md"],scripts:{build:"node build.js && node build.js --mode development --external all --entry electron","start:bin":"dotenv -e .env.bin -- node scripts/start-bin.js","start:docker:dev":"dotenv -e .env.dev -- docker compose -f ./docker-compose.dev.yml up --build","start:dev":'dotenv -e .env.dev -- sh -c "prisma generate && (prisma migrate dev --name auto_update || prisma db push) && clinic heapprof -- node ./app.js"',"start:regtest":"docker compose --env-file ./.env.regtest -f ./docker-compose-lnlink.yml up --build","start:testnet":"docker compose --env-file ./.env.testnet -f ./docker-compose-lnlink.yml up --build","start:mainnet":"docker compose --env-file ./.env.mainnet -f ./docker-compose-lnlink.yml up --build","start:bin:dist":"dotenv -e .env.bin -- node scripts/start-bin.js --dist",lint:"eslint .","lint:fix":"eslint . --fix","lint:staged":"lint-staged",preinstall:"npx husky"},_moduleAliases:{"@api":"api","@constants":"constants","@business":"business","@nostr":"nostr","@package.json":"./package.json"},dependencies:{"@grpc/grpc-js":"^1.10.8","@grpc/proto-loader":"^0.7.9","@lightsparkdev/lightspark-sdk":"^1.8.9","@lnfi-network/rgb-api-js-sdk":"^1.0.7","@prisma/client":"6.14.0",axios:"^1.7.2","bitcoin-core":"^4.2.0","body-parser":"^1.20.2",bolt11:"^1.4.1","cookie-parser":"~1.4.4","crypto-js":"^4.2.0",dayjs:"^1.11.10",debug:"~2.6.9","decimal.js":"^10.4.3",ethers:"^6.15.0",express:"^4.18.2","express-rate-limit":"^8.0.1","find-process":"^2.0.0","form-data":"^4.0.2","http-errors":"~1.6.3",jest:"^29.6.2",long:"^5.2.3","module-alias":"^2.2.3",morgan:"~1.9.1","node-cache":"^5.1.2","node-cron":"^3.0.3","nostr-tools":"1.17.0",pino:"^9.9.0","pino-pretty":"^13.1.1","pino-roll":"^3.1.0",prisma:"^6.14.0",typescript:"^5.7.3",ws:"^8.18.0"},"lint-staged":{"*.ts":["eslint --fix","git add"],"*.js":["eslint --fix","git add"]},devDependencies:{"@antfu/eslint-config":"^4.3.0","@commitlint/cli":"^19.7.1","@commitlint/config-conventional":"^19.7.1","dotenv-cli":"^10.0.0","electron-rebuild":"^3.2.9",esbuild:"^0.25.9",eslint:"^9.20.1",husky:"^9.1.7","lint-staged":"^15.4.3",nodemon:"^3.0.3",protobufjs:"^7.2.5"},engines:{node:">=19.0.0"}}});var e0=v((jMr,WNe)=>{var{Buffer:iy}=require("node:buffer"),jNe=require("node:fs"),FNe=require("node:path"),{getConfig:ay}=Vt(),{getMainLnlinkConfig:$W,getLnlinkUser:gRt,upsertTransactionByFilter:eP}=Mr(),{retryUntilSuccess:yRt}=qW(),{ACCOUNT_TYPE:vRt,INVOICE_EXPIRY_TIME:bRt}=rt(),{WALLET_STATE_CODE:Zh,SATS_ID:tP,NODE_TYPE:Yx,TRANSACTION_KIND:rP,TRANSACTION_DIRECTION:Zx,TRANSACTION_ASSET_TYPE:nP,TRANSACTION_STATUS:$Ne}=rt(),xRt=HW(),{nip04:wRt,getPublicKey:UNe}=nc(),{getWalletService:GW,getWalletState:e1,getLightningService:Fi,checkWalletState:ERt,checkTprEnabled:TRt,getOpenedChannelList:GNe}=Qi(),{getConfigFilePath:VW,sleep:iP,getCacheMacaroon:KW,storeEnctryptAdminMacaroon:SRt,setCacheMacaroon:qNe,storeEnctryptLoopMacaroon:ARt}=wi(),zs=Oo(),pc=Ke(),{getTerminalStatus:VNe,startTerminal:kRt}=Ol(),{getTransactionsByFilter:NRt,decryptNostrString:jW}=Mr(),KNe=require("node:child_process").exec,{TASKS:aP}=rt(),{reportTaskCompletion:sP}=Lp();async function ORt(t){let e=new pc("lnd"),{type:r,event_id:n,lnlinkUser:i}=t;if(r==null)throw new Error("type is required");let o=await Fi().newAddress({type:r});return n&&i?(await eP({event_id:n,user_npub:i.npub,asset_type:nP.BTC,asset_id:tP,asset_amount:"0",node_type:Yx.LITD,transaction_kind:rP.ONCHAIN,direction:Zx.IN,target_address:o.address,status:$Ne.PENDING,description:`BTC deposit address generated for ${i.npub}`,tx_type:"deposit",create_at:Math.floor(Date.now()/1e3),update_at:Math.floor(Date.now()/1e3)},{event_id:n}),e.info(`Generated BTC address: ${o.address} for user: ${i.npub}, event: ${n}`)):e.info(`Generated BTC address: ${o.address}`),o}a(ORt,"newAddress");async function IRt(t){let e=new pc("lnd"),{addr:r,amount:n,sat_per_vbyte:i,send_all:s,withinfo:o,event_id:c,lnlinkUser:u}=t,l=Fi(),d={addr:r};n&&(d.amount=n),i&&(d.sat_per_vbyte=Number(i)),s&&(d.send_all=s);let f=await l.sendCoins(d);if(f?.txid&&c&&u){let p=s?"0":n?.toString()||"0";await eP({event_id:c,user_npub:u.npub,asset_type:nP.BTC,asset_id:tP,asset_amount:p,node_type:Yx.LITD,transaction_kind:rP.ONCHAIN,direction:Zx.OUT,target_address:r,status:$Ne.PENDING,description:`BTC withdrawal for ${u.npub} to ${r}`,tx_type:"withdraw",tx_hash:f.txid,create_at:Math.floor(Date.now()/1e3),update_at:Math.floor(Date.now()/1e3)},{tx_hash:f.txid}),e.info(`Created outgoing transaction record: ${f.txid}, user: ${u.npub}, event: ${c}`)}if(o){let p=await iu();f.nodeInfo=p}return f}a(IRt,"sendCoins");async function zNe(){return(await Fi().closedChannels({}))?.channels?.map(i=>({channelId:i.chan_id,closeTx:i.closing_tx_hash,remotePubkey:i.remote_pubkey,channelPoint:i.channel_point,capacity:i.capacity,close_type:i.close_type,settledBalance:i.settled_balance,open_initiator:i.open_initiator,close_initiator:i.close_initiator}))}a(zNe,"getClosedChannelList");function YR({channel:t}){let e="";return t.custom_channel_data&&(e=JSON.parse(iy.from(t.custom_channel_data,"hex").toString("utf-8"))),{channel:{...t,custom_channel_data:e}}}a(YR,"covertChannel");async function CRt(){let t=await e1(!0),e=new pc("lnd"),{isMacaroonDecrypted:r}=KW();if(t!==4||!r)return{open_channel_list:[],pending_channel_list:[],closed_channel_list:[]};let n=Fi(),i=await Promise.allSettled([GNe(),n.pendingChannels({}),zNe()]),s=i?.filter(w=>w.status==="rejected")?.map(w=>w.reason);s&&s.length>0&&e.error(`getChannelList ~ errors:${JSON.stringify(s)}`);let o=i[0].value,c=i[1].value,u=i[2].value,{pending_open_channels:l,pending_closing_channels:d,waiting_close_channels:f,pending_force_closing_channels:p}=c,_=l?.map(YR),h=d?.map(YR),m=f?.map(YR),g=p?.map(YR);return{open_channel_list:o,pending_channel_list:{pending_open_channels:_,pending_closing_channels:h,waiting_close_channels:m,pending_force_closing_channels:g},closed_channel_list:u}}a(CRt,"getChannelList");async function iu(){let{LINK_NAME:t,LINK_NETWORK:e,LINK_OWNER:r,LINK_NODE_ADDR:n}=ay(),i=await e1(!0),s=await VNe(),o={};s.forEach(E=>{o[E.service_name]=E.status});let c=new pc("lnd"),u=15e3,l=zs.get("combineNodeInfo")||{},d,f=new Promise(E=>{d=setTimeout(()=>{c.warn("combineNodeInfoAsync timed out after 15s, using cached result if available"),E({fromCache:!0,data:l})},u)}),p=await Promise.race([URt(i).then(E=>({fromCache:!1,data:E})),f]);clearTimeout(d);let _=p.data||{},h=xRt.version,m=await TRt().catch(()=>!1),g=await gRt({account_type:vRt.READ_ONLY}),y=_?.uris?.[0];return{pubkey:_?.identity_pubkey,name:t,status:{state:i,...o},owner:r,node_addr:n,balance:_?.balance,version:h,uri:y,host:y?y.split("@")[1]:null,peers:_?.peers,network:e,taproot_assets_enabled:m,read_only_account_sk:g?.sk}}a(iu,"getNodeInfo");async function RRt({pay_req:t}){return await Fi().decodePayReq({pay_req:t})}a(RRt,"decodePayReq");async function PRt(){let t=await e1(!0);if(t===4){let e=await VNe(),r={};return e.forEach(n=>{r[n.service_name]=n.status}),{state:t,...r}}else{let e=t>=0&&t<=4;return{state:t,litd:e?"Running":"Stopped"}}}a(PRt,"getNodeState");async function LRt(){return await Fi().pendingChannels({})}a(LRt,"getPendingChannelList");async function ZR({node_pubkey:t}){let{LINK_NOSTR_NODE_NPUBKEY:e}=ay(),r=t||e;return(await Fi().listPeers({}))?.peers?.findIndex(s=>s.pub_key===r)>-1}a(ZR,"isConnectPeer");async function DRt(t){let{invoice:e,withinfo:r,outgoing_chan_id:n="",event_id:i,lnlinkUser:s}=t,o=Fi(),c={payment_request:e,allow_self_payment:!0,fee_limit:{fixed:1e3}};n&&(c.outgoing_chan_id=`${n}`,c.outgoing_chan_ids=[`${n}`]);let u=await o.sendPaymentSync(c);if(u?.payment_hash){await iP(300);let d=(await o.decodePayReq({pay_req:e}))?.num_satoshis;await eP({event_id:i,user_npub:s.npub,asset_id:tP,asset_amount:`${d}`,asset_type:nP.BTC,invoice:e,node_type:Yx.LITD,transaction_kind:rP.LIGHTNING,direction:Zx.OUT},{payment_hash:u.payment_hash})}if(r){let l=await iu();u.nodeInfo=l}return u}a(DRt,"sendPaymentSync");async function BRt(t){let{memo:e,value:r,event_id:n,lnlinkUser:i,expiry:s=bRt["10m"]}=t,c=await Fi().addInvoice({memo:e,value:r,expiry:s});return c?.payment_request&&(await iP(500),await eP({event_id:n,user_npub:i.npub,asset_id:tP,asset_amount:`${r}`,asset_type:nP.BTC,invoice:c?.payment_request,node_type:Yx.LITD,transaction_kind:rP.LIGHTNING,direction:Zx.IN,description:e,add_index:Number.parseInt(c?.add_index)},{invoice:c.payment_request})),{...c}}a(BRt,"createLnInvoice");async function MRt(t){let{node_pubkey:e,amount:r,sat_per_vbyte:n,fund_max:i,zero_conf_enable:s,withinfo:o,push_sat:c,lnlinkUser:u}=t,l=Fi(),{LINK_NOSTR_NODE_NPUBKEY:d}=ay(),f=e||d,p=new pc("lnd"),_=await ZR({node_pubkey:f}),h;if(!_)h={isConnected:!1};else{let m={node_pubkey:f,local_funding_amount:r,min_confs:1};s&&(m.target_conf=0,m.zero_conf=!0,m.commitment_type=3,m.push_sat=1e5),n&&(m.sat_per_vbyte=n),i&&(m.fund_max=i,m.local_funding_amount="0"),c&&(m.push_sat=c),h=await l.openChannelSync(m),h.isConnected=!0,p.info(`openChannelSync ret--->, ${JSON.stringify(m)}, ${JSON.stringify(h)}`),u&&sP({nostrAddress:u.npub,tag:aP.CreateBTCChannel})}if(o){let m=await iu();h.nodeInfo=m}return h}a(MRt,"openChannel");async function FRt(){let t=Fi(),{settings:e}=await $W();return((await t.listPeers({}))?.peers||[]).map(s=>{let o=s.pub_key===e?.officialLndPeer;return{pub_key:s.pub_key,alias:o?"Lnfi":`${s.pub_key}@${s.address}`,address:s.address}})}a(FRt,"listPeers");async function URt(t){let e={},r=new pc("lnd");try{let{isMacaroonDecrypted:n}=KW(),i=t;if(i>Zh.UNLOCKED&&i!==Zh.WAITING_TO_START&&(n||(i=Zh.LOCKED)),i>=Zh.RPC_ACTIVE&&n&&i!==Zh.WAITING_TO_START){let s=Fi(),{settings:o}=await $W(),c=await Promise.allSettled([s.getInfo(),s.walletBalance(),s.listPeers({})]),[u,l,d]=c,f=u.value,p=l.value,h=d.value?.peers||[],m=h.map(y=>{let w=y.pub_key===o?.officialLndPeer;return{pub_key:y.pub_key,alias:w?"Lnfi":`${y.pub_key}@${y.address}`,address:y.address}});r.info(`LND lndService combineNodeInfoAsync peer:${h.map(y=>y.pub_key)}`);let g=c?.filter(y=>y.status==="rejected")?.map(y=>y.reason);g&&g.length>0&&r.error(`LND lndService combineNodeInfoAsync errors:${JSON.stringify(g)}`),e={identity_pubkey:f?.identity_pubkey,...f,balance:p,peers:m}}return e={...e,state:i},zs.set("combineNodeInfo",e),e}catch(n){r.warn(`LND lndService combineNodeInfoAsync peer combineNodeInfo warn--->${n.message}`)}}a(URt,"combineNodeInfoAsync");async function HNe(){let e=await Fi().getInfo();return zs.set("nodeInfo",e),e}a(HNe,"getInfo");async function qRt(t=!0){let e=new pc("lnd");try{let r=zs.get("nodeInfo");return r?.identity_pubkey?(t&&HNe(),r):await HNe()}catch(r){e.error(`LND lndService getCacheInfo err--->${r.message}`)}}a(qRt,"getCacheNodeInfo");async function HRt(t){await ERt(Zh.RPC_ACTIVE);let{secret:e,origin_secret:r}=t;if(!e&&!r)throw new Error("secret is required.");let n=r||await jW(e),i=Fi(),o={permissions:[{entity:"uri",action:"/looprpc.SwapClient/GetInfo"},{entity:"uri",action:"/looprpc.SwapClient/LoopOut"},{entity:"uri",action:"/looprpc.SwapClient/LoopIn"},{entity:"uri",action:"/looprpc.SwapClient/ListSwaps"},{entity:"uri",action:"/looprpc.SwapClient/SwapInfo"},{entity:"uri",action:"/looprpc.SwapClient/AbandonSwap"},{entity:"uri",action:"/looprpc.SwapClient/Monitor"},{entity:"uri",action:"/looprpc.SwapClient/LoopOutTerms"},{entity:"uri",action:"/looprpc.SwapClient/LoopOutQuote"},{entity:"uri",action:"/looprpc.SwapClient/GetLoopInTerms"},{entity:"uri",action:"/looprpc.SwapClient/GetLoopInQuote"}],root_key_id:"18441921392371827000"},c=await i.bakeMacaroon(o);if(c?.macaroon){let u=iy.from(c?.macaroon,"hex");ARt(u,n)}}a(HRt,"bakeLoopMacaroon");async function JNe(t){let{walletUnlockerService:e}=GW(),r=new pc("lnd"),{wallet_password:n,cipher_seed_mnemonic:i}=t;if(zs.get("initWalletInProgress"))throw r.warn("initWallet already in progress, rejecting duplicate request"),new Error("Wallet initialization already in progress");zs.set("initWalletInProgress",!0);try{if(i)zs.set("cipherSeedMnemonic",i);else{let l=await e.genSeed({});if(l?.cipher_seed_mnemonic){let d=l?.cipher_seed_mnemonic;zs.set("cipherSeedMnemonic",d)}}let s=zs.get("cipherSeedMnemonic");if(!s)throw new Error("Get seed error.");let{LINK_DEBUG:o}=ay(),c=!(o==="true"||o===!0),u=await e.initWallet({wallet_password:iy.from(n),cipher_seed_mnemonic:s,stateless_init:c}).catch(l=>{throw r.warn(`${l.message}`),l});return r.info(`LND lndService initWallet RPC response ->macaroon length:${u?.admin_macaroon?.length}`),u?.admin_macaroon&&SRt(u?.admin_macaroon,n),u}finally{zs.del("initWalletInProgress")}}a(JNe,"wrapperInitWallet");async function jRt(){let{walletUnlockerService:t}=GW(),e=zs.get("cipherSeedMnemonic");if(e)return{cipherSeedMnemonic:e};let r=await t.genSeed({});if(r?.cipher_seed_mnemonic){let n=r?.cipher_seed_mnemonic;return zs.set("cipherSeedMnemonic",n),{cipherSeedMnemonic:n}}throw new Error("Get seed error.")}a(jRt,"genseed");async function $Rt(t){let{password:e,withinfo:r,cipher_seed_mnemonic:n,origin_password:i,lnlinkUser:s}=t;if(!e&&!i)throw new Error("Password is null.");let o="",c;if(e&&(o=(await jW(e)).toString()),i&&(o=`${i}`),n&&(c=JSON.parse(await jW(n))),o&&o.length<8)throw new Error("Password length must be at least 8 characters.");let{isMacaroonDecrypted:u}=KW();if(u)throw new Error("You have already initialized.");await JNe({wallet_password:o,cipher_seed_mnemonic:c}),zs.set("tempPassword",e);let d={message:"Init wallet success.",cipherSeedMnemonic:zs.get("cipherSeedMnemonic")};return s&&sP({nostrAddress:s.npub,tag:aP.EnableTaprootAssetNode}),r&&(d.nodeInfo=await iu()),d}a($Rt,"initWallet");async function GRt(t){let e=Fi(),{withinfo:r,lnlinkUser:n,...i}=t,s={...i},o=await e.closeChannel(s);if(n&&sP({nostrAddress:n.npub,tag:aP.CloseTaprootChannel}),r){let c=await iu();o.nodeInfo=c}return o}a(GRt,"closeChannel");async function VRt(t){let{pubkey:e,host:r,perm:n,timeout:i,withinfo:s}=t,o=new pc("lnd"),{LINK_NOSTR_NODE_NPUBKEY:c,LINK_NOSTR_NODE_HOST:u}=ay(),l=e||c,d=r||u,f=Fi(),p=!1,_=20;if(await ZR({node_pubkey:l}))p={isConnected:!0};else{o.info("Lnd lndService connectPeer"),await f.connectPeer({addr:{pubkey:l,host:d},perm:n||!1,timeout:i||30}).catch(g=>{o.error(`Lnd lndService connectPeer error ${g.message}`)});let m=0;for(;;){if(m++,m>_){p={isConnected:!1};break}if(await ZR({node_pubkey:l})){p={isConnected:!0};break}else{await iP(1e3);continue}}}if(s){let m=await iu();p.nodeInfo=m}return p}a(VRt,"connectPeer");async function KRt(t){let{wallet_password:e,recovery_window:r,withinfo:n}=t,{LINK_DEBUG:i}=ay(),o=(await $W()).node_sk,c=UNe(UNe(o)),l=await wRt.decrypt(o,c,e),{walletUnlockerService:d}=GW(),f=await e1(!0);if(f>Zh.UNLOCKED&&f<Zh.WAITING_TO_START)qNe(l);else{let _=!(i==="true"||i===!0);console.log("unlock stateless_init---->",_,i);let h={wallet_password:iy.from(l),stateless_init:_};r&&(h.recovery_window=Number(r));let m=new pc("lnd");await d.unlockWallet(h).catch(g=>{m.error(`${g.message}`)}),qNe(l),zs.set("tempPassword",e)}let p={msg:"Unlock success."};if(n){let _=await iu();p.nodeInfo=_}return p}a(KRt,"unlock");async function zRt(t){let{withinfo:e}=t,{channelBackupPath:r,lndNodeOriginPath:n,targetNodeBackupPath:i}=VW(),s=Fi(),o=await s.exportAllChannelBackups({});jNe.writeFileSync(r,o.multi_chan_backup.multi_chan_backup),await s.stopDaemon({});let c=FNe.dirname(n),u=FNe.basename(n),l=`cd ${c} && tar -zcvf ${i} ${u}`,p={channelBakeup:"success.",nodeBackup:await new Promise((_,h)=>{KNe(l,m=>{m?h(m):_("success.")})})};if(e){await iP(3e3);let _=await iu();p.nodeInfo=_}return p}a(zRt,"bakeNode");async function JRt(t){let{withinfo:e}=t;await Fi().stopDaemon({}).catch(l=>{new pc("lnd").error(`Lnd lndService stopDaemon error ${l?.message}`)});let{basePath:n,targetNodeBackupPath:i}=VW(),s=`tar -zxvf ${i} -C ${n}`,u={nodeRestore:await new Promise((l,d)=>{KNe(s,f=>{f?d(f):l("success.")})})};if(e){let l=await iu();u.nodeInfo=l}return u}a(JRt,"restoreNode");async function WRt(){let t=Fi(),{channelBackupPath:e}=VW(),n=jNe.readFileSync(e).toString("hex");return{channelRestore:await t.restoreChannelBackups({multi_chan_backup:iy.from(n,"hex")})}}a(WRt,"restoreChannels");async function XRt(t){let{msg:e}=t;return await Fi().signMessage({msg:iy.from(`${e}`)})}a(XRt,"signMessage");async function QRt(t){let{msg:e,signature:r}=t;return await Fi().verifyMessage({msg:iy.from(`${e}`),signature:r})}a(QRt,"nstVerifyMessage");async function YRt(t){let{node_type:e,transaction_kind:r,status:n,direction:i,asset_type:s,page_index:o=1,page_size:c=20,asset_id:u}=t;return await NRt({transaction_kind:r,direction:i?/out/.test(i)?Zx.OUT:Zx.IN:"",node_type:e?/litd|lnd/.test(e)?Yx.LITD:Yx.RGB:"",asset_type:s,status:n,limit:c,offset:(o-1)*c,asset_id:u})}a(YRt,"getTransactions");async function ZRt(t){let{lnlinkUser:e}=t,{LINK_ENABLE_TOR:r}=ay(),n=new pc("lnd"),i=r,s={};e&&sP({nostrAddress:e?.npub,tag:aP.EnableTaprootAssetNode});let o=await kRt(i);if(s.linkStatus=o,await yRt(e1,[!1],"getWalletState",10,3e3,n)!==void 0){let u=await iu();s.nodeInfo=u}return s}a(ZRt,"startLink");async function ePt(t){let e=new pc("lnd"),{enable:r,lnlinkUser:n}=t;if(r==null)throw new Error("enable parameter is required (true or false)");let i=r===!0||r==="true";e.info(`Toggling Tor mode to: ${i}, requested by: ${n?.npub||"unknown"}`);try{let{getMainLnlinkConfig:s,updateMainLnlinkConfig:o}=Mr(),u=(await s())?.settings||{},l={...u,enableTor:i},d=await o({settings:l});d!==1&&e.warn(`Database update returned: ${d}, proceeding anyway`);let{reloadConfig:f}=Vt();await f();let{isServiceRunning:p,startService:_,stopService:h}=Ol(),{buildTorArgs:m}=rA(),g=await p("litd"),y=await p("rgb"),w=await p("tor");if(e.info(`Current status - Litd: ${g}, RGB: ${y}, Tor: ${w}`),!g&&!y)try{if(i&&!w){e.info("Starting Tor service standalone (litd/rgb not running)...");let R=m();await _("tor",R),e.info("Tor service started successfully")}else!i&&w?(e.info("Stopping Tor service (litd/rgb not running)..."),await h("tor"),e.info("Tor service stopped successfully")):e.info("Tor already in desired state, no action needed");return{enable_tor:i,status:"ok",message:"Tor toggled without restarting services (litd/rgb not running)"}}catch(R){e.error(`Failed to ${i?"start":"stop"} Tor service: ${R.message}`);let $={...u,enableTor:!i};throw await o({settings:$}),await f(),new Error(`Failed to ${i?"start":"stop"} Tor service: ${R.message}`)}e.info("Restarting litd with new Tor configuration (litd/rgb is running)...");let{restartTerminal:E}=Ol(),A=await E({lnlinkUser:n}),I=await iu();return e.info(`Tor mode toggled successfully. Tor enabled: ${i}`),{enable_tor:i,status:"ok",terminal_status:A,node_info:I}}catch(s){throw e.error(`Failed to toggle Tor: ${s.message}`),s}}a(ePt,"toggleTor");WNe.exports={startLink:ZRt,toggleTor:ePt,getWalletState:e1,sendPaymentSync:DRt,createLnInvoice:BRt,getNodeInfo:iu,getNodeState:PRt,getChannelList:CRt,getOpenedChannelList:GNe,getPendingChannelList:LRt,getClosedChannelList:zNe,openChannel:MRt,listPeers:FRt,decodePayReq:RRt,wrapperInitWallet:JNe,initWallet:$Rt,genseed:jRt,isConnectPeer:ZR,sendCoins:IRt,closeChannel:GRt,connectPeer:VRt,unlock:KRt,bakeNode:zRt,restoreNode:JRt,restoreChannels:WRt,bakeLoopMacaroon:HRt,signMessage:XRt,nstVerifyMessage:QRt,getCacheNodeInfo:qRt,getTransactions:YRt,newAddress:ORt}});var ZNe=v((GMr,YNe)=>{var tPt=aH(),t1=tPt.Router(),{getConfig:zW,reloadConfig:QNe}=Vt(),{getInfo:rPt,initConfig:nPt,updateNodeName:iPt}=BW(),{sendResponse:uf}=wi(),XNe=MW();t1.get("/health",async(t,e)=>{try{let r={status:"healthy",timestamp:new Date().toISOString(),uptime:process.uptime(),memory:process.memoryUsage()};uf(e,200,"Server is healthy",r)}catch(r){uf(e,500,"Server health check failed",{error:r.message})}});t1.post("/update-name",async(t,e)=>{try{let{nodeName:r}=t?.body,n=await iPt(r);await QNe(),uf(e,200,"lnlink node_name update success",n)}catch(r){uf(e,500,r.message,null)}});t1.post("/init",async(t,e)=>{try{let{owner:r,settings:n,nodeName:i,enableTor:s}=t?.body,o=await nPt({owner:r,settings:n,nodeName:i,enableTor:s});await QNe();let{LINK_READY:c}=zW();if(c){let u=FW(),l=UW(),{isServiceRunning:d}=CW();await u(),await l();let{LINK_ENABLE_TOR:f}=zW(),p=f===!0||f==="true",_=6e4,h=1e3,m=Date.now();for(;Date.now()-m<_;){let g=await d("tor"),y=await d("litd"),w=await d("rgb");if(y&&w&&(!p||g))break;await new Promise(A=>setTimeout(A,h))}}XNe.emit("initAccount"),XNe.emit("listenNostrEvent"),uf(e,200,"lnlink config init success",o)}catch(r){uf(e,500,r.message,null)}});t1.get("/info",async(t,e)=>{try{let{owner:r,nodeAddr:n,relayUri:i,linkStatus:s,settings:o,enableTor:c}=await rPt(),u={};s.forEach(d=>{u[d.service_name]=d.status});let{LINK_LNFI_NODE_SITE_URL:l}=zW();uf(e,200,"success",{owner:r,nodeAddr:n,relayUri:i,...u,manageUrl:`${l.replace(/\/#\/|\/#|\/$/,"")}/#/?owner=${r}&npub=${n}`,settings:o,enableTor:c})}catch(r){uf(e,500,r.message,null)}});t1.post("/tor/toggle",async(t,e)=>{try{let{enable:r}=t?.body,{toggleTor:n}=e0(),i=await n({enable:r});uf(e,200,"Tor toggled successfully",i)}catch(r){uf(e,500,r.message,null)}});YNe.exports=t1});var JW=v((VMr,tOe)=>{var{Buffer:eOe}=require("node:buffer"),aPt=require("node:crypto");function sPt(t,e){let r=aPt.createHash("sha256");r.update(t);let n=r.digest();if(e<n.length)return n.slice(0,e);if(e>n.length){let i=eOe.alloc(e-n.length);return eOe.concat([n,i])}return n}a(sPt,"stringToFixedBytes");tOe.exports={stringToFixedBytes:sPt}});var oOe=v((zMr,sOe)=>{var WW=BigInt(Number.MAX_SAFE_INTEGER),rOe=BigInt("9223372036854775807"),oP=BigInt("1000000000000000000000000000"),cP=oP,nOe=+"4102444800",QW=2147483647,iOe=rOe,XW=cP,aOe=QW,oPt={isUnlimited:a(t=>{if(!t)return!1;if(typeof t=="bigint")return t===XW||t===oP||t===cP;if(typeof t=="string"){let e=XW.toString(),r=oP.toString(),n=cP.toString();return t===e||t===r||t===n}return!1},"isUnlimited"),isNeverExpire:a(t=>t?t===aOe||t===iOe||t===nOe||t===QW:!1,"isNeverExpire"),isSafeInteger:a(t=>t<=WW&&t>=-WW,"isSafeInteger"),toDbString:a(t=>t?typeof t=="string"?t:typeof t=="bigint"?t.toString():String(t):null,"toDbString"),fromDbString:a(t=>{if(!t)return null;try{return BigInt(t)}catch(e){return console.warn(`Failed to convert string to BigInt: ${t} ${e.message}`),null}},"fromDbString"),toSafeString:a(t=>t?t.toString():null,"toSafeString"),fromString:a(t=>t?BigInt(t):null,"fromString"),formatLargeNumber:a(t=>{if(!t)return"0";let e=t.toString(),r=e.length;return r<=6?e:r<=9?`${(Number(e)/1e6).toFixed(1)}M`:r<=12?`${(Number(e)/1e9).toFixed(1)}B`:r<=15?`${(Number(e)/1e12).toFixed(1)}T`:Number(e).toExponential(2)},"formatLargeNumber"),createTokenAmount:a((t,e=18)=>{let r=BigInt(10)**BigInt(e);return BigInt(t)*r},"createTokenAmount")};sOe.exports={MAX_SAFE_INTEGER:WW,MAX_SQLITE_INTEGER:rOe,MAX_TOKEN_AMOUNT:oP,UNLIMITED_AUTH_LIMIT:cP,UNLIMITED_AMOUNT:XW,NEVER_EXPIRE_MAX:iOe,NEVER_EXPIRE_2100:nOe,NEVER_EXPIRE_2038:QW,NEVER_EXPIRE:aOe,BigIntUtils:oPt}});var dOe=v((WMr,lOe)=>{var{getMainLnlinkConfig:uP}=Mr(),{insertLnlinkUser:YW,getLNDOwner:cPt,getFlashRegister:uPt,getReadOnly:lPt}=Mr(),ZW=Ke(),{stringToFixedBytes:cOe}=JW(),{UNLIMITED_AMOUNT:dPt,NEVER_EXPIRE:eX,BigIntUtils:fPt}=oOe(),{ACCOUNT_TYPE:tX,FLASH_REGISTER_PERMISSIONS:pPt,OWNER_PERMISSIONS:_Pt,READ_ONLY_PERMISSIONS:hPt}=rt(),rX=zc(),{nip19:r1,getPublicKey:uOe}=nc();async function mPt(){let t=new ZW("init");try{if(!await cPt()){let r=await uP(),n="owner",{owner_npub:i,settings:s,node_npub:o}=r,c=s?.nostrRelays?s?.nostrRelays?.[0]:null;await YW({name:n,pubkey:r1.decode(i).data,sk:null,node_pubkey:r1.decode(o).data,relay:c,asset_id:null,account_type:tX.OWNER,social_id:null,auth_limit:fPt.toDbString(dPt),permissions:JSON.stringify(_Pt),create_at:rX().unix(),expire_time:eX,parent_pubkey:null})&&t.info(`init owner to DB owner ${i} init success.`)}}catch(e){t.error(`init owner error: ${e.message}`)}}a(mPt,"initOwner");async function gPt(){let t=new ZW("init");try{let e=await uP(),{node_npub:r,settings:n}=e,i=n?.nostrRelays?n?.nostrRelays?.[0]:null,s=cOe(`${r}`).toString("hex"),o=uOe(s),c=r1.npubEncode(o);await uPt()||await YW({name:"flash_register",pubkey:o,sk:s,node_pubkey:r1.decode(r).data,relay:i,asset_id:null,account_type:tX.FLASH_REGISTER,social_id:null,social_type:null,auth_limit:"0",permissions:JSON.stringify(pPt),create_at:rX().unix(),expire_time:eX,parent_pubkey:null})&&t.info(`init flash_register to DB flash_register ${c} init success.`)}catch(e){t.error(`init flash_register error: ${e.message}`)}}a(gPt,"initFlashRegister");async function yPt(){let t=new ZW("init");try{let e=await uP(),{node_npub:r,settings:n}=e,i=n?.nostrRelays?n?.nostrRelays?.[0]:null,o=cOe(`${r}:lnlink_readonly_v1`).toString("hex"),c=uOe(o),u=r1.npubEncode(c);await lPt()||await YW({name:"readonly",pubkey:c,sk:o,node_pubkey:r1.decode(r).data,relay:i,asset_id:null,account_type:tX.READ_ONLY,social_id:null,social_type:null,auth_limit:"0",permissions:JSON.stringify(hPt),create_at:rX().unix(),expire_time:eX,parent_pubkey:null})&&t.info(`init readonly to DB readonly ${u} init success.`)}catch(e){t.error(`init readonly error: ${e.message}`)}}a(yPt,"initReadOnly");async function vPt(){(await uP())?.owner_npub&&(await mPt(),await yPt(),await gPt())}a(vPt,"initAccount");lOe.exports={initAccount:vPt}});var pOe=v((QMr,fOe)=>{fOe.exports=require("crypto").createHash});var gOe=v((YMr,mOe)=>{"use strict";var dP="qpzry9x8gf2tvdw0s3jn54khce6mua7l",nX={};for(lA=0;lA<dP.length;lA++){if(lP=dP.charAt(lA),nX[lP]!==void 0)throw new TypeError(lP+" is ambiguous");nX[lP]=lA}var lP,lA;function n1(t){var e=t>>25;return(t&33554431)<<5^-(e>>0&1)&996825010^-(e>>1&1)&642813549^-(e>>2&1)&513874426^-(e>>3&1)&1027748829^-(e>>4&1)&705979059}a(n1,"polymodStep");function _Oe(t){for(var e=1,r=0;r<t.length;++r){var n=t.charCodeAt(r);if(n<33||n>126)return"Invalid prefix ("+t+")";e=n1(e)^n>>5}for(e=n1(e),r=0;r<t.length;++r){var i=t.charCodeAt(r);e=n1(e)^i&31}return e}a(_Oe,"prefixChk");function bPt(t,e,r){if(r=r||90,t.length+7+e.length>r)throw new TypeError("Exceeds length limit");t=t.toLowerCase();var n=_Oe(t);if(typeof n=="string")throw new Error(n);for(var i=t+"1",s=0;s<e.length;++s){var o=e[s];if(o>>5!==0)throw new Error("Non 5-bit word");n=n1(n)^o,i+=dP.charAt(o)}for(s=0;s<6;++s)n=n1(n);for(n^=1,s=0;s<6;++s){var c=n>>(5-s)*5&31;i+=dP.charAt(c)}return i}a(bPt,"encode");function hOe(t,e){if(e=e||90,t.length<8)return t+" too short";if(t.length>e)return"Exceeds length limit";var r=t.toLowerCase(),n=t.toUpperCase();if(t!==r&&t!==n)return"Mixed-case string "+t;t=r;var i=t.lastIndexOf("1");if(i===-1)return"No separator character for "+t;if(i===0)return"Missing prefix for "+t;var s=t.slice(0,i),o=t.slice(i+1);if(o.length<6)return"Data too short";var c=_Oe(s);if(typeof c=="string")return c;for(var u=[],l=0;l<o.length;++l){var d=o.charAt(l),f=nX[d];if(f===void 0)return"Unknown character "+d;c=n1(c)^f,!(l+6>=o.length)&&u.push(f)}return c!==1?"Invalid checksum for "+t:{prefix:s,words:u}}a(hOe,"__decode");function xPt(){var t=hOe.apply(null,arguments);if(typeof t=="object")return t}a(xPt,"decodeUnsafe");function wPt(t){var e=hOe.apply(null,arguments);if(typeof e=="object")return e;throw new Error(e)}a(wPt,"decode");function fP(t,e,r,n){for(var i=0,s=0,o=(1<<r)-1,c=[],u=0;u<t.length;++u)for(i=i<<e|t[u],s+=e;s>=r;)s-=r,c.push(i>>s&o);if(n)s>0&&c.push(i<<r-s&o);else{if(s>=e)return"Excess padding";if(i<<r-s&o)return"Non-zero padding"}return c}a(fP,"convert");function EPt(t){var e=fP(t,8,5,!0);if(Array.isArray(e))return e}a(EPt,"toWordsUnsafe");function TPt(t){var e=fP(t,8,5,!0);if(Array.isArray(e))return e;throw new Error(e)}a(TPt,"toWords");function SPt(t){var e=fP(t,5,8,!1);if(Array.isArray(e))return e}a(SPt,"fromWordsUnsafe");function APt(t){var e=fP(t,5,8,!1);if(Array.isArray(e))return e;throw new Error(e)}a(APt,"fromWords");mOe.exports={decodeUnsafe:xPt,decode:wPt,encode:bPt,toWordsUnsafe:EPt,toWords:TPt,fromWordsUnsafe:SPt,fromWords:APt}});var POe=v((eFr,ROe)=>{var xOe=require("fs"),Mp=require("path"),wOe=require("os"),EOe=typeof __webpack_require__=="function"?__non_webpack_require__:require,kPt=process.config&&process.config.variables||{},NPt=!!process.env.PREBUILDS_ONLY,yOe=process.versions.modules,iX=CPt()?"electron":IPt()?"node-webkit":"node",aX=process.env.npm_config_arch||wOe.arch(),sX=process.env.npm_config_platform||wOe.platform(),TOe=process.env.LIBC||(RPt(sX)?"musl":"glibc"),oX=process.env.ARM_VERSION||(aX==="arm64"?"8":kPt.arm_version)||"",SOe=(process.versions.uv||"").split(".")[0];ROe.exports=lf;function lf(t){return EOe(lf.resolve(t))}a(lf,"load");lf.resolve=lf.path=function(t){t=Mp.resolve(t||".");try{var e=EOe(Mp.join(t,"package.json")).name.toUpperCase().replace(/-/g,"_");process.env[e+"_PREBUILD"]&&(t=process.env[e+"_PREBUILD"])}catch{}if(!NPt){var r=vOe(Mp.join(t,"build/Release"),bOe);if(r)return r;var n=vOe(Mp.join(t,"build/Debug"),bOe);if(n)return n}var i=c(t);if(i)return i;var s=c(Mp.dirname(process.execPath));if(s)return s;var o=["platform="+sX,"arch="+aX,"runtime="+iX,"abi="+yOe,"uv="+SOe,oX?"armv="+oX:"","libc="+TOe,"node="+process.versions.node,process.versions.electron?"electron="+process.versions.electron:"",typeof __webpack_require__=="function"?"webpack=true":""].filter(Boolean).join(" ");throw new Error("No native build was found for "+o+`
2155
+ `)),l=fc.default.stripLine(c,1),d=u.indexOf("rxbytes")>=0?10:8,f=fc.default.extractColumns(l,[0,3,d],10).filter(p=>!!String(p[0]).match(/^(udp|tcp)/)).find(p=>{let _=String(p[1]).match(/\.(\d+)$/);return!!(_&&_[1]===String(t))});f&&f[2].length?e(parseInt(f[2],10)):r(new Error(`pid of port (${t}) not found`))}})})},linux(t){return new Promise((e,r)=>{fc.default.exec("netstat -tunlp",function(i,s,o){if(i)r(i);else{let c=o.toString().trim();c&&HCt.default.warn(c);let u=fc.default.stripLine(s.toString(),2),l=fc.default.extractColumns(u,[3,6],7).find(d=>{let f=String(d[0]).match(/:(\d+)$/);return!!(f&&f[1]===String(t))});if(l&&l[1]){let d=l[1].split("/",1)[0];d.length?e(parseInt(d,10)):r(new Error(`pid of port (${t}) not found`))}else r(new Error(`pid of port (${t}) not found`))}})})},win32(t){return new Promise((e,r)=>{fc.default.exec("netstat -ano",function(n,i,s){if(n)r(n);else{let o=s.toString().trim();if(o){r(new Error(o));return}let c=fc.default.stripLine(i.toString(),4),u=fc.default.extractColumns(c,[1,4],5).find(l=>{let d=String(l[0]).match(/:(\d+)$/);return!!(d&&d[1]===String(t))});u&&u[1].length&&parseInt(u[1],10)>0?e(parseInt(u[1],10)):r(new Error(`pid of port (${t}) not found`))}})})},android(t){return new Promise((e,r)=>{let n=qCt.tmpdir()+"/.find-process",i=n+"/"+process.pid,s='netstat -tunp >> "'+i+'"';jCt(n).then(()=>{fc.default.exec(s,()=>{FR.readFile(i,"utf8",(o,c)=>{if(FR.unlink(i,()=>{}),o)r(o);else{c=fc.default.stripLine(c,2);let u=fc.default.extractColumns(c,[3,6],7).find(l=>{let d=String(l[0]).match(/:(\d+)$/);return!!(d&&d[1]===String(t))});if(u&&u[1]){let l=u[1].split("/",1)[0];l.length?e(parseInt(l,10)):r(new Error(`pid of port (${t}) not found`))}else r(new Error(`pid of port (${t}) not found`))}})})})})}};zx.freebsd=zx.darwin;zx.sunos=zx.darwin;function $Ct(t){let e=process.platform;return new Promise((r,n)=>{if(!(e in zx))return n(new Error(`platform ${e} is unsupported`));let i=zx[e];i(t).then(r,n)})}a($Ct,"findPidByPort");Sl.default=$Ct});var sNe=v(Al=>{"use strict";var GCt=Al&&Al.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:a(function(){return e[r]},"get")}),Object.defineProperty(t,n,i)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),VCt=Al&&Al.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),KCt=Al&&Al.__importStar||(function(){var t=a(function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},t(e)},"ownKeys");return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),i=0;i<n.length;i++)n[i]!=="default"&&GCt(r,e,n[i]);return VCt(r,e),r}})(),zCt=Al&&Al.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Al,"__esModule",{value:!0});var UR=KCt(require("path")),Xh=zCt(TW());function AW(t,e){return e?t&&t.match?t.match(e)!==null:!1:!0}a(AW,"matchName");function iNe(t){let e=t.split(UR.sep),r=e[e.length-1];r&&(e[e.length-1]=r.split(" ")[0]);let n=[];for(let i of e){let s=i.indexOf(" -");if(s>=0){n.push(i.substring(0,s).trim());break}else if(i.endsWith(" ")){n.push(i.trim());break}n.push(i)}return n.join(UR.sep)}a(iNe,"fetchBin");function aNe(t){if(process.platform==="darwin"){let e=t.indexOf(".app/");if(e>=0)return UR.basename(t.substring(0,e))}return UR.basename(t)}a(aNe,"fetchName");var ry={darwin(t){return new Promise((e,r)=>{let n;"pid"in t&&t.pid!==void 0?n=`ps -p ${t.pid} -ww -o pid,ppid,uid,gid,args`:n="ps ax -ww -o pid,ppid,uid,gid,args",Xh.default.exec(n,function(i,s,o){if(i)"pid"in t&&t.pid!==void 0?e([]):r(i);else{let c=o.toString().trim();if(c){r(new Error(c));return}let u=Xh.default.stripLine(s.toString(),1),d=Xh.default.extractColumns(u,[0,1,2,3,4],5).filter(f=>f[0]&&t.pid!==void 0?f[0]===String(t.pid):f[4]&&t.name?AW(f[4],t.name):!!f[0]).map(f=>{let p=String(f[4]),_=iNe(p);return{pid:parseInt(f[0],10),ppid:parseInt(f[1],10),uid:parseInt(f[2],10),gid:parseInt(f[3],10),name:aNe(_),bin:_,cmd:f[4]}});t.config.strict&&t.name&&(d=d.filter(f=>f.name===t.name)),e(d)}})})},win32(t){return new Promise((e,r)=>{let n="[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-CimInstance -className win32_process | select Name,ProcessId,ParentProcessId,CommandLine,ExecutablePath",i=[],s=Xh.default.spawn("powershell.exe",["/c",n],{detached:!1,windowsHide:!0});s.stdout.on("data",o=>{i.push(o.toString())}),s.on("error",o=>{r(new Error("Command '"+n+"' failed with reason: "+o.toString()))}),s.on("close",o=>{if(o!==0)return r(new Error("Command '"+n+"' terminated with code: "+o));let c=Xh.default.parseTable(i.join("")).filter(u=>{if(t.pid!==void 0)return u.ProcessId===String(t.pid);if(t.name){let l=u.Name||"";return t.config.strict?l===t.name||l.endsWith(".exe")&&l.slice(0,-4)===t.name:AW(u.CommandLine||l,t.name)}else return!0}).map(u=>({pid:parseInt(u.ProcessId,10),ppid:parseInt(u.ParentProcessId,10),bin:u.ExecutablePath,name:u.Name||"",cmd:u.CommandLine}));e(c)})})},android(t){return new Promise((e,r)=>{Xh.default.exec("ps",function(i,s,o){if(i)t.pid!==void 0?e([]):r(i);else{let c=o.toString().trim();if(c){r(new Error(c));return}let u=Xh.default.stripLine(s.toString(),1),d=Xh.default.extractColumns(u,[0,3],4).filter(f=>f[0]&&t.pid!==void 0?f[0]===String(t.pid):f[1]&&t.name?AW(f[1],t.name):!!f[0]).map(f=>{let p=String(f[1]),_=iNe(p);return{pid:parseInt(f[0],10),ppid:0,name:aNe(_),bin:_,cmd:f[1]}});t.config.strict&&t.name&&(d=d.filter(f=>f.name===t.name)),e(d)}})})}};ry.linux=ry.darwin;ry.sunos=ry.darwin;ry.freebsd=ry.darwin;function JCt(t){let e=process.platform,r=ry[e];return r?r(t):Promise.reject(new Error(`Platform "${e}" is not supported`))}a(JCt,"findProcess");Al.default=JCt});var cNe=v(aA=>{"use strict";var NW=aA&&aA.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(aA,"__esModule",{value:!0});var WCt=NW(nNe()),oNe=NW(sNe()),XCt=NW(SW()),kW={port(t,e){return(0,WCt.default)(t).then(r=>kW.pid(r,e),()=>[])},pid(t,e){return(0,oNe.default)({pid:t,config:e})},name(t,e){return(0,oNe.default)({name:t,config:e,skipSelf:!0})}};function QCt(t,e,r){let n=Object.assign({logLevel:"warn",strict:typeof r=="boolean"?r:!1},typeof r=="object"?r:{});return n.logLevel&&XCt.default.setLevel(n.logLevel),new Promise((i,s)=>{if(!(t in kW))s(new Error(`do not support find by "${t}"`));else{let o=/^\d+$/.test(String(e));t==="pid"&&!o?s(new Error("pid must be a number")):t==="port"&&!o?s(new Error("port must be a number")):kW[t](e,n).then(i,s)}})}a(QCt,"find");aA.default=QCt});var lNe=v(uNe=>{"use strict";Object.defineProperty(uNe,"__esModule",{value:!0})});var dNe=v(kl=>{"use strict";var YCt=kl&&kl.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:a(function(){return e[r]},"get")}),Object.defineProperty(t,n,i)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),ZCt=kl&&kl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&YCt(e,t,r)},e6t=kl&&kl.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kl,"__esModule",{value:!0});kl.default=void 0;var t6t=cNe();Object.defineProperty(kl,"default",{enumerable:!0,get:a(function(){return e6t(t6t).default},"get")});ZCt(lNe(),kl)});var pNe=v(Bp=>{"use strict";Object.defineProperties(Bp,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var r6t=_W(),HR=class{static{a(this,"R")}constructor(e){this.client=e}async getAddress(){return this.client._request("post","/address")}async getBtcBalance(e={}){return this.client._request("post","/btcbalance",e)}async sendBtc(e){return this.client._request("post","/sendbtc",e)}async createUtxos(e={}){return this.client._request("post","/createutxos",e)}async estimateFee(e){return this.client._request("post","/estimatefee",e)}async listOnchainTransactions(e={}){return this.client._request("post","/listtransactions",e)}async listUnspents(e={}){return this.client._request("post","/listunspents",e)}},jR=class{static{a(this,"N")}constructor(e){this.client=e,this.rgbTransactionSubscriptions=new Map,this.rgbTransactionPollingIntervals=new Map}async getAssetBalance(e){return this.client._request("post","/assetbalance",e)}async getAssetMetadata(e){return this.client._request("post","/assetmetadata",e)}async listAssets(e={}){let r={filter_asset_schemas:e.filter_asset_schemas};return this.client._request("post","/listassets",r)}async listTransactions(e={skip_sync:!1}){return this.client._request("post","/listtransactions",e)}async listTransfers(e){return this.client._request("post","/listtransfers",{asset_id:e})}async issueAssetCfa(e){return this.client._request("post","/issueassetcfa",e)}async issueAssetNia(e){return this.client._request("post","/issueassetnia",e)}async issueAssetUda(e){return this.client._request("post","/issueassetuda",e)}async sendAsset(e){return this.client._request("post","/sendasset",e)}async createRgbInvoice(e){let r={asset_id:e.asset_id,duration_seconds:e.duration_seconds,min_confirmations:e.min_confirmations,witness:e.witness||!1};return this.client._request("post","/rgbinvoice",r)}async payRgbInvoice(e){var r;let n=await this.decodeRgbInvoice({invoice:e.invoice}),i={recipient_id:n.recipient_id,asset_id:e.asset_id||n.asset_id,assignment:{type:"Fungible",value:e.amount||((r=n?.assignment)==null?void 0:r.value)},fee_rate:e.fee_rate,skip_sync:e.skip_sync,donation:e.donation||!1,min_confirmations:e.min_confirmations||1,transport_endpoints:e.transport_endpoints||n.transport_endpoints||[]};return this.sendAsset(i)}async decodeRgbInvoice(e){return this.client._request("post","/decodergbinvoice",e)}async failTransfers(e){return this.client._request("post","/failtransfers",e)}async getAssetMedia(e){return this.client._request("post","/getassetmedia",e)}async refreshTransfers(e={}){let r={skip_sync:e.skip_sync};return this.client._request("post","/refreshtransfers",r)}async syncRgbWallet(){return this.client._request("post","/sync",{})}async postAssetMedia(e){let r=new FormData;return r.append("file",e.file),this.client._request("post","/postassetmedia",r)}subscribeToRgbTransactions(e){let{onTransaction:r,onError:n,pollingInterval:i=5e3,maxStoredIds:s=1e3,skipInitialFetch:o=!1}=e;if(!r||typeof r!="function")throw new Error("onTransaction callback is required and must be a function");i<1e3&&console.warn("Warning: Polling interval less than 1000ms may cause performance issues");let c=`rgb-tx-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,u=Date.now(),l=new Set,d=new Map,f=a(g=>typeof g=="string"?new Date(g).getTime():g||0,"d"),p=a(()=>{l.size<=s||[...d.entries()].sort((g,y)=>g[1]-y[1]).map(g=>g[0]).slice(0,l.size-s).forEach(g=>{l.delete(g),d.delete(g)})},"f");o||this.listTransactions().then(g=>{g&&g.transfers&&Array.isArray(g.transfers)&&(g.transfers.forEach(y=>{l.add(y.idx),d.set(y.idx,f(y.created_at))}),p())}).catch(g=>{n&&typeof n=="function"&&n(g)});let _=i,h=0,m=setInterval(async()=>{try{let g=await this.listTransactions();if(g&&g.transfers&&Array.isArray(g.transfers)){let y=g.transfers.filter(w=>{if(!l.has(w.idx))return l.add(w.idx),d.set(w.idx,f(w.created_at)),!0;let E=f(w.created_at);return l.has(w.idx)&&E>(d.get(w.idx)||0)?(d.set(w.idx,E),!0):!1});if(g.transfers.length>0){let w=Math.max(...g.transfers.map(E=>f(E.created_at)));u=Math.max(u,w)}if(p(),y.length>0)y.forEach(w=>{r(w)}),h=0;else if(h++,h>5){let w=Math.min(i*3,i*(1+h/10));if(w!==_){_=w,clearInterval(m);let E=setInterval(m.callback,_);this.rgbTransactionPollingIntervals.set(c,E)}}}}catch(g){n&&typeof n=="function"&&n(g)}},i);return m.callback=m._onTimeout,this.rgbTransactionSubscriptions.set(c,{onTransaction:r,onError:n,pollingInterval:i,currentPollingInterval:_,maxStoredIds:s}),this.rgbTransactionPollingIntervals.set(c,m),c}unsubscribeFromRgbTransactions(e){if(!this.rgbTransactionSubscriptions.has(e))return!1;let r=this.rgbTransactionPollingIntervals.get(e);return r&&(clearInterval(r),this.rgbTransactionPollingIntervals.delete(e)),this.rgbTransactionSubscriptions.delete(e),!0}},ny={},fNe;function n6t(){if(fNe)return ny;fNe=1,Object.defineProperty(ny,"__esModule",{value:!0}),ny.bech32m=ny.bech32=void 0;let t="qpzry9x8gf2tvdw0s3jn54khce6mua7l",e={};for(let l=0;l<t.length;l++){let d=t.charAt(l);e[d]=l}function r(l){let d=l>>25;return(l&33554431)<<5^-(d>>0&1)&996825010^-(d>>1&1)&642813549^-(d>>2&1)&513874426^-(d>>3&1)&1027748829^-(d>>4&1)&705979059}a(r,"t");function n(l){let d=1;for(let f=0;f<l.length;++f){let p=l.charCodeAt(f);if(p<33||p>126)return"Invalid prefix ("+l+")";d=r(d)^p>>5}d=r(d);for(let f=0;f<l.length;++f){let p=l.charCodeAt(f);d=r(d)^p&31}return d}a(n,"r");function i(l,d,f,p){let _=0,h=0,m=(1<<f)-1,g=[];for(let y=0;y<l.length;++y)for(_=_<<d|l[y],h+=d;h>=f;)h-=f,g.push(_>>h&m);if(p)h>0&&g.push(_<<f-h&m);else{if(h>=d)return"Excess padding";if(_<<f-h&m)return"Non-zero padding"}return g}a(i,"c");function s(l){return i(l,8,5,!0)}a(s,"u");function o(l){let d=i(l,5,8,!1);if(Array.isArray(d))return d}a(o,"p");function c(l){let d=i(l,5,8,!1);if(Array.isArray(d))return d;throw new Error(d)}a(c,"g");function u(l){let d;l==="bech32"?d=1:d=734539939;function f(m,g,y){if(y=y||90,m.length+7+g.length>y)throw new TypeError("Exceeds length limit");m=m.toLowerCase();let w=n(m);if(typeof w=="string")throw new Error(w);let E=m+"1";for(let A=0;A<g.length;++A){let I=g[A];if(I>>5!==0)throw new Error("Non 5-bit word");w=r(w)^I,E+=t.charAt(I)}for(let A=0;A<6;++A)w=r(w);w^=d;for(let A=0;A<6;++A){let I=w>>(5-A)*5&31;E+=t.charAt(I)}return E}a(f,"d");function p(m,g){if(g=g||90,m.length<8)return m+" too short";if(m.length>g)return"Exceeds length limit";let y=m.toLowerCase(),w=m.toUpperCase();if(m!==y&&m!==w)return"Mixed-case string "+m;m=y;let E=m.lastIndexOf("1");if(E===-1)return"No separator character for "+m;if(E===0)return"Missing prefix for "+m;let A=m.slice(0,E),I=m.slice(E+1);if(I.length<6)return"Data too short";let R=n(A);if(typeof R=="string")return R;let $=[];for(let B=0;B<I.length;++B){let U=I.charAt(B),L=e[U];if(L===void 0)return"Unknown character "+U;R=r(R)^L,!(B+6>=I.length)&&$.push(L)}return R!==d?"Invalid checksum for "+m:{prefix:A,words:$}}a(p,"f");function _(m,g){let y=p(m,g);if(typeof y=="object")return y}a(_,"m");function h(m,g){let y=p(m,g);if(typeof y=="object")return y;throw new Error(y)}return a(h,"y"),{decodeUnsafe:_,decode:h,encode:f,toWords:s,fromWordsUnsafe:o,fromWords:c}}return a(u,"b"),ny.bech32=u("bech32"),ny.bech32m=u("bech32m"),ny}a(n6t,"B");var i6t=n6t(),a6t=1,s6t=13,o6t=19,c6t=23,u6t=6,l6t=24,d6t=16,f6t=27,p6t=5,_6t=30,h6t=31,m6t={bc:"Mainnet",tb:"Testnet",bcrt:"Regtest",sb:"Signet",tbs:"Signet"},g6t={m:.001,u:1e-6,n:1e-9,p:1e-12};function qR(t){let e=0;for(let r of t)e=e*32+r;return e}a(qR,"E");function Qh(t){let e=[],r=0,n=0;for(let i of t)for(r=r<<5|i,n+=5;n>=8;)e.push(r>>>n-8&255),n-=8;return new Uint8Array(e)}a(Qh,"v");function Jx(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}a(Jx,"A");function y6t(t){let e=t.match(/^ln([a-z]+)(\d*)([munp]?)$/);if(!e)throw new Error("Invalid HRP format");let[,r,n,i]=e;return{currency:r,amount:n?parseInt(n):null,siPrefix:i||null,network:m6t[r]||"Unknown"}}a(y6t,"ee");function v6t(t){let e={},r=0;for(;r<t.length;){if(r+3>t.length)throw new Error("Unexpected end of tagged fields");let n=t[r],i=t[r+1]<<5|t[r+2];if(r+=3,r+i>t.length)throw new Error("Tagged field length exceeds remaining data");let s=t.slice(r,r+i);r+=i;try{switch(n){case a6t:s.length===52&&(e.paymentHash=Jx(Qh(s)));break;case s6t:let o=Qh(s);e.description=new TextDecoder().decode(o);break;case o6t:s.length===53&&(e.payeePubkey=Jx(Qh(s)));break;case c6t:s.length===52&&(e.descriptionHash=Jx(Qh(s)));break;case u6t:e.expiryTime=qR(s);break;case l6t:e.minFinalCltvExpiryDelta=qR(s);break;case d6t:s.length===52&&(e.paymentSecret=Jx(Qh(s)));break;case f6t:e.paymentMetadata=Jx(Qh(s));break;case p6t:e.features=Jx(Qh(s));break;case _6t:e.rgbAmount=qR(s);break;case h6t:let c=Qh(s);e.rgbContractId=new TextDecoder().decode(c);break;default:break}}catch{continue}}return e}a(v6t,"te");function b6t(t){try{let e=i6t.bech32.decode(t,2e3),{prefix:r,words:n}=e,i=y6t(r);if(n.length<111)throw new Error("Invoice data too short");let s=n.slice(0,7),o=qR(s),c=n.slice(7,n.length-104),u=v6t(c),l=null;if(i.amount!==null){let p=i.amount;i.siPrefix&&g6t[i.siPrefix]?i.siPrefix==="u"?l=p*1e5:i.siPrefix==="m"?l=p*1e8:i.siPrefix==="n"?l=p*100:i.siPrefix==="p"&&(l=Math.floor(p/10)):l=Math.floor(p/10)}let d=u.expiryTime||3600,f=null;return u.rgbContractId&&(f=u.rgbContractId),{amt_msat:l,expiry_sec:d,timestamp:o,asset_id:f,asset_amount:u.rgbAmount||null,payment_hash:u.paymentHash||null,payment_secret:u.paymentSecret||null,payee_pubkey:u.payeePubkey||null,network:i.network}}catch(e){throw new Error(`Failed to decode Lightning invoice: ${e.message}`)}}a(b6t,"se");var $R=class{static{a(this,"D")}constructor(e){this.client=e,this.paymentSubscriptions=new Map,this.paymentPollingIntervals=new Map}async connectPeer(e){return this.client._request("post","/connectpeer",e)}async listPeers(){return this.client._request("get","/listpeers")}async disconnectPeer(e){return this.client._request("post","/disconnectpeer",e)}async openChannel(e){return this.client._request("post","/openchannel",e)}async closeChannel(e){return this.client._request("post","/closechannel",e)}async listChannels(){return this.client._request("get","/listchannels")}async getChannelIdByTempId(e){return this.client._request("post","/getchannelid",e)}async createInvoice(e){return this.client._request("post","/lninvoice",e)}async payInvoice(e){return this.client._request("post","/sendpayment",e)}async decodeLnInvoice(e){return this.client._request("post","/decodelninvoice",e)}async getInvoiceStatus(e){return this.client._request("post","/invoicestatus",e)}async getPayment(e){return this.client._request("post","/getpayment",e)}async listPayments(){return this.client._request("get","/listpayments")}async keysend(e){return this.client._request("post","/keysend",e)}subscribeToPastPayments(e){let{onPayment:r,onError:n,pollingInterval:i=5e3,maxStoredIds:s=1e3,skipInitialFetch:o=!1}=e;if(!r||typeof r!="function")throw new Error("onPayment callback is required and must be a function");i<1e3&&console.warn("Warning: Polling interval less than 1000ms may cause performance issues");let c=`payment-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,u=Date.now(),l=new Set,d=new Map,f=a(()=>{l.size<=s||[...d.entries()].sort((m,g)=>m[1]-g[1]).map(m=>m[0]).slice(0,l.size-s).forEach(m=>{l.delete(m),d.delete(m)})},"d");o||this.listPayments().then(m=>{m&&m.payments&&Array.isArray(m.payments)&&(m.payments.forEach(g=>{l.add(g.payment_hash),d.set(g.payment_hash,g.created_at||Date.now())}),f())}).catch(m=>{n&&typeof n=="function"&&n(m)});let p=i,_=0,h=setInterval(async()=>{try{let m=await this.listPayments();if(m&&m.payments&&Array.isArray(m.payments)){let g=m.payments.filter(y=>l.has(y.payment_hash)?l.has(y.payment_hash)&&y.updated_at>(d.get(y.payment_hash)||0)?(d.set(y.payment_hash,y.updated_at||Date.now()),!0):!1:(l.add(y.payment_hash),d.set(y.payment_hash,y.created_at||Date.now()),!0));if(m.payments.length>0){let y=Math.max(...m.payments.map(w=>w.updated_at||0));u=Math.max(u,y)}if(f(),g.length>0)g.forEach(y=>{r(y)}),_=0;else if(_++,_>5){let y=Math.min(i*3,i*(1+_/10));if(y!==p){p=y,clearInterval(h);let w=setInterval(h.callback,p);this.paymentPollingIntervals.set(c,w)}}}}catch(m){n&&typeof n=="function"&&n(m)}},i);return h.callback=h._onTimeout,this.paymentSubscriptions.set(c,{onPayment:r,onError:n,pollingInterval:i,currentPollingInterval:p,maxStoredIds:s}),this.paymentPollingIntervals.set(c,h),c}unsubscribeFromPayments(e){if(!this.paymentSubscriptions.has(e))return!1;let r=this.paymentPollingIntervals.get(e);return r&&(clearInterval(r),this.paymentPollingIntervals.delete(e)),this.paymentSubscriptions.delete(e),!0}decodeRGBLNInvoice(e){return b6t(e)}},GR=class{static{a(this,"C")}constructor(e){this.client=e}async makerInitSwap(e){return this.client._request("post","/makerinit",e)}async makerExecuteSwap(e){return this.client._request("post","/makerexecute",e)}async takerAcceptSwap(e){return this.client._request("post","/taker",e)}async getSwap(e){return this.client._request("post","/getswap",e)}async listSwaps(){return this.client._request("get","/listswaps")}},VR=class{static{a(this,"U")}constructor(e){this.client=e}async getNodeInfo(){return this.client._request("get","/nodeinfo")}async getNodeState(){try{let e=await this.client._request("get","/nodestate");return e?.state}catch(e){if(e.message.includes("Network Error"))return"NonExisting";throw e}}async getNetworkInfo(){return this.client._request("get","/networkinfo")}async checkIndexerUrl(e){return this.client._request("post","/checkindexerurl",e)}async checkProxyEndpoint(e){return this.client._request("post","/checkproxyendpoint",e)}async sendOnionMessage(e){return this.client._request("post","/sendonionmessage",e)}async signMessage(e){return this.client._request("post","/signmessage",e)}async initNode(e){return this.client._request("post","/init",e)}async unlockNode(e){return this.client._request("post","/unlock",e)}async lockNode(){return this.client._request("post","/lock")}async changePassword(e){return this.client._request("post","/changepassword",e)}async backupNode(e){return this.client._request("post","/backup",e)}async restoreNode(e){return this.client._request("post","/restore",e)}},KR=class{static{a(this,"G")}constructor(e={},r=null){let n={};typeof e=="string"?(n.baseUrl=e,r&&(n.headers={Authorization:`Bearer ${r}`})):n=e,this.baseUrl=n.baseUrl||"http://localhost:3001",this.axios=r6t.create({baseURL:this.baseUrl,headers:{"Content-Type":"application/json",...n.headers},...n.axiosConfig}),this.onchain=new HR(this),this.rgb=new jR(this),this.lightning=new $R(this),this.swaps=new GR(this),this.node=new VR(this)}async _request(e,r,n=null){var i,s;try{let o={method:e,url:r};return n!==null&&(e==="post"||e==="put"||e==="patch")?o.data=n:n!==null&&e==="get"&&(o.params=n),(await this.axios.request(o)).data}catch(o){if(o.response){let c=((i=o.response.data)==null?void 0:i.message)||((s=o.response.data)==null?void 0:s.error)||o.response.statusText;throw new Error(`API Error (${o.response.status}): ${c}`)}else throw o.request?new Error(`Network Error: Unable to reach RGB API at ${this.baseUrl}`):new Error(`Request Error: ${o.message}`)}}};Bp.LightningMethods=$R;Bp.NodeMethods=VR;Bp.OnchainMethods=HR;Bp.RgbApiClient=KR;Bp.RgbMethods=jR;Bp.SwapMethods=GR;Bp.default=KR});var sA=v((EMr,_Ne)=>{var{getConfig:x6t}=Vt(),{RgbApiClient:w6t}=pNe(),OW=null;function E6t(){if(!OW){let t=x6t();if(!t.LINK_RGB_LISTENING_PORT)throw new Error("RGB configuration not available");OW=new w6t({baseUrl:`http://127.0.0.1:${t.LINK_RGB_LISTENING_PORT}`})}return OW}a(E6t,"getRgbClient");_Ne.exports=E6t});var oA=v((SMr,gNe)=>{var{checkObjectArgs:hNe}=Qi(),{getConfig:T6t}=Vt(),{decryptNostrString:zR}=Mr(),{getConfigFilePath:mNe}=HS(),{TASKS:S6t}=rt(),{reportTaskCompletion:A6t}=Lp(),Wx=sA();async function JR(){let t=await Wx().node.getNodeState(),e={};switch(t){case"None":e.state=0;break;case"Locked":e.state=1;break;case"Changing":e.state=3;break;case"Running":e.state=4;break;case"NonExisting":e.state=255;break;default:e.state=0}return e}a(JR,"getNodeState");async function k6t(){return(await Wx().rgb.listAssets({filter_asset_schemas:[]}))?.nia??[]}a(k6t,"getRGBAssetsList");async function N6t({password:t}){if(!t)throw new Error("password is required");let e=Wx(),r=await zR(t);return await e.node.initNode({password:r})}a(N6t,"genSeed");async function O6t({password:t,lnlinkUser:e}){if(!t)throw new Error("password is required");let r=Wx(),{LINK_BITCOIND_RPCHOST:n,LINK_BITCOIND_RPCUSER:i,LINK_BITCOIND_RPCPASS:s,LINK_RGB_LDK_PEER_LISTENING_PORT:o=9735,LINK_NAME:c,LINK_RGB_ELECTRS_HOST:u,LINK_RGB_PROXY_ENDPOINT:l}=T6t(),d=await zR(t),f=n?.split(":")[0],p=Number(n?.split(":")[1]),_={bitcoind_rpc_username:i,bitcoind_rpc_password:s,bitcoind_rpc_host:f,bitcoind_rpc_port:p,indexer_url:u,proxy_endpoint:l,password:d,announce_addresses:[`0.0.0.0:${o}`],announce_alias:`${c}`};e&&A6t({nostrAddress:e?.npub,tag:S6t.EnableRGBNode});let h=r.node.unlockNode(_),m=3e4,g,y=new Promise(E=>{g=setTimeout(async()=>{let A=await JR();E({message:"Request submitted, current node status:",status:A})},m)}),w=await Promise.race([h,y]);return clearTimeout(g),w||!0}a(O6t,"unlockNode");async function I6t({password:t}){let{rgbBackupPath:e}=mNe(),r={password:t,backup_path:e},n=Wx();hNe(r,["password","backup_path"]),(await JR()).state===4&&await n.node.lockNode();let s=await zR(t);return r.password=s,await n.node.backupNode(r)||!0}a(I6t,"backupNode");async function C6t({password:t}){let{rgbBackupPath:e}=mNe(),r={password:t,backup_path:e},n=Wx();(await JR()).state===4&&await n.node.lockNode(),hNe(r,["password","backup_path"]);let s=await zR(t);return r.password=s,await n.node.restoreNode(r)||!0}a(C6t,"restoreNode");gNe.exports={getNodeState:JR,genSeed:N6t,unlockNode:O6t,backupNode:I6t,restoreNode:C6t,getRGBAssetsList:k6t}});var CW=v((NMr,xNe)=>{var IW=dNe().default,{getWalletState:R6t}=Qi(),{getConfig:P6t}=Vt(),{WALLET_STATE_CODE:kMr}=rt(),Yh=Ke(),{getNodeState:L6t}=oA(),{getServiceConfig:yNe}=rA(),{getServicesState:D6t}=wW();function vNe(){let t=P6t();return t.LINK_EXTERNAL_NODES==="true"||t.LINK_EXTERNAL_NODES===!0}a(vNe,"isExternalNodesMode");var va={RUNNING:"Running",STOPPED:"Stopped"};async function B6t(){let t=new Yh("statusChecker");try{return D6t()?.tor?.hasProcess?va.RUNNING:va.STOPPED}catch(e){return t.error(`Error checking tor process: ${e.message}`),va.STOPPED}}a(B6t,"checkTorProcess");async function M6t(){let t=new Yh("statusChecker");try{if(vNe()){t.info("External nodes mode: checking litd via RPC...");try{let r=await R6t();if(r!=null)return t.info(`Litd is running (wallet state: ${r})`),va.RUNNING}catch(r){t.warn(`RPC check failed: ${r.message}`)}return va.STOPPED}let e=await IW("name","litd");return e.length>0?(t.info(`Found litd process(es): ${e.map(r=>r.pid).join(", ")}`),va.RUNNING):va.STOPPED}catch(e){return t.warn(`Failed to check litd process: ${e.message}`),va.STOPPED}}a(M6t,"checkLitdProcess");async function bNe(){let t=new Yh("statusChecker");try{if(vNe()){t.info("External nodes mode: checking RGB via SDK...");try{let r=await L6t();if(r!=null)return t.info("RGB is running (node state received)"),va.RUNNING}catch(r){t.warn(`RGB SDK check failed: ${r.message}`)}return va.STOPPED}let e=await IW("name","rgb-lightning-node");return e.length>0?(t.info(`Found rgb-lightning-node process(es): ${e.map(r=>r.pid).join(", ")}`),va.RUNNING):va.STOPPED}catch(e){return t.warn(`Failed to check rgb process: ${e.message}`),va.STOPPED}}a(bNe,"checkRgbProcess");async function WR(t){let e=new Yh("statusChecker");try{let r=yNe();if(!r[t])throw new Error(`${t} does not exist.`);switch(t){case"tor":return await B6t();case"litd":return await M6t();case"rgb":return await bNe();default:{let i=r[t].command.split(/[\/\\]/).pop().replace(".exe","");return(await IW("name",i)).length>0?va.RUNNING:va.STOPPED}}}catch(r){throw e.error(`Error checking ${t} process: ${r.message}`),r}}a(WR,"checkProcess");function F6t(t=""){let e=yNe(),r=new Yh("statusChecker"),n=a(s=>s!=="rgb"&&(!t||s.includes(t)),"shouldInclude"),i=Object.keys(e).filter(n);return Promise.all(i.map(async s=>{try{let o=await WR(s);return{service_name:s,status:o}}catch(o){return r.error(`Error checking ${s} status: ${o.message}`),{service_name:s,status:va.STOPPED,error:o.message}}}))}a(F6t,"getTerminalStatus");async function U6t(){let t=new Yh("statusChecker");try{return{service_name:"rgb",status:await bNe()}}catch(e){return t.error(`Error checking rgb status: ${e.message}`),{service_name:"rgb",status:va.STOPPED,error:e.message}}}a(U6t,"getRGBStatus");async function q6t(t){let e=new Yh("statusChecker");try{return await WR(t)===va.RUNNING}catch(r){return e.error(`Error checking if ${t} is running: ${r.message}`),!1}}a(q6t,"isServiceRunning");function H6t(t,e,r=3e4,n=1e3){let i=new Yh("statusChecker");return new Promise(s=>{let o=Date.now(),c=a(async()=>{try{if(await WR(t)===e){s(!0);return}}catch(u){i.error(`Error waiting for ${t} status: ${u.message}`)}if(Date.now()-o>=r){i.warn(`Timeout waiting for ${t} to reach status: ${e}`),s(!1);return}setTimeout(c,n)},"checkStatus");c()})}a(H6t,"waitForServiceStatus");xNe.exports={ServiceStatus:va,checkProcess:WR,getRGBStatus:U6t,getTerminalStatus:F6t,isServiceRunning:q6t,waitForServiceStatus:H6t}});var Ol=v((IMr,CNe)=>{var{getConfig:ENe,reloadConfig:j6t}=Vt(),{TASKS:RW}=rt(),nu=Ke(),{sleep:TNe}=jS(),{updateMainLnlinkConfig:$6t}=Mr(),{reportTaskCompletion:PW}=Lp(),{buildLitdArgs:G6t,buildTorArgs:V6t,buildRgbArgs:K6t}=rA(),{startService:XR,stopService:Xx}=wW(),{getTerminalStatus:cA,isServiceRunning:Qx,getRGBStatus:uA,ServiceStatus:Nl}=CW();async function SNe(t,{timeoutMs:e=15e3,pollIntervalMs:r=1e3}={}){let n=new nu("litdService"),i=Date.now()+e,s=[];for(;;){if(s=await cA("litd"),s.find(d=>d.service_name==="litd")?.status===t)return n.info(`Litd reached target status: ${t}`),{matched:!0,statuses:s};let u=Date.now();if(u>=i)break;let l=Math.min(r,Math.max(0,i-u));l>0&&await TNe(l)}let o=s.find(c=>c.service_name==="litd")?.status||"Unknown";return n.warn(`Timed out waiting for Litd status "${t}". Last observed status: ${o}`),{matched:!1,statuses:s}}a(SNe,"waitForLitdStatus");async function wNe(t,{timeoutMs:e=15e3,pollIntervalMs:r=1e3}={}){let n=new nu("rgbService"),i=Date.now()+e,s=null;for(;;){if(s=await uA(),s?.status===t)return n.info(`RGB reached target status: ${t}`),{matched:!0,statuses:s};let u=Date.now();if(u>=i)break;let l=Math.min(r,Math.max(0,i-u));l>0&&await TNe(l)}let o=s?.status||"Unknown";return n.warn(`Timed out waiting for RGB status "${t}". Last observed status: ${o}`),{matched:!1,statuses:s}}a(wNe,"waitForRgbStatus");async function ANe({waitForRunning:t=!0}={}){let e=new nu("litdService"),{LINK_ENABLE_TOR:r}=ENe(),n=r==="true"||r===!0;e.info("Starting terminal services...");let i=await cA(),s=i.find(c=>c.service_name==="litd"),o=i.find(c=>c.service_name==="tor");e.info(`Current status - Litd: ${s?.status}, Tor: ${o?.status}`);try{if(n&&o?.status===Nl.STOPPED){e.info("Starting Tor service...");let l=V6t();await XR("tor",l),e.info("Tor service started successfully")}if(s?.status===Nl.STOPPED){e.info("Starting Litd service...");let l=G6t(n);await XR("litd",l),e.info("Litd service started successfully")}let c=await cA(),u=c.find(l=>l.service_name==="litd")?.status;if(t&&u!==Nl.RUNNING){e.info("Waiting for Litd to reach running state after start...");let{matched:l,statuses:d}=await SNe(Nl.RUNNING,{timeoutMs:2e4,pollIntervalMs:1e3});if(!l)throw new Error("Litd failed to reach RUNNING state after start");return e.info("Terminal services started and Litd is running"),d}return e.info("Terminal services started successfully"),c}catch(c){throw e.error(`Failed to start terminal services: ${c.message}`),c}}a(ANe,"startTerminal");async function kNe(t={}){let e=new nu("litdService"),{lnlinkUser:r,waitForStopped:n=!0,waitOptions:i={}}=t||{};e.info("Stopping terminal services...");try{if(!await Xx("litd"))return e.warn("stopService returned a falsy result"),!1;if(r&&PW({nostrAddress:r.npub,tag:RW.StopTaprootAssetNode}),!n)return e.info("Terminal services stopped (waiting for STOPPED state skipped)"),!0;e.info("Waiting for Litd to confirm STOPPED state...");let{matched:o}=await SNe(Nl.STOPPED,{timeoutMs:15e3,pollIntervalMs:1e3,...i});if(!o)throw new Error("Litd did not stop within the expected time window");return e.info("Terminal services stopped successfully and Litd is confirmed STOPPED"),!0}catch(s){throw e.error(`Failed to stop terminal services: ${s.message}`),s}}a(kNe,"stopTerminal");async function LW(t={}){let e=new nu("litdService");e.info("Restarting terminal services...");try{if(!await kNe({...t,waitForStopped:!0}))return e.warn("Stopping Litd returned a falsy result, aborting restart."),!1;e.info("Starting Litd...");let n=await ANe({waitForRunning:!0});return e.info("Terminal services restarted successfully"),n}catch(r){throw e.error(`Failed to restart terminal services: ${r.message}`),r}}a(LW,"restartTerminal");async function z6t(t={}){let e=new nu("litdService");if(Object.keys(t).length===0)throw new Error("config is empty");return e.info("Applying new configuration..."),await LW()}a(z6t,"configTerminal");async function J6t(){let t=new nu("litdService");try{let e=await cA(),r=await Qx("litd"),n=await Qx("tor");return{healthy:r,services:{litd:{running:r,status:e.find(i=>i.service_name==="litd")?.status||"Unknown"},tor:{running:n,status:e.find(i=>i.service_name==="tor")?.status||"Unknown"}},timestamp:new Date().toISOString()}}catch(e){return t.error(`Health check failed: ${e.message}`),{healthy:!1,error:e.message,timestamp:new Date().toISOString()}}}a(J6t,"healthCheck");async function NNe(t){let e=new nu("rgbService");e.info("Starting RGB service...");try{let r=await uA();if(r?.status===Nl.STOPPED){e.info("RGB service is stopped, starting...");let i=K6t();await XR("rgb",i),t?.lnlinkUser&&PW({nostrAddress:t?.lnlinkUser?.npub,tag:RW.EnableRGBNode}),e.info("RGB service started successfully")}else e.info(`RGB service is already ${r?.status}`);return await uA()}catch(r){throw e.error(`Failed to start RGB service: ${r.message}`),r}}a(NNe,"startRGB");async function ONe(t){let e=new nu("rgbService");e.info("Stopping RGB service...");let r=t?.lnlinkUser;try{let n=await Xx("rgb");return e.info("RGB service stopped successfully"),r&&PW({nostrAddress:r.npub,tag:RW.StopRGBNode}),n}catch(n){throw e.error(`Failed to stop RGB service: ${n.message}`),n}}a(ONe,"stopRGB");async function INe(t={}){let e=new nu("rgbService");e.info("Restarting RGB service...");try{let r=await uA(),n=!!r?.error;if(r?.status===Nl.RUNNING||n){if(e.info(n?"RGB status check failed; forcing stop before restart...":"Stopping RGB service..."),!await ONe(t))return e.warn("Stopping RGB returned a falsy result, aborting restart."),!1;e.info("Waiting for RGB to stop...");let{matched:d}=await wNe(Nl.STOPPED,{timeoutMs:15e3,pollIntervalMs:1e3});if(!d)throw new Error("RGB did not stop within the expected time window")}e.info("Starting RGB...");let s=await NNe(t);if(s?.status===Nl.RUNNING)return e.info("RGB service restarted successfully"),s;e.info("Waiting for RGB to reach running state...");let{matched:c,statuses:u}=await wNe(Nl.RUNNING,{timeoutMs:2e4,pollIntervalMs:1e3});if(!c)throw new Error("RGB failed to reach RUNNING state after restart");return e.info("RGB service restarted successfully"),u}catch(r){throw e.error(`Failed to restart RGB service: ${r.message}`),r}}a(INe,"restartRGB");async function W6t(t={}){let e=new nu("nodeManage");e.info("Updating node name...");try{let{node_name:r}=t;if(!r)throw new Error("node_name is required");let n=await $6t({node_name:r});if(n!==1)throw new Error("Failed to update node name in DB");await j6t();let s=ENe()?.LINK_NAME||r,o=await LW(t);if(!o)throw new Error("Failed to restart litd after updating node name");let u=(Array.isArray(o)?o.find(f=>f.service_name==="litd"):null)?.status||(Array.isArray(o)?"Unknown":o?.status||"Unknown"),l=await INe(t),d=Array.isArray(l)?l.find(f=>f.service_name==="rgb")?.status||"Unknown":l?.status||"Unknown";return{update_status:n===1,node_name:s,litd_status:u,litd_details:o,rgb_status:d,rgb_details:l}}catch(r){throw e.error(`Failed to update nodename: ${r.message}`),r}}a(W6t,"updateNodeName");if(globalThis.addCleanupFunction){let t=new nu("nodeManage");globalThis.addCleanupFunction(async()=>{t.info("Cleaning up node processes...");try{await Qx("litd")&&(await Xx("litd"),t.info("litd process stopped")),await Qx("tor")&&(await Xx("tor"),t.info("tor process stopped")),await Qx("rgb")&&(await Xx("rgb"),t.info("RGB process stopped"))}catch(e){t.error(`Error during node cleanup: ${e.message}`)}})}CNe.exports={startTerminal:ANe,stopTerminal:kNe,restartTerminal:LW,configTerminal:z6t,getTerminalStatus:cA,healthCheck:J6t,startRGB:NNe,stopRGB:ONe,restartRGB:INe,getRGBStatus:uA,startService:XR,stopService:Xx,isServiceRunning:Qx,ServiceStatus:Nl,updateNodeName:W6t}});var BW=v((RMr,PNe)=>{var{getConfig:X6t}=Vt(),{getWalletState:Q6t}=Qi(),{getMainLnlinkConfig:DW,updateMainLnlinkConfig:RNe}=Mr(),{nip19:Y6t,getPublicKey:Z6t,generatePrivateKey:eRt}=nc();async function tRt({owner:t,settings:e,nodeName:r,enableTor:n}){if(!t)throw new Error("ownerNostrAddr is null");if(!/^npub[a-z0-9]{59,}$/.test(t))throw new Error("owner nostr address format error");let i={...e,enableTor:n!==void 0?n:!0},s=await DW();if(s&&s.node_sk&&s.owner_npub){let c={settings:i};r&&(c.node_name=r),await RNe(c)}else{let c=eRt(),u=Y6t.npubEncode(Z6t(c)),l={owner_npub:t,node_sk:c,node_npub:u,settings:i};r&&(l.node_name=r),await RNe(l)}return await DW()}a(tRt,"initConfig");async function rRt(){let t=X6t(),e=[],{getTerminalStatus:r,getRGBStatus:n,isServiceRunning:i}=Ol(),s=await i("litd"),o=await Q6t(!0);if(s&&o===4){let d=await r(),f=await n(),p=[...new Set([f,...d])];e.push(...p)}else{let d=await n();e.push(d),e.push({service_name:"litd",status:s?"Running":"Stopped"})}let c=await DW(),u=c?.settings||{},l=u.enableTor!==void 0?u.enableTor:!0;return{linkName:t?.LINK_NAME,owner:t?.LINK_OWNER,nodeAddr:t?.LINK_NODE_ADDR,relayUri:t?.LINK_RELAY_URI,settings:c?.settings,enableTor:l,linkStatus:e}}a(rRt,"getInfo");PNe.exports={initConfig:tRt,getInfo:rRt}});var MW=v((LMr,LNe)=>{var nRt=require("node:events"),iRt=new nRt;LNe.exports=iRt});var FW=v((DMr,DNe)=>{var{getConfig:aRt}=Vt(),{startTerminal:sRt}=Ol(),oRt=Ke();async function cRt(){let t=new oRt("job");try{if(!aRt().LINK_READY)return t.info("LND job startLitd not set, skipping."),!1;let e=await sRt();return e&&t.info(`LND job startLitd complete:${JSON.stringify(e)}`),!0}catch(e){t.error(`LND job startLitd error--->${e.message}`)}}a(cRt,"startLitd");DNe.exports=cRt});var UW=v((MMr,BNe)=>{var{getConfig:uRt}=Vt(),{startRGB:lRt}=Ol(),dRt=Ke();async function fRt(){let t=new dRt("job");try{if(!uRt().LINK_READY)return t.info("RGB job startRGB not set, skipping."),!1;let e=await lRt();t.info(`RGB job startRGB complete:${JSON.stringify(e)}`)}catch(e){t.error(`RGB job startRGB error--->${e.message}`)}}a(fRt,"startRGB");BNe.exports=fRt});var qW=v((UMr,MNe)=>{var QR=new Map;async function pRt(t,e=[],r,n=60*1e3,i){let s=a(async()=>{try{await t(...e),i.info(`\u2705 Attempt ${r} succeeded`)}catch(o){i.error(`Attempt ${r} failed with: ${o.message}, retrying in ${n/1e3} seconds`)}finally{setTimeout(s,n)}},"retry");s()}a(pRt,"executeWithRetry");async function _Rt(t,e,r,n=0,i=60*1e3,s){QR.has(r)&&(clearTimeout(QR.get(r)),QR.delete(r));let o=a(async(c=1)=>{try{Array.isArray(e)?await t(...e):await t(e),s.info(`\u2705 Attempt ${r} succeeded`)}catch(u){if(s.warn(`Attempt ${r} failed with: ${u.message}, retrying in ${i/1e3} seconds`),n&&c>=n)return s.error(`Attempt ${r} failed after ${c} attempts`),!1;let l=setTimeout(()=>o(c+1),i);QR.set(r,l)}},"retry");o()}a(_Rt,"terminateableRetryExecute");async function hRt(t,e,r,n=10,i=1e3,s){return new Promise((o,c)=>{let u=a(async(l=1)=>{try{let d=await t(...e);if(d!==void 0){s.info(`\u2705 Attempt ${r} succeeded`),o(d);return}throw new Error(`${r} returned falsy value`)}catch(d){if(s.warn(`Attempt ${l}/${n} for ${r} failed: ${d.message}`),l>=n){s.error(`\u274C ${r} failed after ${n} attempts`),c(d);return}setTimeout(()=>{u(l+1).catch(c)},i)}},"retry");u(1).catch(c)})}a(hRt,"retryUntilSuccess");MNe.exports={executeWithRetry:pRt,terminateableRetryExecute:_Rt,retryUntilSuccess:hRt}});var HW=v((HMr,mRt)=>{mRt.exports={name:"lnlink-server",version:"1.0.7",private:!1,main:"dist/index.js",files:["dist","prisma","README.md"],scripts:{build:"node build.js && node build.js --mode development --external all --entry electron","start:bin":"dotenv -e .env.bin -- node scripts/start-bin.js","start:docker:dev":"dotenv -e .env.dev -- docker compose -f ./docker-compose.dev.yml up --build","start:dev":'dotenv -e .env.dev -- sh -c "prisma generate && (prisma migrate dev --name auto_update || prisma db push) && clinic heapprof -- node ./app.js"',"start:regtest":"docker compose --env-file ./.env.regtest -f ./docker-compose-lnlink.yml up --build","start:testnet":"docker compose --env-file ./.env.testnet -f ./docker-compose-lnlink.yml up --build","start:mainnet":"docker compose --env-file ./.env.mainnet -f ./docker-compose-lnlink.yml up --build","start:bin:dist":"dotenv -e .env.bin -- node scripts/start-bin.js --dist",lint:"eslint .","lint:fix":"eslint . --fix","lint:staged":"lint-staged",preinstall:"npx husky"},_moduleAliases:{"@api":"api","@constants":"constants","@business":"business","@nostr":"nostr","@package.json":"./package.json"},dependencies:{"@grpc/grpc-js":"^1.10.8","@grpc/proto-loader":"^0.7.9","@lightsparkdev/lightspark-sdk":"^1.8.9","@lnfi-network/rgb-api-js-sdk":"^1.0.7","@prisma/client":"6.14.0",axios:"^1.7.2","bitcoin-core":"^4.2.0","body-parser":"^1.20.2",bolt11:"^1.4.1","cookie-parser":"~1.4.4","crypto-js":"^4.2.0",dayjs:"^1.11.10",debug:"~2.6.9","decimal.js":"^10.4.3",ethers:"^6.15.0",express:"^4.18.2","express-rate-limit":"^8.0.1","find-process":"^2.0.0","form-data":"^4.0.2","http-errors":"~1.6.3",jest:"^29.6.2",long:"^5.2.3","module-alias":"^2.2.3",morgan:"~1.9.1","node-cache":"^5.1.2","node-cron":"^3.0.3","nostr-tools":"1.17.0",pino:"^9.9.0","pino-pretty":"^13.1.1","pino-roll":"^3.1.0",prisma:"^6.14.0",typescript:"^5.7.3",ws:"^8.18.0"},"lint-staged":{"*.ts":["eslint --fix","git add"],"*.js":["eslint --fix","git add"]},devDependencies:{"@antfu/eslint-config":"^4.3.0","@commitlint/cli":"^19.7.1","@commitlint/config-conventional":"^19.7.1","dotenv-cli":"^10.0.0","electron-rebuild":"^3.2.9",esbuild:"^0.25.9",eslint:"^9.20.1",husky:"^9.1.7","lint-staged":"^15.4.3",nodemon:"^3.0.3",protobufjs:"^7.2.5"},engines:{node:">=19.0.0"}}});var e0=v((jMr,WNe)=>{var{Buffer:iy}=require("node:buffer"),jNe=require("node:fs"),FNe=require("node:path"),{getConfig:ay}=Vt(),{getMainLnlinkConfig:$W,getLnlinkUser:gRt,upsertTransactionByFilter:eP}=Mr(),{retryUntilSuccess:yRt}=qW(),{ACCOUNT_TYPE:vRt,INVOICE_EXPIRY_TIME:bRt}=rt(),{WALLET_STATE_CODE:Zh,SATS_ID:tP,NODE_TYPE:Yx,TRANSACTION_KIND:rP,TRANSACTION_DIRECTION:Zx,TRANSACTION_ASSET_TYPE:nP,TRANSACTION_STATUS:$Ne}=rt(),xRt=HW(),{nip04:wRt,getPublicKey:UNe}=nc(),{getWalletService:GW,getWalletState:e1,getLightningService:Fi,checkWalletState:ERt,checkTprEnabled:TRt,getOpenedChannelList:GNe}=Qi(),{getConfigFilePath:VW,sleep:iP,getCacheMacaroon:KW,storeEnctryptAdminMacaroon:SRt,setCacheMacaroon:qNe,storeEnctryptLoopMacaroon:ARt}=wi(),zs=Oo(),pc=Ke(),{getTerminalStatus:VNe,startTerminal:kRt}=Ol(),{getTransactionsByFilter:NRt,decryptNostrString:jW}=Mr(),KNe=require("node:child_process").exec,{TASKS:aP}=rt(),{reportTaskCompletion:sP}=Lp();async function ORt(t){let e=new pc("lnd"),{type:r,event_id:n,lnlinkUser:i}=t;if(r==null)throw new Error("type is required");let o=await Fi().newAddress({type:r});return n&&i?(await eP({event_id:n,user_npub:i.npub,asset_type:nP.BTC,asset_id:tP,asset_amount:"0",node_type:Yx.LITD,transaction_kind:rP.ONCHAIN,direction:Zx.IN,target_address:o.address,status:$Ne.PENDING,description:`BTC deposit address generated for ${i.npub}`,tx_type:"deposit",create_at:Math.floor(Date.now()/1e3),update_at:Math.floor(Date.now()/1e3)},{event_id:n}),e.info(`Generated BTC address: ${o.address} for user: ${i.npub}, event: ${n}`)):e.info(`Generated BTC address: ${o.address}`),o}a(ORt,"newAddress");async function IRt(t){let e=new pc("lnd"),{addr:r,amount:n,sat_per_vbyte:i,send_all:s,withinfo:o,event_id:c,lnlinkUser:u}=t,l=Fi(),d={addr:r};n&&(d.amount=n),i&&(d.sat_per_vbyte=Number(i)),s&&(d.send_all=s);let f=await l.sendCoins(d);if(f?.txid&&c&&u){let p=s?"0":n?.toString()||"0";await eP({event_id:c,user_npub:u.npub,asset_type:nP.BTC,asset_id:tP,asset_amount:p,node_type:Yx.LITD,transaction_kind:rP.ONCHAIN,direction:Zx.OUT,target_address:r,status:$Ne.PENDING,description:`BTC withdrawal for ${u.npub} to ${r}`,tx_type:"withdraw",tx_hash:f.txid,create_at:Math.floor(Date.now()/1e3),update_at:Math.floor(Date.now()/1e3)},{tx_hash:f.txid}),e.info(`Created outgoing transaction record: ${f.txid}, user: ${u.npub}, event: ${c}`)}if(o){let p=await iu();f.nodeInfo=p}return f}a(IRt,"sendCoins");async function zNe(){return(await Fi().closedChannels({}))?.channels?.map(i=>({channelId:i.chan_id,closeTx:i.closing_tx_hash,remotePubkey:i.remote_pubkey,channelPoint:i.channel_point,capacity:i.capacity,close_type:i.close_type,settledBalance:i.settled_balance,open_initiator:i.open_initiator,close_initiator:i.close_initiator}))}a(zNe,"getClosedChannelList");function YR({channel:t}){let e="";return t.custom_channel_data&&(e=JSON.parse(iy.from(t.custom_channel_data,"hex").toString("utf-8"))),{channel:{...t,custom_channel_data:e}}}a(YR,"covertChannel");async function CRt(){let t=await e1(!0),e=new pc("lnd"),{isMacaroonDecrypted:r}=KW();if(t!==4||!r)return{open_channel_list:[],pending_channel_list:[],closed_channel_list:[]};let n=Fi(),i=await Promise.allSettled([GNe(),n.pendingChannels({}),zNe()]),s=i?.filter(w=>w.status==="rejected")?.map(w=>w.reason);s&&s.length>0&&e.error(`getChannelList ~ errors:${JSON.stringify(s)}`);let o=i[0].value,c=i[1].value,u=i[2].value,{pending_open_channels:l,pending_closing_channels:d,waiting_close_channels:f,pending_force_closing_channels:p}=c,_=l?.map(YR),h=d?.map(YR),m=f?.map(YR),g=p?.map(YR);return{open_channel_list:o,pending_channel_list:{pending_open_channels:_,pending_closing_channels:h,waiting_close_channels:m,pending_force_closing_channels:g},closed_channel_list:u}}a(CRt,"getChannelList");async function iu(){let{LINK_NAME:t,LINK_NETWORK:e,LINK_OWNER:r,LINK_NODE_ADDR:n}=ay(),i=await e1(!0),s=await VNe(),o={};s.forEach(E=>{o[E.service_name]=E.status});let c=new pc("lnd"),u=15e3,l=zs.get("combineNodeInfo")||{},d,f=new Promise(E=>{d=setTimeout(()=>{c.warn("combineNodeInfoAsync timed out after 15s, using cached result if available"),E({fromCache:!0,data:l})},u)}),p=await Promise.race([URt(i).then(E=>({fromCache:!1,data:E})),f]);clearTimeout(d);let _=p.data||{},h=xRt.version,m=await TRt().catch(()=>!1),g=await gRt({account_type:vRt.READ_ONLY}),y=_?.uris?.[0];return{pubkey:_?.identity_pubkey,name:t,status:{state:i,...o},owner:r,node_addr:n,balance:_?.balance,version:h,uri:y,host:y?y.split("@")[1]:null,peers:_?.peers,network:e,taproot_assets_enabled:m,read_only_account_sk:g?.sk}}a(iu,"getNodeInfo");async function RRt({pay_req:t}){return await Fi().decodePayReq({pay_req:t})}a(RRt,"decodePayReq");async function PRt(){let t=await e1(!0);if(t===4){let e=await VNe(),r={};return e.forEach(n=>{r[n.service_name]=n.status}),{state:t,...r}}else{let e=t>=0&&t<=4;return{state:t,litd:e?"Running":"Stopped"}}}a(PRt,"getNodeState");async function LRt(){return await Fi().pendingChannels({})}a(LRt,"getPendingChannelList");async function ZR({node_pubkey:t}){let{LINK_NOSTR_NODE_NPUBKEY:e}=ay(),r=t||e;return(await Fi().listPeers({}))?.peers?.findIndex(s=>s.pub_key===r)>-1}a(ZR,"isConnectPeer");async function DRt(t){let{invoice:e,withinfo:r,outgoing_chan_id:n="",event_id:i,lnlinkUser:s}=t,o=Fi(),c={payment_request:e,allow_self_payment:!0,fee_limit:{fixed:1e3}};n&&(c.outgoing_chan_id=`${n}`,c.outgoing_chan_ids=[`${n}`]);let u=await o.sendPaymentSync(c);if(u?.payment_hash){await iP(300);let d=(await o.decodePayReq({pay_req:e}))?.num_satoshis;await eP({event_id:i,user_npub:s.npub,asset_id:tP,asset_amount:`${d}`,asset_type:nP.BTC,invoice:e,node_type:Yx.LITD,transaction_kind:rP.LIGHTNING,direction:Zx.OUT},{payment_hash:u.payment_hash})}if(r){let l=await iu();u.nodeInfo=l}return u}a(DRt,"sendPaymentSync");async function BRt(t){let{memo:e,value:r,event_id:n,lnlinkUser:i,expiry:s=bRt["10m"]}=t,c=await Fi().addInvoice({memo:e,value:r,expiry:s});return c?.payment_request&&(await iP(500),await eP({event_id:n,user_npub:i.npub,asset_id:tP,asset_amount:`${r}`,asset_type:nP.BTC,invoice:c?.payment_request,node_type:Yx.LITD,transaction_kind:rP.LIGHTNING,direction:Zx.IN,description:e,add_index:Number.parseInt(c?.add_index)},{invoice:c.payment_request})),{...c}}a(BRt,"createLnInvoice");async function MRt(t){let{node_pubkey:e,amount:r,sat_per_vbyte:n,fund_max:i,zero_conf_enable:s,withinfo:o,push_sat:c,lnlinkUser:u}=t,l=Fi(),{LINK_NOSTR_NODE_NPUBKEY:d}=ay(),f=e||d,p=new pc("lnd"),_=await ZR({node_pubkey:f}),h;if(!_)h={isConnected:!1};else{let m={node_pubkey:f,local_funding_amount:r,min_confs:1};s&&(m.target_conf=0,m.zero_conf=!0,m.commitment_type=3,m.push_sat=1e5),n&&(m.sat_per_vbyte=n),i&&(m.fund_max=i,m.local_funding_amount="0"),c&&(m.push_sat=c),h=await l.openChannelSync(m),h.isConnected=!0,p.info(`openChannelSync ret--->, ${JSON.stringify(m)}, ${JSON.stringify(h)}`),u&&sP({nostrAddress:u.npub,tag:aP.CreateBTCChannel})}if(o){let m=await iu();h.nodeInfo=m}return h}a(MRt,"openChannel");async function FRt(){let t=Fi(),{settings:e}=await $W();return((await t.listPeers({}))?.peers||[]).map(s=>{let o=s.pub_key===e?.officialLndPeer;return{pub_key:s.pub_key,alias:o?"Lnfi":`${s.pub_key}@${s.address}`,address:s.address}})}a(FRt,"listPeers");async function URt(t){let e={},r=new pc("lnd");try{let{isMacaroonDecrypted:n}=KW(),i=t;if(i>Zh.UNLOCKED&&i!==Zh.WAITING_TO_START&&(n||(i=Zh.LOCKED)),i>=Zh.RPC_ACTIVE&&n&&i!==Zh.WAITING_TO_START){let s=Fi(),{settings:o}=await $W(),c=await Promise.allSettled([s.getInfo(),s.walletBalance(),s.listPeers({})]),[u,l,d]=c,f=u.value,p=l.value,h=d.value?.peers||[],m=h.map(y=>{let w=y.pub_key===o?.officialLndPeer;return{pub_key:y.pub_key,alias:w?"Lnfi":`${y.pub_key}@${y.address}`,address:y.address}});r.info(`LND lndService combineNodeInfoAsync peer:${h.map(y=>y.pub_key)}`);let g=c?.filter(y=>y.status==="rejected")?.map(y=>y.reason);g&&g.length>0&&r.error(`LND lndService combineNodeInfoAsync errors:${JSON.stringify(g)}`),e={identity_pubkey:f?.identity_pubkey,...f,balance:p,peers:m}}return e={...e,state:i},zs.set("combineNodeInfo",e),e}catch(n){r.warn(`LND lndService combineNodeInfoAsync peer combineNodeInfo warn--->${n.message}`)}}a(URt,"combineNodeInfoAsync");async function HNe(){let e=await Fi().getInfo();return zs.set("nodeInfo",e),e}a(HNe,"getInfo");async function qRt(t=!0){let e=new pc("lnd");try{let r=zs.get("nodeInfo");return r?.identity_pubkey?(t&&HNe(),r):await HNe()}catch(r){e.error(`LND lndService getCacheInfo err--->${r.message}`)}}a(qRt,"getCacheNodeInfo");async function HRt(t){await ERt(Zh.RPC_ACTIVE);let{secret:e,origin_secret:r}=t;if(!e&&!r)throw new Error("secret is required.");let n=r||await jW(e),i=Fi(),o={permissions:[{entity:"uri",action:"/looprpc.SwapClient/GetInfo"},{entity:"uri",action:"/looprpc.SwapClient/LoopOut"},{entity:"uri",action:"/looprpc.SwapClient/LoopIn"},{entity:"uri",action:"/looprpc.SwapClient/ListSwaps"},{entity:"uri",action:"/looprpc.SwapClient/SwapInfo"},{entity:"uri",action:"/looprpc.SwapClient/AbandonSwap"},{entity:"uri",action:"/looprpc.SwapClient/Monitor"},{entity:"uri",action:"/looprpc.SwapClient/LoopOutTerms"},{entity:"uri",action:"/looprpc.SwapClient/LoopOutQuote"},{entity:"uri",action:"/looprpc.SwapClient/GetLoopInTerms"},{entity:"uri",action:"/looprpc.SwapClient/GetLoopInQuote"}],root_key_id:"18441921392371827000"},c=await i.bakeMacaroon(o);if(c?.macaroon){let u=iy.from(c?.macaroon,"hex");ARt(u,n)}}a(HRt,"bakeLoopMacaroon");async function JNe(t){let{walletUnlockerService:e}=GW(),r=new pc("lnd"),{wallet_password:n,cipher_seed_mnemonic:i}=t;if(zs.get("initWalletInProgress"))throw r.warn("initWallet already in progress, rejecting duplicate request"),new Error("Wallet initialization already in progress");zs.set("initWalletInProgress",!0);try{if(i)zs.set("cipherSeedMnemonic",i);else{let l=await e.genSeed({});if(l?.cipher_seed_mnemonic){let d=l?.cipher_seed_mnemonic;zs.set("cipherSeedMnemonic",d)}}let s=zs.get("cipherSeedMnemonic");if(!s)throw new Error("Get seed error.");let{LINK_DEBUG:o}=ay(),c=!(o==="true"||o===!0),u=await e.initWallet({wallet_password:iy.from(n),cipher_seed_mnemonic:s,stateless_init:c}).catch(l=>{throw r.warn(`${l.message}`),l});return r.info(`LND lndService initWallet RPC response ->macaroon length:${u?.admin_macaroon?.length}`),u?.admin_macaroon&&SRt(u?.admin_macaroon,n),u}finally{zs.del("initWalletInProgress")}}a(JNe,"wrapperInitWallet");async function jRt(){let{walletUnlockerService:t}=GW(),e=zs.get("cipherSeedMnemonic");if(e)return{cipherSeedMnemonic:e};let r=await t.genSeed({});if(r?.cipher_seed_mnemonic){let n=r?.cipher_seed_mnemonic;return zs.set("cipherSeedMnemonic",n),{cipherSeedMnemonic:n}}throw new Error("Get seed error.")}a(jRt,"genseed");async function $Rt(t){let{password:e,withinfo:r,cipher_seed_mnemonic:n,origin_password:i,lnlinkUser:s}=t;if(!e&&!i)throw new Error("Password is null.");let o="",c;if(e&&(o=(await jW(e)).toString()),i&&(o=`${i}`),n&&(c=JSON.parse(await jW(n))),o&&o.length<8)throw new Error("Password length must be at least 8 characters.");let{isMacaroonDecrypted:u}=KW();if(u)throw new Error("You have already initialized.");await JNe({wallet_password:o,cipher_seed_mnemonic:c}),zs.set("tempPassword",e);let d={message:"Init wallet success.",cipherSeedMnemonic:zs.get("cipherSeedMnemonic")};return s&&sP({nostrAddress:s.npub,tag:aP.EnableTaprootAssetNode}),r&&(d.nodeInfo=await iu()),d}a($Rt,"initWallet");async function GRt(t){let e=Fi(),{withinfo:r,lnlinkUser:n,...i}=t,s={...i},o=await e.closeChannel(s);if(n&&sP({nostrAddress:n.npub,tag:aP.CloseTaprootChannel}),r){let c=await iu();o.nodeInfo=c}return o}a(GRt,"closeChannel");async function VRt(t){let{pubkey:e,host:r,perm:n,timeout:i,withinfo:s}=t,o=new pc("lnd"),{LINK_NOSTR_NODE_NPUBKEY:c,LINK_NOSTR_NODE_HOST:u}=ay(),l=e||c,d=r||u,f=Fi(),p=!1,_=20;if(await ZR({node_pubkey:l}))p={isConnected:!0};else{o.info("Lnd lndService connectPeer"),await f.connectPeer({addr:{pubkey:l,host:d},perm:n||!1,timeout:i||30}).catch(g=>{o.error(`Lnd lndService connectPeer error ${g.message}`)});let m=0;for(;;){if(m++,m>_){p={isConnected:!1};break}if(await ZR({node_pubkey:l})){p={isConnected:!0};break}else{await iP(1e3);continue}}}if(s){let m=await iu();p.nodeInfo=m}return p}a(VRt,"connectPeer");async function KRt(t){let{wallet_password:e,recovery_window:r,withinfo:n}=t,{LINK_DEBUG:i}=ay(),o=(await $W()).node_sk,c=UNe(UNe(o)),l=await wRt.decrypt(o,c,e),{walletUnlockerService:d}=GW(),f=await e1(!0);if(f>Zh.UNLOCKED&&f<Zh.WAITING_TO_START)qNe(l);else{let _=!(i==="true"||i===!0);console.log("unlock stateless_init---->",_,i);let h={wallet_password:iy.from(l),stateless_init:_};r&&(h.recovery_window=Number(r));let m=new pc("lnd");await d.unlockWallet(h).catch(g=>{m.error(`${g.message}`)}),qNe(l),zs.set("tempPassword",e)}let p={msg:"Unlock success."};if(n){let _=await iu();p.nodeInfo=_}return p}a(KRt,"unlock");async function zRt(t){let{withinfo:e}=t,{channelBackupPath:r,lndNodeOriginPath:n,targetNodeBackupPath:i}=VW(),s=Fi(),o=await s.exportAllChannelBackups({});jNe.writeFileSync(r,o.multi_chan_backup.multi_chan_backup),await s.stopDaemon({});let c=FNe.dirname(n),u=FNe.basename(n),l=`cd ${c} && tar -zcvf ${i} ${u}`,p={channelBakeup:"success.",nodeBackup:await new Promise((_,h)=>{KNe(l,m=>{m?h(m):_("success.")})})};if(e){await iP(3e3);let _=await iu();p.nodeInfo=_}return p}a(zRt,"bakeNode");async function JRt(t){let{withinfo:e}=t;await Fi().stopDaemon({}).catch(l=>{new pc("lnd").error(`Lnd lndService stopDaemon error ${l?.message}`)});let{basePath:n,targetNodeBackupPath:i}=VW(),s=`tar -zxvf ${i} -C ${n}`,u={nodeRestore:await new Promise((l,d)=>{KNe(s,f=>{f?d(f):l("success.")})})};if(e){let l=await iu();u.nodeInfo=l}return u}a(JRt,"restoreNode");async function WRt(){let t=Fi(),{channelBackupPath:e}=VW(),n=jNe.readFileSync(e).toString("hex");return{channelRestore:await t.restoreChannelBackups({multi_chan_backup:iy.from(n,"hex")})}}a(WRt,"restoreChannels");async function XRt(t){let{msg:e}=t;return await Fi().signMessage({msg:iy.from(`${e}`)})}a(XRt,"signMessage");async function QRt(t){let{msg:e,signature:r}=t;return await Fi().verifyMessage({msg:iy.from(`${e}`),signature:r})}a(QRt,"nstVerifyMessage");async function YRt(t){let{node_type:e,transaction_kind:r,status:n,direction:i,asset_type:s,page_index:o=1,page_size:c=20,asset_id:u}=t;return await NRt({transaction_kind:r,direction:i?/out/.test(i)?Zx.OUT:Zx.IN:"",node_type:e?/litd|lnd/.test(e)?Yx.LITD:Yx.RGB:"",asset_type:s,status:n,limit:c,offset:(o-1)*c,asset_id:u})}a(YRt,"getTransactions");async function ZRt(t){let{lnlinkUser:e}=t,{LINK_ENABLE_TOR:r}=ay(),n=new pc("lnd"),i=r,s={};e&&sP({nostrAddress:e?.npub,tag:aP.EnableTaprootAssetNode});let o=await kRt(i);if(s.linkStatus=o,await yRt(e1,[!1],"getWalletState",10,3e3,n)!==void 0){let u=await iu();s.nodeInfo=u}return s}a(ZRt,"startLink");async function ePt(t){let e=new pc("lnd"),{enable:r,lnlinkUser:n}=t;if(r==null)throw new Error("enable parameter is required (true or false)");let i=r===!0||r==="true";e.info(`Toggling Tor mode to: ${i}, requested by: ${n?.npub||"unknown"}`);try{let{getMainLnlinkConfig:s,updateMainLnlinkConfig:o}=Mr(),u=(await s())?.settings||{},l={...u,enableTor:i},d=await o({settings:l});d!==1&&e.warn(`Database update returned: ${d}, proceeding anyway`);let{reloadConfig:f}=Vt();await f();let{isServiceRunning:p,startService:_,stopService:h}=Ol(),{buildTorArgs:m}=rA(),g=await p("litd"),y=await p("rgb"),w=await p("tor");if(e.info(`Current status - Litd: ${g}, RGB: ${y}, Tor: ${w}`),!g&&!y)try{if(i&&!w){e.info("Starting Tor service standalone (litd/rgb not running)...");let R=m();await _("tor",R),e.info("Tor service started successfully")}else!i&&w?(e.info("Stopping Tor service (litd/rgb not running)..."),await h("tor"),e.info("Tor service stopped successfully")):e.info("Tor already in desired state, no action needed");return{enable_tor:i,status:"ok",message:"Tor toggled without restarting services (litd/rgb not running)"}}catch(R){e.error(`Failed to ${i?"start":"stop"} Tor service: ${R.message}`);let $={...u,enableTor:!i};throw await o({settings:$}),await f(),new Error(`Failed to ${i?"start":"stop"} Tor service: ${R.message}`)}e.info("Restarting litd with new Tor configuration (litd/rgb is running)...");let{restartTerminal:E}=Ol(),A=await E({lnlinkUser:n}),I=await iu();return e.info(`Tor mode toggled successfully. Tor enabled: ${i}`),{enable_tor:i,status:"ok",terminal_status:A,node_info:I}}catch(s){throw e.error(`Failed to toggle Tor: ${s.message}`),s}}a(ePt,"toggleTor");WNe.exports={startLink:ZRt,toggleTor:ePt,getWalletState:e1,sendPaymentSync:DRt,createLnInvoice:BRt,getNodeInfo:iu,getNodeState:PRt,getChannelList:CRt,getOpenedChannelList:GNe,getPendingChannelList:LRt,getClosedChannelList:zNe,openChannel:MRt,listPeers:FRt,decodePayReq:RRt,wrapperInitWallet:JNe,initWallet:$Rt,genseed:jRt,isConnectPeer:ZR,sendCoins:IRt,closeChannel:GRt,connectPeer:VRt,unlock:KRt,bakeNode:zRt,restoreNode:JRt,restoreChannels:WRt,bakeLoopMacaroon:HRt,signMessage:XRt,nstVerifyMessage:QRt,getCacheNodeInfo:qRt,getTransactions:YRt,newAddress:ORt}});var ZNe=v((GMr,YNe)=>{var tPt=aH(),t1=tPt.Router(),{getConfig:zW,reloadConfig:QNe}=Vt(),{getInfo:rPt,initConfig:nPt,updateNodeName:iPt}=BW(),{sendResponse:uf}=wi(),XNe=MW();t1.get("/health",async(t,e)=>{try{let r={status:"healthy",timestamp:new Date().toISOString(),uptime:process.uptime(),memory:process.memoryUsage()};uf(e,200,"Server is healthy",r)}catch(r){uf(e,500,"Server health check failed",{error:r.message})}});t1.post("/update-name",async(t,e)=>{try{let{nodeName:r}=t?.body,n=await iPt(r);await QNe(),uf(e,200,"lnlink node_name update success",n)}catch(r){uf(e,500,r.message,null)}});t1.post("/init",async(t,e)=>{try{let{owner:r,settings:n,nodeName:i,enableTor:s}=t?.body,o=await nPt({owner:r,settings:n,nodeName:i,enableTor:s});await QNe();let{LINK_READY:c}=zW();if(c){let u=FW(),l=UW(),{isServiceRunning:d}=CW();await u(),await l();let{LINK_ENABLE_TOR:f}=zW(),p=f===!0||f==="true",_=6e4,h=1e3,m=Date.now();for(;Date.now()-m<_;){let g=await d("tor"),y=await d("litd"),w=await d("rgb");if(y&&w&&(!p||g))break;await new Promise(A=>setTimeout(A,h))}}XNe.emit("initAccount"),XNe.emit("listenNostrEvent"),uf(e,200,"lnlink config init success",o)}catch(r){uf(e,500,r.message,null)}});t1.get("/info",async(t,e)=>{try{let{owner:r,nodeAddr:n,relayUri:i,linkStatus:s,settings:o,enableTor:c}=await rPt(),u={};s.forEach(d=>{u[d.service_name]=d.status});let{LINK_LNFI_NODE_SITE_URL:l}=zW();uf(e,200,"success",{owner:r,nodeAddr:n,relayUri:i,...u,manageUrl:`${l.replace(/\/#\/|\/#|\/$/,"")}/#/?owner=${r}&npub=${n}`,settings:o,enableTor:c})}catch(r){uf(e,500,r.message,null)}});t1.post("/tor/toggle",async(t,e)=>{try{let{enable:r}=t?.body,{toggleTor:n}=e0(),i=await n({enable:r});uf(e,200,"Tor toggled successfully",i)}catch(r){uf(e,500,r.message,null)}});YNe.exports=t1});var JW=v((VMr,tOe)=>{var{Buffer:eOe}=require("node:buffer"),aPt=require("node:crypto");function sPt(t,e){let r=aPt.createHash("sha256");r.update(t);let n=r.digest();if(e<n.length)return n.slice(0,e);if(e>n.length){let i=eOe.alloc(e-n.length);return eOe.concat([n,i])}return n}a(sPt,"stringToFixedBytes");tOe.exports={stringToFixedBytes:sPt}});var oOe=v((zMr,sOe)=>{var WW=BigInt(Number.MAX_SAFE_INTEGER),rOe=BigInt("9223372036854775807"),oP=BigInt("1000000000000000000000000000"),cP=oP,nOe=+"4102444800",QW=2147483647,iOe=rOe,XW=cP,aOe=QW,oPt={isUnlimited:a(t=>{if(!t)return!1;if(typeof t=="bigint")return t===XW||t===oP||t===cP;if(typeof t=="string"){let e=XW.toString(),r=oP.toString(),n=cP.toString();return t===e||t===r||t===n}return!1},"isUnlimited"),isNeverExpire:a(t=>t?t===aOe||t===iOe||t===nOe||t===QW:!1,"isNeverExpire"),isSafeInteger:a(t=>t<=WW&&t>=-WW,"isSafeInteger"),toDbString:a(t=>t?typeof t=="string"?t:typeof t=="bigint"?t.toString():String(t):null,"toDbString"),fromDbString:a(t=>{if(!t)return null;try{return BigInt(t)}catch(e){return console.warn(`Failed to convert string to BigInt: ${t} ${e.message}`),null}},"fromDbString"),toSafeString:a(t=>t?t.toString():null,"toSafeString"),fromString:a(t=>t?BigInt(t):null,"fromString"),formatLargeNumber:a(t=>{if(!t)return"0";let e=t.toString(),r=e.length;return r<=6?e:r<=9?`${(Number(e)/1e6).toFixed(1)}M`:r<=12?`${(Number(e)/1e9).toFixed(1)}B`:r<=15?`${(Number(e)/1e12).toFixed(1)}T`:Number(e).toExponential(2)},"formatLargeNumber"),createTokenAmount:a((t,e=18)=>{let r=BigInt(10)**BigInt(e);return BigInt(t)*r},"createTokenAmount")};sOe.exports={MAX_SAFE_INTEGER:WW,MAX_SQLITE_INTEGER:rOe,MAX_TOKEN_AMOUNT:oP,UNLIMITED_AUTH_LIMIT:cP,UNLIMITED_AMOUNT:XW,NEVER_EXPIRE_MAX:iOe,NEVER_EXPIRE_2100:nOe,NEVER_EXPIRE_2038:QW,NEVER_EXPIRE:aOe,BigIntUtils:oPt}});var dOe=v((WMr,lOe)=>{var{getMainLnlinkConfig:uP}=Mr(),{insertLnlinkUser:YW,getLNDOwner:cPt,getFlashRegister:uPt,getReadOnly:lPt}=Mr(),ZW=Ke(),{stringToFixedBytes:cOe}=JW(),{UNLIMITED_AMOUNT:dPt,NEVER_EXPIRE:eX,BigIntUtils:fPt}=oOe(),{ACCOUNT_TYPE:tX,FLASH_REGISTER_PERMISSIONS:pPt,OWNER_PERMISSIONS:_Pt,READ_ONLY_PERMISSIONS:hPt}=rt(),rX=zc(),{nip19:r1,getPublicKey:uOe}=nc();async function mPt(){let t=new ZW("init");try{if(!await cPt()){let r=await uP(),n="owner",{owner_npub:i,settings:s,node_npub:o}=r,c=s?.nostrRelays?s?.nostrRelays?.[0]:null;await YW({name:n,pubkey:r1.decode(i).data,sk:null,node_pubkey:r1.decode(o).data,relay:c,asset_id:null,account_type:tX.OWNER,social_id:null,auth_limit:fPt.toDbString(dPt),permissions:JSON.stringify(_Pt),create_at:rX().unix(),expire_time:eX,parent_pubkey:null})&&t.info(`init owner to DB owner ${i} init success.`)}}catch(e){t.error(`init owner error: ${e.message}`)}}a(mPt,"initOwner");async function gPt(){let t=new ZW("init");try{let e=await uP(),{node_npub:r,settings:n}=e,i=n?.nostrRelays?n?.nostrRelays?.[0]:null,s=cOe(`${r}`).toString("hex"),o=uOe(s),c=r1.npubEncode(o);await uPt()||await YW({name:"flash_register",pubkey:o,sk:s,node_pubkey:r1.decode(r).data,relay:i,asset_id:null,account_type:tX.FLASH_REGISTER,social_id:null,social_type:null,auth_limit:"0",permissions:JSON.stringify(pPt),create_at:rX().unix(),expire_time:eX,parent_pubkey:null})&&t.info(`init flash_register to DB flash_register ${c} init success.`)}catch(e){t.error(`init flash_register error: ${e.message}`)}}a(gPt,"initFlashRegister");async function yPt(){let t=new ZW("init");try{let e=await uP(),{node_npub:r,settings:n}=e,i=n?.nostrRelays?n?.nostrRelays?.[0]:null,o=cOe(`${r}:lnlink_readonly_v1`).toString("hex"),c=uOe(o),u=r1.npubEncode(c);await lPt()||await YW({name:"readonly",pubkey:c,sk:o,node_pubkey:r1.decode(r).data,relay:i,asset_id:null,account_type:tX.READ_ONLY,social_id:null,social_type:null,auth_limit:"0",permissions:JSON.stringify(hPt),create_at:rX().unix(),expire_time:eX,parent_pubkey:null})&&t.info(`init readonly to DB readonly ${u} init success.`)}catch(e){t.error(`init readonly error: ${e.message}`)}}a(yPt,"initReadOnly");async function vPt(){(await uP())?.owner_npub&&(await mPt(),await yPt(),await gPt())}a(vPt,"initAccount");lOe.exports={initAccount:vPt}});var pOe=v((QMr,fOe)=>{fOe.exports=require("crypto").createHash});var gOe=v((YMr,mOe)=>{"use strict";var dP="qpzry9x8gf2tvdw0s3jn54khce6mua7l",nX={};for(lA=0;lA<dP.length;lA++){if(lP=dP.charAt(lA),nX[lP]!==void 0)throw new TypeError(lP+" is ambiguous");nX[lP]=lA}var lP,lA;function n1(t){var e=t>>25;return(t&33554431)<<5^-(e>>0&1)&996825010^-(e>>1&1)&642813549^-(e>>2&1)&513874426^-(e>>3&1)&1027748829^-(e>>4&1)&705979059}a(n1,"polymodStep");function _Oe(t){for(var e=1,r=0;r<t.length;++r){var n=t.charCodeAt(r);if(n<33||n>126)return"Invalid prefix ("+t+")";e=n1(e)^n>>5}for(e=n1(e),r=0;r<t.length;++r){var i=t.charCodeAt(r);e=n1(e)^i&31}return e}a(_Oe,"prefixChk");function bPt(t,e,r){if(r=r||90,t.length+7+e.length>r)throw new TypeError("Exceeds length limit");t=t.toLowerCase();var n=_Oe(t);if(typeof n=="string")throw new Error(n);for(var i=t+"1",s=0;s<e.length;++s){var o=e[s];if(o>>5!==0)throw new Error("Non 5-bit word");n=n1(n)^o,i+=dP.charAt(o)}for(s=0;s<6;++s)n=n1(n);for(n^=1,s=0;s<6;++s){var c=n>>(5-s)*5&31;i+=dP.charAt(c)}return i}a(bPt,"encode");function hOe(t,e){if(e=e||90,t.length<8)return t+" too short";if(t.length>e)return"Exceeds length limit";var r=t.toLowerCase(),n=t.toUpperCase();if(t!==r&&t!==n)return"Mixed-case string "+t;t=r;var i=t.lastIndexOf("1");if(i===-1)return"No separator character for "+t;if(i===0)return"Missing prefix for "+t;var s=t.slice(0,i),o=t.slice(i+1);if(o.length<6)return"Data too short";var c=_Oe(s);if(typeof c=="string")return c;for(var u=[],l=0;l<o.length;++l){var d=o.charAt(l),f=nX[d];if(f===void 0)return"Unknown character "+d;c=n1(c)^f,!(l+6>=o.length)&&u.push(f)}return c!==1?"Invalid checksum for "+t:{prefix:s,words:u}}a(hOe,"__decode");function xPt(){var t=hOe.apply(null,arguments);if(typeof t=="object")return t}a(xPt,"decodeUnsafe");function wPt(t){var e=hOe.apply(null,arguments);if(typeof e=="object")return e;throw new Error(e)}a(wPt,"decode");function fP(t,e,r,n){for(var i=0,s=0,o=(1<<r)-1,c=[],u=0;u<t.length;++u)for(i=i<<e|t[u],s+=e;s>=r;)s-=r,c.push(i>>s&o);if(n)s>0&&c.push(i<<r-s&o);else{if(s>=e)return"Excess padding";if(i<<r-s&o)return"Non-zero padding"}return c}a(fP,"convert");function EPt(t){var e=fP(t,8,5,!0);if(Array.isArray(e))return e}a(EPt,"toWordsUnsafe");function TPt(t){var e=fP(t,8,5,!0);if(Array.isArray(e))return e;throw new Error(e)}a(TPt,"toWords");function SPt(t){var e=fP(t,5,8,!1);if(Array.isArray(e))return e}a(SPt,"fromWordsUnsafe");function APt(t){var e=fP(t,5,8,!1);if(Array.isArray(e))return e;throw new Error(e)}a(APt,"fromWords");mOe.exports={decodeUnsafe:xPt,decode:wPt,encode:bPt,toWordsUnsafe:EPt,toWords:TPt,fromWordsUnsafe:SPt,fromWords:APt}});var POe=v((eFr,ROe)=>{var xOe=require("fs"),Mp=require("path"),wOe=require("os"),EOe=typeof __webpack_require__=="function"?__non_webpack_require__:require,kPt=process.config&&process.config.variables||{},NPt=!!process.env.PREBUILDS_ONLY,yOe=process.versions.modules,iX=CPt()?"electron":IPt()?"node-webkit":"node",aX=process.env.npm_config_arch||wOe.arch(),sX=process.env.npm_config_platform||wOe.platform(),TOe=process.env.LIBC||(RPt(sX)?"musl":"glibc"),oX=process.env.ARM_VERSION||(aX==="arm64"?"8":kPt.arm_version)||"",SOe=(process.versions.uv||"").split(".")[0];ROe.exports=lf;function lf(t){return EOe(lf.resolve(t))}a(lf,"load");lf.resolve=lf.path=function(t){t=Mp.resolve(t||".");try{var e=EOe(Mp.join(t,"package.json")).name.toUpperCase().replace(/-/g,"_");process.env[e+"_PREBUILD"]&&(t=process.env[e+"_PREBUILD"])}catch{}if(!NPt){var r=vOe(Mp.join(t,"build/Release"),bOe);if(r)return r;var n=vOe(Mp.join(t,"build/Debug"),bOe);if(n)return n}var i=c(t);if(i)return i;var s=c(Mp.dirname(process.execPath));if(s)return s;var o=["platform="+sX,"arch="+aX,"runtime="+iX,"abi="+yOe,"uv="+SOe,oX?"armv="+oX:"","libc="+TOe,"node="+process.versions.node,process.versions.electron?"electron="+process.versions.electron:"",typeof __webpack_require__=="function"?"webpack=true":""].filter(Boolean).join(" ");throw new Error("No native build was found for "+o+`
2156
2156
  loaded from: `+t+`
2157
2157
  `);function c(u){var l=cX(Mp.join(u,"prebuilds")).map(AOe),d=l.filter(kOe(sX,aX)).sort(NOe)[0];if(d){var f=Mp.join(u,"prebuilds",d.name),p=cX(f).map(OOe),_=p.filter(IOe(iX,yOe)),h=_.sort(COe(iX))[0];if(h)return Mp.join(f,h.file)}}};function cX(t){try{return xOe.readdirSync(t)}catch{return[]}}a(cX,"readdirSync");function vOe(t,e){var r=cX(t).filter(e);return r[0]&&Mp.join(t,r[0])}a(vOe,"getFirst");function bOe(t){return/\.node$/.test(t)}a(bOe,"matchBuild");function AOe(t){var e=t.split("-");if(e.length===2){var r=e[0],n=e[1].split("+");if(r&&n.length&&n.every(Boolean))return{name:t,platform:r,architectures:n}}}a(AOe,"parseTuple");function kOe(t,e){return function(r){return r==null||r.platform!==t?!1:r.architectures.includes(e)}}a(kOe,"matchTuple");function NOe(t,e){return t.architectures.length-e.architectures.length}a(NOe,"compareTuples");function OOe(t){var e=t.split("."),r=e.pop(),n={file:t,specificity:0};if(r==="node"){for(var i=0;i<e.length;i++){var s=e[i];if(s==="node"||s==="electron"||s==="node-webkit")n.runtime=s;else if(s==="napi")n.napi=!0;else if(s.slice(0,3)==="abi")n.abi=s.slice(3);else if(s.slice(0,2)==="uv")n.uv=s.slice(2);else if(s.slice(0,4)==="armv")n.armv=s.slice(4);else if(s==="glibc"||s==="musl")n.libc=s;else continue;n.specificity++}return n}}a(OOe,"parseTags");function IOe(t,e){return function(r){return!(r==null||r.runtime&&r.runtime!==t&&!OPt(r)||r.abi&&r.abi!==e&&!r.napi||r.uv&&r.uv!==SOe||r.armv&&r.armv!==oX||r.libc&&r.libc!==TOe)}}a(IOe,"matchTags");function OPt(t){return t.runtime==="node"&&t.napi}a(OPt,"runtimeAgnostic");function COe(t){return function(e,r){return e.runtime!==r.runtime?e.runtime===t?-1:1:e.abi!==r.abi?e.abi?-1:1:e.specificity!==r.specificity?e.specificity>r.specificity?-1:1:0}}a(COe,"compareTags");function IPt(){return!!(process.versions&&process.versions.nw)}a(IPt,"isNwjs");function CPt(){return process.versions&&process.versions.electron||process.env.ELECTRON_RUN_AS_NODE?!0:typeof window<"u"&&window.process&&window.process.type==="renderer"}a(CPt,"isElectron");function RPt(t){return t==="linux"&&xOe.existsSync("/etc/alpine-release")}a(RPt,"isAlpine");lf.parseTags=OOe;lf.matchTags=IOe;lf.compareTags=COe;lf.parseTuple=AOe;lf.matchTuple=kOe;lf.compareTuples=NOe});var dX=v((rFr,lX)=>{var uX=typeof __webpack_require__=="function"?__non_webpack_require__:require;typeof uX.addon=="function"?lX.exports=uX.addon.bind(uX):lX.exports=POe()});var fX=v((nFr,LOe)=>{var yr={IMPOSSIBLE_CASE:"Impossible case. Please create issue.",TWEAK_ADD:"The tweak was out of range or the resulted private key is invalid",TWEAK_MUL:"The tweak was out of range or equal to zero",CONTEXT_RANDOMIZE_UNKNOW:"Unknow error on context randomization",SECKEY_INVALID:"Private Key is invalid",PUBKEY_PARSE:"Public Key could not be parsed",PUBKEY_SERIALIZE:"Public Key serialization error",PUBKEY_COMBINE:"The sum of the public keys is not valid",SIG_PARSE:"Signature could not be parsed",SIGN:"The nonce generation function failed, or the private key was invalid",RECOVER:"Public key could not be recover",ECDH:"Scalar was invalid (zero or overflow)"};function au(t,e){if(!t)throw new Error(e)}a(au,"assert");function dr(t,e,r){if(au(e instanceof Uint8Array,`Expected ${t} to be an Uint8Array`),r!==void 0)if(Array.isArray(r)){let n=r.join(", "),i=`Expected ${t} to be an Uint8Array with length [${n}]`;au(r.includes(e.length),i)}else{let n=`Expected ${t} to be an Uint8Array with length ${r}`;au(e.length===r,n)}}a(dr,"isUint8Array");function sy(t){au(i1(t)==="Boolean","Expected compressed to be a Boolean")}a(sy,"isCompressed");function Il(t=r=>new Uint8Array(r),e){return typeof t=="function"&&(t=t(e)),dr("output",t,e),t}a(Il,"getAssertedOutput");function i1(t){return Object.prototype.toString.call(t).slice(8,-1)}a(i1,"toTypeString");LOe.exports=t=>({contextRandomize(e){switch(au(e===null||e instanceof Uint8Array,"Expected seed to be an Uint8Array or null"),e!==null&&dr("seed",e,32),t.contextRandomize(e)){case 1:throw new Error(yr.CONTEXT_RANDOMIZE_UNKNOW)}},privateKeyVerify(e){return dr("private key",e,32),t.privateKeyVerify(e)===0},privateKeyNegate(e){switch(dr("private key",e,32),t.privateKeyNegate(e)){case 0:return e;case 1:throw new Error(yr.IMPOSSIBLE_CASE)}},privateKeyTweakAdd(e,r){switch(dr("private key",e,32),dr("tweak",r,32),t.privateKeyTweakAdd(e,r)){case 0:return e;case 1:throw new Error(yr.TWEAK_ADD)}},privateKeyTweakMul(e,r){switch(dr("private key",e,32),dr("tweak",r,32),t.privateKeyTweakMul(e,r)){case 0:return e;case 1:throw new Error(yr.TWEAK_MUL)}},publicKeyVerify(e){return dr("public key",e,[33,65]),t.publicKeyVerify(e)===0},publicKeyCreate(e,r=!0,n){switch(dr("private key",e,32),sy(r),n=Il(n,r?33:65),t.publicKeyCreate(n,e)){case 0:return n;case 1:throw new Error(yr.SECKEY_INVALID);case 2:throw new Error(yr.PUBKEY_SERIALIZE)}},publicKeyConvert(e,r=!0,n){switch(dr("public key",e,[33,65]),sy(r),n=Il(n,r?33:65),t.publicKeyConvert(n,e)){case 0:return n;case 1:throw new Error(yr.PUBKEY_PARSE);case 2:throw new Error(yr.PUBKEY_SERIALIZE)}},publicKeyNegate(e,r=!0,n){switch(dr("public key",e,[33,65]),sy(r),n=Il(n,r?33:65),t.publicKeyNegate(n,e)){case 0:return n;case 1:throw new Error(yr.PUBKEY_PARSE);case 2:throw new Error(yr.IMPOSSIBLE_CASE);case 3:throw new Error(yr.PUBKEY_SERIALIZE)}},publicKeyCombine(e,r=!0,n){au(Array.isArray(e),"Expected public keys to be an Array"),au(e.length>0,"Expected public keys array will have more than zero items");for(let i of e)dr("public key",i,[33,65]);switch(sy(r),n=Il(n,r?33:65),t.publicKeyCombine(n,e)){case 0:return n;case 1:throw new Error(yr.PUBKEY_PARSE);case 2:throw new Error(yr.PUBKEY_COMBINE);case 3:throw new Error(yr.PUBKEY_SERIALIZE)}},publicKeyTweakAdd(e,r,n=!0,i){switch(dr("public key",e,[33,65]),dr("tweak",r,32),sy(n),i=Il(i,n?33:65),t.publicKeyTweakAdd(i,e,r)){case 0:return i;case 1:throw new Error(yr.PUBKEY_PARSE);case 2:throw new Error(yr.TWEAK_ADD)}},publicKeyTweakMul(e,r,n=!0,i){switch(dr("public key",e,[33,65]),dr("tweak",r,32),sy(n),i=Il(i,n?33:65),t.publicKeyTweakMul(i,e,r)){case 0:return i;case 1:throw new Error(yr.PUBKEY_PARSE);case 2:throw new Error(yr.TWEAK_MUL)}},signatureNormalize(e){switch(dr("signature",e,64),t.signatureNormalize(e)){case 0:return e;case 1:throw new Error(yr.SIG_PARSE)}},signatureExport(e,r){dr("signature",e,64),r=Il(r,72);let n={output:r,outputlen:72};switch(t.signatureExport(n,e)){case 0:return r.slice(0,n.outputlen);case 1:throw new Error(yr.SIG_PARSE);case 2:throw new Error(yr.IMPOSSIBLE_CASE)}},signatureImport(e,r){switch(dr("signature",e),r=Il(r,64),t.signatureImport(r,e)){case 0:return r;case 1:throw new Error(yr.SIG_PARSE);case 2:throw new Error(yr.IMPOSSIBLE_CASE)}},ecdsaSign(e,r,n={},i){dr("message",e,32),dr("private key",r,32),au(i1(n)==="Object","Expected options to be an Object"),n.data!==void 0&&dr("options.data",n.data),n.noncefn!==void 0&&au(i1(n.noncefn)==="Function","Expected options.noncefn to be a Function"),i=Il(i,64);let s={signature:i,recid:null};switch(t.ecdsaSign(s,e,r,n.data,n.noncefn)){case 0:return s;case 1:throw new Error(yr.SIGN);case 2:throw new Error(yr.IMPOSSIBLE_CASE)}},ecdsaVerify(e,r,n){switch(dr("signature",e,64),dr("message",r,32),dr("public key",n,[33,65]),t.ecdsaVerify(e,r,n)){case 0:return!0;case 3:return!1;case 1:throw new Error(yr.SIG_PARSE);case 2:throw new Error(yr.PUBKEY_PARSE)}},ecdsaRecover(e,r,n,i=!0,s){switch(dr("signature",e,64),au(i1(r)==="Number"&&r>=0&&r<=3,"Expected recovery id to be a Number within interval [0, 3]"),dr("message",n,32),sy(i),s=Il(s,i?33:65),t.ecdsaRecover(s,e,r,n)){case 0:return s;case 1:throw new Error(yr.SIG_PARSE);case 2:throw new Error(yr.RECOVER);case 3:throw new Error(yr.IMPOSSIBLE_CASE)}},ecdh(e,r,n={},i){switch(dr("public key",e,[33,65]),dr("private key",r,32),au(i1(n)==="Object","Expected options to be an Object"),n.data!==void 0&&dr("options.data",n.data),n.hashfn!==void 0?(au(i1(n.hashfn)==="Function","Expected options.hashfn to be a Function"),n.xbuf!==void 0&&dr("options.xbuf",n.xbuf,32),n.ybuf!==void 0&&dr("options.ybuf",n.ybuf,32),dr("output",i)):i=Il(i,32),t.ecdh(i,e,r,n.data,n.hashfn,n.xbuf,n.ybuf)){case 0:return i;case 1:throw new Error(yr.PUBKEY_PARSE);case 2:throw new Error(yr.ECDH)}}})});var BOe=v((aFr,DOe)=>{var PPt=dX()(__dirname);DOe.exports=fX()(new PPt.Secp256k1)});var MOe=v((sFr,LPt)=>{LPt.exports={name:"elliptic",version:"6.6.1",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny <fedor@indutny.com>",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies:{"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}}});var Cl=v((FOe,pX)=>{(function(t,e){"use strict";function r(L,b){if(!L)throw new Error(b||"Assertion failed")}a(r,"assert");function n(L,b){L.super_=b;var T=a(function(){},"TempCtor");T.prototype=b.prototype,L.prototype=new T,L.prototype.constructor=L}a(n,"inherits");function i(L,b,T){if(i.isBN(L))return L;this.negative=0,this.words=null,this.length=0,this.red=null,L!==null&&((b==="le"||b==="be")&&(T=b,b=10),this._init(L||0,b||10,T||"be"))}a(i,"BN"),typeof t=="object"?t.exports=i:e.BN=i,i.BN=i,i.wordSize=26;var s;try{typeof window<"u"&&typeof window.Buffer<"u"?s=window.Buffer:s=require("buffer").Buffer}catch{}i.isBN=a(function(b){return b instanceof i?!0:b!==null&&typeof b=="object"&&b.constructor.wordSize===i.wordSize&&Array.isArray(b.words)},"isBN"),i.max=a(function(b,T){return b.cmp(T)>0?b:T},"max"),i.min=a(function(b,T){return b.cmp(T)<0?b:T},"min"),i.prototype._init=a(function(b,T,k){if(typeof b=="number")return this._initNumber(b,T,k);if(typeof b=="object")return this._initArray(b,T,k);T==="hex"&&(T=16),r(T===(T|0)&&T>=2&&T<=36),b=b.toString().replace(/\s+/g,"");var S=0;b[0]==="-"&&(S++,this.negative=1),S<b.length&&(T===16?this._parseHex(b,S,k):(this._parseBase(b,T,S),k==="le"&&this._initArray(this.toArray(),T,k)))},"init"),i.prototype._initNumber=a(function(b,T,k){b<0&&(this.negative=1,b=-b),b<67108864?(this.words=[b&67108863],this.length=1):b<4503599627370496?(this.words=[b&67108863,b/67108864&67108863],this.length=2):(r(b<9007199254740992),this.words=[b&67108863,b/67108864&67108863,1],this.length=3),k==="le"&&this._initArray(this.toArray(),T,k)},"_initNumber"),i.prototype._initArray=a(function(b,T,k){if(r(typeof b.length=="number"),b.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(b.length/3),this.words=new Array(this.length);for(var S=0;S<this.length;S++)this.words[S]=0;var N,P,F=0;if(k==="be")for(S=b.length-1,N=0;S>=0;S-=3)P=b[S]|b[S-1]<<8|b[S-2]<<16,this.words[N]|=P<<F&67108863,this.words[N+1]=P>>>26-F&67108863,F+=24,F>=26&&(F-=26,N++);else if(k==="le")for(S=0,N=0;S<b.length;S+=3)P=b[S]|b[S+1]<<8|b[S+2]<<16,this.words[N]|=P<<F&67108863,this.words[N+1]=P>>>26-F&67108863,F+=24,F>=26&&(F-=26,N++);return this.strip()},"_initArray");function o(L,b){var T=L.charCodeAt(b);return T>=65&&T<=70?T-55:T>=97&&T<=102?T-87:T-48&15}a(o,"parseHex4Bits");function c(L,b,T){var k=o(L,T);return T-1>=b&&(k|=o(L,T-1)<<4),k}a(c,"parseHexByte"),i.prototype._parseHex=a(function(b,T,k){this.length=Math.ceil((b.length-T)/6),this.words=new Array(this.length);for(var S=0;S<this.length;S++)this.words[S]=0;var N=0,P=0,F;if(k==="be")for(S=b.length-1;S>=T;S-=2)F=c(b,T,S)<<N,this.words[P]|=F&67108863,N>=18?(N-=18,P+=1,this.words[P]|=F>>>26):N+=8;else{var D=b.length-T;for(S=D%2===0?T+1:T;S<b.length;S+=2)F=c(b,T,S)<<N,this.words[P]|=F&67108863,N>=18?(N-=18,P+=1,this.words[P]|=F>>>26):N+=8}this.strip()},"_parseHex");function u(L,b,T,k){for(var S=0,N=Math.min(L.length,T),P=b;P<N;P++){var F=L.charCodeAt(P)-48;S*=k,F>=49?S+=F-49+10:F>=17?S+=F-17+10:S+=F}return S}a(u,"parseBase"),i.prototype._parseBase=a(function(b,T,k){this.words=[0],this.length=1;for(var S=0,N=1;N<=67108863;N*=T)S++;S--,N=N/T|0;for(var P=b.length-k,F=P%S,D=Math.min(P,P-F)+k,x=0,O=k;O<D;O+=S)x=u(b,O,O+S,T),this.imuln(N),this.words[0]+x<67108864?this.words[0]+=x:this._iaddn(x);if(F!==0){var G=1;for(x=u(b,O,b.length,T),O=0;O<F;O++)G*=T;this.imuln(G),this.words[0]+x<67108864?this.words[0]+=x:this._iaddn(x)}this.strip()},"_parseBase"),i.prototype.copy=a(function(b){b.words=new Array(this.length);for(var T=0;T<this.length;T++)b.words[T]=this.words[T];b.length=this.length,b.negative=this.negative,b.red=this.red},"copy"),i.prototype.clone=a(function(){var b=new i(null);return this.copy(b),b},"clone"),i.prototype._expand=a(function(b){for(;this.length<b;)this.words[this.length++]=0;return this},"_expand"),i.prototype.strip=a(function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},"strip"),i.prototype._normSign=a(function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},"_normSign"),i.prototype.inspect=a(function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"},"inspect");var l=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],f=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];i.prototype.toString=a(function(b,T){b=b||10,T=T|0||1;var k;if(b===16||b==="hex"){k="";for(var S=0,N=0,P=0;P<this.length;P++){var F=this.words[P],D=((F<<S|N)&16777215).toString(16);N=F>>>24-S&16777215,S+=2,S>=26&&(S-=26,P--),N!==0||P!==this.length-1?k=l[6-D.length]+D+k:k=D+k}for(N!==0&&(k=N.toString(16)+k);k.length%T!==0;)k="0"+k;return this.negative!==0&&(k="-"+k),k}if(b===(b|0)&&b>=2&&b<=36){var x=d[b],O=f[b];k="";var G=this.clone();for(G.negative=0;!G.isZero();){var M=G.modn(O).toString(b);G=G.idivn(O),G.isZero()?k=M+k:k=l[x-M.length]+M+k}for(this.isZero()&&(k="0"+k);k.length%T!==0;)k="0"+k;return this.negative!==0&&(k="-"+k),k}r(!1,"Base should be between 2 and 36")},"toString"),i.prototype.toNumber=a(function(){var b=this.words[0];return this.length===2?b+=this.words[1]*67108864:this.length===3&&this.words[2]===1?b+=4503599627370496+this.words[1]*67108864:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-b:b},"toNumber"),i.prototype.toJSON=a(function(){return this.toString(16)},"toJSON"),i.prototype.toBuffer=a(function(b,T){return r(typeof s<"u"),this.toArrayLike(s,b,T)},"toBuffer"),i.prototype.toArray=a(function(b,T){return this.toArrayLike(Array,b,T)},"toArray"),i.prototype.toArrayLike=a(function(b,T,k){var S=this.byteLength(),N=k||Math.max(1,S);r(S<=N,"byte array longer than desired length"),r(N>0,"Requested array length <= 0"),this.strip();var P=T==="le",F=new b(N),D,x,O=this.clone();if(P){for(x=0;!O.isZero();x++)D=O.andln(255),O.iushrn(8),F[x]=D;for(;x<N;x++)F[x]=0}else{for(x=0;x<N-S;x++)F[x]=0;for(x=0;!O.isZero();x++)D=O.andln(255),O.iushrn(8),F[N-x-1]=D}return F},"toArrayLike"),Math.clz32?i.prototype._countBits=a(function(b){return 32-Math.clz32(b)},"_countBits"):i.prototype._countBits=a(function(b){var T=b,k=0;return T>=4096&&(k+=13,T>>>=13),T>=64&&(k+=7,T>>>=7),T>=8&&(k+=4,T>>>=4),T>=2&&(k+=2,T>>>=2),k+T},"_countBits"),i.prototype._zeroBits=a(function(b){if(b===0)return 26;var T=b,k=0;return(T&8191)===0&&(k+=13,T>>>=13),(T&127)===0&&(k+=7,T>>>=7),(T&15)===0&&(k+=4,T>>>=4),(T&3)===0&&(k+=2,T>>>=2),(T&1)===0&&k++,k},"_zeroBits"),i.prototype.bitLength=a(function(){var b=this.words[this.length-1],T=this._countBits(b);return(this.length-1)*26+T},"bitLength");function p(L){for(var b=new Array(L.bitLength()),T=0;T<b.length;T++){var k=T/26|0,S=T%26;b[T]=(L.words[k]&1<<S)>>>S}return b}a(p,"toBitArray"),i.prototype.zeroBits=a(function(){if(this.isZero())return 0;for(var b=0,T=0;T<this.length;T++){var k=this._zeroBits(this.words[T]);if(b+=k,k!==26)break}return b},"zeroBits"),i.prototype.byteLength=a(function(){return Math.ceil(this.bitLength()/8)},"byteLength"),i.prototype.toTwos=a(function(b){return this.negative!==0?this.abs().inotn(b).iaddn(1):this.clone()},"toTwos"),i.prototype.fromTwos=a(function(b){return this.testn(b-1)?this.notn(b).iaddn(1).ineg():this.clone()},"fromTwos"),i.prototype.isNeg=a(function(){return this.negative!==0},"isNeg"),i.prototype.neg=a(function(){return this.clone().ineg()},"neg"),i.prototype.ineg=a(function(){return this.isZero()||(this.negative^=1),this},"ineg"),i.prototype.iuor=a(function(b){for(;this.length<b.length;)this.words[this.length++]=0;for(var T=0;T<b.length;T++)this.words[T]=this.words[T]|b.words[T];return this.strip()},"iuor"),i.prototype.ior=a(function(b){return r((this.negative|b.negative)===0),this.iuor(b)},"ior"),i.prototype.or=a(function(b){return this.length>b.length?this.clone().ior(b):b.clone().ior(this)},"or"),i.prototype.uor=a(function(b){return this.length>b.length?this.clone().iuor(b):b.clone().iuor(this)},"uor"),i.prototype.iuand=a(function(b){var T;this.length>b.length?T=b:T=this;for(var k=0;k<T.length;k++)this.words[k]=this.words[k]&b.words[k];return this.length=T.length,this.strip()},"iuand"),i.prototype.iand=a(function(b){return r((this.negative|b.negative)===0),this.iuand(b)},"iand"),i.prototype.and=a(function(b){return this.length>b.length?this.clone().iand(b):b.clone().iand(this)},"and"),i.prototype.uand=a(function(b){return this.length>b.length?this.clone().iuand(b):b.clone().iuand(this)},"uand"),i.prototype.iuxor=a(function(b){var T,k;this.length>b.length?(T=this,k=b):(T=b,k=this);for(var S=0;S<k.length;S++)this.words[S]=T.words[S]^k.words[S];if(this!==T)for(;S<T.length;S++)this.words[S]=T.words[S];return this.length=T.length,this.strip()},"iuxor"),i.prototype.ixor=a(function(b){return r((this.negative|b.negative)===0),this.iuxor(b)},"ixor"),i.prototype.xor=a(function(b){return this.length>b.length?this.clone().ixor(b):b.clone().ixor(this)},"xor"),i.prototype.uxor=a(function(b){return this.length>b.length?this.clone().iuxor(b):b.clone().iuxor(this)},"uxor"),i.prototype.inotn=a(function(b){r(typeof b=="number"&&b>=0);var T=Math.ceil(b/26)|0,k=b%26;this._expand(T),k>0&&T--;for(var S=0;S<T;S++)this.words[S]=~this.words[S]&67108863;return k>0&&(this.words[S]=~this.words[S]&67108863>>26-k),this.strip()},"inotn"),i.prototype.notn=a(function(b){return this.clone().inotn(b)},"notn"),i.prototype.setn=a(function(b,T){r(typeof b=="number"&&b>=0);var k=b/26|0,S=b%26;return this._expand(k+1),T?this.words[k]=this.words[k]|1<<S:this.words[k]=this.words[k]&~(1<<S),this.strip()},"setn"),i.prototype.iadd=a(function(b){var T;if(this.negative!==0&&b.negative===0)return this.negative=0,T=this.isub(b),this.negative^=1,this._normSign();if(this.negative===0&&b.negative!==0)return b.negative=0,T=this.isub(b),b.negative=1,T._normSign();var k,S;this.length>b.length?(k=this,S=b):(k=b,S=this);for(var N=0,P=0;P<S.length;P++)T=(k.words[P]|0)+(S.words[P]|0)+N,this.words[P]=T&67108863,N=T>>>26;for(;N!==0&&P<k.length;P++)T=(k.words[P]|0)+N,this.words[P]=T&67108863,N=T>>>26;if(this.length=k.length,N!==0)this.words[this.length]=N,this.length++;else if(k!==this)for(;P<k.length;P++)this.words[P]=k.words[P];return this},"iadd"),i.prototype.add=a(function(b){var T;return b.negative!==0&&this.negative===0?(b.negative=0,T=this.sub(b),b.negative^=1,T):b.negative===0&&this.negative!==0?(this.negative=0,T=b.sub(this),this.negative=1,T):this.length>b.length?this.clone().iadd(b):b.clone().iadd(this)},"add"),i.prototype.isub=a(function(b){if(b.negative!==0){b.negative=0;var T=this.iadd(b);return b.negative=1,T._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(b),this.negative=1,this._normSign();var k=this.cmp(b);if(k===0)return this.negative=0,this.length=1,this.words[0]=0,this;var S,N;k>0?(S=this,N=b):(S=b,N=this);for(var P=0,F=0;F<N.length;F++)T=(S.words[F]|0)-(N.words[F]|0)+P,P=T>>26,this.words[F]=T&67108863;for(;P!==0&&F<S.length;F++)T=(S.words[F]|0)+P,P=T>>26,this.words[F]=T&67108863;if(P===0&&F<S.length&&S!==this)for(;F<S.length;F++)this.words[F]=S.words[F];return this.length=Math.max(this.length,F),S!==this&&(this.negative=1),this.strip()},"isub"),i.prototype.sub=a(function(b){return this.clone().isub(b)},"sub");function _(L,b,T){T.negative=b.negative^L.negative;var k=L.length+b.length|0;T.length=k,k=k-1|0;var S=L.words[0]|0,N=b.words[0]|0,P=S*N,F=P&67108863,D=P/67108864|0;T.words[0]=F;for(var x=1;x<k;x++){for(var O=D>>>26,G=D&67108863,M=Math.min(x,b.length-1),J=Math.max(0,x-L.length+1);J<=M;J++){var X=x-J|0;S=L.words[X]|0,N=b.words[J]|0,P=S*N+G,O+=P/67108864|0,G=P&67108863}T.words[x]=G|0,D=O|0}return D!==0?T.words[x]=D|0:T.length--,T.strip()}a(_,"smallMulTo");var h=a(function(b,T,k){var S=b.words,N=T.words,P=k.words,F=0,D,x,O,G=S[0]|0,M=G&8191,J=G>>>13,X=S[1]|0,Z=X&8191,ae=X>>>13,pe=S[2]|0,he=pe&8191,xe=pe>>>13,Be=S[3]|0,Oe=Be&8191,re=Be>>>13,ce=S[4]|0,le=ce&8191,ge=ce>>>13,Ee=S[5]|0,Ie=Ee&8191,Ge=Ee>>>13,or=S[6]|0,Qe=or&8191,zt=or>>>13,yd=S[7]|0,Lr=yd&8191,Dr=yd>>>13,vd=S[8]|0,Kn=vd&8191,On=vd>>>13,Hm=S[9]|0,Br=Hm&8191,Ur=Hm>>>13,Wv=N[0]|0,In=Wv&8191,Cn=Wv>>>13,Xv=N[1]|0,Rn=Xv&8191,Pn=Xv>>>13,Qv=N[2]|0,Ln=Qv&8191,zn=Qv>>>13,G_=N[3]|0,Jn=G_&8191,Wn=G_>>>13,Yv=N[4]|0,Dn=Yv&8191,Xn=Yv>>>13,Zv=N[5]|0,Bn=Zv&8191,Qn=Zv>>>13,jm=N[6]|0,Jt=jm&8191,Ar=jm>>>13,$m=N[7]|0,Yn=$m&8191,fi=$m>>>13,bN=N[8]|0,pi=bN&8191,_i=bN>>>13,xN=N[9]|0,hi=xN&8191,mi=xN>>>13;k.negative=b.negative^T.negative,k.length=19,D=Math.imul(M,In),x=Math.imul(M,Cn),x=x+Math.imul(J,In)|0,O=Math.imul(J,Cn);var C=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(C>>>26)|0,C&=67108863,D=Math.imul(Z,In),x=Math.imul(Z,Cn),x=x+Math.imul(ae,In)|0,O=Math.imul(ae,Cn),D=D+Math.imul(M,Rn)|0,x=x+Math.imul(M,Pn)|0,x=x+Math.imul(J,Rn)|0,O=O+Math.imul(J,Pn)|0;var q=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(q>>>26)|0,q&=67108863,D=Math.imul(he,In),x=Math.imul(he,Cn),x=x+Math.imul(xe,In)|0,O=Math.imul(xe,Cn),D=D+Math.imul(Z,Rn)|0,x=x+Math.imul(Z,Pn)|0,x=x+Math.imul(ae,Rn)|0,O=O+Math.imul(ae,Pn)|0,D=D+Math.imul(M,Ln)|0,x=x+Math.imul(M,zn)|0,x=x+Math.imul(J,Ln)|0,O=O+Math.imul(J,zn)|0;var j=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(j>>>26)|0,j&=67108863,D=Math.imul(Oe,In),x=Math.imul(Oe,Cn),x=x+Math.imul(re,In)|0,O=Math.imul(re,Cn),D=D+Math.imul(he,Rn)|0,x=x+Math.imul(he,Pn)|0,x=x+Math.imul(xe,Rn)|0,O=O+Math.imul(xe,Pn)|0,D=D+Math.imul(Z,Ln)|0,x=x+Math.imul(Z,zn)|0,x=x+Math.imul(ae,Ln)|0,O=O+Math.imul(ae,zn)|0,D=D+Math.imul(M,Jn)|0,x=x+Math.imul(M,Wn)|0,x=x+Math.imul(J,Jn)|0,O=O+Math.imul(J,Wn)|0;var V=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(V>>>26)|0,V&=67108863,D=Math.imul(le,In),x=Math.imul(le,Cn),x=x+Math.imul(ge,In)|0,O=Math.imul(ge,Cn),D=D+Math.imul(Oe,Rn)|0,x=x+Math.imul(Oe,Pn)|0,x=x+Math.imul(re,Rn)|0,O=O+Math.imul(re,Pn)|0,D=D+Math.imul(he,Ln)|0,x=x+Math.imul(he,zn)|0,x=x+Math.imul(xe,Ln)|0,O=O+Math.imul(xe,zn)|0,D=D+Math.imul(Z,Jn)|0,x=x+Math.imul(Z,Wn)|0,x=x+Math.imul(ae,Jn)|0,O=O+Math.imul(ae,Wn)|0,D=D+Math.imul(M,Dn)|0,x=x+Math.imul(M,Xn)|0,x=x+Math.imul(J,Dn)|0,O=O+Math.imul(J,Xn)|0;var W=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(W>>>26)|0,W&=67108863,D=Math.imul(Ie,In),x=Math.imul(Ie,Cn),x=x+Math.imul(Ge,In)|0,O=Math.imul(Ge,Cn),D=D+Math.imul(le,Rn)|0,x=x+Math.imul(le,Pn)|0,x=x+Math.imul(ge,Rn)|0,O=O+Math.imul(ge,Pn)|0,D=D+Math.imul(Oe,Ln)|0,x=x+Math.imul(Oe,zn)|0,x=x+Math.imul(re,Ln)|0,O=O+Math.imul(re,zn)|0,D=D+Math.imul(he,Jn)|0,x=x+Math.imul(he,Wn)|0,x=x+Math.imul(xe,Jn)|0,O=O+Math.imul(xe,Wn)|0,D=D+Math.imul(Z,Dn)|0,x=x+Math.imul(Z,Xn)|0,x=x+Math.imul(ae,Dn)|0,O=O+Math.imul(ae,Xn)|0,D=D+Math.imul(M,Bn)|0,x=x+Math.imul(M,Qn)|0,x=x+Math.imul(J,Bn)|0,O=O+Math.imul(J,Qn)|0;var z=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(z>>>26)|0,z&=67108863,D=Math.imul(Qe,In),x=Math.imul(Qe,Cn),x=x+Math.imul(zt,In)|0,O=Math.imul(zt,Cn),D=D+Math.imul(Ie,Rn)|0,x=x+Math.imul(Ie,Pn)|0,x=x+Math.imul(Ge,Rn)|0,O=O+Math.imul(Ge,Pn)|0,D=D+Math.imul(le,Ln)|0,x=x+Math.imul(le,zn)|0,x=x+Math.imul(ge,Ln)|0,O=O+Math.imul(ge,zn)|0,D=D+Math.imul(Oe,Jn)|0,x=x+Math.imul(Oe,Wn)|0,x=x+Math.imul(re,Jn)|0,O=O+Math.imul(re,Wn)|0,D=D+Math.imul(he,Dn)|0,x=x+Math.imul(he,Xn)|0,x=x+Math.imul(xe,Dn)|0,O=O+Math.imul(xe,Xn)|0,D=D+Math.imul(Z,Bn)|0,x=x+Math.imul(Z,Qn)|0,x=x+Math.imul(ae,Bn)|0,O=O+Math.imul(ae,Qn)|0,D=D+Math.imul(M,Jt)|0,x=x+Math.imul(M,Ar)|0,x=x+Math.imul(J,Jt)|0,O=O+Math.imul(J,Ar)|0;var Q=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(Q>>>26)|0,Q&=67108863,D=Math.imul(Lr,In),x=Math.imul(Lr,Cn),x=x+Math.imul(Dr,In)|0,O=Math.imul(Dr,Cn),D=D+Math.imul(Qe,Rn)|0,x=x+Math.imul(Qe,Pn)|0,x=x+Math.imul(zt,Rn)|0,O=O+Math.imul(zt,Pn)|0,D=D+Math.imul(Ie,Ln)|0,x=x+Math.imul(Ie,zn)|0,x=x+Math.imul(Ge,Ln)|0,O=O+Math.imul(Ge,zn)|0,D=D+Math.imul(le,Jn)|0,x=x+Math.imul(le,Wn)|0,x=x+Math.imul(ge,Jn)|0,O=O+Math.imul(ge,Wn)|0,D=D+Math.imul(Oe,Dn)|0,x=x+Math.imul(Oe,Xn)|0,x=x+Math.imul(re,Dn)|0,O=O+Math.imul(re,Xn)|0,D=D+Math.imul(he,Bn)|0,x=x+Math.imul(he,Qn)|0,x=x+Math.imul(xe,Bn)|0,O=O+Math.imul(xe,Qn)|0,D=D+Math.imul(Z,Jt)|0,x=x+Math.imul(Z,Ar)|0,x=x+Math.imul(ae,Jt)|0,O=O+Math.imul(ae,Ar)|0,D=D+Math.imul(M,Yn)|0,x=x+Math.imul(M,fi)|0,x=x+Math.imul(J,Yn)|0,O=O+Math.imul(J,fi)|0;var ee=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(ee>>>26)|0,ee&=67108863,D=Math.imul(Kn,In),x=Math.imul(Kn,Cn),x=x+Math.imul(On,In)|0,O=Math.imul(On,Cn),D=D+Math.imul(Lr,Rn)|0,x=x+Math.imul(Lr,Pn)|0,x=x+Math.imul(Dr,Rn)|0,O=O+Math.imul(Dr,Pn)|0,D=D+Math.imul(Qe,Ln)|0,x=x+Math.imul(Qe,zn)|0,x=x+Math.imul(zt,Ln)|0,O=O+Math.imul(zt,zn)|0,D=D+Math.imul(Ie,Jn)|0,x=x+Math.imul(Ie,Wn)|0,x=x+Math.imul(Ge,Jn)|0,O=O+Math.imul(Ge,Wn)|0,D=D+Math.imul(le,Dn)|0,x=x+Math.imul(le,Xn)|0,x=x+Math.imul(ge,Dn)|0,O=O+Math.imul(ge,Xn)|0,D=D+Math.imul(Oe,Bn)|0,x=x+Math.imul(Oe,Qn)|0,x=x+Math.imul(re,Bn)|0,O=O+Math.imul(re,Qn)|0,D=D+Math.imul(he,Jt)|0,x=x+Math.imul(he,Ar)|0,x=x+Math.imul(xe,Jt)|0,O=O+Math.imul(xe,Ar)|0,D=D+Math.imul(Z,Yn)|0,x=x+Math.imul(Z,fi)|0,x=x+Math.imul(ae,Yn)|0,O=O+Math.imul(ae,fi)|0,D=D+Math.imul(M,pi)|0,x=x+Math.imul(M,_i)|0,x=x+Math.imul(J,pi)|0,O=O+Math.imul(J,_i)|0;var ne=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(ne>>>26)|0,ne&=67108863,D=Math.imul(Br,In),x=Math.imul(Br,Cn),x=x+Math.imul(Ur,In)|0,O=Math.imul(Ur,Cn),D=D+Math.imul(Kn,Rn)|0,x=x+Math.imul(Kn,Pn)|0,x=x+Math.imul(On,Rn)|0,O=O+Math.imul(On,Pn)|0,D=D+Math.imul(Lr,Ln)|0,x=x+Math.imul(Lr,zn)|0,x=x+Math.imul(Dr,Ln)|0,O=O+Math.imul(Dr,zn)|0,D=D+Math.imul(Qe,Jn)|0,x=x+Math.imul(Qe,Wn)|0,x=x+Math.imul(zt,Jn)|0,O=O+Math.imul(zt,Wn)|0,D=D+Math.imul(Ie,Dn)|0,x=x+Math.imul(Ie,Xn)|0,x=x+Math.imul(Ge,Dn)|0,O=O+Math.imul(Ge,Xn)|0,D=D+Math.imul(le,Bn)|0,x=x+Math.imul(le,Qn)|0,x=x+Math.imul(ge,Bn)|0,O=O+Math.imul(ge,Qn)|0,D=D+Math.imul(Oe,Jt)|0,x=x+Math.imul(Oe,Ar)|0,x=x+Math.imul(re,Jt)|0,O=O+Math.imul(re,Ar)|0,D=D+Math.imul(he,Yn)|0,x=x+Math.imul(he,fi)|0,x=x+Math.imul(xe,Yn)|0,O=O+Math.imul(xe,fi)|0,D=D+Math.imul(Z,pi)|0,x=x+Math.imul(Z,_i)|0,x=x+Math.imul(ae,pi)|0,O=O+Math.imul(ae,_i)|0,D=D+Math.imul(M,hi)|0,x=x+Math.imul(M,mi)|0,x=x+Math.imul(J,hi)|0,O=O+Math.imul(J,mi)|0;var te=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(te>>>26)|0,te&=67108863,D=Math.imul(Br,Rn),x=Math.imul(Br,Pn),x=x+Math.imul(Ur,Rn)|0,O=Math.imul(Ur,Pn),D=D+Math.imul(Kn,Ln)|0,x=x+Math.imul(Kn,zn)|0,x=x+Math.imul(On,Ln)|0,O=O+Math.imul(On,zn)|0,D=D+Math.imul(Lr,Jn)|0,x=x+Math.imul(Lr,Wn)|0,x=x+Math.imul(Dr,Jn)|0,O=O+Math.imul(Dr,Wn)|0,D=D+Math.imul(Qe,Dn)|0,x=x+Math.imul(Qe,Xn)|0,x=x+Math.imul(zt,Dn)|0,O=O+Math.imul(zt,Xn)|0,D=D+Math.imul(Ie,Bn)|0,x=x+Math.imul(Ie,Qn)|0,x=x+Math.imul(Ge,Bn)|0,O=O+Math.imul(Ge,Qn)|0,D=D+Math.imul(le,Jt)|0,x=x+Math.imul(le,Ar)|0,x=x+Math.imul(ge,Jt)|0,O=O+Math.imul(ge,Ar)|0,D=D+Math.imul(Oe,Yn)|0,x=x+Math.imul(Oe,fi)|0,x=x+Math.imul(re,Yn)|0,O=O+Math.imul(re,fi)|0,D=D+Math.imul(he,pi)|0,x=x+Math.imul(he,_i)|0,x=x+Math.imul(xe,pi)|0,O=O+Math.imul(xe,_i)|0,D=D+Math.imul(Z,hi)|0,x=x+Math.imul(Z,mi)|0,x=x+Math.imul(ae,hi)|0,O=O+Math.imul(ae,mi)|0;var se=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(se>>>26)|0,se&=67108863,D=Math.imul(Br,Ln),x=Math.imul(Br,zn),x=x+Math.imul(Ur,Ln)|0,O=Math.imul(Ur,zn),D=D+Math.imul(Kn,Jn)|0,x=x+Math.imul(Kn,Wn)|0,x=x+Math.imul(On,Jn)|0,O=O+Math.imul(On,Wn)|0,D=D+Math.imul(Lr,Dn)|0,x=x+Math.imul(Lr,Xn)|0,x=x+Math.imul(Dr,Dn)|0,O=O+Math.imul(Dr,Xn)|0,D=D+Math.imul(Qe,Bn)|0,x=x+Math.imul(Qe,Qn)|0,x=x+Math.imul(zt,Bn)|0,O=O+Math.imul(zt,Qn)|0,D=D+Math.imul(Ie,Jt)|0,x=x+Math.imul(Ie,Ar)|0,x=x+Math.imul(Ge,Jt)|0,O=O+Math.imul(Ge,Ar)|0,D=D+Math.imul(le,Yn)|0,x=x+Math.imul(le,fi)|0,x=x+Math.imul(ge,Yn)|0,O=O+Math.imul(ge,fi)|0,D=D+Math.imul(Oe,pi)|0,x=x+Math.imul(Oe,_i)|0,x=x+Math.imul(re,pi)|0,O=O+Math.imul(re,_i)|0,D=D+Math.imul(he,hi)|0,x=x+Math.imul(he,mi)|0,x=x+Math.imul(xe,hi)|0,O=O+Math.imul(xe,mi)|0;var fe=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(fe>>>26)|0,fe&=67108863,D=Math.imul(Br,Jn),x=Math.imul(Br,Wn),x=x+Math.imul(Ur,Jn)|0,O=Math.imul(Ur,Wn),D=D+Math.imul(Kn,Dn)|0,x=x+Math.imul(Kn,Xn)|0,x=x+Math.imul(On,Dn)|0,O=O+Math.imul(On,Xn)|0,D=D+Math.imul(Lr,Bn)|0,x=x+Math.imul(Lr,Qn)|0,x=x+Math.imul(Dr,Bn)|0,O=O+Math.imul(Dr,Qn)|0,D=D+Math.imul(Qe,Jt)|0,x=x+Math.imul(Qe,Ar)|0,x=x+Math.imul(zt,Jt)|0,O=O+Math.imul(zt,Ar)|0,D=D+Math.imul(Ie,Yn)|0,x=x+Math.imul(Ie,fi)|0,x=x+Math.imul(Ge,Yn)|0,O=O+Math.imul(Ge,fi)|0,D=D+Math.imul(le,pi)|0,x=x+Math.imul(le,_i)|0,x=x+Math.imul(ge,pi)|0,O=O+Math.imul(ge,_i)|0,D=D+Math.imul(Oe,hi)|0,x=x+Math.imul(Oe,mi)|0,x=x+Math.imul(re,hi)|0,O=O+Math.imul(re,mi)|0;var _e=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(_e>>>26)|0,_e&=67108863,D=Math.imul(Br,Dn),x=Math.imul(Br,Xn),x=x+Math.imul(Ur,Dn)|0,O=Math.imul(Ur,Xn),D=D+Math.imul(Kn,Bn)|0,x=x+Math.imul(Kn,Qn)|0,x=x+Math.imul(On,Bn)|0,O=O+Math.imul(On,Qn)|0,D=D+Math.imul(Lr,Jt)|0,x=x+Math.imul(Lr,Ar)|0,x=x+Math.imul(Dr,Jt)|0,O=O+Math.imul(Dr,Ar)|0,D=D+Math.imul(Qe,Yn)|0,x=x+Math.imul(Qe,fi)|0,x=x+Math.imul(zt,Yn)|0,O=O+Math.imul(zt,fi)|0,D=D+Math.imul(Ie,pi)|0,x=x+Math.imul(Ie,_i)|0,x=x+Math.imul(Ge,pi)|0,O=O+Math.imul(Ge,_i)|0,D=D+Math.imul(le,hi)|0,x=x+Math.imul(le,mi)|0,x=x+Math.imul(ge,hi)|0,O=O+Math.imul(ge,mi)|0;var qe=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(qe>>>26)|0,qe&=67108863,D=Math.imul(Br,Bn),x=Math.imul(Br,Qn),x=x+Math.imul(Ur,Bn)|0,O=Math.imul(Ur,Qn),D=D+Math.imul(Kn,Jt)|0,x=x+Math.imul(Kn,Ar)|0,x=x+Math.imul(On,Jt)|0,O=O+Math.imul(On,Ar)|0,D=D+Math.imul(Lr,Yn)|0,x=x+Math.imul(Lr,fi)|0,x=x+Math.imul(Dr,Yn)|0,O=O+Math.imul(Dr,fi)|0,D=D+Math.imul(Qe,pi)|0,x=x+Math.imul(Qe,_i)|0,x=x+Math.imul(zt,pi)|0,O=O+Math.imul(zt,_i)|0,D=D+Math.imul(Ie,hi)|0,x=x+Math.imul(Ie,mi)|0,x=x+Math.imul(Ge,hi)|0,O=O+Math.imul(Ge,mi)|0;var $t=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+($t>>>26)|0,$t&=67108863,D=Math.imul(Br,Jt),x=Math.imul(Br,Ar),x=x+Math.imul(Ur,Jt)|0,O=Math.imul(Ur,Ar),D=D+Math.imul(Kn,Yn)|0,x=x+Math.imul(Kn,fi)|0,x=x+Math.imul(On,Yn)|0,O=O+Math.imul(On,fi)|0,D=D+Math.imul(Lr,pi)|0,x=x+Math.imul(Lr,_i)|0,x=x+Math.imul(Dr,pi)|0,O=O+Math.imul(Dr,_i)|0,D=D+Math.imul(Qe,hi)|0,x=x+Math.imul(Qe,mi)|0,x=x+Math.imul(zt,hi)|0,O=O+Math.imul(zt,mi)|0;var tt=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(tt>>>26)|0,tt&=67108863,D=Math.imul(Br,Yn),x=Math.imul(Br,fi),x=x+Math.imul(Ur,Yn)|0,O=Math.imul(Ur,fi),D=D+Math.imul(Kn,pi)|0,x=x+Math.imul(Kn,_i)|0,x=x+Math.imul(On,pi)|0,O=O+Math.imul(On,_i)|0,D=D+Math.imul(Lr,hi)|0,x=x+Math.imul(Lr,mi)|0,x=x+Math.imul(Dr,hi)|0,O=O+Math.imul(Dr,mi)|0;var la=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(la>>>26)|0,la&=67108863,D=Math.imul(Br,pi),x=Math.imul(Br,_i),x=x+Math.imul(Ur,pi)|0,O=Math.imul(Ur,_i),D=D+Math.imul(Kn,hi)|0,x=x+Math.imul(Kn,mi)|0,x=x+Math.imul(On,hi)|0,O=O+Math.imul(On,mi)|0;var Jr=(F+D|0)+((x&8191)<<13)|0;F=(O+(x>>>13)|0)+(Jr>>>26)|0,Jr&=67108863,D=Math.imul(Br,hi),x=Math.imul(Br,mi),x=x+Math.imul(Ur,hi)|0,O=Math.imul(Ur,mi);var Ms=(F+D|0)+((x&8191)<<13)|0;return F=(O+(x>>>13)|0)+(Ms>>>26)|0,Ms&=67108863,P[0]=C,P[1]=q,P[2]=j,P[3]=V,P[4]=W,P[5]=z,P[6]=Q,P[7]=ee,P[8]=ne,P[9]=te,P[10]=se,P[11]=fe,P[12]=_e,P[13]=qe,P[14]=$t,P[15]=tt,P[16]=la,P[17]=Jr,P[18]=Ms,F!==0&&(P[19]=F,k.length++),k},"comb10MulTo");Math.imul||(h=_);function m(L,b,T){T.negative=b.negative^L.negative,T.length=L.length+b.length;for(var k=0,S=0,N=0;N<T.length-1;N++){var P=S;S=0;for(var F=k&67108863,D=Math.min(N,b.length-1),x=Math.max(0,N-L.length+1);x<=D;x++){var O=N-x,G=L.words[O]|0,M=b.words[x]|0,J=G*M,X=J&67108863;P=P+(J/67108864|0)|0,X=X+F|0,F=X&67108863,P=P+(X>>>26)|0,S+=P>>>26,P&=67108863}T.words[N]=F,k=P,P=S}return k!==0?T.words[N]=k:T.length--,T.strip()}a(m,"bigMulTo");function g(L,b,T){var k=new y;return k.mulp(L,b,T)}a(g,"jumboMulTo"),i.prototype.mulTo=a(function(b,T){var k,S=this.length+b.length;return this.length===10&&b.length===10?k=h(this,b,T):S<63?k=_(this,b,T):S<1024?k=m(this,b,T):k=g(this,b,T),k},"mulTo");function y(L,b){this.x=L,this.y=b}a(y,"FFTM"),y.prototype.makeRBT=a(function(b){for(var T=new Array(b),k=i.prototype._countBits(b)-1,S=0;S<b;S++)T[S]=this.revBin(S,k,b);return T},"makeRBT"),y.prototype.revBin=a(function(b,T,k){if(b===0||b===k-1)return b;for(var S=0,N=0;N<T;N++)S|=(b&1)<<T-N-1,b>>=1;return S},"revBin"),y.prototype.permute=a(function(b,T,k,S,N,P){for(var F=0;F<P;F++)S[F]=T[b[F]],N[F]=k[b[F]]},"permute"),y.prototype.transform=a(function(b,T,k,S,N,P){this.permute(P,b,T,k,S,N);for(var F=1;F<N;F<<=1)for(var D=F<<1,x=Math.cos(2*Math.PI/D),O=Math.sin(2*Math.PI/D),G=0;G<N;G+=D)for(var M=x,J=O,X=0;X<F;X++){var Z=k[G+X],ae=S[G+X],pe=k[G+X+F],he=S[G+X+F],xe=M*pe-J*he;he=M*he+J*pe,pe=xe,k[G+X]=Z+pe,S[G+X]=ae+he,k[G+X+F]=Z-pe,S[G+X+F]=ae-he,X!==D&&(xe=x*M-O*J,J=x*J+O*M,M=xe)}},"transform"),y.prototype.guessLen13b=a(function(b,T){var k=Math.max(T,b)|1,S=k&1,N=0;for(k=k/2|0;k;k=k>>>1)N++;return 1<<N+1+S},"guessLen13b"),y.prototype.conjugate=a(function(b,T,k){if(!(k<=1))for(var S=0;S<k/2;S++){var N=b[S];b[S]=b[k-S-1],b[k-S-1]=N,N=T[S],T[S]=-T[k-S-1],T[k-S-1]=-N}},"conjugate"),y.prototype.normalize13b=a(function(b,T){for(var k=0,S=0;S<T/2;S++){var N=Math.round(b[2*S+1]/T)*8192+Math.round(b[2*S]/T)+k;b[S]=N&67108863,N<67108864?k=0:k=N/67108864|0}return b},"normalize13b"),y.prototype.convert13b=a(function(b,T,k,S){for(var N=0,P=0;P<T;P++)N=N+(b[P]|0),k[2*P]=N&8191,N=N>>>13,k[2*P+1]=N&8191,N=N>>>13;for(P=2*T;P<S;++P)k[P]=0;r(N===0),r((N&-8192)===0)},"convert13b"),y.prototype.stub=a(function(b){for(var T=new Array(b),k=0;k<b;k++)T[k]=0;return T},"stub"),y.prototype.mulp=a(function(b,T,k){var S=2*this.guessLen13b(b.length,T.length),N=this.makeRBT(S),P=this.stub(S),F=new Array(S),D=new Array(S),x=new Array(S),O=new Array(S),G=new Array(S),M=new Array(S),J=k.words;J.length=S,this.convert13b(b.words,b.length,F,S),this.convert13b(T.words,T.length,O,S),this.transform(F,P,D,x,S,N),this.transform(O,P,G,M,S,N);for(var X=0;X<S;X++){var Z=D[X]*G[X]-x[X]*M[X];x[X]=D[X]*M[X]+x[X]*G[X],D[X]=Z}return this.conjugate(D,x,S),this.transform(D,x,J,P,S,N),this.conjugate(J,P,S),this.normalize13b(J,S),k.negative=b.negative^T.negative,k.length=b.length+T.length,k.strip()},"mulp"),i.prototype.mul=a(function(b){var T=new i(null);return T.words=new Array(this.length+b.length),this.mulTo(b,T)},"mul"),i.prototype.mulf=a(function(b){var T=new i(null);return T.words=new Array(this.length+b.length),g(this,b,T)},"mulf"),i.prototype.imul=a(function(b){return this.clone().mulTo(b,this)},"imul"),i.prototype.imuln=a(function(b){r(typeof b=="number"),r(b<67108864);for(var T=0,k=0;k<this.length;k++){var S=(this.words[k]|0)*b,N=(S&67108863)+(T&67108863);T>>=26,T+=S/67108864|0,T+=N>>>26,this.words[k]=N&67108863}return T!==0&&(this.words[k]=T,this.length++),this.length=b===0?1:this.length,this},"imuln"),i.prototype.muln=a(function(b){return this.clone().imuln(b)},"muln"),i.prototype.sqr=a(function(){return this.mul(this)},"sqr"),i.prototype.isqr=a(function(){return this.imul(this.clone())},"isqr"),i.prototype.pow=a(function(b){var T=p(b);if(T.length===0)return new i(1);for(var k=this,S=0;S<T.length&&T[S]===0;S++,k=k.sqr());if(++S<T.length)for(var N=k.sqr();S<T.length;S++,N=N.sqr())T[S]!==0&&(k=k.mul(N));return k},"pow"),i.prototype.iushln=a(function(b){r(typeof b=="number"&&b>=0);var T=b%26,k=(b-T)/26,S=67108863>>>26-T<<26-T,N;if(T!==0){var P=0;for(N=0;N<this.length;N++){var F=this.words[N]&S,D=(this.words[N]|0)-F<<T;this.words[N]=D|P,P=F>>>26-T}P&&(this.words[N]=P,this.length++)}if(k!==0){for(N=this.length-1;N>=0;N--)this.words[N+k]=this.words[N];for(N=0;N<k;N++)this.words[N]=0;this.length+=k}return this.strip()},"iushln"),i.prototype.ishln=a(function(b){return r(this.negative===0),this.iushln(b)},"ishln"),i.prototype.iushrn=a(function(b,T,k){r(typeof b=="number"&&b>=0);var S;T?S=(T-T%26)/26:S=0;var N=b%26,P=Math.min((b-N)/26,this.length),F=67108863^67108863>>>N<<N,D=k;if(S-=P,S=Math.max(0,S),D){for(var x=0;x<P;x++)D.words[x]=this.words[x];D.length=P}if(P!==0)if(this.length>P)for(this.length-=P,x=0;x<this.length;x++)this.words[x]=this.words[x+P];else this.words[0]=0,this.length=1;var O=0;for(x=this.length-1;x>=0&&(O!==0||x>=S);x--){var G=this.words[x]|0;this.words[x]=O<<26-N|G>>>N,O=G&F}return D&&O!==0&&(D.words[D.length++]=O),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},"iushrn"),i.prototype.ishrn=a(function(b,T,k){return r(this.negative===0),this.iushrn(b,T,k)},"ishrn"),i.prototype.shln=a(function(b){return this.clone().ishln(b)},"shln"),i.prototype.ushln=a(function(b){return this.clone().iushln(b)},"ushln"),i.prototype.shrn=a(function(b){return this.clone().ishrn(b)},"shrn"),i.prototype.ushrn=a(function(b){return this.clone().iushrn(b)},"ushrn"),i.prototype.testn=a(function(b){r(typeof b=="number"&&b>=0);var T=b%26,k=(b-T)/26,S=1<<T;if(this.length<=k)return!1;var N=this.words[k];return!!(N&S)},"testn"),i.prototype.imaskn=a(function(b){r(typeof b=="number"&&b>=0);var T=b%26,k=(b-T)/26;if(r(this.negative===0,"imaskn works only with positive numbers"),this.length<=k)return this;if(T!==0&&k++,this.length=Math.min(k,this.length),T!==0){var S=67108863^67108863>>>T<<T;this.words[this.length-1]&=S}return this.strip()},"imaskn"),i.prototype.maskn=a(function(b){return this.clone().imaskn(b)},"maskn"),i.prototype.iaddn=a(function(b){return r(typeof b=="number"),r(b<67108864),b<0?this.isubn(-b):this.negative!==0?this.length===1&&(this.words[0]|0)<b?(this.words[0]=b-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(b),this.negative=1,this):this._iaddn(b)},"iaddn"),i.prototype._iaddn=a(function(b){this.words[0]+=b;for(var T=0;T<this.length&&this.words[T]>=67108864;T++)this.words[T]-=67108864,T===this.length-1?this.words[T+1]=1:this.words[T+1]++;return this.length=Math.max(this.length,T+1),this},"_iaddn"),i.prototype.isubn=a(function(b){if(r(typeof b=="number"),r(b<67108864),b<0)return this.iaddn(-b);if(this.negative!==0)return this.negative=0,this.iaddn(b),this.negative=1,this;if(this.words[0]-=b,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var T=0;T<this.length&&this.words[T]<0;T++)this.words[T]+=67108864,this.words[T+1]-=1;return this.strip()},"isubn"),i.prototype.addn=a(function(b){return this.clone().iaddn(b)},"addn"),i.prototype.subn=a(function(b){return this.clone().isubn(b)},"subn"),i.prototype.iabs=a(function(){return this.negative=0,this},"iabs"),i.prototype.abs=a(function(){return this.clone().iabs()},"abs"),i.prototype._ishlnsubmul=a(function(b,T,k){var S=b.length+k,N;this._expand(S);var P,F=0;for(N=0;N<b.length;N++){P=(this.words[N+k]|0)+F;var D=(b.words[N]|0)*T;P-=D&67108863,F=(P>>26)-(D/67108864|0),this.words[N+k]=P&67108863}for(;N<this.length-k;N++)P=(this.words[N+k]|0)+F,F=P>>26,this.words[N+k]=P&67108863;if(F===0)return this.strip();for(r(F===-1),F=0,N=0;N<this.length;N++)P=-(this.words[N]|0)+F,F=P>>26,this.words[N]=P&67108863;return this.negative=1,this.strip()},"_ishlnsubmul"),i.prototype._wordDiv=a(function(b,T){var k=this.length-b.length,S=this.clone(),N=b,P=N.words[N.length-1]|0,F=this._countBits(P);k=26-F,k!==0&&(N=N.ushln(k),S.iushln(k),P=N.words[N.length-1]|0);var D=S.length-N.length,x;if(T!=="mod"){x=new i(null),x.length=D+1,x.words=new Array(x.length);for(var O=0;O<x.length;O++)x.words[O]=0}var G=S.clone()._ishlnsubmul(N,1,D);G.negative===0&&(S=G,x&&(x.words[D]=1));for(var M=D-1;M>=0;M--){var J=(S.words[N.length+M]|0)*67108864+(S.words[N.length+M-1]|0);for(J=Math.min(J/P|0,67108863),S._ishlnsubmul(N,J,M);S.negative!==0;)J--,S.negative=0,S._ishlnsubmul(N,1,M),S.isZero()||(S.negative^=1);x&&(x.words[M]=J)}return x&&x.strip(),S.strip(),T!=="div"&&k!==0&&S.iushrn(k),{div:x||null,mod:S}},"_wordDiv"),i.prototype.divmod=a(function(b,T,k){if(r(!b.isZero()),this.isZero())return{div:new i(0),mod:new i(0)};var S,N,P;return this.negative!==0&&b.negative===0?(P=this.neg().divmod(b,T),T!=="mod"&&(S=P.div.neg()),T!=="div"&&(N=P.mod.neg(),k&&N.negative!==0&&N.iadd(b)),{div:S,mod:N}):this.negative===0&&b.negative!==0?(P=this.divmod(b.neg(),T),T!=="mod"&&(S=P.div.neg()),{div:S,mod:P.mod}):(this.negative&b.negative)!==0?(P=this.neg().divmod(b.neg(),T),T!=="div"&&(N=P.mod.neg(),k&&N.negative!==0&&N.isub(b)),{div:P.div,mod:N}):b.length>this.length||this.cmp(b)<0?{div:new i(0),mod:this}:b.length===1?T==="div"?{div:this.divn(b.words[0]),mod:null}:T==="mod"?{div:null,mod:new i(this.modn(b.words[0]))}:{div:this.divn(b.words[0]),mod:new i(this.modn(b.words[0]))}:this._wordDiv(b,T)},"divmod"),i.prototype.div=a(function(b){return this.divmod(b,"div",!1).div},"div"),i.prototype.mod=a(function(b){return this.divmod(b,"mod",!1).mod},"mod"),i.prototype.umod=a(function(b){return this.divmod(b,"mod",!0).mod},"umod"),i.prototype.divRound=a(function(b){var T=this.divmod(b);if(T.mod.isZero())return T.div;var k=T.div.negative!==0?T.mod.isub(b):T.mod,S=b.ushrn(1),N=b.andln(1),P=k.cmp(S);return P<0||N===1&&P===0?T.div:T.div.negative!==0?T.div.isubn(1):T.div.iaddn(1)},"divRound"),i.prototype.modn=a(function(b){r(b<=67108863);for(var T=(1<<26)%b,k=0,S=this.length-1;S>=0;S--)k=(T*k+(this.words[S]|0))%b;return k},"modn"),i.prototype.idivn=a(function(b){r(b<=67108863);for(var T=0,k=this.length-1;k>=0;k--){var S=(this.words[k]|0)+T*67108864;this.words[k]=S/b|0,T=S%b}return this.strip()},"idivn"),i.prototype.divn=a(function(b){return this.clone().idivn(b)},"divn"),i.prototype.egcd=a(function(b){r(b.negative===0),r(!b.isZero());var T=this,k=b.clone();T.negative!==0?T=T.umod(b):T=T.clone();for(var S=new i(1),N=new i(0),P=new i(0),F=new i(1),D=0;T.isEven()&&k.isEven();)T.iushrn(1),k.iushrn(1),++D;for(var x=k.clone(),O=T.clone();!T.isZero();){for(var G=0,M=1;(T.words[0]&M)===0&&G<26;++G,M<<=1);if(G>0)for(T.iushrn(G);G-- >0;)(S.isOdd()||N.isOdd())&&(S.iadd(x),N.isub(O)),S.iushrn(1),N.iushrn(1);for(var J=0,X=1;(k.words[0]&X)===0&&J<26;++J,X<<=1);if(J>0)for(k.iushrn(J);J-- >0;)(P.isOdd()||F.isOdd())&&(P.iadd(x),F.isub(O)),P.iushrn(1),F.iushrn(1);T.cmp(k)>=0?(T.isub(k),S.isub(P),N.isub(F)):(k.isub(T),P.isub(S),F.isub(N))}return{a:P,b:F,gcd:k.iushln(D)}},"egcd"),i.prototype._invmp=a(function(b){r(b.negative===0),r(!b.isZero());var T=this,k=b.clone();T.negative!==0?T=T.umod(b):T=T.clone();for(var S=new i(1),N=new i(0),P=k.clone();T.cmpn(1)>0&&k.cmpn(1)>0;){for(var F=0,D=1;(T.words[0]&D)===0&&F<26;++F,D<<=1);if(F>0)for(T.iushrn(F);F-- >0;)S.isOdd()&&S.iadd(P),S.iushrn(1);for(var x=0,O=1;(k.words[0]&O)===0&&x<26;++x,O<<=1);if(x>0)for(k.iushrn(x);x-- >0;)N.isOdd()&&N.iadd(P),N.iushrn(1);T.cmp(k)>=0?(T.isub(k),S.isub(N)):(k.isub(T),N.isub(S))}var G;return T.cmpn(1)===0?G=S:G=N,G.cmpn(0)<0&&G.iadd(b),G},"_invmp"),i.prototype.gcd=a(function(b){if(this.isZero())return b.abs();if(b.isZero())return this.abs();var T=this.clone(),k=b.clone();T.negative=0,k.negative=0;for(var S=0;T.isEven()&&k.isEven();S++)T.iushrn(1),k.iushrn(1);do{for(;T.isEven();)T.iushrn(1);for(;k.isEven();)k.iushrn(1);var N=T.cmp(k);if(N<0){var P=T;T=k,k=P}else if(N===0||k.cmpn(1)===0)break;T.isub(k)}while(!0);return k.iushln(S)},"gcd"),i.prototype.invm=a(function(b){return this.egcd(b).a.umod(b)},"invm"),i.prototype.isEven=a(function(){return(this.words[0]&1)===0},"isEven"),i.prototype.isOdd=a(function(){return(this.words[0]&1)===1},"isOdd"),i.prototype.andln=a(function(b){return this.words[0]&b},"andln"),i.prototype.bincn=a(function(b){r(typeof b=="number");var T=b%26,k=(b-T)/26,S=1<<T;if(this.length<=k)return this._expand(k+1),this.words[k]|=S,this;for(var N=S,P=k;N!==0&&P<this.length;P++){var F=this.words[P]|0;F+=N,N=F>>>26,F&=67108863,this.words[P]=F}return N!==0&&(this.words[P]=N,this.length++),this},"bincn"),i.prototype.isZero=a(function(){return this.length===1&&this.words[0]===0},"isZero"),i.prototype.cmpn=a(function(b){var T=b<0;if(this.negative!==0&&!T)return-1;if(this.negative===0&&T)return 1;this.strip();var k;if(this.length>1)k=1;else{T&&(b=-b),r(b<=67108863,"Number is too big");var S=this.words[0]|0;k=S===b?0:S<b?-1:1}return this.negative!==0?-k|0:k},"cmpn"),i.prototype.cmp=a(function(b){if(this.negative!==0&&b.negative===0)return-1;if(this.negative===0&&b.negative!==0)return 1;var T=this.ucmp(b);return this.negative!==0?-T|0:T},"cmp"),i.prototype.ucmp=a(function(b){if(this.length>b.length)return 1;if(this.length<b.length)return-1;for(var T=0,k=this.length-1;k>=0;k--){var S=this.words[k]|0,N=b.words[k]|0;if(S!==N){S<N?T=-1:S>N&&(T=1);break}}return T},"ucmp"),i.prototype.gtn=a(function(b){return this.cmpn(b)===1},"gtn"),i.prototype.gt=a(function(b){return this.cmp(b)===1},"gt"),i.prototype.gten=a(function(b){return this.cmpn(b)>=0},"gten"),i.prototype.gte=a(function(b){return this.cmp(b)>=0},"gte"),i.prototype.ltn=a(function(b){return this.cmpn(b)===-1},"ltn"),i.prototype.lt=a(function(b){return this.cmp(b)===-1},"lt"),i.prototype.lten=a(function(b){return this.cmpn(b)<=0},"lten"),i.prototype.lte=a(function(b){return this.cmp(b)<=0},"lte"),i.prototype.eqn=a(function(b){return this.cmpn(b)===0},"eqn"),i.prototype.eq=a(function(b){return this.cmp(b)===0},"eq"),i.red=a(function(b){return new B(b)},"red"),i.prototype.toRed=a(function(b){return r(!this.red,"Already a number in reduction context"),r(this.negative===0,"red works only with positives"),b.convertTo(this)._forceRed(b)},"toRed"),i.prototype.fromRed=a(function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},"fromRed"),i.prototype._forceRed=a(function(b){return this.red=b,this},"_forceRed"),i.prototype.forceRed=a(function(b){return r(!this.red,"Already a number in reduction context"),this._forceRed(b)},"forceRed"),i.prototype.redAdd=a(function(b){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,b)},"redAdd"),i.prototype.redIAdd=a(function(b){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,b)},"redIAdd"),i.prototype.redSub=a(function(b){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,b)},"redSub"),i.prototype.redISub=a(function(b){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,b)},"redISub"),i.prototype.redShl=a(function(b){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,b)},"redShl"),i.prototype.redMul=a(function(b){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,b),this.red.mul(this,b)},"redMul"),i.prototype.redIMul=a(function(b){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,b),this.red.imul(this,b)},"redIMul"),i.prototype.redSqr=a(function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},"redSqr"),i.prototype.redISqr=a(function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},"redISqr"),i.prototype.redSqrt=a(function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},"redSqrt"),i.prototype.redInvm=a(function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},"redInvm"),i.prototype.redNeg=a(function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},"redNeg"),i.prototype.redPow=a(function(b){return r(this.red&&!b.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,b)},"redPow");var w={k256:null,p224:null,p192:null,p25519:null};function E(L,b){this.name=L,this.p=new i(b,16),this.n=this.p.bitLength(),this.k=new i(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}a(E,"MPrime"),E.prototype._tmp=a(function(){var b=new i(null);return b.words=new Array(Math.ceil(this.n/13)),b},"_tmp"),E.prototype.ireduce=a(function(b){var T=b,k;do this.split(T,this.tmp),T=this.imulK(T),T=T.iadd(this.tmp),k=T.bitLength();while(k>this.n);var S=k<this.n?-1:T.ucmp(this.p);return S===0?(T.words[0]=0,T.length=1):S>0?T.isub(this.p):T.strip!==void 0?T.strip():T._strip(),T},"ireduce"),E.prototype.split=a(function(b,T){b.iushrn(this.n,0,T)},"split"),E.prototype.imulK=a(function(b){return b.imul(this.k)},"imulK");function A(){E.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}a(A,"K256"),n(A,E),A.prototype.split=a(function(b,T){for(var k=4194303,S=Math.min(b.length,9),N=0;N<S;N++)T.words[N]=b.words[N];if(T.length=S,b.length<=9){b.words[0]=0,b.length=1;return}var P=b.words[9];for(T.words[T.length++]=P&k,N=10;N<b.length;N++){var F=b.words[N]|0;b.words[N-10]=(F&k)<<4|P>>>22,P=F}P>>>=22,b.words[N-10]=P,P===0&&b.length>10?b.length-=10:b.length-=9},"split"),A.prototype.imulK=a(function(b){b.words[b.length]=0,b.words[b.length+1]=0,b.length+=2;for(var T=0,k=0;k<b.length;k++){var S=b.words[k]|0;T+=S*977,b.words[k]=T&67108863,T=S*64+(T/67108864|0)}return b.words[b.length-1]===0&&(b.length--,b.words[b.length-1]===0&&b.length--),b},"imulK");function I(){E.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}a(I,"P224"),n(I,E);function R(){E.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}a(R,"P192"),n(R,E);function $(){E.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}a($,"P25519"),n($,E),$.prototype.imulK=a(function(b){for(var T=0,k=0;k<b.length;k++){var S=(b.words[k]|0)*19+T,N=S&67108863;S>>>=26,b.words[k]=N,T=S}return T!==0&&(b.words[b.length++]=T),b},"imulK"),i._prime=a(function(b){if(w[b])return w[b];var T;if(b==="k256")T=new A;else if(b==="p224")T=new I;else if(b==="p192")T=new R;else if(b==="p25519")T=new $;else throw new Error("Unknown prime "+b);return w[b]=T,T},"prime");function B(L){if(typeof L=="string"){var b=i._prime(L);this.m=b.p,this.prime=b}else r(L.gtn(1),"modulus must be greater than 1"),this.m=L,this.prime=null}a(B,"Red"),B.prototype._verify1=a(function(b){r(b.negative===0,"red works only with positives"),r(b.red,"red works only with red numbers")},"_verify1"),B.prototype._verify2=a(function(b,T){r((b.negative|T.negative)===0,"red works only with positives"),r(b.red&&b.red===T.red,"red works only with red numbers")},"_verify2"),B.prototype.imod=a(function(b){return this.prime?this.prime.ireduce(b)._forceRed(this):b.umod(this.m)._forceRed(this)},"imod"),B.prototype.neg=a(function(b){return b.isZero()?b.clone():this.m.sub(b)._forceRed(this)},"neg"),B.prototype.add=a(function(b,T){this._verify2(b,T);var k=b.add(T);return k.cmp(this.m)>=0&&k.isub(this.m),k._forceRed(this)},"add"),B.prototype.iadd=a(function(b,T){this._verify2(b,T);var k=b.iadd(T);return k.cmp(this.m)>=0&&k.isub(this.m),k},"iadd"),B.prototype.sub=a(function(b,T){this._verify2(b,T);var k=b.sub(T);return k.cmpn(0)<0&&k.iadd(this.m),k._forceRed(this)},"sub"),B.prototype.isub=a(function(b,T){this._verify2(b,T);var k=b.isub(T);return k.cmpn(0)<0&&k.iadd(this.m),k},"isub"),B.prototype.shl=a(function(b,T){return this._verify1(b),this.imod(b.ushln(T))},"shl"),B.prototype.imul=a(function(b,T){return this._verify2(b,T),this.imod(b.imul(T))},"imul"),B.prototype.mul=a(function(b,T){return this._verify2(b,T),this.imod(b.mul(T))},"mul"),B.prototype.isqr=a(function(b){return this.imul(b,b.clone())},"isqr"),B.prototype.sqr=a(function(b){return this.mul(b,b)},"sqr"),B.prototype.sqrt=a(function(b){if(b.isZero())return b.clone();var T=this.m.andln(3);if(r(T%2===1),T===3){var k=this.m.add(new i(1)).iushrn(2);return this.pow(b,k)}for(var S=this.m.subn(1),N=0;!S.isZero()&&S.andln(1)===0;)N++,S.iushrn(1);r(!S.isZero());var P=new i(1).toRed(this),F=P.redNeg(),D=this.m.subn(1).iushrn(1),x=this.m.bitLength();for(x=new i(2*x*x).toRed(this);this.pow(x,D).cmp(F)!==0;)x.redIAdd(F);for(var O=this.pow(x,S),G=this.pow(b,S.addn(1).iushrn(1)),M=this.pow(b,S),J=N;M.cmp(P)!==0;){for(var X=M,Z=0;X.cmp(P)!==0;Z++)X=X.redSqr();r(Z<J);var ae=this.pow(O,new i(1).iushln(J-Z-1));G=G.redMul(ae),O=ae.redSqr(),M=M.redMul(O),J=Z}return G},"sqrt"),B.prototype.invm=a(function(b){var T=b._invmp(this.m);return T.negative!==0?(T.negative=0,this.imod(T).redNeg()):this.imod(T)},"invm"),B.prototype.pow=a(function(b,T){if(T.isZero())return new i(1).toRed(this);if(T.cmpn(1)===0)return b.clone();var k=4,S=new Array(1<<k);S[0]=new i(1).toRed(this),S[1]=b;for(var N=2;N<S.length;N++)S[N]=this.mul(S[N-1],b);var P=S[0],F=0,D=0,x=T.bitLength()%26;for(x===0&&(x=26),N=T.length-1;N>=0;N--){for(var O=T.words[N],G=x-1;G>=0;G--){var M=O>>G&1;if(P!==S[0]&&(P=this.sqr(P)),M===0&&F===0){D=0;continue}F<<=1,F|=M,D++,!(D!==k&&(N!==0||G!==0))&&(P=this.mul(P,S[F]),D=0,F=0)}x=26}return P},"pow"),B.prototype.convertTo=a(function(b){var T=b.umod(this.m);return T===b?T.clone():T},"convertTo"),B.prototype.convertFrom=a(function(b){var T=b.clone();return T.red=null,T},"convertFrom"),i.mont=a(function(b){return new U(b)},"mont");function U(L){B.call(this,L),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new i(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}a(U,"Mont"),n(U,B),U.prototype.convertTo=a(function(b){return this.imod(b.ushln(this.shift))},"convertTo"),U.prototype.convertFrom=a(function(b){var T=this.imod(b.mul(this.rinv));return T.red=null,T},"convertFrom"),U.prototype.imul=a(function(b,T){if(b.isZero()||T.isZero())return b.words[0]=0,b.length=1,b;var k=b.imul(T),S=k.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),N=k.isub(S).iushrn(this.shift),P=N;return N.cmp(this.m)>=0?P=N.isub(this.m):N.cmpn(0)<0&&(P=N.iadd(this.m)),P._forceRed(this)},"imul"),U.prototype.mul=a(function(b,T){if(b.isZero()||T.isZero())return new i(0)._forceRed(this);var k=b.mul(T),S=k.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),N=k.isub(S).iushrn(this.shift),P=N;return N.cmp(this.m)>=0?P=N.isub(this.m):N.cmpn(0)<0&&(P=N.iadd(this.m)),P._forceRed(this)},"mul"),U.prototype.invm=a(function(b){var T=this.imod(b._invmp(this.m).mul(this.r2));return T._forceRed(this)},"invm")})(typeof pX>"u"||pX,FOe)});var t0=v((cFr,qOe)=>{qOe.exports=UOe;function UOe(t,e){if(!t)throw new Error(e||"Assertion failed")}a(UOe,"assert");UOe.equal=a(function(e,r,n){if(e!=r)throw new Error(n||"Assertion failed: "+e+" != "+r)},"assertEqual")});var _X=v($Oe=>{"use strict";var pP=$Oe;function DPt(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if(typeof t!="string"){for(var n=0;n<t.length;n++)r[n]=t[n]|0;return r}if(e==="hex"){t=t.replace(/[^a-z0-9]+/ig,""),t.length%2!==0&&(t="0"+t);for(var n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}else for(var n=0;n<t.length;n++){var i=t.charCodeAt(n),s=i>>8,o=i&255;s?r.push(s,o):r.push(o)}return r}a(DPt,"toArray");pP.toArray=DPt;function HOe(t){return t.length===1?"0"+t:t}a(HOe,"zero2");pP.zero2=HOe;function jOe(t){for(var e="",r=0;r<t.length;r++)e+=HOe(t[r].toString(16));return e}a(jOe,"toHex");pP.toHex=jOe;pP.encode=a(function(e,r){return r==="hex"?jOe(e):e},"encode")});var _c=v(GOe=>{"use strict";var Rl=GOe,BPt=Cl(),MPt=t0(),_P=_X();Rl.assert=MPt;Rl.toArray=_P.toArray;Rl.zero2=_P.zero2;Rl.toHex=_P.toHex;Rl.encode=_P.encode;function FPt(t,e,r){var n=new Array(Math.max(t.bitLength(),r)+1),i;for(i=0;i<n.length;i+=1)n[i]=0;var s=1<<e+1,o=t.clone();for(i=0;i<n.length;i++){var c,u=o.andln(s-1);o.isOdd()?(u>(s>>1)-1?c=(s>>1)-u:c=u,o.isubn(c)):c=0,n[i]=c,o.iushrn(1)}return n}a(FPt,"getNAF");Rl.getNAF=FPt;function UPt(t,e){var r=[[],[]];t=t.clone(),e=e.clone();for(var n=0,i=0,s;t.cmpn(-n)>0||e.cmpn(-i)>0;){var o=t.andln(3)+n&3,c=e.andln(3)+i&3;o===3&&(o=-1),c===3&&(c=-1);var u;(o&1)===0?u=0:(s=t.andln(7)+n&7,(s===3||s===5)&&c===2?u=-o:u=o),r[0].push(u);var l;(c&1)===0?l=0:(s=e.andln(7)+i&7,(s===3||s===5)&&o===2?l=-c:l=c),r[1].push(l),2*n===u+1&&(n=1-n),2*i===l+1&&(i=1-i),t.iushrn(1),e.iushrn(1)}return r}a(UPt,"getJSF");Rl.getJSF=UPt;function qPt(t,e,r){var n="_"+e;t.prototype[e]=a(function(){return this[n]!==void 0?this[n]:this[n]=r.call(this)},"cachedProperty")}a(qPt,"cachedProperty");Rl.cachedProperty=qPt;function HPt(t){return typeof t=="string"?Rl.toArray(t,"hex"):t}a(HPt,"parseBytes");Rl.parseBytes=HPt;function jPt(t){return new BPt(t,"hex","le")}a(jPt,"intFromLE");Rl.intFromLE=jPt});var yX=v((_Fr,gX)=>{var hX;gX.exports=a(function(e){return hX||(hX=new r0(null)),hX.generate(e)},"rand");function r0(t){this.rand=t}a(r0,"Rand");gX.exports.Rand=r0;r0.prototype.generate=a(function(e){return this._rand(e)},"generate");r0.prototype._rand=a(function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var r=new Uint8Array(e),n=0;n<r.length;n++)r[n]=this.rand.getByte();return r},"_rand");if(typeof self=="object")self.crypto&&self.crypto.getRandomValues?r0.prototype._rand=a(function(e){var r=new Uint8Array(e);return self.crypto.getRandomValues(r),r},"_rand"):self.msCrypto&&self.msCrypto.getRandomValues?r0.prototype._rand=a(function(e){var r=new Uint8Array(e);return self.msCrypto.getRandomValues(r),r},"_rand"):typeof window=="object"&&(r0.prototype._rand=function(){throw new Error("Not implemented yet")});else try{if(mX=require("crypto"),typeof mX.randomBytes!="function")throw new Error("Not supported");r0.prototype._rand=a(function(e){return mX.randomBytes(e)},"_rand")}catch{}var mX});var fA=v((mFr,VOe)=>{"use strict";var oy=Cl(),dA=_c(),hP=dA.getNAF,$Pt=dA.getJSF,mP=dA.assert;function n0(t,e){this.type=t,this.p=new oy(e.p,16),this.red=e.prime?oy.red(e.prime):oy.mont(this.p),this.zero=new oy(0).toRed(this.red),this.one=new oy(1).toRed(this.red),this.two=new oy(2).toRed(this.red),this.n=e.n&&new oy(e.n,16),this.g=e.g&&this.pointFromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}a(n0,"BaseCurve");VOe.exports=n0;n0.prototype.point=a(function(){throw new Error("Not implemented")},"point");n0.prototype.validate=a(function(){throw new Error("Not implemented")},"validate");n0.prototype._fixedNafMul=a(function(e,r){mP(e.precomputed);var n=e._getDoubles(),i=hP(r,1,this._bitLength),s=(1<<n.step+1)-(n.step%2===0?2:1);s/=3;var o=[],c,u;for(c=0;c<i.length;c+=n.step){u=0;for(var l=c+n.step-1;l>=c;l--)u=(u<<1)+i[l];o.push(u)}for(var d=this.jpoint(null,null,null),f=this.jpoint(null,null,null),p=s;p>0;p--){for(c=0;c<o.length;c++)u=o[c],u===p?f=f.mixedAdd(n.points[c]):u===-p&&(f=f.mixedAdd(n.points[c].neg()));d=d.add(f)}return d.toP()},"_fixedNafMul");n0.prototype._wnafMul=a(function(e,r){var n=4,i=e._getNAFPoints(n);n=i.wnd;for(var s=i.points,o=hP(r,n,this._bitLength),c=this.jpoint(null,null,null),u=o.length-1;u>=0;u--){for(var l=0;u>=0&&o[u]===0;u--)l++;if(u>=0&&l++,c=c.dblp(l),u<0)break;var d=o[u];mP(d!==0),e.type==="affine"?d>0?c=c.mixedAdd(s[d-1>>1]):c=c.mixedAdd(s[-d-1>>1].neg()):d>0?c=c.add(s[d-1>>1]):c=c.add(s[-d-1>>1].neg())}return e.type==="affine"?c.toP():c},"_wnafMul");n0.prototype._wnafMulAdd=a(function(e,r,n,i,s){var o=this._wnafT1,c=this._wnafT2,u=this._wnafT3,l=0,d,f,p;for(d=0;d<i;d++){p=r[d];var _=p._getNAFPoints(e);o[d]=_.wnd,c[d]=_.points}for(d=i-1;d>=1;d-=2){var h=d-1,m=d;if(o[h]!==1||o[m]!==1){u[h]=hP(n[h],o[h],this._bitLength),u[m]=hP(n[m],o[m],this._bitLength),l=Math.max(u[h].length,l),l=Math.max(u[m].length,l);continue}var g=[r[h],null,null,r[m]];r[h].y.cmp(r[m].y)===0?(g[1]=r[h].add(r[m]),g[2]=r[h].toJ().mixedAdd(r[m].neg())):r[h].y.cmp(r[m].y.redNeg())===0?(g[1]=r[h].toJ().mixedAdd(r[m]),g[2]=r[h].add(r[m].neg())):(g[1]=r[h].toJ().mixedAdd(r[m]),g[2]=r[h].toJ().mixedAdd(r[m].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],w=$Pt(n[h],n[m]);for(l=Math.max(w[0].length,l),u[h]=new Array(l),u[m]=new Array(l),f=0;f<l;f++){var E=w[0][f]|0,A=w[1][f]|0;u[h][f]=y[(E+1)*3+(A+1)],u[m][f]=0,c[h]=g}}var I=this.jpoint(null,null,null),R=this._wnafT4;for(d=l;d>=0;d--){for(var $=0;d>=0;){var B=!0;for(f=0;f<i;f++)R[f]=u[f][d]|0,R[f]!==0&&(B=!1);if(!B)break;$++,d--}if(d>=0&&$++,I=I.dblp($),d<0)break;for(f=0;f<i;f++){var U=R[f];U!==0&&(U>0?p=c[f][U-1>>1]:U<0&&(p=c[f][-U-1>>1].neg()),p.type==="affine"?I=I.mixedAdd(p):I=I.add(p))}}for(d=0;d<i;d++)c[d]=null;return s?I:I.toP()},"_wnafMulAdd");function su(t,e){this.curve=t,this.type=e,this.precomputed=null}a(su,"BasePoint");n0.BasePoint=su;su.prototype.eq=a(function(){throw new Error("Not implemented")},"eq");su.prototype.validate=a(function(){return this.curve.validate(this)},"validate");n0.prototype.decodePoint=a(function(e,r){e=dA.toArray(e,r);var n=this.p.byteLength();if((e[0]===4||e[0]===6||e[0]===7)&&e.length-1===2*n){e[0]===6?mP(e[e.length-1]%2===0):e[0]===7&&mP(e[e.length-1]%2===1);var i=this.point(e.slice(1,1+n),e.slice(1+n,1+2*n));return i}else if((e[0]===2||e[0]===3)&&e.length-1===n)return this.pointFromX(e.slice(1,1+n),e[0]===3);throw new Error("Unknown point format")},"decodePoint");su.prototype.encodeCompressed=a(function(e){return this.encode(e,!0)},"encodeCompressed");su.prototype._encode=a(function(e){var r=this.curve.p.byteLength(),n=this.getX().toArray("be",r);return e?[this.getY().isEven()?2:3].concat(n):[4].concat(n,this.getY().toArray("be",r))},"_encode");su.prototype.encode=a(function(e,r){return dA.encode(this._encode(r),e)},"encode");su.prototype.precompute=a(function(e){if(this.precomputed)return this;var r={doubles:null,naf:null,beta:null};return r.naf=this._getNAFPoints(8),r.doubles=this._getDoubles(4,e),r.beta=this._getBeta(),this.precomputed=r,this},"precompute");su.prototype._hasDoubles=a(function(e){if(!this.precomputed)return!1;var r=this.precomputed.doubles;return r?r.points.length>=Math.ceil((e.bitLength()+1)/r.step):!1},"_hasDoubles");su.prototype._getDoubles=a(function(e,r){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var n=[this],i=this,s=0;s<r;s+=e){for(var o=0;o<e;o++)i=i.dbl();n.push(i)}return{step:e,points:n}},"_getDoubles");su.prototype._getNAFPoints=a(function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var r=[this],n=(1<<e)-1,i=n===1?null:this.dbl(),s=1;s<n;s++)r[s]=r[s-1].add(i);return{wnd:e,points:r}},"_getNAFPoints");su.prototype._getBeta=a(function(){return null},"_getBeta");su.prototype.dblp=a(function(e){for(var r=this,n=0;n<e;n++)r=r.dbl();return r},"dblp")});var zOe=v((yFr,KOe)=>{"use strict";var GPt=_c(),Si=Cl(),vX=op(),a1=fA(),VPt=GPt.assert;function ou(t){a1.call(this,"short",t),this.a=new Si(t.a,16).toRed(this.red),this.b=new Si(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=this.a.fromRed().cmpn(0)===0,this.threeA=this.a.fromRed().sub(this.p).cmpn(-3)===0,this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}a(ou,"ShortCurve");vX(ou,a1);KOe.exports=ou;ou.prototype._getEndomorphism=a(function(e){if(!(!this.zeroA||!this.g||!this.n||this.p.modn(3)!==1)){var r,n;if(e.beta)r=new Si(e.beta,16).toRed(this.red);else{var i=this._getEndoRoots(this.p);r=i[0].cmp(i[1])<0?i[0]:i[1],r=r.toRed(this.red)}if(e.lambda)n=new Si(e.lambda,16);else{var s=this._getEndoRoots(this.n);this.g.mul(s[0]).x.cmp(this.g.x.redMul(r))===0?n=s[0]:(n=s[1],VPt(this.g.mul(n).x.cmp(this.g.x.redMul(r))===0))}var o;return e.basis?o=e.basis.map(function(c){return{a:new Si(c.a,16),b:new Si(c.b,16)}}):o=this._getEndoBasis(n),{beta:r,lambda:n,basis:o}}},"_getEndomorphism");ou.prototype._getEndoRoots=a(function(e){var r=e===this.p?this.red:Si.mont(e),n=new Si(2).toRed(r).redInvm(),i=n.redNeg(),s=new Si(3).toRed(r).redNeg().redSqrt().redMul(n),o=i.redAdd(s).fromRed(),c=i.redSub(s).fromRed();return[o,c]},"_getEndoRoots");ou.prototype._getEndoBasis=a(function(e){for(var r=this.n.ushrn(Math.floor(this.n.bitLength()/2)),n=e,i=this.n.clone(),s=new Si(1),o=new Si(0),c=new Si(0),u=new Si(1),l,d,f,p,_,h,m,g=0,y,w;n.cmpn(0)!==0;){var E=i.div(n);y=i.sub(E.mul(n)),w=c.sub(E.mul(s));var A=u.sub(E.mul(o));if(!f&&y.cmp(r)<0)l=m.neg(),d=s,f=y.neg(),p=w;else if(f&&++g===2)break;m=y,i=n,n=y,c=s,s=w,u=o,o=A}_=y.neg(),h=w;var I=f.sqr().add(p.sqr()),R=_.sqr().add(h.sqr());return R.cmp(I)>=0&&(_=l,h=d),f.negative&&(f=f.neg(),p=p.neg()),_.negative&&(_=_.neg(),h=h.neg()),[{a:f,b:p},{a:_,b:h}]},"_getEndoBasis");ou.prototype._endoSplit=a(function(e){var r=this.endo.basis,n=r[0],i=r[1],s=i.b.mul(e).divRound(this.n),o=n.b.neg().mul(e).divRound(this.n),c=s.mul(n.a),u=o.mul(i.a),l=s.mul(n.b),d=o.mul(i.b),f=e.sub(c).sub(u),p=l.add(d).neg();return{k1:f,k2:p}},"_endoSplit");ou.prototype.pointFromX=a(function(e,r){e=new Si(e,16),e.red||(e=e.toRed(this.red));var n=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),i=n.redSqrt();if(i.redSqr().redSub(n).cmp(this.zero)!==0)throw new Error("invalid point");var s=i.fromRed().isOdd();return(r&&!s||!r&&s)&&(i=i.redNeg()),this.point(e,i)},"pointFromX");ou.prototype.validate=a(function(e){if(e.inf)return!0;var r=e.x,n=e.y,i=this.a.redMul(r),s=r.redSqr().redMul(r).redIAdd(i).redIAdd(this.b);return n.redSqr().redISub(s).cmpn(0)===0},"validate");ou.prototype._endoWnafMulAdd=a(function(e,r,n){for(var i=this._endoWnafT1,s=this._endoWnafT2,o=0;o<e.length;o++){var c=this._endoSplit(r[o]),u=e[o],l=u._getBeta();c.k1.negative&&(c.k1.ineg(),u=u.neg(!0)),c.k2.negative&&(c.k2.ineg(),l=l.neg(!0)),i[o*2]=u,i[o*2+1]=l,s[o*2]=c.k1,s[o*2+1]=c.k2}for(var d=this._wnafMulAdd(1,i,s,o*2,n),f=0;f<o*2;f++)i[f]=null,s[f]=null;return d},"_endoWnafMulAdd");function qa(t,e,r,n){a1.BasePoint.call(this,t,"affine"),e===null&&r===null?(this.x=null,this.y=null,this.inf=!0):(this.x=new Si(e,16),this.y=new Si(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}a(qa,"Point");vX(qa,a1.BasePoint);ou.prototype.point=a(function(e,r,n){return new qa(this,e,r,n)},"point");ou.prototype.pointFromJSON=a(function(e,r){return qa.fromJSON(this,e,r)},"pointFromJSON");qa.prototype._getBeta=a(function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var r=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var n=this.curve,i=a(function(s){return n.point(s.x.redMul(n.endo.beta),s.y)},"endoMul");e.beta=r,r.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(i)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(i)}}}return r}},"_getBeta");qa.prototype.toJSON=a(function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},"toJSON");qa.fromJSON=a(function(e,r,n){typeof r=="string"&&(r=JSON.parse(r));var i=e.point(r[0],r[1],n);if(!r[2])return i;function s(c){return e.point(c[0],c[1],n)}a(s,"obj2point");var o=r[2];return i.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[i].concat(o.doubles.points.map(s))},naf:o.naf&&{wnd:o.naf.wnd,points:[i].concat(o.naf.points.map(s))}},i},"fromJSON");qa.prototype.inspect=a(function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},"inspect");qa.prototype.isInfinity=a(function(){return this.inf},"isInfinity");qa.prototype.add=a(function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(this.x.cmp(e.x)===0)return this.curve.point(null,null);var r=this.y.redSub(e.y);r.cmpn(0)!==0&&(r=r.redMul(this.x.redSub(e.x).redInvm()));var n=r.redSqr().redISub(this.x).redISub(e.x),i=r.redMul(this.x.redSub(n)).redISub(this.y);return this.curve.point(n,i)},"add");qa.prototype.dbl=a(function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(e.cmpn(0)===0)return this.curve.point(null,null);var r=this.curve.a,n=this.x.redSqr(),i=e.redInvm(),s=n.redAdd(n).redIAdd(n).redIAdd(r).redMul(i),o=s.redSqr().redISub(this.x.redAdd(this.x)),c=s.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,c)},"dbl");qa.prototype.getX=a(function(){return this.x.fromRed()},"getX");qa.prototype.getY=a(function(){return this.y.fromRed()},"getY");qa.prototype.mul=a(function(e){return e=new Si(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},"mul");qa.prototype.mulAdd=a(function(e,r,n){var i=[this,r],s=[e,n];return this.curve.endo?this.curve._endoWnafMulAdd(i,s):this.curve._wnafMulAdd(1,i,s,2)},"mulAdd");qa.prototype.jmulAdd=a(function(e,r,n){var i=[this,r],s=[e,n];return this.curve.endo?this.curve._endoWnafMulAdd(i,s,!0):this.curve._wnafMulAdd(1,i,s,2,!0)},"jmulAdd");qa.prototype.eq=a(function(e){return this===e||this.inf===e.inf&&(this.inf||this.x.cmp(e.x)===0&&this.y.cmp(e.y)===0)},"eq");qa.prototype.neg=a(function(e){if(this.inf)return this;var r=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var n=this.precomputed,i=a(function(s){return s.neg()},"negate");r.precomputed={naf:n.naf&&{wnd:n.naf.wnd,points:n.naf.points.map(i)},doubles:n.doubles&&{step:n.doubles.step,points:n.doubles.points.map(i)}}}return r},"neg");qa.prototype.toJ=a(function(){if(this.inf)return this.curve.jpoint(null,null,null);var e=this.curve.jpoint(this.x,this.y,this.curve.one);return e},"toJ");function rs(t,e,r,n){a1.BasePoint.call(this,t,"jacobian"),e===null&&r===null&&n===null?(this.x=this.curve.one,this.y=this.curve.one,this.z=new Si(0)):(this.x=new Si(e,16),this.y=new Si(r,16),this.z=new Si(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}a(rs,"JPoint");vX(rs,a1.BasePoint);ou.prototype.jpoint=a(function(e,r,n){return new rs(this,e,r,n)},"jpoint");rs.prototype.toP=a(function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),r=e.redSqr(),n=this.x.redMul(r),i=this.y.redMul(r).redMul(e);return this.curve.point(n,i)},"toP");rs.prototype.neg=a(function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},"neg");rs.prototype.add=a(function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var r=e.z.redSqr(),n=this.z.redSqr(),i=this.x.redMul(r),s=e.x.redMul(n),o=this.y.redMul(r.redMul(e.z)),c=e.y.redMul(n.redMul(this.z)),u=i.redSub(s),l=o.redSub(c);if(u.cmpn(0)===0)return l.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var d=u.redSqr(),f=d.redMul(u),p=i.redMul(d),_=l.redSqr().redIAdd(f).redISub(p).redISub(p),h=l.redMul(p.redISub(_)).redISub(o.redMul(f)),m=this.z.redMul(e.z).redMul(u);return this.curve.jpoint(_,h,m)},"add");rs.prototype.mixedAdd=a(function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var r=this.z.redSqr(),n=this.x,i=e.x.redMul(r),s=this.y,o=e.y.redMul(r).redMul(this.z),c=n.redSub(i),u=s.redSub(o);if(c.cmpn(0)===0)return u.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var l=c.redSqr(),d=l.redMul(c),f=n.redMul(l),p=u.redSqr().redIAdd(d).redISub(f).redISub(f),_=u.redMul(f.redISub(p)).redISub(s.redMul(d)),h=this.z.redMul(c);return this.curve.jpoint(p,_,h)},"mixedAdd");rs.prototype.dblp=a(function(e){if(e===0)return this;if(this.isInfinity())return this;if(!e)return this.dbl();var r;if(this.curve.zeroA||this.curve.threeA){var n=this;for(r=0;r<e;r++)n=n.dbl();return n}var i=this.curve.a,s=this.curve.tinv,o=this.x,c=this.y,u=this.z,l=u.redSqr().redSqr(),d=c.redAdd(c);for(r=0;r<e;r++){var f=o.redSqr(),p=d.redSqr(),_=p.redSqr(),h=f.redAdd(f).redIAdd(f).redIAdd(i.redMul(l)),m=o.redMul(p),g=h.redSqr().redISub(m.redAdd(m)),y=m.redISub(g),w=h.redMul(y);w=w.redIAdd(w).redISub(_);var E=d.redMul(u);r+1<e&&(l=l.redMul(_)),o=g,u=E,d=w}return this.curve.jpoint(o,d.redMul(s),u)},"dblp");rs.prototype.dbl=a(function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},"dbl");rs.prototype._zeroDbl=a(function(){var e,r,n;if(this.zOne){var i=this.x.redSqr(),s=this.y.redSqr(),o=s.redSqr(),c=this.x.redAdd(s).redSqr().redISub(i).redISub(o);c=c.redIAdd(c);var u=i.redAdd(i).redIAdd(i),l=u.redSqr().redISub(c).redISub(c),d=o.redIAdd(o);d=d.redIAdd(d),d=d.redIAdd(d),e=l,r=u.redMul(c.redISub(l)).redISub(d),n=this.y.redAdd(this.y)}else{var f=this.x.redSqr(),p=this.y.redSqr(),_=p.redSqr(),h=this.x.redAdd(p).redSqr().redISub(f).redISub(_);h=h.redIAdd(h);var m=f.redAdd(f).redIAdd(f),g=m.redSqr(),y=_.redIAdd(_);y=y.redIAdd(y),y=y.redIAdd(y),e=g.redISub(h).redISub(h),r=m.redMul(h.redISub(e)).redISub(y),n=this.y.redMul(this.z),n=n.redIAdd(n)}return this.curve.jpoint(e,r,n)},"_zeroDbl");rs.prototype._threeDbl=a(function(){var e,r,n;if(this.zOne){var i=this.x.redSqr(),s=this.y.redSqr(),o=s.redSqr(),c=this.x.redAdd(s).redSqr().redISub(i).redISub(o);c=c.redIAdd(c);var u=i.redAdd(i).redIAdd(i).redIAdd(this.curve.a),l=u.redSqr().redISub(c).redISub(c);e=l;var d=o.redIAdd(o);d=d.redIAdd(d),d=d.redIAdd(d),r=u.redMul(c.redISub(l)).redISub(d),n=this.y.redAdd(this.y)}else{var f=this.z.redSqr(),p=this.y.redSqr(),_=this.x.redMul(p),h=this.x.redSub(f).redMul(this.x.redAdd(f));h=h.redAdd(h).redIAdd(h);var m=_.redIAdd(_);m=m.redIAdd(m);var g=m.redAdd(m);e=h.redSqr().redISub(g),n=this.y.redAdd(this.z).redSqr().redISub(p).redISub(f);var y=p.redSqr();y=y.redIAdd(y),y=y.redIAdd(y),y=y.redIAdd(y),r=h.redMul(m.redISub(e)).redISub(y)}return this.curve.jpoint(e,r,n)},"_threeDbl");rs.prototype._dbl=a(function(){var e=this.curve.a,r=this.x,n=this.y,i=this.z,s=i.redSqr().redSqr(),o=r.redSqr(),c=n.redSqr(),u=o.redAdd(o).redIAdd(o).redIAdd(e.redMul(s)),l=r.redAdd(r);l=l.redIAdd(l);var d=l.redMul(c),f=u.redSqr().redISub(d.redAdd(d)),p=d.redISub(f),_=c.redSqr();_=_.redIAdd(_),_=_.redIAdd(_),_=_.redIAdd(_);var h=u.redMul(p).redISub(_),m=n.redAdd(n).redMul(i);return this.curve.jpoint(f,h,m)},"_dbl");rs.prototype.trpl=a(function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),r=this.y.redSqr(),n=this.z.redSqr(),i=r.redSqr(),s=e.redAdd(e).redIAdd(e),o=s.redSqr(),c=this.x.redAdd(r).redSqr().redISub(e).redISub(i);c=c.redIAdd(c),c=c.redAdd(c).redIAdd(c),c=c.redISub(o);var u=c.redSqr(),l=i.redIAdd(i);l=l.redIAdd(l),l=l.redIAdd(l),l=l.redIAdd(l);var d=s.redIAdd(c).redSqr().redISub(o).redISub(u).redISub(l),f=r.redMul(d);f=f.redIAdd(f),f=f.redIAdd(f);var p=this.x.redMul(u).redISub(f);p=p.redIAdd(p),p=p.redIAdd(p);var _=this.y.redMul(d.redMul(l.redISub(d)).redISub(c.redMul(u)));_=_.redIAdd(_),_=_.redIAdd(_),_=_.redIAdd(_);var h=this.z.redAdd(c).redSqr().redISub(n).redISub(u);return this.curve.jpoint(p,_,h)},"trpl");rs.prototype.mul=a(function(e,r){return e=new Si(e,r),this.curve._wnafMul(this,e)},"mul");rs.prototype.eq=a(function(e){if(e.type==="affine")return this.eq(e.toJ());if(this===e)return!0;var r=this.z.redSqr(),n=e.z.redSqr();if(this.x.redMul(n).redISub(e.x.redMul(r)).cmpn(0)!==0)return!1;var i=r.redMul(this.z),s=n.redMul(e.z);return this.y.redMul(s).redISub(e.y.redMul(i)).cmpn(0)===0},"eq");rs.prototype.eqXToP=a(function(e){var r=this.z.redSqr(),n=e.toRed(this.curve.red).redMul(r);if(this.x.cmp(n)===0)return!0;for(var i=e.clone(),s=this.curve.redN.redMul(r);;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(n.redIAdd(s),this.x.cmp(n)===0)return!0}},"eqXToP");rs.prototype.inspect=a(function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},"inspect");rs.prototype.isInfinity=a(function(){return this.z.cmpn(0)===0},"isInfinity")});var XOe=v((bFr,WOe)=>{"use strict";var s1=Cl(),JOe=op(),gP=fA(),KPt=_c();function o1(t){gP.call(this,"mont",t),this.a=new s1(t.a,16).toRed(this.red),this.b=new s1(t.b,16).toRed(this.red),this.i4=new s1(4).toRed(this.red).redInvm(),this.two=new s1(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}a(o1,"MontCurve");JOe(o1,gP);WOe.exports=o1;o1.prototype.validate=a(function(e){var r=e.normalize().x,n=r.redSqr(),i=n.redMul(r).redAdd(n.redMul(this.a)).redAdd(r),s=i.redSqrt();return s.redSqr().cmp(i)===0},"validate");function Ha(t,e,r){gP.BasePoint.call(this,t,"projective"),e===null&&r===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new s1(e,16),this.z=new s1(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}a(Ha,"Point");JOe(Ha,gP.BasePoint);o1.prototype.decodePoint=a(function(e,r){return this.point(KPt.toArray(e,r),1)},"decodePoint");o1.prototype.point=a(function(e,r){return new Ha(this,e,r)},"point");o1.prototype.pointFromJSON=a(function(e){return Ha.fromJSON(this,e)},"pointFromJSON");Ha.prototype.precompute=a(function(){},"precompute");Ha.prototype._encode=a(function(){return this.getX().toArray("be",this.curve.p.byteLength())},"_encode");Ha.fromJSON=a(function(e,r){return new Ha(e,r[0],r[1]||e.one)},"fromJSON");Ha.prototype.inspect=a(function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},"inspect");Ha.prototype.isInfinity=a(function(){return this.z.cmpn(0)===0},"isInfinity");Ha.prototype.dbl=a(function(){var e=this.x.redAdd(this.z),r=e.redSqr(),n=this.x.redSub(this.z),i=n.redSqr(),s=r.redSub(i),o=r.redMul(i),c=s.redMul(i.redAdd(this.curve.a24.redMul(s)));return this.curve.point(o,c)},"dbl");Ha.prototype.add=a(function(){throw new Error("Not supported on Montgomery curve")},"add");Ha.prototype.diffAdd=a(function(e,r){var n=this.x.redAdd(this.z),i=this.x.redSub(this.z),s=e.x.redAdd(e.z),o=e.x.redSub(e.z),c=o.redMul(n),u=s.redMul(i),l=r.z.redMul(c.redAdd(u).redSqr()),d=r.x.redMul(c.redISub(u).redSqr());return this.curve.point(l,d)},"diffAdd");Ha.prototype.mul=a(function(e){for(var r=e.clone(),n=this,i=this.curve.point(null,null),s=this,o=[];r.cmpn(0)!==0;r.iushrn(1))o.push(r.andln(1));for(var c=o.length-1;c>=0;c--)o[c]===0?(n=n.diffAdd(i,s),i=i.dbl()):(i=n.diffAdd(i,s),n=n.dbl());return i},"mul");Ha.prototype.mulAdd=a(function(){throw new Error("Not supported on Montgomery curve")},"mulAdd");Ha.prototype.jumlAdd=a(function(){throw new Error("Not supported on Montgomery curve")},"jumlAdd");Ha.prototype.eq=a(function(e){return this.getX().cmp(e.getX())===0},"eq");Ha.prototype.normalize=a(function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},"normalize");Ha.prototype.getX=a(function(){return this.normalize(),this.x.fromRed()},"getX")});var ZOe=v((wFr,YOe)=>{"use strict";var zPt=_c(),Fp=Cl(),QOe=op(),yP=fA(),JPt=zPt.assert;function df(t){this.twisted=(t.a|0)!==1,this.mOneA=this.twisted&&(t.a|0)===-1,this.extended=this.mOneA,yP.call(this,"edwards",t),this.a=new Fp(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new Fp(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new Fp(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),JPt(!this.twisted||this.c.fromRed().cmpn(1)===0),this.oneC=(t.c|0)===1}a(df,"EdwardsCurve");QOe(df,yP);YOe.exports=df;df.prototype._mulA=a(function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},"_mulA");df.prototype._mulC=a(function(e){return this.oneC?e:this.c.redMul(e)},"_mulC");df.prototype.jpoint=a(function(e,r,n,i){return this.point(e,r,n,i)},"jpoint");df.prototype.pointFromX=a(function(e,r){e=new Fp(e,16),e.red||(e=e.toRed(this.red));var n=e.redSqr(),i=this.c2.redSub(this.a.redMul(n)),s=this.one.redSub(this.c2.redMul(this.d).redMul(n)),o=i.redMul(s.redInvm()),c=o.redSqrt();if(c.redSqr().redSub(o).cmp(this.zero)!==0)throw new Error("invalid point");var u=c.fromRed().isOdd();return(r&&!u||!r&&u)&&(c=c.redNeg()),this.point(e,c)},"pointFromX");df.prototype.pointFromY=a(function(e,r){e=new Fp(e,16),e.red||(e=e.toRed(this.red));var n=e.redSqr(),i=n.redSub(this.c2),s=n.redMul(this.d).redMul(this.c2).redSub(this.a),o=i.redMul(s.redInvm());if(o.cmp(this.zero)===0){if(r)throw new Error("invalid point");return this.point(this.zero,e)}var c=o.redSqrt();if(c.redSqr().redSub(o).cmp(this.zero)!==0)throw new Error("invalid point");return c.fromRed().isOdd()!==r&&(c=c.redNeg()),this.point(c,e)},"pointFromY");df.prototype.validate=a(function(e){if(e.isInfinity())return!0;e.normalize();var r=e.x.redSqr(),n=e.y.redSqr(),i=r.redMul(this.a).redAdd(n),s=this.c2.redMul(this.one.redAdd(this.d.redMul(r).redMul(n)));return i.cmp(s)===0},"validate");function vn(t,e,r,n,i){yP.BasePoint.call(this,t,"projective"),e===null&&r===null&&n===null?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new Fp(e,16),this.y=new Fp(r,16),this.z=n?new Fp(n,16):this.curve.one,this.t=i&&new Fp(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}a(vn,"Point");QOe(vn,yP.BasePoint);df.prototype.pointFromJSON=a(function(e){return vn.fromJSON(this,e)},"pointFromJSON");df.prototype.point=a(function(e,r,n,i){return new vn(this,e,r,n,i)},"point");vn.fromJSON=a(function(e,r){return new vn(e,r[0],r[1],r[2])},"fromJSON");vn.prototype.inspect=a(function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},"inspect");vn.prototype.isInfinity=a(function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},"isInfinity");vn.prototype._extDbl=a(function(){var e=this.x.redSqr(),r=this.y.redSqr(),n=this.z.redSqr();n=n.redIAdd(n);var i=this.curve._mulA(e),s=this.x.redAdd(this.y).redSqr().redISub(e).redISub(r),o=i.redAdd(r),c=o.redSub(n),u=i.redSub(r),l=s.redMul(c),d=o.redMul(u),f=s.redMul(u),p=c.redMul(o);return this.curve.point(l,d,p,f)},"_extDbl");vn.prototype._projDbl=a(function(){var e=this.x.redAdd(this.y).redSqr(),r=this.x.redSqr(),n=this.y.redSqr(),i,s,o,c,u,l;if(this.curve.twisted){c=this.curve._mulA(r);var d=c.redAdd(n);this.zOne?(i=e.redSub(r).redSub(n).redMul(d.redSub(this.curve.two)),s=d.redMul(c.redSub(n)),o=d.redSqr().redSub(d).redSub(d)):(u=this.z.redSqr(),l=d.redSub(u).redISub(u),i=e.redSub(r).redISub(n).redMul(l),s=d.redMul(c.redSub(n)),o=d.redMul(l))}else c=r.redAdd(n),u=this.curve._mulC(this.z).redSqr(),l=c.redSub(u).redSub(u),i=this.curve._mulC(e.redISub(c)).redMul(l),s=this.curve._mulC(c).redMul(r.redISub(n)),o=c.redMul(l);return this.curve.point(i,s,o)},"_projDbl");vn.prototype.dbl=a(function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},"dbl");vn.prototype._extAdd=a(function(e){var r=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),n=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),i=this.t.redMul(this.curve.dd).redMul(e.t),s=this.z.redMul(e.z.redAdd(e.z)),o=n.redSub(r),c=s.redSub(i),u=s.redAdd(i),l=n.redAdd(r),d=o.redMul(c),f=u.redMul(l),p=o.redMul(l),_=c.redMul(u);return this.curve.point(d,f,_,p)},"_extAdd");vn.prototype._projAdd=a(function(e){var r=this.z.redMul(e.z),n=r.redSqr(),i=this.x.redMul(e.x),s=this.y.redMul(e.y),o=this.curve.d.redMul(i).redMul(s),c=n.redSub(o),u=n.redAdd(o),l=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(i).redISub(s),d=r.redMul(c).redMul(l),f,p;return this.curve.twisted?(f=r.redMul(u).redMul(s.redSub(this.curve._mulA(i))),p=c.redMul(u)):(f=r.redMul(u).redMul(s.redSub(i)),p=this.curve._mulC(c).redMul(u)),this.curve.point(d,f,p)},"_projAdd");vn.prototype.add=a(function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},"add");vn.prototype.mul=a(function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},"mul");vn.prototype.mulAdd=a(function(e,r,n){return this.curve._wnafMulAdd(1,[this,r],[e,n],2,!1)},"mulAdd");vn.prototype.jmulAdd=a(function(e,r,n){return this.curve._wnafMulAdd(1,[this,r],[e,n],2,!0)},"jmulAdd");vn.prototype.normalize=a(function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},"normalize");vn.prototype.neg=a(function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},"neg");vn.prototype.getX=a(function(){return this.normalize(),this.x.fromRed()},"getX");vn.prototype.getY=a(function(){return this.normalize(),this.y.fromRed()},"getY");vn.prototype.eq=a(function(e){return this===e||this.getX().cmp(e.getX())===0&&this.getY().cmp(e.getY())===0},"eq");vn.prototype.eqXToP=a(function(e){var r=e.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(r)===0)return!0;for(var n=e.clone(),i=this.curve.redN.redMul(this.z);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(i),this.x.cmp(r)===0)return!0}},"eqXToP");vn.prototype.toP=vn.prototype.normalize;vn.prototype.mixedAdd=vn.prototype.add});var bX=v(e4e=>{"use strict";var vP=e4e;vP.base=fA();vP.short=zOe();vP.mont=XOe();vP.edwards=ZOe()});var Pl=v(Zr=>{"use strict";var WPt=t0(),XPt=op();Zr.inherits=XPt;function QPt(t,e){return(t.charCodeAt(e)&64512)!==55296||e<0||e+1>=t.length?!1:(t.charCodeAt(e+1)&64512)===56320}a(QPt,"isSurrogatePair");function YPt(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if(typeof t=="string")if(e){if(e==="hex")for(t=t.replace(/[^a-z0-9]+/ig,""),t.length%2!==0&&(t="0"+t),i=0;i<t.length;i+=2)r.push(parseInt(t[i]+t[i+1],16))}else for(var n=0,i=0;i<t.length;i++){var s=t.charCodeAt(i);s<128?r[n++]=s:s<2048?(r[n++]=s>>6|192,r[n++]=s&63|128):QPt(t,i)?(s=65536+((s&1023)<<10)+(t.charCodeAt(++i)&1023),r[n++]=s>>18|240,r[n++]=s>>12&63|128,r[n++]=s>>6&63|128,r[n++]=s&63|128):(r[n++]=s>>12|224,r[n++]=s>>6&63|128,r[n++]=s&63|128)}else for(i=0;i<t.length;i++)r[i]=t[i]|0;return r}a(YPt,"toArray");Zr.toArray=YPt;function ZPt(t){for(var e="",r=0;r<t.length;r++)e+=r4e(t[r].toString(16));return e}a(ZPt,"toHex");Zr.toHex=ZPt;function t4e(t){var e=t>>>24|t>>>8&65280|t<<8&16711680|(t&255)<<24;return e>>>0}a(t4e,"htonl");Zr.htonl=t4e;function e5t(t,e){for(var r="",n=0;n<t.length;n++){var i=t[n];e==="little"&&(i=t4e(i)),r+=n4e(i.toString(16))}return r}a(e5t,"toHex32");Zr.toHex32=e5t;function r4e(t){return t.length===1?"0"+t:t}a(r4e,"zero2");Zr.zero2=r4e;function n4e(t){return t.length===7?"0"+t:t.length===6?"00"+t:t.length===5?"000"+t:t.length===4?"0000"+t:t.length===3?"00000"+t:t.length===2?"000000"+t:t.length===1?"0000000"+t:t}a(n4e,"zero8");Zr.zero8=n4e;function t5t(t,e,r,n){var i=r-e;WPt(i%4===0);for(var s=new Array(i/4),o=0,c=e;o<s.length;o++,c+=4){var u;n==="big"?u=t[c]<<24|t[c+1]<<16|t[c+2]<<8|t[c+3]:u=t[c+3]<<24|t[c+2]<<16|t[c+1]<<8|t[c],s[o]=u>>>0}return s}a(t5t,"join32");Zr.join32=t5t;function r5t(t,e){for(var r=new Array(t.length*4),n=0,i=0;n<t.length;n++,i+=4){var s=t[n];e==="big"?(r[i]=s>>>24,r[i+1]=s>>>16&255,r[i+2]=s>>>8&255,r[i+3]=s&255):(r[i+3]=s>>>24,r[i+2]=s>>>16&255,r[i+1]=s>>>8&255,r[i]=s&255)}return r}a(r5t,"split32");Zr.split32=r5t;function n5t(t,e){return t>>>e|t<<32-e}a(n5t,"rotr32");Zr.rotr32=n5t;function i5t(t,e){return t<<e|t>>>32-e}a(i5t,"rotl32");Zr.rotl32=i5t;function a5t(t,e){return t+e>>>0}a(a5t,"sum32");Zr.sum32=a5t;function s5t(t,e,r){return t+e+r>>>0}a(s5t,"sum32_3");Zr.sum32_3=s5t;function o5t(t,e,r,n){return t+e+r+n>>>0}a(o5t,"sum32_4");Zr.sum32_4=o5t;function c5t(t,e,r,n,i){return t+e+r+n+i>>>0}a(c5t,"sum32_5");Zr.sum32_5=c5t;function u5t(t,e,r,n){var i=t[e],s=t[e+1],o=n+s>>>0,c=(o<n?1:0)+r+i;t[e]=c>>>0,t[e+1]=o}a(u5t,"sum64");Zr.sum64=u5t;function l5t(t,e,r,n){var i=e+n>>>0,s=(i<e?1:0)+t+r;return s>>>0}a(l5t,"sum64_hi");Zr.sum64_hi=l5t;function d5t(t,e,r,n){var i=e+n;return i>>>0}a(d5t,"sum64_lo");Zr.sum64_lo=d5t;function f5t(t,e,r,n,i,s,o,c){var u=0,l=e;l=l+n>>>0,u+=l<e?1:0,l=l+s>>>0,u+=l<s?1:0,l=l+c>>>0,u+=l<c?1:0;var d=t+r+i+o+u;return d>>>0}a(f5t,"sum64_4_hi");Zr.sum64_4_hi=f5t;function p5t(t,e,r,n,i,s,o,c){var u=e+n+s+c;return u>>>0}a(p5t,"sum64_4_lo");Zr.sum64_4_lo=p5t;function _5t(t,e,r,n,i,s,o,c,u,l){var d=0,f=e;f=f+n>>>0,d+=f<e?1:0,f=f+s>>>0,d+=f<s?1:0,f=f+c>>>0,d+=f<c?1:0,f=f+l>>>0,d+=f<l?1:0;var p=t+r+i+o+u+d;return p>>>0}a(_5t,"sum64_5_hi");Zr.sum64_5_hi=_5t;function h5t(t,e,r,n,i,s,o,c,u,l){var d=e+n+s+c+l;return d>>>0}a(h5t,"sum64_5_lo");Zr.sum64_5_lo=h5t;function m5t(t,e,r){var n=e<<32-r|t>>>r;return n>>>0}a(m5t,"rotr64_hi");Zr.rotr64_hi=m5t;function g5t(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}a(g5t,"rotr64_lo");Zr.rotr64_lo=g5t;function y5t(t,e,r){return t>>>r}a(y5t,"shr64_hi");Zr.shr64_hi=y5t;function v5t(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}a(v5t,"shr64_lo");Zr.shr64_lo=v5t});var c1=v(a4e=>{"use strict";var i4e=Pl(),b5t=t0();function bP(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}a(bP,"BlockHash");a4e.BlockHash=bP;bP.prototype.update=a(function(e,r){if(e=i4e.toArray(e,r),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){e=this.pending;var n=e.length%this._delta8;this.pending=e.slice(e.length-n,e.length),this.pending.length===0&&(this.pending=null),e=i4e.join32(e,0,e.length-n,this.endian);for(var i=0;i<e.length;i+=this._delta32)this._update(e,i,i+this._delta32)}return this},"update");bP.prototype.digest=a(function(e){return this.update(this._pad()),b5t(this.pending===null),this._digest(e)},"digest");bP.prototype._pad=a(function(){var e=this.pendingTotal,r=this._delta8,n=r-(e+this.padLength)%r,i=new Array(n+this.padLength);i[0]=128;for(var s=1;s<n;s++)i[s]=0;if(e<<=3,this.endian==="big"){for(var o=8;o<this.padLength;o++)i[s++]=0;i[s++]=0,i[s++]=0,i[s++]=0,i[s++]=0,i[s++]=e>>>24&255,i[s++]=e>>>16&255,i[s++]=e>>>8&255,i[s++]=e&255}else for(i[s++]=e&255,i[s++]=e>>>8&255,i[s++]=e>>>16&255,i[s++]=e>>>24&255,i[s++]=0,i[s++]=0,i[s++]=0,i[s++]=0,o=8;o<this.padLength;o++)i[s++]=0;return i},"pad")});var xX=v(Up=>{"use strict";var x5t=Pl(),ff=x5t.rotr32;function w5t(t,e,r,n){if(t===0)return s4e(e,r,n);if(t===1||t===3)return c4e(e,r,n);if(t===2)return o4e(e,r,n)}a(w5t,"ft_1");Up.ft_1=w5t;function s4e(t,e,r){return t&e^~t&r}a(s4e,"ch32");Up.ch32=s4e;function o4e(t,e,r){return t&e^t&r^e&r}a(o4e,"maj32");Up.maj32=o4e;function c4e(t,e,r){return t^e^r}a(c4e,"p32");Up.p32=c4e;function E5t(t){return ff(t,2)^ff(t,13)^ff(t,22)}a(E5t,"s0_256");Up.s0_256=E5t;function T5t(t){return ff(t,6)^ff(t,11)^ff(t,25)}a(T5t,"s1_256");Up.s1_256=T5t;function S5t(t){return ff(t,7)^ff(t,18)^t>>>3}a(S5t,"g0_256");Up.g0_256=S5t;function A5t(t){return ff(t,17)^ff(t,19)^t>>>10}a(A5t,"g1_256");Up.g1_256=A5t});var d4e=v((CFr,l4e)=>{"use strict";var u1=Pl(),k5t=c1(),N5t=xX(),wX=u1.rotl32,pA=u1.sum32,O5t=u1.sum32_5,I5t=N5t.ft_1,u4e=k5t.BlockHash,C5t=[1518500249,1859775393,2400959708,3395469782];function pf(){if(!(this instanceof pf))return new pf;u4e.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}a(pf,"SHA1");u1.inherits(pf,u4e);l4e.exports=pf;pf.blockSize=512;pf.outSize=160;pf.hmacStrength=80;pf.padLength=64;pf.prototype._update=a(function(e,r){for(var n=this.W,i=0;i<16;i++)n[i]=e[r+i];for(;i<n.length;i++)n[i]=wX(n[i-3]^n[i-8]^n[i-14]^n[i-16],1);var s=this.h[0],o=this.h[1],c=this.h[2],u=this.h[3],l=this.h[4];for(i=0;i<n.length;i++){var d=~~(i/20),f=O5t(wX(s,5),I5t(d,o,c,u),l,n[i],C5t[d]);l=u,u=c,c=wX(o,30),o=s,s=f}this.h[0]=pA(this.h[0],s),this.h[1]=pA(this.h[1],o),this.h[2]=pA(this.h[2],c),this.h[3]=pA(this.h[3],u),this.h[4]=pA(this.h[4],l)},"_update");pf.prototype._digest=a(function(e){return e==="hex"?u1.toHex32(this.h,"big"):u1.split32(this.h,"big")},"digest")});var EX=v((PFr,p4e)=>{"use strict";var l1=Pl(),R5t=c1(),d1=xX(),P5t=t0(),Ll=l1.sum32,L5t=l1.sum32_4,D5t=l1.sum32_5,B5t=d1.ch32,M5t=d1.maj32,F5t=d1.s0_256,U5t=d1.s1_256,q5t=d1.g0_256,H5t=d1.g1_256,f4e=R5t.BlockHash,j5t=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function _f(){if(!(this instanceof _f))return new _f;f4e.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=j5t,this.W=new Array(64)}a(_f,"SHA256");l1.inherits(_f,f4e);p4e.exports=_f;_f.blockSize=512;_f.outSize=256;_f.hmacStrength=192;_f.padLength=64;_f.prototype._update=a(function(e,r){for(var n=this.W,i=0;i<16;i++)n[i]=e[r+i];for(;i<n.length;i++)n[i]=L5t(H5t(n[i-2]),n[i-7],q5t(n[i-15]),n[i-16]);var s=this.h[0],o=this.h[1],c=this.h[2],u=this.h[3],l=this.h[4],d=this.h[5],f=this.h[6],p=this.h[7];for(P5t(this.k.length===n.length),i=0;i<n.length;i++){var _=D5t(p,U5t(l),B5t(l,d,f),this.k[i],n[i]),h=Ll(F5t(s),M5t(s,o,c));p=f,f=d,d=l,l=Ll(u,_),u=c,c=o,o=s,s=Ll(_,h)}this.h[0]=Ll(this.h[0],s),this.h[1]=Ll(this.h[1],o),this.h[2]=Ll(this.h[2],c),this.h[3]=Ll(this.h[3],u),this.h[4]=Ll(this.h[4],l),this.h[5]=Ll(this.h[5],d),this.h[6]=Ll(this.h[6],f),this.h[7]=Ll(this.h[7],p)},"_update");_f.prototype._digest=a(function(e){return e==="hex"?l1.toHex32(this.h,"big"):l1.split32(this.h,"big")},"digest")});var m4e=v((DFr,h4e)=>{"use strict";var TX=Pl(),_4e=EX();function qp(){if(!(this instanceof qp))return new qp;_4e.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}a(qp,"SHA224");TX.inherits(qp,_4e);h4e.exports=qp;qp.blockSize=512;qp.outSize=224;qp.hmacStrength=192;qp.padLength=64;qp.prototype._digest=a(function(e){return e==="hex"?TX.toHex32(this.h.slice(0,7),"big"):TX.split32(this.h.slice(0,7),"big")},"digest")});var kX=v((MFr,b4e)=>{"use strict";var Fo=Pl(),$5t=c1(),G5t=t0(),hf=Fo.rotr64_hi,mf=Fo.rotr64_lo,g4e=Fo.shr64_hi,y4e=Fo.shr64_lo,i0=Fo.sum64,SX=Fo.sum64_hi,AX=Fo.sum64_lo,V5t=Fo.sum64_4_hi,K5t=Fo.sum64_4_lo,z5t=Fo.sum64_5_hi,J5t=Fo.sum64_5_lo,v4e=$5t.BlockHash,W5t=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function Dl(){if(!(this instanceof Dl))return new Dl;v4e.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=W5t,this.W=new Array(160)}a(Dl,"SHA512");Fo.inherits(Dl,v4e);b4e.exports=Dl;Dl.blockSize=1024;Dl.outSize=512;Dl.hmacStrength=192;Dl.padLength=128;Dl.prototype._prepareBlock=a(function(e,r){for(var n=this.W,i=0;i<32;i++)n[i]=e[r+i];for(;i<n.length;i+=2){var s=sLt(n[i-4],n[i-3]),o=oLt(n[i-4],n[i-3]),c=n[i-14],u=n[i-13],l=iLt(n[i-30],n[i-29]),d=aLt(n[i-30],n[i-29]),f=n[i-32],p=n[i-31];n[i]=V5t(s,o,c,u,l,d,f,p),n[i+1]=K5t(s,o,c,u,l,d,f,p)}},"_prepareBlock");Dl.prototype._update=a(function(e,r){this._prepareBlock(e,r);var n=this.W,i=this.h[0],s=this.h[1],o=this.h[2],c=this.h[3],u=this.h[4],l=this.h[5],d=this.h[6],f=this.h[7],p=this.h[8],_=this.h[9],h=this.h[10],m=this.h[11],g=this.h[12],y=this.h[13],w=this.h[14],E=this.h[15];G5t(this.k.length===n.length);for(var A=0;A<n.length;A+=2){var I=w,R=E,$=rLt(p,_),B=nLt(p,_),U=X5t(p,_,h,m,g,y),L=Q5t(p,_,h,m,g,y),b=this.k[A],T=this.k[A+1],k=n[A],S=n[A+1],N=z5t(I,R,$,B,U,L,b,T,k,S),P=J5t(I,R,$,B,U,L,b,T,k,S);I=eLt(i,s),R=tLt(i,s),$=Y5t(i,s,o,c,u,l),B=Z5t(i,s,o,c,u,l);var F=SX(I,R,$,B),D=AX(I,R,$,B);w=g,E=y,g=h,y=m,h=p,m=_,p=SX(d,f,N,P),_=AX(f,f,N,P),d=u,f=l,u=o,l=c,o=i,c=s,i=SX(N,P,F,D),s=AX(N,P,F,D)}i0(this.h,0,i,s),i0(this.h,2,o,c),i0(this.h,4,u,l),i0(this.h,6,d,f),i0(this.h,8,p,_),i0(this.h,10,h,m),i0(this.h,12,g,y),i0(this.h,14,w,E)},"_update");Dl.prototype._digest=a(function(e){return e==="hex"?Fo.toHex32(this.h,"big"):Fo.split32(this.h,"big")},"digest");function X5t(t,e,r,n,i){var s=t&r^~t&i;return s<0&&(s+=4294967296),s}a(X5t,"ch64_hi");function Q5t(t,e,r,n,i,s){var o=e&n^~e&s;return o<0&&(o+=4294967296),o}a(Q5t,"ch64_lo");function Y5t(t,e,r,n,i){var s=t&r^t&i^r&i;return s<0&&(s+=4294967296),s}a(Y5t,"maj64_hi");function Z5t(t,e,r,n,i,s){var o=e&n^e&s^n&s;return o<0&&(o+=4294967296),o}a(Z5t,"maj64_lo");function eLt(t,e){var r=hf(t,e,28),n=hf(e,t,2),i=hf(e,t,7),s=r^n^i;return s<0&&(s+=4294967296),s}a(eLt,"s0_512_hi");function tLt(t,e){var r=mf(t,e,28),n=mf(e,t,2),i=mf(e,t,7),s=r^n^i;return s<0&&(s+=4294967296),s}a(tLt,"s0_512_lo");function rLt(t,e){var r=hf(t,e,14),n=hf(t,e,18),i=hf(e,t,9),s=r^n^i;return s<0&&(s+=4294967296),s}a(rLt,"s1_512_hi");function nLt(t,e){var r=mf(t,e,14),n=mf(t,e,18),i=mf(e,t,9),s=r^n^i;return s<0&&(s+=4294967296),s}a(nLt,"s1_512_lo");function iLt(t,e){var r=hf(t,e,1),n=hf(t,e,8),i=g4e(t,e,7),s=r^n^i;return s<0&&(s+=4294967296),s}a(iLt,"g0_512_hi");function aLt(t,e){var r=mf(t,e,1),n=mf(t,e,8),i=y4e(t,e,7),s=r^n^i;return s<0&&(s+=4294967296),s}a(aLt,"g0_512_lo");function sLt(t,e){var r=hf(t,e,19),n=hf(e,t,29),i=g4e(t,e,6),s=r^n^i;return s<0&&(s+=4294967296),s}a(sLt,"g1_512_hi");function oLt(t,e){var r=mf(t,e,19),n=mf(e,t,29),i=y4e(t,e,6),s=r^n^i;return s<0&&(s+=4294967296),s}a(oLt,"g1_512_lo")});var E4e=v((UFr,w4e)=>{"use strict";var NX=Pl(),x4e=kX();function Hp(){if(!(this instanceof Hp))return new Hp;x4e.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}a(Hp,"SHA384");NX.inherits(Hp,x4e);w4e.exports=Hp;Hp.blockSize=1024;Hp.outSize=384;Hp.hmacStrength=192;Hp.padLength=128;Hp.prototype._digest=a(function(e){return e==="hex"?NX.toHex32(this.h.slice(0,12),"big"):NX.split32(this.h.slice(0,12),"big")},"digest")});var T4e=v(f1=>{"use strict";f1.sha1=d4e();f1.sha224=m4e();f1.sha256=EX();f1.sha384=E4e();f1.sha512=kX()});var I4e=v(O4e=>{"use strict";var cy=Pl(),cLt=c1(),xP=cy.rotl32,S4e=cy.sum32,_A=cy.sum32_3,A4e=cy.sum32_4,N4e=cLt.BlockHash;function gf(){if(!(this instanceof gf))return new gf;N4e.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}a(gf,"RIPEMD160");cy.inherits(gf,N4e);O4e.ripemd160=gf;gf.blockSize=512;gf.outSize=160;gf.hmacStrength=192;gf.padLength=64;gf.prototype._update=a(function(e,r){for(var n=this.h[0],i=this.h[1],s=this.h[2],o=this.h[3],c=this.h[4],u=n,l=i,d=s,f=o,p=c,_=0;_<80;_++){var h=S4e(xP(A4e(n,k4e(_,i,s,o),e[dLt[_]+r],uLt(_)),pLt[_]),c);n=c,c=o,o=xP(s,10),s=i,i=h,h=S4e(xP(A4e(u,k4e(79-_,l,d,f),e[fLt[_]+r],lLt(_)),_Lt[_]),p),u=p,p=f,f=xP(d,10),d=l,l=h}h=_A(this.h[1],s,f),this.h[1]=_A(this.h[2],o,p),this.h[2]=_A(this.h[3],c,u),this.h[3]=_A(this.h[4],n,l),this.h[4]=_A(this.h[0],i,d),this.h[0]=h},"update");gf.prototype._digest=a(function(e){return e==="hex"?cy.toHex32(this.h,"little"):cy.split32(this.h,"little")},"digest");function k4e(t,e,r,n){return t<=15?e^r^n:t<=31?e&r|~e&n:t<=47?(e|~r)^n:t<=63?e&n|r&~n:e^(r|~n)}a(k4e,"f");function uLt(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}a(uLt,"K");function lLt(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}a(lLt,"Kh");var dLt=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],fLt=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],pLt=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],_Lt=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]});var R4e=v((GFr,C4e)=>{"use strict";var hLt=Pl(),mLt=t0();function p1(t,e,r){if(!(this instanceof p1))return new p1(t,e,r);this.Hash=t,this.blockSize=t.blockSize/8,this.outSize=t.outSize/8,this.inner=null,this.outer=null,this._init(hLt.toArray(e,r))}a(p1,"Hmac");C4e.exports=p1;p1.prototype._init=a(function(e){e.length>this.blockSize&&(e=new this.Hash().update(e).digest()),mLt(e.length<=this.blockSize);for(var r=e.length;r<this.blockSize;r++)e.push(0);for(r=0;r<e.length;r++)e[r]^=54;for(this.inner=new this.Hash().update(e),r=0;r<e.length;r++)e[r]^=106;this.outer=new this.Hash().update(e)},"init");p1.prototype.update=a(function(e,r){return this.inner.update(e,r),this},"update");p1.prototype.digest=a(function(e){return this.outer.update(this.inner.digest()),this.outer.digest(e)},"digest")});var wP=v(P4e=>{var ns=P4e;ns.utils=Pl();ns.common=c1();ns.sha=T4e();ns.ripemd=I4e();ns.hmac=R4e();ns.sha1=ns.sha.sha1;ns.sha256=ns.sha.sha256;ns.sha224=ns.sha.sha224;ns.sha384=ns.sha.sha384;ns.sha512=ns.sha.sha512;ns.ripemd160=ns.ripemd.ripemd160});var D4e=v((zFr,L4e)=>{L4e.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}});var EP=v(F4e=>{"use strict";var IX=F4e,a0=wP(),OX=bX(),gLt=_c(),B4e=gLt.assert;function M4e(t){t.type==="short"?this.curve=new OX.short(t):t.type==="edwards"?this.curve=new OX.edwards(t):this.curve=new OX.mont(t),this.g=this.curve.g,this.n=this.curve.n,this.hash=t.hash,B4e(this.g.validate(),"Invalid curve"),B4e(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}a(M4e,"PresetCurve");IX.PresetCurve=M4e;function s0(t,e){Object.defineProperty(IX,t,{configurable:!0,enumerable:!0,get:a(function(){var r=new M4e(e);return Object.defineProperty(IX,t,{configurable:!0,enumerable:!0,value:r}),r},"get")})}a(s0,"defineCurve");s0("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:a0.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]});s0("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:a0.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]});s0("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:a0.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]});s0("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:a0.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]});s0("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:a0.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]});s0("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a0.sha256,gRed:!1,g:["9"]});s0("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a0.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var CX;try{CX=D4e()}catch{CX=void 0}s0("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:a0.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",CX]})});var H4e=v((XFr,q4e)=>{"use strict";var yLt=wP(),uy=_X(),U4e=t0();function o0(t){if(!(this instanceof o0))return new o0(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=uy.toArray(t.entropy,t.entropyEnc||"hex"),r=uy.toArray(t.nonce,t.nonceEnc||"hex"),n=uy.toArray(t.pers,t.persEnc||"hex");U4e(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,n)}a(o0,"HmacDRBG");q4e.exports=o0;o0.prototype._init=a(function(e,r,n){var i=e.concat(r).concat(n);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var s=0;s<this.V.length;s++)this.K[s]=0,this.V[s]=1;this._update(i),this._reseed=1,this.reseedInterval=281474976710656},"init");o0.prototype._hmac=a(function(){return new yLt.hmac(this.hash,this.K)},"hmac");o0.prototype._update=a(function(e){var r=this._hmac().update(this.V).update([0]);e&&(r=r.update(e)),this.K=r.digest(),this.V=this._hmac().update(this.V).digest(),e&&(this.K=this._hmac().update(this.V).update([1]).update(e).digest(),this.V=this._hmac().update(this.V).digest())},"update");o0.prototype.reseed=a(function(e,r,n,i){typeof r!="string"&&(i=n,n=r,r=null),e=uy.toArray(e,r),n=uy.toArray(n,i),U4e(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(n||[])),this._reseed=1},"reseed");o0.prototype.generate=a(function(e,r,n,i){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof r!="string"&&(i=n,n=r,r=null),n&&(n=uy.toArray(n,i||"hex"),this._update(n));for(var s=[];s.length<e;)this.V=this._hmac().update(this.V).digest(),s=s.concat(this.V);var o=s.slice(0,e);return this._update(n),this._reseed++,uy.encode(o,r)},"generate")});var $4e=v((YFr,j4e)=>{"use strict";var vLt=Cl(),bLt=_c(),RX=bLt.assert;function vs(t,e){this.ec=t,this.priv=null,this.pub=null,e.priv&&this._importPrivate(e.priv,e.privEnc),e.pub&&this._importPublic(e.pub,e.pubEnc)}a(vs,"KeyPair");j4e.exports=vs;vs.fromPublic=a(function(e,r,n){return r instanceof vs?r:new vs(e,{pub:r,pubEnc:n})},"fromPublic");vs.fromPrivate=a(function(e,r,n){return r instanceof vs?r:new vs(e,{priv:r,privEnc:n})},"fromPrivate");vs.prototype.validate=a(function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},"validate");vs.prototype.getPublic=a(function(e,r){return typeof e=="string"&&(r=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),r?this.pub.encode(r,e):this.pub},"getPublic");vs.prototype.getPrivate=a(function(e){return e==="hex"?this.priv.toString(16,2):this.priv},"getPrivate");vs.prototype._importPrivate=a(function(e,r){this.priv=new vLt(e,r||16),this.priv=this.priv.umod(this.ec.curve.n)},"_importPrivate");vs.prototype._importPublic=a(function(e,r){if(e.x||e.y){this.ec.curve.type==="mont"?RX(e.x,"Need x coordinate"):(this.ec.curve.type==="short"||this.ec.curve.type==="edwards")&&RX(e.x&&e.y,"Need both x and y coordinate"),this.pub=this.ec.curve.point(e.x,e.y);return}this.pub=this.ec.curve.decodePoint(e,r)},"_importPublic");vs.prototype.derive=a(function(e){return e.validate()||RX(e.validate(),"public point not validated"),e.mul(this.priv).getX()},"derive");vs.prototype.sign=a(function(e,r,n){return this.ec.sign(e,this,r,n)},"sign");vs.prototype.verify=a(function(e,r,n){return this.ec.verify(e,r,this,void 0,n)},"verify");vs.prototype.inspect=a(function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"},"inspect")});var K4e=v((eUr,V4e)=>{"use strict";var TP=Cl(),DX=_c(),xLt=DX.assert;function SP(t,e){if(t instanceof SP)return t;this._importDER(t,e)||(xLt(t.r&&t.s,"Signature without r or s"),this.r=new TP(t.r,16),this.s=new TP(t.s,16),t.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}a(SP,"Signature");V4e.exports=SP;function wLt(){this.place=0}a(wLt,"Position");function PX(t,e){var r=t[e.place++];if(!(r&128))return r;var n=r&15;if(n===0||n>4||t[e.place]===0)return!1;for(var i=0,s=0,o=e.place;s<n;s++,o++)i<<=8,i|=t[o],i>>>=0;return i<=127?!1:(e.place=o,i)}a(PX,"getLength");function G4e(t){for(var e=0,r=t.length-1;!t[e]&&!(t[e+1]&128)&&e<r;)e++;return e===0?t:t.slice(e)}a(G4e,"rmPadding");SP.prototype._importDER=a(function(e,r){e=DX.toArray(e,r);var n=new wLt;if(e[n.place++]!==48)return!1;var i=PX(e,n);if(i===!1||i+n.place!==e.length||e[n.place++]!==2)return!1;var s=PX(e,n);if(s===!1||(e[n.place]&128)!==0)return!1;var o=e.slice(n.place,s+n.place);if(n.place+=s,e[n.place++]!==2)return!1;var c=PX(e,n);if(c===!1||e.length!==c+n.place||(e[n.place]&128)!==0)return!1;var u=e.slice(n.place,c+n.place);if(o[0]===0)if(o[1]&128)o=o.slice(1);else return!1;if(u[0]===0)if(u[1]&128)u=u.slice(1);else return!1;return this.r=new TP(o),this.s=new TP(u),this.recoveryParam=null,!0},"_importDER");function LX(t,e){if(e<128){t.push(e);return}var r=1+(Math.log(e)/Math.LN2>>>3);for(t.push(r|128);--r;)t.push(e>>>(r<<3)&255);t.push(e)}a(LX,"constructLength");SP.prototype.toDER=a(function(e){var r=this.r.toArray(),n=this.s.toArray();for(r[0]&128&&(r=[0].concat(r)),n[0]&128&&(n=[0].concat(n)),r=G4e(r),n=G4e(n);!n[0]&&!(n[1]&128);)n=n.slice(1);var i=[2];LX(i,r.length),i=i.concat(r),i.push(2),LX(i,n.length);var s=i.concat(n),o=[48];return LX(o,s.length),o=o.concat(s),DX.encode(o,e)},"toDER")});var W4e=v((rUr,J4e)=>{"use strict";var Bl=Cl(),z4e=H4e(),ELt=_c(),BX=EP(),TLt=yX(),ly=ELt.assert,MX=$4e(),AP=K4e();function cu(t){if(!(this instanceof cu))return new cu(t);typeof t=="string"&&(ly(Object.prototype.hasOwnProperty.call(BX,t),"Unknown curve "+t),t=BX[t]),t instanceof BX.PresetCurve&&(t={curve:t}),this.curve=t.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=t.curve.g,this.g.precompute(t.curve.n.bitLength()+1),this.hash=t.hash||t.curve.hash}a(cu,"EC");J4e.exports=cu;cu.prototype.keyPair=a(function(e){return new MX(this,e)},"keyPair");cu.prototype.keyFromPrivate=a(function(e,r){return MX.fromPrivate(this,e,r)},"keyFromPrivate");cu.prototype.keyFromPublic=a(function(e,r){return MX.fromPublic(this,e,r)},"keyFromPublic");cu.prototype.genKeyPair=a(function(e){e||(e={});for(var r=new z4e({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||TLt(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),n=this.n.byteLength(),i=this.n.sub(new Bl(2));;){var s=new Bl(r.generate(n));if(!(s.cmp(i)>0))return s.iaddn(1),this.keyFromPrivate(s)}},"genKeyPair");cu.prototype._truncateToN=a(function(e,r,n){var i;if(Bl.isBN(e)||typeof e=="number")e=new Bl(e,16),i=e.byteLength();else if(typeof e=="object")i=e.length,e=new Bl(e,16);else{var s=e.toString();i=s.length+1>>>1,e=new Bl(s,16)}typeof n!="number"&&(n=i*8);var o=n-this.n.bitLength();return o>0&&(e=e.ushrn(o)),!r&&e.cmp(this.n)>=0?e.sub(this.n):e},"_truncateToN");cu.prototype.sign=a(function(e,r,n,i){if(typeof n=="object"&&(i=n,n=null),i||(i={}),typeof e!="string"&&typeof e!="number"&&!Bl.isBN(e)){ly(typeof e=="object"&&e&&typeof e.length=="number","Expected message to be an array-like, a hex string, or a BN instance"),ly(e.length>>>0===e.length);for(var s=0;s<e.length;s++)ly((e[s]&255)===e[s])}r=this.keyFromPrivate(r,n),e=this._truncateToN(e,!1,i.msgBitLength),ly(!e.isNeg(),"Can not sign a negative message");var o=this.n.byteLength(),c=r.getPrivate().toArray("be",o),u=e.toArray("be",o);ly(new Bl(u).eq(e),"Can not sign message");for(var l=new z4e({hash:this.hash,entropy:c,nonce:u,pers:i.pers,persEnc:i.persEnc||"utf8"}),d=this.n.sub(new Bl(1)),f=0;;f++){var p=i.k?i.k(f):new Bl(l.generate(this.n.byteLength()));if(p=this._truncateToN(p,!0),!(p.cmpn(1)<=0||p.cmp(d)>=0)){var _=this.g.mul(p);if(!_.isInfinity()){var h=_.getX(),m=h.umod(this.n);if(m.cmpn(0)!==0){var g=p.invm(this.n).mul(m.mul(r.getPrivate()).iadd(e));if(g=g.umod(this.n),g.cmpn(0)!==0){var y=(_.getY().isOdd()?1:0)|(h.cmp(m)!==0?2:0);return i.canonical&&g.cmp(this.nh)>0&&(g=this.n.sub(g),y^=1),new AP({r:m,s:g,recoveryParam:y})}}}}}},"sign");cu.prototype.verify=a(function(e,r,n,i,s){s||(s={}),e=this._truncateToN(e,!1,s.msgBitLength),n=this.keyFromPublic(n,i),r=new AP(r,"hex");var o=r.r,c=r.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0||c.cmpn(1)<0||c.cmp(this.n)>=0)return!1;var u=c.invm(this.n),l=u.mul(e).umod(this.n),d=u.mul(o).umod(this.n),f;return this.curve._maxwellTrick?(f=this.g.jmulAdd(l,n.getPublic(),d),f.isInfinity()?!1:f.eqXToP(o)):(f=this.g.mulAdd(l,n.getPublic(),d),f.isInfinity()?!1:f.getX().umod(this.n).cmp(o)===0)},"verify");cu.prototype.recoverPubKey=function(t,e,r,n){ly((3&r)===r,"The recovery param is more than two bits"),e=new AP(e,n);var i=this.n,s=new Bl(t),o=e.r,c=e.s,u=r&1,l=r>>1;if(o.cmp(this.curve.p.umod(this.curve.n))>=0&&l)throw new Error("Unable to find sencond key candinate");l?o=this.curve.pointFromX(o.add(this.curve.n),u):o=this.curve.pointFromX(o,u);var d=e.r.invm(i),f=i.sub(s).mul(d).umod(i),p=c.mul(d).umod(i);return this.g.mulAdd(f,o,p)};cu.prototype.getKeyRecoveryParam=function(t,e,r,n){if(e=new AP(e,n),e.recoveryParam!==null)return e.recoveryParam;for(var i=0;i<4;i++){var s;try{s=this.recoverPubKey(t,e,i)}catch{continue}if(s.eq(r))return i}throw new Error("Unable to find valid recovery factor")}});var Z4e=v((iUr,Y4e)=>{"use strict";var hA=_c(),Q4e=hA.assert,X4e=hA.parseBytes,_1=hA.cachedProperty;function ja(t,e){this.eddsa=t,this._secret=X4e(e.secret),t.isPoint(e.pub)?this._pub=e.pub:this._pubBytes=X4e(e.pub)}a(ja,"KeyPair");ja.fromPublic=a(function(e,r){return r instanceof ja?r:new ja(e,{pub:r})},"fromPublic");ja.fromSecret=a(function(e,r){return r instanceof ja?r:new ja(e,{secret:r})},"fromSecret");ja.prototype.secret=a(function(){return this._secret},"secret");_1(ja,"pubBytes",a(function(){return this.eddsa.encodePoint(this.pub())},"pubBytes"));_1(ja,"pub",a(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())},"pub"));_1(ja,"privBytes",a(function(){var e=this.eddsa,r=this.hash(),n=e.encodingLength-1,i=r.slice(0,e.encodingLength);return i[0]&=248,i[n]&=127,i[n]|=64,i},"privBytes"));_1(ja,"priv",a(function(){return this.eddsa.decodeInt(this.privBytes())},"priv"));_1(ja,"hash",a(function(){return this.eddsa.hash().update(this.secret()).digest()},"hash"));_1(ja,"messagePrefix",a(function(){return this.hash().slice(this.eddsa.encodingLength)},"messagePrefix"));ja.prototype.sign=a(function(e){return Q4e(this._secret,"KeyPair can only verify"),this.eddsa.sign(e,this)},"sign");ja.prototype.verify=a(function(e,r){return this.eddsa.verify(e,r,this)},"verify");ja.prototype.getSecret=a(function(e){return Q4e(this._secret,"KeyPair is public only"),hA.encode(this.secret(),e)},"getSecret");ja.prototype.getPublic=a(function(e){return hA.encode(this.pubBytes(),e)},"getPublic");Y4e.exports=ja});var rIe=v((sUr,tIe)=>{"use strict";var SLt=Cl(),kP=_c(),eIe=kP.assert,NP=kP.cachedProperty,ALt=kP.parseBytes;function dy(t,e){this.eddsa=t,typeof e!="object"&&(e=ALt(e)),Array.isArray(e)&&(eIe(e.length===t.encodingLength*2,"Signature has invalid size"),e={R:e.slice(0,t.encodingLength),S:e.slice(t.encodingLength)}),eIe(e.R&&e.S,"Signature without R or S"),t.isPoint(e.R)&&(this._R=e.R),e.S instanceof SLt&&(this._S=e.S),this._Rencoded=Array.isArray(e.R)?e.R:e.Rencoded,this._Sencoded=Array.isArray(e.S)?e.S:e.Sencoded}a(dy,"Signature");NP(dy,"S",a(function(){return this.eddsa.decodeInt(this.Sencoded())},"S"));NP(dy,"R",a(function(){return this.eddsa.decodePoint(this.Rencoded())},"R"));NP(dy,"Rencoded",a(function(){return this.eddsa.encodePoint(this.R())},"Rencoded"));NP(dy,"Sencoded",a(function(){return this.eddsa.encodeInt(this.S())},"Sencoded"));dy.prototype.toBytes=a(function(){return this.Rencoded().concat(this.Sencoded())},"toBytes");dy.prototype.toHex=a(function(){return kP.encode(this.toBytes(),"hex").toUpperCase()},"toHex");tIe.exports=dy});var oIe=v((cUr,sIe)=>{"use strict";var kLt=wP(),NLt=EP(),h1=_c(),OLt=h1.assert,iIe=h1.parseBytes,aIe=Z4e(),nIe=rIe();function Uo(t){if(OLt(t==="ed25519","only tested with ed25519 so far"),!(this instanceof Uo))return new Uo(t);t=NLt[t].curve,this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=kLt.sha512}a(Uo,"EDDSA");sIe.exports=Uo;Uo.prototype.sign=a(function(e,r){e=iIe(e);var n=this.keyFromSecret(r),i=this.hashInt(n.messagePrefix(),e),s=this.g.mul(i),o=this.encodePoint(s),c=this.hashInt(o,n.pubBytes(),e).mul(n.priv()),u=i.add(c).umod(this.curve.n);return this.makeSignature({R:s,S:u,Rencoded:o})},"sign");Uo.prototype.verify=a(function(e,r,n){if(e=iIe(e),r=this.makeSignature(r),r.S().gte(r.eddsa.curve.n)||r.S().isNeg())return!1;var i=this.keyFromPublic(n),s=this.hashInt(r.Rencoded(),i.pubBytes(),e),o=this.g.mul(r.S()),c=r.R().add(i.pub().mul(s));return c.eq(o)},"verify");Uo.prototype.hashInt=a(function(){for(var e=this.hash(),r=0;r<arguments.length;r++)e.update(arguments[r]);return h1.intFromLE(e.digest()).umod(this.curve.n)},"hashInt");Uo.prototype.keyFromPublic=a(function(e){return aIe.fromPublic(this,e)},"keyFromPublic");Uo.prototype.keyFromSecret=a(function(e){return aIe.fromSecret(this,e)},"keyFromSecret");Uo.prototype.makeSignature=a(function(e){return e instanceof nIe?e:new nIe(this,e)},"makeSignature");Uo.prototype.encodePoint=a(function(e){var r=e.getY().toArray("le",this.encodingLength);return r[this.encodingLength-1]|=e.getX().isOdd()?128:0,r},"encodePoint");Uo.prototype.decodePoint=a(function(e){e=h1.parseBytes(e);var r=e.length-1,n=e.slice(0,r).concat(e[r]&-129),i=(e[r]&128)!==0,s=h1.intFromLE(n);return this.curve.pointFromY(s,i)},"decodePoint");Uo.prototype.encodeInt=a(function(e){return e.toArray("le",this.encodingLength)},"encodeInt");Uo.prototype.decodeInt=a(function(e){return h1.intFromLE(e)},"decodeInt");Uo.prototype.isPoint=a(function(e){return e instanceof this.pointClass},"isPoint")});var FX=v(cIe=>{"use strict";var fy=cIe;fy.version=MOe().version;fy.utils=_c();fy.rand=yX();fy.curve=bX();fy.curves=EP();fy.ec=W4e();fy.eddsa=oIe()});var lIe=v((dUr,uIe)=>{var ILt=FX().ec,yf=new ILt("secp256k1"),Qt=yf.curve,en=Qt.n.constructor;function CLt(t,e){let r=new en(e);if(r.cmp(Qt.p)>=0)return null;r=r.toRed(Qt.red);let n=r.redSqr().redIMul(r).redIAdd(Qt.b).redSqrt();t===3!==n.isOdd()&&(n=n.redNeg());let i=r.redSqr().redIMul(r);return n.redSqr().redISub(i.redIAdd(Qt.b)).isZero()?yf.keyPair({pub:{x:r,y:n}}):null}a(CLt,"loadCompressedPublicKey");function RLt(t,e,r){let n=new en(e),i=new en(r);if(n.cmp(Qt.p)>=0||i.cmp(Qt.p)>=0||(n=n.toRed(Qt.red),i=i.toRed(Qt.red),(t===6||t===7)&&i.isOdd()!==(t===7)))return null;let s=n.redSqr().redIMul(n);return i.redSqr().redISub(s.redIAdd(Qt.b)).isZero()?yf.keyPair({pub:{x:n,y:i}}):null}a(RLt,"loadUncompressedPublicKey");function c0(t){let e=t[0];switch(e){case 2:case 3:return t.length!==33?null:CLt(e,t.subarray(1,33));case 4:case 6:case 7:return t.length!==65?null:RLt(e,t.subarray(1,33),t.subarray(33,65));default:return null}}a(c0,"loadPublicKey");function py(t,e){let r=e.encode(null,t.length===33);for(let n=0;n<t.length;++n)t[n]=r[n]}a(py,"savePublicKey");uIe.exports={contextRandomize(){return 0},privateKeyVerify(t){let e=new en(t);return e.cmp(Qt.n)<0&&!e.isZero()?0:1},privateKeyNegate(t){let e=new en(t),r=Qt.n.sub(e).umod(Qt.n).toArrayLike(Uint8Array,"be",32);return t.set(r),0},privateKeyTweakAdd(t,e){let r=new en(e);if(r.cmp(Qt.n)>=0||(r.iadd(new en(t)),r.cmp(Qt.n)>=0&&r.isub(Qt.n),r.isZero()))return 1;let n=r.toArrayLike(Uint8Array,"be",32);return t.set(n),0},privateKeyTweakMul(t,e){let r=new en(e);if(r.cmp(Qt.n)>=0||r.isZero())return 1;r.imul(new en(t)),r.cmp(Qt.n)>=0&&(r=r.umod(Qt.n));let n=r.toArrayLike(Uint8Array,"be",32);return t.set(n),0},publicKeyVerify(t){return c0(t)===null?1:0},publicKeyCreate(t,e){let r=new en(e);if(r.cmp(Qt.n)>=0||r.isZero())return 1;let n=yf.keyFromPrivate(e).getPublic();return py(t,n),0},publicKeyConvert(t,e){let r=c0(e);if(r===null)return 1;let n=r.getPublic();return py(t,n),0},publicKeyNegate(t,e){let r=c0(e);if(r===null)return 1;let n=r.getPublic();return n.y=n.y.redNeg(),py(t,n),0},publicKeyCombine(t,e){let r=new Array(e.length);for(let i=0;i<e.length;++i)if(r[i]=c0(e[i]),r[i]===null)return 1;let n=r[0].getPublic();for(let i=1;i<r.length;++i)n=n.add(r[i].pub);return n.isInfinity()?2:(py(t,n),0)},publicKeyTweakAdd(t,e,r){let n=c0(e);if(n===null)return 1;if(r=new en(r),r.cmp(Qt.n)>=0)return 2;let i=n.getPublic().add(Qt.g.mul(r));return i.isInfinity()?2:(py(t,i),0)},publicKeyTweakMul(t,e,r){let n=c0(e);if(n===null)return 1;if(r=new en(r),r.cmp(Qt.n)>=0||r.isZero())return 2;let i=n.getPublic().mul(r);return py(t,i),0},signatureNormalize(t){let e=new en(t.subarray(0,32)),r=new en(t.subarray(32,64));return e.cmp(Qt.n)>=0||r.cmp(Qt.n)>=0?1:(r.cmp(yf.nh)===1&&t.set(Qt.n.sub(r).toArrayLike(Uint8Array,"be",32),32),0)},signatureExport(t,e){let r=e.subarray(0,32),n=e.subarray(32,64);if(new en(r).cmp(Qt.n)>=0||new en(n).cmp(Qt.n)>=0)return 1;let{output:i}=t,s=i.subarray(4,37);s[0]=0,s.set(r,1);let o=33,c=0;for(;o>1&&s[c]===0&&!(s[c+1]&128);--o,++c);if(s=s.subarray(c),s[0]&128||o>1&&s[0]===0&&!(s[1]&128))return 1;let u=i.subarray(39,72);u[0]=0,u.set(n,1);let l=33,d=0;for(;l>1&&u[d]===0&&!(u[d+1]&128);--l,++d);return u=u.subarray(d),u[0]&128||l>1&&u[0]===0&&!(u[1]&128)?1:(t.outputlen=6+o+l,i[0]=48,i[1]=t.outputlen-2,i[2]=2,i[3]=s.length,i.set(s,4),i[4+o]=2,i[5+o]=u.length,i.set(u,6+o),0)},signatureImport(t,e){if(e.length<8||e.length>72||e[0]!==48||e[1]!==e.length-2||e[2]!==2)return 1;let r=e[3];if(r===0||5+r>=e.length||e[4+r]!==2)return 1;let n=e[5+r];if(n===0||6+r+n!==e.length||e[4]&128||r>1&&e[4]===0&&!(e[5]&128)||e[r+6]&128||n>1&&e[r+6]===0&&!(e[r+7]&128))return 1;let i=e.subarray(4,4+r);if(i.length===33&&i[0]===0&&(i=i.subarray(1)),i.length>32)return 1;let s=e.subarray(6+r);if(s.length===33&&s[0]===0&&(s=s.slice(1)),s.length>32)throw new Error("S length is too long");let o=new en(i);o.cmp(Qt.n)>=0&&(o=new en(0));let c=new en(e.subarray(6+r));return c.cmp(Qt.n)>=0&&(c=new en(0)),t.set(o.toArrayLike(Uint8Array,"be",32),0),t.set(c.toArrayLike(Uint8Array,"be",32),32),0},ecdsaSign(t,e,r,n,i){if(i){let c=i;i=a(u=>{let l=c(e,r,null,n,u);if(!(l instanceof Uint8Array&&l.length===32))throw new Error("This is the way");return new en(l)},"noncefn")}let s=new en(r);if(s.cmp(Qt.n)>=0||s.isZero())return 1;let o;try{o=yf.sign(e,r,{canonical:!0,k:i,pers:n})}catch{return 1}return t.signature.set(o.r.toArrayLike(Uint8Array,"be",32),0),t.signature.set(o.s.toArrayLike(Uint8Array,"be",32),32),t.recid=o.recoveryParam,0},ecdsaVerify(t,e,r){let n={r:t.subarray(0,32),s:t.subarray(32,64)},i=new en(n.r),s=new en(n.s);if(i.cmp(Qt.n)>=0||s.cmp(Qt.n)>=0)return 1;if(s.cmp(yf.nh)===1||i.isZero()||s.isZero())return 3;let o=c0(r);if(o===null)return 2;let c=o.getPublic();return yf.verify(e,n,c)?0:3},ecdsaRecover(t,e,r,n){let i={r:e.slice(0,32),s:e.slice(32,64)},s=new en(i.r),o=new en(i.s);if(s.cmp(Qt.n)>=0||o.cmp(Qt.n)>=0)return 1;if(s.isZero()||o.isZero())return 2;let c;try{c=yf.recoverPubKey(n,i,r)}catch{return 2}return py(t,c),0},ecdh(t,e,r,n,i,s,o){let c=c0(e);if(c===null)return 1;let u=new en(r);if(u.cmp(Qt.n)>=0||u.isZero())return 2;let l=c.getPublic().mul(u);if(i===void 0){let d=l.encode(null,!0),f=yf.hash().update(d).digest();for(let p=0;p<32;++p)t[p]=f[p]}else{s||(s=new Uint8Array(32));let d=l.getX().toArray("be",32);for(let h=0;h<32;++h)s[h]=d[h];o||(o=new Uint8Array(32));let f=l.getY().toArray("be",32);for(let h=0;h<32;++h)o[h]=f[h];let p=i(s,o,n);if(!(p instanceof Uint8Array&&p.length===t.length))return 2;t.set(p)}return 0}}});var fIe=v((pUr,dIe)=>{dIe.exports=fX()(lIe())});var pIe=v((_Ur,UX)=>{try{UX.exports=BOe()}catch{UX.exports=fIe()}});var uu=v(u0=>{"use strict";Object.defineProperty(u0,"__esModule",{value:!0});u0.testnet=u0.regtest=u0.bitcoin=void 0;u0.bitcoin={messagePrefix:`Bitcoin Signed Message:
2158
2158
  `,bech32:"bc",bip32:{public:76067358,private:76066276},pubKeyHash:0,scriptHash:5,wif:128};u0.regtest={messagePrefix:`Bitcoin Signed Message:
@@ -10713,7 +10713,7 @@ ${ulr}
10713
10713
  Nostr listenerNostrEvent: click 'http://127.0.0.1:${i}' to init lnlink config.
10714
10714
  `),{cleanup:a(()=>{},"cleanup")};e.info(`
10715
10715
  Nostr listenerNostrEvent: click ${s.replace(/\/#\/|\/#|\/$/,"")}/#/?owner=${o}&npub=${c} to manager.
10716
- `),XSr({nostrAddress:o,lnlinkNpub:c});let u=QSr.decode(r.node_npub).data,l=u2r(r,t);await t.connect(u,l),t.startHeartbeat(r.node_sk,u,l);let d=setInterval(async()=>{if(t.isShuttingDown){clearInterval(d);return}try{let _=t.lastUserMessageReceived?Date.now()-t.lastUserMessageReceived:null,h=t.lastHeartbeatReceived?Date.now()-t.lastHeartbeatReceived:1/0,m=h>9e4,g=n2r(),y=!1;if(g){let{connections:E,summary:A}=g;if(A&&A.total>0&&A.healthy<A.total&&e.warn(`Relay health degraded: ${A.healthy}/${A.total} healthy`),E&&Object.keys(E).length){e.info(`Relay connections==>${JSON.stringify(E)}`);for(let[I,R]of Object.entries(E))if(R.status!=="healthy"){let $=Date.now(),B=t.relayRefreshTimestamps.get(I)||0;$-B>=a2r&&(e.warn(`Relay ${I} status ${R.status||"unknown"}, refreshing connection`),i2r(I),t.recordRelayRefreshTimestamp(I,$),y=!0)}}}y&&!t.isShuttingDown&&!t.isConnecting?await t.connect(u,l):m?(e.warn(`No heartbeats for ${Math.round(h/1e3)}s, recreating subscription with pool reset`),Net(),t.teardownSubscription(),t.isConnected=!1,await t.connect(u,l)):_&&_>3e5&&e.info(`No user messages for ${Math.round(_/1e3)}s, heartbeats healthy`),t.isConnected&&!t.subscription&&(e.warn("Connected but no subscription, recreating..."),await t.connect(u,l));let w=Date.now()-t.lastSubscriptionRefresh;w>c2r&&t.isConnected&&!t.isConnecting&&(e.info(`Refreshing subscription to clear _knownIds cache (last refresh: ${Math.round(w/1e3)}s ago)`),t.teardownSubscription(),await t.connect(u,l,{isRefresh:!0}),t.lastSubscriptionRefresh=Date.now())}catch(_){e.error(`Relay monitor error: ${_.message}`)}},45e3),f={stop:!1},p=t2r();return p.start(r.node_sk),t.addService({stop:a(async()=>{f.stop=!0,clearInterval(d),await p.stop()},"stop")}),{cleanup:a(async()=>{e.info("Starting Nostr connection cleanup..."),await t.cleanup(),e.info("Nostr connection cleanup completed")},"cleanup"),isHealthy:a(()=>t.isConnected,"isHealthy"),getConnectionStatus:a(()=>{let _=Date.now(),h=t.connectionStartTime?_-t.connectionStartTime:0,m=t.lastEventReceived?_-t.lastEventReceived:null;return{connected:t.isConnected,hasSubscription:!!t.subscription,uptime:Math.round(h/1e3),reconnectCount:t.reconnectCount,timeSinceLastEvent:m?Math.round(m/1e3):null,relayCount:Aet().length}},"getConnectionStatus")}}catch(r){throw e.error(`Failed to start Nostr event listener: ${r.message}`),await t.cleanup(),r}}a(l2r,"listenerNostrEvent");Oet.exports={listenerNostrEvent:l2r}});var Ret=v((Yin,Cet)=>{var{getConfig:d2r}=Vt(),{isTapdInitialized:f2r,getUniverseService:p2r}=Qi(),_2r=Ke();async function h2r(){let t=new _2r("job");try{let{LINK_UNIVERSE_HOST:e}=d2r();if(await f2r()){t.info("Job addFederationServer started");let n=p2r(),s=(await n.listFederationServers({}))?.servers?.find(c=>c.host===e);s?t.info(`Job addFederationServer result: ${!!s}`):(await n.addFederationServer({servers:[{host:e}]}).catch(c=>{t.error(`Job addFederationServer error: ${c.message}`)}),t.info("Job addFederationServer result: true")),t.info(`Job addFederationServer starting syncUniverse, universe_host: ${e}`);let o=await n.syncUniverse({universe_host:e,sync_mode:1}).catch(c=>{t.error(`syncUniverse error: ${c.message}`)});t.info(`Job addFederationServer syncUniverse result:${o?.synced_universes?.length}`)}}catch(e){t.error(`Job addFederationServer error: ${e.message}`)}}a(h2r,"addFederationServer");Cet.exports=h2r});var Let=v((ean,Pet)=>{var{isLndInitialized:m2r,getLightningService:g2r}=Qi(),y2r=Ke();async function v2r(){let t=new y2r("checkChannelState");if(!await m2r()){t.info("Job checkChannelState skip reason: LND not initialized yet.");return}let r=g2r(),n;try{n=await r.listChannels({inactive_only:!0})}catch(u){t.error(`Job checkChannelState failed to list channels: ${u.message}`);return}let i=n?.channels?.filter(u=>u&&!u.active)||[];if(!i.length){t.debug("Job checkChannelState: no inactive channels detected.");return}let s;try{s=await r.listPeers({latest_error:!0})}catch(u){t.error(`Job checkChannelState failed to list peers: ${u.message}`);return}let o=new Set(s?.peers?.map(u=>u.pub_key)),c=i.reduce((u,l)=>(l?.remote_pubkey&&(u.has(l.remote_pubkey)||u.set(l.remote_pubkey,[]),u.get(l.remote_pubkey).push(l)),u),new Map);for(let[u,l]of c.entries()){if(o.has(u)){t.debug(`Peer ${u} already online, skip reconnect.`);continue}t.info(`Peer ${u} offline with ${l.length} inactive channel(s). Attempting reconnect...`);let d;try{d=await r.getNodeInfo({pub_key:u})}catch(_){t.error(`Failed to fetch node info for ${u}: ${_.message}`);continue}let f=d?.node?.addresses||[];if(!f.length){t.warn(`No advertised addresses for peer ${u}, skipping reconnect.`);continue}let p=!1;for(let _ of f){let h=_?.addr;if(h)try{await r.connectPeer({addr:{pubkey:u,host:h},perm:!1,timeout:15}),t.info(`Reconnect attempt to peer ${u} via ${h} succeeded.`),p=!0;break}catch(m){t.warn(`Reconnect attempt to peer ${u} via ${h} failed: ${m.message}`)}}p||t.error(`All reconnect attempts failed for peer ${u}.`)}}a(v2r,"checkChannelState");Pet.exports=v2r});var Bet=v((ran,Det)=>{var{getConfig:b2r}=Vt(),{isLndInitialized:x2r,getLightningService:w2r}=Qi(),{isConnectPeer:E2r}=e0(),T2r=Ke();async function S2r(){let t=new T2r("job");if(!await x2r()){t.info("Job connectPeer skip reason: LND not initialized yet.");return}let{LINK_NOSTR_NODE_NPUBKEY:r,LINK_NOSTR_NODE_HOST:n}=b2r();if(!r||!n)throw new Error("Remote peer info is not set yet.");let i=await E2r({});t.info(`Job connectPeer status: ${i}`),i||await w2r().connectPeer({addr:{pubkey:r,host:n},perm:!0,timeout:30}),t.info("Job connectPeer successful.")}a(S2r,"connectPeer");Det.exports=S2r});var Cue=v((ian,Met)=>{var{getConfig:A2r}=Vt();function k2r(){let{LINK_NETWORK:t}=A2r();return(t||"").toLowerCase()==="regtest"?{apiBase:"http://34.84.66.29:8889/api",pageBase:"http://34.84.66.29:8889/zh"}:{apiBase:"https://mempool.space/api",pageBase:"https://mempool.space"}}a(k2r,"getMempoolBase");Met.exports={getMempoolBase:k2r}});var Get=v((san,$et)=>{var{getMempoolBase:Fet}=Cue(),{getTransactionsByFilter:Uet,upsertTransactionByFilter:NF}=Th(),qet=Ke(),{TRANSACTION_STATUS:xT,NODE_TYPE:AF,TRANSACTION_KIND:kF,TRANSACTION_ASSET_TYPE:Het,TRANSACTION_DIRECTION:jet}=rt();async function N2r(t,e){let r=`${e}/address/${t}/txs`,n=await fetch(r);if(!n.ok)throw new Error(`HTTP ${n.status}`);return await n.json()}a(N2r,"fetchAddressChainTxs");function O2r(t,e){return!t||!t.vout?!1:t.vout.some(r=>(Array.isArray(r.scriptpubkey_address?[r.scriptpubkey_address]:[]),r.scriptpubkey_address===e))}a(O2r,"txPaysToAddress");function I2r(t,e){if(!t||!Array.isArray(t.vout))return 0;let r=0;for(let n of t.vout)if(n&&n.scriptpubkey_address===e){let i=typeof n.value=="number"?n.value:Number.parseInt(n.value||"0",10);Number.isNaN(i)||(r+=i)}return r}a(I2r,"sumReceivedToAddress");async function C2r(){let t=new qet("poll-litd-btc-transfers");try{t.info("Starting litd incoming BTC address polling (mempool)");let{apiBase:e}=Fet(),n=(await Uet({node_type:AF.LITD,transaction_kind:kF.ONCHAIN,asset_type:Het.BTC,direction:jet.IN,status:xT.PENDING}))?.list;if(!n||n.length===0){t.info("No pending litd incoming BTC transactions to reconcile");return}let i=0,s=0,o=0,c=Math.floor(Date.now()/1e3),u=1440*60;for(let l of n)try{if(c-l.create_at>u){let w={id:l.id},E={status:xT.EXPIRED,update_at:c};await NF(E,w),o++,i++;continue}let d=l.target_address;if(!d){t.warn(`Transaction ${l.id} has no target_address, skip`),i++;continue}let f=await N2r(d,e).catch(w=>(t.error(`Fetch mempool address txs failed for ${d}: ${w.message}`),[]));if(!Array.isArray(f)||f.length===0){t.debug(`No chain txs found for address ${d}`),i++;continue}let p=f.find(w=>(w.status&&w.status.confirmed||w.status===!0)&&O2r(w,d));if(!p){t.debug(`No confirmed tx paying to ${d} yet`),i++;continue}let _=p.txid||p.tx_hash||p.id,h=p.status?.block_height,m=I2r(p,d),g={tx_hash:_,status:xT.CONFIRMED,confirmations:1,block_height:h,update_at:c,asset_amount:m>0?String(m):void 0},y={id:l.id};await NF(g,y),s++,i++,t.info(`Incoming ${d} confirmed by ${_} at height ${h}`)}catch(d){t.error(`Error handling incoming tx id=${l.id}: ${d.message}`),i++}t.info(`Incoming polling done: processed=${i}, confirmed=${s}, expired=${o}`)}catch(e){throw t.error(`pollBtcInTxns error: ${e.message}`),e}}a(C2r,"pollBtcInTxns");async function R2r(){let t=new qet("poll-litd-btc-transfers");try{t.info("Starting litd outgoing BTC transaction polling task");let{apiBase:e}=Fet(),n=(await Uet({node_type:AF.LITD,transaction_kind:kF.ONCHAIN,asset_type:Het.BTC,direction:jet.OUT,status:xT.PENDING}))?.list;if(!n||n.length===0){t.info("No litd outgoing BTC transactions to reconcile");return}let i=0,s=0,o=0;for(let c of n||[])try{let u=Math.floor(Date.now()/1e3),l=1440*60;if(u-c.create_at>l){let p={tx_hash:c.tx_hash,node_type:AF.LITD,transaction_kind:kF.ONCHAIN},_={status:xT.EXPIRED,update_at:u};await NF(_,p),t.warn(`Outgoing litd transaction ${c.tx_hash} expired`),o++;continue}let d=!1,f;if(c.tx_hash){let p=`${e}/tx/${c.tx_hash}/status`;try{let _=await fetch(p);if(_.ok){let h=await _.json();d=!!h.confirmed,f=h.block_height}else t.debug(`litd status not ok for ${c.tx_hash}: HTTP ${_.status}`)}catch(_){t.error(`Fetch litd status failed for ${c.tx_hash}: ${_.message}`)}}if(d){let p={tx_hash:c.tx_hash,node_type:AF.LITD,transaction_kind:kF.ONCHAIN},_={status:xT.CONFIRMED,confirmations:1,block_height:f,update_at:u};await NF(_,p),t.info(`Outgoing litd transaction ${c.tx_hash} confirmed by litd at height ${f}`),s++}else t.debug(`Outgoing litd transaction ${c.tx_hash} still pending per litd`);i++}catch(u){t.error(`Error processing transaction ${c.tx_hash}: ${u.message}`),o++}t.info(`litd BTC transaction polling completed (OUT only): ${i} processed, ${s} confirmed, ${o} failed`)}catch(e){throw t.error(`Error in pollBtcOutTxns: ${e.message}`),e}}a(R2r,"pollBtcOutTxns");async function P2r(){C2r(),R2r()}a(P2r,"pollBtcTransfers");$et.exports=P2r});var Rue=v((can,Xet)=>{var{INVOICE_STATUS:Jv,ACCOUNT_TYPE:L2r,NWC_PERMISSIONS:D2r,TRANSACTION_STATUS:wT,TRANSACTION_DIRECTION:B2r,TRANSACTION_KIND:M2r,NODE_TYPE:F2r}=rt(),U2r=zc(),{getBuyFlashAccountAsset:q2r}=bie(),{generateLnlink:H2r}=T3(),{upsertTransactionByFilter:j2r,getTransactionUser:$2r,insertLnLinkOrder:G2r,getLnlinkUser:V2r}=Mr(),{sleep:K2r}=wi(),Jet=Ke(),Vet=3,Ket=30*1e3;async function Wet(t,e=0){let r=new Jet("create_flash_account_for_user");try{let n=await $2r({invoice:t.payment_request});if(!n)return r.info(`Job listenerInvoice: Invoice with add_index ${t.add_index} not found.`),!1;if(n.account_type!==L2r.FLASH_REGISTER)return!1;if(n.status!==Jv.SETTLED)return r.warn(`Job listenerInvoice createFlashAccountForUser: Transaction invoice ${t.payment_request} is not paid yet.`),!1;let i=n.amount,{id:s}=await q2r(),o=JSON.parse(t.memo||"{}"),{pubkey:c,flash_account_url:u}=await H2r({asset_id:s,permissions:D2r,account_type:o.account_type,social_id:o.social_id,name:o.name,decimal_auth_limit:i,expire_time:U2r().add(1,"month").unix(),parent_pubkey:null});if(!c)throw new Error("Failed to generate pubkey");let l=await V2r({pubkey:c,include_expired:!0});if(!await G2r({transaction_id:n.id,user_id:l.id}))throw new Error("Failed to insert LnLink order");let f=`I've created a Flash account for you using LN Node and authorized a budget. Come and experience it!~@${o.social_id||o.name} ${u}`;return r.info(`Job listenerInvoice createFlashAccountForUser successful: ${f}`),!0}catch(n){if(r.error(`Job listenerInvoice createFlashAccountForUser error: ${n.message}`),e<Vet){let i=2**e*1e3;return r.info(`Retrying createFlashAccountForUser in ${i}ms (attempt ${e+1}/${Vet})`),await K2r(i),Wet(t,e+1)}return!1}}a(Wet,"createFlashAccountForUser");function zet(t,e,r){let n=new Promise((i,s)=>{let o=setTimeout(()=>{clearTimeout(o),s(new Error(r))},e)});return Promise.race([t,n])}a(zet,"promiseWithTimeout");async function z2r(t){let e=new Jet("invoice_change");try{e.info(`Received invoice event: ${t.add_index}, state: ${t.state}`);let r=t.state,n=wT.PENDING;[Jv.OPEN,Jv.ACCEPTED].includes(r)?n=wT.PENDING:Jv.SETTLED===r?n=wT.SETTLED:Jv.CANCELED===r?n=wT.CANCELED:Jv.EXPIRED===r?n=wT.EXPIRED:Jv.FAILED===r&&(n=wT.FAILED);let i={invoice:t?.payment_request,status:n,node_type:F2r.LITD,transaction_kind:M2r.LIGHTNING,direction:B2r.IN,description:t.memo,description_hash:t.description_hash?.toString("hex"),add_index:Number.parseInt(t?.add_index),expire_at:Number.parseInt(t?.creation_date)+Number.parseInt(t?.expiry),preimage:t.r_preimage?.toString("hex")};t.state==="SETTLED"&&(i.settled_at=Number(t.settle_date)),await Promise.all([zet(j2r(i,{invoice:t?.payment_request}),Ket,"Update transaction operation timed out").catch(s=>{e.error(`Job listenerInvoice updateTransactionByFilter error: ${s.message}`)}),t.state==="SETTLED"?zet(Wet(t),Ket*2,"Create flash account operation timed out"):Promise.resolve(!1)])}catch(r){e.error(`Error processing invoice data: ${r.message}`)}}a(z2r,"invoiceChange");Xet.exports=z2r});var Pue=v((lan,Yet)=>{var{TRANSACTION_STATUS:OF,TRANSACTION_DIRECTION:J2r,TRANSACTION_KIND:W2r,NODE_TYPE:X2r}=rt(),{upsertTransactionByFilter:Q2r}=Mr(),Qet=Ke();function Y2r(t){let e=new Qet("payment_change");switch(t){case"IN_FLIGHT":case"INITIATED":return OF.PENDING;case"SUCCEEDED":return OF.SETTLED;case"FAILED":return OF.FAILED;default:return e.warn(`Unknown payment status: ${t}`),OF.PENDING}}a(Y2r,"mapLndPaymentStatusToTransactionStatus");async function Z2r(t){let e=new Qet("payment_change");try{e.info(`Received payment event: ${t.payment_hash}, status: ${t.status}`);let r=t.status,n=Y2r(r),i={payment_hash:t.payment_hash,status:n,node_type:X2r.LITD,transaction_kind:W2r.LIGHTNING,direction:J2r.OUT,fees_paid:t.fee_sat?t.fee_sat.toString():t.fee_msat?(t.fee_msat/1e3).toString():null,invoice:t.payment_request||null,preimage:t.payment_preimage?t.payment_preimage.toString("hex"):null,create_at:t.creation_date?Number.parseInt(t.creation_date):null,add_index:Number.parseInt(t.payment_index)};t.status==="SUCCEEDED"&&(i.settled_at=t.creation_date?Number.parseInt(t.creation_date):Math.floor(Date.now()/1e3)),await Q2r(i,{payment_hash:t.payment_hash}),e.info(`Payment transaction processed: ${t.payment_hash}, status: ${r}`)}catch(r){e.error(`Error processing payment change: ${r.message}`),e.error(`Payment data: ${JSON.stringify(t,null,2)}`)}}a(Z2r,"paymentChange");Yet.exports=Z2r});var ntt=v((fan,rtt)=>{var{getLightningService:eAr}=Qi(),{decodePayReq:tAr}=e0(),{getMinOpendInvoiveIndex:rAr,getTransactionByInvoice:nAr,getMinOpendPaymentIndex:iAr,getTransactionByPaymentHash:aAr,upsertTransactionByFilter:Zet}=Mr(),Lue=Ke(),{TRANSACTION_STATUS:ett}=rt(),sAr=Rue(),oAr=Pue();async function ttt(t){let e=await tAr({pay_req:t}),r=e.expiry,n=e.timestamp;return Math.floor(Date.now()/1e3)>Number(n)+Number(r)}a(ttt,"isInvoiceExpired");async function cAr(){let t=new Lue("poll-lnd-invoice-transfers");try{t.info("Starting poll lnd invoice and payment transfers polling task");let e=eAr();if(!e){t.warn("Lightning service not available, skipping polling");return}await uAr(e),await lAr(e),t.info("Poll LND invoice and payment transfers polling completed")}catch(e){throw t.error(`Error in poll lnd invoice and payment transfers polling: ${e.message}`),e}}a(cAr,"pollInvoiceTransfers");async function uAr(t){let e=new Lue("poll-lnd-invoice-transfers");try{e.debug("Polling lnd invoices for status changes");let r=await rAr();if(!r||r.add_index===null){e.debug("No open invoices found in database");return}if(await ttt(r.invoice)){await Zet({status:ett.EXPIRED,update_at:Math.floor(Date.now()/1e3)},{id:r.id}),e.info(`Marked invoice as EXPIRED: ${r.id}`);return}let i=r.add_index;e.info(`Polling invoices from index: ${i}`);let s=await t.listInvoices({index_offset:i-1,num_max_invoices:50,reversed:!0});if(!s.invoices||s.invoices.length===0){e.debug("No invoices returned from LND");return}let o=0;for(let c of s.invoices){let u=c.payment_request;await nAr({invoice:u})&&(c.state==="SETTLED"||c.state==="CANCELED"||c.state==="EXPIRED")&&(e.info(`Found invoice status change: add_index=${c.add_index}, state=${c.state}`),await sAr(c),o++)}e.debug(`Invoice polling completed. Updated ${o} invoices`)}catch(r){throw e.error(`Error polling invoices: ${r.message}`),r}}a(uAr,"pollInvoices");async function lAr(t){let e=new Lue("poll-lnd-invoice-transfers");try{e.debug("Polling payments for status changes");let r=await iAr();if(!r||r.add_index===null){e.debug("No open payments found in database");return}if(await ttt(r.invoice)){await Zet({status:ett.EXPIRED},{id:r.id}),e.info(`Marked invoice as EXPIRED: ${r.id}`);return}let i=r.add_index;e.debug(`Polling payments from index: ${i}`);let s=await t.listPayments({index_offset:i-1,max_payments:50,reversed:!1,include_incomplete:!0});if(!s.payments||s.payments.length===0){e.debug("No payments returned from LND");return}let o=0;for(let c of s.payments){let u=c.payment_hash;await aAr({payment_hash:u})&&(c.status==="SUCCEEDED"||c.status==="FAILED"||c.status==="UNKNOWN")&&(e.info(`Found payment status change: payment_index=${c.payment_index}, status=${c.status}`),await oAr(c),o++)}e.debug(`Payment polling completed. Updated ${o} payments`)}catch(r){throw e.error(`Error polling payments: ${r.message}`),r}}a(lAr,"pollPayments");rtt.exports=cAr});var stt=v((_an,att)=>{var{getConfig:dAr}=Vt(),{isConnectPeer:fAr,getNodeState:pAr,connectPeer:_Ar}=L3(),hAr=Ke(),{WALLET_STATE_CODE:itt}=rt();async function mAr(){let t=new hAr("job");try{let{LINK_RGB_REMOTE_NODE_PUBKEY:e,LINK_RGB_REMOTE_NODE_HOST:r}=dAr();if(!e||!r)throw new Error("LINK_RGB_REMOTE_NODE_PUBKEY or LINK_RGB_REMOTE_NODE_HOST is not set");let n=await pAr();if(n.state!==itt.SERVER_ACTIVE){t.info(`RGB node state is ${n.state}, will try to connect peer after state is ${itt.SERVER_ACTIVE}`);return}let{is_connected:i}=await fAr({pubkey:e,host:r});i||await _Ar({pubkey:e,host:r}),t.info("Job connectPeer successful.")}catch(e){t.error(`Job connectPeer error: ${e}`)}}a(mAr,"callConnectPeer");att.exports=mAr});var ptt=v((man,ftt)=>{var{getMempoolBase:ott}=Cue(),{getTransactionsByFilter:ctt,upsertTransactionByFilter:RF}=Th(),utt=Ke(),{TRANSACTION_STATUS:ET,NODE_TYPE:IF,TRANSACTION_KIND:CF,TRANSACTION_ASSET_TYPE:ltt,TRANSACTION_DIRECTION:dtt}=rt();async function gAr(t,e){let r=`${e}/address/${t}/txs`,n=await fetch(r);if(!n.ok)throw new Error(`HTTP ${n.status}`);return await n.json()}a(gAr,"fetchAddressChainTxs");function yAr(t,e){return!t||!t.vout?!1:t.vout.some(r=>(Array.isArray(r.scriptpubkey_address?[r.scriptpubkey_address]:[]),r.scriptpubkey_address===e))}a(yAr,"txPaysToAddress");function vAr(t,e){if(!t||!Array.isArray(t.vout))return 0;let r=0;for(let n of t.vout)if(n&&n.scriptpubkey_address===e){let i=typeof n.value=="number"?n.value:Number.parseInt(n.value||"0",10);Number.isNaN(i)||(r+=i)}return r}a(vAr,"sumReceivedToAddress");async function bAr(){let t=new utt("poll-rgb-btc-in-transfers");try{t.info("Starting incoming BTC address polling (mempool)");let{apiBase:e}=ott(),n=(await ctt({node_type:IF.RGB,transaction_kind:CF.ONCHAIN,asset_type:ltt.BTC,direction:dtt.IN,status:ET.PENDING}))?.list;if(!n||n.length===0){t.info("No pending incoming BTC transactions to reconcile");return}let i=0,s=0,o=0,c=Math.floor(Date.now()/1e3),u=1440*60;for(let l of n)try{if(c-l.create_at>u){let w={id:l.id},E={status:ET.EXPIRED,update_at:c};await RF(E,w),o++,i++;continue}let d=l.target_address;if(!d){t.warn(`Transaction ${l.id} has no target_address, skip`),i++;continue}let f=await gAr(d,e).catch(w=>(t.error(`Fetch mempool address txs failed for ${d}: ${w.message}`),[]));if(!Array.isArray(f)||f.length===0){t.debug(`No chain txs found for address ${d}`),i++;continue}let p=f.find(w=>(w.status&&w.status.confirmed||w.status===!0)&&yAr(w,d));if(!p){t.debug(`No confirmed tx paying to ${d} yet`),i++;continue}let _=p.txid||p.tx_hash||p.id,h=p.status?.block_height,m=vAr(p,d),g={tx_hash:_,status:ET.CONFIRMED,confirmations:1,block_height:h,update_at:c,asset_amount:m>0?String(m):void 0},y={id:l.id};await RF(g,y),s++,i++,t.info(`Incoming ${d} confirmed by ${_} at height ${h}`)}catch(d){t.error(`Error handling incoming tx id=${l.id}: ${d.message}`),i++}t.info(`Incoming polling done: processed=${i}, confirmed=${s}, expired=${o}`)}catch(e){throw t.error(`pollBtcInTxns error: ${e.message}`),e}}a(bAr,"pollBtcInTxns");async function xAr(){let t=new utt("poll-rgb-btc-out-transfers");try{t.info("Starting BTC transaction polling task");let{apiBase:e}=ott(),n=(await ctt({node_type:IF.RGB,transaction_kind:CF.ONCHAIN,asset_type:ltt.BTC,direction:dtt.OUT,status:ET.PENDING}))?.list;if(!n||n.length===0){t.info("No BTC outgoing transactions to reconcile");return}let i=0,s=0,o=0;for(let c of n||[])try{let u=Math.floor(Date.now()/1e3),l=1440*60;if(u-c.create_at>l){let p={tx_hash:c.tx_hash,node_type:IF.RGB,transaction_kind:CF.ONCHAIN},_={status:ET.EXPIRED,update_at:u};await RF(_,p),t.warn(`Outgoing transaction ${c.tx_hash} expired`),o++;continue}let d=!1,f;if(c.tx_hash){let p=`${e}/tx/${c.tx_hash}/status`;try{let _=await fetch(p);if(_.ok){let h=await _.json();d=!!h.confirmed,f=h.block_height}else t.debug(`mempool status not ok for ${c.tx_hash}: HTTP ${_.status}`)}catch(_){t.error(`Fetch mempool status failed for ${c.tx_hash}: ${_.message}`)}}if(d){let p={tx_hash:c.tx_hash,node_type:IF.RGB,transaction_kind:CF.ONCHAIN},_={status:ET.CONFIRMED,confirmations:1,block_height:f,update_at:u};await RF(_,p),t.info(`Outgoing ${c.tx_hash} confirmed by mempool at height ${f}`),s++}else t.debug(`Outgoing ${c.tx_hash} still pending per mempool`);i++}catch(u){t.error(`Error processing transaction ${c.tx_hash}: ${u.message}`),o++}t.info(`BTC transaction polling completed (OUT only): ${i} processed, ${s} confirmed, ${o} failed`)}catch(e){throw t.error(`Error in pollBtcOutTxns: ${e.message}`),e}}a(xAr,"pollBtcOutTxns");async function wAr(){bAr(),xAr()}a(wAr,"pollBtcTransfers");ftt.exports=wAr});var vtt=v((yan,ytt)=>{var{upsertTransactionByFilter:EAr,getTransactionsByFilter:_tt}=Th(),{getInvoiceStatus:TAr,getPayment:SAr,decodeLnInvoice:AAr}=Aie(),LF=Ke(),{TRANSACTION_STATUS:Dc,NODE_TYPE:htt,TRANSACTION_KIND:mtt,TRANSACTION_DIRECTION:gtt}=rt();async function kAr(){let t=new LF("poll-rgb-lightning-transfers");try{t.info("Starting RGB Lightning transfers polling task"),await NAr(),await OAr(),t.info("RGB Lightning transfers polling task completed")}catch(e){throw t.error(`Error in pollLightningTransfers: ${e.message}`),e}}a(kAr,"pollLightningTransfers");async function NAr(){let t=new LF("poll-rgb-lightning-transfers");try{let e=await _tt({node_type:htt.RGB,transaction_kind:mtt.LIGHTNING,direction:gtt.IN,status:Dc.PENDING});if(!e||!e.list||e.list.length===0){t.info("No pending Lightning invoices found in database");return}t.info(`Found ${e.list.length} pending Lightning invoices in database`);let r=0,n=0,i=0,s=0;for(let o of e.list)try{if(!o.invoice){t.warn(`Invoice record ${o.id} has no invoice string, skipping`);continue}if(await IAr(o.invoice)){await Due(o,{status:Dc.EXPIRED,update_at:Math.floor(Date.now()/1e3)}),t.info(`Marked invoice as EXPIRED: ${PF(o)}`),s++;continue}let u=await TAr({invoice:o.invoice});if(!u){t.warn(`No status result for invoice: ${PF(o)}`);continue}let l=CAr(u.status);l!==o.status?(await Due(o,{status:l,update_at:Math.floor(Date.now()/1e3)}),t.info(`Updated invoice status from ${o.status} to ${l}: ${PF(o)}`),r++):n++}catch(c){t.error(`Error processing invoice ${o.id}: ${c.message}`),i++}t.info(`Lightning invoices polling completed: ${e.list.length} processed, ${r} updated, ${n} unchanged, ${i} errors, ${s} expired`)}catch(e){throw t.error(`Error in pollLightningInvoices: ${e.message}`),e}}a(NAr,"pollLightningInvoices");async function OAr(){let t=new LF("poll-rgb-lightning-transfers");try{let e=await _tt({node_type:htt.RGB,transaction_kind:mtt.LIGHTNING,direction:gtt.OUT,status:Dc.PENDING});if(!e||!e.list||e.list.length===0){t.info("No pending Lightning payments found in database");return}t.info(`Found ${e.list.length} pending Lightning payments in database`);let r=0,n=0,i=0;for(let s of e.list)try{if(!s.payment_hash){t.warn(`Payment record ${s.id} has no payment_hash, skipping`);continue}let o=await SAr({payment_hash:s.payment_hash});if(!o||!o.payment){t.warn(`No payment result for payment_hash: ${s.payment_hash}`);continue}let c=RAr(o.payment.status);if(c!==s.status){let u={status:c,update_at:Math.floor(Date.now()/1e3)};c===Dc.CONFIRMED&&o.payment.asset_amount&&(u.asset_amount=o.payment.asset_amount.toString()),await Due(s,u),t.info(`Updated payment status from ${s.status} to ${c}: ${PF(s)}`),r++}else n++}catch(o){t.error(`Error processing payment ${s.id}: ${o.message}`),i++}t.info(`Lightning payments polling completed: ${e.list.length} processed, ${r} updated, ${n} unchanged, ${i} errors`)}catch(e){throw t.error(`Error in pollLightningPayments: ${e.message}`),e}}a(OAr,"pollLightningPayments");async function IAr(t){let e=new LF("poll-rgb-lightning-transfers");try{let r=await AAr({invoice:t});if(!r||!r.timestamp||!r.expiry_sec)return e.warn(`Failed to decode invoice or missing timestamp/expiry: ${t.substring(0,20)}...`),!1;let n=Math.floor(Date.now()/1e3),i=Number(r.timestamp)+Number(r.expiry_sec);return n>i}catch(r){return e.error(`Error decoding invoice ${t.substring(0,20)}...: ${r.message}`),!1}}a(IAr,"isInvoiceExpired");function CAr(t){switch(t){case"Pending":return Dc.PENDING;case"Succeeded":return Dc.SETTLED;case"Failed":return Dc.FAILED;case"Expired":return Dc.EXPIRED;default:return Dc.PENDING}}a(CAr,"mapInvoiceStatus");function RAr(t){switch(t){case"Pending":case"InFlight":return Dc.PENDING;case"Succeeded":return Dc.SETTLED;case"Failed":return Dc.FAILED;default:return Dc.PENDING}}a(RAr,"mapPaymentStatus");function PF(t){return JSON.stringify({id:t.id,asset_id:t.asset_id,invoice:t.invoice?`${t.invoice.substring(0,20)}...`:void 0,payment_hash:t.payment_hash,status:t.status})}a(PF,"formatTransactionLog");async function Due(t,e){let r={id:t.id};await EAr(e,r)}a(Due,"updateTransaction");ytt.exports=kAr});var Ttt=v((ban,Ett)=>{var{upsertTransactionByFilter:PAr,getTransactionsByFilter:LAr}=Th(),{getRGBAssetsList:DAr}=oA(),{listTransfers:xtt}=kie(),wtt=Ke(),{TRANSACTION_STATUS:Fm,NODE_TYPE:BAr,TRANSACTION_KIND:MAr,TRANSACTION_ASSET_TYPE:FAr,TRANSACTION_DIRECTION:btt}=rt();async function UAr(){let t=new wtt("poll-rgb-transfers");try{t.info("Starting RGB asset transfers polling task");let e=await LAr({node_type:BAr.RGB,transaction_kind:MAr.ONCHAIN,asset_type:FAr.RGB_ASSET,status:Fm.PENDING});if(!e||!e.list||e.list.length===0){t.info("No pending RGB transactions found in database");return}t.info(`Found ${e.list.length} pending RGB transactions in database`);let r=0,n=0,i=0,s=0;for(let o of e.list)try{if(qAr(o)){await Bue(o,{status:Fm.EXPIRED,update_at:Math.floor(Date.now()/1e3)}),t.info(`Marked transaction as EXPIRED: ${j_(o)}`),s++;continue}if(!o.asset_id){t.info(`Processing transaction without asset_id: ${j_(o)}`);let p=await VAr(o);if(p){await Bue(o,{asset_id:p,update_at:Math.floor(Date.now()/1e3)}),t.info(`Updated transaction with matched asset_id: ${j_({...o,asset_id:p})}`),r++;continue}else{t.info(`No matching asset ID found for transaction: ${j_(o)}`),i++;continue}}let u=(await xtt({asset_id:o.asset_id}))?.transfers||[];if(!u||u.length===0){t.info(`No transfers found for asset_id ${o.asset_id}`),i++;continue}let l=u.filter(p=>p.kind==="ReceiveBlind"||p.kind==="Send");if(l.length===0){t.info(`No relevant transfers found for asset_id ${o.asset_id}`),i++;continue}let d=GAr(o,l);if(!d){t.info(`No matching transfer found for transaction: ${j_(o)}`),i++;continue}let f=jAr(d.status);if(f!==o.status){let p={status:f,update_at:Math.floor(Date.now()/1e3)};f===Fm.CONFIRMED&&d.confirmed_at&&(p.confirm_at=d.confirmed_at),d.txid&&!o.tx_hash&&(p.tx_hash=d.txid);let _=$Ar(d);_!=="0"&&(!o.asset_amount||o.asset_amount==="0")&&(p.asset_amount=_),await Bue(o,p),t.info(`Updated transaction status from ${o.status} to ${f}: ${j_(o)}`),r++}else n++}catch(c){t.error(`Error processing transaction ${o.id}: ${c.message}`)}t.info(`RGB transfers polling completed: ${e.list.length} processed, ${r} updated, ${n} unchanged, ${i} not found, ${s} expired`)}catch(e){throw t.error(`Error in pollRgbTransfers: ${e.message}`),e}}a(UAr,"pollRgbTransfers");function qAr(t){if(!t.create_at)return!1;let e=Math.floor(Date.now()/1e3),r=1440*60;return e-t.create_at>r}a(qAr,"isTransactionExpired");function HAr(t){switch(t){case"Send":return btt.OUT;case"ReceiveBlind":case"Issuance":return btt.IN;default:return null}}a(HAr,"getDirection");function jAr(t){switch(t){case"Settled":return Fm.CONFIRMED;case"WaitingCounterparty":return Fm.PENDING;case"Failed":return Fm.FAILED;case"Expired":return Fm.EXPIRED;default:return Fm.PENDING}}a(jAr,"getStatus");function $Ar(t){return t.requested_assignment&&t.requested_assignment.type==="Fungible"?t.requested_assignment.value.toString():t.assignments&&t.assignments.length>0?t.assignments[0].value.toString():"0"}a($Ar,"calculateAssetAmount");function GAr(t,e){if(!e||e.length===0)return null;if(t.tx_hash){let r=e.find(n=>n.txid===t.tx_hash);if(r)return r}if(t.invoice){let r=e.find(n=>n.invoice===t.invoice);if(r)return r}if(t.target_address){let r=e.filter(n=>n.recipient_id===t.target_address);if(r.length>0&&t.asset_id){let n=r.filter(i=>i.asset_id===t.asset_id);if(n.length>0)return n.sort((i,s)=>s.created_at-i.created_at)[0]}if(r.length>0)return r.sort((n,i)=>i.created_at-n.created_at)[0]}if(t.asset_id){let r=e.filter(n=>n.asset_id===t.asset_id);if(r.length>0&&t.direction){let n=r.filter(i=>HAr(i.kind)===t.direction);if(n.length>0)return n.sort((i,s)=>s.created_at-i.created_at)[0]}if(r.length>0)return r.sort((n,i)=>i.created_at-n.created_at)[0]}return null}a(GAr,"findMatchingTransfer");function j_(t){return JSON.stringify({id:t.id,asset_id:t.asset_id,invoice:t.invoice?`${t.invoice.substring(0,20)}...`:void 0,tx_hash:t.tx_hash,target_address:t.target_address})}a(j_,"formatTransactionLog");async function VAr(t){let e=new wtt("poll-rgb-transfers");if(!t.target_address)return e.info(`Transaction has no target_address, cannot match asset_id: ${j_(t)}`),null;let r=[];try{r=await DAr(),e.info(`Retrieved ${r.length} RGB assets from node`)}catch(n){return e.error(`Error getting RGB assets list: ${n.message}`),null}if(r.length===0)return e.info("No RGB assets found in node"),null;for(let n of r)try{let i=n.asset_id,o=(await xtt({asset_id:i}))?.transfers||[];if(o.length===0)continue;if(o.find(u=>u.recipient_id===t.target_address))return e.info(`Found matching asset_id ${i} by target_address for transaction: ${j_(t)}`),i}catch(i){e.error(`Error processing asset ${n.asset_id}: ${i.message}`)}return e.info(`No matching asset found for transaction: ${j_(t)}`),null}a(VAr,"getAssetIdForTransaction");async function Bue(t,e){let r={id:t.id};await PAr(e,r)}a(Bue,"updateTransaction");Ett.exports=UAr});var Att=v((wan,Stt)=>{var{getNodeState:KAr,refreshTransfers:zAr}=L3(),JAr=Ke(),{WALLET_STATE_CODE:WAr}=rt();async function XAr(){let t=new JAr("job");try{if((await KAr()).state!==WAr.SERVER_ACTIVE)return;await zAr({skip_sync:!1})}catch(e){t.error(`Job refreshTransfers error: ${e}`)}}a(XAr,"callRefreshTransfers");Stt.exports=XAr});var BF=v((Tan,Rtt)=>{var{upsertTransactionByFilter:ktt,getTransactionsByFilter:QAr}=Mr(),Ntt=Ke(),{TRANSACTION_STATUS:md,TRANSACTION_DIRECTION:DF}=rt();function Ott(t){switch(t){case"ADDR_EVENT_STATUS_UNKNOWN":return md.PENDING;case"ADDR_EVENT_STATUS_TRANSACTION_DETECTED":return md.PENDING;case"ADDR_EVENT_STATUS_TRANSACTION_CONFIRMED":return md.CONFIRMED;case"ADDR_EVENT_STATUS_PROOF_RECEIVED":return md.CONFIRMED;case"ADDR_EVENT_STATUS_COMPLETED":return md.CONFIRMED;default:return md.PENDING}}a(Ott,"mapReceiveEventStatusToTransactionStatus");function Itt(t){switch(t){case"SendStateWaitTxConf":case"SendStateStorePostAnchorTxConf":case"SendStateTransferProofs":return md.PENDING;case"SendStateComplete":return md.CONFIRMED;default:return md.PENDING}}a(Itt,"mapSendStateToTransactionStatus");function Ctt(t,e,r,n){let i=`${t.substring(0,8)}...${t.substring(t.length-8)}`,s=n?`${n.substring(0,8)}...${n.substring(n.length-8)}`:"pending";return`Taproot Asset ${r===DF.IN?"deposit":"withdrawal"} - ${e} units of ${i} (${s})`}a(Ctt,"generateTaprootTransactionDescription");async function YAr(t){let e=new Ntt("taprootOnchainTransChange");try{if(e.info("Processing Taproot receive event:",t?.address,t.outpoint),!t.address||!t.outpoint)throw new Error("Invalid receive event: missing address or outpoint");let{address:r,outpoint:n,confirmation_height:i=0,status:s="ADDR_EVENT_STATUS_UNKNOWN",timestamp:o}=t,c=r.asset_id?r.asset_id.toString("hex"):null,u=r.amount?r.amount.toString():"0",l=r.encoded||null;if(!c||!l)throw new Error("Invalid receive event: missing asset_id or target_address");let d=n.split(":")[0],f=Ott(s),p=Math.floor(Date.now()/1e3),_={tx_hash:d,status:f,block_height:i||0,confirmations:i>0?1:0,update_at:p,settled_at:f===md.CONFIRMED?p:null,description:Ctt(c,u,DF.IN,d)};if(o&&(_.create_at=Math.floor(o/1e6)),await ktt(_,{target_address:l}))return e.info(`Successfully updated Taproot receive record: ${d}, asset: ${c}, amount: ${u}`),{success:!0,tx_hash:d,asset_id:c,asset_amount:u,direction:DF.IN,status:f,target_address:l,is_update:!0,operation_type:"update_waiting_record",processed_at:p};throw new Error(`Database update failed for Taproot transaction ${d}`)}catch(r){throw e.error(`Error processing Taproot receive event: ${r.message}`),r}}a(YAr,"handleTaprootReceiveEvent");async function ZAr(t){let e=new Ntt("taprootOnchainTransChange");try{if(e.info("Processing Taproot send event----------->:",t?.send_state),!t.transfer)return e.debug("Send event has no transfer data, skipping"),{success:!1,reason:"No transfer data in send event"};let{send_state:r,transfer:n}=t,{anchor_tx_hash:i,inputs:s=[],anchor_tx_chain_fees:o=0,anchor_tx_height_hint:c=0}=n;if(!i||s.length===0)throw new Error("Invalid send event: missing anchor_tx_hash or inputs");let u=s[0],l=u.asset_id?u.asset_id.toString("hex"):null;if(!l)throw new Error("Invalid send event: missing asset_id in inputs");let d=i.toString("hex"),f=Itt(r),p=Math.floor(Date.now()/1e3),_={tx_hash:d,status:f,fees_paid:o?o.toString():"0",block_height:c||0,confirmations:c>0?1:0,update_at:p,settled_at:f===md.CONFIRMED?p:null};e.info(`Looking for existing record with tx_hash: ${d}`);let h=await QAr({tx_hash:d,limit:1});if(!h.list||h.list.length===0)return e.warn(`No record found for tx_hash: ${d}. Will retry on next event.`),{success:!1,reason:"Record not found, will retry later",tx_hash:d,skipped:!0};if(e.info(`Found existing record for tx_hash: ${d}, updating status to: ${f}`),await ktt(_,{tx_hash:d}))return e.info(`Successfully updated Taproot send record: ${d}, asset: ${l}`),{success:!0,tx_hash:d,asset_id:l,direction:DF.OUT,status:f,fees_paid:o,is_update:!0,operation_type:"update_waiting_record",processed_at:p};throw new Error(`Database update failed for Taproot send transaction ${d}`)}catch(r){throw e.error(`Error processing Taproot send event: ${r.message}`),r}}a(ZAr,"handleTaprootSendEvent");Rtt.exports={handleTaprootReceiveEvent:YAr,handleTaprootSendEvent:ZAr,mapReceiveEventStatusToTransactionStatus:Ott,mapSendStateToTransactionStatus:Itt,generateTaprootTransactionDescription:Ctt}});var Ftt=v((Aan,Mtt)=>{var{getTransactionsByFilter:Ptt,upsertTransactionByFilter:Ltt}=Mr(),{addrReceives:e8r,listTransfers:t8r}=Uy(),Fue=Ke(),{TRANSACTION_STATUS:pN,TRANSACTION_KIND:Dtt,TRANSACTION_ASSET_TYPE:Btt,TRANSACTION_DIRECTION:Mue}=rt(),{mapReceiveEventStatusToTransactionStatus:r8r,generateTaprootTransactionDescription:n8r}=BF(),i8r=20,a8r=15;function s8r(t){if(!t||t.length===0)return null;let e=t[0];for(let r of t){if(r.status==="ADDR_EVENT_STATUS_COMPLETED"||r.status==="ADDR_EVENT_STATUS_PROOF_RECEIVED")return r;r.status==="ADDR_EVENT_STATUS_TRANSACTION_CONFIRMED"&&e.status!=="ADDR_EVENT_STATUS_TRANSACTION_CONFIRMED"&&(e=r)}return e.status==="ADDR_EVENT_STATUS_UNKNOWN"?null:e}a(s8r,"findMostDefinitiveReceiveEvent");async function o8r(){let t=new Fue("poll-taproot-transfers");try{t.info("Starting Taproot Asset transfers polling task");let{checkTprEnabled:e}=Qi();if(!await e()){t.warn("TaprootAssets not enabled, skipping polling task");return}await c8r(),await u8r(),t.info("Taproot Asset transfers polling task completed")}catch(e){if(e.message.includes("TaprootAssets not enabled")){t.warn("TaprootAssets not enabled, skipping polling task");return}throw t.error(`Error in pollTaprootAssetTransfers: ${e.message}`,{stack:e.stack}),e}}a(o8r,"pollTaprootAssetTransfers");async function c8r(){let t=new Fue("poll-taproot-transfers");t.info("Polling pending Taproot Asset incoming on-chain transactions...");try{let e=new Date;e.setMinutes(e.getMinutes()-i8r);let n=(await Ptt({status:pN.PENDING,transaction_kind:Dtt.ONCHAIN,direction:Mue.IN,asset_type:Btt.TAPROOT_ASSET,from:Math.floor(e.getTime()/1e3)})).list;if(!n||n.length===0){t.info("No pending incoming Taproot transactions found in database");return}t.info(`Found ${n.length} pending incoming Taproot transactions to check`);let i=0;for(let s of n)if(s.target_address)try{let o=await e8r(s.target_address),c=s8r(o);if(c&&r8r(c.status)===pN.CONFIRMED){t.info(`Updating incoming transaction for address ${s.target_address}: status is ${c.status} on tapd`);let l=c.outpoint.split(":")[0],d={status:pN.CONFIRMED,tx_hash:l,block_height:c.confirmation_height||0,confirmations:c.confirmation_height>0?1:0,settled_at:c.timestamp?Math.floor(c.timestamp/1e6):Math.floor(Date.now()/1e3),update_at:Math.floor(Date.now()/1e3),description:n8r(s.asset_id,s.asset_amount,Mue.IN,l)};await Ltt(d,{target_address:s.target_address}),i++}}catch(o){t.error(`Failed to update incoming transaction for address ${s.target_address}: ${o.message}`)}t.info(`Incoming Taproot transactions polling completed: ${i} of ${n.length} transactions updated`)}catch(e){t.error(`Error in pollIncomingTransfers: ${e.message}`,{stack:e.stack})}}a(c8r,"pollIncomingTransfers");async function u8r(){let t=new Fue("poll-taproot-transfers");t.info("Polling pending Taproot Asset outgoing on-chain transactions...");try{let e=await t8r();if(!e||e.length===0){t.info("No transfers found from tapd, skipping outgoing transactions polling");return}let r=new Map;for(let c of e)if(c.anchor_tx_hash){let u=c.anchor_tx_hash.toString("hex");r.set(u,c)}let n=new Date;n.setMinutes(n.getMinutes()-a8r);let s=(await Ptt({status:pN.PENDING,transaction_kind:Dtt.ONCHAIN,direction:Mue.OUT,asset_type:Btt.TAPROOT_ASSET,created_at:Math.floor(n.getTime()/1e3)})).list;if(!s||s.length===0){t.info("No pending outgoing Taproot transactions found in database");return}t.info(`Found ${s.length} pending outgoing Taproot transactions to check`);let o=0;for(let c of s){if(!c.tx_hash)continue;let u=r.get(c.tx_hash);u?u.anchor_tx_block_hash&&(u.anchor_tx_height_hint>0||u.anchor_tx_block_height>0)&&(t.info(`Updating outgoing transaction ${c.tx_hash}: confirmed on-chain via tapd transfer data`),await Ltt({status:pN.CONFIRMED,block_height:u.anchor_tx_height_hint||u.anchor_tx_block_height||0,confirmations:1,settled_at:u.transfer_timestamp?Math.floor(u.transfer_timestamp/1e6):Math.floor(Date.now()/1e3),fees_paid:u.anchor_tx_chain_fees?u.anchor_tx_chain_fees.toString():c.fees_paid,update_at:Math.floor(Date.now()/1e3)},{tx_hash:c.tx_hash}),o++):t.warn(`Could not find tx ${c.tx_hash} in recent tapd transfers. It might be too old or have failed before broadcasting.`)}t.info(`Outgoing Taproot transactions polling completed: ${o} of ${s.length} transactions updated`)}catch(e){t.error(`Error in pollOutgoingTransfers: ${e.message}`,{stack:e.stack})}}a(u8r,"pollOutgoingTransfers");Mtt.exports=o8r});var qtt=v((Nan,Utt)=>{var{initAccount:l8r}=dOe(),{bakeLoopMacaroon:d8r}=e0(),{bakeTaprootMacaroon:f8r}=Uy(),p8r=Oo(),_8r=Ke(),{WALLET_STATE_CODE:h8r}=rt(),{listenerNostrEvent:m8r}=Iet(),g8r=Ret(),y8r=Let(),v8r=Bet(),b8r=Get(),x8r=ntt(),w8r=stt(),E8r=ptt(),T8r=vtt(),S8r=Ttt(),A8r=Att(),k8r=Ftt(),N8r={lnd_connect_peer:{type:"cron",schedule:"*/3 * * * *",implementation:v8r,gate:"lndActive",priority:3,enabled:!0,maxRetries:3,timeout:3e4,description:"Periodically connect to peer nodes"},lnd_check_channel_state:{type:"cron",schedule:"*/3 * * * *",implementation:y8r,gate:"lndActive",priority:3,enabled:!0,maxRetries:3,timeout:3e4,description:"Periodically check channel state"},lnd_add_federation:{type:"cron",schedule:"*/3 * * * *",implementation:g8r,gate:"lndActive",priority:4,enabled:!0,maxRetries:3,timeout:3e4,description:"Periodically add federation servers"},lnd_poll_btc_transfers:{type:"cron",schedule:"*/2 * * * *",implementation:b8r,gate:"lndActive",priority:3,enabled:!0,maxRetries:3,timeout:6e4,description:"Poll LND BTC transfers status and update the database"},lnd_poll_invoice_transfers:{type:"cron",schedule:"*/10 * * * * *",implementation:x8r,gate:"lndActive",priority:2,enabled:!0,maxRetries:3,timeout:3e4,description:"Poll LND invoice transfers for status changes (backup mechanism)"},tapd_poll_asset_transfers:{type:"cron",schedule:"*/1 * * * *",implementation:k8r,gate:"lndActive",priority:5,enabled:!0,maxRetries:3,timeout:6e4,description:"Poll Taproot Asset transfers status and update the database"},rgb_connect_peer:{type:"cron",schedule:"*/3 * * * *",implementation:w8r,gate:"rgbActive",priority:3,enabled:!0,maxRetries:3,timeout:3e4,description:"Periodically connect to RGB peer nodes"},rgb_refresh_transfers:{type:"cron",schedule:"*/10 * * * * *",implementation:A8r,gate:"rgbActive",priority:2,enabled:!0,maxRetries:3,timeout:3e4,description:"Refresh RGB transfers status"},rgb_poll_btc_transfers:{type:"cron",schedule:"*/2 * * * *",implementation:E8r,gate:"rgbActive",priority:2,enabled:!0,maxRetries:3,timeout:3e4,description:"Poll RGB BTC transfers"},rgb_poll_rgb_transfers:{type:"cron",schedule:"*/2 * * * *",implementation:S8r,gate:"rgbActive",priority:2,enabled:!0,maxRetries:3,timeout:3e4,description:"Poll RGB asset transfers"},rgb_poll_lightning_transfers:{type:"cron",schedule:"*/30 * * * * *",implementation:T8r,gate:"rgbActive",priority:1,enabled:!0,maxRetries:3,timeout:3e4,description:"Poll RGB Lightning transfers"},bake_tapd_macaroon:{type:"event",event:"bakeTapdMacaroon",implementation:a(async()=>{let t=new _8r("bake-tapd-macaroon"),e=p8r.get("tempPassword");if(!e){t.warn("No password found in linkCache, skip bakeTapdMacaroon");return}await f8r({secret:e}),t.info("Taproot macaroon baked successfully")},"implementation"),gate:"always",enabled:!0,maxRetries:10,description:"Bake Taproot macaroon when server is active"},bake_loop_macaroon:{type:"event",event:"bakeLoopMacaroon",implementation:a(async t=>{let{terminateableRetryExecute:e}=qW(),r=Ke(),n=new r("bake-loop-macaroon");await e(d8r,{origin_secret:t},"bakeLoopMacaroon",0,6e4,n)},"implementation"),gate:"always",enabled:!0,maxRetries:5,description:"Bake Loop macaroon"},listen_nostr_event:{type:"event",event:"listenNostrEvent",implementation:m8r,gate:"always",enabled:!0,description:"Start listening to Nostr events"},init_account:{type:"event",event:"initAccount",implementation:l8r,gate:"always",enabled:!0,description:"Initialize account"}},O8r={always:a(()=>!0,"always"),lndActive:a(()=>Oo().get("walletState")===h8r.SERVER_ACTIVE,"lndActive"),rgbActive:a(()=>Oo().get("rgbState")===4,"rgbActive")};Utt.exports={TASKS:N8r,GATES:O8r}});var jtt=v((Ian,Htt)=>{var I8r=require("node:events"),C8r=Ke(),Uue=class extends I8r{static{a(this,"EventBus")}constructor(){super(),this.logger=new C8r("EventBus"),this.handlers=new Map,this.stats={eventsEmitted:0,handlersRegistered:0,errors:0}}register(e,r,n={}){this.handlers.has(e)&&(this.logger.warn(`Event handler for '${e}' already exists, replacing...`),this.unregister(e));let i=a(async(...s)=>{try{this.logger.debug(`Event '${e}' triggered`);let o=Date.now(),c=await r(...s),u=Date.now()-o;return this.logger.debug(`Event '${e}' completed in ${u}ms`),c}catch(o){if(this.stats.errors++,this.logger.error(`Event '${e}' handler failed: ${o.message}`),n.throwOnError)throw o}},"wrappedHandler");this.on(e,i),this.handlers.set(e,{handler:i,originalHandler:r,options:n,registeredAt:new Date}),this.stats.handlersRegistered++,this.logger.info(`Registered event handler: ${e}`)}unregister(e){let r=this.handlers.get(e);r&&(this.removeListener(e,r.handler),this.handlers.delete(e),this.logger.info(`Unregistered event handler: ${e}`))}emit(e,...r){return this.stats.eventsEmitted++,this.logger.debug(`Emitting event: ${e}`),super.emit(e,...r)}getStats(){return{...this.stats,registeredHandlers:this.handlers.size,handlerNames:Array.from(this.handlers.keys())}}cleanup(){this.logger.info("Cleaning up event bus...");let e=Array.from(this.handlers.keys());e.forEach(r=>this.unregister(r)),this.removeAllListeners(),this.logger.info(`Event bus cleanup completed. Removed ${e.length} handlers`)}};Htt.exports=Uue});var Gtt=v((Ran,$tt)=>{var R8r=Ke(),que=class{static{a(this,"Gates")}constructor(e={}){this.logger=new R8r("Gates"),this.gates=new Map,this.stats={evaluations:0,passedEvaluations:0,failedEvaluations:0},this.loadGates(e)}loadGates(e){Object.entries(e).forEach(([r,n])=>{this.registerGate(r,n)}),this.logger.info(`Loaded ${this.gates.size} gates`)}registerGate(e,r){if(typeof r!="function")throw new TypeError(`Gate '${e}' must be a function`);this.gates.set(e,r),this.logger.debug(`Registered gate: ${e}`)}evaluate(e){let r=this.gates.get(e);if(!r)return this.logger.warn(`Gate '${e}' not found, defaulting to false`),!1;try{this.stats.evaluations++;let n=r();return n?this.stats.passedEvaluations++:this.stats.failedEvaluations++,this.logger.debug(`Gate '${e}' evaluated to: ${n}`),n}catch(n){return this.stats.failedEvaluations++,this.logger.error(`Error evaluating gate '${e}': ${n.message}`),!1}}hasGate(e){return this.gates.has(e)}getGateNames(){return Array.from(this.gates.keys())}evaluateMultiple(e,r="and"){if(!Array.isArray(e)||e.length===0)return!0;let n=e.map(i=>this.evaluate(i));return r==="or"?n.some(i=>i):n.every(i=>i)}getStats(){return{...this.stats,registeredGates:this.gates.size,gateNames:this.getGateNames(),successRate:this.stats.evaluations>0?`${(this.stats.passedEvaluations/this.stats.evaluations*100).toFixed(2)}%`:"0%"}}resetStats(){this.stats={evaluations:0,passedEvaluations:0,failedEvaluations:0},this.logger.info("Gate statistics reset")}};$tt.exports=que});var Ktt=v((Lan,Vtt)=>{"use strict";var P8r=require("events"),Hue=class extends P8r{static{a(this,"Task")}constructor(e){if(super(),typeof e!="function")throw"execution must be a function";this._execution=e}execute(e){let r;try{r=this._execution(e)}catch(n){return this.emit("task-failed",n)}return r instanceof Promise?r.then(()=>this.emit("task-finished")).catch(n=>this.emit("task-failed",n)):(this.emit("task-finished"),r)}};Vtt.exports=Hue});var Jtt=v((Ban,ztt)=>{"use strict";ztt.exports=(()=>{let t=["january","february","march","april","may","june","july","august","september","october","november","december"],e=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"];function r(i,s){for(let o=0;o<s.length;o++)i=i.replace(new RegExp(s[o],"gi"),parseInt(o,10)+1);return i}a(r,"convertMonthName");function n(i){return i=r(i,t),i=r(i,e),i}return a(n,"interprete"),n})()});var Xtt=v((Fan,Wtt)=>{"use strict";Wtt.exports=(()=>{let t=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],e=["sun","mon","tue","wed","thu","fri","sat"];function r(i,s){for(let o=0;o<s.length;o++)i=i.replace(new RegExp(s[o],"gi"),parseInt(o,10));return i}a(r,"convertWeekDayName");function n(i){return i=i.replace("7","0"),i=r(i,t),r(i,e)}return a(n,"convertWeekDays"),n})()});var Ytt=v((qan,Qtt)=>{"use strict";Qtt.exports=(()=>{function t(r,n){return r.indexOf("*")!==-1?r.replace("*",n):r}a(t,"convertAsterisk");function e(r){return r[0]=t(r[0],"0-59"),r[1]=t(r[1],"0-59"),r[2]=t(r[2],"0-23"),r[3]=t(r[3],"1-31"),r[4]=t(r[4],"1-12"),r[5]=t(r[5],"0-6"),r}return a(e,"convertAsterisksToRanges"),e})()});var ert=v((jan,Ztt)=>{"use strict";Ztt.exports=(()=>{function t(n,i,s,o){let c=[],u=parseInt(o),l=parseInt(s);l>u&&(u=parseInt(s),l=parseInt(o));for(let d=l;d<=u;d++)c.push(d);return n.replace(new RegExp(i,"i"),c.join())}a(t,"replaceWithRange");function e(n){let i=/(\d+)-(\d+)/,s=i.exec(n);for(;s!==null&&s.length>0;)n=t(n,s[0],s[1],s[2]),s=i.exec(n);return n}a(e,"convertRange");function r(n){for(let i=0;i<n.length;i++)n[i]=e(n[i]);return n}return a(r,"convertAllRanges"),r})()});var rrt=v((Gan,trt)=>{"use strict";trt.exports=(()=>{function t(e){for(var r=/^(.+)\/(\w+)$/,n=0;n<e.length;n++){var i=r.exec(e[n]),s=i!==null&&i.length>0;if(s){var o=i[2];if(isNaN(o))throw o+" is not a valid step value";for(var c=i[1].split(","),u=[],l=parseInt(o,10),d=0;d<=c.length;d++){var f=parseInt(c[d],10);f%l===0&&u.push(f)}e[n]=u.join(",")}}return e}return a(t,"convertSteps"),t})()});var jue=v((Kan,nrt)=>{"use strict";var L8r=Jtt(),D8r=Xtt(),B8r=Ytt(),M8r=ert(),F8r=rrt();nrt.exports=(()=>{function t(i){return i.length===5?["0"].concat(i):i}a(t,"appendSeccondExpression");function e(i){return i.replace(/\s{2,}/g," ").trim()}a(e,"removeSpaces");function r(i){for(let s=0;s<i.length;s++){let o=i[s].split(",");for(let c=0;c<o.length;c++)o[c]=parseInt(o[c]);i[s]=o}return i}a(r,"normalizeIntegers");function n(i){let s=e(i).split(" ");return s=t(s),s[4]=L8r(s[4]),s[5]=D8r(s[5]),s=B8r(s),s=M8r(s),s=F8r(s),s=r(s),s.join(" ")}return a(n,"interprete"),n})()});var $ue=v((Jan,irt)=>{"use strict";var U8r=jue(),q8r=/^(?:\d+|\*|\*\/\d+)$/;function TT(t,e,r){let n=t.split(",");for(let i of n){let s=parseInt(i,10);if(!Number.isNaN(s)&&(s<e||s>r)||!q8r.test(i))return!1}return!0}a(TT,"isValidExpression");function H8r(t){return!TT(t,0,59)}a(H8r,"isInvalidSecond");function j8r(t){return!TT(t,0,59)}a(j8r,"isInvalidMinute");function $8r(t){return!TT(t,0,23)}a($8r,"isInvalidHour");function G8r(t){return!TT(t,1,31)}a(G8r,"isInvalidDayOfMonth");function V8r(t){return!TT(t,1,12)}a(V8r,"isInvalidMonth");function K8r(t){return!TT(t,0,7)}a(K8r,"isInvalidWeekDay");function z8r(t,e){if(H8r(e[0]))throw new Error(`${t[0]} is a invalid expression for second`);if(j8r(e[1]))throw new Error(`${t[1]} is a invalid expression for minute`);if($8r(e[2]))throw new Error(`${t[2]} is a invalid expression for hour`);if(G8r(e[3]))throw new Error(`${t[3]} is a invalid expression for day of month`);if(V8r(e[4]))throw new Error(`${t[4]} is a invalid expression for month`);if(K8r(e[5]))throw new Error(`${t[5]} is a invalid expression for week day`)}a(z8r,"validateFields");function J8r(t){if(typeof t!="string")throw new TypeError("pattern must be a string!");let e=t.split(" "),r=U8r(t).split(" ");e.length===5&&e.unshift("0"),z8r(e,r)}a(J8r,"validate");irt.exports=J8r});var srt=v((Xan,art)=>{var W8r=$ue(),X8r=jue();function ST(t,e){return t.indexOf(",")!==-1?t.split(",").indexOf(e.toString())!==-1:t===e.toString()}a(ST,"matchPattern");var Gue=class{static{a(this,"TimeMatcher")}constructor(e,r){W8r(e),this.pattern=X8r(e),this.timezone=r,this.expressions=this.pattern.split(" "),this.dtf=this.timezone?new Intl.DateTimeFormat("en-US",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23",fractionalSecondDigits:3,timeZone:this.timezone}):null}match(e){e=this.apply(e);let r=ST(this.expressions[0],e.getSeconds()),n=ST(this.expressions[1],e.getMinutes()),i=ST(this.expressions[2],e.getHours()),s=ST(this.expressions[3],e.getDate()),o=ST(this.expressions[4],e.getMonth()+1),c=ST(this.expressions[5],e.getDay());return r&&n&&i&&s&&o&&c}apply(e){return this.dtf?new Date(this.dtf.format(e)):e}};art.exports=Gue});var crt=v((Yan,ort)=>{"use strict";var Q8r=require("events"),Y8r=srt(),Vue=class extends Q8r{static{a(this,"Scheduler")}constructor(e,r,n){super(),this.timeMatcher=new Y8r(e,r),this.autorecover=n}start(){this.stop();let e=process.hrtime(),r=this.timeMatcher.apply(new Date),n=a(()=>{let s=process.hrtime(e),o=(s[0]*1e9+s[1])/1e6,c=Math.floor(o/1e3);for(let u=c;u>=0;u--){let l=new Date(new Date().getTime()-u*1e3),d=this.timeMatcher.apply(l);r.getTime()<d.getTime()&&(u===0||this.autorecover)&&this.timeMatcher.match(l)&&(this.emit("scheduled-time-matched",d),d.setMilliseconds(0),r=d)}e=process.hrtime(),this.timeout=setTimeout(n,1e3)},"matchTime");n()}stop(){this.timeout&&clearTimeout(this.timeout),this.timeout=null}};ort.exports=Vue});function _N(){return MF>FF.length-16&&(urt.default.randomFillSync(FF),MF=0),FF.slice(MF,MF+=16)}var urt,FF,MF,Kue=gi(()=>{urt=mo(require("crypto")),FF=new Uint8Array(256),MF=FF.length;a(_N,"rng")});var lrt,drt=gi(()=>{lrt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function Z8r(t){return typeof t=="string"&&lrt.test(t)}var Um,hN=gi(()=>{drt();a(Z8r,"validate");Um=Z8r});function e3r(t,e=0){let r=(ps[t[e+0]]+ps[t[e+1]]+ps[t[e+2]]+ps[t[e+3]]+"-"+ps[t[e+4]]+ps[t[e+5]]+"-"+ps[t[e+6]]+ps[t[e+7]]+"-"+ps[t[e+8]]+ps[t[e+9]]+"-"+ps[t[e+10]]+ps[t[e+11]]+ps[t[e+12]]+ps[t[e+13]]+ps[t[e+14]]+ps[t[e+15]]).toLowerCase();if(!Um(r))throw TypeError("Stringified UUID is invalid");return r}var ps,qm,mN=gi(()=>{hN();ps=[];for(let t=0;t<256;++t)ps.push((t+256).toString(16).substr(1));a(e3r,"stringify");qm=e3r});function t3r(t,e,r){let n=e&&r||0,i=e||new Array(16);t=t||{};let s=t.node||frt,o=t.clockseq!==void 0?t.clockseq:zue;if(s==null||o==null){let p=t.random||(t.rng||_N)();s==null&&(s=frt=[p[0]|1,p[1],p[2],p[3],p[4],p[5]]),o==null&&(o=zue=(p[6]<<8|p[7])&16383)}let c=t.msecs!==void 0?t.msecs:Date.now(),u=t.nsecs!==void 0?t.nsecs:Wue+1,l=c-Jue+(u-Wue)/1e4;if(l<0&&t.clockseq===void 0&&(o=o+1&16383),(l<0||c>Jue)&&t.nsecs===void 0&&(u=0),u>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");Jue=c,Wue=u,zue=o,c+=122192928e5;let d=((c&268435455)*1e4+u)%4294967296;i[n++]=d>>>24&255,i[n++]=d>>>16&255,i[n++]=d>>>8&255,i[n++]=d&255;let f=c/4294967296*1e4&268435455;i[n++]=f>>>8&255,i[n++]=f&255,i[n++]=f>>>24&15|16,i[n++]=f>>>16&255,i[n++]=o>>>8|128,i[n++]=o&255;for(let p=0;p<6;++p)i[n+p]=s[p];return e||qm(i)}var frt,zue,Jue,Wue,prt,_rt=gi(()=>{Kue();mN();Jue=0,Wue=0;a(t3r,"v1");prt=t3r});function r3r(t){if(!Um(t))throw TypeError("Invalid UUID");let e,r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}var UF,Xue=gi(()=>{hN();a(r3r,"parse");UF=r3r});function n3r(t){t=unescape(encodeURIComponent(t));let e=[];for(let r=0;r<t.length;++r)e.push(t.charCodeAt(r));return e}function gN(t,e,r){function n(i,s,o,c){if(typeof i=="string"&&(i=n3r(i)),typeof s=="string"&&(s=UF(s)),s.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let u=new Uint8Array(16+i.length);if(u.set(s),u.set(i,s.length),u=r(u),u[6]=u[6]&15|e,u[8]=u[8]&63|128,o){c=c||0;for(let l=0;l<16;++l)o[c+l]=u[l];return o}return qm(u)}a(n,"generateUUID");try{n.name=t}catch{}return n.DNS=i3r,n.URL=a3r,n}var i3r,a3r,Que=gi(()=>{mN();Xue();a(n3r,"stringToBytes");i3r="6ba7b810-9dad-11d1-80b4-00c04fd430c8",a3r="6ba7b811-9dad-11d1-80b4-00c04fd430c8";a(gN,"default")});function s3r(t){return Array.isArray(t)?t=Buffer.from(t):typeof t=="string"&&(t=Buffer.from(t,"utf8")),hrt.default.createHash("md5").update(t).digest()}var hrt,mrt,grt=gi(()=>{hrt=mo(require("crypto"));a(s3r,"md5");mrt=s3r});var o3r,yrt,vrt=gi(()=>{Que();grt();o3r=gN("v3",48,mrt),yrt=o3r});function c3r(t,e,r){t=t||{};let n=t.random||(t.rng||_N)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){r=r||0;for(let i=0;i<16;++i)e[r+i]=n[i];return e}return qm(n)}var brt,xrt=gi(()=>{Kue();mN();a(c3r,"v4");brt=c3r});function u3r(t){return Array.isArray(t)?t=Buffer.from(t):typeof t=="string"&&(t=Buffer.from(t,"utf8")),wrt.default.createHash("sha1").update(t).digest()}var wrt,Ert,Trt=gi(()=>{wrt=mo(require("crypto"));a(u3r,"sha1");Ert=u3r});var l3r,Srt,Art=gi(()=>{Que();Trt();l3r=gN("v5",80,Ert),Srt=l3r});var krt,Nrt=gi(()=>{krt="00000000-0000-0000-0000-000000000000"});function d3r(t){if(!Um(t))throw TypeError("Invalid UUID");return parseInt(t.substr(14,1),16)}var Ort,Irt=gi(()=>{hN();a(d3r,"version");Ort=d3r});var qF={};AN(qF,{NIL:()=>krt,parse:()=>UF,stringify:()=>qm,v1:()=>prt,v3:()=>yrt,v4:()=>brt,v5:()=>Srt,validate:()=>Um,version:()=>Ort});var HF=gi(()=>{_rt();vrt();xrt();Art();Nrt();Irt();hN();mN();Xue()});var Rrt=v((zsn,Crt)=>{"use strict";var f3r=require("events"),p3r=Ktt(),_3r=crt(),h3r=(HF(),NT(qF)),Yue=class extends f3r{static{a(this,"ScheduledTask")}constructor(e,r,n){super(),n||(n={scheduled:!0,recoverMissedExecutions:!1}),this.options=n,this.options.name=this.options.name||h3r.v4(),this._task=new p3r(r),this._scheduler=new _3r(e,n.timezone,n.recoverMissedExecutions),this._scheduler.on("scheduled-time-matched",i=>{this.now(i)}),n.scheduled!==!1&&this._scheduler.start(),n.runOnInit===!0&&this.now("init")}now(e="manual"){let r=this._task.execute(e);this.emit("task-done",r)}start(){this._scheduler.start()}stop(){this._scheduler.stop()}};Crt.exports=Yue});var Lrt=v((Wsn,Prt)=>{var m3r=require("events"),g3r=require("path"),{fork:y3r}=require("child_process"),v3r=(HF(),NT(qF)),b3r=`${__dirname}/daemon.js`,Zue=class extends m3r{static{a(this,"BackgroundScheduledTask")}constructor(e,r,n){super(),n||(n={scheduled:!0,recoverMissedExecutions:!1}),this.cronExpression=e,this.taskPath=r,this.options=n,this.options.name=this.options.name||v3r.v4(),n.scheduled&&this.start()}start(){this.stop(),this.forkProcess=y3r(b3r),this.forkProcess.on("message",r=>{switch(r.type){case"task-done":this.emit("task-done",r.result);break}});let e=this.options;e.scheduled=!0,this.forkProcess.send({type:"register",path:g3r.resolve(this.taskPath),cron:this.cronExpression,options:e})}stop(){this.forkProcess&&this.forkProcess.kill()}pid(){if(this.forkProcess)return this.forkProcess.pid}isRunning(){return!this.forkProcess.killed}};Prt.exports=Zue});var Brt=v((Qsn,Drt)=>{Drt.exports=(global.scheduledTasks||(global.scheduledTasks=new Map),{save:a(t=>{if(!t.options){let e=(HF(),NT(qF));t.options={},t.options.name=e.v4()}global.scheduledTasks.set(t.options.name,t)},"save"),getTasks:a(()=>global.scheduledTasks,"getTasks")})});var Urt=v((Zsn,Frt)=>{"use strict";var x3r=Rrt(),w3r=Lrt(),E3r=$ue(),Mrt=Brt();function T3r(t,e,r){let n=S3r(t,e,r);return Mrt.save(n),n}a(T3r,"schedule");function S3r(t,e,r){return typeof e=="string"?new w3r(t,e,r):new x3r(t,e,r)}a(S3r,"createTask");function A3r(t){try{return E3r(t),!0}catch{return!1}}a(A3r,"validate");function k3r(){return Mrt.getTasks()}a(k3r,"getTasks");Frt.exports={schedule:T3r,validate:A3r,getTasks:k3r}});var Hrt=v((ton,qrt)=>{var N3r=Ke(),O3r=Urt(),ele=class{static{a(this,"Scheduler")}constructor(e,r){this.logger=r||new N3r("Scheduler"),this.gates=e,this.scheduledTasks=new Map,this.pausedTasks=new Map,this.stats={tasksScheduled:0,tasksExecuted:0,tasksSkipped:0,tasksFailed:0,tasksPaused:0,tasksResumed:0}}schedule(e,r){this.scheduledTasks.has(e)&&(this.logger.warn(`Task '${e}' already scheduled, removing old schedule`),this.unschedule(e));let n=O3r.schedule(r.schedule,async()=>{await this.executeTask(e,r)},{scheduled:!1,timezone:"UTC"}),i={start:a(()=>{n.start(),this.logger.info(`Started scheduled task: ${e}`)},"start"),stop:a(()=>{n.stop(),this.logger.info(`Stopped scheduled task: ${e}`)},"stop"),destroy:a(()=>{n.stop(),this.scheduledTasks.delete(e),this.logger.info(`Destroyed scheduled task: ${e}`)},"destroy")};return this.scheduledTasks.set(e,{cronTask:n,controller:i,task:r,scheduledAt:new Date}),this.stats.tasksScheduled++,this.logger.info(`Scheduled task '${e}' with schedule: ${r.schedule}`),i}async executeTask(e,r){try{if(!r.enabled){this.stats.tasksSkipped++,this.logger.debug(`Task '${e}' is disabled, skipping`);return}if(!this.gates.evaluate(r.gate)){this.stats.tasksSkipped++,this.logger.debug(`Task '${e}' gate '${r.gate}' not satisfied, skipping`);return}this.logger.debug(`Executing task: ${e}`);let n=Date.now(),i=await this.executeWithTimeout(r.implementation,r.timeout),s=Date.now()-n;this.stats.tasksExecuted++,this.logger.debug(`Task '${e}' completed in ${s}ms`),this.emit("task_success",{taskId:e,result:i,duration:s})}catch(n){this.stats.tasksFailed++,this.logger.error(`Task '${e}' failed: ${n.message}`),this.emit("task_error",{taskId:e,error:n})}}async executeWithTimeout(e,r=3e4,...n){return new Promise((i,s)=>{let o=setTimeout(()=>{s(new Error(`Task execution timed out after ${r}ms`))},r);Promise.resolve(e(...n)).then(c=>{clearTimeout(o),i(c)}).catch(c=>{clearTimeout(o),s(c)})})}unschedule(e){let r=this.scheduledTasks.get(e);r&&(r.controller.destroy(),this.logger.info(`Unscheduled task: ${e}`)),this.pausedTasks.forEach((n,i)=>{n.delete(e)&&n.size===0&&this.pausedTasks.delete(i)})}start(e){let r=this.scheduledTasks.get(e);r&&r.controller.start()}stop(e){let r=this.scheduledTasks.get(e);r&&r.controller.stop()}startAll(){this.scheduledTasks.forEach(e=>{e.controller.start()}),this.logger.info(`Started ${this.scheduledTasks.size} scheduled tasks`)}stopAll(){this.scheduledTasks.forEach(e=>{e.controller.stop()}),this.logger.info(`Stopped ${this.scheduledTasks.size} scheduled tasks`)}getTaskInfo(e){let r=this.scheduledTasks.get(e);return r?{taskId:e,schedule:r.task.schedule,gate:r.task.gate,enabled:r.task.enabled,scheduledAt:r.scheduledAt}:null}getAllTasksInfo(){return Array.from(this.scheduledTasks.keys()).map(e=>this.getTaskInfo(e))}getStats(){return{...this.stats,scheduledTasks:this.scheduledTasks.size,successRate:this.stats.tasksExecuted>0?`${(this.stats.tasksExecuted/(this.stats.tasksExecuted+this.stats.tasksFailed)*100).toFixed(2)}%`:"0%"}}emit(e,r){this.logger.debug(`Scheduler event: ${e}`,r)}async pauseTasksByGate(e){let r=[];if(this.scheduledTasks.forEach((i,s)=>{i.task.gate===e&&r.push({taskId:s,scheduledTask:i})}),r.length===0){this.logger.debug(`No tasks found with gate '${e}' to pause`);return}this.pausedTasks.has(e)||this.pausedTasks.set(e,new Set);let n=this.pausedTasks.get(e);r.forEach(({taskId:i,scheduledTask:s})=>{try{s.controller.stop(),n.add(i),this.stats.tasksPaused++,this.logger.debug(`Paused task '${i}' (gate: ${e})`)}catch(o){this.logger.error(`Error pausing task '${i}': ${o.message}`)}}),this.logger.info(`Paused ${r.length} tasks with gate '${e}'`)}async resumeTasksByGate(e){let r=this.pausedTasks.get(e);if(!r||r.size===0){this.logger.debug(`No paused tasks found with gate '${e}' to resume`);return}let n=[];r.forEach(i=>{let s=this.scheduledTasks.get(i);s&&n.push({taskId:i,scheduledTask:s})}),n.forEach(({taskId:i,scheduledTask:s})=>{try{s.controller.start(),r.delete(i),this.stats.tasksResumed++,this.logger.debug(`Resumed task '${i}' (gate: ${e})`)}catch(o){this.logger.error(`Error resuming task '${i}': ${o.message}`)}}),r.size===0&&this.pausedTasks.delete(e),this.logger.info(`Resumed ${n.length} tasks with gate '${e}'`)}getPausedTasksByGate(e){let r=this.pausedTasks.get(e);return r?Array.from(r):[]}isTaskPaused(e){for(let r of this.pausedTasks.values())if(r.has(e))return!0;return!1}cleanup(){this.logger.info("Cleaning up scheduler...");let e=Array.from(this.scheduledTasks.keys());e.forEach(r=>{let n=this.scheduledTasks.get(r);if(n)try{n.controller.stop(),this.scheduledTasks.delete(r),this.logger.debug(`Cleaned up scheduled task: ${r}`)}catch(i){this.logger.error(`Error cleaning up task ${r}: ${i.message}`)}}),this.pausedTasks.clear(),this.logger.info(`Scheduler cleanup completed. Removed ${e.length} scheduled tasks`)}};qrt.exports=ele});var Grt=v((non,$rt)=>{var I3r=require("node:events"),{sleep:jrt}=jS(),{WALLET_STATE_CODE:C3r}=rt(),tle=class extends I3r{static{a(this,"StateManager")}constructor(e,r,n){super(),this.logger=n,this.subscriptionManager=e,this.eventBus=r,this.currentState=null,this.isMonitoring=!1,this.stateSubscription=null,this.recoveryInterval=null,this.linkCache=Oo(),this.recoveryStats={totalNodeStops:0,totalRecoveries:0,totalDowntimeSeconds:0,averageRecoveryAttempts:0,longestDowntimeSeconds:0,shortestDowntimeSeconds:1/0,lastNodeStopTime:null,lastRecoveryTime:null,recoveryHistory:[]},this.currentRgbState=null,this.rgbStatePollingInterval=null,this.rgbPollingIntervalMs=1e4,this.recoveryInterval=null,this.recoveryCheckIntervalMs=1e4,this.isInRecoveryMode=!1,this.lndRetryTimeout=null,this.subscriptionRetryTimeout=null}async startStateMonitoring(){if(this.isMonitoring){this.logger.warn("State monitoring already active");return}this.isMonitoring=!0,this.startRgbStatePolling(),this.startLndStateMonitoring(),this.logger.info("State monitoring started"),this.emit("monitoring_started")}async startLndStateMonitoring(){let r=0,n=a(async()=>{if(!this.isMonitoring)return this.logger.debug("Skipping LND state monitoring attempt because monitoring stopped"),!1;try{let{getWalletService:i}=Qi(),{walletStateService:s}=await i();return this.walletStateService=s,this.stateSubscription=this.walletStateService.subscribeState(),this.stateSubscription.on("data",async o=>{await this.handleStateChange(o)}),this.stateSubscription.on("error",o=>{this.handleStateError(o)}),this.logger.info("LND state monitoring started successfully"),!0}catch(i){return r++,(i.message.includes("Wallet is not initialized yet")||i.message.includes("connection")||i.message.includes("UNAVAILABLE")||i.message.includes("ECONNREFUSED"))&&(this.logger.warn(`LND not ready yet (attempt ${r}): ${i.message}`),this.isMonitoring&&(this.clearLndRetryTimeout(),this.lndRetryTimeout=setTimeout(()=>{this.lndRetryTimeout=null,n()},5e3))),i.message.includes("Wallet is not initialized yet")?this.logger.info(`Failed to start LND state monitoring after ${r} attempts: ${i.message}`):this.logger.error(`Failed to start LND state monitoring after ${r} attempts: ${i.message}`),this.emit("lnd_monitoring_error",i),!1}},"tryStartLndMonitoring");this.clearLndRetryTimeout(),await n()}async handleStateChange(e){let r=this.currentState;this.currentState=e.state,this.logger.info(`State changed from ${r} to ${e.state}`),Oo().set("walletState",e.state),this.emit("state_changed",e),e.state===C3r.SERVER_ACTIVE?await this.handleServerActive():await this.handleServerInactive()}async handleServerActive(){try{this.logger.info("Server became active, starting subscriptions and services"),await jrt(5*1e3),await this.triggerMacaroonBaking(),await jrt(3*1e3),await this.startSubscriptionsWithRetry(),this.setupSubscriptionHandlers(),this.logger.info("Server active state handling completed")}catch(e){this.logger.error(`Error handling server active state: ${e.message}`),this.emit("state_error",e)}}async triggerMacaroonBaking(){let e=require("node:fs"),{getConfigFilePath:r}=HS();this.logger.info("Triggering macaroon baking..."),this.eventBus.emit("bakeTapdMacaroon");let{taprootMacaroonPath:n}=r(),i=3e4,s=1e3,o=Date.now();for(;Date.now()-o<i;){if(e.existsSync(n)){this.logger.info("Macaroon file detected, baking completed successfully");return}await new Promise(c=>setTimeout(c,s))}this.logger.warn("Macaroon baking timeout - proceeding anyway")}async startSubscriptionsWithRetry(){let n=0,i=a(async()=>{if(!this.isMonitoring)return this.logger.debug("Skipping subscription retry because monitoring stopped"),!1;try{return await this.subscriptionManager.startSubscriptions(),this.logger.info("LND subscriptions started successfully"),this.clearSubscriptionRetryTimeout(),!0}catch(s){return n++,s.message.includes("not available")&&n<=5&&(this.logger.warn(`LND services not ready yet (attempt ${n}/5): ${s.message}`),n<=5)?(this.isMonitoring&&(this.clearSubscriptionRetryTimeout(),this.subscriptionRetryTimeout=setTimeout(()=>{this.subscriptionRetryTimeout=null,i()},2e3)),!1):(this.logger.error(`Failed to start subscriptions after 5 attempts: ${s.message}`),!1)}},"tryStartSubscriptions");await i()}async handleServerInactive(){this.logger.info("Server became inactive, stopping subscriptions"),this.clearSubscriptionRetryTimeout(),await this.subscriptionManager.stopSubscriptions(),this.clearSubscriptionHandlers()}setupSubscriptionHandlers(){this.clearSubscriptionHandlers(),this.subscriptionManager.on("invoice_update",e=>{this.handleInvoiceUpdate(e)}),this.subscriptionManager.on("payment_update",e=>{this.handlePaymentUpdate(e)}),this.subscriptionManager.on("taproot_receive_event",e=>{this.handleTaprootReceiveEvent(e)}),this.subscriptionManager.on("taproot_send_event",e=>{this.handleTaprootSendEvent(e)}),this.subscriptionManager.on("invoice_error",e=>{this.logger.error(`Invoice subscription error: ${e.message}`),this.emit("subscription_error",{type:"invoice",error:e})}),this.subscriptionManager.on("payment_error",e=>{this.logger.error(`Payment subscription error: ${e.message}`),this.emit("subscription_error",{type:"payment",error:e})}),this.subscriptionManager.on("taproot_receive_error",e=>{this.logger.error(`Taproot receive error: ${e.message}`),this.emit("subscription_error",{type:"taproot_receive",error:e})}),this.subscriptionManager.on("taproot_send_error",e=>{this.logger.error(`Taproot send error: ${e.message}`),this.emit("subscription_error",{type:"taproot_send",error:e})})}clearSubscriptionHandlers(){this.subscriptionManager.removeAllListeners("invoice_update"),this.subscriptionManager.removeAllListeners("payment_update"),this.subscriptionManager.removeAllListeners("taproot_receive_event"),this.subscriptionManager.removeAllListeners("taproot_send_event"),this.subscriptionManager.removeAllListeners("invoice_error"),this.subscriptionManager.removeAllListeners("payment_error"),this.subscriptionManager.removeAllListeners("taproot_receive_error"),this.subscriptionManager.removeAllListeners("taproot_send_error")}handleInvoiceUpdate(e){try{Rue()(e)}catch(r){this.logger.error(`Error handling invoice update: ${r.message}`)}}handlePaymentUpdate(e){try{Pue()(e)}catch(r){this.logger.error(`Error handling payment update: ${r.message}`)}}async handleTaprootReceiveEvent(e){try{let{handleTaprootReceiveEvent:r}=BF();await r(e)}catch(r){this.logger.error(`Error handling Taproot receive event: ${r.message}`)}}async handleTaprootSendEvent(e){try{let{handleTaprootSendEvent:r}=BF();await r(e)}catch(r){this.logger.error(`Error handling Taproot send event: ${r.message}`)}}async handleStateError(e){this.isNodeStoppedError(e)?await this.handleNodeStopped(e):this.isConnectionError(e)?this.handleConnectionError(e):(this.logger.error(`State monitoring error: ${e.message}`),this.emit("state_error",e))}isNodeStoppedError(e){return["UNAVAILABLE","ECONNREFUSED","connection closed","socket hang up","ENOTFOUND","network is unreachable"].some(n=>e.message.includes(n))}isConnectionError(e){return e.message.includes("Wallet is not initialized yet")||e.message.includes("connection")||e.message.includes("timeout")}getErrorType(e){if(!e)return"UNKNOWN";let r=e.message||"",n=e.code||"";return r.includes("UNAVAILABLE")||n===14?"CONNECTION_UNAVAILABLE":r.includes("ECONNREFUSED")||r.includes("connection refused")?"CONNECTION_REFUSED":r.includes("ENOTFOUND")||r.includes("not found")?"DNS_ERROR":r.includes("timeout")||r.includes("TIMEOUT")?"TIMEOUT":r.includes("socket hang up")?"SOCKET_HANGUP":r.includes("network is unreachable")?"NETWORK_UNREACHABLE":r.includes("connection closed")?"CONNECTION_CLOSED":r.includes("shutting down")||r.includes("server shutting down")?"SERVER_SHUTDOWN":r.includes("Cancelled")||n===1?"GRPC_CANCELLED":r.includes("DeadlineExceeded")||n===4?"GRPC_DEADLINE_EXCEEDED":r.includes("NotFound")||n===5?"GRPC_NOT_FOUND":r.includes("PermissionDenied")||n===7?"GRPC_PERMISSION_DENIED":r.includes("Unauthenticated")||n===16?"GRPC_UNAUTHENTICATED":r.includes("Wallet is not initialized")?"WALLET_NOT_INITIALIZED":r.includes("not available")?"SERVICE_NOT_AVAILABLE":r.includes("macaroon")?"MACAROON_ERROR":n?`GRPC_CODE_${n}`:"UNKNOWN"}async getWalletState(){try{let{getWalletState:e}=Qi();return await e()}catch(e){this.logger.debug(`Failed to get wallet state: ${e.message}`);let{WALLET_STATE_CODE:r}=rt();return r.WAITING_TO_START}}async handleNodeStopped(e){let r=new Date().toISOString(),n=this.linkCache.get("walletState");this.recoveryStats.totalNodeStops++,this.recoveryStats.lastNodeStopTime=r,this.logger.warn(`\u{1F534} NODE STOPPED DETECTED (#${this.recoveryStats.totalNodeStops})`),this.logger.warn(`\u251C\u2500 Error: ${e.message}`),this.logger.warn(`\u251C\u2500 Error Code: ${e.code||"N/A"}`),this.logger.warn(`\u251C\u2500 Error Type: ${this.getErrorType(e)}`),this.logger.warn(`\u251C\u2500 Previous State: ${n}`),this.logger.warn(`\u2514\u2500 Timestamp: ${r}`);try{let{WALLET_STATE_CODE:i}=rt();this.linkCache.set("walletState",i.WAITING_TO_START),this.logger.info("\u{1F4DD} Updated walletState cache to WAITING_TO_START"),this.logger.info("\u{1F9F9} Starting resource cleanup..."),await this.handleServerInactive(),this.logger.info("\u2705 Resource cleanup completed"),this.logger.info("\u{1F504} Starting connection recovery monitoring..."),this.startConnectionRecoveryCheck(),this.emit("node_stopped",{error:e,previousState:n,timestamp:r,errorCode:e.code,errorType:this.getErrorType(e),nodeStopCount:this.recoveryStats.totalNodeStops}),this.logger.info("\u2705 Node stopped handling completed successfully")}catch(i){this.logger.error(`\u274C Error during node stopped handling: ${i.message}`),this.logger.error(`Stack trace: ${i.stack}`),this.emit("node_stopped_error",i)}}handleConnectionError(e){this.logger.warn(`State monitoring connection issue: ${e.message}`),this.emit("connection_error",e)}startConnectionRecoveryCheck(){if(this.recoveryInterval){this.logger.warn("Connection recovery check already active");return}let e=new Date,r=0;this.logger.info("\u{1F504} Starting connection recovery monitoring..."),this.logger.info("\u251C\u2500 Check interval: 10 seconds"),this.logger.info(`\u2514\u2500 Started at: ${e.toISOString()}`),this.recoveryInterval=setInterval(async()=>{r++;let i=Math.floor((new Date-e)/6e4);this.logger.debug(`\u{1F50D} Recovery attempt #${r} (${i}m elapsed)`);try{let s=await this.getWalletState(),{WALLET_STATE_CODE:o}=rt();if(s&&s!==o.WAITING_TO_START){let c=new Date,u=Math.floor((c-e)/1e3);this.logger.info("\u{1F7E2} NODE RECOVERED!"),this.logger.info(`\u251C\u2500 Wallet state: ${s}`),this.logger.info(`\u251C\u2500 Recovery attempts: ${r}`),this.logger.info(`\u251C\u2500 Total downtime: ${u}s`),this.logger.info(`\u2514\u2500 Recovered at: ${c.toISOString()}`),this.stopConnectionRecoveryCheck(),await this.handleNodeRecovered(s,{attemptCount:r,downtimeSeconds:u,startTime:e.toISOString(),recoveryTime:c.toISOString()})}}catch(s){this.logger.debug(`\u274C Recovery attempt #${r} failed: ${s.message}`),r%6===0&&this.logger.info(`\u23F3 Still recovering... ${r} attempts, ${i}m elapsed`)}},1e4)}stopConnectionRecoveryCheck(){this.recoveryInterval&&(clearInterval(this.recoveryInterval),this.recoveryInterval=null,this.logger.info("Connection recovery monitoring stopped"))}async handleNodeRecovered(e,r={}){let n=new Date().toISOString(),i=r.downtimeSeconds||0,s=r.attemptCount||0;this.recoveryStats.totalRecoveries++,this.recoveryStats.lastRecoveryTime=n,this.recoveryStats.totalDowntimeSeconds+=i,i>0&&(i>this.recoveryStats.longestDowntimeSeconds&&(this.recoveryStats.longestDowntimeSeconds=i),i<this.recoveryStats.shortestDowntimeSeconds&&(this.recoveryStats.shortestDowntimeSeconds=i)),this.recoveryStats.totalRecoveries>0&&(this.recoveryStats.averageRecoveryAttempts=(this.recoveryStats.averageRecoveryAttempts*(this.recoveryStats.totalRecoveries-1)+s)/this.recoveryStats.totalRecoveries),this.recoveryStats.recoveryHistory.push({timestamp:n,walletState:e,attemptCount:s,downtimeSeconds:i,errorType:r.errorType}),this.recoveryStats.recoveryHistory.length>10&&this.recoveryStats.recoveryHistory.shift(),this.logger.info("\u{1F7E2} NODE RECOVERY PROCESS STARTING"),this.logger.info(`\u251C\u2500 Recovery #${this.recoveryStats.totalRecoveries}`),this.logger.info(`\u251C\u2500 Recovered state: ${e}`),this.logger.info(`\u251C\u2500 Recovery attempts: ${s}`),this.logger.info(`\u251C\u2500 Downtime: ${i}s`),this.logger.info(`\u251C\u2500 Avg recovery attempts: ${this.recoveryStats.averageRecoveryAttempts.toFixed(1)}`),this.logger.info(`\u2514\u2500 Recovery timestamp: ${n}`);try{this.stopConnectionRecoveryCheck(),this.logger.info("\u2705 Recovery monitoring stopped"),this.linkCache.set("walletState",e),this.logger.info(`\u{1F4DD} Updated walletState cache to: ${e}`),this.logger.info("\u{1F504} Restarting LND state monitoring..."),await this.startLndStateMonitoring(),this.logger.info("\u2705 LND state monitoring restarted"),this.emit("node_recovered",{timestamp:n,walletState:e,recoveryStats:{attemptCount:s,downtimeSeconds:i,startTime:r.startTime,recoveryTime:r.recoveryTime||n,totalRecoveries:this.recoveryStats.totalRecoveries,averageRecoveryAttempts:this.recoveryStats.averageRecoveryAttempts}}),this.logger.info("\u{1F389} NODE RECOVERY COMPLETED SUCCESSFULLY"),this.logger.info("\u2514\u2500 System is now fully operational")}catch(o){this.logger.error(`\u274C ERROR DURING NODE RECOVERY: ${o.message}`),this.logger.error(`Stack trace: ${o.stack}`),this.logger.warn("\u{1F504} Restarting recovery monitoring due to error..."),this.startConnectionRecoveryCheck(),this.emit("node_recovery_error",{error:o,timestamp:n,recoveryStats:r})}}getRecoveryStats(){let e=this.recoveryStats.totalRecoveries>0?this.recoveryStats.totalDowntimeSeconds/this.recoveryStats.totalRecoveries:0;return{...this.recoveryStats,averageDowntimeSeconds:e,shortestDowntimeSeconds:this.recoveryStats.shortestDowntimeSeconds===1/0?0:this.recoveryStats.shortestDowntimeSeconds,uptime:{totalNodeStops:this.recoveryStats.totalNodeStops,totalRecoveries:this.recoveryStats.totalRecoveries,successRate:this.recoveryStats.totalNodeStops>0?`${(this.recoveryStats.totalRecoveries/this.recoveryStats.totalNodeStops*100).toFixed(2)}%`:"100%"}}}resetRecoveryStats(){this.logger.info("\u{1F504} Resetting recovery statistics..."),this.recoveryStats={totalNodeStops:0,totalRecoveries:0,totalDowntimeSeconds:0,averageRecoveryAttempts:0,longestDowntimeSeconds:0,shortestDowntimeSeconds:1/0,lastNodeStopTime:null,lastRecoveryTime:null,recoveryHistory:[]},this.logger.info("\u2705 Recovery statistics reset completed")}async stopStateMonitoring(){if(this.isMonitoring)try{this.stateSubscription&&(this.stateSubscription.destroy(),this.stateSubscription=null),this.stopRgbStatePolling(),this.stopConnectionRecoveryCheck(),this.clearRetryTimeouts(),this.isMonitoring=!1,this.logger.info("State monitoring stopped"),this.emit("monitoring_stopped")}catch(e){throw this.logger.error(`Error stopping state monitoring: ${e.message}`),e}}startRgbStatePolling(){if(this.rgbStatePollingInterval){this.logger.warn("RGB state polling already active");return}this.logger.info(`Starting RGB state polling (interval: ${this.rgbPollingIntervalMs}ms)`),this.checkRgbState(),this.rgbStatePollingInterval=setInterval(()=>{this.checkRgbState()},this.rgbPollingIntervalMs)}stopRgbStatePolling(){this.rgbStatePollingInterval&&(clearInterval(this.rgbStatePollingInterval),this.rgbStatePollingInterval=null,this.logger.info("RGB state polling stopped"))}clearLndRetryTimeout(){this.lndRetryTimeout&&(clearTimeout(this.lndRetryTimeout),this.lndRetryTimeout=null)}clearSubscriptionRetryTimeout(){this.subscriptionRetryTimeout&&(clearTimeout(this.subscriptionRetryTimeout),this.subscriptionRetryTimeout=null)}clearRetryTimeouts(){this.clearLndRetryTimeout(),this.clearSubscriptionRetryTimeout()}async checkRgbState(){try{let{getNodeState:e}=L3(),r=await e();r.state!==this.currentRgbState&&await this.handleRgbStateChange(r)}catch(e){this.logger.error(`Error checking RGB state: ${e.message}`)}}async handleRgbStateChange(e){let r=this.currentRgbState;this.currentRgbState=e.state,this.logger.info(`RGB state changed from ${r} to ${e.state}`),Oo().set("rgbState",e.state),this.emit("rgb_state_changed",e),e.state===4?await this.handleRgbActive():await this.handleRgbInactive()}async handleRgbActive(){this.logger.info("RGB became active")}async handleRgbInactive(){this.logger.info("RGB became inactive")}getStatus(){return{isMonitoring:this.isMonitoring,currentState:this.currentState,hasStateSubscription:!!this.stateSubscription,invoicePollingActive:!!this.invoicePollingInterval,subscriptionManager:this.subscriptionManager?.getStatus()||null,currentRgbState:this.currentRgbState,rgbPollingActive:!!this.rgbStatePollingInterval,rgbPollingInterval:this.rgbPollingIntervalMs}}cleanup(){this.logger.info("Cleaning up state manager..."),this.stopStateMonitoring(),this.clearRetryTimeouts(),this.removeAllListeners(),this.logger.info("State manager cleanup completed")}};$rt.exports=tle});var Krt=v((aon,Vrt)=>{var R3r=require("node:events"),P3r=Ke(),rle=class extends R3r{static{a(this,"SubscriptionManager")}constructor(e,r){super(),this.logger=r||new P3r("SubscriptionManager"),this.gates=e,this.subscriptions=new Map,this.pausedSubscriptions=new Map,this.services={lightning:null,router:null,taproot:null},this.isActive=!1,this.stats={subscriptionsStarted:0,subscriptionsStopped:0,subscriptionsPaused:0,subscriptionsResumed:0,subscriptionErrors:0}}async initializeServices(){try{let{getLightningService:e,getRouterService:r,getTprService:n}=Qi(),i=e(),s=r(),o=n();if(!i||!s||!o)throw new Error("One or more LND services are not available");this.services.lightning=i,this.services.router=s,this.services.taproot=o,this.logger.info("LND services initialized successfully")}catch(e){throw this.logger.error(`Failed to initialize LND services: ${e.message}`),e}}async startSubscriptions(){if(!this.gates.evaluate("lndActive")){this.logger.warn("LND not active, cannot start subscriptions");return}if(this.isActive){this.logger.warn("Subscriptions already active");return}try{await this.initializeServices(),await this.startInvoiceSubscription(),await this.startPaymentSubscription(),await this.startTaprootSubscriptions(),this.isActive=!0,this.stats.subscriptionsStarted+=this.subscriptions.size,this.logger.info("All LND subscriptions started"),this.emit("subscriptions_started")}catch(e){throw this.logger.error(`Failed to start subscriptions: ${e.message}`),this.emit("subscriptions_error",e),e}}async stopSubscriptions(){if(!this.isActive)return;this.logger.info("Stopping all LND subscriptions...");let e=Array.from(this.subscriptions.keys());e.forEach(r=>this.cancelSubscription(r)),this.isActive=!1,this.stats.subscriptionsStopped+=e.length,this.logger.info("All LND subscriptions stopped"),this.emit("subscriptions_stopped")}async startInvoiceSubscription(){if(!this.services.lightning)throw new Error("Lightning service not available");let e=this.services.lightning.subscribeInvoices({add_index:0,settle_index:0});e.on("data",r=>{this.logger.info(`Invoice update: add_index=${r.add_index}, state=${r.state}`),this.emit("invoice_update",r)}),e.on("error",r=>{this.stats.subscriptionErrors++,this.logger.error(`Invoice subscription error: ${r.message}`),this.emit("invoice_error",r)}),e.on("end",()=>{this.logger.warn("Invoice subscription ended"),this.emit("invoice_ended")}),this.subscriptions.set("invoice",e),this.logger.info("Invoice subscription started")}async startPaymentSubscription(){if(!this.services.router)throw new Error("Router service not available");let e=this.services.router.trackPayments({no_inflight_updates:!1});e.on("data",r=>{this.logger.debug(`Payment update: ${r.payment_hash}`),this.emit("payment_update",r)}),e.on("error",r=>{this.stats.subscriptionErrors++,this.logger.error(`Payment subscription error: ${r.message}`),this.emit("payment_error",r)}),this.subscriptions.set("payment",e),this.logger.info("Payment subscription started")}async startTaprootSubscriptions(){if(!this.services.taproot)throw new Error("Taproot service not available");let e=this.services.taproot.subscribeReceiveEvents({});e.on("data",n=>{this.logger.debug("Taproot receive event received"),this.emit("taproot_receive_event",n)}),e.on("error",n=>{this.logger.error(`Taproot receive subscription error: ${n.message}`),this.emit("taproot_receive_error",n)}),this.subscriptions.set("taproot_receive",e);let r=this.services.taproot.subscribeSendEvents({});r.on("data",n=>{this.logger.debug(`Taproot send event: ${JSON.stringify(n)}`),this.emit("taproot_send_event",n)}),r.on("error",n=>{this.stats.subscriptionErrors++,this.logger.error(`Taproot send subscription error: ${n.message}`),this.emit("taproot_send_error",n)}),this.subscriptions.set("taproot_send",r),this.logger.info("Taproot Asset subscriptions started")}cancelSubscription(e){let r=this.subscriptions.get(e);r&&(typeof r.destroy=="function"?r.destroy():typeof r.cancel=="function"&&r.cancel(),this.subscriptions.delete(e),this.pausedSubscriptions.delete(e),this.logger.info(`Cancelled subscription: ${e}`))}getStatus(){return{isActive:this.isActive,subscriptionCount:this.subscriptions.size,activeSubscriptions:Array.from(this.subscriptions.keys()),servicesAvailable:{lightning:!!this.services.lightning,router:!!this.services.router,taproot:!!this.services.taproot}}}async pauseSubscriptionsByGate(e){this.logger.info(`Pausing subscriptions for gate: ${e}`);let r=[];e==="lndActive"&&this.subscriptions.forEach((n,i)=>{r.push({name:i,subscription:n})});for(let{name:n,subscription:i}of r)try{typeof i.destroy=="function"?i.destroy():typeof i.cancel=="function"&&i.cancel(),this.pausedSubscriptions.set(n,{gate:e,pausedAt:new Date,type:this.getSubscriptionType(n)}),this.subscriptions.delete(n),this.stats.subscriptionsPaused++,this.logger.info(`Paused subscription: ${n}`)}catch(s){this.logger.error(`Failed to pause subscription ${n}: ${s.message}`)}this.logger.info(`Paused ${r.length} subscriptions for gate: ${e}`)}async resumeSubscriptionsByGate(e){this.logger.info(`Resuming subscriptions for gate: ${e}`);let r=[];this.pausedSubscriptions.forEach((n,i)=>{n.gate===e&&r.push({name:i,pausedInfo:n})});for(let{name:n,pausedInfo:i}of r)try{await this.restartSubscription(n,i.type),this.pausedSubscriptions.delete(n),this.stats.subscriptionsResumed++,this.logger.info(`Resumed subscription: ${n}`)}catch(s){this.logger.error(`Failed to resume subscription ${n}: ${s.message}`)}this.logger.info(`Resumed ${r.length} subscriptions for gate: ${e}`)}getSubscriptionType(e){return e==="invoice"?"invoice":e==="payment"?"payment":e.startsWith("taproot_")?"taproot":"unknown"}async restartSubscription(e,r){switch(r){case"invoice":await this.startInvoiceSubscription();break;case"payment":await this.startPaymentSubscription();break;case"taproot":await this.startTaprootSubscriptions();break;default:throw new Error(`Unknown subscription type: ${r}`)}}getPausedSubscriptionsInfo(){let e={};return this.pausedSubscriptions.forEach((r,n)=>{let i=r.gate;e[i]||(e[i]=[]),e[i].push({name:n,pausedAt:r.pausedAt,type:r.type})}),{totalPaused:this.pausedSubscriptions.size,pausedByGate:e,stats:{subscriptionsPaused:this.stats.subscriptionsPaused,subscriptionsResumed:this.stats.subscriptionsResumed}}}cleanup(){this.logger.info("Cleaning up subscription manager..."),this.stopSubscriptions(),this.pausedSubscriptions.clear(),this.removeAllListeners(),this.logger.info("Subscription manager cleanup completed")}};Vrt.exports=rle});var Jrt=v((oon,zrt)=>{var L3r=Ke(),nle=class{static{a(this,"TaskRegistry")}constructor(e={}){this.logger=new L3r("TaskRegistry"),this.tasks=new Map,this.loadTasks(e)}loadTasks(e){Object.entries(e).forEach(([r,n])=>{this.registerTask(r,n)}),this.logger.info(`Loaded ${this.tasks.size} tasks`)}registerTask(e,r){let n=this.validateTask(r);if(!n.valid)throw new Error(`Invalid task definition for '${e}': ${n.errors.join(", ")}`);let i={enabled:!0,maxRetries:3,timeout:3e4,priority:5,...r,id:e};this.tasks.set(e,i),this.logger.debug(`Registered task: ${e}`)}getTask(e){return this.tasks.get(e)||null}getAllTasks(){return new Map(this.tasks)}getTasksByType(e){let r=new Map;return this.tasks.forEach((n,i)=>{n.type===e&&r.set(i,n)}),r}getEnabledTasks(){let e=new Map;return this.tasks.forEach((r,n)=>{r.enabled&&e.set(n,r)}),e}getTasksByGate(e){let r=new Map;return this.tasks.forEach((n,i)=>{n.gate===e&&r.set(i,n)}),r}setTaskEnabled(e,r){let n=this.tasks.get(e);n&&(n.enabled=r,this.logger.info(`Task '${e}' ${r?"enabled":"disabled"}`))}updateTask(e,r){let n=this.tasks.get(e);n&&(Object.assign(n,r),this.logger.info(`Updated task '${e}'`))}validateTask(e){let r=[];return e.type?["cron","event"].includes(e.type)||r.push("Task type must be 'cron' or 'event'"):r.push("Task type is required"),(!e.implementation||typeof e.implementation!="function")&&r.push("Task implementation must be a function"),e.type==="cron"&&!e.schedule&&r.push("Cron tasks must have a schedule"),e.type==="event"&&!e.event&&r.push("Event tasks must specify an event name"),e.gate||r.push("Task must specify a gate"),e.maxRetries&&(typeof e.maxRetries!="number"||e.maxRetries<0)&&r.push("maxRetries must be a non-negative number"),e.timeout&&(typeof e.timeout!="number"||e.timeout<=0)&&r.push("timeout must be a positive number"),{valid:r.length===0,errors:r}}getStats(){let e={totalTasks:this.tasks.size,enabledTasks:0,cronTasks:0,eventTasks:0,gateDistribution:{}};return this.tasks.forEach(r=>{r.enabled&&e.enabledTasks++,r.type==="cron"&&e.cronTasks++,r.type==="event"&&e.eventTasks++,e.gateDistribution[r.gate]=(e.gateDistribution[r.gate]||0)+1}),e}};zrt.exports=nle});var Xrt=v((uon,Wrt)=>{var D3r=require("node:events"),jF=Ke(),B3r=jtt(),M3r=Gtt(),F3r=Hrt(),U3r=Grt(),q3r=Krt(),H3r=Jrt(),ile=class extends D3r{static{a(this,"JobManager")}constructor(e={}){super(),this.logger=new jF("JobManager"),this.options={dryRun:!0,...e},this.gates=null,this.taskRegistry=null,this.eventBus=null,this.scheduler=null,this.subscriptionManager=null,this.stateManager=null,this.isInitialized=!1,this.isRunning=!1,this.isShuttingDown=!1,this.stats={initializationTime:null,startTime:null,tasksRegistered:0,eventsRegistered:0}}async initialize(e,r){if(this.isInitialized){this.logger.warn("JobManager already initialized");return}try{this.logger.info("Initializing JobManager...");let n=Date.now();this.gates=new M3r(r),this.taskRegistry=new H3r(e),this.eventBus=new B3r,this.scheduler=new F3r(this.gates,new jF("Scheduler")),this.subscriptionManager=new q3r(this.gates,new jF("SubscriptionManager")),this.stateManager=new U3r(this.subscriptionManager,this.eventBus,new jF("StateManager")),await this.registerEventHandlers(),await this.scheduleCronTasks(),this.isInitialized=!0,this.stats.initializationTime=Date.now()-n,this.stats.tasksRegistered=this.taskRegistry.getAllTasks().size,this.stats.eventsRegistered=this.eventBus.handlers.size,this.logger.info(`JobManager initialized successfully in ${this.stats.initializationTime}ms`),this.logger.info(`Registered ${this.stats.tasksRegistered} tasks and ${this.stats.eventsRegistered} event handlers`),this.options.dryRun&&this.logger.warn("JobManager is running in DRY-RUN mode - tasks will not execute")}catch(n){throw this.logger.error(`Failed to initialize JobManager: ${n.message}`),n}}async registerEventHandlers(){this.taskRegistry.getTasksByType("event").forEach((r,n)=>{if(!r.enabled){this.logger.debug(`Event task '${n}' is disabled, skipping registration`);return}let i=a(async(...s)=>{try{if(!this.gates.evaluate(r.gate)){this.logger.debug(`Event task '${n}' gate '${r.gate}' not satisfied, skipping`);return}if(this.options.dryRun){this.logger.info(`[DRY-RUN] Would execute event task: ${n}`);return}this.logger.debug(`Executing event task: ${n}`);let o=Date.now(),c=await this.executeWithTimeout(r.implementation,r.timeout,...s),u=Date.now()-o;return this.logger.debug(`Event task '${n}' completed in ${u}ms`),this.emit("task_success",{taskId:n,result:c,duration:u}),c}catch(o){throw this.logger.error(`Event task '${n}' failed: ${o.message}`),this.emit("task_error",{taskId:n,error:o}),o}},"wrappedHandler");this.eventBus.register(r.event,i),this.logger.debug(`Registered event handler for '${r.event}' (task: ${n})`)})}async scheduleCronTasks(){this.taskRegistry.getTasksByType("cron").forEach((r,n)=>{if(!r.enabled){this.logger.debug(`Cron task '${n}' is disabled, skipping scheduling`);return}let s={...r,implementation:a(async()=>{if(this.options.dryRun){this.logger.info(`[DRY-RUN] Would execute cron task: ${n}`);return}return await r.implementation()},"wrappedImplementation")};this.scheduler.schedule(n,s),this.logger.debug(`Scheduled cron task '${n}' with schedule: ${r.schedule}`)})}async start(){if(!this.isInitialized)throw new Error("JobManager must be initialized before starting");if(this.isRunning){this.logger.warn("JobManager already running");return}try{this.logger.info("Starting JobManager..."),this.scheduler.startAll(),this.setupStateManagerListeners(),await this.stateManager.startStateMonitoring(),this.isRunning=!0,this.stats.startTime=Date.now(),this.logger.info("JobManager started successfully"),this.emit("started")}catch(e){throw this.logger.error(`Failed to start JobManager: ${e.message}`),e}}async stop(){if(!this.isRunning){this.logger.warn("JobManager not running");return}try{this.logger.info("Stopping JobManager..."),this.scheduler.stopAll(),this.stateManager.stopStateMonitoring(),this.isRunning=!1,this.logger.info("JobManager stopped successfully"),this.emit("stopped")}catch(e){throw this.logger.error(`Failed to stop JobManager: ${e.message}`),e}}setupStateManagerListeners(){this.stateManager.on("node_stopped",async e=>{await this.handleNodeStopped(e)}),this.stateManager.on("node_recovered",async e=>{await this.handleNodeRecovered(e)}),this.stateManager.on("state_error",e=>{this.logger.error(`StateManager error: ${e.message}`),this.emit("state_manager_error",e)}),this.stateManager.on("connection_error",e=>{this.logger.warn(`StateManager connection issue: ${e.message}`)}),this.logger.debug("StateManager event listeners set up")}async handleNodeStopped(e){let{error:r,previousState:n,timestamp:i}=e;this.logger.warn("Node stopped detected, pausing LND-dependent tasks"),this.logger.debug(`Previous state: ${n}, Error: ${r.message}`);try{await this.scheduler.pauseTasksByGate("lndActive"),await this.subscriptionManager.pauseSubscriptionsByGate("lndActive"),this.emit("tasks_paused",{gate:"lndActive",reason:"node_stopped",timestamp:i}),this.logger.info("LND-dependent tasks paused successfully")}catch(s){this.logger.error(`Error handling node stopped: ${s.message}`)}}async handleNodeRecovered(e){let{timestamp:r}=e;this.logger.info("Node recovered, resuming LND-dependent tasks");try{await this.scheduler.resumeTasksByGate("lndActive"),await this.subscriptionManager.resumeSubscriptionsByGate("lndActive"),this.emit("tasks_resumed",{gate:"lndActive",reason:"node_recovered",timestamp:r}),this.logger.info("LND-dependent tasks resumed successfully")}catch(n){this.logger.error(`Error handling node recovery: ${n.message}`),this.emit("node_recovery_handling_error",n)}}async executeWithTimeout(e,r=3e4,...n){return new Promise((i,s)=>{let o=setTimeout(()=>{s(new Error(`Task execution timed out after ${r}ms`))},r);Promise.resolve(e(...n)).then(c=>{clearTimeout(o),i(c)}).catch(c=>{clearTimeout(o),s(c)})})}emitEvent(e,...r){if(!this.eventBus){this.logger.warn("EventBus not initialized, cannot emit event");return}this.eventBus.emit(e,...r)}setDryRun(e){this.options.dryRun=e,this.logger.info(`Dry-run mode ${e?"enabled":"disabled"}`)}getStatus(){return{isInitialized:this.isInitialized,isRunning:this.isRunning,isShuttingDown:this.isShuttingDown,dryRun:this.options.dryRun,stats:this.stats,gates:this.gates?.getStats()||null,taskRegistry:this.taskRegistry?.getStats()||null,eventBus:this.eventBus?.getStats()||null,scheduler:this.scheduler?.getStats()||null,subscriptionManager:this.subscriptionManager?.getStatus()||null,stateManager:this.stateManager?.getStatus()||null}}getTaskInfo(){return this.isInitialized?{allTasks:Array.from(this.taskRegistry.getAllTasks().entries()),cronTasks:Array.from(this.taskRegistry.getTasksByType("cron").entries()),eventTasks:Array.from(this.taskRegistry.getTasksByType("event").entries()),scheduledTasks:this.scheduler.getAllTasksInfo(),gateNames:this.gates.getGateNames()}:null}async shutdown(){if(this.isShuttingDown){this.logger.warn("JobManager already shutting down");return}this.logger.info("Starting JobManager shutdown..."),this.isShuttingDown=!0;try{this.isRunning&&await this.stop(),this.scheduler&&this.scheduler.cleanup(),this.eventBus&&this.eventBus.cleanup(),this.subscriptionManager&&this.subscriptionManager.cleanup(),this.stateManager&&this.stateManager.cleanup(),this.isInitialized=!1,this.isRunning=!1,this.logger.info("JobManager shutdown completed"),this.emit("shutdown")}catch(e){throw this.logger.error(`Error during shutdown: ${e.message}`),e}}};Wrt.exports=ile});var GF=v((don,Qrt)=>{var yN=Ke(),{TASKS:j3r,GATES:$3r}=qtt(),G3r=Xrt(),zi=null;async function V3r(t={}){let e=new yN("job");try{return zi?(e.warn("Job system already initialized"),zi):(e.info("Initializing new job system..."),zi=new G3r(t),await zi.initialize(j3r,$3r),Y3r(zi),e.info("New job system initialized successfully"),zi)}catch(r){throw e.error(`Failed to initialize job system: ${r.message}`),r}}a(V3r,"initJobSystem");async function K3r(){if(!zi)throw new Error("Job system not initialized. Call initJobSystem() first.");await zi.start()}a(K3r,"startJobSystem");async function z3r(){zi&&await zi.stop()}a(z3r,"stopJobSystem");function J3r(){return zi?zi.getStatus():null}a(J3r,"getJobSystemStatus");function W3r(){return zi?zi.getTaskInfo():null}a(W3r,"getJobSystemTaskInfo");function X3r(t){zi&&zi.setDryRun(t)}a(X3r,"setDryRun");function Q3r(t,...e){zi&&zi.emitEvent(t,...e)}a(Q3r,"emitJobEvent");function Y3r(t){let e=MW(),r=new yN("job");["bakeTapdMacaroon","bakeLoopMacaroon","listenNostrEvent","initAccount","startJobs","rgbStart"].forEach(i=>{e.on(i,(...s)=>{t.emitEvent(i,...s)})}),t.on("started",()=>{r.info("Job system started")}),t.on("stopped",()=>{r.info("Job system stopped")}),t.on("task_success",({taskId:i,duration:s})=>{r.debug(`Task '${i}' completed in ${s}ms`)}),t.on("task_error",({taskId:i,error:s})=>{r.error(`Task '${i}' failed: ${s.message}`)})}a(Y3r,"setupEventListeners");async function $F(){let t=new yN("job_shutdown");t.info("Received shutdown signal..."),zi&&(await zi.shutdown(),zi=null),t.info("Job system graceful shutdown completed")}a($F,"gracefulShutdown");process.on("SIGINT",$F);process.on("SIGTERM",$F);process.on("uncaughtException",t=>{new yN("job_uncaught").error(`Uncaught exception: ${t.message}`),$F()});process.on("unhandledRejection",(t,e)=>{new yN("job_unhandled").error(`Unhandled rejection at: ${e}, reason: ${t}`)});Qrt.exports={initJobSystem:V3r,startJobSystem:K3r,stopJobSystem:z3r,getJobSystemStatus:J3r,getJobSystemTaskInfo:W3r,setDryRun:X3r,emitJobEvent:Q3r,gracefulShutdown:$F}});var Zrt=v((pon,Yrt)=>{var Z3r=Ke(),{initJobSystem:ekr,startJobSystem:tkr,stopJobSystem:rkr,getJobSystemStatus:nkr,emitJobEvent:$_}=GF();async function ikr(){let t=new Z3r("job_compatibility");try{t.info("Initializing job system via compatibility layer...");let e=await ekr({dryRun:!1});return await tkr(),{getSystemStatus:nkr,emitEvent:$_,shutdown:a(async()=>{let{gracefulShutdown:r}=GF();await r()},"shutdown"),startLndJobs:a(async()=>{t.info("LND jobs will be started automatically when LND becomes active"),$_("startJobs")},"startLndJobs"),startRgbJobs:a(async()=>{t.info("RGB jobs are running automatically"),$_("rgbStart")},"startRgbJobs"),stopLndJobs:a(async()=>{t.info("LND jobs will be stopped automatically when LND becomes inactive"),$_("stopLndJobs")},"stopLndJobs"),stopRgbJobs:a(async()=>{t.info("RGB jobs stopped"),$_("stopRgbJobs")},"stopRgbJobs"),stopJobSystem:rkr,bakeTapdMacaroon:a(()=>$_("bakeTapdMacaroon"),"bakeTapdMacaroon"),bakeLoopMacaroon:a(r=>$_("bakeLoopMacaroon",r),"bakeLoopMacaroon"),listenNostrEvent:a(()=>$_("listenNostrEvent"),"listenNostrEvent"),initAccount:a(()=>$_("initAccount"),"initAccount"),_jobManager:e}}catch(e){throw t.error(`Failed to initialize job system via compatibility layer: ${e.message}`),e}}a(ikr,"initJobListener");async function akr(){let{gracefulShutdown:t}=GF();await t()}a(akr,"gracefulShutdown");Yrt.exports={initJobListener:ikr,gracefulShutdown:akr}});var ent=v((hon,skr)=>{skr.exports={bitcoindIndex:"CHANGE_ME_MAINNET_ELECTRS_HOST:50001",bitcoindPass:"CHANGE_ME_MAINNET_RPC_PASSWORD",bitcoindRpcHost:"CHANGE_ME_MAINNET_BITCOIND_HOST",bitcoindRpcPort:"8332",bitcoindUser:"CHANGE_ME_MAINNET_RPC_USER",bitcoindZmqBlock:"tcp://CHANGE_ME_MAINNET_BITCOIND_HOST:28334",bitcoindZmqRawTx:"tcp://CHANGE_ME_MAINNET_BITCOIND_HOST:28335",network:"mainnet",nostrRelays:["wss://CHANGE_ME_MAINNET_RELAY_1","wss://CHANGE_ME_MAINNET_RELAY_2"],officialLndPeer:"",officialLndPeerHost:"CHANGE_ME_MAINNET_LND_HOST:9735",officialNostrPubKey:"",officialRgbPeer:"",officialRgbPeerHost:"CHANGE_ME_MAINNET_RGB_HOST:9736",officialUniverseServer:"CHANGE_ME_MAINNET_UNIVERSE_HOST:10009",priceOracle:"grpc-oracle.lnfi.network",rgbProxy:"rpc://CHANGE_ME_MAINNET_RGB_PROXY_HOST:5000/json-rpc"}});var tnt=v((mon,okr)=>{okr.exports={bitcoindIndex:"regtest.lnfi.network:50001",bitcoindPass:"lnfi_pass12GA",bitcoindRpcHost:"regtest.lnfi.network",bitcoindRpcPort:"18443",bitcoindUser:"lnfi_user",bitcoindZmqBlock:"tcp://regtest.lnfi.network:28334",bitcoindZmqRawTx:"tcp://regtest.lnfi.network:28335",network:"regtest",nostrRelays:["wss://relay.snort.social"],officialLndPeer:"03b24a4bf911ffd26ac1d5e5f2440a3c2f6974e4cc85d2ef54e17ee6d3717433d3",officialLndPeerHost:"34.84.66.29:7739",officialNostrPubKey:"npub1me48869w43j30cfry9ayz9dsdl4gj54xppgk9krrv7g6hsq7psuqp3yusn",officialRgbPeer:"03b7153e278882e48e690acd0743305cbada86b131ab3388ccd782b45b02f064ef",officialRgbPeerHost:"regtest.lnfi.network:9736",officialUniverseServer:"regtest.lnfi.network:10009",priceOracle:"grpc-oracle.lnfi.network",rgbProxy:"rpc://regtest.lnfi.network:5000/json-rpc"}});var rnt=v((gon,ckr)=>{ckr.exports={bitcoindIndex:"CHANGE_ME_TESTNET_ELECTRS_HOST:50001",bitcoindPass:"CHANGE_ME_TESTNET_RPC_PASSWORD",bitcoindRpcHost:"CHANGE_ME_TESTNET_BITCOIND_HOST",bitcoindRpcPort:"18332",bitcoindUser:"CHANGE_ME_TESTNET_RPC_USER",bitcoindZmqBlock:"tcp://CHANGE_ME_TESTNET_BITCOIND_HOST:28334",bitcoindZmqRawTx:"tcp://CHANGE_ME_TESTNET_BITCOIND_HOST:28335",network:"testnet",nostrRelays:["wss://CHANGE_ME_TESTNET_RELAY_1","wss://CHANGE_ME_TESTNET_RELAY_2"],officialLndPeer:"",officialLndPeerHost:"CHANGE_ME_TESTNET_LND_HOST:9735",officialNostrPubKey:"",officialRgbPeer:"",officialRgbPeerHost:"CHANGE_ME_TESTNET_RGB_HOST:9736",officialUniverseServer:"CHANGE_ME_TESTNET_UNIVERSE_HOST:10009",priceOracle:"grpc-oracle.lnfi.network",rgbProxy:"rpc://CHANGE_ME_TESTNET_RGB_PROXY_HOST:5000/json-rpc"}});var snt=v((yon,ant)=>{var nnt=require("node:fs"),{getConfig:ukr,reloadConfig:int}=Vt(),{getMainLnlinkConfig:lkr,updateMainLnlinkConfig:dkr}=Mr(),fkr=Ke(),pkr=ent(),_kr=tnt(),hkr=rnt(),{initConfig:mkr}=BW();async function gkr(){let t=new fkr("init");try{let{LINK_NODE_ENV:e,LINK_OWNER:r,LINK_NETWORK:n,LINK_NAME:i}=ukr();if(e==="app")return;let s=await lkr();if(s&&s.settings&&Object.keys(s.settings).length>0){!s.node_name&&i&&(await dkr({node_name:i}),await int());return}let o,c=process.env.LINK_SETTINGS_PATH;if(c)try{if(nnt.existsSync(c)){let u=nnt.readFileSync(c,"utf-8");o=JSON.parse(u)}else t.warn(`LINK_SETTINGS_PATH is set but file does not exist: ${c}`)}catch(u){t.error(`Failed to load settings from LINK_SETTINGS_PATH: ${u.message}`)}o||(n==="testnet"?o=hkr:n==="mainnet"?o=pkr:o=_kr),await mkr({owner:r,settings:o,nodeName:i}),await int()}catch(e){t.error(e?.message)}}a(gkr,"initLinkConfig");ant.exports=gkr});var cnt=v((bon,ont)=>{var{getConfig:ykr}=Vt(),{initJobListener:vkr}=Zrt(),bkr=FW(),xkr=UW(),{setCacheMacaroon:wkr}=wi(),Ekr=snt();async function Tkr(){await Ekr();let{listenNostrEvent:t,initAccount:e}=await vkr();await bkr(),xkr(),e(),t();let{LINK_NODE_ENV:r}=ykr();r==="development"&&wkr("12345678")}a(Tkr,"init");ont.exports=Tkr});var fnt=v((won,ale)=>{require("module-alias/register");var{EventEmitter:Skr}=require("node:events"),unt=require("node:fs"),Akr=require("node:http"),vN=require("node:path"),lnt=bq(),kkr=M_e(),VF=aH(),dnt=jme(),Nkr=age(),Okr=Tge(),Ikr=ZNe(),{getConfig:Ckr,initConfig:Rkr}=Vt(),Pkr=cnt(),KF=class extends Skr{static{a(this,"LnLink")}constructor(e={}){super(),this.options={dataPath:e.dataPath||vN.join(process.cwd(),"lnlink-data"),network:e.network||"regtest",debug:e.debug||!1,httpPort:e.httpPort||8090,name:e.name||"electron-link",enableTor:e.enableTor||!1,owner:e.owner||"",binaryPath:e.binaryPath||"",nodeEnv:e.nodeEnv||"app",...e},this.isInitialized=!1,this.isRunning=!1,this.server=null,this.app=null,this.cleanupFunctions=[]}_ensureEnvironmentAndPrisma(){if(!process.env.LINK_DATABASE_URL){let e=vN.join(this.options.dataPath,".link","lnlink.db");process.env.LINK_DATABASE_URL=`file:${e}`,console.log(`\u{1F5C4}\uFE0F Setting database URL: ${e}`)}}async _ensureDatabaseSetup(){try{let e=vN.dirname(process.env.LINK_DATABASE_URL.replace("file:",""));unt.existsSync(e)||(unt.mkdirSync(e,{recursive:!0}),console.log(`\u{1F4C1} Created data directory: ${e}`)),console.log("\u{1F4E6} Prisma operations handled by startup scripts");try{console.log("\u{1F4E6} Checking database health..."),await nh().getInstance().healthCheck(),console.log("\u2705 Database connection healthy")}catch(r){console.warn("\u26A0\uFE0F Database health check warning:",r.message)}}catch(e){throw console.error("\u274C Database setup failed:",e.message),e}}async initialize(e={}){try{return process.env.LINK_DATA_PATH=this.options.dataPath,process.env.LINK_DEBUG=this.options.debug.toString(),process.env.LINK_NODE_ENV=this.options.nodeEnv||"app",process.env.LINK_HTTP_PORT=this.options.httpPort.toString(),process.env.LINK_NAME=this.options.name,process.env.LINK_OWNER=this.options.owner,this.options.binaryPath&&(process.env.LINK_BINARY_PATH=this.options.binaryPath),this.options.reportAddress&&(process.env.LINK_REPORT_ADDRESS=this.options.reportAddress),this.options.reportBaseUrl&&(process.env.LINK_REPORT_BASE_URL=this.options.reportBaseUrl),this.options.rgbHost&&(process.env.LINK_RGB_HOST=this.options.rgbHost),this.options.rgbLdkPeerListeningPort&&(process.env.LINK_RGB_LDK_PEER_LISTENING_PORT=this.options.rgbLdkPeerListeningPort.toString()),Object.entries(e).forEach(([r,n])=>{process.env[r]=n.toString()}),this._ensureEnvironmentAndPrisma(),await this._ensureDatabaseSetup(),await Rkr(),this.isInitialized=!0,this.emit("initialized"),{success:!0}}catch(r){throw this.emit("error",r),r}}async start(){if(!this.isInitialized)throw new Error("LN-Link must be initialized before starting");try{let{LINK_HTTP_PORT:e}=Ckr();this.app=VF();let r=dnt({windowMs:900*1e3,max:100,message:{code:429,message:"Too many requests from this IP, please try again later."},standardHeaders:!0,legacyHeaders:!1}),n=dnt({windowMs:900*1e3,max:50,message:{code:429,message:"Too many API requests from this IP, please try again later."}});return this.app.use(Okr("dev")),this.app.use(lnt.urlencoded({extended:!0})),this.app.use(lnt.json()),this.app.use(VF.json()),this.app.use(VF.urlencoded({extended:!1})),this.app.use(kkr()),this.app.use(VF.static(vN.join(__dirname,"public"),{setHeaders:a((i,s)=>{(s.endsWith(".html")||s.endsWith(".css")||s.endsWith(".js"))&&i.setHeader("Cache-Control","public, max-age=3600")},"setHeaders")})),this.app.use(r),this.app.get("/",(i,s)=>{s.sendFile(vN.join(__dirname,"public/init.html"))}),this.app.get("/api/health",(i,s)=>{try{let o={status:"healthy",timestamp:new Date().toISOString(),uptime:process.uptime(),memory:process.memoryUsage(),port:e,electron:!0};s.status(200).json({code:0,message:"Server is healthy",data:o})}catch(o){s.status(500).json({code:500,message:"Server health check failed",data:{error:o.message}})}}),this.app.use("/api/lnd",n,Ikr),this.app.get("/api/debug/heap-snapshot",(i,s)=>{let o=require("node:v8"),c=`${this.options.dataPath}/.link/heap-${Date.now()}.heapsnapshot`,u=o.writeHeapSnapshot(c);s.send(`Heap snapshot saved to ${u}`)}),this.app.use((i,s,o)=>{o(Nkr(404))}),this.app.use((i,s,o)=>{o.locals.message=i.message,o.locals.error=s.app.get("env")==="development"?i:{},o.status(i.status||500),o.json({error:i.message})}),this.app.set("port",e),this.server=Akr.createServer(this.app),await new Promise((i,s)=>{this.server.listen(e,o=>{o?s(o):i()}),this.server.on("error",o=>{this.emit("error",o),s(o)})}),this._ensureEnvironmentAndPrisma(),await Pkr(),this.isRunning=!0,this.emit("started",{port:e}),{success:!0,port:e}}catch(e){throw this.emit("error",e),e}}async stop(){try{this.server&&(await new Promise(e=>{this.server.close(()=>{e()})}),this.server=null);for(let e of this.cleanupFunctions)typeof e=="function"&&await e();return this.isRunning=!1,this.emit("stopped"),{success:!0}}catch(e){throw this.emit("error",e),e}}addCleanupFunction(e){this.cleanupFunctions.push(e)}getStatus(){return{initialized:this.isInitialized,running:this.isRunning,options:this.options,port:this.isRunning?this.options.httpPort:null}}getConfig(){let{getConfig:e}=Vt();return e()}getApp(){return this.app}getServer(){return this.server}};ale.exports=KF;ale.exports.default=KF});require("module-alias/register");var Lkr=require("node:path"),Dkr=Gm(),Bkr=fnt();globalThis.crypto=require("node:crypto");Dkr.set({toExpNeg:-20,toExpPos:40});var pnt=[],gd=null;async function zF(t){console.info(`Received ${t}. Starting graceful shutdown...`);try{gd&&gd.isRunning&&(console.info("Stopping LN-Link services..."),await gd.stop());for(let e of pnt)typeof e=="function"&&await e();console.info("Graceful shutdown completed")}catch(e){console.error("Error during graceful shutdown:",e.message)}finally{process.exit(0)}}a(zF,"gracefulShutdown");process.on("SIGINT",()=>zF("SIGINT"));process.on("SIGTERM",()=>zF("SIGTERM"));process.on("uncaughtException",t=>{console.error("Uncaught Exception:",t),zF("UNCAUGHT_EXCEPTION")});process.on("unhandledRejection",(t,e)=>{console.error("Unhandled Rejection at:",e,"reason:",t),zF("UNHANDLED_REJECTION")});globalThis.addCleanupFunction=t=>{pnt.push(t)};async function Mkr(){try{console.info("\u{1F680} Starting LN-Link application...");let t={dataPath:process.env.LINK_DATA_PATH||Lkr.join(process.cwd(),"lnlink-data"),httpPort:Number.parseInt(process.env.LINK_HTTP_PORT)||8090,name:process.env.LINK_NAME||"docker-link",enableTor:process.env.LINK_ENABLE_TOR==="true"||!1,owner:process.env.LINK_OWNER||"",binaryPath:process.env.LINK_BINARY_PATH||"",nodeEnv:process.env.LINK_NODE_ENV||"production",debug:process.env.LINK_DEBUG==="true"||!1};gd=new Bkr(t),gd.on("initialized",()=>{console.info("\u2705 LN-Link initialized successfully")}),gd.on("started",({port:r})=>{console.info(`\u{1F310} LN-Link server started on port ${r}`),console.info(`\u{1F4E1} Health check: http://localhost:${r}/api/health`),console.info(`\u{1F3E0} Web interface: http://localhost:${r}/`)}),gd.on("stopped",()=>{console.info("\u{1F6D1} LN-Link services stopped")}),gd.on("error",r=>{console.error("\u274C LN-Link error:",r.message),console.error(r.stack)}),gd.addCleanupFunction(async()=>{console.info("\u{1F9F9} Running LN-Link cleanup functions...")}),console.info("\u{1F527} Initializing LN-Link..."),await gd.initialize(),console.info("\u{1F680} Starting LN-Link services...");let e=await gd.start();return console.info("\u2705 Application started successfully"),e}catch(t){console.error(`\u274C Application startup error: ${t?.message}`),console.error(t.stack),process.exit(1)}}a(Mkr,"start");Mkr().catch(t=>{console.error("\u{1F4A5} Failed to start application:",t),process.exit(1)});
10716
+ `),XSr({nostrAddress:o,lnlinkNpub:c});let u=QSr.decode(r.node_npub).data,l=u2r(r,t);await t.connect(u,l),t.startHeartbeat(r.node_sk,u,l);let d=setInterval(async()=>{if(t.isShuttingDown){clearInterval(d);return}try{let _=t.lastUserMessageReceived?Date.now()-t.lastUserMessageReceived:null,h=t.lastHeartbeatReceived?Date.now()-t.lastHeartbeatReceived:1/0,m=h>9e4,g=n2r(),y=!1;if(g){let{connections:E,summary:A}=g;if(A&&A.total>0&&A.healthy<A.total&&e.warn(`Relay health degraded: ${A.healthy}/${A.total} healthy`),E&&Object.keys(E).length){e.info(`Relay connections==>${JSON.stringify(E)}`);for(let[I,R]of Object.entries(E))if(R.status!=="healthy"){let $=Date.now(),B=t.relayRefreshTimestamps.get(I)||0;$-B>=a2r&&(e.warn(`Relay ${I} status ${R.status||"unknown"}, refreshing connection`),i2r(I),t.recordRelayRefreshTimestamp(I,$),y=!0)}}}y&&!t.isShuttingDown&&!t.isConnecting?await t.connect(u,l):m?(e.warn(`No heartbeats for ${Math.round(h/1e3)}s, recreating subscription with pool reset`),Net(),t.teardownSubscription(),t.isConnected=!1,await t.connect(u,l)):_&&_>3e5&&e.info(`No user messages for ${Math.round(_/1e3)}s, heartbeats healthy`),t.isConnected&&!t.subscription&&(e.warn("Connected but no subscription, recreating..."),await t.connect(u,l));let w=Date.now()-t.lastSubscriptionRefresh;w>c2r&&t.isConnected&&!t.isConnecting&&(e.info(`Refreshing subscription to clear _knownIds cache (last refresh: ${Math.round(w/1e3)}s ago)`),t.teardownSubscription(),await t.connect(u,l,{isRefresh:!0}),t.lastSubscriptionRefresh=Date.now())}catch(_){e.error(`Relay monitor error: ${_.message}`)}},45e3),f={stop:!1},p=t2r();return p.start(r.node_sk),t.addService({stop:a(async()=>{f.stop=!0,clearInterval(d),await p.stop()},"stop")}),{cleanup:a(async()=>{e.info("Starting Nostr connection cleanup..."),await t.cleanup(),e.info("Nostr connection cleanup completed")},"cleanup"),isHealthy:a(()=>t.isConnected,"isHealthy"),getConnectionStatus:a(()=>{let _=Date.now(),h=t.connectionStartTime?_-t.connectionStartTime:0,m=t.lastEventReceived?_-t.lastEventReceived:null;return{connected:t.isConnected,hasSubscription:!!t.subscription,uptime:Math.round(h/1e3),reconnectCount:t.reconnectCount,timeSinceLastEvent:m?Math.round(m/1e3):null,relayCount:Aet().length}},"getConnectionStatus")}}catch(r){throw e.error(`Failed to start Nostr event listener: ${r.message}`),await t.cleanup(),r}}a(l2r,"listenerNostrEvent");Oet.exports={listenerNostrEvent:l2r}});var Ret=v((Yin,Cet)=>{var{getConfig:d2r}=Vt(),{isTapdInitialized:f2r,getUniverseService:p2r}=Qi(),_2r=Ke();async function h2r(){let t=new _2r("job");try{let{LINK_UNIVERSE_HOST:e}=d2r();if(await f2r()){t.info("Job addFederationServer started");let n=p2r(),s=(await n.listFederationServers({}))?.servers?.find(c=>c.host===e);s?t.info(`Job addFederationServer result: ${!!s}`):(await n.addFederationServer({servers:[{host:e}]}).catch(c=>{t.error(`Job addFederationServer error: ${c.message}`)}),t.info("Job addFederationServer result: true")),t.info(`Job addFederationServer starting syncUniverse, universe_host: ${e}`);let o=await n.syncUniverse({universe_host:e,sync_mode:1}).catch(c=>{t.error(`syncUniverse error: ${c.message}`)});t.info(`Job addFederationServer syncUniverse result:${o?.synced_universes?.length}`)}}catch(e){t.error(`Job addFederationServer error: ${e.message}`)}}a(h2r,"addFederationServer");Cet.exports=h2r});var Let=v((ean,Pet)=>{var{isLndInitialized:m2r,getLightningService:g2r}=Qi(),y2r=Ke();async function v2r(){let t=new y2r("checkChannelState");if(!await m2r()){t.info("Job checkChannelState skip reason: LND not initialized yet.");return}let r=g2r(),n;try{n=await r.listChannels({inactive_only:!0})}catch(u){t.error(`Job checkChannelState failed to list channels: ${u.message}`);return}let i=n?.channels?.filter(u=>u&&!u.active)||[];if(!i.length){t.debug("Job checkChannelState: no inactive channels detected.");return}let s;try{s=await r.listPeers({latest_error:!0})}catch(u){t.error(`Job checkChannelState failed to list peers: ${u.message}`);return}let o=new Set(s?.peers?.map(u=>u.pub_key)),c=i.reduce((u,l)=>(l?.remote_pubkey&&(u.has(l.remote_pubkey)||u.set(l.remote_pubkey,[]),u.get(l.remote_pubkey).push(l)),u),new Map);for(let[u,l]of c.entries()){if(o.has(u)){t.debug(`Peer ${u} already online, skip reconnect.`);continue}t.info(`Peer ${u} offline with ${l.length} inactive channel(s). Attempting reconnect...`);let d;try{d=await r.getNodeInfo({pub_key:u})}catch(_){t.error(`Failed to fetch node info for ${u}: ${_.message}`);continue}let f=d?.node?.addresses||[];if(!f.length){t.warn(`No advertised addresses for peer ${u}, skipping reconnect.`);continue}let p=!1;for(let _ of f){let h=_?.addr;if(h)try{await r.connectPeer({addr:{pubkey:u,host:h},perm:!1,timeout:15}),t.info(`Reconnect attempt to peer ${u} via ${h} succeeded.`),p=!0;break}catch(m){t.warn(`Reconnect attempt to peer ${u} via ${h} failed: ${m.message}`)}}p||t.error(`All reconnect attempts failed for peer ${u}.`)}}a(v2r,"checkChannelState");Pet.exports=v2r});var Bet=v((ran,Det)=>{var{getConfig:b2r}=Vt(),{isLndInitialized:x2r,getLightningService:w2r}=Qi(),{isConnectPeer:E2r}=e0(),T2r=Ke();async function S2r(){let t=new T2r("job");if(!await x2r()){t.info("Job connectPeer skip reason: LND not initialized yet.");return}let{LINK_NOSTR_NODE_NPUBKEY:r,LINK_NOSTR_NODE_HOST:n}=b2r();if(!r||!n)throw new Error("Remote peer info is not set yet.");let i=await E2r({});t.info(`Job connectPeer status: ${i}`),i||await w2r().connectPeer({addr:{pubkey:r,host:n},perm:!0,timeout:30}),t.info("Job connectPeer successful.")}a(S2r,"connectPeer");Det.exports=S2r});var Cue=v((ian,Met)=>{var{getConfig:A2r}=Vt();function k2r(){let{LINK_NETWORK:t}=A2r();return(t||"").toLowerCase()==="regtest"?{apiBase:"http://34.84.66.29:8889/api",pageBase:"http://34.84.66.29:8889/zh"}:{apiBase:"https://mempool.space/api",pageBase:"https://mempool.space"}}a(k2r,"getMempoolBase");Met.exports={getMempoolBase:k2r}});var Get=v((san,$et)=>{var{getMempoolBase:Fet}=Cue(),{getTransactionsByFilter:Uet,upsertTransactionByFilter:NF}=Th(),qet=Ke(),{TRANSACTION_STATUS:xT,NODE_TYPE:AF,TRANSACTION_KIND:kF,TRANSACTION_ASSET_TYPE:Het,TRANSACTION_DIRECTION:jet}=rt();async function N2r(t,e){let r=`${e}/address/${t}/txs`,n=await fetch(r);if(!n.ok)throw new Error(`HTTP ${n.status}`);return await n.json()}a(N2r,"fetchAddressChainTxs");function O2r(t,e){return!t||!t.vout?!1:t.vout.some(r=>(Array.isArray(r.scriptpubkey_address?[r.scriptpubkey_address]:[]),r.scriptpubkey_address===e))}a(O2r,"txPaysToAddress");function I2r(t,e){if(!t||!Array.isArray(t.vout))return 0;let r=0;for(let n of t.vout)if(n&&n.scriptpubkey_address===e){let i=typeof n.value=="number"?n.value:Number.parseInt(n.value||"0",10);Number.isNaN(i)||(r+=i)}return r}a(I2r,"sumReceivedToAddress");async function C2r(){let t=new qet("poll-litd-btc-transfers");try{t.info("Starting litd incoming BTC address polling (mempool)");let{apiBase:e}=Fet(),n=(await Uet({node_type:AF.LITD,transaction_kind:kF.ONCHAIN,asset_type:Het.BTC,direction:jet.IN,status:xT.PENDING}))?.list;if(!n||n.length===0){t.info("No pending litd incoming BTC transactions to reconcile");return}let i=0,s=0,o=0,c=Math.floor(Date.now()/1e3),u=1440*60;for(let l of n)try{if(c-l.create_at>u){let w={id:l.id},E={status:xT.EXPIRED,update_at:c};await NF(E,w),o++,i++;continue}let d=l.target_address;if(!d){t.warn(`Transaction ${l.id} has no target_address, skip`),i++;continue}let f=await N2r(d,e).catch(w=>(t.error(`Fetch mempool address txs failed for ${d}: ${w.message}`),[]));if(!Array.isArray(f)||f.length===0){t.debug(`No chain txs found for address ${d}`),i++;continue}let p=f.find(w=>(w.status&&w.status.confirmed||w.status===!0)&&O2r(w,d));if(!p){t.debug(`No confirmed tx paying to ${d} yet`),i++;continue}let _=p.txid||p.tx_hash||p.id,h=p.status?.block_height,m=I2r(p,d),g={tx_hash:_,status:xT.CONFIRMED,confirmations:1,block_height:h,update_at:c,asset_amount:m>0?String(m):void 0},y={id:l.id};await NF(g,y),s++,i++,t.info(`Incoming ${d} confirmed by ${_} at height ${h}`)}catch(d){t.error(`Error handling incoming tx id=${l.id}: ${d.message}`),i++}t.info(`Incoming polling done: processed=${i}, confirmed=${s}, expired=${o}`)}catch(e){throw t.error(`pollBtcInTxns error: ${e.message}`),e}}a(C2r,"pollBtcInTxns");async function R2r(){let t=new qet("poll-litd-btc-transfers");try{t.info("Starting litd outgoing BTC transaction polling task");let{apiBase:e}=Fet(),n=(await Uet({node_type:AF.LITD,transaction_kind:kF.ONCHAIN,asset_type:Het.BTC,direction:jet.OUT,status:xT.PENDING}))?.list;if(!n||n.length===0){t.info("No litd outgoing BTC transactions to reconcile");return}let i=0,s=0,o=0;for(let c of n||[])try{let u=Math.floor(Date.now()/1e3),l=1440*60;if(u-c.create_at>l){let p={tx_hash:c.tx_hash,node_type:AF.LITD,transaction_kind:kF.ONCHAIN},_={status:xT.EXPIRED,update_at:u};await NF(_,p),t.warn(`Outgoing litd transaction ${c.tx_hash} expired`),o++;continue}let d=!1,f;if(c.tx_hash){let p=`${e}/tx/${c.tx_hash}/status`;try{let _=await fetch(p);if(_.ok){let h=await _.json();d=!!h.confirmed,f=h.block_height}else t.debug(`litd status not ok for ${c.tx_hash}: HTTP ${_.status}`)}catch(_){t.error(`Fetch litd status failed for ${c.tx_hash}: ${_.message}`)}}if(d){let p={tx_hash:c.tx_hash,node_type:AF.LITD,transaction_kind:kF.ONCHAIN},_={status:xT.CONFIRMED,confirmations:1,block_height:f,update_at:u};await NF(_,p),t.info(`Outgoing litd transaction ${c.tx_hash} confirmed by litd at height ${f}`),s++}else t.debug(`Outgoing litd transaction ${c.tx_hash} still pending per litd`);i++}catch(u){t.error(`Error processing transaction ${c.tx_hash}: ${u.message}`),o++}t.info(`litd BTC transaction polling completed (OUT only): ${i} processed, ${s} confirmed, ${o} failed`)}catch(e){throw t.error(`Error in pollBtcOutTxns: ${e.message}`),e}}a(R2r,"pollBtcOutTxns");async function P2r(){C2r(),R2r()}a(P2r,"pollBtcTransfers");$et.exports=P2r});var Rue=v((can,Xet)=>{var{INVOICE_STATUS:Jv,ACCOUNT_TYPE:L2r,NWC_PERMISSIONS:D2r,TRANSACTION_STATUS:wT,TRANSACTION_DIRECTION:B2r,TRANSACTION_KIND:M2r,NODE_TYPE:F2r}=rt(),U2r=zc(),{getBuyFlashAccountAsset:q2r}=bie(),{generateLnlink:H2r}=T3(),{upsertTransactionByFilter:j2r,getTransactionUser:$2r,insertLnLinkOrder:G2r,getLnlinkUser:V2r}=Mr(),{sleep:K2r}=wi(),Jet=Ke(),Vet=3,Ket=30*1e3;async function Wet(t,e=0){let r=new Jet("create_flash_account_for_user");try{let n=await $2r({invoice:t.payment_request});if(!n)return r.info(`Job listenerInvoice: Invoice with add_index ${t.add_index} not found.`),!1;if(n.account_type!==L2r.FLASH_REGISTER)return!1;if(n.status!==Jv.SETTLED)return r.warn(`Job listenerInvoice createFlashAccountForUser: Transaction invoice ${t.payment_request} is not paid yet.`),!1;let i=n.amount,{id:s}=await q2r(),o=JSON.parse(t.memo||"{}"),{pubkey:c,flash_account_url:u}=await H2r({asset_id:s,permissions:D2r,account_type:o.account_type,social_id:o.social_id,name:o.name,decimal_auth_limit:i,expire_time:U2r().add(1,"month").unix(),parent_pubkey:null});if(!c)throw new Error("Failed to generate pubkey");let l=await V2r({pubkey:c,include_expired:!0});if(!await G2r({transaction_id:n.id,user_id:l.id}))throw new Error("Failed to insert LnLink order");let f=`I've created a Flash account for you using LN Node and authorized a budget. Come and experience it!~@${o.social_id||o.name} ${u}`;return r.info(`Job listenerInvoice createFlashAccountForUser successful: ${f}`),!0}catch(n){if(r.error(`Job listenerInvoice createFlashAccountForUser error: ${n.message}`),e<Vet){let i=2**e*1e3;return r.info(`Retrying createFlashAccountForUser in ${i}ms (attempt ${e+1}/${Vet})`),await K2r(i),Wet(t,e+1)}return!1}}a(Wet,"createFlashAccountForUser");function zet(t,e,r){let n=new Promise((i,s)=>{let o=setTimeout(()=>{clearTimeout(o),s(new Error(r))},e)});return Promise.race([t,n])}a(zet,"promiseWithTimeout");async function z2r(t){let e=new Jet("invoice_change");try{e.info(`Received invoice event: ${t.add_index}, state: ${t.state}`);let r=t.state,n=wT.PENDING;[Jv.OPEN,Jv.ACCEPTED].includes(r)?n=wT.PENDING:Jv.SETTLED===r?n=wT.SETTLED:Jv.CANCELED===r?n=wT.CANCELED:Jv.EXPIRED===r?n=wT.EXPIRED:Jv.FAILED===r&&(n=wT.FAILED);let i={invoice:t?.payment_request,status:n,node_type:F2r.LITD,transaction_kind:M2r.LIGHTNING,direction:B2r.IN,description:t.memo,description_hash:t.description_hash?.toString("hex"),add_index:Number.parseInt(t?.add_index),expire_at:Number.parseInt(t?.creation_date)+Number.parseInt(t?.expiry),preimage:t.r_preimage?.toString("hex")};t.state==="SETTLED"&&(i.settled_at=Number(t.settle_date)),await Promise.all([zet(j2r(i,{invoice:t?.payment_request}),Ket,"Update transaction operation timed out").catch(s=>{e.error(`Job listenerInvoice updateTransactionByFilter error: ${s.message}`)}),t.state==="SETTLED"?zet(Wet(t),Ket*2,"Create flash account operation timed out"):Promise.resolve(!1)])}catch(r){e.error(`Error processing invoice data: ${r.message}`)}}a(z2r,"invoiceChange");Xet.exports=z2r});var Pue=v((lan,Yet)=>{var{TRANSACTION_STATUS:OF,TRANSACTION_DIRECTION:J2r,TRANSACTION_KIND:W2r,NODE_TYPE:X2r}=rt(),{upsertTransactionByFilter:Q2r}=Mr(),Qet=Ke();function Y2r(t){let e=new Qet("payment_change");switch(t){case"IN_FLIGHT":case"INITIATED":return OF.PENDING;case"SUCCEEDED":return OF.SETTLED;case"FAILED":return OF.FAILED;default:return e.warn(`Unknown payment status: ${t}`),OF.PENDING}}a(Y2r,"mapLndPaymentStatusToTransactionStatus");async function Z2r(t){let e=new Qet("payment_change");try{e.info(`Received payment event: ${t.payment_hash}, status: ${t.status}`);let r=t.status,n=Y2r(r),i={payment_hash:t.payment_hash,status:n,node_type:X2r.LITD,transaction_kind:W2r.LIGHTNING,direction:J2r.OUT,fees_paid:t.fee_sat?t.fee_sat.toString():t.fee_msat?(t.fee_msat/1e3).toString():null,invoice:t.payment_request||null,preimage:t.payment_preimage?t.payment_preimage.toString("hex"):null,create_at:t.creation_date?Number.parseInt(t.creation_date):null,add_index:Number.parseInt(t.payment_index)};t.status==="SUCCEEDED"&&(i.settled_at=t.creation_date?Number.parseInt(t.creation_date):Math.floor(Date.now()/1e3)),await Q2r(i,{payment_hash:t.payment_hash}),e.info(`Payment transaction processed: ${t.payment_hash}, status: ${r}`)}catch(r){e.error(`Error processing payment change: ${r.message}`),e.error(`Payment data: ${JSON.stringify(t,null,2)}`)}}a(Z2r,"paymentChange");Yet.exports=Z2r});var ntt=v((fan,rtt)=>{var{getLightningService:eAr}=Qi(),{decodePayReq:tAr}=e0(),{getMinOpendInvoiveIndex:rAr,getTransactionByInvoice:nAr,getMinOpendPaymentIndex:iAr,getTransactionByPaymentHash:aAr,upsertTransactionByFilter:Zet}=Mr(),Lue=Ke(),{TRANSACTION_STATUS:ett}=rt(),sAr=Rue(),oAr=Pue();async function ttt(t){let e=await tAr({pay_req:t}),r=e.expiry,n=e.timestamp;return Math.floor(Date.now()/1e3)>Number(n)+Number(r)}a(ttt,"isInvoiceExpired");async function cAr(){let t=new Lue("poll-lnd-invoice-transfers");try{t.info("Starting poll lnd invoice and payment transfers polling task");let e=eAr();if(!e){t.warn("Lightning service not available, skipping polling");return}await uAr(e),await lAr(e),t.info("Poll LND invoice and payment transfers polling completed")}catch(e){throw t.error(`Error in poll lnd invoice and payment transfers polling: ${e.message}`),e}}a(cAr,"pollInvoiceTransfers");async function uAr(t){let e=new Lue("poll-lnd-invoice-transfers");try{e.debug("Polling lnd invoices for status changes");let r=await rAr();if(!r||r.add_index===null){e.debug("No open invoices found in database");return}if(await ttt(r.invoice)){await Zet({status:ett.EXPIRED,update_at:Math.floor(Date.now()/1e3)},{id:r.id}),e.info(`Marked invoice as EXPIRED: ${r.id}`);return}let i=r.add_index;e.info(`Polling invoices from index: ${i}`);let s=await t.listInvoices({index_offset:i-1,num_max_invoices:50,reversed:!0});if(!s.invoices||s.invoices.length===0){e.debug("No invoices returned from LND");return}let o=0;for(let c of s.invoices){let u=c.payment_request;await nAr({invoice:u})&&(c.state==="SETTLED"||c.state==="CANCELED"||c.state==="EXPIRED")&&(e.info(`Found invoice status change: add_index=${c.add_index}, state=${c.state}`),await sAr(c),o++)}e.debug(`Invoice polling completed. Updated ${o} invoices`)}catch(r){throw e.error(`Error polling invoices: ${r.message}`),r}}a(uAr,"pollInvoices");async function lAr(t){let e=new Lue("poll-lnd-invoice-transfers");try{e.debug("Polling payments for status changes");let r=await iAr();if(!r||r.add_index===null){e.debug("No open payments found in database");return}if(await ttt(r.invoice)){await Zet({status:ett.EXPIRED},{id:r.id}),e.info(`Marked invoice as EXPIRED: ${r.id}`);return}let i=r.add_index;e.debug(`Polling payments from index: ${i}`);let s=await t.listPayments({index_offset:i-1,max_payments:50,reversed:!1,include_incomplete:!0});if(!s.payments||s.payments.length===0){e.debug("No payments returned from LND");return}let o=0;for(let c of s.payments){let u=c.payment_hash;await aAr({payment_hash:u})&&(c.status==="SUCCEEDED"||c.status==="FAILED"||c.status==="UNKNOWN")&&(e.info(`Found payment status change: payment_index=${c.payment_index}, status=${c.status}`),await oAr(c),o++)}e.debug(`Payment polling completed. Updated ${o} payments`)}catch(r){throw e.error(`Error polling payments: ${r.message}`),r}}a(lAr,"pollPayments");rtt.exports=cAr});var stt=v((_an,att)=>{var{getConfig:dAr}=Vt(),{isConnectPeer:fAr,getNodeState:pAr,connectPeer:_Ar}=L3(),hAr=Ke(),{WALLET_STATE_CODE:itt}=rt();async function mAr(){let t=new hAr("job");try{let{LINK_RGB_REMOTE_NODE_PUBKEY:e,LINK_RGB_REMOTE_NODE_HOST:r}=dAr();if(!e||!r)throw new Error("LINK_RGB_REMOTE_NODE_PUBKEY or LINK_RGB_REMOTE_NODE_HOST is not set");let n=await pAr();if(n.state!==itt.SERVER_ACTIVE){t.info(`RGB node state is ${n.state}, will try to connect peer after state is ${itt.SERVER_ACTIVE}`);return}let{is_connected:i}=await fAr({pubkey:e,host:r});i||await _Ar({pubkey:e,host:r}),t.info("Job connectPeer successful.")}catch(e){t.error(`Job connectPeer error: ${e}`)}}a(mAr,"callConnectPeer");att.exports=mAr});var ptt=v((man,ftt)=>{var{getMempoolBase:ott}=Cue(),{getTransactionsByFilter:ctt,upsertTransactionByFilter:RF}=Th(),utt=Ke(),{TRANSACTION_STATUS:ET,NODE_TYPE:IF,TRANSACTION_KIND:CF,TRANSACTION_ASSET_TYPE:ltt,TRANSACTION_DIRECTION:dtt}=rt();async function gAr(t,e){let r=`${e}/address/${t}/txs`,n=await fetch(r);if(!n.ok)throw new Error(`HTTP ${n.status}`);return await n.json()}a(gAr,"fetchAddressChainTxs");function yAr(t,e){return!t||!t.vout?!1:t.vout.some(r=>(Array.isArray(r.scriptpubkey_address?[r.scriptpubkey_address]:[]),r.scriptpubkey_address===e))}a(yAr,"txPaysToAddress");function vAr(t,e){if(!t||!Array.isArray(t.vout))return 0;let r=0;for(let n of t.vout)if(n&&n.scriptpubkey_address===e){let i=typeof n.value=="number"?n.value:Number.parseInt(n.value||"0",10);Number.isNaN(i)||(r+=i)}return r}a(vAr,"sumReceivedToAddress");async function bAr(){let t=new utt("poll-rgb-btc-in-transfers");try{t.info("Starting incoming BTC address polling (mempool)");let{apiBase:e}=ott(),n=(await ctt({node_type:IF.RGB,transaction_kind:CF.ONCHAIN,asset_type:ltt.BTC,direction:dtt.IN,status:ET.PENDING}))?.list;if(!n||n.length===0){t.info("No pending incoming BTC transactions to reconcile");return}let i=0,s=0,o=0,c=Math.floor(Date.now()/1e3),u=1440*60;for(let l of n)try{if(c-l.create_at>u){let w={id:l.id},E={status:ET.EXPIRED,update_at:c};await RF(E,w),o++,i++;continue}let d=l.target_address;if(!d){t.warn(`Transaction ${l.id} has no target_address, skip`),i++;continue}let f=await gAr(d,e).catch(w=>(t.error(`Fetch mempool address txs failed for ${d}: ${w.message}`),[]));if(!Array.isArray(f)||f.length===0){t.debug(`No chain txs found for address ${d}`),i++;continue}let p=f.find(w=>(w.status&&w.status.confirmed||w.status===!0)&&yAr(w,d));if(!p){t.debug(`No confirmed tx paying to ${d} yet`),i++;continue}let _=p.txid||p.tx_hash||p.id,h=p.status?.block_height,m=vAr(p,d),g={tx_hash:_,status:ET.CONFIRMED,confirmations:1,block_height:h,update_at:c,asset_amount:m>0?String(m):void 0},y={id:l.id};await RF(g,y),s++,i++,t.info(`Incoming ${d} confirmed by ${_} at height ${h}`)}catch(d){t.error(`Error handling incoming tx id=${l.id}: ${d.message}`),i++}t.info(`Incoming polling done: processed=${i}, confirmed=${s}, expired=${o}`)}catch(e){throw t.error(`pollBtcInTxns error: ${e.message}`),e}}a(bAr,"pollBtcInTxns");async function xAr(){let t=new utt("poll-rgb-btc-out-transfers");try{t.info("Starting BTC transaction polling task");let{apiBase:e}=ott(),n=(await ctt({node_type:IF.RGB,transaction_kind:CF.ONCHAIN,asset_type:ltt.BTC,direction:dtt.OUT,status:ET.PENDING}))?.list;if(!n||n.length===0){t.info("No BTC outgoing transactions to reconcile");return}let i=0,s=0,o=0;for(let c of n||[])try{let u=Math.floor(Date.now()/1e3),l=1440*60;if(u-c.create_at>l){let p={tx_hash:c.tx_hash,node_type:IF.RGB,transaction_kind:CF.ONCHAIN},_={status:ET.EXPIRED,update_at:u};await RF(_,p),t.warn(`Outgoing transaction ${c.tx_hash} expired`),o++;continue}let d=!1,f;if(c.tx_hash){let p=`${e}/tx/${c.tx_hash}/status`;try{let _=await fetch(p);if(_.ok){let h=await _.json();d=!!h.confirmed,f=h.block_height}else t.debug(`mempool status not ok for ${c.tx_hash}: HTTP ${_.status}`)}catch(_){t.error(`Fetch mempool status failed for ${c.tx_hash}: ${_.message}`)}}if(d){let p={tx_hash:c.tx_hash,node_type:IF.RGB,transaction_kind:CF.ONCHAIN},_={status:ET.CONFIRMED,confirmations:1,block_height:f,update_at:u};await RF(_,p),t.info(`Outgoing ${c.tx_hash} confirmed by mempool at height ${f}`),s++}else t.debug(`Outgoing ${c.tx_hash} still pending per mempool`);i++}catch(u){t.error(`Error processing transaction ${c.tx_hash}: ${u.message}`),o++}t.info(`BTC transaction polling completed (OUT only): ${i} processed, ${s} confirmed, ${o} failed`)}catch(e){throw t.error(`Error in pollBtcOutTxns: ${e.message}`),e}}a(xAr,"pollBtcOutTxns");async function wAr(){bAr(),xAr()}a(wAr,"pollBtcTransfers");ftt.exports=wAr});var vtt=v((yan,ytt)=>{var{upsertTransactionByFilter:EAr,getTransactionsByFilter:_tt}=Th(),{getInvoiceStatus:TAr,getPayment:SAr,decodeLnInvoice:AAr}=Aie(),LF=Ke(),{TRANSACTION_STATUS:Dc,NODE_TYPE:htt,TRANSACTION_KIND:mtt,TRANSACTION_DIRECTION:gtt}=rt();async function kAr(){let t=new LF("poll-rgb-lightning-transfers");try{t.info("Starting RGB Lightning transfers polling task"),await NAr(),await OAr(),t.info("RGB Lightning transfers polling task completed")}catch(e){throw t.error(`Error in pollLightningTransfers: ${e.message}`),e}}a(kAr,"pollLightningTransfers");async function NAr(){let t=new LF("poll-rgb-lightning-transfers");try{let e=await _tt({node_type:htt.RGB,transaction_kind:mtt.LIGHTNING,direction:gtt.IN,status:Dc.PENDING});if(!e||!e.list||e.list.length===0){t.info("No pending Lightning invoices found in database");return}t.info(`Found ${e.list.length} pending Lightning invoices in database`);let r=0,n=0,i=0,s=0;for(let o of e.list)try{if(!o.invoice){t.warn(`Invoice record ${o.id} has no invoice string, skipping`);continue}if(await IAr(o.invoice)){await Due(o,{status:Dc.EXPIRED,update_at:Math.floor(Date.now()/1e3)}),t.info(`Marked invoice as EXPIRED: ${PF(o)}`),s++;continue}let u=await TAr({invoice:o.invoice});if(!u){t.warn(`No status result for invoice: ${PF(o)}`);continue}let l=CAr(u.status);l!==o.status?(await Due(o,{status:l,update_at:Math.floor(Date.now()/1e3)}),t.info(`Updated invoice status from ${o.status} to ${l}: ${PF(o)}`),r++):n++}catch(c){t.error(`Error processing invoice ${o.id}: ${c.message}`),i++}t.info(`Lightning invoices polling completed: ${e.list.length} processed, ${r} updated, ${n} unchanged, ${i} errors, ${s} expired`)}catch(e){throw t.error(`Error in pollLightningInvoices: ${e.message}`),e}}a(NAr,"pollLightningInvoices");async function OAr(){let t=new LF("poll-rgb-lightning-transfers");try{let e=await _tt({node_type:htt.RGB,transaction_kind:mtt.LIGHTNING,direction:gtt.OUT,status:Dc.PENDING});if(!e||!e.list||e.list.length===0){t.info("No pending Lightning payments found in database");return}t.info(`Found ${e.list.length} pending Lightning payments in database`);let r=0,n=0,i=0;for(let s of e.list)try{if(!s.payment_hash){t.warn(`Payment record ${s.id} has no payment_hash, skipping`);continue}let o=await SAr({payment_hash:s.payment_hash});if(!o||!o.payment){t.warn(`No payment result for payment_hash: ${s.payment_hash}`);continue}let c=RAr(o.payment.status);if(c!==s.status){let u={status:c,update_at:Math.floor(Date.now()/1e3)};c===Dc.CONFIRMED&&o.payment.asset_amount&&(u.asset_amount=o.payment.asset_amount.toString()),await Due(s,u),t.info(`Updated payment status from ${s.status} to ${c}: ${PF(s)}`),r++}else n++}catch(o){t.error(`Error processing payment ${s.id}: ${o.message}`),i++}t.info(`Lightning payments polling completed: ${e.list.length} processed, ${r} updated, ${n} unchanged, ${i} errors`)}catch(e){throw t.error(`Error in pollLightningPayments: ${e.message}`),e}}a(OAr,"pollLightningPayments");async function IAr(t){let e=new LF("poll-rgb-lightning-transfers");try{let r=await AAr({invoice:t});if(!r||!r.timestamp||!r.expiry_sec)return e.warn(`Failed to decode invoice or missing timestamp/expiry: ${t.substring(0,20)}...`),!1;let n=Math.floor(Date.now()/1e3),i=Number(r.timestamp)+Number(r.expiry_sec);return n>i}catch(r){return e.error(`Error decoding invoice ${t.substring(0,20)}...: ${r.message}`),!1}}a(IAr,"isInvoiceExpired");function CAr(t){switch(t){case"Pending":return Dc.PENDING;case"Succeeded":return Dc.SETTLED;case"Failed":return Dc.FAILED;case"Expired":return Dc.EXPIRED;default:return Dc.PENDING}}a(CAr,"mapInvoiceStatus");function RAr(t){switch(t){case"Pending":case"InFlight":return Dc.PENDING;case"Succeeded":return Dc.SETTLED;case"Failed":return Dc.FAILED;default:return Dc.PENDING}}a(RAr,"mapPaymentStatus");function PF(t){return JSON.stringify({id:t.id,asset_id:t.asset_id,invoice:t.invoice?`${t.invoice.substring(0,20)}...`:void 0,payment_hash:t.payment_hash,status:t.status})}a(PF,"formatTransactionLog");async function Due(t,e){let r={id:t.id};await EAr(e,r)}a(Due,"updateTransaction");ytt.exports=kAr});var Ttt=v((ban,Ett)=>{var{upsertTransactionByFilter:PAr,getTransactionsByFilter:LAr}=Th(),{getRGBAssetsList:DAr}=oA(),{listTransfers:xtt}=kie(),wtt=Ke(),{TRANSACTION_STATUS:Fm,NODE_TYPE:BAr,TRANSACTION_KIND:MAr,TRANSACTION_ASSET_TYPE:FAr,TRANSACTION_DIRECTION:btt}=rt();async function UAr(){let t=new wtt("poll-rgb-transfers");try{t.info("Starting RGB asset transfers polling task");let e=await LAr({node_type:BAr.RGB,transaction_kind:MAr.ONCHAIN,asset_type:FAr.RGB_ASSET,status:Fm.PENDING});if(!e||!e.list||e.list.length===0){t.info("No pending RGB transactions found in database");return}t.info(`Found ${e.list.length} pending RGB transactions in database`);let r=0,n=0,i=0,s=0;for(let o of e.list)try{if(qAr(o)){await Bue(o,{status:Fm.EXPIRED,update_at:Math.floor(Date.now()/1e3)}),t.info(`Marked transaction as EXPIRED: ${j_(o)}`),s++;continue}if(!o.asset_id){t.info(`Processing transaction without asset_id: ${j_(o)}`);let p=await VAr(o);if(p){await Bue(o,{asset_id:p,update_at:Math.floor(Date.now()/1e3)}),t.info(`Updated transaction with matched asset_id: ${j_({...o,asset_id:p})}`),r++;continue}else{t.info(`No matching asset ID found for transaction: ${j_(o)}`),i++;continue}}let u=(await xtt({asset_id:o.asset_id}))?.transfers||[];if(!u||u.length===0){t.info(`No transfers found for asset_id ${o.asset_id}`),i++;continue}let l=u.filter(p=>p.kind==="ReceiveBlind"||p.kind==="Send");if(l.length===0){t.info(`No relevant transfers found for asset_id ${o.asset_id}`),i++;continue}let d=GAr(o,l);if(!d){t.info(`No matching transfer found for transaction: ${j_(o)}`),i++;continue}let f=jAr(d.status);if(f!==o.status){let p={status:f,update_at:Math.floor(Date.now()/1e3)};f===Fm.CONFIRMED&&d.confirmed_at&&(p.confirm_at=d.confirmed_at),d.txid&&!o.tx_hash&&(p.tx_hash=d.txid);let _=$Ar(d);_!=="0"&&(!o.asset_amount||o.asset_amount==="0")&&(p.asset_amount=_),await Bue(o,p),t.info(`Updated transaction status from ${o.status} to ${f}: ${j_(o)}`),r++}else n++}catch(c){t.error(`Error processing transaction ${o.id}: ${c.message}`)}t.info(`RGB transfers polling completed: ${e.list.length} processed, ${r} updated, ${n} unchanged, ${i} not found, ${s} expired`)}catch(e){throw t.error(`Error in pollRgbTransfers: ${e.message}`),e}}a(UAr,"pollRgbTransfers");function qAr(t){if(!t.create_at)return!1;let e=Math.floor(Date.now()/1e3),r=1440*60;return e-t.create_at>r}a(qAr,"isTransactionExpired");function HAr(t){switch(t){case"Send":return btt.OUT;case"ReceiveBlind":case"Issuance":return btt.IN;default:return null}}a(HAr,"getDirection");function jAr(t){switch(t){case"Settled":return Fm.CONFIRMED;case"WaitingCounterparty":return Fm.PENDING;case"Failed":return Fm.FAILED;case"Expired":return Fm.EXPIRED;default:return Fm.PENDING}}a(jAr,"getStatus");function $Ar(t){return t.requested_assignment&&t.requested_assignment.type==="Fungible"?t.requested_assignment.value.toString():t.assignments&&t.assignments.length>0?t.assignments[0].value.toString():"0"}a($Ar,"calculateAssetAmount");function GAr(t,e){if(!e||e.length===0)return null;if(t.tx_hash){let r=e.find(n=>n.txid===t.tx_hash);if(r)return r}if(t.invoice){let r=e.find(n=>n.invoice===t.invoice);if(r)return r}if(t.target_address){let r=e.filter(n=>n.recipient_id===t.target_address);if(r.length>0&&t.asset_id){let n=r.filter(i=>i.asset_id===t.asset_id);if(n.length>0)return n.sort((i,s)=>s.created_at-i.created_at)[0]}if(r.length>0)return r.sort((n,i)=>i.created_at-n.created_at)[0]}if(t.asset_id){let r=e.filter(n=>n.asset_id===t.asset_id);if(r.length>0&&t.direction){let n=r.filter(i=>HAr(i.kind)===t.direction);if(n.length>0)return n.sort((i,s)=>s.created_at-i.created_at)[0]}if(r.length>0)return r.sort((n,i)=>i.created_at-n.created_at)[0]}return null}a(GAr,"findMatchingTransfer");function j_(t){return JSON.stringify({id:t.id,asset_id:t.asset_id,invoice:t.invoice?`${t.invoice.substring(0,20)}...`:void 0,tx_hash:t.tx_hash,target_address:t.target_address})}a(j_,"formatTransactionLog");async function VAr(t){let e=new wtt("poll-rgb-transfers");if(!t.target_address)return e.info(`Transaction has no target_address, cannot match asset_id: ${j_(t)}`),null;let r=[];try{r=await DAr(),e.info(`Retrieved ${r.length} RGB assets from node`)}catch(n){return e.error(`Error getting RGB assets list: ${n.message}`),null}if(r.length===0)return e.info("No RGB assets found in node"),null;for(let n of r)try{let i=n.asset_id,o=(await xtt({asset_id:i}))?.transfers||[];if(o.length===0)continue;if(o.find(u=>u.recipient_id===t.target_address))return e.info(`Found matching asset_id ${i} by target_address for transaction: ${j_(t)}`),i}catch(i){e.error(`Error processing asset ${n.asset_id}: ${i.message}`)}return e.info(`No matching asset found for transaction: ${j_(t)}`),null}a(VAr,"getAssetIdForTransaction");async function Bue(t,e){let r={id:t.id};await PAr(e,r)}a(Bue,"updateTransaction");Ett.exports=UAr});var Att=v((wan,Stt)=>{var{getNodeState:KAr,refreshTransfers:zAr}=L3(),JAr=Ke(),{WALLET_STATE_CODE:WAr}=rt();async function XAr(){let t=new JAr("job");try{if((await KAr()).state!==WAr.SERVER_ACTIVE)return;await zAr({skip_sync:!1})}catch(e){t.error(`Job refreshTransfers error: ${e}`)}}a(XAr,"callRefreshTransfers");Stt.exports=XAr});var BF=v((Tan,Rtt)=>{var{upsertTransactionByFilter:ktt,getTransactionsByFilter:QAr}=Mr(),Ntt=Ke(),{TRANSACTION_STATUS:md,TRANSACTION_DIRECTION:DF}=rt();function Ott(t){switch(t){case"ADDR_EVENT_STATUS_UNKNOWN":return md.PENDING;case"ADDR_EVENT_STATUS_TRANSACTION_DETECTED":return md.PENDING;case"ADDR_EVENT_STATUS_TRANSACTION_CONFIRMED":return md.CONFIRMED;case"ADDR_EVENT_STATUS_PROOF_RECEIVED":return md.CONFIRMED;case"ADDR_EVENT_STATUS_COMPLETED":return md.CONFIRMED;default:return md.PENDING}}a(Ott,"mapReceiveEventStatusToTransactionStatus");function Itt(t){switch(t){case"SendStateWaitTxConf":case"SendStateStorePostAnchorTxConf":case"SendStateTransferProofs":return md.PENDING;case"SendStateComplete":return md.CONFIRMED;default:return md.PENDING}}a(Itt,"mapSendStateToTransactionStatus");function Ctt(t,e,r,n){let i=`${t.substring(0,8)}...${t.substring(t.length-8)}`,s=n?`${n.substring(0,8)}...${n.substring(n.length-8)}`:"pending";return`Taproot Asset ${r===DF.IN?"deposit":"withdrawal"} - ${e} units of ${i} (${s})`}a(Ctt,"generateTaprootTransactionDescription");async function YAr(t){let e=new Ntt("taprootOnchainTransChange");try{if(e.info("Processing Taproot receive event:",t?.address,t.outpoint),!t.address||!t.outpoint)throw new Error("Invalid receive event: missing address or outpoint");let{address:r,outpoint:n,confirmation_height:i=0,status:s="ADDR_EVENT_STATUS_UNKNOWN",timestamp:o}=t,c=r.asset_id?r.asset_id.toString("hex"):null,u=r.amount?r.amount.toString():"0",l=r.encoded||null;if(!c||!l)throw new Error("Invalid receive event: missing asset_id or target_address");let d=n.split(":")[0],f=Ott(s),p=Math.floor(Date.now()/1e3),_={tx_hash:d,status:f,block_height:i||0,confirmations:i>0?1:0,update_at:p,settled_at:f===md.CONFIRMED?p:null,description:Ctt(c,u,DF.IN,d)};if(o&&(_.create_at=Math.floor(o/1e6)),await ktt(_,{target_address:l}))return e.info(`Successfully updated Taproot receive record: ${d}, asset: ${c}, amount: ${u}`),{success:!0,tx_hash:d,asset_id:c,asset_amount:u,direction:DF.IN,status:f,target_address:l,is_update:!0,operation_type:"update_waiting_record",processed_at:p};throw new Error(`Database update failed for Taproot transaction ${d}`)}catch(r){throw e.error(`Error processing Taproot receive event: ${r.message}`),r}}a(YAr,"handleTaprootReceiveEvent");async function ZAr(t){let e=new Ntt("taprootOnchainTransChange");try{if(e.info("Processing Taproot send event----------->:",t?.send_state),!t.transfer)return e.debug("Send event has no transfer data, skipping"),{success:!1,reason:"No transfer data in send event"};let{send_state:r,transfer:n}=t,{anchor_tx_hash:i,inputs:s=[],anchor_tx_chain_fees:o=0,anchor_tx_height_hint:c=0}=n;if(!i||s.length===0)throw new Error("Invalid send event: missing anchor_tx_hash or inputs");let u=s[0],l=u.asset_id?u.asset_id.toString("hex"):null;if(!l)throw new Error("Invalid send event: missing asset_id in inputs");let d=i.toString("hex"),f=Itt(r),p=Math.floor(Date.now()/1e3),_={tx_hash:d,status:f,fees_paid:o?o.toString():"0",block_height:c||0,confirmations:c>0?1:0,update_at:p,settled_at:f===md.CONFIRMED?p:null};e.info(`Looking for existing record with tx_hash: ${d}`);let h=await QAr({tx_hash:d,limit:1});if(!h.list||h.list.length===0)return e.warn(`No record found for tx_hash: ${d}. Will retry on next event.`),{success:!1,reason:"Record not found, will retry later",tx_hash:d,skipped:!0};if(e.info(`Found existing record for tx_hash: ${d}, updating status to: ${f}`),await ktt(_,{tx_hash:d}))return e.info(`Successfully updated Taproot send record: ${d}, asset: ${l}`),{success:!0,tx_hash:d,asset_id:l,direction:DF.OUT,status:f,fees_paid:o,is_update:!0,operation_type:"update_waiting_record",processed_at:p};throw new Error(`Database update failed for Taproot send transaction ${d}`)}catch(r){throw e.error(`Error processing Taproot send event: ${r.message}`),r}}a(ZAr,"handleTaprootSendEvent");Rtt.exports={handleTaprootReceiveEvent:YAr,handleTaprootSendEvent:ZAr,mapReceiveEventStatusToTransactionStatus:Ott,mapSendStateToTransactionStatus:Itt,generateTaprootTransactionDescription:Ctt}});var Ftt=v((Aan,Mtt)=>{var{getTransactionsByFilter:Ptt,upsertTransactionByFilter:Ltt}=Mr(),{addrReceives:e8r,listTransfers:t8r}=Uy(),Fue=Ke(),{TRANSACTION_STATUS:pN,TRANSACTION_KIND:Dtt,TRANSACTION_ASSET_TYPE:Btt,TRANSACTION_DIRECTION:Mue}=rt(),{mapReceiveEventStatusToTransactionStatus:r8r,generateTaprootTransactionDescription:n8r}=BF(),i8r=20,a8r=15;function s8r(t){if(!t||t.length===0)return null;let e=t[0];for(let r of t){if(r.status==="ADDR_EVENT_STATUS_COMPLETED"||r.status==="ADDR_EVENT_STATUS_PROOF_RECEIVED")return r;r.status==="ADDR_EVENT_STATUS_TRANSACTION_CONFIRMED"&&e.status!=="ADDR_EVENT_STATUS_TRANSACTION_CONFIRMED"&&(e=r)}return e.status==="ADDR_EVENT_STATUS_UNKNOWN"?null:e}a(s8r,"findMostDefinitiveReceiveEvent");async function o8r(){let t=new Fue("poll-taproot-transfers");try{t.info("Starting Taproot Asset transfers polling task");let{checkTprEnabled:e}=Qi();if(!await e()){t.warn("TaprootAssets not enabled, skipping polling task");return}await c8r(),await u8r(),t.info("Taproot Asset transfers polling task completed")}catch(e){if(e.message.includes("TaprootAssets not enabled")){t.warn("TaprootAssets not enabled, skipping polling task");return}throw t.error(`Error in pollTaprootAssetTransfers: ${e.message}`,{stack:e.stack}),e}}a(o8r,"pollTaprootAssetTransfers");async function c8r(){let t=new Fue("poll-taproot-transfers");t.info("Polling pending Taproot Asset incoming on-chain transactions...");try{let e=new Date;e.setMinutes(e.getMinutes()-i8r);let n=(await Ptt({status:pN.PENDING,transaction_kind:Dtt.ONCHAIN,direction:Mue.IN,asset_type:Btt.TAPROOT_ASSET,from:Math.floor(e.getTime()/1e3)})).list;if(!n||n.length===0){t.info("No pending incoming Taproot transactions found in database");return}t.info(`Found ${n.length} pending incoming Taproot transactions to check`);let i=0;for(let s of n)if(s.target_address)try{let o=await e8r(s.target_address),c=s8r(o);if(c&&r8r(c.status)===pN.CONFIRMED){t.info(`Updating incoming transaction for address ${s.target_address}: status is ${c.status} on tapd`);let l=c.outpoint.split(":")[0],d={status:pN.CONFIRMED,tx_hash:l,block_height:c.confirmation_height||0,confirmations:c.confirmation_height>0?1:0,settled_at:c.timestamp?Math.floor(c.timestamp/1e6):Math.floor(Date.now()/1e3),update_at:Math.floor(Date.now()/1e3),description:n8r(s.asset_id,s.asset_amount,Mue.IN,l)};await Ltt(d,{target_address:s.target_address}),i++}}catch(o){t.error(`Failed to update incoming transaction for address ${s.target_address}: ${o.message}`)}t.info(`Incoming Taproot transactions polling completed: ${i} of ${n.length} transactions updated`)}catch(e){t.error(`Error in pollIncomingTransfers: ${e.message}`,{stack:e.stack})}}a(c8r,"pollIncomingTransfers");async function u8r(){let t=new Fue("poll-taproot-transfers");t.info("Polling pending Taproot Asset outgoing on-chain transactions...");try{let e=await t8r();if(!e||e.length===0){t.info("No transfers found from tapd, skipping outgoing transactions polling");return}let r=new Map;for(let c of e)if(c.anchor_tx_hash){let u=c.anchor_tx_hash.toString("hex");r.set(u,c)}let n=new Date;n.setMinutes(n.getMinutes()-a8r);let s=(await Ptt({status:pN.PENDING,transaction_kind:Dtt.ONCHAIN,direction:Mue.OUT,asset_type:Btt.TAPROOT_ASSET,created_at:Math.floor(n.getTime()/1e3)})).list;if(!s||s.length===0){t.info("No pending outgoing Taproot transactions found in database");return}t.info(`Found ${s.length} pending outgoing Taproot transactions to check`);let o=0;for(let c of s){if(!c.tx_hash)continue;let u=r.get(c.tx_hash);u?u.anchor_tx_block_hash&&(u.anchor_tx_height_hint>0||u.anchor_tx_block_height>0)&&(t.info(`Updating outgoing transaction ${c.tx_hash}: confirmed on-chain via tapd transfer data`),await Ltt({status:pN.CONFIRMED,block_height:u.anchor_tx_height_hint||u.anchor_tx_block_height||0,confirmations:1,settled_at:u.transfer_timestamp?Math.floor(u.transfer_timestamp/1e6):Math.floor(Date.now()/1e3),fees_paid:u.anchor_tx_chain_fees?u.anchor_tx_chain_fees.toString():c.fees_paid,update_at:Math.floor(Date.now()/1e3)},{tx_hash:c.tx_hash}),o++):t.warn(`Could not find tx ${c.tx_hash} in recent tapd transfers. It might be too old or have failed before broadcasting.`)}t.info(`Outgoing Taproot transactions polling completed: ${o} of ${s.length} transactions updated`)}catch(e){t.error(`Error in pollOutgoingTransfers: ${e.message}`,{stack:e.stack})}}a(u8r,"pollOutgoingTransfers");Mtt.exports=o8r});var qtt=v((Nan,Utt)=>{var{initAccount:l8r}=dOe(),{bakeLoopMacaroon:d8r}=e0(),{bakeTaprootMacaroon:f8r}=Uy(),p8r=Oo(),_8r=Ke(),{WALLET_STATE_CODE:h8r}=rt(),{listenerNostrEvent:m8r}=Iet(),g8r=Ret(),y8r=Let(),v8r=Bet(),b8r=Get(),x8r=ntt(),w8r=stt(),E8r=ptt(),T8r=vtt(),S8r=Ttt(),A8r=Att(),k8r=Ftt(),N8r={lnd_connect_peer:{type:"cron",schedule:"*/3 * * * *",implementation:v8r,gate:"lndActive",priority:3,enabled:!0,maxRetries:3,timeout:3e4,description:"Periodically connect to peer nodes"},lnd_check_channel_state:{type:"cron",schedule:"*/3 * * * *",implementation:y8r,gate:"lndActive",priority:3,enabled:!0,maxRetries:3,timeout:3e4,description:"Periodically check channel state"},lnd_add_federation:{type:"cron",schedule:"*/3 * * * *",implementation:g8r,gate:"lndActive",priority:4,enabled:!0,maxRetries:3,timeout:3e4,description:"Periodically add federation servers"},lnd_poll_btc_transfers:{type:"cron",schedule:"*/2 * * * *",implementation:b8r,gate:"lndActive",priority:3,enabled:!0,maxRetries:3,timeout:6e4,description:"Poll LND BTC transfers status and update the database"},lnd_poll_invoice_transfers:{type:"cron",schedule:"*/10 * * * * *",implementation:x8r,gate:"lndActive",priority:2,enabled:!0,maxRetries:3,timeout:3e4,description:"Poll LND invoice transfers for status changes (backup mechanism)"},tapd_poll_asset_transfers:{type:"cron",schedule:"*/1 * * * *",implementation:k8r,gate:"lndActive",priority:5,enabled:!0,maxRetries:3,timeout:6e4,description:"Poll Taproot Asset transfers status and update the database"},rgb_connect_peer:{type:"cron",schedule:"*/3 * * * *",implementation:w8r,gate:"rgbActive",priority:3,enabled:!0,maxRetries:3,timeout:3e4,description:"Periodically connect to RGB peer nodes"},rgb_refresh_transfers:{type:"cron",schedule:"*/10 * * * * *",implementation:A8r,gate:"rgbActive",priority:2,enabled:!0,maxRetries:3,timeout:3e4,description:"Refresh RGB transfers status"},rgb_poll_btc_transfers:{type:"cron",schedule:"*/2 * * * *",implementation:E8r,gate:"rgbActive",priority:2,enabled:!0,maxRetries:3,timeout:3e4,description:"Poll RGB BTC transfers"},rgb_poll_rgb_transfers:{type:"cron",schedule:"*/2 * * * *",implementation:S8r,gate:"rgbActive",priority:2,enabled:!0,maxRetries:3,timeout:3e4,description:"Poll RGB asset transfers"},rgb_poll_lightning_transfers:{type:"cron",schedule:"*/30 * * * * *",implementation:T8r,gate:"rgbActive",priority:1,enabled:!0,maxRetries:3,timeout:3e4,description:"Poll RGB Lightning transfers"},bake_tapd_macaroon:{type:"event",event:"bakeTapdMacaroon",implementation:a(async()=>{let t=new _8r("bake-tapd-macaroon"),e=p8r.get("tempPassword");if(!e){t.warn("No password found in linkCache, skip bakeTapdMacaroon");return}await f8r({secret:e}),t.info("Taproot macaroon baked successfully")},"implementation"),gate:"always",enabled:!0,maxRetries:10,description:"Bake Taproot macaroon when server is active"},bake_loop_macaroon:{type:"event",event:"bakeLoopMacaroon",implementation:a(async t=>{let{terminateableRetryExecute:e}=qW(),r=Ke(),n=new r("bake-loop-macaroon");await e(d8r,{origin_secret:t},"bakeLoopMacaroon",0,6e4,n)},"implementation"),gate:"always",enabled:!0,maxRetries:5,description:"Bake Loop macaroon"},listen_nostr_event:{type:"event",event:"listenNostrEvent",implementation:m8r,gate:"always",enabled:!0,description:"Start listening to Nostr events"},init_account:{type:"event",event:"initAccount",implementation:l8r,gate:"always",enabled:!0,description:"Initialize account"}},O8r={always:a(()=>!0,"always"),lndActive:a(()=>Oo().get("walletState")===h8r.SERVER_ACTIVE,"lndActive"),rgbActive:a(()=>Oo().get("rgbState")===4,"rgbActive")};Utt.exports={TASKS:N8r,GATES:O8r}});var jtt=v((Ian,Htt)=>{var I8r=require("node:events"),C8r=Ke(),Uue=class extends I8r{static{a(this,"EventBus")}constructor(){super(),this.logger=new C8r("EventBus"),this.handlers=new Map,this.stats={eventsEmitted:0,handlersRegistered:0,errors:0}}register(e,r,n={}){this.handlers.has(e)&&(this.logger.warn(`Event handler for '${e}' already exists, replacing...`),this.unregister(e));let i=a(async(...s)=>{try{this.logger.debug(`Event '${e}' triggered`);let o=Date.now(),c=await r(...s),u=Date.now()-o;return this.logger.debug(`Event '${e}' completed in ${u}ms`),c}catch(o){if(this.stats.errors++,this.logger.error(`Event '${e}' handler failed: ${o.message}`),n.throwOnError)throw o}},"wrappedHandler");this.on(e,i),this.handlers.set(e,{handler:i,originalHandler:r,options:n,registeredAt:new Date}),this.stats.handlersRegistered++,this.logger.info(`Registered event handler: ${e}`)}unregister(e){let r=this.handlers.get(e);r&&(this.removeListener(e,r.handler),this.handlers.delete(e),this.logger.info(`Unregistered event handler: ${e}`))}emit(e,...r){return this.stats.eventsEmitted++,this.logger.debug(`Emitting event: ${e}`),super.emit(e,...r)}getStats(){return{...this.stats,registeredHandlers:this.handlers.size,handlerNames:Array.from(this.handlers.keys())}}cleanup(){this.logger.info("Cleaning up event bus...");let e=Array.from(this.handlers.keys());e.forEach(r=>this.unregister(r)),this.removeAllListeners(),this.logger.info(`Event bus cleanup completed. Removed ${e.length} handlers`)}};Htt.exports=Uue});var Gtt=v((Ran,$tt)=>{var R8r=Ke(),que=class{static{a(this,"Gates")}constructor(e={}){this.logger=new R8r("Gates"),this.gates=new Map,this.stats={evaluations:0,passedEvaluations:0,failedEvaluations:0},this.loadGates(e)}loadGates(e){Object.entries(e).forEach(([r,n])=>{this.registerGate(r,n)}),this.logger.info(`Loaded ${this.gates.size} gates`)}registerGate(e,r){if(typeof r!="function")throw new TypeError(`Gate '${e}' must be a function`);this.gates.set(e,r),this.logger.debug(`Registered gate: ${e}`)}evaluate(e){let r=this.gates.get(e);if(!r)return this.logger.warn(`Gate '${e}' not found, defaulting to false`),!1;try{this.stats.evaluations++;let n=r();return n?this.stats.passedEvaluations++:this.stats.failedEvaluations++,this.logger.debug(`Gate '${e}' evaluated to: ${n}`),n}catch(n){return this.stats.failedEvaluations++,this.logger.error(`Error evaluating gate '${e}': ${n.message}`),!1}}hasGate(e){return this.gates.has(e)}getGateNames(){return Array.from(this.gates.keys())}evaluateMultiple(e,r="and"){if(!Array.isArray(e)||e.length===0)return!0;let n=e.map(i=>this.evaluate(i));return r==="or"?n.some(i=>i):n.every(i=>i)}getStats(){return{...this.stats,registeredGates:this.gates.size,gateNames:this.getGateNames(),successRate:this.stats.evaluations>0?`${(this.stats.passedEvaluations/this.stats.evaluations*100).toFixed(2)}%`:"0%"}}resetStats(){this.stats={evaluations:0,passedEvaluations:0,failedEvaluations:0},this.logger.info("Gate statistics reset")}};$tt.exports=que});var Ktt=v((Lan,Vtt)=>{"use strict";var P8r=require("events"),Hue=class extends P8r{static{a(this,"Task")}constructor(e){if(super(),typeof e!="function")throw"execution must be a function";this._execution=e}execute(e){let r;try{r=this._execution(e)}catch(n){return this.emit("task-failed",n)}return r instanceof Promise?r.then(()=>this.emit("task-finished")).catch(n=>this.emit("task-failed",n)):(this.emit("task-finished"),r)}};Vtt.exports=Hue});var Jtt=v((Ban,ztt)=>{"use strict";ztt.exports=(()=>{let t=["january","february","march","april","may","june","july","august","september","october","november","december"],e=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"];function r(i,s){for(let o=0;o<s.length;o++)i=i.replace(new RegExp(s[o],"gi"),parseInt(o,10)+1);return i}a(r,"convertMonthName");function n(i){return i=r(i,t),i=r(i,e),i}return a(n,"interprete"),n})()});var Xtt=v((Fan,Wtt)=>{"use strict";Wtt.exports=(()=>{let t=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],e=["sun","mon","tue","wed","thu","fri","sat"];function r(i,s){for(let o=0;o<s.length;o++)i=i.replace(new RegExp(s[o],"gi"),parseInt(o,10));return i}a(r,"convertWeekDayName");function n(i){return i=i.replace("7","0"),i=r(i,t),r(i,e)}return a(n,"convertWeekDays"),n})()});var Ytt=v((qan,Qtt)=>{"use strict";Qtt.exports=(()=>{function t(r,n){return r.indexOf("*")!==-1?r.replace("*",n):r}a(t,"convertAsterisk");function e(r){return r[0]=t(r[0],"0-59"),r[1]=t(r[1],"0-59"),r[2]=t(r[2],"0-23"),r[3]=t(r[3],"1-31"),r[4]=t(r[4],"1-12"),r[5]=t(r[5],"0-6"),r}return a(e,"convertAsterisksToRanges"),e})()});var ert=v((jan,Ztt)=>{"use strict";Ztt.exports=(()=>{function t(n,i,s,o){let c=[],u=parseInt(o),l=parseInt(s);l>u&&(u=parseInt(s),l=parseInt(o));for(let d=l;d<=u;d++)c.push(d);return n.replace(new RegExp(i,"i"),c.join())}a(t,"replaceWithRange");function e(n){let i=/(\d+)-(\d+)/,s=i.exec(n);for(;s!==null&&s.length>0;)n=t(n,s[0],s[1],s[2]),s=i.exec(n);return n}a(e,"convertRange");function r(n){for(let i=0;i<n.length;i++)n[i]=e(n[i]);return n}return a(r,"convertAllRanges"),r})()});var rrt=v((Gan,trt)=>{"use strict";trt.exports=(()=>{function t(e){for(var r=/^(.+)\/(\w+)$/,n=0;n<e.length;n++){var i=r.exec(e[n]),s=i!==null&&i.length>0;if(s){var o=i[2];if(isNaN(o))throw o+" is not a valid step value";for(var c=i[1].split(","),u=[],l=parseInt(o,10),d=0;d<=c.length;d++){var f=parseInt(c[d],10);f%l===0&&u.push(f)}e[n]=u.join(",")}}return e}return a(t,"convertSteps"),t})()});var jue=v((Kan,nrt)=>{"use strict";var L8r=Jtt(),D8r=Xtt(),B8r=Ytt(),M8r=ert(),F8r=rrt();nrt.exports=(()=>{function t(i){return i.length===5?["0"].concat(i):i}a(t,"appendSeccondExpression");function e(i){return i.replace(/\s{2,}/g," ").trim()}a(e,"removeSpaces");function r(i){for(let s=0;s<i.length;s++){let o=i[s].split(",");for(let c=0;c<o.length;c++)o[c]=parseInt(o[c]);i[s]=o}return i}a(r,"normalizeIntegers");function n(i){let s=e(i).split(" ");return s=t(s),s[4]=L8r(s[4]),s[5]=D8r(s[5]),s=B8r(s),s=M8r(s),s=F8r(s),s=r(s),s.join(" ")}return a(n,"interprete"),n})()});var $ue=v((Jan,irt)=>{"use strict";var U8r=jue(),q8r=/^(?:\d+|\*|\*\/\d+)$/;function TT(t,e,r){let n=t.split(",");for(let i of n){let s=parseInt(i,10);if(!Number.isNaN(s)&&(s<e||s>r)||!q8r.test(i))return!1}return!0}a(TT,"isValidExpression");function H8r(t){return!TT(t,0,59)}a(H8r,"isInvalidSecond");function j8r(t){return!TT(t,0,59)}a(j8r,"isInvalidMinute");function $8r(t){return!TT(t,0,23)}a($8r,"isInvalidHour");function G8r(t){return!TT(t,1,31)}a(G8r,"isInvalidDayOfMonth");function V8r(t){return!TT(t,1,12)}a(V8r,"isInvalidMonth");function K8r(t){return!TT(t,0,7)}a(K8r,"isInvalidWeekDay");function z8r(t,e){if(H8r(e[0]))throw new Error(`${t[0]} is a invalid expression for second`);if(j8r(e[1]))throw new Error(`${t[1]} is a invalid expression for minute`);if($8r(e[2]))throw new Error(`${t[2]} is a invalid expression for hour`);if(G8r(e[3]))throw new Error(`${t[3]} is a invalid expression for day of month`);if(V8r(e[4]))throw new Error(`${t[4]} is a invalid expression for month`);if(K8r(e[5]))throw new Error(`${t[5]} is a invalid expression for week day`)}a(z8r,"validateFields");function J8r(t){if(typeof t!="string")throw new TypeError("pattern must be a string!");let e=t.split(" "),r=U8r(t).split(" ");e.length===5&&e.unshift("0"),z8r(e,r)}a(J8r,"validate");irt.exports=J8r});var srt=v((Xan,art)=>{var W8r=$ue(),X8r=jue();function ST(t,e){return t.indexOf(",")!==-1?t.split(",").indexOf(e.toString())!==-1:t===e.toString()}a(ST,"matchPattern");var Gue=class{static{a(this,"TimeMatcher")}constructor(e,r){W8r(e),this.pattern=X8r(e),this.timezone=r,this.expressions=this.pattern.split(" "),this.dtf=this.timezone?new Intl.DateTimeFormat("en-US",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23",fractionalSecondDigits:3,timeZone:this.timezone}):null}match(e){e=this.apply(e);let r=ST(this.expressions[0],e.getSeconds()),n=ST(this.expressions[1],e.getMinutes()),i=ST(this.expressions[2],e.getHours()),s=ST(this.expressions[3],e.getDate()),o=ST(this.expressions[4],e.getMonth()+1),c=ST(this.expressions[5],e.getDay());return r&&n&&i&&s&&o&&c}apply(e){return this.dtf?new Date(this.dtf.format(e)):e}};art.exports=Gue});var crt=v((Yan,ort)=>{"use strict";var Q8r=require("events"),Y8r=srt(),Vue=class extends Q8r{static{a(this,"Scheduler")}constructor(e,r,n){super(),this.timeMatcher=new Y8r(e,r),this.autorecover=n}start(){this.stop();let e=process.hrtime(),r=this.timeMatcher.apply(new Date),n=a(()=>{let s=process.hrtime(e),o=(s[0]*1e9+s[1])/1e6,c=Math.floor(o/1e3);for(let u=c;u>=0;u--){let l=new Date(new Date().getTime()-u*1e3),d=this.timeMatcher.apply(l);r.getTime()<d.getTime()&&(u===0||this.autorecover)&&this.timeMatcher.match(l)&&(this.emit("scheduled-time-matched",d),d.setMilliseconds(0),r=d)}e=process.hrtime(),this.timeout=setTimeout(n,1e3)},"matchTime");n()}stop(){this.timeout&&clearTimeout(this.timeout),this.timeout=null}};ort.exports=Vue});function _N(){return MF>FF.length-16&&(urt.default.randomFillSync(FF),MF=0),FF.slice(MF,MF+=16)}var urt,FF,MF,Kue=gi(()=>{urt=mo(require("crypto")),FF=new Uint8Array(256),MF=FF.length;a(_N,"rng")});var lrt,drt=gi(()=>{lrt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function Z8r(t){return typeof t=="string"&&lrt.test(t)}var Um,hN=gi(()=>{drt();a(Z8r,"validate");Um=Z8r});function e3r(t,e=0){let r=(ps[t[e+0]]+ps[t[e+1]]+ps[t[e+2]]+ps[t[e+3]]+"-"+ps[t[e+4]]+ps[t[e+5]]+"-"+ps[t[e+6]]+ps[t[e+7]]+"-"+ps[t[e+8]]+ps[t[e+9]]+"-"+ps[t[e+10]]+ps[t[e+11]]+ps[t[e+12]]+ps[t[e+13]]+ps[t[e+14]]+ps[t[e+15]]).toLowerCase();if(!Um(r))throw TypeError("Stringified UUID is invalid");return r}var ps,qm,mN=gi(()=>{hN();ps=[];for(let t=0;t<256;++t)ps.push((t+256).toString(16).substr(1));a(e3r,"stringify");qm=e3r});function t3r(t,e,r){let n=e&&r||0,i=e||new Array(16);t=t||{};let s=t.node||frt,o=t.clockseq!==void 0?t.clockseq:zue;if(s==null||o==null){let p=t.random||(t.rng||_N)();s==null&&(s=frt=[p[0]|1,p[1],p[2],p[3],p[4],p[5]]),o==null&&(o=zue=(p[6]<<8|p[7])&16383)}let c=t.msecs!==void 0?t.msecs:Date.now(),u=t.nsecs!==void 0?t.nsecs:Wue+1,l=c-Jue+(u-Wue)/1e4;if(l<0&&t.clockseq===void 0&&(o=o+1&16383),(l<0||c>Jue)&&t.nsecs===void 0&&(u=0),u>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");Jue=c,Wue=u,zue=o,c+=122192928e5;let d=((c&268435455)*1e4+u)%4294967296;i[n++]=d>>>24&255,i[n++]=d>>>16&255,i[n++]=d>>>8&255,i[n++]=d&255;let f=c/4294967296*1e4&268435455;i[n++]=f>>>8&255,i[n++]=f&255,i[n++]=f>>>24&15|16,i[n++]=f>>>16&255,i[n++]=o>>>8|128,i[n++]=o&255;for(let p=0;p<6;++p)i[n+p]=s[p];return e||qm(i)}var frt,zue,Jue,Wue,prt,_rt=gi(()=>{Kue();mN();Jue=0,Wue=0;a(t3r,"v1");prt=t3r});function r3r(t){if(!Um(t))throw TypeError("Invalid UUID");let e,r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}var UF,Xue=gi(()=>{hN();a(r3r,"parse");UF=r3r});function n3r(t){t=unescape(encodeURIComponent(t));let e=[];for(let r=0;r<t.length;++r)e.push(t.charCodeAt(r));return e}function gN(t,e,r){function n(i,s,o,c){if(typeof i=="string"&&(i=n3r(i)),typeof s=="string"&&(s=UF(s)),s.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let u=new Uint8Array(16+i.length);if(u.set(s),u.set(i,s.length),u=r(u),u[6]=u[6]&15|e,u[8]=u[8]&63|128,o){c=c||0;for(let l=0;l<16;++l)o[c+l]=u[l];return o}return qm(u)}a(n,"generateUUID");try{n.name=t}catch{}return n.DNS=i3r,n.URL=a3r,n}var i3r,a3r,Que=gi(()=>{mN();Xue();a(n3r,"stringToBytes");i3r="6ba7b810-9dad-11d1-80b4-00c04fd430c8",a3r="6ba7b811-9dad-11d1-80b4-00c04fd430c8";a(gN,"default")});function s3r(t){return Array.isArray(t)?t=Buffer.from(t):typeof t=="string"&&(t=Buffer.from(t,"utf8")),hrt.default.createHash("md5").update(t).digest()}var hrt,mrt,grt=gi(()=>{hrt=mo(require("crypto"));a(s3r,"md5");mrt=s3r});var o3r,yrt,vrt=gi(()=>{Que();grt();o3r=gN("v3",48,mrt),yrt=o3r});function c3r(t,e,r){t=t||{};let n=t.random||(t.rng||_N)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){r=r||0;for(let i=0;i<16;++i)e[r+i]=n[i];return e}return qm(n)}var brt,xrt=gi(()=>{Kue();mN();a(c3r,"v4");brt=c3r});function u3r(t){return Array.isArray(t)?t=Buffer.from(t):typeof t=="string"&&(t=Buffer.from(t,"utf8")),wrt.default.createHash("sha1").update(t).digest()}var wrt,Ert,Trt=gi(()=>{wrt=mo(require("crypto"));a(u3r,"sha1");Ert=u3r});var l3r,Srt,Art=gi(()=>{Que();Trt();l3r=gN("v5",80,Ert),Srt=l3r});var krt,Nrt=gi(()=>{krt="00000000-0000-0000-0000-000000000000"});function d3r(t){if(!Um(t))throw TypeError("Invalid UUID");return parseInt(t.substr(14,1),16)}var Ort,Irt=gi(()=>{hN();a(d3r,"version");Ort=d3r});var qF={};AN(qF,{NIL:()=>krt,parse:()=>UF,stringify:()=>qm,v1:()=>prt,v3:()=>yrt,v4:()=>brt,v5:()=>Srt,validate:()=>Um,version:()=>Ort});var HF=gi(()=>{_rt();vrt();xrt();Art();Nrt();Irt();hN();mN();Xue()});var Rrt=v((zsn,Crt)=>{"use strict";var f3r=require("events"),p3r=Ktt(),_3r=crt(),h3r=(HF(),NT(qF)),Yue=class extends f3r{static{a(this,"ScheduledTask")}constructor(e,r,n){super(),n||(n={scheduled:!0,recoverMissedExecutions:!1}),this.options=n,this.options.name=this.options.name||h3r.v4(),this._task=new p3r(r),this._scheduler=new _3r(e,n.timezone,n.recoverMissedExecutions),this._scheduler.on("scheduled-time-matched",i=>{this.now(i)}),n.scheduled!==!1&&this._scheduler.start(),n.runOnInit===!0&&this.now("init")}now(e="manual"){let r=this._task.execute(e);this.emit("task-done",r)}start(){this._scheduler.start()}stop(){this._scheduler.stop()}};Crt.exports=Yue});var Lrt=v((Wsn,Prt)=>{var m3r=require("events"),g3r=require("path"),{fork:y3r}=require("child_process"),v3r=(HF(),NT(qF)),b3r=`${__dirname}/daemon.js`,Zue=class extends m3r{static{a(this,"BackgroundScheduledTask")}constructor(e,r,n){super(),n||(n={scheduled:!0,recoverMissedExecutions:!1}),this.cronExpression=e,this.taskPath=r,this.options=n,this.options.name=this.options.name||v3r.v4(),n.scheduled&&this.start()}start(){this.stop(),this.forkProcess=y3r(b3r),this.forkProcess.on("message",r=>{switch(r.type){case"task-done":this.emit("task-done",r.result);break}});let e=this.options;e.scheduled=!0,this.forkProcess.send({type:"register",path:g3r.resolve(this.taskPath),cron:this.cronExpression,options:e})}stop(){this.forkProcess&&this.forkProcess.kill()}pid(){if(this.forkProcess)return this.forkProcess.pid}isRunning(){return!this.forkProcess.killed}};Prt.exports=Zue});var Brt=v((Qsn,Drt)=>{Drt.exports=(global.scheduledTasks||(global.scheduledTasks=new Map),{save:a(t=>{if(!t.options){let e=(HF(),NT(qF));t.options={},t.options.name=e.v4()}global.scheduledTasks.set(t.options.name,t)},"save"),getTasks:a(()=>global.scheduledTasks,"getTasks")})});var Urt=v((Zsn,Frt)=>{"use strict";var x3r=Rrt(),w3r=Lrt(),E3r=$ue(),Mrt=Brt();function T3r(t,e,r){let n=S3r(t,e,r);return Mrt.save(n),n}a(T3r,"schedule");function S3r(t,e,r){return typeof e=="string"?new w3r(t,e,r):new x3r(t,e,r)}a(S3r,"createTask");function A3r(t){try{return E3r(t),!0}catch{return!1}}a(A3r,"validate");function k3r(){return Mrt.getTasks()}a(k3r,"getTasks");Frt.exports={schedule:T3r,validate:A3r,getTasks:k3r}});var Hrt=v((ton,qrt)=>{var N3r=Ke(),O3r=Urt(),ele=class{static{a(this,"Scheduler")}constructor(e,r){this.logger=r||new N3r("Scheduler"),this.gates=e,this.scheduledTasks=new Map,this.pausedTasks=new Map,this.stats={tasksScheduled:0,tasksExecuted:0,tasksSkipped:0,tasksFailed:0,tasksPaused:0,tasksResumed:0}}schedule(e,r){this.scheduledTasks.has(e)&&(this.logger.warn(`Task '${e}' already scheduled, removing old schedule`),this.unschedule(e));let n=O3r.schedule(r.schedule,async()=>{await this.executeTask(e,r)},{scheduled:!1,timezone:"UTC"}),i={start:a(()=>{n.start(),this.logger.info(`Started scheduled task: ${e}`)},"start"),stop:a(()=>{n.stop(),this.logger.info(`Stopped scheduled task: ${e}`)},"stop"),destroy:a(()=>{n.stop(),this.scheduledTasks.delete(e),this.logger.info(`Destroyed scheduled task: ${e}`)},"destroy")};return this.scheduledTasks.set(e,{cronTask:n,controller:i,task:r,scheduledAt:new Date}),this.stats.tasksScheduled++,this.logger.info(`Scheduled task '${e}' with schedule: ${r.schedule}`),i}async executeTask(e,r){try{if(!r.enabled){this.stats.tasksSkipped++,this.logger.debug(`Task '${e}' is disabled, skipping`);return}if(!this.gates.evaluate(r.gate)){this.stats.tasksSkipped++,this.logger.debug(`Task '${e}' gate '${r.gate}' not satisfied, skipping`);return}this.logger.debug(`Executing task: ${e}`);let n=Date.now(),i=await this.executeWithTimeout(r.implementation,r.timeout),s=Date.now()-n;this.stats.tasksExecuted++,this.logger.debug(`Task '${e}' completed in ${s}ms`),this.emit("task_success",{taskId:e,result:i,duration:s})}catch(n){this.stats.tasksFailed++,this.logger.error(`Task '${e}' failed: ${n.message}`),this.emit("task_error",{taskId:e,error:n})}}async executeWithTimeout(e,r=3e4,...n){return new Promise((i,s)=>{let o=setTimeout(()=>{s(new Error(`Task execution timed out after ${r}ms`))},r);Promise.resolve(e(...n)).then(c=>{clearTimeout(o),i(c)}).catch(c=>{clearTimeout(o),s(c)})})}unschedule(e){let r=this.scheduledTasks.get(e);r&&(r.controller.destroy(),this.logger.info(`Unscheduled task: ${e}`)),this.pausedTasks.forEach((n,i)=>{n.delete(e)&&n.size===0&&this.pausedTasks.delete(i)})}start(e){let r=this.scheduledTasks.get(e);r&&r.controller.start()}stop(e){let r=this.scheduledTasks.get(e);r&&r.controller.stop()}startAll(){this.scheduledTasks.forEach(e=>{e.controller.start()}),this.logger.info(`Started ${this.scheduledTasks.size} scheduled tasks`)}stopAll(){this.scheduledTasks.forEach(e=>{e.controller.stop()}),this.logger.info(`Stopped ${this.scheduledTasks.size} scheduled tasks`)}getTaskInfo(e){let r=this.scheduledTasks.get(e);return r?{taskId:e,schedule:r.task.schedule,gate:r.task.gate,enabled:r.task.enabled,scheduledAt:r.scheduledAt}:null}getAllTasksInfo(){return Array.from(this.scheduledTasks.keys()).map(e=>this.getTaskInfo(e))}getStats(){return{...this.stats,scheduledTasks:this.scheduledTasks.size,successRate:this.stats.tasksExecuted>0?`${(this.stats.tasksExecuted/(this.stats.tasksExecuted+this.stats.tasksFailed)*100).toFixed(2)}%`:"0%"}}emit(e,r){this.logger.debug(`Scheduler event: ${e}`,r)}async pauseTasksByGate(e){let r=[];if(this.scheduledTasks.forEach((i,s)=>{i.task.gate===e&&r.push({taskId:s,scheduledTask:i})}),r.length===0){this.logger.debug(`No tasks found with gate '${e}' to pause`);return}this.pausedTasks.has(e)||this.pausedTasks.set(e,new Set);let n=this.pausedTasks.get(e);r.forEach(({taskId:i,scheduledTask:s})=>{try{s.controller.stop(),n.add(i),this.stats.tasksPaused++,this.logger.debug(`Paused task '${i}' (gate: ${e})`)}catch(o){this.logger.error(`Error pausing task '${i}': ${o.message}`)}}),this.logger.info(`Paused ${r.length} tasks with gate '${e}'`)}async resumeTasksByGate(e){let r=this.pausedTasks.get(e);if(!r||r.size===0){this.logger.debug(`No paused tasks found with gate '${e}' to resume`);return}let n=[];r.forEach(i=>{let s=this.scheduledTasks.get(i);s&&n.push({taskId:i,scheduledTask:s})}),n.forEach(({taskId:i,scheduledTask:s})=>{try{s.controller.start(),r.delete(i),this.stats.tasksResumed++,this.logger.debug(`Resumed task '${i}' (gate: ${e})`)}catch(o){this.logger.error(`Error resuming task '${i}': ${o.message}`)}}),r.size===0&&this.pausedTasks.delete(e),this.logger.info(`Resumed ${n.length} tasks with gate '${e}'`)}getPausedTasksByGate(e){let r=this.pausedTasks.get(e);return r?Array.from(r):[]}isTaskPaused(e){for(let r of this.pausedTasks.values())if(r.has(e))return!0;return!1}cleanup(){this.logger.info("Cleaning up scheduler...");let e=Array.from(this.scheduledTasks.keys());e.forEach(r=>{let n=this.scheduledTasks.get(r);if(n)try{n.controller.stop(),this.scheduledTasks.delete(r),this.logger.debug(`Cleaned up scheduled task: ${r}`)}catch(i){this.logger.error(`Error cleaning up task ${r}: ${i.message}`)}}),this.pausedTasks.clear(),this.logger.info(`Scheduler cleanup completed. Removed ${e.length} scheduled tasks`)}};qrt.exports=ele});var Grt=v((non,$rt)=>{var I3r=require("node:events"),{sleep:jrt}=jS(),{WALLET_STATE_CODE:C3r}=rt(),tle=class extends I3r{static{a(this,"StateManager")}constructor(e,r,n){super(),this.logger=n,this.subscriptionManager=e,this.eventBus=r,this.currentState=null,this.isMonitoring=!1,this.stateSubscription=null,this.recoveryInterval=null,this.linkCache=Oo(),this.recoveryStats={totalNodeStops:0,totalRecoveries:0,totalDowntimeSeconds:0,averageRecoveryAttempts:0,longestDowntimeSeconds:0,shortestDowntimeSeconds:1/0,lastNodeStopTime:null,lastRecoveryTime:null,recoveryHistory:[]},this.currentRgbState=null,this.rgbStatePollingInterval=null,this.rgbPollingIntervalMs=1e4,this.recoveryInterval=null,this.recoveryCheckIntervalMs=1e4,this.isInRecoveryMode=!1,this.lndRetryTimeout=null,this.subscriptionRetryTimeout=null}async startStateMonitoring(){if(this.isMonitoring){this.logger.warn("State monitoring already active");return}this.isMonitoring=!0,this.startRgbStatePolling(),this.startLndStateMonitoring(),this.logger.info("State monitoring started"),this.emit("monitoring_started")}async startLndStateMonitoring(){let r=0,n=a(async()=>{if(!this.isMonitoring)return this.logger.debug("Skipping LND state monitoring attempt because monitoring stopped"),!1;try{let{getWalletService:i}=Qi(),{walletStateService:s}=await i();return this.walletStateService=s,this.stateSubscription=this.walletStateService.subscribeState(),this.stateSubscription.on("data",async o=>{await this.handleStateChange(o)}),this.stateSubscription.on("error",o=>{this.handleStateError(o)}),this.logger.info("LND state monitoring started successfully"),!0}catch(i){return r++,(i.message.includes("Wallet is not initialized yet")||i.message.includes("connection")||i.message.includes("UNAVAILABLE")||i.message.includes("ECONNREFUSED"))&&(this.logger.warn(`LND not ready yet (attempt ${r}): ${i.message}`),this.isMonitoring&&(this.clearLndRetryTimeout(),this.lndRetryTimeout=setTimeout(()=>{this.lndRetryTimeout=null,n()},5e3))),i.message.includes("Wallet is not initialized yet")?this.logger.info(`Failed to start LND state monitoring after ${r} attempts: ${i.message}`):this.logger.error(`Failed to start LND state monitoring after ${r} attempts: ${i.message}`),this.emit("lnd_monitoring_error",i),!1}},"tryStartLndMonitoring");this.clearLndRetryTimeout(),await n()}async handleStateChange(e){let r=this.currentState;this.currentState=e.state,this.logger.info(`State changed from ${r} to ${e.state}`),Oo().set("walletState",e.state),this.emit("state_changed",e),e.state===C3r.SERVER_ACTIVE?await this.handleServerActive():await this.handleServerInactive()}async handleServerActive(){try{this.logger.info("Server became active, starting subscriptions and services"),await jrt(5*1e3),await this.triggerMacaroonBaking(),await jrt(3*1e3),await this.startSubscriptionsWithRetry(),this.setupSubscriptionHandlers(),this.logger.info("Server active state handling completed")}catch(e){this.logger.error(`Error handling server active state: ${e.message}`),this.emit("state_error",e)}}async triggerMacaroonBaking(){let e=require("node:fs"),{getConfigFilePath:r}=HS();this.logger.info("Triggering macaroon baking..."),this.eventBus.emit("bakeTapdMacaroon");let{taprootMacaroonPath:n}=r(),i=3e4,s=1e3,o=Date.now();for(;Date.now()-o<i;){if(e.existsSync(n)){this.logger.info("Macaroon file detected, baking completed successfully");return}await new Promise(c=>setTimeout(c,s))}this.logger.warn("Macaroon baking timeout - proceeding anyway")}async startSubscriptionsWithRetry(){let n=0,i=a(async()=>{if(!this.isMonitoring)return this.logger.debug("Skipping subscription retry because monitoring stopped"),!1;try{return await this.subscriptionManager.startSubscriptions(),this.logger.info("LND subscriptions started successfully"),this.clearSubscriptionRetryTimeout(),!0}catch(s){return n++,s.message.includes("not available")&&n<=5&&(this.logger.warn(`LND services not ready yet (attempt ${n}/5): ${s.message}`),n<=5)?(this.isMonitoring&&(this.clearSubscriptionRetryTimeout(),this.subscriptionRetryTimeout=setTimeout(()=>{this.subscriptionRetryTimeout=null,i()},2e3)),!1):(this.logger.error(`Failed to start subscriptions after 5 attempts: ${s.message}`),!1)}},"tryStartSubscriptions");await i()}async handleServerInactive(){this.logger.info("Server became inactive, stopping subscriptions"),this.clearSubscriptionRetryTimeout(),await this.subscriptionManager.stopSubscriptions(),this.clearSubscriptionHandlers()}setupSubscriptionHandlers(){this.clearSubscriptionHandlers(),this.subscriptionManager.on("invoice_update",e=>{this.handleInvoiceUpdate(e)}),this.subscriptionManager.on("payment_update",e=>{this.handlePaymentUpdate(e)}),this.subscriptionManager.on("taproot_receive_event",e=>{this.handleTaprootReceiveEvent(e)}),this.subscriptionManager.on("taproot_send_event",e=>{this.handleTaprootSendEvent(e)}),this.subscriptionManager.on("invoice_error",e=>{this.logger.error(`Invoice subscription error: ${e.message}`),this.emit("subscription_error",{type:"invoice",error:e})}),this.subscriptionManager.on("payment_error",e=>{this.logger.error(`Payment subscription error: ${e.message}`),this.emit("subscription_error",{type:"payment",error:e})}),this.subscriptionManager.on("taproot_receive_error",e=>{this.logger.error(`Taproot receive error: ${e.message}`),this.emit("subscription_error",{type:"taproot_receive",error:e})}),this.subscriptionManager.on("taproot_send_error",e=>{this.logger.error(`Taproot send error: ${e.message}`),this.emit("subscription_error",{type:"taproot_send",error:e})})}clearSubscriptionHandlers(){this.subscriptionManager.removeAllListeners("invoice_update"),this.subscriptionManager.removeAllListeners("payment_update"),this.subscriptionManager.removeAllListeners("taproot_receive_event"),this.subscriptionManager.removeAllListeners("taproot_send_event"),this.subscriptionManager.removeAllListeners("invoice_error"),this.subscriptionManager.removeAllListeners("payment_error"),this.subscriptionManager.removeAllListeners("taproot_receive_error"),this.subscriptionManager.removeAllListeners("taproot_send_error")}handleInvoiceUpdate(e){try{Rue()(e)}catch(r){this.logger.error(`Error handling invoice update: ${r.message}`)}}handlePaymentUpdate(e){try{Pue()(e)}catch(r){this.logger.error(`Error handling payment update: ${r.message}`)}}async handleTaprootReceiveEvent(e){try{let{handleTaprootReceiveEvent:r}=BF();await r(e)}catch(r){this.logger.error(`Error handling Taproot receive event: ${r.message}`)}}async handleTaprootSendEvent(e){try{let{handleTaprootSendEvent:r}=BF();await r(e)}catch(r){this.logger.error(`Error handling Taproot send event: ${r.message}`)}}async handleStateError(e){this.isNodeStoppedError(e)?await this.handleNodeStopped(e):this.isConnectionError(e)?this.handleConnectionError(e):(this.logger.error(`State monitoring error: ${e.message}`),this.emit("state_error",e))}isNodeStoppedError(e){return["UNAVAILABLE","ECONNREFUSED","connection closed","socket hang up","ENOTFOUND","network is unreachable"].some(n=>e.message.includes(n))}isConnectionError(e){return e.message.includes("Wallet is not initialized yet")||e.message.includes("connection")||e.message.includes("timeout")}getErrorType(e){if(!e)return"UNKNOWN";let r=e.message||"",n=e.code||"";return r.includes("UNAVAILABLE")||n===14?"CONNECTION_UNAVAILABLE":r.includes("ECONNREFUSED")||r.includes("connection refused")?"CONNECTION_REFUSED":r.includes("ENOTFOUND")||r.includes("not found")?"DNS_ERROR":r.includes("timeout")||r.includes("TIMEOUT")?"TIMEOUT":r.includes("socket hang up")?"SOCKET_HANGUP":r.includes("network is unreachable")?"NETWORK_UNREACHABLE":r.includes("connection closed")?"CONNECTION_CLOSED":r.includes("shutting down")||r.includes("server shutting down")?"SERVER_SHUTDOWN":r.includes("Cancelled")||n===1?"GRPC_CANCELLED":r.includes("DeadlineExceeded")||n===4?"GRPC_DEADLINE_EXCEEDED":r.includes("NotFound")||n===5?"GRPC_NOT_FOUND":r.includes("PermissionDenied")||n===7?"GRPC_PERMISSION_DENIED":r.includes("Unauthenticated")||n===16?"GRPC_UNAUTHENTICATED":r.includes("Wallet is not initialized")?"WALLET_NOT_INITIALIZED":r.includes("not available")?"SERVICE_NOT_AVAILABLE":r.includes("macaroon")?"MACAROON_ERROR":n?`GRPC_CODE_${n}`:"UNKNOWN"}async getWalletState(){try{let{getWalletState:e}=Qi();return await e()}catch(e){this.logger.debug(`Failed to get wallet state: ${e.message}`);let{WALLET_STATE_CODE:r}=rt();return r.WAITING_TO_START}}async handleNodeStopped(e){let r=new Date().toISOString(),n=this.linkCache.get("walletState");this.recoveryStats.totalNodeStops++,this.recoveryStats.lastNodeStopTime=r,this.logger.warn(`\u{1F534} NODE STOPPED DETECTED (#${this.recoveryStats.totalNodeStops})`),this.logger.warn(`\u251C\u2500 Error: ${e.message}`),this.logger.warn(`\u251C\u2500 Error Code: ${e.code||"N/A"}`),this.logger.warn(`\u251C\u2500 Error Type: ${this.getErrorType(e)}`),this.logger.warn(`\u251C\u2500 Previous State: ${n}`),this.logger.warn(`\u2514\u2500 Timestamp: ${r}`);try{let{WALLET_STATE_CODE:i}=rt();this.linkCache.set("walletState",i.WAITING_TO_START),this.logger.info("\u{1F4DD} Updated walletState cache to WAITING_TO_START"),this.logger.info("\u{1F9F9} Starting resource cleanup..."),await this.handleServerInactive(),this.logger.info("\u2705 Resource cleanup completed"),this.logger.info("\u{1F504} Starting connection recovery monitoring..."),this.startConnectionRecoveryCheck(),this.emit("node_stopped",{error:e,previousState:n,timestamp:r,errorCode:e.code,errorType:this.getErrorType(e),nodeStopCount:this.recoveryStats.totalNodeStops}),this.logger.info("\u2705 Node stopped handling completed successfully")}catch(i){this.logger.error(`\u274C Error during node stopped handling: ${i.message}`),this.logger.error(`Stack trace: ${i.stack}`),this.emit("node_stopped_error",i)}}handleConnectionError(e){this.logger.warn(`State monitoring connection issue: ${e.message}`),this.emit("connection_error",e)}startConnectionRecoveryCheck(){if(this.recoveryInterval){this.logger.warn("Connection recovery check already active");return}let e=new Date,r=0;this.logger.info("\u{1F504} Starting connection recovery monitoring..."),this.logger.info("\u251C\u2500 Check interval: 10 seconds"),this.logger.info(`\u2514\u2500 Started at: ${e.toISOString()}`),this.recoveryInterval=setInterval(async()=>{r++;let i=Math.floor((new Date-e)/6e4);this.logger.debug(`\u{1F50D} Recovery attempt #${r} (${i}m elapsed)`);try{let s=await this.getWalletState(),{WALLET_STATE_CODE:o}=rt();if(s&&s!==o.WAITING_TO_START){let c=new Date,u=Math.floor((c-e)/1e3);this.logger.info("\u{1F7E2} NODE RECOVERED!"),this.logger.info(`\u251C\u2500 Wallet state: ${s}`),this.logger.info(`\u251C\u2500 Recovery attempts: ${r}`),this.logger.info(`\u251C\u2500 Total downtime: ${u}s`),this.logger.info(`\u2514\u2500 Recovered at: ${c.toISOString()}`),this.stopConnectionRecoveryCheck(),await this.handleNodeRecovered(s,{attemptCount:r,downtimeSeconds:u,startTime:e.toISOString(),recoveryTime:c.toISOString()})}}catch(s){this.logger.debug(`\u274C Recovery attempt #${r} failed: ${s.message}`),r%6===0&&this.logger.info(`\u23F3 Still recovering... ${r} attempts, ${i}m elapsed`)}},1e4)}stopConnectionRecoveryCheck(){this.recoveryInterval&&(clearInterval(this.recoveryInterval),this.recoveryInterval=null,this.logger.info("Connection recovery monitoring stopped"))}async handleNodeRecovered(e,r={}){let n=new Date().toISOString(),i=r.downtimeSeconds||0,s=r.attemptCount||0;this.recoveryStats.totalRecoveries++,this.recoveryStats.lastRecoveryTime=n,this.recoveryStats.totalDowntimeSeconds+=i,i>0&&(i>this.recoveryStats.longestDowntimeSeconds&&(this.recoveryStats.longestDowntimeSeconds=i),i<this.recoveryStats.shortestDowntimeSeconds&&(this.recoveryStats.shortestDowntimeSeconds=i)),this.recoveryStats.totalRecoveries>0&&(this.recoveryStats.averageRecoveryAttempts=(this.recoveryStats.averageRecoveryAttempts*(this.recoveryStats.totalRecoveries-1)+s)/this.recoveryStats.totalRecoveries),this.recoveryStats.recoveryHistory.push({timestamp:n,walletState:e,attemptCount:s,downtimeSeconds:i,errorType:r.errorType}),this.recoveryStats.recoveryHistory.length>10&&this.recoveryStats.recoveryHistory.shift(),this.logger.info("\u{1F7E2} NODE RECOVERY PROCESS STARTING"),this.logger.info(`\u251C\u2500 Recovery #${this.recoveryStats.totalRecoveries}`),this.logger.info(`\u251C\u2500 Recovered state: ${e}`),this.logger.info(`\u251C\u2500 Recovery attempts: ${s}`),this.logger.info(`\u251C\u2500 Downtime: ${i}s`),this.logger.info(`\u251C\u2500 Avg recovery attempts: ${this.recoveryStats.averageRecoveryAttempts.toFixed(1)}`),this.logger.info(`\u2514\u2500 Recovery timestamp: ${n}`);try{this.stopConnectionRecoveryCheck(),this.logger.info("\u2705 Recovery monitoring stopped"),this.linkCache.set("walletState",e),this.logger.info(`\u{1F4DD} Updated walletState cache to: ${e}`),this.logger.info("\u{1F504} Restarting LND state monitoring..."),await this.startLndStateMonitoring(),this.logger.info("\u2705 LND state monitoring restarted"),this.emit("node_recovered",{timestamp:n,walletState:e,recoveryStats:{attemptCount:s,downtimeSeconds:i,startTime:r.startTime,recoveryTime:r.recoveryTime||n,totalRecoveries:this.recoveryStats.totalRecoveries,averageRecoveryAttempts:this.recoveryStats.averageRecoveryAttempts}}),this.logger.info("\u{1F389} NODE RECOVERY COMPLETED SUCCESSFULLY"),this.logger.info("\u2514\u2500 System is now fully operational")}catch(o){this.logger.error(`\u274C ERROR DURING NODE RECOVERY: ${o.message}`),this.logger.error(`Stack trace: ${o.stack}`),this.logger.warn("\u{1F504} Restarting recovery monitoring due to error..."),this.startConnectionRecoveryCheck(),this.emit("node_recovery_error",{error:o,timestamp:n,recoveryStats:r})}}getRecoveryStats(){let e=this.recoveryStats.totalRecoveries>0?this.recoveryStats.totalDowntimeSeconds/this.recoveryStats.totalRecoveries:0;return{...this.recoveryStats,averageDowntimeSeconds:e,shortestDowntimeSeconds:this.recoveryStats.shortestDowntimeSeconds===1/0?0:this.recoveryStats.shortestDowntimeSeconds,uptime:{totalNodeStops:this.recoveryStats.totalNodeStops,totalRecoveries:this.recoveryStats.totalRecoveries,successRate:this.recoveryStats.totalNodeStops>0?`${(this.recoveryStats.totalRecoveries/this.recoveryStats.totalNodeStops*100).toFixed(2)}%`:"100%"}}}resetRecoveryStats(){this.logger.info("\u{1F504} Resetting recovery statistics..."),this.recoveryStats={totalNodeStops:0,totalRecoveries:0,totalDowntimeSeconds:0,averageRecoveryAttempts:0,longestDowntimeSeconds:0,shortestDowntimeSeconds:1/0,lastNodeStopTime:null,lastRecoveryTime:null,recoveryHistory:[]},this.logger.info("\u2705 Recovery statistics reset completed")}async stopStateMonitoring(){if(this.isMonitoring)try{this.stateSubscription&&(this.stateSubscription.destroy(),this.stateSubscription=null),this.stopRgbStatePolling(),this.stopConnectionRecoveryCheck(),this.clearRetryTimeouts(),this.isMonitoring=!1,this.logger.info("State monitoring stopped"),this.emit("monitoring_stopped")}catch(e){throw this.logger.error(`Error stopping state monitoring: ${e.message}`),e}}startRgbStatePolling(){if(this.rgbStatePollingInterval){this.logger.warn("RGB state polling already active");return}this.logger.info(`Starting RGB state polling (interval: ${this.rgbPollingIntervalMs}ms)`),this.checkRgbState(),this.rgbStatePollingInterval=setInterval(()=>{this.checkRgbState()},this.rgbPollingIntervalMs)}stopRgbStatePolling(){this.rgbStatePollingInterval&&(clearInterval(this.rgbStatePollingInterval),this.rgbStatePollingInterval=null,this.logger.info("RGB state polling stopped"))}clearLndRetryTimeout(){this.lndRetryTimeout&&(clearTimeout(this.lndRetryTimeout),this.lndRetryTimeout=null)}clearSubscriptionRetryTimeout(){this.subscriptionRetryTimeout&&(clearTimeout(this.subscriptionRetryTimeout),this.subscriptionRetryTimeout=null)}clearRetryTimeouts(){this.clearLndRetryTimeout(),this.clearSubscriptionRetryTimeout()}async checkRgbState(){try{let{getNodeState:e}=L3(),r=await e();r.state!==this.currentRgbState&&await this.handleRgbStateChange(r)}catch(e){this.logger.error(`Error checking RGB state: ${e.message}`)}}async handleRgbStateChange(e){let r=this.currentRgbState;this.currentRgbState=e.state,this.logger.info(`RGB state changed from ${r} to ${e.state}`),Oo().set("rgbState",e.state),this.emit("rgb_state_changed",e),e.state===4?await this.handleRgbActive():await this.handleRgbInactive()}async handleRgbActive(){this.logger.info("RGB became active")}async handleRgbInactive(){this.logger.info("RGB became inactive")}getStatus(){return{isMonitoring:this.isMonitoring,currentState:this.currentState,hasStateSubscription:!!this.stateSubscription,invoicePollingActive:!!this.invoicePollingInterval,subscriptionManager:this.subscriptionManager?.getStatus()||null,currentRgbState:this.currentRgbState,rgbPollingActive:!!this.rgbStatePollingInterval,rgbPollingInterval:this.rgbPollingIntervalMs}}cleanup(){this.logger.info("Cleaning up state manager..."),this.stopStateMonitoring(),this.clearRetryTimeouts(),this.removeAllListeners(),this.logger.info("State manager cleanup completed")}};$rt.exports=tle});var Krt=v((aon,Vrt)=>{var R3r=require("node:events"),P3r=Ke(),rle=class extends R3r{static{a(this,"SubscriptionManager")}constructor(e,r){super(),this.logger=r||new P3r("SubscriptionManager"),this.gates=e,this.subscriptions=new Map,this.pausedSubscriptions=new Map,this.services={lightning:null,router:null,taproot:null},this.isActive=!1,this.stats={subscriptionsStarted:0,subscriptionsStopped:0,subscriptionsPaused:0,subscriptionsResumed:0,subscriptionErrors:0}}async initializeServices(){try{let{getLightningService:e,getRouterService:r,getTprService:n}=Qi(),i=e(),s=r(),o=n();if(!i||!s||!o)throw new Error("One or more LND services are not available");this.services.lightning=i,this.services.router=s,this.services.taproot=o,this.logger.info("LND services initialized successfully")}catch(e){throw this.logger.error(`Failed to initialize LND services: ${e.message}`),e}}async startSubscriptions(){if(!this.gates.evaluate("lndActive")){this.logger.warn("LND not active, cannot start subscriptions");return}if(this.isActive){this.logger.warn("Subscriptions already active");return}try{await this.initializeServices(),await this.startInvoiceSubscription(),await this.startPaymentSubscription(),await this.startTaprootSubscriptions(),this.isActive=!0,this.stats.subscriptionsStarted+=this.subscriptions.size,this.logger.info("All LND subscriptions started"),this.emit("subscriptions_started")}catch(e){throw this.logger.error(`Failed to start subscriptions: ${e.message}`),this.emit("subscriptions_error",e),e}}async stopSubscriptions(){if(!this.isActive)return;this.logger.info("Stopping all LND subscriptions...");let e=Array.from(this.subscriptions.keys());e.forEach(r=>this.cancelSubscription(r)),this.isActive=!1,this.stats.subscriptionsStopped+=e.length,this.logger.info("All LND subscriptions stopped"),this.emit("subscriptions_stopped")}async startInvoiceSubscription(){if(!this.services.lightning)throw new Error("Lightning service not available");let e=this.services.lightning.subscribeInvoices({add_index:0,settle_index:0});e.on("data",r=>{this.logger.info(`Invoice update: add_index=${r.add_index}, state=${r.state}`),this.emit("invoice_update",r)}),e.on("error",r=>{this.stats.subscriptionErrors++,this.logger.error(`Invoice subscription error: ${r.message}`),this.emit("invoice_error",r)}),e.on("end",()=>{this.logger.warn("Invoice subscription ended"),this.emit("invoice_ended")}),this.subscriptions.set("invoice",e),this.logger.info("Invoice subscription started")}async startPaymentSubscription(){if(!this.services.router)throw new Error("Router service not available");let e=this.services.router.trackPayments({no_inflight_updates:!1});e.on("data",r=>{this.logger.debug(`Payment update: ${r.payment_hash}`),this.emit("payment_update",r)}),e.on("error",r=>{this.stats.subscriptionErrors++,this.logger.error(`Payment subscription error: ${r.message}`),this.emit("payment_error",r)}),this.subscriptions.set("payment",e),this.logger.info("Payment subscription started")}async startTaprootSubscriptions(){if(!this.services.taproot)throw new Error("Taproot service not available");let e=this.services.taproot.subscribeReceiveEvents({});e.on("data",n=>{this.logger.debug("Taproot receive event received"),this.emit("taproot_receive_event",n)}),e.on("error",n=>{this.logger.error(`Taproot receive subscription error: ${n.message}`),this.emit("taproot_receive_error",n)}),this.subscriptions.set("taproot_receive",e);let r=this.services.taproot.subscribeSendEvents({});r.on("data",n=>{this.logger.debug(`Taproot send event: ${JSON.stringify(n)}`),this.emit("taproot_send_event",n)}),r.on("error",n=>{this.stats.subscriptionErrors++,this.logger.error(`Taproot send subscription error: ${n.message}`),this.emit("taproot_send_error",n)}),this.subscriptions.set("taproot_send",r),this.logger.info("Taproot Asset subscriptions started")}cancelSubscription(e){let r=this.subscriptions.get(e);r&&(typeof r.destroy=="function"?r.destroy():typeof r.cancel=="function"&&r.cancel(),this.subscriptions.delete(e),this.pausedSubscriptions.delete(e),this.logger.info(`Cancelled subscription: ${e}`))}getStatus(){return{isActive:this.isActive,subscriptionCount:this.subscriptions.size,activeSubscriptions:Array.from(this.subscriptions.keys()),servicesAvailable:{lightning:!!this.services.lightning,router:!!this.services.router,taproot:!!this.services.taproot}}}async pauseSubscriptionsByGate(e){this.logger.info(`Pausing subscriptions for gate: ${e}`);let r=[];e==="lndActive"&&this.subscriptions.forEach((n,i)=>{r.push({name:i,subscription:n})});for(let{name:n,subscription:i}of r)try{typeof i.destroy=="function"?i.destroy():typeof i.cancel=="function"&&i.cancel(),this.pausedSubscriptions.set(n,{gate:e,pausedAt:new Date,type:this.getSubscriptionType(n)}),this.subscriptions.delete(n),this.stats.subscriptionsPaused++,this.logger.info(`Paused subscription: ${n}`)}catch(s){this.logger.error(`Failed to pause subscription ${n}: ${s.message}`)}this.logger.info(`Paused ${r.length} subscriptions for gate: ${e}`)}async resumeSubscriptionsByGate(e){this.logger.info(`Resuming subscriptions for gate: ${e}`);let r=[];this.pausedSubscriptions.forEach((n,i)=>{n.gate===e&&r.push({name:i,pausedInfo:n})});for(let{name:n,pausedInfo:i}of r)try{await this.restartSubscription(n,i.type),this.pausedSubscriptions.delete(n),this.stats.subscriptionsResumed++,this.logger.info(`Resumed subscription: ${n}`)}catch(s){this.logger.error(`Failed to resume subscription ${n}: ${s.message}`)}this.logger.info(`Resumed ${r.length} subscriptions for gate: ${e}`)}getSubscriptionType(e){return e==="invoice"?"invoice":e==="payment"?"payment":e.startsWith("taproot_")?"taproot":"unknown"}async restartSubscription(e,r){switch(r){case"invoice":await this.startInvoiceSubscription();break;case"payment":await this.startPaymentSubscription();break;case"taproot":await this.startTaprootSubscriptions();break;default:throw new Error(`Unknown subscription type: ${r}`)}}getPausedSubscriptionsInfo(){let e={};return this.pausedSubscriptions.forEach((r,n)=>{let i=r.gate;e[i]||(e[i]=[]),e[i].push({name:n,pausedAt:r.pausedAt,type:r.type})}),{totalPaused:this.pausedSubscriptions.size,pausedByGate:e,stats:{subscriptionsPaused:this.stats.subscriptionsPaused,subscriptionsResumed:this.stats.subscriptionsResumed}}}cleanup(){this.logger.info("Cleaning up subscription manager..."),this.stopSubscriptions(),this.pausedSubscriptions.clear(),this.removeAllListeners(),this.logger.info("Subscription manager cleanup completed")}};Vrt.exports=rle});var Jrt=v((oon,zrt)=>{var L3r=Ke(),nle=class{static{a(this,"TaskRegistry")}constructor(e={}){this.logger=new L3r("TaskRegistry"),this.tasks=new Map,this.loadTasks(e)}loadTasks(e){Object.entries(e).forEach(([r,n])=>{this.registerTask(r,n)}),this.logger.info(`Loaded ${this.tasks.size} tasks`)}registerTask(e,r){let n=this.validateTask(r);if(!n.valid)throw new Error(`Invalid task definition for '${e}': ${n.errors.join(", ")}`);let i={enabled:!0,maxRetries:3,timeout:3e4,priority:5,...r,id:e};this.tasks.set(e,i),this.logger.debug(`Registered task: ${e}`)}getTask(e){return this.tasks.get(e)||null}getAllTasks(){return new Map(this.tasks)}getTasksByType(e){let r=new Map;return this.tasks.forEach((n,i)=>{n.type===e&&r.set(i,n)}),r}getEnabledTasks(){let e=new Map;return this.tasks.forEach((r,n)=>{r.enabled&&e.set(n,r)}),e}getTasksByGate(e){let r=new Map;return this.tasks.forEach((n,i)=>{n.gate===e&&r.set(i,n)}),r}setTaskEnabled(e,r){let n=this.tasks.get(e);n&&(n.enabled=r,this.logger.info(`Task '${e}' ${r?"enabled":"disabled"}`))}updateTask(e,r){let n=this.tasks.get(e);n&&(Object.assign(n,r),this.logger.info(`Updated task '${e}'`))}validateTask(e){let r=[];return e.type?["cron","event"].includes(e.type)||r.push("Task type must be 'cron' or 'event'"):r.push("Task type is required"),(!e.implementation||typeof e.implementation!="function")&&r.push("Task implementation must be a function"),e.type==="cron"&&!e.schedule&&r.push("Cron tasks must have a schedule"),e.type==="event"&&!e.event&&r.push("Event tasks must specify an event name"),e.gate||r.push("Task must specify a gate"),e.maxRetries&&(typeof e.maxRetries!="number"||e.maxRetries<0)&&r.push("maxRetries must be a non-negative number"),e.timeout&&(typeof e.timeout!="number"||e.timeout<=0)&&r.push("timeout must be a positive number"),{valid:r.length===0,errors:r}}getStats(){let e={totalTasks:this.tasks.size,enabledTasks:0,cronTasks:0,eventTasks:0,gateDistribution:{}};return this.tasks.forEach(r=>{r.enabled&&e.enabledTasks++,r.type==="cron"&&e.cronTasks++,r.type==="event"&&e.eventTasks++,e.gateDistribution[r.gate]=(e.gateDistribution[r.gate]||0)+1}),e}};zrt.exports=nle});var Xrt=v((uon,Wrt)=>{var D3r=require("node:events"),jF=Ke(),B3r=jtt(),M3r=Gtt(),F3r=Hrt(),U3r=Grt(),q3r=Krt(),H3r=Jrt(),ile=class extends D3r{static{a(this,"JobManager")}constructor(e={}){super(),this.logger=new jF("JobManager"),this.options={dryRun:!0,...e},this.gates=null,this.taskRegistry=null,this.eventBus=null,this.scheduler=null,this.subscriptionManager=null,this.stateManager=null,this.isInitialized=!1,this.isRunning=!1,this.isShuttingDown=!1,this.stats={initializationTime:null,startTime:null,tasksRegistered:0,eventsRegistered:0}}async initialize(e,r){if(this.isInitialized){this.logger.warn("JobManager already initialized");return}try{this.logger.info("Initializing JobManager...");let n=Date.now();this.gates=new M3r(r),this.taskRegistry=new H3r(e),this.eventBus=new B3r,this.scheduler=new F3r(this.gates,new jF("Scheduler")),this.subscriptionManager=new q3r(this.gates,new jF("SubscriptionManager")),this.stateManager=new U3r(this.subscriptionManager,this.eventBus,new jF("StateManager")),await this.registerEventHandlers(),await this.scheduleCronTasks(),this.isInitialized=!0,this.stats.initializationTime=Date.now()-n,this.stats.tasksRegistered=this.taskRegistry.getAllTasks().size,this.stats.eventsRegistered=this.eventBus.handlers.size,this.logger.info(`JobManager initialized successfully in ${this.stats.initializationTime}ms`),this.logger.info(`Registered ${this.stats.tasksRegistered} tasks and ${this.stats.eventsRegistered} event handlers`),this.options.dryRun&&this.logger.warn("JobManager is running in DRY-RUN mode - tasks will not execute")}catch(n){throw this.logger.error(`Failed to initialize JobManager: ${n.message}`),n}}async registerEventHandlers(){this.taskRegistry.getTasksByType("event").forEach((r,n)=>{if(!r.enabled){this.logger.debug(`Event task '${n}' is disabled, skipping registration`);return}let i=a(async(...s)=>{try{if(!this.gates.evaluate(r.gate)){this.logger.debug(`Event task '${n}' gate '${r.gate}' not satisfied, skipping`);return}if(this.options.dryRun){this.logger.info(`[DRY-RUN] Would execute event task: ${n}`);return}this.logger.debug(`Executing event task: ${n}`);let o=Date.now(),c=await this.executeWithTimeout(r.implementation,r.timeout,...s),u=Date.now()-o;return this.logger.debug(`Event task '${n}' completed in ${u}ms`),this.emit("task_success",{taskId:n,result:c,duration:u}),c}catch(o){throw this.logger.error(`Event task '${n}' failed: ${o.message}`),this.emit("task_error",{taskId:n,error:o}),o}},"wrappedHandler");this.eventBus.register(r.event,i),this.logger.debug(`Registered event handler for '${r.event}' (task: ${n})`)})}async scheduleCronTasks(){this.taskRegistry.getTasksByType("cron").forEach((r,n)=>{if(!r.enabled){this.logger.debug(`Cron task '${n}' is disabled, skipping scheduling`);return}let s={...r,implementation:a(async()=>{if(this.options.dryRun){this.logger.info(`[DRY-RUN] Would execute cron task: ${n}`);return}return await r.implementation()},"wrappedImplementation")};this.scheduler.schedule(n,s),this.logger.debug(`Scheduled cron task '${n}' with schedule: ${r.schedule}`)})}async start(){if(!this.isInitialized)throw new Error("JobManager must be initialized before starting");if(this.isRunning){this.logger.warn("JobManager already running");return}try{this.logger.info("Starting JobManager..."),this.scheduler.startAll(),this.setupStateManagerListeners(),await this.stateManager.startStateMonitoring(),this.isRunning=!0,this.stats.startTime=Date.now(),this.logger.info("JobManager started successfully"),this.emit("started")}catch(e){throw this.logger.error(`Failed to start JobManager: ${e.message}`),e}}async stop(){if(!this.isRunning){this.logger.warn("JobManager not running");return}try{this.logger.info("Stopping JobManager..."),this.scheduler.stopAll(),this.stateManager.stopStateMonitoring(),this.isRunning=!1,this.logger.info("JobManager stopped successfully"),this.emit("stopped")}catch(e){throw this.logger.error(`Failed to stop JobManager: ${e.message}`),e}}setupStateManagerListeners(){this.stateManager.on("node_stopped",async e=>{await this.handleNodeStopped(e)}),this.stateManager.on("node_recovered",async e=>{await this.handleNodeRecovered(e)}),this.stateManager.on("state_error",e=>{this.logger.error(`StateManager error: ${e.message}`),this.emit("state_manager_error",e)}),this.stateManager.on("connection_error",e=>{this.logger.warn(`StateManager connection issue: ${e.message}`)}),this.logger.debug("StateManager event listeners set up")}async handleNodeStopped(e){let{error:r,previousState:n,timestamp:i}=e;this.logger.warn("Node stopped detected, pausing LND-dependent tasks"),this.logger.debug(`Previous state: ${n}, Error: ${r.message}`);try{await this.scheduler.pauseTasksByGate("lndActive"),await this.subscriptionManager.pauseSubscriptionsByGate("lndActive"),this.emit("tasks_paused",{gate:"lndActive",reason:"node_stopped",timestamp:i}),this.logger.info("LND-dependent tasks paused successfully")}catch(s){this.logger.error(`Error handling node stopped: ${s.message}`)}}async handleNodeRecovered(e){let{timestamp:r}=e;this.logger.info("Node recovered, resuming LND-dependent tasks");try{await this.scheduler.resumeTasksByGate("lndActive"),await this.subscriptionManager.resumeSubscriptionsByGate("lndActive"),this.emit("tasks_resumed",{gate:"lndActive",reason:"node_recovered",timestamp:r}),this.logger.info("LND-dependent tasks resumed successfully")}catch(n){this.logger.error(`Error handling node recovery: ${n.message}`),this.emit("node_recovery_handling_error",n)}}async executeWithTimeout(e,r=3e4,...n){return new Promise((i,s)=>{let o=setTimeout(()=>{s(new Error(`Task execution timed out after ${r}ms`))},r);Promise.resolve(e(...n)).then(c=>{clearTimeout(o),i(c)}).catch(c=>{clearTimeout(o),s(c)})})}emitEvent(e,...r){if(!this.eventBus){this.logger.warn("EventBus not initialized, cannot emit event");return}this.eventBus.emit(e,...r)}setDryRun(e){this.options.dryRun=e,this.logger.info(`Dry-run mode ${e?"enabled":"disabled"}`)}getStatus(){return{isInitialized:this.isInitialized,isRunning:this.isRunning,isShuttingDown:this.isShuttingDown,dryRun:this.options.dryRun,stats:this.stats,gates:this.gates?.getStats()||null,taskRegistry:this.taskRegistry?.getStats()||null,eventBus:this.eventBus?.getStats()||null,scheduler:this.scheduler?.getStats()||null,subscriptionManager:this.subscriptionManager?.getStatus()||null,stateManager:this.stateManager?.getStatus()||null}}getTaskInfo(){return this.isInitialized?{allTasks:Array.from(this.taskRegistry.getAllTasks().entries()),cronTasks:Array.from(this.taskRegistry.getTasksByType("cron").entries()),eventTasks:Array.from(this.taskRegistry.getTasksByType("event").entries()),scheduledTasks:this.scheduler.getAllTasksInfo(),gateNames:this.gates.getGateNames()}:null}async shutdown(){if(this.isShuttingDown){this.logger.warn("JobManager already shutting down");return}this.logger.info("Starting JobManager shutdown..."),this.isShuttingDown=!0;try{this.isRunning&&await this.stop(),this.scheduler&&this.scheduler.cleanup(),this.eventBus&&this.eventBus.cleanup(),this.subscriptionManager&&this.subscriptionManager.cleanup(),this.stateManager&&this.stateManager.cleanup(),this.isInitialized=!1,this.isRunning=!1,this.logger.info("JobManager shutdown completed"),this.emit("shutdown")}catch(e){throw this.logger.error(`Error during shutdown: ${e.message}`),e}}};Wrt.exports=ile});var GF=v((don,Qrt)=>{var yN=Ke(),{TASKS:j3r,GATES:$3r}=qtt(),G3r=Xrt(),zi=null;async function V3r(t={}){let e=new yN("job");try{return zi?(e.warn("Job system already initialized"),zi):(e.info("Initializing new job system..."),zi=new G3r(t),await zi.initialize(j3r,$3r),Y3r(zi),e.info("New job system initialized successfully"),zi)}catch(r){throw e.error(`Failed to initialize job system: ${r.message}`),r}}a(V3r,"initJobSystem");async function K3r(){if(!zi)throw new Error("Job system not initialized. Call initJobSystem() first.");await zi.start()}a(K3r,"startJobSystem");async function z3r(){zi&&await zi.stop()}a(z3r,"stopJobSystem");function J3r(){return zi?zi.getStatus():null}a(J3r,"getJobSystemStatus");function W3r(){return zi?zi.getTaskInfo():null}a(W3r,"getJobSystemTaskInfo");function X3r(t){zi&&zi.setDryRun(t)}a(X3r,"setDryRun");function Q3r(t,...e){zi&&zi.emitEvent(t,...e)}a(Q3r,"emitJobEvent");function Y3r(t){let e=MW(),r=new yN("job");["bakeTapdMacaroon","bakeLoopMacaroon","listenNostrEvent","initAccount","startJobs","rgbStart"].forEach(i=>{e.on(i,(...s)=>{t.emitEvent(i,...s)})}),t.on("started",()=>{r.info("Job system started")}),t.on("stopped",()=>{r.info("Job system stopped")}),t.on("task_success",({taskId:i,duration:s})=>{r.debug(`Task '${i}' completed in ${s}ms`)}),t.on("task_error",({taskId:i,error:s})=>{r.error(`Task '${i}' failed: ${s.message}`)})}a(Y3r,"setupEventListeners");async function $F(){let t=new yN("job_shutdown");t.info("Received shutdown signal..."),zi&&(await zi.shutdown(),zi=null),t.info("Job system graceful shutdown completed")}a($F,"gracefulShutdown");process.on("SIGINT",$F);process.on("SIGTERM",$F);process.on("uncaughtException",t=>{new yN("job_uncaught").error(`Uncaught exception: ${t.message}`),$F()});process.on("unhandledRejection",(t,e)=>{new yN("job_unhandled").error(`Unhandled rejection at: ${e}, reason: ${t}`)});Qrt.exports={initJobSystem:V3r,startJobSystem:K3r,stopJobSystem:z3r,getJobSystemStatus:J3r,getJobSystemTaskInfo:W3r,setDryRun:X3r,emitJobEvent:Q3r,gracefulShutdown:$F}});var Zrt=v((pon,Yrt)=>{var Z3r=Ke(),{initJobSystem:ekr,startJobSystem:tkr,stopJobSystem:rkr,getJobSystemStatus:nkr,emitJobEvent:$_}=GF();async function ikr(){let t=new Z3r("job_compatibility");try{t.info("Initializing job system via compatibility layer...");let e=await ekr({dryRun:!1});return await tkr(),{getSystemStatus:nkr,emitEvent:$_,shutdown:a(async()=>{let{gracefulShutdown:r}=GF();await r()},"shutdown"),startLndJobs:a(async()=>{t.info("LND jobs will be started automatically when LND becomes active"),$_("startJobs")},"startLndJobs"),startRgbJobs:a(async()=>{t.info("RGB jobs are running automatically"),$_("rgbStart")},"startRgbJobs"),stopLndJobs:a(async()=>{t.info("LND jobs will be stopped automatically when LND becomes inactive"),$_("stopLndJobs")},"stopLndJobs"),stopRgbJobs:a(async()=>{t.info("RGB jobs stopped"),$_("stopRgbJobs")},"stopRgbJobs"),stopJobSystem:rkr,bakeTapdMacaroon:a(()=>$_("bakeTapdMacaroon"),"bakeTapdMacaroon"),bakeLoopMacaroon:a(r=>$_("bakeLoopMacaroon",r),"bakeLoopMacaroon"),listenNostrEvent:a(()=>$_("listenNostrEvent"),"listenNostrEvent"),initAccount:a(()=>$_("initAccount"),"initAccount"),_jobManager:e}}catch(e){throw t.error(`Failed to initialize job system via compatibility layer: ${e.message}`),e}}a(ikr,"initJobListener");async function akr(){let{gracefulShutdown:t}=GF();await t()}a(akr,"gracefulShutdown");Yrt.exports={initJobListener:ikr,gracefulShutdown:akr}});var ent=v((hon,skr)=>{skr.exports={bitcoindIndex:"CHANGE_ME_MAINNET_ELECTRS_HOST:50001",bitcoindPass:"CHANGE_ME_MAINNET_RPC_PASSWORD",bitcoindRpcHost:"CHANGE_ME_MAINNET_BITCOIND_HOST",bitcoindRpcPort:"8332",bitcoindUser:"CHANGE_ME_MAINNET_RPC_USER",bitcoindZmqBlock:"tcp://CHANGE_ME_MAINNET_BITCOIND_HOST:28334",bitcoindZmqRawTx:"tcp://CHANGE_ME_MAINNET_BITCOIND_HOST:28335",network:"mainnet",nostrRelays:["wss://CHANGE_ME_MAINNET_RELAY_1","wss://CHANGE_ME_MAINNET_RELAY_2"],officialLndPeer:"",officialLndPeerHost:"CHANGE_ME_MAINNET_LND_HOST:9735",officialNostrPubKey:"",officialRgbPeer:"",officialRgbPeerHost:"CHANGE_ME_MAINNET_RGB_HOST:9736",officialUniverseServer:"CHANGE_ME_MAINNET_UNIVERSE_HOST:10009",priceOracle:"grpc-oracle.lnfi.network",rgbProxy:"rpc://CHANGE_ME_MAINNET_RGB_PROXY_HOST:5000/json-rpc"}});var tnt=v((mon,okr)=>{okr.exports={bitcoindIndex:"regtest.lnfi.network:50001",bitcoindPass:"lnfi_pass12GA",bitcoindRpcHost:"regtest.lnfi.network",bitcoindRpcPort:"18443",bitcoindUser:"lnfi_user",bitcoindZmqBlock:"tcp://regtest.lnfi.network:28334",bitcoindZmqRawTx:"tcp://regtest.lnfi.network:28335",network:"regtest",nostrRelays:["wss://relay.snort.social","wss://relay01.lnfi.network"],officialLndPeer:"03b24a4bf911ffd26ac1d5e5f2440a3c2f6974e4cc85d2ef54e17ee6d3717433d3",officialLndPeerHost:"34.84.66.29:7739",officialNostrPubKey:"npub1me48869w43j30cfry9ayz9dsdl4gj54xppgk9krrv7g6hsq7psuqp3yusn",officialRgbPeer:"03b7153e278882e48e690acd0743305cbada86b131ab3388ccd782b45b02f064ef",officialRgbPeerHost:"regtest.lnfi.network:9736",officialUniverseServer:"regtest.lnfi.network:10009",priceOracle:"grpc-oracle.lnfi.network",rgbProxy:"rpc://regtest.lnfi.network:5000/json-rpc"}});var rnt=v((gon,ckr)=>{ckr.exports={bitcoindIndex:"CHANGE_ME_TESTNET_ELECTRS_HOST:50001",bitcoindPass:"CHANGE_ME_TESTNET_RPC_PASSWORD",bitcoindRpcHost:"CHANGE_ME_TESTNET_BITCOIND_HOST",bitcoindRpcPort:"18332",bitcoindUser:"CHANGE_ME_TESTNET_RPC_USER",bitcoindZmqBlock:"tcp://CHANGE_ME_TESTNET_BITCOIND_HOST:28334",bitcoindZmqRawTx:"tcp://CHANGE_ME_TESTNET_BITCOIND_HOST:28335",network:"testnet",nostrRelays:["wss://CHANGE_ME_TESTNET_RELAY_1","wss://CHANGE_ME_TESTNET_RELAY_2"],officialLndPeer:"",officialLndPeerHost:"CHANGE_ME_TESTNET_LND_HOST:9735",officialNostrPubKey:"",officialRgbPeer:"",officialRgbPeerHost:"CHANGE_ME_TESTNET_RGB_HOST:9736",officialUniverseServer:"CHANGE_ME_TESTNET_UNIVERSE_HOST:10009",priceOracle:"grpc-oracle.lnfi.network",rgbProxy:"rpc://CHANGE_ME_TESTNET_RGB_PROXY_HOST:5000/json-rpc"}});var snt=v((yon,ant)=>{var nnt=require("node:fs"),{getConfig:ukr,reloadConfig:int}=Vt(),{getMainLnlinkConfig:lkr,updateMainLnlinkConfig:dkr}=Mr(),fkr=Ke(),pkr=ent(),_kr=tnt(),hkr=rnt(),{initConfig:mkr}=BW();async function gkr(){let t=new fkr("init");try{let{LINK_NODE_ENV:e,LINK_OWNER:r,LINK_NETWORK:n,LINK_NAME:i}=ukr();if(e==="app")return;let s=await lkr();if(s&&s.settings&&Object.keys(s.settings).length>0){!s.node_name&&i&&(await dkr({node_name:i}),await int());return}let o,c=process.env.LINK_SETTINGS_PATH;if(c)try{if(nnt.existsSync(c)){let u=nnt.readFileSync(c,"utf-8");o=JSON.parse(u)}else t.warn(`LINK_SETTINGS_PATH is set but file does not exist: ${c}`)}catch(u){t.error(`Failed to load settings from LINK_SETTINGS_PATH: ${u.message}`)}o||(n==="testnet"?o=hkr:n==="mainnet"?o=pkr:o=_kr),await mkr({owner:r,settings:o,nodeName:i}),await int()}catch(e){t.error(e?.message)}}a(gkr,"initLinkConfig");ant.exports=gkr});var cnt=v((bon,ont)=>{var{getConfig:ykr}=Vt(),{initJobListener:vkr}=Zrt(),bkr=FW(),xkr=UW(),{setCacheMacaroon:wkr}=wi(),Ekr=snt();async function Tkr(){await Ekr();let{listenNostrEvent:t,initAccount:e}=await vkr();await bkr(),xkr(),e(),t();let{LINK_NODE_ENV:r}=ykr();r==="development"&&wkr("12345678")}a(Tkr,"init");ont.exports=Tkr});var fnt=v((won,ale)=>{require("module-alias/register");var{EventEmitter:Skr}=require("node:events"),unt=require("node:fs"),Akr=require("node:http"),vN=require("node:path"),lnt=bq(),kkr=M_e(),VF=aH(),dnt=jme(),Nkr=age(),Okr=Tge(),Ikr=ZNe(),{getConfig:Ckr,initConfig:Rkr}=Vt(),Pkr=cnt(),KF=class extends Skr{static{a(this,"LnLink")}constructor(e={}){super(),this.options={dataPath:e.dataPath||vN.join(process.cwd(),"lnlink-data"),network:e.network||"regtest",debug:e.debug||!1,httpPort:e.httpPort||8090,name:e.name||"electron-link",enableTor:e.enableTor||!1,owner:e.owner||"",binaryPath:e.binaryPath||"",nodeEnv:e.nodeEnv||"app",...e},this.isInitialized=!1,this.isRunning=!1,this.server=null,this.app=null,this.cleanupFunctions=[]}_ensureEnvironmentAndPrisma(){if(!process.env.LINK_DATABASE_URL){let e=vN.join(this.options.dataPath,".link","lnlink.db");process.env.LINK_DATABASE_URL=`file:${e}`,console.log(`\u{1F5C4}\uFE0F Setting database URL: ${e}`)}}async _ensureDatabaseSetup(){try{let e=vN.dirname(process.env.LINK_DATABASE_URL.replace("file:",""));unt.existsSync(e)||(unt.mkdirSync(e,{recursive:!0}),console.log(`\u{1F4C1} Created data directory: ${e}`)),console.log("\u{1F4E6} Prisma operations handled by startup scripts");try{console.log("\u{1F4E6} Checking database health..."),await nh().getInstance().healthCheck(),console.log("\u2705 Database connection healthy")}catch(r){console.warn("\u26A0\uFE0F Database health check warning:",r.message)}}catch(e){throw console.error("\u274C Database setup failed:",e.message),e}}async initialize(e={}){try{return process.env.LINK_DATA_PATH=this.options.dataPath,process.env.LINK_DEBUG=this.options.debug.toString(),process.env.LINK_NODE_ENV=this.options.nodeEnv||"app",process.env.LINK_HTTP_PORT=this.options.httpPort.toString(),process.env.LINK_NAME=this.options.name,process.env.LINK_OWNER=this.options.owner,this.options.binaryPath&&(process.env.LINK_BINARY_PATH=this.options.binaryPath),this.options.reportAddress&&(process.env.LINK_REPORT_ADDRESS=this.options.reportAddress),this.options.reportBaseUrl&&(process.env.LINK_REPORT_BASE_URL=this.options.reportBaseUrl),this.options.rgbHost&&(process.env.LINK_RGB_HOST=this.options.rgbHost),this.options.rgbLdkPeerListeningPort&&(process.env.LINK_RGB_LDK_PEER_LISTENING_PORT=this.options.rgbLdkPeerListeningPort.toString()),Object.entries(e).forEach(([r,n])=>{process.env[r]=n.toString()}),this._ensureEnvironmentAndPrisma(),await this._ensureDatabaseSetup(),await Rkr(),this.isInitialized=!0,this.emit("initialized"),{success:!0}}catch(r){throw this.emit("error",r),r}}async start(){if(!this.isInitialized)throw new Error("LN-Link must be initialized before starting");try{let{LINK_HTTP_PORT:e}=Ckr();this.app=VF();let r=dnt({windowMs:900*1e3,max:100,message:{code:429,message:"Too many requests from this IP, please try again later."},standardHeaders:!0,legacyHeaders:!1}),n=dnt({windowMs:900*1e3,max:50,message:{code:429,message:"Too many API requests from this IP, please try again later."}});return this.app.use(Okr("dev")),this.app.use(lnt.urlencoded({extended:!0})),this.app.use(lnt.json()),this.app.use(VF.json()),this.app.use(VF.urlencoded({extended:!1})),this.app.use(kkr()),this.app.use(VF.static(vN.join(__dirname,"public"),{setHeaders:a((i,s)=>{(s.endsWith(".html")||s.endsWith(".css")||s.endsWith(".js"))&&i.setHeader("Cache-Control","public, max-age=3600")},"setHeaders")})),this.app.use(r),this.app.get("/",(i,s)=>{s.sendFile(vN.join(__dirname,"public/init.html"))}),this.app.get("/api/health",(i,s)=>{try{let o={status:"healthy",timestamp:new Date().toISOString(),uptime:process.uptime(),memory:process.memoryUsage(),port:e,electron:!0};s.status(200).json({code:0,message:"Server is healthy",data:o})}catch(o){s.status(500).json({code:500,message:"Server health check failed",data:{error:o.message}})}}),this.app.use("/api/lnd",n,Ikr),this.app.get("/api/debug/heap-snapshot",(i,s)=>{let o=require("node:v8"),c=`${this.options.dataPath}/.link/heap-${Date.now()}.heapsnapshot`,u=o.writeHeapSnapshot(c);s.send(`Heap snapshot saved to ${u}`)}),this.app.use((i,s,o)=>{o(Nkr(404))}),this.app.use((i,s,o)=>{o.locals.message=i.message,o.locals.error=s.app.get("env")==="development"?i:{},o.status(i.status||500),o.json({error:i.message})}),this.app.set("port",e),this.server=Akr.createServer(this.app),await new Promise((i,s)=>{this.server.listen(e,o=>{o?s(o):i()}),this.server.on("error",o=>{this.emit("error",o),s(o)})}),this._ensureEnvironmentAndPrisma(),await Pkr(),this.isRunning=!0,this.emit("started",{port:e}),{success:!0,port:e}}catch(e){throw this.emit("error",e),e}}async stop(){try{this.server&&(await new Promise(e=>{this.server.close(()=>{e()})}),this.server=null);for(let e of this.cleanupFunctions)typeof e=="function"&&await e();return this.isRunning=!1,this.emit("stopped"),{success:!0}}catch(e){throw this.emit("error",e),e}}addCleanupFunction(e){this.cleanupFunctions.push(e)}getStatus(){return{initialized:this.isInitialized,running:this.isRunning,options:this.options,port:this.isRunning?this.options.httpPort:null}}getConfig(){let{getConfig:e}=Vt();return e()}getApp(){return this.app}getServer(){return this.server}};ale.exports=KF;ale.exports.default=KF});require("module-alias/register");var Lkr=require("node:path"),Dkr=Gm(),Bkr=fnt();globalThis.crypto=require("node:crypto");Dkr.set({toExpNeg:-20,toExpPos:40});var pnt=[],gd=null;async function zF(t){console.info(`Received ${t}. Starting graceful shutdown...`);try{gd&&gd.isRunning&&(console.info("Stopping LN-Link services..."),await gd.stop());for(let e of pnt)typeof e=="function"&&await e();console.info("Graceful shutdown completed")}catch(e){console.error("Error during graceful shutdown:",e.message)}finally{process.exit(0)}}a(zF,"gracefulShutdown");process.on("SIGINT",()=>zF("SIGINT"));process.on("SIGTERM",()=>zF("SIGTERM"));process.on("uncaughtException",t=>{console.error("Uncaught Exception:",t),zF("UNCAUGHT_EXCEPTION")});process.on("unhandledRejection",(t,e)=>{console.error("Unhandled Rejection at:",e,"reason:",t),zF("UNHANDLED_REJECTION")});globalThis.addCleanupFunction=t=>{pnt.push(t)};async function Mkr(){try{console.info("\u{1F680} Starting LN-Link application...");let t={dataPath:process.env.LINK_DATA_PATH||Lkr.join(process.cwd(),"lnlink-data"),httpPort:Number.parseInt(process.env.LINK_HTTP_PORT)||8090,name:process.env.LINK_NAME||"docker-link",enableTor:process.env.LINK_ENABLE_TOR==="true"||!1,owner:process.env.LINK_OWNER||"",binaryPath:process.env.LINK_BINARY_PATH||"",nodeEnv:process.env.LINK_NODE_ENV||"production",debug:process.env.LINK_DEBUG==="true"||!1};gd=new Bkr(t),gd.on("initialized",()=>{console.info("\u2705 LN-Link initialized successfully")}),gd.on("started",({port:r})=>{console.info(`\u{1F310} LN-Link server started on port ${r}`),console.info(`\u{1F4E1} Health check: http://localhost:${r}/api/health`),console.info(`\u{1F3E0} Web interface: http://localhost:${r}/`)}),gd.on("stopped",()=>{console.info("\u{1F6D1} LN-Link services stopped")}),gd.on("error",r=>{console.error("\u274C LN-Link error:",r.message),console.error(r.stack)}),gd.addCleanupFunction(async()=>{console.info("\u{1F9F9} Running LN-Link cleanup functions...")}),console.info("\u{1F527} Initializing LN-Link..."),await gd.initialize(),console.info("\u{1F680} Starting LN-Link services...");let e=await gd.start();return console.info("\u2705 Application started successfully"),e}catch(t){console.error(`\u274C Application startup error: ${t?.message}`),console.error(t.stack),process.exit(1)}}a(Mkr,"start");Mkr().catch(t=>{console.error("\u{1F4A5} Failed to start application:",t),process.exit(1)});
10717
10717
  /*! Bundled license information:
10718
10718
 
10719
10719
  decimal.js/decimal.js: