const init=async()=>{const e=window.XverseProviders;window.serverUrl="";let t="",n="";const o='<span style="color: orange; font-size: 1.1em"><b>Bitmap</b> Wallet Checker</span><br/>This is a wallet-aware inscription app for checking if the wallet holder owns any Bitmaps (< 840000).';window.bitdex=await import("/content/fab1388dc44bed0161844036154a69fa2e8fe1ae47cfe1e209a9605e4da57328i0");const{getPatternArrayData:i,getPatternArray:s}=await import("/content/55551557695dd82a2bda5ec3497684ec7cbb2cc1752ff5101accff1648666c3ai0");console.log("built by runeape.sats 🟪🐈");const l=i(),r=async()=>{document.getElementById("btnXverse0").setAttribute("disabled","true");try{const i=await e.BitcoinProvider.request("getAccounts",{purposes:["payment","ordinals"],message:"Digital Elements Fusion Node"},e.BitcoinProvider);if(i.result){document.getElementById("btnXverse0").style.display="none";const r=i.result.find((e=>"ordinals"===e.purpose)),c=i.result.find((e=>"payment"===e.purpose));t=c?.address,n=r?.address,console.log(n),document.getElementById("info0").innerHTML=`<p>${n}</p>`,(async()=>{let i=0,r=[],c=60,a=0;const d=`<p>${o}</p><p>BTC wallet: <b>${t}</b><br/>Ord wallet: <b>${n}</b></p>`;document.getElementById("info0").innerHTML=d+"Loading...<br/>";let p="",m="";for(;c>=i;){console.log("load all inscription...",i);const t=await e.BitcoinProvider.request("ord_getInscriptions",{offset:i,limit:60});if(i+=60,t.result&&t.result.inscriptions.length>0){const e=t.result;console.log(e),c=e.total;for(let t=0;t<e.inscriptions.length;t++){const n=e.inscriptions[t];if(n&&n.contentType&&n.contentType.includes("text/plain")){const e=await fetch(`${serverUrl}/content/${n.inscriptionId}`),t=await e.text(),o=t.split(".");if(t.includes(".bitmap")&&2===o.length){const e=Number(o[0]);if(!isNaN(e)&&e<84e4){const t=await getBitmapInscriptionId(e),o=l[e],i=s(e);o>=0&&(console.log(`Bitmon ${o} (NTx: ${i.length}) found on ${e}.bitmp!`),a++);const c=n.inscriptionId===t;m=`<span style="font-size: 0.9em; color: #ff9600">${e}.bitmap</span> <span style="font-size: 0.8em"><span style="color:#FF00FF">${o>=0?" Bitmon "+o:""} ${o>=0?"(NTx: "+i.length.toString()+")":""}</span>, <i style="color: #eeeeee">${n.inscriptionId}</i></span><br/>`,c&&(p+=m,r.push({blockHeight:e,inscriptionId:n.inscriptionId,bitmon:o>=0?`${o}`:"",bitmonNtx:o>=0?i.length:null})),document.getElementById("info0").innerHTML=d+p}}}}}}r.sort(((e,t)=>e.blockHeight-t.blockHeight)),p="";for(let e=0;e<r.length;e++){const t=r[e];m=`<span style="font-size: 0.9em; color: #ff9600">${t.blockHeight}.bitmap</span> <span style="font-size: 0.8em"><span style="color:#FF00FF">${t.bitmon?" Bitmon "+t.bitmon:""} ${t.bitmonNtx?"<span style='color: #DDA0DD'>(NTx: "+t.bitmonNtx+")</span>":""}</span>, <i style="color: #eeeeee">${t.inscriptionId}</i></span><br/>`,p+=m}document.getElementById("info0").innerHTML=d+p+`<br/>Total <b>${r.length}</b> Bitmap inscription${r.length>1?"s":""} ${a>0?"<span style='font-size: 0.9em'>(<b style='color:#FF00FF'>"+a+" Bitmon"+(a>1?"s":"")+"</b>)</span>":""}<br/><br/>`,console.log("all inscription loaded",r),document.getElementById("btnXverseSendBtc").style.display=""})()}else location.reload()}catch(e){location.reload()}};document.body.style="margin: 20px;overflow: x-hidden; background-color: #333333; color: white;font-family: system-ui;";const c=document.createElement("span");if(c.setAttribute("id","info0"),c.style.marginLeft="10px",c.style.fontSize=".9em",document.body.appendChild(c),document.getElementById("info0").innerHTML=e?"<p>"+o+`<br/><br/>Connect a wallet to continue... <i style="color:yellow">${window.innerWidth<600?"(plz switch to the full-screen mode)</i>":""}</p>`:"<p>no wallet detected</p>",e){const e=document.createElement("button");e.setAttribute("id","btnXverse0"),e.style.padding="7px",e.style.color="#cccccc",e.style.cursor="pointer",e.style.fontSize=".9em",e.style.border="1px solid white",e.style.backgroundColor="transparent",e.style.marginTop="5px",e.style.width="160px",e.style.marginRight="10px",e.onclick=()=>r(),e.innerHTML="Connect Xverse",document.body.appendChild(e)}const a=document.createElement("button");a.setAttribute("id","btnXverseSendBtc"),a.style.padding="7px",a.style.color="#cccccc",a.style.cursor="pointer",a.style.fontSize=".9em",a.style.border="1px solid white",a.style.backgroundColor="transparent",a.style.marginTop="5px",a.style.width="100px",a.style.display="none",a.style.marginRight="10px",a.onclick=()=>(async()=>{const t=await e.BitcoinProvider.request("sendTransfer",{recipients:[{address:"35UR68XPKRHLDW4nXheGVEYAfSPzBvnVvV",amount:Number(1e4)}]});"success"===t.status||console.log(t.error)})(),a.innerHTML="Send Tips",document.body.appendChild(a)};