DERO HE BlockChain Explorer(v1) Mainnet

hosted on

DERO Mining Node

Tx hash: 900227b75c66b9fa859dd888545a433f17c266fa34529ac6bfde39b5cc8252d8 Type SC

Block: 0f5a765d27900bf48030faa4d162242eac542d0454cfead05b8252490f7bfe5f (VALID)
SCID current reserves
SCID Amount(in atomic units)
0000000000000000000000000000000000000000000000000000000000000000 0
SCID string variables
key value
C 2f2f2020436f7079726967687420323032342e20436976696c776172652e20416c6c207269676874732072657365727665642e0a2f2f202054454c4120446563656e7472616c697a65642057656220446f63756d656e74202854454c412d444f432d31290a46756e6374696f6e20496e697469616c697a655072697661746528292055696e7436340a313020494620696e69742829203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226e616d65486472222c2022616968656c706572732e6a7322290a33312053544f524528226465736372486472222c202241492068656c706572732066696c6522290a33322053544f5245282269636f6e55524c486472222c202222290a33332053544f524528226455524c222c2022616968656c706572732e6a7322290a33342053544f52452822646f6354797065222c202254454c412d4a532d3122290a33352053544f52452822737562446972222c202222290a33362053544f5245282266696c65436865636b43222c20223236653538323436663663613039643932313831613733333739323230353939653961356334366264356134626465356561306238333566666230623331643422290a33372053544f5245282266696c65436865636b53222c20223236353237653433306565643733343838353630386233373065316239316337666565326361353634343139623335326365386332373039316436386565666122290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e20696e697428292055696e7436340a31302049462045584953545328226f776e65722229203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226f776e6572222c20616464726573732829290a35302053544f52452822646f6356657273696f6e222c2022312e302e3022290a36302053544f5245282268617368222c204845582854584944282929290a37302053544f524528226c696b6573222c2030290a38302053544f524528226469736c696b6573222c2030290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e2061646472657373282920537472696e670a31302044494d207320617320537472696e670a3230204c45542073203d205349474e455228290a33302049462049535f414444524553535f56414c4944287329205448454e20474f544f2035300a34302052455455524e2022616e6f6e220a35302052455455524e20414444524553535f535452494e472873290a456e642046756e6374696f6e0a0a46756e6374696f6e205261746528722055696e743634292055696e7436340a31302044494d206164647220617320537472696e670a3135204c45542061646472203d206164647265737328290a31362049462072203c2031303020262620455849535453286164647229203d3d2030202626206164647220213d2022616e6f6e22205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528616464722c2022222b722b225f222b424c4f434b5f4845494748542829290a34302049462072203c203530205448454e20474f544f2037300a35302053544f524528226c696b6573222c204c4f414428226c696b657322292b31290a36302052455455524e20300a37302053544f524528226469736c696b6573222c204c4f414428226469736c696b657322292b31290a3130302052455455524e20300a456e642046756e6374696f6e0a0a2f2a0a66756e6374696f6e206973556e6465724f72466163696e675365676d656e7428656e656d792c2074617267657429207b0a09636f6e7374206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a09636f6e7374207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a09696628656e656d792e78203c206c65667420262620656e656d792e666163696e67203d3d3d31297b0a090972657475726e20747275653b0a097d656c736520696628656e656d792e78203e20726967687420262620656e656d792e666163696e67203d3d3d2d31297b0a090972657475726e20747275653b0a097d656c736520696628656e656d792e78203e3d206c65667420262620656e656d792e78203c3d207269676874297b0a090972657475726e20747275653b0a097d0a2020202072657475726e2066616c73653b0a7d0a0a66756e6374696f6e2069735365676d656e7442656c6f775365676d656e7428736567412c20736567422c207468726573686f6c64203d203029207b0a0a202020202f2f20312e20486f72697a6f6e74616c206f7665726c617020636865636b0a20202020636f6e7374206c6566744120203d204d6174682e6d696e28736567412e78312c20736567412e7832293b0a20202020636f6e737420726967687441203d204d6174682e6d617828736567412e78312c20736567412e7832293b0a0a20202020636f6e7374206c6566744220203d204d6174682e6d696e28736567422e78312c20736567422e7832293b0a20202020636f6e737420726967687442203d204d6174682e6d617828736567422e78312c20736567422e7832293b0a0a20202020636f6e7374206f7665726c6170203d202128726967687441203c206c65667442202d2031207c7c206c65667441203e20726967687442202b2031293b0a2020202069662028216f7665726c6170292072657475726e2066616c73653b0a0a202020202f2f20322e20436f6d7075746520617665726167652068656967687473202868616e646c657320736c6f706573290a20202020636f6e73742061766741203d2028736567412e7931202b20736567412e793229202a20302e353b0a20202020636f6e73742061766742203d2028736567422e7931202b20736567422e793229202a20302e353b0a0a202020202f2f20332e20412069732062656c6f77204220696620697473206176657261676520792069732067726561746572202873637265656e20636f6f726473290a2020202072657475726e2061766741203e2061766742202b207468726573686f6c643b0a7d0a0a0a0a66756e6374696f6e20676574506c6174666f726d4279496428696429207b0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a0909696628706c61742e6964203d3d3d2069642972657475726e20706c61743b0a097d090a7d09090a0a0a66756e6374696f6e20726573657441747461636b7328656e656d79297b0a09656e656d792e77616e744b69636b203d2066616c73653b0a09656e656d792e77616e7450756e6368203d2066616c73653b0a090a7d0a66756e6374696f6e20706c617965724973546872656174656e696e6728706c6179657229207b0a0972657475726e20706c617965722e77616e744b69636b207c7c0a0909706c617965722e77616e7450756e6368207c7c0a0909706c617965722e616e696d2e7374617465203d3d3d20226b69636b22207c7c0a0909706c617965722e616e696d2e7374617465203d3d3d2022686967684b69636b22207c7c0a0909706c617965722e616e696d2e7374617465203d3d3d202270756e6368223b0a7d0a0a66756e6374696f6e20636f756e74456e656d696573426568696e6428656e656d7929207b0a202020206c657420636f756e74203d20303b0a0a20202020666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a20202020202020206966202865203d3d3d20656e656d792920636f6e74696e75653b0a202020202020202069662028652e646561642920636f6e74696e75653b0a0a20202020202020202f2f2053616d6520706c6174666f726d206f6e6c790a202020202020202069662028652e6f6e506c6174666f726d20213d3d20656e656d792e6f6e506c6174666f726d2920636f6e74696e75653b0a0a20202020202020202f2f204d75737420626520626568696e642072656c617469766520746f20666163696e670a202020202020202069662028656e656d792e666163696e67203d3d3d203120262620652e78203c20656e656d792e782920636f756e742b2b3b0a202020202020202069662028656e656d792e666163696e67203d3d3d202d3120262620652e78203e20656e656d792e782920636f756e742b2b3b0a202020207d0a0a2020202072657475726e20636f756e743b0a7d0a66756e6374696f6e20636f756e74456e656d696573416865616428656e656d7929207b0a202020206c657420636f756e74203d20303b0a0a20202020666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a20202020202020206966202865203d3d3d20656e656d792920636f6e74696e75653b0a202020202020202069662028652e646561642920636f6e74696e75653b0a0a20202020202020202f2f2053616d6520706c6174666f726d206f6e6c790a202020202020202069662028652e6f6e506c6174666f726d20213d3d20656e656d792e6f6e506c6174666f726d2920636f6e74696e75653b0a0a20202020202020202f2f204d75737420626520626568696e642072656c617469766520746f20666163696e670a202020202020202069662028656e656d792e666163696e67203d3d3d203120262620652e78203e20656e656d792e782920636f756e742b2b3b0a202020202020202069662028656e656d792e666163696e67203d3d3d202d3120262620652e78203c20656e656d792e782920636f756e742b2b3b0a202020207d0a0a2020202072657475726e20636f756e743b0a7d0a0a0a66756e6374696f6e206b656570456e656d7953706163696e6728656e656d7929207b0a20202020636f6e73742073706163696e67203d2035303b202f2f20686f77206d75636820737061636520746865792077616e740a20202020666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a20202020202020206966202865203d3d3d20656e656d79207c7c20652e64656164207c7c20652e696e4169722920636f6e74696e75653b0a0a20202020202020202f2f2053616d6520706c6174666f726d206f6e6c790a202020202020202069662028652e6f6e506c6174666f726d20213d3d20656e656d792e6f6e506c6174666f726d2920636f6e74696e75653b0a0a20202020202020202f2f20436865636b206966206520697320696e2066726f6e74206f6620656e656d790a2020202020202020636f6e7374206478203d20652e78202d20656e656d792e783b0a0a202020202020202069662028656e656d792e666163696e67203d3d3d2031202626206478203e2030202626206478203c2073706163696e6729207b20202020202020200a20202020202020202020202072657475726e20747275653b0a20202020202020207d0a0a202020202020202069662028656e656d792e666163696e67203d3d3d202d31202626206478203c2030202626202d6478203c2073706163696e6729207b20202020202020200a20202020202020202020202072657475726e20747275653b0a20202020202020207d0a202020207d0a2020202072657475726e2066616c73653b0a7d0a0a0a0a66756e6374696f6e2061766f696457616c6c7328656e656d79297b0a09696628646972656374696f6e426c6f636b656428656e656d79292026262021656e656d792e696e416972297b0a0909656e656d792e666163696e67203d202d656e656d792e666163696e673b0a0909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e670a0909696628646972656374696f6e426c6f636b656428656e656d7929297b0a090909656e656d792e6d6f7665496e707574203d20303b0a09097d0a097d0a7d0a66756e6374696f6e2061766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c2077616c6c536567297b0a0a09696628646972656374696f6e426c6f636b656428656e656d79292026262021656e656d792e696e41697220262620656e656d792e6f6e506c6174666f726d203d3d3d20656e656d792e626c6f636b6564502026262021616943616e4a756d704f76657228656e656d792c2077616c6c53656729297b0a0909656e656d792e666163696e67203d202d656e656d792e666163696e673b0a0909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e670a0909696628646972656374696f6e426c6f636b656428656e656d7929297b0a090909656e656d792e6d6f7665496e707574203d20303b0a09097d0a097d0a7d0a0a0a66756e6374696f6e20646972656374696f6e426c6f636b656428656e656d79297b0a09696628656e656d792e666163696e67203d3d3d203120262620656e656d792e626c6f636b65645269676874292072657475726e20747275653b0a09696628656e656d792e666163696e67203d3d3d202d3120262620656e656d792e626c6f636b65644c656674292072657475726e20747275653b0a0972657475726e2066616c73650a7d0a66756e6374696f6e2064657465637457616c6c416865616428656e656d7929207b0a0a0a20202020666f7220286c657420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f7220286c657420736567206f6620706c61742e7365676d656e747329207b0a09090909636f6e737420646972656374696f6e203d206169436865636b57616c6c416865616428656e656d792c20736567290a20202020202020202020202069662028646972656374696f6e29207b0a09090909696628646972656374696f6e203d3d3d2022726967687422297b0a0909090909656e656d792e626c6f636b656450203d20706c61742e69643b0a0909090909656e656d792e626c6f636b65645269676874203d20747275653b0a0909090909656e656d792e626c6f636b65644c656674203d2066616c73653b0a090909090972657475726e207365670a090909097d656c73657b0a0909090909656e656d792e626c6f636b656450203d20706c61742e69643b0a0909090909656e656d792e626c6f636b65644c656674203d20747275653b0a0909090909656e656d792e626c6f636b65645269676874203d2066616c73653b0a090909090972657475726e207365670a090909097d0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e206e756c6c3b0a7d0a0a66756e6374696f6e20616943616e4a756d704f7665722861692c2073656729207b0a09696628217365672972657475726e20747275653b0a20202020636f6e73742077616c6c486569676874203d207365672e6d617859202d207365672e6d696e593b0a2020202072657475726e2077616c6c486569676874203c3d203130303b0a7d0a0a0a66756e6374696f6e206169436865636b57616c6c41686561642861692c207365672c206c6f6f6b41686561644d6178203d20343029207b0a0a2020202069662028217365672e697357616c6c292072657475726e2066616c73653b0a0a0a20202020636f6e737420746f70203d2061692e79202b2061692e686569676874202a202e32353b0a20202020636f6e737420626f74746f6d203d2061692e79202b2061692e686569676874202a20302e353b0a0a202020202f2f20766572746963616c206f7665726c61700a2020202069662028626f74746f6d202d31203c3d207365672e6d696e59207c7c20746f70202b31203e3d207365672e6d617859292072657475726e2066616c73653b0a09090a2020202020202020636f6e73742064697374203d207365672e7831202d2061692e780a2020202020202020696620284d6174682e616273286469737429203c3d206c6f6f6b41686561644d61782026262064697374203e203029207b0909090a20202020202020202020202072657475726e202022726967687422203b0a20202020202020207d656c736520696620284d6174682e616273286469737429203c3d206c6f6f6b41686561644d61782026262064697374203c2030297b0909090a09090972657475726e2020226c65667422203b0a09097d0a0a2020202072657475726e2066616c73653b0a7d0a0a0a66756e6374696f6e2069734e656172506c6174666f726d4564676528656e656d792c20706c61742c207468726573686f6c64203d20323029207b0a20202020636f6e7374206c65667420203d20706c61742e6d696e583b0a20202020636f6e7374207269676874203d20706c61742e6d6178583b0a0a09200a20202020636f6e7374206e6561724c65667420203d20656e656d792e78203c206c656674202b207468726573686f6c643b0a20202020636f6e7374206e6561725269676874203d20656e656d792e78203e207269676874202d207468726573686f6c643b0a0a202020202f2f204f6e6c7920636f756e7420617320616e20656467652069662074686572652773206e6f20636f6e6e6563746564207365676d656e740a20202020696620286e6561724c656674292072657475726e20747275653b0a20202020696620286e6561725269676874292072657475726e20747275653b0a0a2020202072657475726e2066616c73653b0a7d0a0a0a66756e6374696f6e2069734e65617245646765466163696e6728656e656d792c20706c6174666f726d2c207468726573686f6c64203d20323029207b0a20202020636f6e7374206c65667420203d20706c6174666f726d2e6d696e583b0a20202020636f6e7374207269676874203d20706c6174666f726d2e6d6178583b0a0a2020202069662028656e656d792e666163696e67203c203029207b0a20202020202020202f2f20466163696e67206c6566740a202020202020202072657475726e20656e656d792e78203c3d206c656674202b207468726573686f6c643b0a202020207d20656c7365207b0a20202020202020202f2f20466163696e672072696768740a202020202020202072657475726e20656e656d792e78203e3d207269676874202d207468726573686f6c643b0a202020207d0a7d0a0a0a66756e6374696f6e206973466163696e675365676d656e7428656e656d792c207365676d656e74297b0a0a0969662028656e656d792e666163696e67203c203029207b0a20202020202020202f2f20466163696e67206c6566740a202020202020202072657475726e20656e656d792e78203e207365676d656e742e6d6964583b0a202020207d20656c7365207b0a20202020202020202f2f20466163696e672072696768740a202020202020202072657475726e20656e656d792e78203c207365676d656e742e6d6964583b0a202020207d0a7d0a0a66756e6374696f6e206973506c6179657242656c6f77506c6174666f726d28706c61742c207468726573686f6c64203d20323029207b0a20202020636f6e7374207078203d2067616d652e706c617965722e783b0a20202020636f6e7374207079203d2067616d652e706c617965722e793b0a0a20202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a0a20202020202020202f2f204f7074696f6e616c3a206f6e6c7920747265617420666c6f6f722d74797065207365676d656e747320617320706c6174666f726d20737572666163650a2020202020202020696620287365672e697357616c6c290a202020202020202020202020636f6e74696e75653b0a0a2020202020202020636f6e7374207831203d207365672e78313b0a2020202020202020636f6e7374207832203d207365672e78323b0a2020202020202020636f6e7374207931203d207365672e79313b0a2020202020202020636f6e7374207932203d207365672e79323b0a0a20202020202020202f2f20536b697020766572746963616c202f206e6561722d766572746963616c207365676d656e7473202877616c6c73290a2020202020202020636f6e7374206478203d207832202d2078313b0a2020202020202020696620284d6174682e61627328647829203c20302e30303031290a202020202020202020202020636f6e74696e75653b0a0a2020202020202020636f6e7374206c65667420203d204d6174682e6d696e2878312c207832293b0a2020202020202020636f6e7374207269676874203d204d6174682e6d61782878312c207832293b0a0a20202020202020202f2f20506c61796572206d75737420626520686f72697a6f6e74616c6c7920756e6465722074686973207365676d656e7420287769746820736d616c6c206d617267696e290a2020202020202020696620287078203c206c656674202d207468726573686f6c64207c7c207078203e207269676874202b207468726573686f6c64290a202020202020202020202020636f6e74696e75653b0a0a20202020202020202f2f20496e746572706f6c6174652074686520706c6174666f726d206865696768742061742070780a20202020202020206c65742074203d20287078202d20783129202f2064783b0a0a20202020202020202f2f20436c616d70207420736f20776520646f6e277420657874656e64206265796f6e6420746865207365676d656e740a20202020202020206966202874203c2030207c7c2074203e2031290a202020202020202020202020636f6e74696e75653b0a0a2020202020202020636f6e737420795f61745f7078203d207931202b2074202a20287932202d207931293b0a0a20202020202020202f2f20506c61796572206d7573742062652062656c6f772074686520737572666163650a2020202020202020696620287079203e20795f61745f7078202b203130290a20202020202020202020202072657475726e20747275653b0a202020207d0a0a2020202072657475726e2066616c73653b0a7d0a0a0a0a66756e6374696f6e20697353616665546f44726f7028656e656d7929207b0a20202020636f6e7374206665657458203d20656e656d792e783b0a20202020636f6e7374206665657459203d20656e656d792e79202b20656e656d792e686569676874202f20323b0a0a20202020636f6e73742073656742656c6f77203d20676574506c6174666f726d42656c6f77506f696e742866656574582c206665657459293b0a0a2020202072657475726e2073656742656c6f7720213d3d206e756c6c3b0a7d0a0a66756e6374696f6e20676574506c6174666f726d42656c6f77506f696e7428782c207929207b0a202020206c65742062657374203d206e756c6c3b0a202020206c6574206265737459203d20496e66696e6974793b0a0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a0909096966287365672e697357616c6c29636f6e74696e75653b0a2020202020202020202020202f2f20536b6970207365676d656e74732061626f7665206f72206174207468652073616d65206865696768740a202020202020202020202020636f6e737420736567546f70203d204d6174682e6d696e287365672e79312c207365672e7932293b0a20202020202020202020202069662028736567546f70203c3d20792920636f6e74696e75653b0a0a2020202020202020202020202f2f20436865636b20696620782069732077697468696e207365676d656e7420686f72697a6f6e74616c207370616e0a202020202020202020202020636f6e7374206c65667420203d204d6174682e6d696e287365672e78312c207365672e7832293b0a202020202020202020202020636f6e7374207269676874203d204d6174682e6d6178287365672e78312c207365672e7832293b0a2020202020202020202020206966202878203c206c656674207c7c2078203e2072696768742920636f6e74696e75653b0a0a2020202020202020202020202f2f20496e746572706f6c617465207468652059206174207468697320580a202020202020202020202020636f6e73742074203d202878202d207365672e783129202f20287365672e7832202d207365672e7831293b0a202020202020202020202020636f6e7374206979203d207365672e7931202b2074202a20287365672e7932202d207365672e7931293b0a0a2020202020202020202020202f2f204d7573742062652062656c6f772074686520706f696e740a202020202020202020202020696620286979203c3d20792920636f6e74696e75653b0a0a2020202020202020202020202f2f204b6565702074686520636c6f73657374206f6e650a202020202020202020202020696620286979203c20626573745929207b0a202020202020202020202020202020206265737459203d2069793b0a2020202020202020202020202020202062657374203d207365673b0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e20626573743b0a7d0a0a66756e6374696f6e2063616e4a756d70546f5365676d656e7428656e656d792c2066726f6d2c20746f29207b0a20202020636f6e73742067726176697479203d2067616d652e677261766974793b0a20202020636f6e7374206a756d70203d2067616d652e6a756d70537472656e6774683b0a0a20202020636f6e7374206d61784a756d70486569676874203d20286a756d70202a206a756d7029202f202832202a2067726176697479293b0a0a20202020636f6e73742066726f6d546f70203d204d6174682e6d696e2866726f6d2e79312c2066726f6d2e7932293b0a20202020636f6e737420746f546f702020203d204d6174682e6d696e28746f2e79312c20746f2e7932293b0a0a20202020636f6e737420766572746963616c44696666203d20746f546f70202d2066726f6d546f703b202f2f206e65676174697665203d2061626f76650a0a202020202f2f20746f6f20686967680a2020202069662028766572746963616c44696666203c202d6d61784a756d70486569676874292072657475726e2066616c73653b0a0a202020202f2f20746f6f2066617220646f776e0a2020202069662028766572746963616c44696666203e20313530292072657475726e2066616c73653b0a0a202020202f2f206c616e64696e67207a6f6e65206f6e2074686520746172676574207365676d656e740a20202020636f6e7374206c65667420203d204d6174682e6d696e28746f2e78312c20746f2e7832293b0a20202020636f6e7374207269676874203d204d6174682e6d617828746f2e78312c20746f2e7832293b0a0a202020202f2f20636c616d70206c616e64696e675820746f20746865207365676d656e740a20202020636f6e7374206c616e64696e6758203d204d6174682e6d6178286c6566742c204d6174682e6d696e28656e656d792e782c20726967687429293b0a0a20202020636f6e737420686f72697a6f6e74616c476170203d204d6174682e616273286c616e64696e6758202d20656e656d792e78293b0a0a202020202f2f2061697274696d650a20202020636f6e73742074696d655570203d206a756d70202f20677261766974793b0a20202020636f6e73742074696d65446f776e203d204d6174682e73717274282832202a20286d61784a756d70486569676874202b20766572746963616c446966662929202f2067726176697479293b0a20202020636f6e737420746f74616c41697254696d65203d2074696d655570202b2074696d65446f776e3b0a0a20202020636f6e7374206d6178486f72697a6f6e74616c5265616368203d20656e656d792e7370656564202a20746f74616c41697254696d653b0a0a2020202072657475726e20686f72697a6f6e74616c476170203c3d206d6178486f72697a6f6e74616c52656163683b0a7d0a0a66756e6374696f6e2063616e5365676d656e7452656163685365676d656e742866726f6d5365672c20746f5365672c206a756d702c20677261766974792c20737065656429207b0a0a20202020636f6e73742066726f6d546f70203d204d6174682e6d696e2866726f6d5365672e79312c2066726f6d5365672e7932293b0a20202020636f6e737420746f546f702020203d204d6174682e6d696e28746f5365672e79312c20746f5365672e7932293b0a0a20202020636f6e737420766572746963616c44696666203d20746f546f70202d2066726f6d546f703b202f2f206e65676174697665203d2061626f76650a0a20202020636f6e7374206d61784a756d70486569676874203d20286a756d70202a206a756d7029202f202832202a2067726176697479293b0a0a202020202f2f20546f6f20686967680a2020202069662028766572746963616c44696666203c202d6d61784a756d70486569676874290a202020202020202072657475726e2066616c73653b0a0a202020202f2f20546f6f2066617220646f776e20286f7074696f6e616c290a2020202069662028766572746963616c44696666203e20313530290a202020202020202072657475726e2066616c73653b0a0a202020202f2f20486f72697a6f6e74616c2072616e6765730a20202020636f6e73742066726f6d4c65667420203d204d6174682e6d696e2866726f6d5365672e78312c2066726f6d5365672e7832293b0a20202020636f6e73742066726f6d5269676874203d204d6174682e6d61782866726f6d5365672e78312c2066726f6d5365672e7832293b0a0a20202020636f6e737420746f4c65667420203d204d6174682e6d696e28746f5365672e78312c20746f5365672e7832293b0a20202020636f6e737420746f5269676874203d204d6174682e6d617828746f5365672e78312c20746f5365672e7832293b0a0a202020202f2f20436f6d70757465206d617820686f72697a6f6e74616c2072656163680a20202020636f6e73742074696d655570203d206a756d70202f20677261766974793b0a20202020636f6e73742074696d65446f776e203d204d6174682e73717274282832202a20286d61784a756d70486569676874202b20766572746963616c446966662929202f2067726176697479293b0a20202020636f6e737420746f74616c41697254696d65203d2074696d655570202b2074696d65446f776e3b0a0a20202020636f6e7374206d61785265616368203d207370656564202a20746f74616c41697254696d653b0a0a202020202f2f20436865636b20696620414e5920706f696e74206f6e2066726f6d5365672063616e20726561636820414e5920706f696e74206f6e20746f5365670a202020202f2f205468697320697320696e74657276616c206f7665726c617020657870616e646564206279206d617852656163680a20202020636f6e737420657870616e64656446726f6d4c65667420203d2066726f6d4c65667420202d206d617852656163683b0a20202020636f6e737420657870616e64656446726f6d5269676874203d2066726f6d5269676874202b206d617852656163683b0a0a20202020636f6e7374206f7665726c6170203d0a2020202020202020657870616e64656446726f6d5269676874203e3d20746f4c6566742026260a2020202020202020657870616e64656446726f6d4c65667420203c3d20746f52696768743b0a0a2020202072657475726e206f7665726c61703b0a7d0a0a66756e6374696f6e2066696e64426573744a756d705365676d656e7428656e656d792c20656e656d79506c61742c20706c61796572506c617429207b0a0a20202020636f6e7374206a756d70203d2067616d652e6a756d70537472656e6774683b0a20202020636f6e73742067726176697479203d2067616d652e677261766974793b0a20202020636f6e7374207370656564203d20656e656d792e73706565643b0a0a20202020666f722028636f6e73742070736567206f6620706c61796572506c61742e7365676d656e747329207b0a09096966202820707365672e697357616c6c2920636f6e74696e75653b0a2020202020202020666f722028636f6e73742065736567206f6620656e656d79506c61742e7365676d656e747329207b0a0909096966202820657365672e697357616c6c2920636f6e74696e75653b0a2020202020202020202020206966202863616e5365676d656e7452656163685365676d656e7428657365672c20707365672c206a756d702c20677261766974792c2073706565642929207b0a2020202020202020202020202020202072657475726e20707365673b200a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e206e756c6c3b0a7d0a0a66756e6374696f6e2066696e64436c6f736573745365676d656e74734265747765656e28706c6174666f726d412c20706c6174666f726d4229207b0a202020206c6574206265737441203d206e756c6c3b0a202020206c6574206265737442203d206e756c6c3b0a202020206c6574206265737444697374203d20496e66696e6974793b0a0a20202020666f722028636f6e73742073656741206f6620706c6174666f726d412e7365676d656e747329207b0a0909696628736567412e697357616c6c29636f6e74696e75653b0a2020202020202020666f722028636f6e73742073656742206f6620706c6174666f726d422e7365676d656e747329207b0a090909696628736567422e697357616c6c29636f6e74696e75653b0a0909090a2020202020202020202020202f2f20436f6d7061726520656e64706f696e7473206f66204120746f20656e64706f696e7473206f6620420a202020202020202020202020636f6e7374206431203d206469737428736567412e78312c20736567412e79312c20736567422e78312c20736567422e7931293b0a202020202020202020202020636f6e7374206432203d206469737428736567412e78312c20736567412e79312c20736567422e78322c20736567422e7932293b0a202020202020202020202020636f6e7374206433203d206469737428736567412e78322c20736567412e79322c20736567422e78312c20736567422e7931293b0a202020202020202020202020636f6e7374206434203d206469737428736567412e78322c20736567412e79322c20736567422e78322c20736567422e7932293b0a0a202020202020202020202020636f6e7374206c6f63616c4d696e203d204d6174682e6d696e2864312c2064322c2064332c206434293b0a0a202020202020202020202020696620286c6f63616c4d696e203c20626573744469737429207b0a202020202020202020202020202020206265737444697374203d206c6f63616c4d696e3b0a202020202020202020202020202020206265737441203d20736567413b0a202020202020202020202020202020206265737442203d20736567423b0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e207b20736567413a2062657374412c20736567423a2062657374422c20646973743a206265737444697374207d3b0a7d0a0a66756e6374696f6e2066696e64436c6f736573745365676d656e74734265747765656e4d6964506f696e747328706c6174666f726d412c20706c6174666f726d4229207b0a202020206c6574206265737441203d206e756c6c3b0a202020206c6574206265737442203d206e756c6c3b0a202020206c6574206265737453636f7265203d20496e66696e6974793b0a0a20202020666f722028636f6e73742073656741206f6620706c6174666f726d412e7365676d656e747329207b0a0909696628736567412e697357616c6c29636f6e74696e75653b0a2020202020202020666f722028636f6e73742073656742206f6620706c6174666f726d422e7365676d656e747329207b0a090909696628736567422e697357616c6c29636f6e74696e75653b0a0a2020202020202020202020202f2f204d6964706f696e742064697374616e63650a202020202020202020202020636f6e7374206d7841203d2028736567412e7831202b20736567412e783229202a20302e353b0a202020202020202020202020636f6e7374206d7941203d2028736567412e7931202b20736567412e793229202a20302e353b0a202020202020202020202020636f6e7374206d7842203d2028736567422e7831202b20736567422e783229202a20302e353b0a202020202020202020202020636f6e7374206d7942203d2028736567422e7931202b20736567422e793229202a20302e353b0a0a202020202020202020202020636f6e7374206d696444697374203d2064697374286d78412c206d79412c206d78422c206d7942293b0a0a2020202020202020202020202f2f20436f6d62696e65642073636f726520286d6964706f696e7420776569676874656420736c696768746c79206d6f7265290a202020202020202020202020636f6e73742073636f7265203d206d6964446973743b0a0a2020202020202020202020206966202873636f7265203c206265737453636f726529207b0a202020202020202020202020202020206265737453636f7265203d2073636f72653b0a202020202020202020202020202020206265737441203d20736567413b0a202020202020202020202020202020206265737442203d20736567423b0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e207b20736567413a2062657374412c20736567423a2062657374422c20646973743a206265737453636f7265207d3b0a7d0a0a66756e6374696f6e20646973742878312c2079312c2078322c20793229207b0a20202020636f6e7374206478203d207831202d2078323b0a20202020636f6e7374206479203d207931202d2079323b0a2020202072657475726e204d6174682e737172742864782a6478202b2064792a6479293b0a7d0a0a66756e6374696f6e20676574506c6174666f726d556e64657228656e7469747929207b0a20202020636f6e7374206665657459203d20656e746974792e79202b20656e746974792e686569676874202f20323b0a0a202020206c65742062657374536567203d206e756c6c3b0a202020206c65742062657374506c6174203d206e756c6c3b0a202020206c6574206265737444656c7461203d20496e66696e6974793b0a0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a0909096966287365672e697357616c6c29636f6e74696e75653b0a202020202020202020202020636f6e7374206c65667420203d204d6174682e6d696e287365672e78312c207365672e7832293b0a202020202020202020202020636f6e7374207269676874203d204d6174682e6d6178287365672e78312c207365672e7832293b0a0a20202020202020202020202069662028656e746974792e78203c206c656674207c7c20656e746974792e78203e2072696768742920636f6e74696e75653b0a0a202020202020202020202020636f6e73742074203d2028656e746974792e78202d207365672e783129202f20287365672e7832202d207365672e7831293b0a202020202020202020202020636f6e737420706c617459203d207365672e7931202b20287365672e7932202d207365672e793129202a20743b0a0a202020202020202020202020636f6e73742064656c7461203d20706c617459202d2066656574593b0a0a2020202020202020202020206966202864656c7461203c202d342920636f6e74696e75653b0a2020202020202020202020206966202864656c7461203e2034302920636f6e74696e75653b0a0a2020202020202020202020206966202864656c7461203c206265737444656c746129207b0a202020202020202020202020202020206265737444656c7461203d2064656c74613b0a2020202020202020202020202020202062657374536567203d207365673b0a2020202020202020202020202020202062657374506c6174203d20706c61743b0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e207b207365676d656e743a20626573745365672c20706c6174666f726d3a2062657374506c6174207d3b0a7d0a66756e6374696f6e206765745365676d656e744f76657243757272656e742863757272656e7453656729207b0a0a20202020636f6e7374206375724c65667420203d204d6174682e6d696e2863757272656e745365672e78312c2063757272656e745365672e7832293b0a20202020636f6e7374206375725269676874203d204d6174682e6d61782863757272656e745365672e78312c2063757272656e745365672e7832293b0a20202020636f6e737420637572546f702020203d204d6174682e6d696e2863757272656e745365672e79312c2063757272656e745365672e7932293b0a0a202020206c65742063616e64696461746573203d205b5d3b0a0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a0a20202020202020202020202069662028736567203d3d3d2063757272656e74536567207c7c207365672e697357616c6c202920636f6e74696e75653b0a0a202020202020202020202020636f6e737420736567546f70203d204d6174682e6d696e287365672e79312c207365672e7932293b0a0a2020202020202020202020202f2f206d7573742062652061626f76650a20202020202020202020202069662028736567546f70203e3d20637572546f702920636f6e74696e75653b0a0a2020202020202020202020202f2f206d757374206f7665726c617020686f72697a6f6e74616c6c790a202020202020202020202020636f6e7374206c65667420203d204d6174682e6d696e287365672e78312c207365672e7832293b0a202020202020202020202020636f6e7374207269676874203d204d6174682e6d6178287365672e78312c207365672e7832293b0a0a202020202020202020202020696620287269676874203c206375724c656674207c7c206c656674203e2063757252696768742920636f6e74696e75653b0a0a20202020202020202020202063616e646964617465732e7075736828736567293b0a20202020202020207d0a202020207d0a0a202020206966202863616e646964617465732e6c656e677468203d3d3d2030292072657475726e206e756c6c3b0a0a202020202f2f207069636b206c6f7765737420706c6174666f726d2061626f76650a2020202063616e646964617465732e736f72742828612c206229203d3e207b0a202020202020202072657475726e204d6174682e6d696e28622e79312c20622e793229202d204d6174682e6d696e28612e79312c20612e7932293b0a202020207d293b0a2020202072657475726e2063616e646964617465735b305d3b0a7d0a0a66756e6374696f6e206765745365676d656e744f766572506c6174666f726d28656e656d79506c6174666f726d29207b0a0a20202020636f6e737420706c61744c65667420203d20656e656d79506c6174666f726d2e6d696e583b0a20202020636f6e737420706c61745269676874203d20656e656d79506c6174666f726d2e6d6178583b0a20202020636f6e737420706c6174546f702020203d20656e656d79506c6174666f726d2e6d696e593b0a0a202020206c65742063616e64696461746573203d205b5d3b0a0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a2020202020202020202020202f2f20536b6970207365676d656e74732062656c6f6e67696e6720746f207468652073616d6520706c6174666f726d0a20202020202020202020202069662028706c6174203d3d3d20656e656d79506c6174666f726d207c7c207365672e697357616c6c202920636f6e74696e75653b0a0a202020202020202020202020636f6e737420736567546f70203d204d6174682e6d696e287365672e79312c207365672e7932293b0a0a2020202020202020202020202f2f204d7573742062652061626f76652074686520706c6174666f726d0a20202020202020202020202069662028736567546f70203e3d20706c6174546f702920636f6e74696e75653b0a0a2020202020202020202020202f2f20486f72697a6f6e74616c206f7665726c617020776974682074686520454e5449524520706c6174666f726d0a202020202020202020202020636f6e7374206c65667420203d204d6174682e6d696e287365672e78312c207365672e7832293b0a202020202020202020202020636f6e7374207269676874203d204d6174682e6d6178287365672e78312c207365672e7832293b0a0a202020202020202020202020696620287269676874203c20706c61744c656674207c7c206c656674203e20706c617452696768742920636f6e74696e75653b0a0a20202020202020202020202063616e646964617465732e7075736828736567293b0a20202020202020207d0a202020207d0a0a202020206966202863616e646964617465732e6c656e677468203d3d3d2030292072657475726e206e756c6c3b0a202020202f2f205069636b20746865204c4f57455354207365676d656e742061626f76652074686520706c6174666f726d0a2020202063616e646964617465732e736f72742828612c206229203d3e207b0a2020202020202020636f6e73742061546f70203d204d6174682e6d696e28612e79312c20612e7932293b0a2020202020202020636f6e73742062546f70203d204d6174682e6d696e28622e79312c20622e7932293b0a202020202020202072657475726e2062546f70202d2061546f703b202f2f2072657665727365643a206c6f776573742041424f56450a202020207d293b0a0a2020202072657475726e2063616e646964617465735b305d3b0a7d0a2f2f666f7220646561746820616e696d6174696f6e0a66756e6374696f6e206765745365676d656e74416e676c652873656729207b0a2020202072657475726e204d6174682e6174616e32287365672e7932202d207365672e79312c207365672e7832202d207365672e7831293b0a7d0a0a0a2a2f
dURL 616968656c706572732e6a73
descrHdr 41492068656c706572732066696c65
dislikes 0
docType 54454c412d4a532d31
docVersion 312e302e30
fileCheckC 32366535383234366636636130396439323138316137333337393232303539396539613563343662643561346264653565613062383335666662306233316434
fileCheckS 32363532376534333065656437333438383536303862333730653162393163376665653263613536343431396233353263653863323730393164363865656661
hash 39303032323762373563363662396661383539646438383835343561343333663137633236366661333435323961633662666465333962356363383235326438
iconURLHdr
likes 0
nameHdr 616968656c706572732e6a73
owner 6465726f317179347966376335373777717a767a7134347833306c7967686135776a7a377772687736646e76356e337071346634643761716c75717133306d37616b
subDir
SCID uint64 variables
key value
built BLID : 0820727ffb43270d74d0fca156675971d7ea2ef472b9faeb30c5bdd69c1c74e5
Tx RootHash: a2b22da15a59922c66941b8a9db555ca6abedddb63ae58368dce62d8f51cbbc1 built height : 7241617
Timestamp: 1782424301204 Timestamp [UTC]: 2026-06-25 23:51:41 Age [y:d:h:m:s]: 2:39:10.643
Block: 7241618 Fee: 0.25759 Tx size: 18.363 kB
Tx version: 1 No of confirmations: 515 Signature type: DERO_HOMOMORPHIC
Extra:
DERO : 2 inputs/outputs (RING size) Fees 0.25759 Deposited to SC 0.00000
Sender : dero1qy4yf7c577wqzvzq44x30lygha5wjz7wrhw6dnv5n3pq4f4d7aqluqq30m7ak
address
dero1qykyta6ntpd27nl0yq4xtzaf4ls6p5e9pqu0k2x4x3pqq5xavjsdxqgny8270
dero1qy4yf7c577wqzvzq44x30lygha5wjz7wrhw6dnv5n3pq4f4d7aqluqq30m7ak
SC Balance: 0.00000 DERO
SC CODE:
  //  Copyright 2024. Civilware. All rights reserved.
