const initWallet=async()=>{const t=await fetch("/content/10d92ec11b31ea21752ac46781d109bcf53bba04ae9b1044747057335c77ef9ci0"),e=document.createElement("script");e.innerHTML=await t.text(),document.body.appendChild(e),document.body.style="background-color: black; overflow: hidden;margin: 0px;padding: 0px";const n=document.createElement("div");n.setAttribute("id","atomView");const o=document.createElement("div");o.setAttribute("id","overlay0"),o.style="position: absolute;width: 100% !important;height: 100% !important;display: block;z-index: 9;";const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("width","100%"),a.setAttribute("height","100%"),a.setAttribute("viewBox","0 0 4096 4096");const i=document.createElementNS("http://www.w3.org/2000/svg","animateTransform");i.setAttribute("attributeType","xml"),i.setAttribute("attributeName","transform"),i.setAttribute("type","translate"),i.setAttribute("values","0,0; 0,5; 0,10; 0,5; 0,0"),i.setAttribute("keyTimes","0; 0.25; 0.5; 0.75; 1"),i.setAttribute("dur","7s"),i.setAttribute("repeatCount","indefinite"),i.setAttribute("calcMode","spline"),i.setAttribute("keySplines",".42 0 .58 1; .42 0 .58 1; .42 0 .58 1; .42 0 .58 1");const r=document.createElementNS("http://www.w3.org/2000/svg","g");r.setAttribute("transform","translate(520 500) scale(25 25)"),r.setAttribute("fill","#FEFFFE");const d=(t,e)=>{const n=document.createElementNS("http://www.w3.org/2000/svg","circle");n.setAttribute("cx",`${t}`),n.setAttribute("cy",`${e}`),n.setAttribute("r","2.5"),r.append(n)},s=10.7,c=6.8;d(70.7,66.8);for(let t=0;t<7;t++)d(20+10*t+s,26.8),d(30.7,30+10*t+c),d(90.7,30+10*t+c),d(20+10*t+s,96.8);const l=document.createElementNS("http://www.w3.org/2000/svg","g");l.setAttribute("transform","translate(520 500) scale(25 25)"),l.setAttribute("fill","#FEFFFE");const u=document.createElementNS("http://www.w3.org/2000/svg","circle");u.setAttribute("cx","80.7"),u.setAttribute("cy","66.8"),u.setAttribute("r","2.5"),l.append(u),u.append(i),a.append(r),a.append(l),o.append(a),n.append(o);const m=document.createElement("canvas");m.setAttribute("id","atomCanvas"),n.append(m),document.body.appendChild(n),document.getElementById("atomCanvas").width=window.innerWidth,document.getElementById("atomCanvas").height=window.innerHeight;const p=await fetch("/content/d94a775355aa322080db915da5eaee0b60fb5fd1464c170e67375e8487741a08i0"),b=document.createElement("script");b.innerHTML=decodeURIComponent(escape(atob(await p.text()))),document.body.appendChild(b),maing(Math.floor(2*Math.random()),Math.floor(4*Math.random()),Math.floor(40*Math.random()),10337,Math.floor(4*Math.random()),Math.floor(40*Math.random())+10);const h=document.createElement("div");h.setAttribute("id","ordOsDiv0"),h.style="color: white; position: absolute;width: 100%; height: 100% !important;z-index: 999;top: 0px;font-family: system-ui;margin: 0px; padding: 0px; z-index: 100;",document.body.appendChild(h);const w=document.createElement("button");w.setAttribute("id","btnEth"),w.style.position="absolute",w.style.color="#cccccc",w.style.cursor="pointer",w.style.fontSize=".8em",w.style.border="0px",w.style.margin="0px",w.style.backgroundColor="transparent",w.style.backdropFilter="blur(10px)",w.style.width="100%",w.style.height="100%",window.ethereum&&(w.onclick=()=>(async()=>{console.log("connectETH"),document.getElementById("btnEth").setAttribute("disabled","true");const t=await(window?.ethereum?.request({method:"eth_requestAccounts"}));if(t){document.getElementById("btnEth").style.display="none",console.log(t),t[0];const e=new ethers.BrowserProvider(window.ethereum),n=(await e.getNetwork()).chainId,o=Number(n);if(console.log("chainId",o),8453!=o)return void await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${8453..toString(16)}`}]});const a=await e.getSigner(),i=new ethers.Contract("0xdFd08eCf3Fb5F3ad90e7AeaA6fBfd6b8B4b80D6f",["function drip()"],a);try{await i.drip()}catch(t){setTimeout((()=>{location.reload()}),3e3)}}})()),h.appendChild(w)};