//  TELA Decentralized Web Document (TELA-DOC-1)
Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("nameHdr", "aihelpers.js")
31 STORE("descrHdr", "AI helpers file")
32 STORE("iconURLHdr", "")
33 STORE("dURL", "aihelpers.js")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "")
36 STORE("fileCheckC", "26e58246f6ca09d92181a73379220599e9a5c46bd5a4bde5ea0b835ffb0b31d4")
37 STORE("fileCheckS", "26527e430eed734885608b370e1b91c7fee2ca564419b352ce8c27091d68eefa")
100 RETURN 0
End Function

Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function

Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function

Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function

/*
function isUnderOrFacingSegment(enemy, target) {
	const left = Math.min(target.x1, target.x2);
	const right = Math.max(target.x1, target.x2);
	if(enemy.x < left && enemy.facing ===1){
		return true;
	}else if(enemy.x > right && enemy.facing ===-1){
		return true;
	}else if(enemy.x >= left && enemy.x <= right){
		return true;
	}
    return false;
}

function isSegmentBelowSegment(segA, segB, threshold = 0) {

    // 1. Horizontal overlap check
    const leftA  = Math.min(segA.x1, segA.x2);
    const rightA = Math.max(segA.x1, segA.x2);

    const leftB  = Math.min(segB.x1, segB.x2);
    const rightB = Math.max(segB.x1, segB.x2);

    const overlap = !(rightA < leftB - 1 || leftA > rightB + 1);
    if (!overlap) return false;

    // 2. Compute average heights (handles slopes)
    const avgA = (segA.y1 + segA.y2) * 0.5;
    const avgB = (segB.y1 + segB.y2) * 0.5;

    // 3. A is below B if its average y is greater (screen coords)
    return avgA > avgB + threshold;
}



function getPlatformById(id) {
    for (const plat of game.platforms) {
		if(plat.id === id)return plat;
	}	
}		


function resetAttacks(enemy){
	enemy.wantKick = false;
	enemy.wantPunch = false;
	
}
function playerIsThreatening(player) {
	return player.wantKick ||
		player.wantPunch ||
		player.anim.state === "kick" ||
		player.anim.state === "highKick" ||
		player.anim.state === "punch";
}

function countEnemiesBehind(enemy) {
    let count = 0;

    for (const e of game.enemies) {
        if (e === enemy) continue;
        if (e.dead) continue;

        // Same platform only
        if (e.onPlatform !== enemy.onPlatform) continue;

        // Must be behind relative to facing
        if (enemy.facing === 1 && e.x < enemy.x) count++;
        if (enemy.facing === -1 && e.x > enemy.x) count++;
    }

    return count;
}
function countEnemiesAhead(enemy) {
    let count = 0;

    for (const e of game.enemies) {
        if (e === enemy) continue;
        if (e.dead) continue;

        // Same platform only
        if (e.onPlatform !== enemy.onPlatform) continue;

        // Must be behind relative to facing
        if (enemy.facing === 1 && e.x > enemy.x) count++;
        if (enemy.facing === -1 && e.x < enemy.x) count++;
    }

    return count;
}


function keepEnemySpacing(enemy) {
    const spacing = 50; // how much space they want
    for (const e of game.enemies) {
        if (e === enemy || e.dead || e.inAir) continue;

        // Same platform only
        if (e.onPlatform !== enemy.onPlatform) continue;

        // Check if e is in front of enemy
        const dx = e.x - enemy.x;

        if (enemy.facing === 1 && dx > 0 && dx < spacing) {        
            return true;
        }

        if (enemy.facing === -1 && dx < 0 && -dx < spacing) {        
            return true;
        }
    }
    return false;
}



function avoidWalls(enemy){
	if(directionBlocked(enemy) && !enemy.inAir){
		enemy.facing = -enemy.facing;
		enemy.moveInput = enemy.facing
		if(directionBlocked(enemy)){
			enemy.moveInput = 0;
		}
	}
}
function avoidWallsOnSamePlatform(enemy, wallSeg){

	if(directionBlocked(enemy) && !enemy.inAir && enemy.onPlatform === enemy.blockedP && !aiCanJumpOver(enemy, wallSeg)){
		enemy.facing = -enemy.facing;
		enemy.moveInput = enemy.facing
		if(directionBlocked(enemy)){
			enemy.moveInput = 0;
		}
	}
}


function directionBlocked(enemy){
	if(enemy.facing === 1 && enemy.blockedRight) return true;
	if(enemy.facing === -1 && enemy.blockedLeft) return true;
	return false
}
function detectWallAhead(enemy) {


    for (let plat of game.platforms) {
        for (let seg of plat.segments) {
				const direction = aiCheckWallAhead(enemy, seg)
            if (direction) {
				if(direction === "right"){
					enemy.blockedP = plat.id;
					enemy.blockedRight = true;
					enemy.blockedLeft = false;
					return seg
				}else{
					enemy.blockedP = plat.id;
					enemy.blockedLeft = true;
					enemy.blockedRight = false;
					return seg
				}
            }
        }
    }

    return null;
}

function aiCanJumpOver(ai, seg) {
	if(!seg)return true;
    const wallHeight = seg.maxY - seg.minY;
    return wallHeight <= 100;
}


function aiCheckWallAhead(ai, seg, lookAheadMax = 40) {

    if (!seg.isWall) return false;


    const top = ai.y + ai.height * .25;
    const bottom = ai.y + ai.height * 0.5;

    // vertical overlap
    if (bottom -1 <= seg.minY || top +1 >= seg.maxY) return false;
		
        const dist = seg.x1 - ai.x
        if (Math.abs(dist) <= lookAheadMax && dist > 0) {			
            return  "right" ;
        }else if (Math.abs(dist) <= lookAheadMax && dist < 0){			
			return  "left" ;
		}

    return false;
}


function isNearPlatformEdge(enemy, plat, threshold = 20) {
    const left  = plat.minX;
    const right = plat.maxX;

	 
    const nearLeft  = enemy.x < left + threshold;
    const nearRight = enemy.x > right - threshold;

    // Only count as an edge if there's no connected segment
    if (nearLeft) return true;
    if (nearRight) return true;

    return false;
}


function isNearEdgeFacing(enemy, platform, threshold = 20) {
    const left  = platform.minX;
    const right = platform.maxX;

    if (enemy.facing < 0) {
        // Facing left
        return enemy.x <= left + threshold;
    } else {
        // Facing right
        return enemy.x >= right - threshold;
    }
}


function isFacingSegment(enemy, segment){

	if (enemy.facing < 0) {
        // Facing left
        return enemy.x > segment.midX;
    } else {
        // Facing right
        return enemy.x < segment.midX;
    }
}

function isPlayerBelowPlatform(plat, threshold = 20) {
    const px = game.player.x;
    const py = game.player.y;

    for (const seg of plat.segments) {

        // Optional: only treat floor-type segments as platform surface
        if (seg.isWall)
            continue;

        const x1 = seg.x1;
        const x2 = seg.x2;
        const y1 = seg.y1;
        const y2 = seg.y2;

        // Skip vertical / near-vertical segments (walls)
        const dx = x2 - x1;
        if (Math.abs(dx) < 0.0001)
            continue;

        const left  = Math.min(x1, x2);
        const right = Math.max(x1, x2);

        // Player must be horizontally under this segment (with small margin)
        if (px < left - threshold || px > right + threshold)
            continue;

        // Interpolate the platform height at px
        let t = (px - x1) / dx;

        // Clamp t so we don't extend beyond the segment
        if (t < 0 || t > 1)
            continue;

        const y_at_px = y1 + t * (y2 - y1);

        // Player must be below the surface
        if (py > y_at_px + 10)
            return true;
    }

    return false;
}



function isSafeToDrop(enemy) {
    const feetX = enemy.x;
    const feetY = enemy.y + enemy.height / 2;

    const segBelow = getPlatformBelowPoint(feetX, feetY);

    return segBelow !== null;
}

function getPlatformBelowPoint(x, y) {
    let best = null;
    let bestY = Infinity;

    for (const plat of game.platforms) {
        for (const seg of plat.segments) {
			if(seg.isWall)continue;
            // Skip segments above or at the same height
            const segTop = Math.min(seg.y1, seg.y2);
            if (segTop <= y) continue;

            // Check if x is within segment horizontal span
            const left  = Math.min(seg.x1, seg.x2);
            const right = Math.max(seg.x1, seg.x2);
            if (x < left || x > right) continue;

            // Interpolate the Y at this X
            const t = (x - seg.x1) / (seg.x2 - seg.x1);
            const iy = seg.y1 + t * (seg.y2 - seg.y1);

            // Must be below the point
            if (iy <= y) continue;

            // Keep the closest one
            if (iy < bestY) {
                bestY = iy;
                best = seg;
            }
        }
    }

    return best;
}

function canJumpToSegment(enemy, from, to) {
    const gravity = game.gravity;
    const jump = game.jumpStrength;

    const maxJumpHeight = (jump * jump) / (2 * gravity);

    const fromTop = Math.min(from.y1, from.y2);
    const toTop   = Math.min(to.y1, to.y2);

    const verticalDiff = toTop - fromTop; // negative = above

    // too high
    if (verticalDiff < -maxJumpHeight) return false;

    // too far down
    if (verticalDiff > 150) return false;

    // landing zone on the target segment
    const left  = Math.min(to.x1, to.x2);
    const right = Math.max(to.x1, to.x2);

    // clamp landingX to the segment
    const landingX = Math.max(left, Math.min(enemy.x, right));

    const horizontalGap = Math.abs(landingX - enemy.x);

    // airtime
    const timeUp = jump / gravity;
    const timeDown = Math.sqrt((2 * (maxJumpHeight + verticalDiff)) / gravity);
    const totalAirTime = timeUp + timeDown;

    const maxHorizontalReach = enemy.speed * totalAirTime;

    return horizontalGap <= maxHorizontalReach;
}

function canSegmentReachSegment(fromSeg, toSeg, jump, gravity, speed) {

    const fromTop = Math.min(fromSeg.y1, fromSeg.y2);
    const toTop   = Math.min(toSeg.y1, toSeg.y2);

    const verticalDiff = toTop - fromTop; // negative = above

    const maxJumpHeight = (jump * jump) / (2 * gravity);

    // Too high
    if (verticalDiff < -maxJumpHeight)
        return false;

    // Too far down (optional)
    if (verticalDiff > 150)
        return false;

    // Horizontal ranges
    const fromLeft  = Math.min(fromSeg.x1, fromSeg.x2);
    const fromRight = Math.max(fromSeg.x1, fromSeg.x2);

    const toLeft  = Math.min(toSeg.x1, toSeg.x2);
    const toRight = Math.max(toSeg.x1, toSeg.x2);

    // Compute max horizontal reach
    const timeUp = jump / gravity;
    const timeDown = Math.sqrt((2 * (maxJumpHeight + verticalDiff)) / gravity);
    const totalAirTime = timeUp + timeDown;

    const maxReach = speed * totalAirTime;

    // Check if ANY point on fromSeg can reach ANY point on toSeg
    // This is interval overlap expanded by maxReach
    const expandedFromLeft  = fromLeft  - maxReach;
    const expandedFromRight = fromRight + maxReach;

    const overlap =
        expandedFromRight >= toLeft &&
        expandedFromLeft  <= toRight;

    return overlap;
}

function findBestJumpSegment(enemy, enemyPlat, playerPlat) {

    const jump = game.jumpStrength;
    const gravity = game.gravity;
    const speed = enemy.speed;

    for (const pseg of playerPlat.segments) {
		if ( pseg.isWall) continue;
        for (const eseg of enemyPlat.segments) {
			if ( eseg.isWall) continue;
            if (canSegmentReachSegment(eseg, pseg, jump, gravity, speed)) {
                return pseg; 
            }
        }
    }

    return null;
}

function findClosestSegmentsBetween(platformA, platformB) {
    let bestA = null;
    let bestB = null;
    let bestDist = Infinity;

    for (const segA of platformA.segments) {
		if(segA.isWall)continue;
        for (const segB of platformB.segments) {
			if(segB.isWall)continue;
			
            // Compare endpoints of A to endpoints of B
            const d1 = dist(segA.x1, segA.y1, segB.x1, segB.y1);
            const d2 = dist(segA.x1, segA.y1, segB.x2, segB.y2);
            const d3 = dist(segA.x2, segA.y2, segB.x1, segB.y1);
            const d4 = dist(segA.x2, segA.y2, segB.x2, segB.y2);

            const localMin = Math.min(d1, d2, d3, d4);

            if (localMin < bestDist) {
                bestDist = localMin;
                bestA = segA;
                bestB = segB;
            }
        }
    }

    return { segA: bestA, segB: bestB, dist: bestDist };
}

function findClosestSegmentsBetweenMidPoints(platformA, platformB) {
    let bestA = null;
    let bestB = null;
    let bestScore = Infinity;

    for (const segA of platformA.segments) {
		if(segA.isWall)continue;
        for (const segB of platformB.segments) {
			if(segB.isWall)continue;

            // Midpoint distance
            const mxA = (segA.x1 + segA.x2) * 0.5;
            const myA = (segA.y1 + segA.y2) * 0.5;
            const mxB = (segB.x1 + segB.x2) * 0.5;
            const myB = (segB.y1 + segB.y2) * 0.5;

            const midDist = dist(mxA, myA, mxB, myB);

            // Combined score (midpoint weighted slightly more)
            const score = midDist;

            if (score < bestScore) {
                bestScore = score;
                bestA = segA;
                bestB = segB;
            }
        }
    }

    return { segA: bestA, segB: bestB, dist: bestScore };
}

function dist(x1, y1, x2, y2) {
    const dx = x1 - x2;
    const dy = y1 - y2;
    return Math.sqrt(dx*dx + dy*dy);
}

function getPlatformUnder(entity) {
    const feetY = entity.y + entity.height / 2;

    let bestSeg = null;
    let bestPlat = null;
    let bestDelta = Infinity;

    for (const plat of game.platforms) {
        for (const seg of plat.segments) {
			if(seg.isWall)continue;
            const left  = Math.min(seg.x1, seg.x2);
            const right = Math.max(seg.x1, seg.x2);

            if (entity.x < left || entity.x > right) continue;

            const t = (entity.x - seg.x1) / (seg.x2 - seg.x1);
            const platY = seg.y1 + (seg.y2 - seg.y1) * t;

            const delta = platY - feetY;

            if (delta < -4) continue;
            if (delta > 40) continue;

            if (delta < bestDelta) {
                bestDelta = delta;
                bestSeg = seg;
                bestPlat = plat;
            }
        }
    }

    return { segment: bestSeg, platform: bestPlat };
}
function getSegmentOverCurrent(currentSeg) {

    const curLeft  = Math.min(currentSeg.x1, currentSeg.x2);
    const curRight = Math.max(currentSeg.x1, currentSeg.x2);
    const curTop   = Math.min(currentSeg.y1, currentSeg.y2);

    let candidates = [];

    for (const plat of game.platforms) {
        for (const seg of plat.segments) {

            if (seg === currentSeg || seg.isWall ) continue;

            const segTop = Math.min(seg.y1, seg.y2);

            // must be above
            if (segTop >= curTop) continue;

            // must overlap horizontally
            const left  = Math.min(seg.x1, seg.x2);
            const right = Math.max(seg.x1, seg.x2);

            if (right < curLeft || left > curRight) continue;

            candidates.push(seg);
        }
    }

    if (candidates.length === 0) return null;

    // pick lowest platform above
    candidates.sort((a, b) => {
        return Math.min(b.y1, b.y2) - Math.min(a.y1, a.y2);
    });
    return candidates[0];
}

function getSegmentOverPlatform(enemyPlatform) {

    const platLeft  = enemyPlatform.minX;
    const platRight = enemyPlatform.maxX;
    const platTop   = enemyPlatform.minY;

    let candidates = [];

    for (const plat of game.platforms) {
        for (const seg of plat.segments) {
            // Skip segments belonging to the same platform
            if (plat === enemyPlatform || seg.isWall ) continue;

            const segTop = Math.min(seg.y1, seg.y2);

            // Must be above the platform
            if (segTop >= platTop) continue;

            // Horizontal overlap with the ENTIRE platform
            const left  = Math.min(seg.x1, seg.x2);
            const right = Math.max(seg.x1, seg.x2);

            if (right < platLeft || left > platRight) continue;

            candidates.push(seg);
        }
    }

    if (candidates.length === 0) return null;
    // Pick the LOWEST segment above the platform
    candidates.sort((a, b) => {
        const aTop = Math.min(a.y1, a.y2);
        const bTop = Math.min(b.y1, b.y2);
        return bTop - aTop; // reversed: lowest ABOVE
    });

    return candidates[0];
}
//for death animation
function getSegmentAngle(seg) {
    return Math.atan2(seg.y2 - seg.y1, seg.x2 - seg.x1);
}


*/
SC Arguments: [Name:SC_ACTION Type:uint64 Value:'1' Name:SC_CODE Type:string Value:'// Copyright 2024. Civilware. All rights reserved. // TELA Decentralized Web Document (TELA-DOC-1) Function InitializePrivate() Uint64 10 IF init() == 0 THEN GOTO 30 20 RETURN 1 30 STORE("nameHdr", "aihelpers.js") 31 STORE("descrHdr", "AI helpers file") 32 STORE("iconURLHdr", "") 33 STORE("dURL", "aihelpers.js") 34 STORE("docType", "TELA-JS-1") 35 STORE("subDir", "") 36 STORE("fileCheckC", "26e58246f6ca09d92181a73379220599e9a5c46bd5a4bde5ea0b835ffb0b31d4") 37 STORE("fileCheckS", "26527e430eed734885608b370e1b91c7fee2ca564419b352ce8c27091d68eefa") 100 RETURN 0 End Function Function init() Uint64 10 IF EXISTS("owner") == 0 THEN GOTO 30 20 RETURN 1 30 STORE("owner", address()) 50 STORE("docVersion", "1.0.0") 60 STORE("hash", HEX(TXID())) 70 STORE("likes", 0) 80 STORE("dislikes", 0) 100 RETURN 0 End Function Function address() String 10 DIM s as String 20 LET s = SIGNER() 30 IF IS_ADDRESS_VALID(s) THEN GOTO 50 40 RETURN "anon" 50 RETURN ADDRESS_STRING(s) End Function Function Rate(r Uint64) Uint64 10 DIM addr as String 15 LET addr = address() 16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30 20 RETURN 1 30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT()) 40 IF r < 50 THEN GOTO 70 50 STORE("likes", LOAD("likes")+1) 60 RETURN 0 70 STORE("dislikes", LOAD("dislikes")+1) 100 RETURN 0 End Function /* function isUnderOrFacingSegment(enemy, target) { const left = Math.min(target.x1, target.x2); const right = Math.max(target.x1, target.x2); if(enemy.x < left && enemy.facing ===1){ return true; }else if(enemy.x > right && enemy.facing ===-1){ return true; }else if(enemy.x >= left && enemy.x <= right){ return true; } return false; } function isSegmentBelowSegment(segA, segB, threshold = 0) { // 1. Horizontal overlap check const leftA = Math.min(segA.x1, segA.x2); const rightA = Math.max(segA.x1, segA.x2); const leftB = Math.min(segB.x1, segB.x2); const rightB = Math.max(segB.x1, segB.x2); const overlap = !(rightA < leftB - 1 || leftA > rightB + 1); if (!overlap) return false; // 2. Compute average heights (handles slopes) const avgA = (segA.y1 + segA.y2) * 0.5; const avgB = (segB.y1 + segB.y2) * 0.5; // 3. A is below B if its average y is greater (screen coords) return avgA > avgB + threshold; } function getPlatformById(id) { for (const plat of game.platforms) { if(plat.id === id)return plat; } } function resetAttacks(enemy){ enemy.wantKick = false; enemy.wantPunch = false; } function playerIsThreatening(player) { return player.wantKick || player.wantPunch || player.anim.state === "kick" || player.anim.state === "highKick" || player.anim.state === "punch"; } function countEnemiesBehind(enemy) { let count = 0; for (const e of game.enemies) { if (e === enemy) continue; if (e.dead) continue; // Same platform only if (e.onPlatform !== enemy.onPlatform) continue; // Must be behind relative to facing if (enemy.facing === 1 && e.x < enemy.x) count++; if (enemy.facing === -1 && e.x > enemy.x) count++; } return count; } function countEnemiesAhead(enemy) { let count = 0; for (const e of game.enemies) { if (e === enemy) continue; if (e.dead) continue; // Same platform only if (e.onPlatform !== enemy.onPlatform) continue; // Must be behind relative to facing if (enemy.facing === 1 && e.x > enemy.x) count++; if (enemy.facing === -1 && e.x < enemy.x) count++; } return count; } function keepEnemySpacing(enemy) { const spacing = 50; // how much space they want for (const e of game.enemies) { if (e === enemy || e.dead || e.inAir) continue; // Same platform only if (e.onPlatform !== enemy.onPlatform) continue; // Check if e is in front of enemy const dx = e.x - enemy.x; if (enemy.facing === 1 && dx > 0 && dx < spacing) { return true; } if (enemy.facing === -1 && dx < 0 && -dx < spacing) { return true; } } return false; } function avoidWalls(enemy){ if(directionBlocked(enemy) && !enemy.inAir){ enemy.facing = -enemy.facing; enemy.moveInput = enemy.facing if(directionBlocked(enemy)){ enemy.moveInput = 0; } } } function avoidWallsOnSamePlatform(enemy, wallSeg){ if(directionBlocked(enemy) && !enemy.inAir && enemy.onPlatform === enemy.blockedP && !aiCanJumpOver(enemy, wallSeg)){ enemy.facing = -enemy.facing; enemy.moveInput = enemy.facing if(directionBlocked(enemy)){ enemy.moveInput = 0; } } } function directionBlocked(enemy){ if(enemy.facing === 1 && enemy.blockedRight) return true; if(enemy.facing === -1 && enemy.blockedLeft) return true; return false } function detectWallAhead(enemy) { for (let plat of game.platforms) { for (let seg of plat.segments) { const direction = aiCheckWallAhead(enemy, seg) if (direction) { if(direction === "right"){ enemy.blockedP = plat.id; enemy.blockedRight = true; enemy.blockedLeft = false; return seg }else{ enemy.blockedP = plat.id; enemy.blockedLeft = true; enemy.blockedRight = false; return seg } } } } return null; } function aiCanJumpOver(ai, seg) { if(!seg)return true; const wallHeight = seg.maxY - seg.minY; return wallHeight <= 100; } function aiCheckWallAhead(ai, seg, lookAheadMax = 40) { if (!seg.isWall) return false; const top = ai.y + ai.height * .25; const bottom = ai.y + ai.height * 0.5; // vertical overlap if (bottom -1 <= seg.minY || top +1 >= seg.maxY) return false; const dist = seg.x1 - ai.x if (Math.abs(dist) <= lookAheadMax && dist > 0) { return "right" ; }else if (Math.abs(dist) <= lookAheadMax && dist < 0){ return "left" ; } return false; } function isNearPlatformEdge(enemy, plat, threshold = 20) { const left = plat.minX; const right = plat.maxX; const nearLeft = enemy.x < left + threshold; const nearRight = enemy.x > right - threshold; // Only count as an edge if there's no connected segment if (nearLeft) return true; if (nearRight) return true; return false; } function isNearEdgeFacing(enemy, platform, threshold = 20) { const left = platform.minX; const right = platform.maxX; if (enemy.facing < 0) { // Facing left return enemy.x <= left + threshold; } else { // Facing right return enemy.x >= right - threshold; } } function isFacingSegment(enemy, segment){ if (enemy.facing < 0) { // Facing left return enemy.x > segment.midX; } else { // Facing right return enemy.x < segment.midX; } } function isPlayerBelowPlatform(plat, threshold = 20) { const px = game.player.x; const py = game.player.y; for (const seg of plat.segments) { // Optional: only treat floor-type segments as platform surface if (seg.isWall) continue; const x1 = seg.x1; const x2 = seg.x2; const y1 = seg.y1; const y2 = seg.y2; // Skip vertical / near-vertical segments (walls) const dx = x2 - x1; if (Math.abs(dx) < 0.0001) continue; const left = Math.min(x1, x2); const right = Math.max(x1, x2); // Player must be horizontally under this segment (with small margin) if (px < left - threshold || px > right + threshold) continue; // Interpolate the platform height at px let t = (px - x1) / dx; // Clamp t so we don't extend beyond the segment if (t < 0 || t > 1) continue; const y_at_px = y1 + t * (y2 - y1); // Player must be below the surface if (py > y_at_px + 10) return true; } return false; } function isSafeToDrop(enemy) { const feetX = enemy.x; const feetY = enemy.y + enemy.height / 2; const segBelow = getPlatformBelowPoint(feetX, feetY); return segBelow !== null; } function getPlatformBelowPoint(x, y) { let best = null; let bestY = Infinity; for (const plat of game.platforms) { for (const seg of plat.segments) { if(seg.isWall)continue; // Skip segments above or at the same height const segTop = Math.min(seg.y1, seg.y2); if (segTop <= y) continue; // Check if x is within segment horizontal span const left = Math.min(seg.x1, seg.x2); const right = Math.max(seg.x1, seg.x2); if (x < left || x > right) continue; // Interpolate the Y at this X const t = (x - seg.x1) / (seg.x2 - seg.x1); const iy = seg.y1 + t * (seg.y2 - seg.y1); // Must be below the point if (iy <= y) continue; // Keep the closest one if (iy < bestY) { bestY = iy; best = seg; } } } return best; } function canJumpToSegment(enemy, from, to) { const gravity = game.gravity; const jump = game.jumpStrength; const maxJumpHeight = (jump * jump) / (2 * gravity); const fromTop = Math.min(from.y1, from.y2); const toTop = Math.min(to.y1, to.y2); const verticalDiff = toTop - fromTop; // negative = above // too high if (verticalDiff < -maxJumpHeight) return false; // too far down if (verticalDiff > 150) return false; // landing zone on the target segment const left = Math.min(to.x1, to.x2); const right = Math.max(to.x1, to.x2); // clamp landingX to the segment const landingX = Math.max(left, Math.min(enemy.x, right)); const horizontalGap = Math.abs(landingX - enemy.x); // airtime const timeUp = jump / gravity; const timeDown = Math.sqrt((2 * (maxJumpHeight + verticalDiff)) / gravity); const totalAirTime = timeUp + timeDown; const maxHorizontalReach = enemy.speed * totalAirTime; return horizontalGap <= maxHorizontalReach; } function canSegmentReachSegment(fromSeg, toSeg, jump, gravity, speed) { const fromTop = Math.min(fromSeg.y1, fromSeg.y2); const toTop = Math.min(toSeg.y1, toSeg.y2); const verticalDiff = toTop - fromTop; // negative = above const maxJumpHeight = (jump * jump) / (2 * gravity); // Too high if (verticalDiff < -maxJumpHeight) return false; // Too far down (optional) if (verticalDiff > 150) return false; // Horizontal ranges const fromLeft = Math.min(fromSeg.x1, fromSeg.x2); const fromRight = Math.max(fromSeg.x1, fromSeg.x2); const toLeft = Math.min(toSeg.x1, toSeg.x2); const toRight = Math.max(toSeg.x1, toSeg.x2); // Compute max horizontal reach const timeUp = jump / gravity; const timeDown = Math.sqrt((2 * (maxJumpHeight + verticalDiff)) / gravity); const totalAirTime = timeUp + timeDown; const maxReach = speed * totalAirTime; // Check if ANY point on fromSeg can reach ANY point on toSeg // This is interval overlap expanded by maxReach const expandedFromLeft = fromLeft - maxReach; const expandedFromRight = fromRight + maxReach; const overlap = expandedFromRight >= toLeft && expandedFromLeft <= toRight; return overlap; } function findBestJumpSegment(enemy, enemyPlat, playerPlat) { const jump = game.jumpStrength; const gravity = game.gravity; const speed = enemy.speed; for (const pseg of playerPlat.segments) { if ( pseg.isWall) continue; for (const eseg of enemyPlat.segments) { if ( eseg.isWall) continue; if (canSegmentReachSegment(eseg, pseg, jump, gravity, speed)) { return pseg; } } } return null; } function findClosestSegmentsBetween(platformA, platformB) { let bestA = null; let bestB = null; let bestDist = Infinity; for (const segA of platformA.segments) { if(segA.isWall)continue; for (const segB of platformB.segments) { if(segB.isWall)continue; // Compare endpoints of A to endpoints of B const d1 = dist(segA.x1, segA.y1, segB.x1, segB.y1); const d2 = dist(segA.x1, segA.y1, segB.x2, segB.y2); const d3 = dist(segA.x2, segA.y2, segB.x1, segB.y1); const d4 = dist(segA.x2, segA.y2, segB.x2, segB.y2); const localMin = Math.min(d1, d2, d3, d4); if (localMin < bestDist) { bestDist = localMin; bestA = segA; bestB = segB; } } } return { segA: bestA, segB: bestB, dist: bestDist }; } function findClosestSegmentsBetweenMidPoints(platformA, platformB) { let bestA = null; let bestB = null; let bestScore = Infinity; for (const segA of platformA.segments) { if(segA.isWall)continue; for (const segB of platformB.segments) { if(segB.isWall)continue; // Midpoint distance const mxA = (segA.x1 + segA.x2) * 0.5; const myA = (segA.y1 + segA.y2) * 0.5; const mxB = (segB.x1 + segB.x2) * 0.5; const myB = (segB.y1 + segB.y2) * 0.5; const midDist = dist(mxA, myA, mxB, myB); // Combined score (midpoint weighted slightly more) const score = midDist; if (score < bestScore) { bestScore = score; bestA = segA; bestB = segB; } } } return { segA: bestA, segB: bestB, dist: bestScore }; } function dist(x1, y1, x2, y2) { const dx = x1 - x2; const dy = y1 - y2; return Math.sqrt(dx*dx + dy*dy); } function getPlatformUnder(entity) { const feetY = entity.y + entity.height / 2; let bestSeg = null; let bestPlat = null; let bestDelta = Infinity; for (const plat of game.platforms) { for (const seg of plat.segments) { if(seg.isWall)continue; const left = Math.min(seg.x1, seg.x2); const right = Math.max(seg.x1, seg.x2); if (entity.x < left || entity.x > right) continue; const t = (entity.x - seg.x1) / (seg.x2 - seg.x1); const platY = seg.y1 + (seg.y2 - seg.y1) * t; const delta = platY - feetY; if (delta < -4) continue; if (delta > 40) continue; if (delta < bestDelta) { bestDelta = delta; bestSeg = seg; bestPlat = plat; } } } return { segment: bestSeg, platform: bestPlat }; } function getSegmentOverCurrent(currentSeg) { const curLeft = Math.min(currentSeg.x1, currentSeg.x2); const curRight = Math.max(currentSeg.x1, currentSeg.x2); const curTop = Math.min(currentSeg.y1, currentSeg.y2); let candidates = []; for (const plat of game.platforms) { for (const seg of plat.segments) { if (seg === currentSeg || seg.isWall ) continue; const segTop = Math.min(seg.y1, seg.y2); // must be above if (segTop >= curTop) continue; // must overlap horizontally const left = Math.min(seg.x1, seg.x2); const right = Math.max(seg.x1, seg.x2); if (right < curLeft || left > curRight) continue; candidates.push(seg); } } if (candidates.length === 0) return null; // pick lowest platform above candidates.sort((a, b) => { return Math.min(b.y1, b.y2) - Math.min(a.y1, a.y2); }); return candidates[0]; } function getSegmentOverPlatform(enemyPlatform) { const platLeft = enemyPlatform.minX; const platRight = enemyPlatform.maxX; const platTop = enemyPlatform.minY; let candidates = []; for (const plat of game.platforms) { for (const seg of plat.segments) { // Skip segments belonging to the same platform if (plat === enemyPlatform || seg.isWall ) continue; const segTop = Math.min(seg.y1, seg.y2); // Must be above the platform if (segTop >= platTop) continue; // Horizontal overlap with the ENTIRE platform const left = Math.min(seg.x1, seg.x2); const right = Math.max(seg.x1, seg.x2); if (right < platLeft || left > platRight) continue; candidates.push(seg); } } if (candidates.length === 0) return null; // Pick the LOWEST segment above the platform candidates.sort((a, b) => { const aTop = Math.min(a.y1, a.y2); const bTop = Math.min(b.y1, b.y2); return bTop - aTop; // reversed: lowest ABOVE }); return candidates[0]; } //for death animation function getSegmentAngle(seg) { return Math.atan2(seg.y2 - seg.y1, seg.x2 - seg.x1); } */']


Prove to someone that you have sent them DERO in this transaction

proof can be obtained using wallet command in dero-wallet-cli or from the statement
Note: proof is sent to the server, as the calculations are done on the server side


TX hex bytes
010000050091ffb9030820727ffb43270d74d0fca156675971d7ea2ef472b9faeb30c5bdd69c1c74e501000000000000000000000000000000000000000000000000000000000000000000010cc75e52adc798a8fc48032a001ce309ffe43f69921f8c52633c5410004ef7ce01495279786dd0cafce8ea6d7b44a30396df321283f019a9fa40700dc6fb4d5f43a1e9d45fedb5d2cf6d6d6b60a41770ed13b9037b21c5c55d14daa917dff3213a56504502abb646c1a85de6361ec7ec8767fe1a6898841b3f73e4b2e29c36b43d285cb413791c45c41e7cf2239597c83701059fc9010548b6e35ceb88cfec9d4fe3376049ed399e87e281fc8f8d650dccfb0cc2d1ab01635d6e4e240652cc4b752279f868c156286ac0b07a99b8b5045c8b51eb5d76c46d6d926ad4816a9217a6002d97c2e8fd1c516942189b0ff5823d9d04c8c13bf3f741c9b113b14e476dc6c100a2b22da15a59922c66941b8a9db555ca6abedddb63ae58368dce62d8f51cbbc1c58501a26853435f434f4445537942ac2f2f2020436f7079726967687420323032342e20436976696c776172652e20416c6c207269676874732072657365727665642e0a2f2f202054454c4120446563656e7472616c697a65642057656220446f63756d656e74202854454c412d444f432d31290a46756e6374696f6e20496e697469616c697a655072697661746528292055696e7436340a313020494620696e69742829203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226e616d65486472222c2022616968656c706572732e6a7322290a33312053544f524528226465736372486472222c202241492068656c706572732066696c6522290a33322053544f5245282269636f6e55524c486472222c202222290a33332053544f524528226455524c222c2022616968656c706572732e6a7322290a33342053544f52452822646f6354797065222c202254454c412d4a532d3122290a33352053544f52452822737562446972222c202222290a33362053544f5245282266696c65436865636b43222c20223236653538323436663663613039643932313831613733333739323230353939653961356334366264356134626465356561306238333566666230623331643422290a33372053544f5245282266696c65436865636b53222c20223236353237653433306565643733343838353630386233373065316239316337666565326361353634343139623335326365386332373039316436386565666122290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e20696e697428292055696e7436340a31302049462045584953545328226f776e65722229203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226f776e6572222c20616464726573732829290a35302053544f52452822646f6356657273696f6e222c2022312e302e3022290a36302053544f5245282268617368222c204845582854584944282929290a37302053544f524528226c696b6573222c2030290a38302053544f524528226469736c696b6573222c2030290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e2061646472657373282920537472696e670a31302044494d207320617320537472696e670a3230204c45542073203d205349474e455228290a33302049462049535f414444524553535f56414c4944287329205448454e20474f544f2035300a34302052455455524e2022616e6f6e220a35302052455455524e20414444524553535f535452494e472873290a456e642046756e6374696f6e0a0a46756e6374696f6e205261746528722055696e743634292055696e7436340a31302044494d206164647220617320537472696e670a3135204c45542061646472203d206164647265737328290a31362049462072203c2031303020262620455849535453286164647229203d3d2030202626206164647220213d2022616e6f6e22205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528616464722c2022222b722b225f222b424c4f434b5f4845494748542829290a34302049462072203c203530205448454e20474f544f2037300a35302053544f524528226c696b6573222c204c4f414428226c696b657322292b31290a36302052455455524e20300a37302053544f524528226469736c696b6573222c204c4f414428226469736c696b657322292b31290a3130302052455455524e20300a456e642046756e6374696f6e0a0a2f2a0a66756e6374696f6e206973556e6465724f72466163696e675365676d656e7428656e656d792c2074617267657429207b0a09636f6e7374206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a09636f6e7374207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a09696628656e656d792e78203c206c65667420262620656e656d792e666163696e67203d3d3d31297b0a090972657475726e20747275653b0a097d656c736520696628656e656d792e78203e20726967687420262620656e656d792e666163696e67203d3d3d2d31297b0a090972657475726e20747275653b0a097d656c736520696628656e656d792e78203e3d206c65667420262620656e656d792e78203c3d207269676874297b0a090972657475726e20747275653b0a097d0a2020202072657475726e2066616c73653b0a7d0a0a66756e6374696f6e2069735365676d656e7442656c6f775365676d656e7428736567412c20736567422c207468726573686f6c64203d203029207b0a0a202020202f2f20312e20486f72697a6f6e74616c206f7665726c617020636865636b0a20202020636f6e7374206c6566744120203d204d6174682e6d696e28736567412e78312c20736567412e7832293b0a20202020636f6e737420726967687441203d204d6174682e6d617828736567412e78312c20736567412e7832293b0a0a20202020636f6e7374206c6566744220203d204d6174682e6d696e28736567422e78312c20736567422e7832293b0a20202020636f6e737420726967687442203d204d6174682e6d617828736567422e78312c20736567422e7832293b0a0a20202020636f6e7374206f7665726c6170203d202128726967687441203c206c65667442202d2031207c7c206c65667441203e20726967687442202b2031293b0a2020202069662028216f7665726c6170292072657475726e2066616c73653b0a0a202020202f2f20322e20436f6d7075746520617665726167652068656967687473202868616e646c657320736c6f706573290a20202020636f6e73742061766741203d2028736567412e7931202b20736567412e793229202a20302e353b0a20202020636f6e73742061766742203d2028736567422e7931202b20736567422e793229202a20302e353b0a0a202020202f2f20332e20412069732062656c6f77204220696620697473206176657261676520792069732067726561746572202873637265656e20636f6f726473290a2020202072657475726e2061766741203e2061766742202b207468726573686f6c643b0a7d0a0a0a0a66756e6374696f6e20676574506c6174666f726d4279496428696429207b0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a0909696628706c61742e6964203d3d3d2069642972657475726e20706c61743b0a097d090a7d09090a0a0a66756e6374696f6e20726573657441747461636b7328656e656d79297b0a09656e656d792e77616e744b69636b203d2066616c73653b0a09656e656d792e77616e7450756e6368203d2066616c73653b0a090a7d0a66756e6374696f6e20706c617965724973546872656174656e696e6728706c6179657229207b0a0972657475726e20706c617965722e77616e744b69636b207c7c0a0909706c617965722e77616e7450756e6368207c7c0a0909706c617965722e616e696d2e7374617465203d3d3d20226b69636b22207c7c0a0909706c617965722e616e696d2e7374617465203d3d3d2022686967684b69636b22207c7c0a0909706c617965722e616e696d2e7374617465203d3d3d202270756e6368223b0a7d0a0a66756e6374696f6e20636f756e74456e656d696573426568696e6428656e656d7929207b0a202020206c657420636f756e74203d20303b0a0a20202020666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a20202020202020206966202865203d3d3d20656e656d792920636f6e74696e75653b0a202020202020202069662028652e646561642920636f6e74696e75653b0a0a20202020202020202f2f2053616d6520706c6174666f726d206f6e6c790a202020202020202069662028652e6f6e506c6174666f726d20213d3d20656e656d792e6f6e506c6174666f726d2920636f6e74696e75653b0a0a20202020202020202f2f204d75737420626520626568696e642072656c617469766520746f20666163696e670a202020202020202069662028656e656d792e666163696e67203d3d3d203120262620652e78203c20656e656d792e782920636f756e742b2b3b0a202020202020202069662028656e656d792e666163696e67203d3d3d202d3120262620652e78203e20656e656d792e782920636f756e742b2b3b0a202020207d0a0a2020202072657475726e20636f756e743b0a7d0a66756e6374696f6e20636f756e74456e656d696573416865616428656e656d7929207b0a202020206c657420636f756e74203d20303b0a0a20202020666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a20202020202020206966202865203d3d3d20656e656d792920636f6e74696e75653b0a202020202020202069662028652e646561642920636f6e74696e75653b0a0a20202020202020202f2f2053616d6520706c6174666f726d206f6e6c790a202020202020202069662028652e6f6e506c6174666f726d20213d3d20656e656d792e6f6e506c6174666f726d2920636f6e74696e75653b0a0a20202020202020202f2f204d75737420626520626568696e642072656c617469766520746f20666163696e670a202020202020202069662028656e656d792e666163696e67203d3d3d203120262620652e78203e20656e656d792e782920636f756e742b2b3b0a202020202020202069662028656e656d792e666163696e67203d3d3d202d3120262620652e78203c20656e656d792e782920636f756e742b2b3b0a202020207d0a0a2020202072657475726e20636f756e743b0a7d0a0a0a66756e6374696f6e206b656570456e656d7953706163696e6728656e656d7929207b0a20202020636f6e73742073706163696e67203d2035303b202f2f20686f77206d75636820737061636520746865792077616e740a20202020666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a20202020202020206966202865203d3d3d20656e656d79207c7c20652e64656164207c7c20652e696e4169722920636f6e74696e75653b0a0a20202020202020202f2f2053616d6520706c6174666f726d206f6e6c790a202020202020202069662028652e6f6e506c6174666f726d20213d3d20656e656d792e6f6e506c6174666f726d2920636f6e74696e75653b0a0a20202020202020202f2f20436865636b206966206520697320696e2066726f6e74206f6620656e656d790a2020202020202020636f6e7374206478203d20652e78202d20656e656d792e783b0a0a202020202020202069662028656e656d792e666163696e67203d3d3d2031202626206478203e2030202626206478203c2073706163696e6729207b20202020202020200a20202020202020202020202072657475726e20747275653b0a20202020202020207d0a0a202020202020202069662028656e656d792e666163696e67203d3d3d202d31202626206478203c2030202626202d6478203c2073706163696e6729207b20202020202020200a20202020202020202020202072657475726e20747275653b0a20202020202020207d0a202020207d0a2020202072657475726e2066616c73653b0a7d0a0a0a0a66756e6374696f6e2061766f696457616c6c7328656e656d79297b0a09696628646972656374696f6e426c6f636b656428656e656d79292026262021656e656d792e696e416972297b0a0909656e656d792e666163696e67203d202d656e656d792e666163696e673b0a0909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e670a0909696628646972656374696f6e426c6f636b656428656e656d7929297b0a090909656e656d792e6d6f7665496e707574203d20303b0a09097d0a097d0a7d0a66756e6374696f6e2061766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c2077616c6c536567297b0a0a09696628646972656374696f6e426c6f636b656428656e656d79292026262021656e656d792e696e41697220262620656e656d792e6f6e506c6174666f726d203d3d3d20656e656d792e626c6f636b6564502026262021616943616e4a756d704f76657228656e656d792c2077616c6c53656729297b0a0909656e656d792e666163696e67203d202d656e656d792e666163696e673b0a0909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e670a0909696628646972656374696f6e426c6f636b656428656e656d7929297b0a090909656e656d792e6d6f7665496e707574203d20303b0a09097d0a097d0a7d0a0a0a66756e6374696f6e20646972656374696f6e426c6f636b656428656e656d79297b0a09696628656e656d792e666163696e67203d3d3d203120262620656e656d792e626c6f636b65645269676874292072657475726e20747275653b0a09696628656e656d792e666163696e67203d3d3d202d3120262620656e656d792e626c6f636b65644c656674292072657475726e20747275653b0a0972657475726e2066616c73650a7d0a66756e6374696f6e2064657465637457616c6c416865616428656e656d7929207b0a0a0a20202020666f7220286c657420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f7220286c657420736567206f6620706c61742e7365676d656e747329207b0a09090909636f6e737420646972656374696f6e203d206169436865636b57616c6c416865616428656e656d792c20736567290a20202020202020202020202069662028646972656374696f6e29207b0a09090909696628646972656374696f6e203d3d3d2022726967687422297b0a0909090909656e656d792e626c6f636b656450203d20706c61742e69643b0a0909090909656e656d792e626c6f636b65645269676874203d20747275653b0a0909090909656e656d792e626c6f636b65644c656674203d2066616c73653b0a090909090972657475726e207365670a090909097d656c73657b0a0909090909656e656d792e626c6f636b656450203d20706c61742e69643b0a0909090909656e656d792e626c6f636b65644c656674203d20747275653b0a0909090909656e656d792e626c6f636b65645269676874203d2066616c73653b0a090909090972657475726e207365670a090909097d0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e206e756c6c3b0a7d0a0a66756e6374696f6e20616943616e4a756d704f7665722861692c2073656729207b0a09696628217365672972657475726e20747275653b0a20202020636f6e73742077616c6c486569676874203d207365672e6d617859202d207365672e6d696e593b0a2020202072657475726e2077616c6c486569676874203c3d203130303b0a7d0a0a0a66756e6374696f6e206169436865636b57616c6c41686561642861692c207365672c206c6f6f6b41686561644d6178203d20343029207b0a0a2020202069662028217365672e697357616c6c292072657475726e2066616c73653b0a0a0a20202020636f6e737420746f70203d2061692e79202b2061692e686569676874202a202e32353b0a20202020636f6e737420626f74746f6d203d2061692e79202b2061692e686569676874202a20302e353b0a0a202020202f2f20766572746963616c206f7665726c61700a2020202069662028626f74746f6d202d31203c3d207365672e6d696e59207c7c20746f70202b31203e3d207365672e6d617859292072657475726e2066616c73653b0a09090a2020202020202020636f6e73742064697374203d207365672e7831202d2061692e780a2020202020202020696620284d6174682e616273286469737429203c3d206c6f6f6b41686561644d61782026262064697374203e203029207b0909090a20202020202020202020202072657475726e202022726967687422203b0a20202020202020207d656c736520696620284d6174682e616273286469737429203c3d206c6f6f6b41686561644d61782026262064697374203c2030297b0909090a09090972657475726e2020226c65667422203b0a09097d0a0a2020202072657475726e2066616c73653b0a7d0a0a0a66756e6374696f6e2069734e656172506c6174666f726d4564676528656e656d792c20706c61742c207468726573686f6c64203d20323029207b0a20202020636f6e7374206c65667420203d20706c61742e6d696e583b0a20202020636f6e7374207269676874203d20706c61742e6d6178583b0a0a09200a20202020636f6e7374206e6561724c65667420203d20656e656d792e78203c206c656674202b207468726573686f6c643b0a20202020636f6e7374206e6561725269676874203d20656e656d792e78203e207269676874202d207468726573686f6c643b0a0a202020202f2f204f6e6c7920636f756e7420617320616e20656467652069662074686572652773206e6f20636f6e6e6563746564207365676d656e740a20202020696620286e6561724c656674292072657475726e20747275653b0a20202020696620286e6561725269676874292072657475726e20747275653b0a0a2020202072657475726e2066616c73653b0a7d0a0a0a66756e6374696f6e2069734e65617245646765466163696e6728656e656d792c20706c6174666f726d2c207468726573686f6c64203d20323029207b0a20202020636f6e7374206c65667420203d20706c6174666f726d2e6d696e583b0a20202020636f6e7374207269676874203d20706c6174666f726d2e6d6178583b0a0a2020202069662028656e656d792e666163696e67203c203029207b0a20202020202020202f2f20466163696e67206c6566740a202020202020202072657475726e20656e656d792e78203c3d206c656674202b207468726573686f6c643b0a202020207d20656c7365207b0a20202020202020202f2f20466163696e672072696768740a202020202020202072657475726e20656e656d792e78203e3d207269676874202d207468726573686f6c643b0a202020207d0a7d0a0a0a66756e6374696f6e206973466163696e675365676d656e7428656e656d792c207365676d656e74297b0a0a0969662028656e656d792e666163696e67203c203029207b0a20202020202020202f2f20466163696e67206c6566740a202020202020202072657475726e20656e656d792e78203e207365676d656e742e6d6964583b0a202020207d20656c7365207b0a20202020202020202f2f20466163696e672072696768740a202020202020202072657475726e20656e656d792e78203c207365676d656e742e6d6964583b0a202020207d0a7d0a0a66756e6374696f6e206973506c6179657242656c6f77506c6174666f726d28706c61742c207468726573686f6c64203d20323029207b0a20202020636f6e7374207078203d2067616d652e706c617965722e783b0a20202020636f6e7374207079203d2067616d652e706c617965722e793b0a0a20202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a0a20202020202020202f2f204f7074696f6e616c3a206f6e6c7920747265617420666c6f6f722d74797065207365676d656e747320617320706c6174666f726d20737572666163650a2020202020202020696620287365672e697357616c6c290a202020202020202020202020636f6e74696e75653b0a0a2020202020202020636f6e7374207831203d207365672e78313b0a2020202020202020636f6e7374207832203d207365672e78323b0a2020202020202020636f6e7374207931203d207365672e79313b0a2020202020202020636f6e7374207932203d207365672e79323b0a0a20202020202020202f2f20536b697020766572746963616c202f206e6561722d766572746963616c207365676d656e7473202877616c6c73290a2020202020202020636f6e7374206478203d207832202d2078313b0a2020202020202020696620284d6174682e61627328647829203c20302e30303031290a202020202020202020202020636f6e74696e75653b0a0a2020202020202020636f6e7374206c65667420203d204d6174682e6d696e2878312c207832293b0a2020202020202020636f6e7374207269676874203d204d6174682e6d61782878312c207832293b0a0a20202020202020202f2f20506c61796572206d75737420626520686f72697a6f6e74616c6c7920756e6465722074686973207365676d656e7420287769746820736d616c6c206d617267696e290a2020202020202020696620287078203c206c656674202d207468726573686f6c64207c7c207078203e207269676874202b207468726573686f6c64290a202020202020202020202020636f6e74696e75653b0a0a20202020202020202f2f20496e746572706f6c6174652074686520706c6174666f726d206865696768742061742070780a20202020202020206c65742074203d20287078202d20783129202f2064783b0a0a20202020202020202f2f20436c616d70207420736f20776520646f6e277420657874656e64206265796f6e6420746865207365676d656e740a20202020202020206966202874203c2030207c7c2074203e2031290a202020202020202020202020636f6e74696e75653b0a0a2020202020202020636f6e737420795f61745f7078203d207931202b2074202a20287932202d207931293b0a0a20202020202020202f2f20506c61796572206d7573742062652062656c6f772074686520737572666163650a2020202020202020696620287079203e20795f61745f7078202b203130290a20202020202020202020202072657475726e20747275653b0a202020207d0a0a2020202072657475726e2066616c73653b0a7d0a0a0a0a66756e6374696f6e20697353616665546f44726f7028656e656d7929207b0a20202020636f6e7374206665657458203d20656e656d792e783b0a20202020636f6e7374206665657459203d20656e656d792e79202b20656e656d792e686569676874202f20323b0a0a20202020636f6e73742073656742656c6f77203d20676574506c6174666f726d42656c6f77506f696e742866656574582c206665657459293b0a0a2020202072657475726e2073656742656c6f7720213d3d206e756c6c3b0a7d0a0a66756e6374696f6e20676574506c6174666f726d42656c6f77506f696e7428782c207929207b0a202020206c65742062657374203d206e756c6c3b0a202020206c6574206265737459203d20496e66696e6974793b0a0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a0909096966287365672e697357616c6c29636f6e74696e75653b0a2020202020202020202020202f2f20536b6970207365676d656e74732061626f7665206f72206174207468652073616d65206865696768740a202020202020202020202020636f6e737420736567546f70203d204d6174682e6d696e287365672e79312c207365672e7932293b0a20202020202020202020202069662028736567546f70203c3d20792920636f6e74696e75653b0a0a2020202020202020202020202f2f20436865636b20696620782069732077697468696e207365676d656e7420686f72697a6f6e74616c207370616e0a202020202020202020202020636f6e7374206c65667420203d204d6174682e6d696e287365672e78312c207365672e7832293b0a202020202020202020202020636f6e7374207269676874203d204d6174682e6d6178287365672e78312c207365672e7832293b0a2020202020202020202020206966202878203c206c656674207c7c2078203e2072696768742920636f6e74696e75653b0a0a2020202020202020202020202f2f20496e746572706f6c617465207468652059206174207468697320580a202020202020202020202020636f6e73742074203d202878202d207365672e783129202f20287365672e7832202d207365672e7831293b0a202020202020202020202020636f6e7374206979203d207365672e7931202b2074202a20287365672e7932202d207365672e7931293b0a0a2020202020202020202020202f2f204d7573742062652062656c6f772074686520706f696e740a202020202020202020202020696620286979203c3d20792920636f6e74696e75653b0a0a2020202020202020202020202f2f204b6565702074686520636c6f73657374206f6e650a202020202020202020202020696620286979203c20626573745929207b0a202020202020202020202020202020206265737459203d2069793b0a2020202020202020202020202020202062657374203d207365673b0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e20626573743b0a7d0a0a66756e6374696f6e2063616e4a756d70546f5365676d656e7428656e656d792c2066726f6d2c20746f29207b0a20202020636f6e73742067726176697479203d2067616d652e677261766974793b0a20202020636f6e7374206a756d70203d2067616d652e6a756d70537472656e6774683b0a0a20202020636f6e7374206d61784a756d70486569676874203d20286a756d70202a206a756d7029202f202832202a2067726176697479293b0a0a20202020636f6e73742066726f6d546f70203d204d6174682e6d696e2866726f6d2e79312c2066726f6d2e7932293b0a20202020636f6e737420746f546f702020203d204d6174682e6d696e28746f2e79312c20746f2e7932293b0a0a20202020636f6e737420766572746963616c44696666203d20746f546f70202d2066726f6d546f703b202f2f206e65676174697665203d2061626f76650a0a202020202f2f20746f6f20686967680a2020202069662028766572746963616c44696666203c202d6d61784a756d70486569676874292072657475726e2066616c73653b0a0a202020202f2f20746f6f2066617220646f776e0a2020202069662028766572746963616c44696666203e20313530292072657475726e2066616c73653b0a0a202020202f2f206c616e64696e67207a6f6e65206f6e2074686520746172676574207365676d656e740a20202020636f6e7374206c65667420203d204d6174682e6d696e28746f2e78312c20746f2e7832293b0a20202020636f6e7374207269676874203d204d6174682e6d617828746f2e78312c20746f2e7832293b0a0a202020202f2f20636c616d70206c616e64696e675820746f20746865207365676d656e740a20202020636f6e7374206c616e64696e6758203d204d6174682e6d6178286c6566742c204d6174682e6d696e28656e656d792e782c20726967687429293b0a0a20202020636f6e737420686f72697a6f6e74616c476170203d204d6174682e616273286c616e64696e6758202d20656e656d792e78293b0a0a202020202f2f2061697274696d650a20202020636f6e73742074696d655570203d206a756d70202f20677261766974793b0a20202020636f6e73742074696d65446f776e203d204d6174682e73717274282832202a20286d61784a756d70486569676874202b20766572746963616c446966662929202f2067726176697479293b0a20202020636f6e737420746f74616c41697254696d65203d2074696d655570202b2074696d65446f776e3b0a0a20202020636f6e7374206d6178486f72697a6f6e74616c5265616368203d20656e656d792e7370656564202a20746f74616c41697254696d653b0a0a2020202072657475726e20686f72697a6f6e74616c476170203c3d206d6178486f72697a6f6e74616c52656163683b0a7d0a0a66756e6374696f6e2063616e5365676d656e7452656163685365676d656e742866726f6d5365672c20746f5365672c206a756d702c20677261766974792c20737065656429207b0a0a20202020636f6e73742066726f6d546f70203d204d6174682e6d696e2866726f6d5365672e79312c2066726f6d5365672e7932293b0a20202020636f6e737420746f546f702020203d204d6174682e6d696e28746f5365672e79312c20746f5365672e7932293b0a0a20202020636f6e737420766572746963616c44696666203d20746f546f70202d2066726f6d546f703b202f2f206e65676174697665203d2061626f76650a0a20202020636f6e7374206d61784a756d70486569676874203d20286a756d70202a206a756d7029202f202832202a2067726176697479293b0a0a202020202f2f20546f6f20686967680a2020202069662028766572746963616c44696666203c202d6d61784a756d70486569676874290a202020202020202072657475726e2066616c73653b0a0a202020202f2f20546f6f2066617220646f776e20286f7074696f6e616c290a2020202069662028766572746963616c44696666203e20313530290a202020202020202072657475726e2066616c73653b0a0a202020202f2f20486f72697a6f6e74616c2072616e6765730a20202020636f6e73742066726f6d4c65667420203d204d6174682e6d696e2866726f6d5365672e78312c2066726f6d5365672e7832293b0a20202020636f6e73742066726f6d5269676874203d204d6174682e6d61782866726f6d5365672e78312c2066726f6d5365672e7832293b0a0a20202020636f6e737420746f4c65667420203d204d6174682e6d696e28746f5365672e78312c20746f5365672e7832293b0a20202020636f6e737420746f5269676874203d204d6174682e6d617828746f5365672e78312c20746f5365672e7832293b0a0a202020202f2f20436f6d70757465206d617820686f72697a6f6e74616c2072656163680a20202020636f6e73742074696d655570203d206a756d70202f20677261766974793b0a20202020636f6e73742074696d65446f776e203d204d6174682e73717274282832202a20286d61784a756d70486569676874202b20766572746963616c446966662929202f2067726176697479293b0a20202020636f6e737420746f74616c41697254696d65203d2074696d655570202b2074696d65446f776e3b0a0a20202020636f6e7374206d61785265616368203d207370656564202a20746f74616c41697254696d653b0a0a202020202f2f20436865636b20696620414e5920706f696e74206f6e2066726f6d5365672063616e20726561636820414e5920706f696e74206f6e20746f5365670a202020202f2f205468697320697320696e74657276616c206f7665726c617020657870616e646564206279206d617852656163680a20202020636f6e737420657870616e64656446726f6d4c65667420203d2066726f6d4c65667420202d206d617852656163683b0a20202020636f6e737420657870616e64656446726f6d5269676874203d2066726f6d5269676874202b206d617852656163683b0a0a20202020636f6e7374206f7665726c6170203d0a2020202020202020657870616e64656446726f6d5269676874203e3d20746f4c6566742026260a2020202020202020657870616e64656446726f6d4c65667420203c3d20746f52696768743b0a0a2020202072657475726e206f7665726c61703b0a7d0a0a66756e6374696f6e2066696e64426573744a756d705365676d656e7428656e656d792c20656e656d79506c61742c20706c61796572506c617429207b0a0a20202020636f6e7374206a756d70203d2067616d652e6a756d70537472656e6774683b0a20202020636f6e73742067726176697479203d2067616d652e677261766974793b0a20202020636f6e7374207370656564203d20656e656d792e73706565643b0a0a20202020666f722028636f6e73742070736567206f6620706c61796572506c61742e7365676d656e747329207b0a09096966202820707365672e697357616c6c2920636f6e74696e75653b0a2020202020202020666f722028636f6e73742065736567206f6620656e656d79506c61742e7365676d656e747329207b0a0909096966202820657365672e697357616c6c2920636f6e74696e75653b0a2020202020202020202020206966202863616e5365676d656e7452656163685365676d656e7428657365672c20707365672c206a756d702c20677261766974792c2073706565642929207b0a2020202020202020202020202020202072657475726e20707365673b200a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e206e756c6c3b0a7d0a0a66756e6374696f6e2066696e64436c6f736573745365676d656e74734265747765656e28706c6174666f726d412c20706c6174666f726d4229207b0a202020206c6574206265737441203d206e756c6c3b0a202020206c6574206265737442203d206e756c6c3b0a202020206c6574206265737444697374203d20496e66696e6974793b0a0a20202020666f722028636f6e73742073656741206f6620706c6174666f726d412e7365676d656e747329207b0a0909696628736567412e697357616c6c29636f6e74696e75653b0a2020202020202020666f722028636f6e73742073656742206f6620706c6174666f726d422e7365676d656e747329207b0a090909696628736567422e697357616c6c29636f6e74696e75653b0a0909090a2020202020202020202020202f2f20436f6d7061726520656e64706f696e7473206f66204120746f20656e64706f696e7473206f6620420a202020202020202020202020636f6e7374206431203d206469737428736567412e78312c20736567412e79312c20736567422e78312c20736567422e7931293b0a202020202020202020202020636f6e7374206432203d206469737428736567412e78312c20736567412e79312c20736567422e78322c20736567422e7932293b0a202020202020202020202020636f6e7374206433203d206469737428736567412e78322c20736567412e79322c20736567422e78312c20736567422e7931293b0a202020202020202020202020636f6e7374206434203d206469737428736567412e78322c20736567412e79322c20736567422e78322c20736567422e7932293b0a0a202020202020202020202020636f6e7374206c6f63616c4d696e203d204d6174682e6d696e2864312c2064322c2064332c206434293b0a0a202020202020202020202020696620286c6f63616c4d696e203c20626573744469737429207b0a202020202020202020202020202020206265737444697374203d206c6f63616c4d696e3b0a202020202020202020202020202020206265737441203d20736567413b0a202020202020202020202020202020206265737442203d20736567423b0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e207b20736567413a2062657374412c20736567423a2062657374422c20646973743a206265737444697374207d3b0a7d0a0a66756e6374696f6e2066696e64436c6f736573745365676d656e74734265747765656e4d6964506f696e747328706c6174666f726d412c20706c6174666f726d4229207b0a202020206c6574206265737441203d206e756c6c3b0a202020206c6574206265737442203d206e756c6c3b0a202020206c6574206265737453636f7265203d20496e66696e6974793b0a0a20202020666f722028636f6e73742073656741206f6620706c6174666f726d412e7365676d656e747329207b0a0909696628736567412e697357616c6c29636f6e74696e75653b0a2020202020202020666f722028636f6e73742073656742206f6620706c6174666f726d422e7365676d656e747329207b0a090909696628736567422e697357616c6c29636f6e74696e75653b0a0a2020202020202020202020202f2f204d6964706f696e742064697374616e63650a202020202020202020202020636f6e7374206d7841203d2028736567412e7831202b20736567412e783229202a20302e353b0a202020202020202020202020636f6e7374206d7941203d2028736567412e7931202b20736567412e793229202a20302e353b0a202020202020202020202020636f6e7374206d7842203d2028736567422e7831202b20736567422e783229202a20302e353b0a202020202020202020202020636f6e7374206d7942203d2028736567422e7931202b20736567422e793229202a20302e353b0a0a202020202020202020202020636f6e7374206d696444697374203d2064697374286d78412c206d79412c206d78422c206d7942293b0a0a2020202020202020202020202f2f20436f6d62696e65642073636f726520286d6964706f696e7420776569676874656420736c696768746c79206d6f7265290a202020202020202020202020636f6e73742073636f7265203d206d6964446973743b0a0a2020202020202020202020206966202873636f7265203c206265737453636f726529207b0a202020202020202020202020202020206265737453636f7265203d2073636f72653b0a202020202020202020202020202020206265737441203d20736567413b0a202020202020202020202020202020206265737442203d20736567423b0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e207b20736567413a2062657374412c20736567423a2062657374422c20646973743a206265737453636f7265207d3b0a7d0a0a66756e6374696f6e20646973742878312c2079312c2078322c20793229207b0a20202020636f6e7374206478203d207831202d2078323b0a20202020636f6e7374206479203d207931202d2079323b0a2020202072657475726e204d6174682e737172742864782a6478202b2064792a6479293b0a7d0a0a66756e6374696f6e20676574506c6174666f726d556e64657228656e7469747929207b0a20202020636f6e7374206665657459203d20656e746974792e79202b20656e746974792e686569676874202f20323b0a0a202020206c65742062657374536567203d206e756c6c3b0a202020206c65742062657374506c6174203d206e756c6c3b0a202020206c6574206265737444656c7461203d20496e66696e6974793b0a0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a0909096966287365672e697357616c6c29636f6e74696e75653b0a202020202020202020202020636f6e7374206c65667420203d204d6174682e6d696e287365672e78312c207365672e7832293b0a202020202020202020202020636f6e7374207269676874203d204d6174682e6d6178287365672e78312c207365672e7832293b0a0a20202020202020202020202069662028656e746974792e78203c206c656674207c7c20656e746974792e78203e2072696768742920636f6e74696e75653b0a0a202020202020202020202020636f6e73742074203d2028656e746974792e78202d207365672e783129202f20287365672e7832202d207365672e7831293b0a202020202020202020202020636f6e737420706c617459203d207365672e7931202b20287365672e7932202d207365672e793129202a20743b0a0a202020202020202020202020636f6e73742064656c7461203d20706c617459202d2066656574593b0a0a2020202020202020202020206966202864656c7461203c202d342920636f6e74696e75653b0a2020202020202020202020206966202864656c7461203e2034302920636f6e74696e75653b0a0a2020202020202020202020206966202864656c7461203c206265737444656c746129207b0a202020202020202020202020202020206265737444656c7461203d2064656c74613b0a2020202020202020202020202020202062657374536567203d207365673b0a2020202020202020202020202020202062657374506c6174203d20706c61743b0a2020202020202020202020207d0a20202020202020207d0a202020207d0a0a2020202072657475726e207b207365676d656e743a20626573745365672c20706c6174666f726d3a2062657374506c6174207d3b0a7d0a66756e6374696f6e206765745365676d656e744f76657243757272656e742863757272656e7453656729207b0a0a20202020636f6e7374206375724c65667420203d204d6174682e6d696e2863757272656e745365672e78312c2063757272656e745365672e7832293b0a20202020636f6e7374206375725269676874203d204d6174682e6d61782863757272656e745365672e78312c2063757272656e745365672e7832293b0a20202020636f6e737420637572546f702020203d204d6174682e6d696e2863757272656e745365672e79312c2063757272656e745365672e7932293b0a0a202020206c65742063616e64696461746573203d205b5d3b0a0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a0a20202020202020202020202069662028736567203d3d3d2063757272656e74536567207c7c207365672e697357616c6c202920636f6e74696e75653b0a0a202020202020202020202020636f6e737420736567546f70203d204d6174682e6d696e287365672e79312c207365672e7932293b0a0a2020202020202020202020202f2f206d7573742062652061626f76650a20202020202020202020202069662028736567546f70203e3d20637572546f702920636f6e74696e75653b0a0a2020202020202020202020202f2f206d757374206f7665726c617020686f72697a6f6e74616c6c790a202020202020202020202020636f6e7374206c65667420203d204d6174682e6d696e287365672e78312c207365672e7832293b0a202020202020202020202020636f6e7374207269676874203d204d6174682e6d6178287365672e78312c207365672e7832293b0a0a202020202020202020202020696620287269676874203c206375724c656674207c7c206c656674203e2063757252696768742920636f6e74696e75653b0a0a20202020202020202020202063616e646964617465732e7075736828736567293b0a20202020202020207d0a202020207d0a0a202020206966202863616e646964617465732e6c656e677468203d3d3d2030292072657475726e206e756c6c3b0a0a202020202f2f207069636b206c6f7765737420706c6174666f726d2061626f76650a2020202063616e646964617465732e736f72742828612c206229203d3e207b0a202020202020202072657475726e204d6174682e6d696e28622e79312c20622e793229202d204d6174682e6d696e28612e79312c20612e7932293b0a202020207d293b0a2020202072657475726e2063616e646964617465735b305d3b0a7d0a0a66756e6374696f6e206765745365676d656e744f766572506c6174666f726d28656e656d79506c6174666f726d29207b0a0a20202020636f6e737420706c61744c65667420203d20656e656d79506c6174666f726d2e6d696e583b0a20202020636f6e737420706c61745269676874203d20656e656d79506c6174666f726d2e6d6178583b0a20202020636f6e737420706c6174546f702020203d20656e656d79506c6174666f726d2e6d696e593b0a0a202020206c65742063616e64696461746573203d205b5d3b0a0a20202020666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a2020202020202020666f722028636f6e737420736567206f6620706c61742e7365676d656e747329207b0a2020202020202020202020202f2f20536b6970207365676d656e74732062656c6f6e67696e6720746f207468652073616d6520706c6174666f726d0a20202020202020202020202069662028706c6174203d3d3d20656e656d79506c6174666f726d207c7c207365672e697357616c6c202920636f6e74696e75653b0a0a202020202020202020202020636f6e737420736567546f70203d204d6174682e6d696e287365672e79312c207365672e7932293b0a0a2020202020202020202020202f2f204d7573742062652061626f76652074686520706c6174666f726d0a20202020202020202020202069662028736567546f70203e3d20706c6174546f702920636f6e74696e75653b0a0a2020202020202020202020202f2f20486f72697a6f6e74616c206f7665726c617020776974682074686520454e5449524520706c6174666f726d0a202020202020202020202020636f6e7374206c65667420203d204d6174682e6d696e287365672e78312c207365672e7832293b0a202020202020202020202020636f6e7374207269676874203d204d6174682e6d6178287365672e78312c207365672e7832293b0a0a202020202020202020202020696620287269676874203c20706c61744c656674207c7c206c656674203e20706c617452696768742920636f6e74696e75653b0a0a20202020202020202020202063616e646964617465732e7075736828736567293b0a20202020202020207d0a202020207d0a0a202020206966202863616e646964617465732e6c656e677468203d3d3d2030292072657475726e206e756c6c3b0a202020202f2f205069636b20746865204c4f57455354207365676d656e742061626f76652074686520706c6174666f726d0a2020202063616e646964617465732e736f72742828612c206229203d3e207b0a2020202020202020636f6e73742061546f70203d204d6174682e6d696e28612e79312c20612e7932293b0a2020202020202020636f6e73742062546f70203d204d6174682e6d696e28622e79312c20622e7932293b0a202020202020202072657475726e2062546f70202d2061546f703b202f2f2072657665727365643a206c6f776573742041424f56450a202020207d293b0a0a2020202072657475726e2063616e646964617465735b305d3b0a7d0a2f2f666f7220646561746820616e696d6174696f6e0a66756e6374696f6e206765745365676d656e74416e676c652873656729207b0a2020202072657475726e204d6174682e6174616e32287365672e7932202d207365672e79312c207365672e7832202d207365672e7831293b0a7d0a0a0a2a2f6a53435f414354494f4e55010f7f48d3bc467f47fd9ca34fa01e2042dcbff2d9d144427526c87f9c2eff5356000eda3469374bcfd738a71517fe727615d51ef4eee03b79d18e25c5979fc7d1f2012489079e25a67d119e7e955d69e5362b9b17556aeb0b03520f2ebea3c63bea150014c5b02d92f7ce1aed006e3885da7c16f3092903c6280e6f19861de9350af36b000371b94d1a88e58463f5126b58c5f4b1a15076e8bc66c8f65e938c2ba9f3327b0101bfe53b7c8ba2a5d73adc223235f8a57a28ebdf2872f773eaff964f8e615888012b269609cded99cf2f1d5767b597cb64a91ac137d2930a42d5c9a66d4ed64f29001648b5f9d3b8c6a767eb0a7d833f58e883459ef97ff6098520cef1adcb78af2f0025262b10cbe444ab0b52c813da140aaa18f64a16b85d11ca8bea8157626101420017ee864cca0298bc206da4cee9ae1d0f27ffead132aed360e430feb3cfca9f89011f846721a46e00f09c63e38df4708a1d5e9491ee1229f98d45384cf6f13c17630111aebc6307756a9be9e3e25e6d3aba6f5780e3d9a2bb6013cea592ce9c26532e011adddaec82722449b44edc0d9d8f55ff4efeb62266e0ee48294250271dae8d970126951caa335e4bdaaf9cb2a969f2d83ae430e1d286493e2653b113cb457dc19100000000000000000000000000000000000000000000000000000000000000000ee2a83881004782e22a9093c546c3e8ebe378bb8e4da756f85dccccfde0bb7e0e6e86752829583f6a8135831a43edca4a44a685b6562de23d9141fc7d141bb6010f1521758c6ecd060ea2905e6ac26a6f0f314d675a8c96dc3a9906386f0c94a401276974b2dac2f440701378a082bf26f4124dbd580f4a98d887407dc1f648e40209c0e9e7a301ac1690a11587d0a8b06d72530c12ec5ba04043cd81aa4454761a07f8fabfc860ad0da6e39c7cc70c7266177fc80b956b14a1e9d158265a5de7fc04f52b54ac374a79293ec84a5b1ec7b10a982973f7e51d5df06c566347830a880625dbcaf0138cac8222592226d22173abe00841ed8b2dd2e029cc8b89b970f70c4498d328a02d6eb6bcaf2c167a42e78dc81dda0572e2d166863bd205134d1c01df585e021c3643f2c8d094562a8b68104a11a484f7af8b28c9f71e3a8dbd283058c714f9bec5ddc38fc44bb8d1bfd7c136e865577848165a558a565d49506a14d5fee25e93b0e64b70ec7df23787a0daceba8ed970cbaf88c69b40f653bfae1ef4267bc95df9b023b89820a91422e05937941f582e5a4ff1ce5a16e650c8bd0005c473f42fa788c4ac040d04567ced02ca536f90b89ca6ab0c85aa0690c1b8dc010f9e689dc22a569addffec4bd9a63d7207bba0f30eccc04eda299f719c218979001f7c1f824fd4c22b8e924971dccbcfa3125871c63766cb7d5a5408a928bd0058001fd8ff23ad8dd645ead440c7202548e865dfea7c7abe395c375755e9621e7c770118512e142e1d72aea815ce4510e8a11680ca5eb4a6b2a98960752216639f2ac60101b649eb9cd18ce52666074d43869c720665c53c5abaf72bbd3608d2e36ad5e00129e305637232e78f287cf9409e11adc74e0b42bcd86d0d0e4720dce16a9770b70104abda71443629dacce14319d000e9ed8b79594b350cd980c41cd6bcb76e0451010fdb1609f4d757c89d6de86007bda49130786a813cbff1d82987c87168f7941f002f857738cbf40c8472022efd0feb9ce3e0131be75e8d29a8d58829f16cafa2af0029fe10edaeac9385866c367f7f8bcf631c8cd11517b856203fb7db32e191d83f01145faba5e9a7fb352d9972b2c798103711d2857624dac3ded643452fa70bc384012d82aee2199ed2b92e469aa6807d4f97814d2b1fdaafb3afa1516b347c826e1501
DERO explorer source code | explorer version (api): under development (1.0) | dero version: golang pre-alpha | Copyright 2017-2022 Dero Project