The corruption of the best things gives rise to the worst. — David Hume
Rowan Energy Ltd, whose CEO is David Duckworth, sell a token on a private blockchain. They make this token available to purchase to the general public on a handful of mid-tier centralised exchanges. As the blockchain is private, the public’s understanding of the properties of this token is based on David’s word alone. Unfortunately investors seem to have been misled about how many tokens exist. It looks like the company is simultaneously reaping the benefits of open crypto market money while abusing the trust of investors by hiding large numbers of tokens.
The total supply is 945 million tokens. There is a secret function to mint unlimited tokens and it still works.
I will present a technical exploration of the RWN token as a verifiable sequence of facts. The official telegram's usual approach to refuting evidence is censorship and obfuscation relying on the average investor's lack of technical knowledge, so I will try to front-run this where I can. I encourage you to verify everything below.
A user recently shared in the Rowan Energy Telegram group that the official wallet was posting the user's wallet seedphrase over HTTPS for remote-signing transactions instead of doing local signing. Not a great look for a blockchain-native company- but I digress.
This got me thinking. There are two wallets available for RWN tokens. The other is AnkerPay, which must surely be a more traditional wallet implementation than one doing transactions via an API call containing a seed. It turns out I was correct- AnkerPay's integration communicates directly with an RPC node on Rowan Energy's blockchain. The node is 3.19.248.157:8504
and it is publicly exposed to the internet (at least at the time of publishing).
Alright, this is already interesting. The rumours that it's just Ethereum under the hood are true. AnkerPay is talking to an Ethereum contract at address 0x3D3F6CeDe89a048CfC3F6eCEbAccA97684202317
using the eth_call RPC method to find my wallet balance, using the function selector 0x70a08231
, aka balanceOf(address)
. It's likely just a standard ERC-20 contract exposing the usual functions, but we can dig into this more later.
We can duplicate the RPC call with curl and start chatting to the contract directly from now on.
curl --compressed -X POST http://3.19.248.157:8504/ \
-H "Content-Type: application/json; charset=utf-8" \
-H "Accept-Encoding: gzip" \
-H "User-Agent: okhttp/3.8.1" \
-H "Connection: keep-alive" \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x3D3F6CeDe89a048CfC3F6eCEbAccA97684202317","data":"0x70a08231000000000000000000000000xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxredacted"},"latest"],"id":1}'
{"jsonrpc":"2.0","id":1,"result":"0x0000000000000000000000000000000000000000000000000000xxxxredacted"}
It's correctly reporting my wallet balance. Assuming this is ERC-20, we should be able to call other functions of that standard interface. We can see that the function signature for totalSupply()
is 0x18160ddd
, so calling this on the token contract will give us the total amount of minted RWN tokens!
curl --compressed -X POST http://3.19.248.157:8504/ \
-H "Content-Type: application/json; charset=utf-8" \
-H "Accept-Encoding: gzip" \
-H "User-Agent: okhttp/3.8.1" \
-H "Connection: keep-alive" \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x3D3F6CeDe89a048CfC3F6eCEbAccA97684202317","data":"0x18160ddd"},"latest"],"id":1}'
{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000083252505cfe7e800"}
This returns a very big number, 0x83252505cfe7e800
, which is 9450000100000000000
in decimal. Solidity doesn't support floating point numbers, fixed point arithmetic is used with a number which represents the number of decimal places. We can call the decimals()
function to find that fixed point.
curl --compressed -X POST http://3.19.248.157:8504/ \
-H "Content-Type: application/json; charset=utf-8" \
-H "Accept-Encoding: gzip" \
-H "Connection: keep-alive" \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x3D3F6CeDe89a048CfC3F6eCEbAccA97684202317","data":"0x313ce567"},"latest"],"id":1}'
{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000000a"}
hexadecimal a
= 10 decimals = 10^10 = 10,000,000,000. As a sanity check, when I check the balance shown in my wallet with the balance returned by the call to getBalance()
, it tallies with this multiplier.
So total supply = decimal(0x83252505cfe7e800) / 10000000000 = 9450000100000000000 / 10000000000 = 945,000,010
Total supply is 945 million tokens.
This is not what investors have been repeatedly told in official channels.
Ask yourself if the owners of an ERC-20 token which they are shilling to the public can't call totalSupply()
on their own contract and provide the correct figure. I don't know the reason but I am going to stick to the facts. Let's gather more data.
Any burned?
curl --compressed -X POST http://3.19.248.157:8504/ \
-H "Content-Type: application/json; charset=utf-8" \
-H "Accept-Encoding: gzip" \
-H "User-Agent: okhttp/3.8.1" \
-H "Connection: keep-alive" \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x3D3F6CeDe89a048CfC3F6eCEbAccA97684202317","data":"0x70a08231000000000000000000000000000000000000000000000000000000000000dead"},"latest"],"id":1}'
{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000abc7e28971e00"}
3021999800000000 / (10^10) = 302,199.98 tokens are in the 0x0..dead
address, 0 in the 0x0..0
address. Note that thte totalSupply
function takes into account the null address anyway. Where did the other 399.7 million tokens go? At the price peak in 2024, this hidden token stash was worth approximately $132,000,000. That's a lot of money unaccounted for. Investors should be demanding transparency beyond the word of a single person.
For a sanity check and secondary proof, let's have a look at some wallet balances. Through a bit of digging I collected just 2.84% of all transactions from the explorer and extracted the unique addresses. With a window onto the chain of less than 3% of total activity, I queried the balances of this limited set of 284 addresses, of which I'm showing the top 15 wallets.
Even only being able to see a tiny subset of addresses, the total balances add up to 589 million tokens, already more than the advertised 545m maximum hard-cap, with the largest wallet (MEXC) containing 266 million tokens. The odds are overwhelming that there are other large, less active wallets which I didn't find.
There are a handful of publicly known wallets:
MexC - 266 million
ProBit - 34 million
Buyback - 7 million
Enflux - 0
Let's jump back and validate our assumptions about the shape of the contract. We can get the bytecode using the RPC function eth_getCode
:
curl --compressed -X POST http://3.19.248.157:8504/ \
-H "Content-Type: application/json; charset=utf-8" \
-H "Accept-Encoding: gzip" \
-H "User-Agent: okhttp/3.8.1" \
-H "Connection: keep-alive" \
-d '{"jsonrpc":"2.0","method":"eth_getCode","params":["0x3D3F6CeDe89a048CfC3F6eCEbAccA97684202317", "latest"],"id":1}'
The result is long, but it's important for posterity, so I'll attach it to the bottom of the post.**
Let's decompile it. Decompilation won't give us the original Solidity code, but it will make it at least (sort of) human readable. We can also see a list of known function signatures.
Method names cached from 4byte.directory.
0x06fdde03 name()
0x095ea7b3 approve(address,uint256)
0x163aa00d lastRewardEthBlockNumber()
0x17da485f getMiningDifficulty()
0x1801fbe5 mint(uint256,bytes32)
0x18160ddd totalSupply()
0x23b872dd transferFrom(address,address,uint256)
0x29de3798 timeStampForEpoch(uint256)
0x313ce567 decimals()
0x32e99708 getMiningTarget()
0x3eaaf86b _totalSupply()
0x3f06e17c changeDonation(address)
0x490203a7 getMiningReward()
0x4ef37628 getChallengeNumber()
0x6fd396d6 lastRewardTo()
0x70a08231 balanceOf(address)
0x71d9e0df targetForEpoch(uint256)
0x79ba5097 acceptOwnership()
0x79c65068 mintToken(address,uint256)
0x81269a56 checkMintSolution(uint256,bytes32,bytes32,uint256)
0x829965cc epochCount()
0x87a2a9d6 _MAXIMUM_TARGET()
0x884897a5 transferAndDonateTo(address,uint256,address[],address)
0x8a769d35 miningTarget()
0x8ae0368b challengeNumber()
0x8da5cb5b owner()
0x95d89b41 symbol()
0x97566aa0 getMintDigest(uint256,bytes32,bytes32)
0xa70a8d23 solutionForChallenge(bytes32)
0xa9059cbb transfer(address,uint256)
0xbafedcaa lastRewardAmount()
0xcae9ca51 approveAndCall(address,uint256,bytes)
0xcb9ae707 latestDifficultyPeriodStarted()
0xd416efdb donationTo(address)
0xd4ee1d90 newOwner()
0xdc39d06d transferAnyERC20Token(address,uint256)
0xdc6e9cf9 _MINIMUM_TARGET()
0xdd62ed3e allowance(address,address)
0xf2fde38b transferOwnership(address)
approve(arg0, arg1) returns (r0)
mint(arg0, arg1) returns (r0)
transferFrom(arg0, arg1) returns (r0)
timeStampForEpoch(arg0, arg2) returns (r0)
changeDonation(arg0, arg1) returns (r0)
balanceOf(arg0, arg1) returns (r0)
targetForEpoch(arg0, arg2) returns (r0)
mintToken(arg0, arg1) returns (r0)
checkMintSolution(arg0, arg1) returns (r0)
transferAndDonateTo(arg0, arg1) returns (r0)
getMintDigest(arg0, arg1) returns (r0)
solutionForChallenge(arg0, arg2) returns (r0)
transfer(arg0, arg1) returns (r0)
approveAndCall(arg0, arg1) returns (r0)
donationTo(arg0, arg1) returns (r0)
transferAnyERC20Token(arg0, arg1) returns (r0)
allowance(arg0, arg1) returns (r0)
transferOwnership(arg0, arg1)
name(arg0) returns (r0)
lastRewardEthBlockNumber(arg0) returns (r0)
getMiningDifficulty() returns (r0)
totalSupply() returns (r0)
decimals(arg0) returns (r0)
getMiningTarget() returns (r0)
_totalSupply(arg0) returns (r0)
getMiningReward() returns (r0)
getChallengeNumber() returns (r0)
lastRewardTo(arg0) returns (r0)
epochCount(arg0) returns (r0)
_MAXIMUM_TARGET(arg0) returns (r0)
func_2531(arg0, arg1, arg2, arg3, arg4) returns (r0)
miningTarget(arg0) returns (r0)
challengeNumber(arg0) returns (r0)
owner(arg0) returns (r0)
symbol(arg0) returns (r0)
lastRewardAmount(arg0) returns (r0)
latestDifficultyPeriodStarted(arg0) returns (r0)
newOwner(arg0) returns (r0)
_MINIMUM_TARGET(arg0) returns (r0)
func_2F77(arg0, arg1) returns (r0)
func_2F9B(arg0, arg1) returns (r0)
func_301B(arg0, arg1) returns (r0)
func_3037(arg0) returns (r0)
func_3063(arg0, arg1, arg2, arg8) returns (r0)
func_30CF(arg0, arg1) returns (r0)
func_30DD(arg0, arg7) returns (r0)
func_3100(arg0, arg6) returns (r0)
func_3123(arg0, arg1) returns (r0)
The public methods above can be thought of as the "API" of this contract and are the only ways to trigger a state change from either an external entity or another contract.
Instead of pasting the decompiled pseudo-Solidity here, which is hard to read, let's compare this interface to a prototype contract that was published to Ethereum mainnet shortly before the launch of the RWN token. The bytecode isn't an exact match, but there's not much in it (but there is a very important difference- more on that later). We can assume from the above signature that we're working with something extremely similar in nature since the interface is the same.
The contract implements ERC-918: Mineable Token Standard, and Ownable ERC-20 with some logic for micro-donations. Basically it puts a Bitcoin-style Proof-of-Work mining mechanism on top of a boring ERC-20 token, allowing miners solving a cryptographic puzzle to mint more tokens on a decreasing reward curve with automatic difficulty adjustment. There are other similar contracts on mainnet, created before this one, so it's not wholly original. There's no secret sauce here. Which is surprising considering they built a company around it.
I don't see evidence of "Proof-of-Energy-Generation". The only proofs to this contract have to be hashing PoW's based on guessing a nonce value, which is the opposite of green energy. The contract doesn't expose any other functionality. Maybe the energy generation proof is signed onto a different contract on their Ethereum platform. Or maybe the Smart Miners don't communicate with the blockchain at all. There's no trace of thousands of customer devices making daily calls from the visible explorer transactions.
Who is the owner?
curl --compressed -X POST http://3.19.248.157:8504/ \
-H "Content-Type: application/json; charset=utf-8" \
-H "Accept-Encoding: gzip" \
-H "User-Agent: okhttp/3.8.1" \
-H "Connection: keep-alive" \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x3D3F6CeDe89a048CfC3F6eCEbAccA97684202317","data":"0x8da5cb5b"},"latest"],"id":1}'
{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000a511b3a4c597302ea3681265dacf67e3bc75b7f3"}
This address deployed the contract to the platform (or was later given ownership): 0xa511b3a4c597302ea3681265dacf67e3bc75b7f3
. Only 0.0000965 tokens in that account now.
Who got the last mining reward? `
curl --compressed -X POST http://3.19.248.157:8504/ \
-H "Content-Type: application/json; charset=utf-8" \
-H "Accept-Encoding: gzip" \
-H "User-Agent: okhttp/3.8.1" \
-H "Connection: keep-alive" \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x3D3F6CeDe89a048CfC3F6eCEbAccA97684202317","data":"0x6fd396d6"},"latest"],"id":1}'
{"jsonrpc":"2.0","id":1,"result":"0x0000000000000000000000000000000000000000000000000000000000000000"}
Nobody! Checking with lastRewardTo()
seems to confirm that this particular minting function has never been used. Unless the minting function was modified to hide this info- skimming the decompiled function it doesn't look like this is the case. _totalSupply
isn't modified elsewhere, so initially it looked like the figure was always 945 million. However, there is an additional “secret” minting function- more on this later.
Why would you sell millions of pounds worth of tokens using a contract that implements never-used EIP-918 functions?
The mining challenge is to find a combination of values which hash to a number lower than the current difficulty: 0x0000000100000000000000000000000000000000000000000000000000000000
- Just a simple call to the exposed contract interface’s mint(uint256,bytes32)
function with the correct parameters would net you an initial reward of 1,889,973 tokens according to the getMiningReward()
function.
In order to call the contract interface, you’d need your private key to manually sign custom transactions to the RPC endpoint. Normally you’d have this, but neither AnkerPay nor the Rowan wallet make it available. It would be a task of deriving it from your seed, which from looking at the APK is using the BIP-44 derivation algorithm with a coin type of 5
, and the bitcoinj library. I’ve had a go at doing this, but not been able to replicate the exact behaviour to correctly produce my keypairs from the seed.
But it doesn’t matter, because it’s just vanilla Ethereum, so I’ll generate my own address, and send myself some funds.
Now I have some tokens in this wallet 5Aa82C15e42B76781d879c58ed0655C071152e92
, and I have possession of my private key. As a bonus proof that this really is the same token and chain, I’ll burn some and show the result on the official explorer.
For fun I thought I would try some keccak mining on this token.
However there’s an easier way to mint free tokens. There’s an additional 0x79c65068 mintToken(address,uint256)
function on the interface above that was not in the prototype version on mainnet.
THIS MEANS THERE WAS AN EXTRA FUNCTION ADDED TO MINT FREE TOKENS TO ANY ADDRESS BEFORE IT WAS DEPLOYED TO THE ROWAN PRIVATE BLOCKCHAIN IN 2020
This mint transaction does not show on the block explorer. It is being hidden.
Anyway, I am not a thief. Proof of burn: 0xf55d021088c9bfa078248be8fad2fae2a0837263288c34cf49c565f0ba8d8392
. The original total supply is restored.
I present the information here as evidence. As a community we have to take more seriously the core philosophy of blockchain: cryptographic verification over trust. Trust is open for abuse. We can do better than multi-million dollar financial black holes with a single human gatekeeper.
I’ll leave it to the reader to extrapolate intention here. I’m simply saying that it’s certainly interesting that a mintToken
function was added to the coin at a late stage, and the totalSupply
is almost double what we were told, and the last year the market experienced what felt like an infinite amount of tokens being relentlessly dumped on their heads. Was “energy footprint” the real reason not to integrate with a DEX, or was it because that would expose the contract interface to scrutiny? Is customer GDPR the reason for not enabling full explorer functionality, or would that just show that there’s no customer data here?
The blockchain being deleted by the admins now would be an additional suspicious indicator. Opening the chain up for a full audit would allow money flows to be traced and absolve innocent parties of any wrongdoing.
Ask questions.
1B mint tx hash: 0x253a35e7b49257b0612c3ed5fcfbfbdceb7b73971c27c525ce540ee89186e477
Note that I am on BST and the explorer is UTC. The transaction took a couple of seconds after I initiated my python script to get confirmed. I was a RWN billionaire for 4 minutes and 4 seconds! I can’t believe people are speculating about what the mintToken
function does, when I gave you the contract bytecode in full. I said I wouldn’t hold your hand, but- head over to the decompiler and paste in the bytecode. Do you see a transfer to the null address in mintToken
?
Also, for the record, I do not know Andrey and I do not support threats of violence against anyone.
It has honestly been fascinating watching the group psychology play out on Telegram. Someone will make a wild guess, and someone else will rationalise it, and then over a really short period of time it becomes canon. For example:
The mint function burns all minted tokens immediately so nothing was ever minted
I am actually a group funded by an rich Twitter lunatic to elaborately fake evidence to discredit the project
I was the market manipulator the whole time
I should have sent tokens to an exchange instead of the burn address to really super duper prove I could call transfer
The chain never really accepted the transactions
The balances I provided are manipulated and actually everything is fine
Or maybe, just maybe… It’s just a boring ERC-20 token that was exposed to the internet, I called a few uninteresting standard functions like balanceOf
and transfer
, and one interesting function. The explorer is clearly not showing contract call transactions and just shows RWN transfers. They are 100% guaranteed to show on the blockchain, though. The interesting thing is why balances of wallets such as Enflux’s don’t seem to match with the fact that we only see inflows in the explorer. That makes no sense to me.
I really did try to evidence the process in what I thought was watertight detail. An eye-opening lesson in human psychology for me personally. I provided the bytecode. Code is law. “The development team” can prove this bytecode is at the address 0x3D3F6CeDe89a048CfC3F6eCEbAccA97684202317
, MexC even shows part of this address on their deposit page. And now you have the bytecode, you can examine it for inconsistencies. If you don’t have any notion of how smart contracts function, you probably shouldn’t be over-investing in them.
I would love Gaetano Mondelli as the company blockchain lead to deconstruct my arguments, if they are false he should be comfortable putting his name to a counter-piece. And no shade to Gaetano, my guess is that he’s not involved with this chain or token at all ✌️. But anyone knowledgable and trustworthy with access to the chain can look. It’s junior Ethereum developer level stuff.
Give the chain to a legally appointed auditor to verify money flow. The history of every transaction and contract call is right there to be seen and the cryptographic verifications cannot be faked, that is the beauty of blockchain. Open up the Telegram history for full comparison with the official narrative.
For those using AnkerPay, it’s likely the derivation algo to get a private key from your seed is not the same as the one used by the official wallet. In order to access your funds, Rowan Energy may need to write software which can replicate the same derivation as AnkerPay in order to sign the transaction. It’s unlikely AnkerPay can be used now without exposing the same endpoint, unless AnkerPay release an updated wallet.
Subset of transactions. Viewable with this tool.
address,balance
0x000000000000000000000000000000000000dead,302199.98
0x00b33354653669f472d48c8bc08cc5bc5ad105f9,11328.71287
0x00ca4cbcc21694847272fd792d9a863f90250c5e,703898.0
0x00e769af8310ba0a4575a9f38565032b350ba312,150276.9999995
0x00e808b30916794f51bbc6ca10fd613dbeb4e4e7,0.0
0x03851451ce1270e51a03b5e2481bb3bd44fc35d3,0.0
0x0390fa2599d1ead94792eba90af85e30dc8b3dfe,0.0
0x049535ff21a41ed97b9ed3b04cda51099aa51794,0.0
0x0596ddf8ce19c1f304a5d5b17b3277d0ebcd17a9,0.0
0x05ea2404fea5ae40c970b8cf62ab1590c96b141a,19.0
0x064a510f40098fdb05c28d1a41aacef3d785a7ad,0.0004995
0x0756319e99dff7e1a453500543c786b3cb4e42c3,0.535198
0x0959eb69cfd96915ad182d423fa014fa1cdecaf7,0.01
0x0b19ad21624fce3affb15d9caf5ea23b43f6a5fd,11830.7897
0x0b24c14b6fda127588e75a5ca522ba5226a015ae,251500.969997
0x0e69e29e01e863f25d3466a37b8b2303d75ea3f9,0.0
0x109f1077fb2d4061c64e61fdcf499027c06a139d,1152203.1849955
0x11512931bc3a195e2106a730d9ca1544b80049bf,0.0049975
0x11a71ea06dfc70becb8ac8601004825e81473934,508919.86239588
0x13a25d37e82cd6837a9533937605e9fa263648e8,0.0
0x13e15f445df4a28159f652a923a0950fa7949115,28740.11
0x14a4f2e8a376f208fc75a990ad1eabdd277adf98,0.0
0x153c629afc4a659d79aaa8d52cb22d24666e0876,0.0
0x17101e9b6344e81a77f7f1fe4cf039f7d8595fe8,319883.14
0x1752787116b35ec6ba68c5d3fe200ac25ecc5c11,0.0
0x175c9a71930943f58c81f78c8c97dfacfe0a2a12,0.0
0x177c73966074f07f303e601f3152a54447a7c8a8,12827013.96407812
0x193e5404ea082b599eafbebe8d71ed79abf641eb,0.0
0x1aa676a54bfddd7dcde8ff4da19155366d40ce38,0.0
0x1abae04108c7d236f551bb6414281b2b33518cfc,0.006187
0x1c663d6cedc201c037af6bb12006eab236934a4a,0.0
0x1c85be2d731caf419c981a713f8c444182b6140a,0.0
0x1f4f06a21c5a376359cde9b90af9986fe6db5a64,0.0
0x2040caa831f88b7101d27e732cd0ae85cc5f710c,1.39
0x209ea04603938825c19c169ead502d1e81769efe,0.0
0x20fa6dff218a77cf5c2417bb082c72d800cfcb32,2639561.35
0x21cd7fa8b5b964d38e2e264d8a2313f9cdf0b1b9,0.0
0x22a9e2a6a2d94bb0b65e3e518b146b3d1b8fc590,0.4750119
0x236452db51247f761ecbeb638d55318172363bee,0.0
0x249f0d3f49c3918be70445f32aa52d97442dd16c,0.0
0x25204930bc0d7e0a51ef47058da0820d42279af7,4901185.7018
0x25cabe8fe015a2e99d6344fae882b2186daa0cf1,0.0
0x29483c373b5d491a0725f59060fd1030b1ee1dd9,4989341.115147015
0x2aeff1a3f02b44048dbfccb7445e38b6da48b479,1011991.0
0x2f30ea3093462b92292feef772862d37733d7436,772278.0553549356
0x2f5cb5c73c5f0a0d5ec8eaadb92d1a8f7ae9d4e9,0.0
0x2fb04559b1f68100625c728b76ac0359391d982b,85618.7161803
0x3075ed30714168f204b894b81eb1f902da402c94,0.0
0x30867e9c22072d22beeb94136807ada8592bd0e8,0.0
0x309a6618b0b7534d260ae8e907725cbd67d62481,2352857.531041
0x30ef58f25bf48cfc0930f968660adcb1f6d085b4,1000000.279998
0x30fb2de43a45da78447a4927cc4f0bb30bf1c860,0.0
0x324ff782ebce12562ff1ef37e900802e141977ef,10998.0
0x32780a4a20c5a315ee7198ff8c788408eebf8c9d,2999999.9999995
0x3430d7fa351e7aa8725ed60591a4d1208fffac64,221.64
0x34c72069ef230e541d343a0bc7a4f7e40fb7969e,293.999999
0x34feb9d90016ace79df20ff248d86516bdcb6cde,25545.8199995
0x361e5d2a2625084d886d63f7f02fc1e7320db156,5000995.0
0x387c310c26c6f33235ccfd16fa2581607ce52da7,0.0
0x38ac20f0afe2233dc6bc32565566a2c0f5373a3b,0.0
0x39d70b1eeb549d4abe7d7434c3e1ef6245db2f46,400.0
0x3ce0e5fee65e18199d1408b22ed09c39016dffc0,764616.9899895
0x3d1745c591eeb7cf2672028edd38113f1b9e3cd9,0.0
0x3d5f150c593cd5242a354b2c004a6d0881d26ada,0.0
0x3da1c9dfe2f226a5ea5a34d836948a8c0a90e708,0.6873168
0x3e4a00ebf83f6c61ee239769ffb9af87df4d1fee,3.75
0x3efece0d19265aa6444cad1c3ac6a557106e383e,185338.99
0x3f34f18b331676e87744113b1f5f6105ce1309ff,0.0004995
0x3fe8f09f4fc49a0fa16fd6b1968b8ae5185edc7c,0.0
0x437d2fc885049e291dd52bfcca4bd3b8a2cd991d,1e-08
0x444e6534b092ed9095448b69a6590381c5df6c23,1034459.002092
0x44581ea88ac4bc6536b4cda17143cc2364c4a2dd,1.3158725
0x46e1dae714c031654be16c12c66a174efd9cfe3f,0.000499
0x487aeac18c31e73a2080076065accb431b9b56a9,0.0
0x489155a9f1b0ddde3913113d858df4ab72d57b21,886126.12085973
0x49f35d582064cf4e14f0346c4deeb7039151d2a0,0.0
0x4a25dd1a3530ab86be85697b5d0367d3c243bb0f,100000.0
0x4b0c97717a4aa99f2c693f93ae90e9bbf2464363,10.8394815
0x4b6d27c6c2ffef125618ecddba29b5a86265ec09,229141.16
0x4b9d4a965f2d761e085335ab73066538df97088b,0.26325246
0x4ec18ab79bc10df831b1976254a2d62f964c493b,100432.64
0x4ed96048a99eae2b5173ac9e3331dcda99238cb3,332623.4305933614
0x4f3065455ea4cfb75205ce4a3325e834bfda7645,360503.0439
0x5070db9cae9a38481f156b3fe286c58ffa71e316,0.010987
0x5091a525ae2e1c50e830bd426be052ea88aa9f3f,0.0
0x5173d32ded47dee41aebec50c77a19246380875b,0.0
0x51773fecfdea0fa7cf772fb68052e9caeae764b3,0.0
0x52b5b55dc7969047f31edcd46a6e54eb27bdf01c,0.0
0x52dbd038dee80ec030fa67da02b17b1f30d83086,0.0
0x5391f3ac7419ba25f807082978b665869506a4f8,174149.25850551
0x5507e193934b3624eaeb7c44d0e6add17668aa3c,4999996.0
0x56267d12a4004b9a0f6f31c522bf2eafabde5686,155937.16
0x56948bbcdb58e6e8e0894868e25bf48905472751,474130.16712781
0x57817304080b66e2105f2375fcc9b9de82922804,0.0
0x57a424008372d576add8344bd0f27e38eea800ff,0.0
0x58266226b0a2f6ade27a2dbefc6347df6a52a690,0.0
0x5849a9d6ea4277c5007df8f7658880c6f8ab5f75,0.0
0x590a38dad4dc44c3c421b73b57812c13412442c2,4999996.0
0x5913cf397d14255afee7d5e65126826c5a0e7016,0.0
0x597e5c4f0f5ffd969089d2b4c5116863d63a4449,0.00047
0x59c935f8d01b21a1069d5fba99e63a0a4bd21e3a,500314.9806895693
0x5d4810e8822c43b924d6105d72cd1225d9193f53,2441195.482293851
0x5fff5798bd6ece1fa1722857a94a06a79cf3f733,0.872899
0x60dd533d6bdce45d1df06f291873f0652c370db9,0.0
0x6123ea12fefa11822306322a0970cab27e590db0,0.291687
0x620f1cfd8efceb45a27d2f8691456ecb362d45a7,4000000.59280993
0x62b56cbfb4a067ca62283d6d6f40440123afe3df,885132.2397952
0x62bf893268e6f1f92685e4f63c27e55b70b4e3f5,2.35e-05
0x62d7545a16b9b482e8d3d0e43294cfe6fb96878e,0.0
0x631e5001ce3dd596d70a2f66ead75a87bdd3a02b,0.0004995
0x638deda0e626eadb3a0804b8289a9fa9fc4e9c2b,0.0
0x64e2b98960c316e603cebc6a96dce1c865904a0b,18089984.9899995
0x652629e0b38eb47f1aaf45ba9a14bdf1776cbe2a,0.8199985
0x65538af381c9b9cd516173bd1cd525f029ce6cfe,250048.62
0x68252cc45b04e5603440a9631f98d782c883c23d,3032606.404434
0x699b7db03c86c553d7eccf9d35dc86917eb8645c,228.999999
0x6a126672cc4e50307713cf711973a8ac2d8d7f3b,101919.91955914
0x6a3093256d68305899a8a4d3676ca3d8b30a116a,320354.9478515
0x6a398fbabdcb0f2c9f818c7bf16fe1b831582be2,0.0
0x6a5e17a25b8f57d0a3d13eddd3c5c129803f870c,0.0
0x6b57d479933f1a9d21bc739aafc687236aa9a86a,7087.3267
0x6ba7cb3fb4ad0323b4e9978c1a2eb4d3b226ef72,6479.9599245
0x6d5c9400f19a08f4352a1e7244e127de6ce644e5,0.0
0x6dcfaabc150450529ed0839c29a11651015c0a7a,1000000.70698981
0x6e17063af3b222a13c281e4aa300952f7b88b3d2,0.0
0x6e4a62832f2809d29d1cc93717ea5bb83418533e,0.9799985
0x6e5a5567c310b5af9b97832b8c8e89b4b35c49fa,1.6599975
0x6ed1c0a0e7ecdabbd6e32bc57ce4b45ccb65e3f0,138094.3299995
0x6f37639c6235d057dfbadcaa7c70c5474e1821e2,0.0004995
0x70684a526bac5d25a8ad941e139e1e8f3e898add,0.0
0x712cdc4444ba83b45d1abeaefaed4c60aaf7558d,93289238.638
0x71985664317c838090f43bbadc6a5c86dec86448,0.0
0x7261f536ced4da7db8f8a4d9cd94b6de54294f55,0.419987
0x74c12acb95e63d617bac0a23c6e05c80eaef887a,0.1061995
0x7503ff9d5a2be2d53105076ce9cbcd7132cb0e6a,0.0
0x750aba81a5ce957b4f87ea86d36e8aa68355bc09,6.1499999899
0x75130921e87aecaedc4f0fb07af3f4591e6ca83d,107291.8811881189
0x77c0a045d64691a61c985cae80a3b99818439495,5e-07
0x780d0cf4b57f339d5affb477b0e8b295e8960349,0.0100000047
0x78b968ffcd64a5950abec5d1ad6e6723fed59b00,0.0
0x7b2a7339afb55cb8a8a5c5bd390b66ead1b92d66,999.9999955
0x7b4324e6d20a918269625bb799380a3518a8728d,0.279999
0x7bf174eb5eebd89dc51ad674d8b2042d0ac88ad5,0.0004995
0x7c19053b228f3b0a8eff2234ad3ca5e4eb0bde17,999999.0
0x7c5036f99a735aa8c86753bd0923326c870028a5,0.1
0x7e3cd0e945c4b6e4c5519ff5c72b80ec059f81c7,0.0004995
0x7e9654c1d18589cd08646aae07ce6e72fccb89bf,0.0
0x80bb29eeb698efca53a63b009d0e6c44cb83c358,0.0004995
0x81c01c72008ec3f92646e463b8f5c1ad3ab97b5d,221500.3907420742
0x8257bdab244b246d2bf9bf1ea88615ee8f6446eb,370000.75542149
0x8383937c423cc71ce8e9a74d1d0c6e12e38e8d7a,3839324.71606358
0x854ce43e8818591210b3a38e0f1c86f345f39100,4999.0
0x863b51989679adcfc8d64148b28444f69af89c19,4999996.0
0x86790abbaccd1b21f5ecfdaa67ec6282afbf3e83,1162735.95363023
0x86fa54176bf382fb01fb59ba033b0f5f156c0240,0.0689985
0x8786589c95136273e385c733adb18d0b42eb26a1,1125842.768199
0x8a0a47501b6bb85a548f5d2be1a84452ae81a468,0.89
0x8aa35b33cd5bf3d6fbdd387ca4afe1cee4e9be69,0.0
0x8b720b198cc16b1ba849cdc348574b724d6efb93,0.0
0x8d3562e175bd2762c9d4d35561efe25d6f6c3208,135.64
0x8d6ac54dce16b3a2eb50d07b3c74a051956a2097,247684.768617979
0x8ec828f0a64b8783a11aac59d0661345a252b4d3,0.0
0x901f20420b4d83825b117d27ee094c25211477ec,227552.0
0x90eb7b47bf3984b986a488585d778d9ee933d05d,1.4501386139
0x91082c191626ffcc6de525c56246e8dddb2490a6,0.5099995
0x91fc811bfd40e7fd5d2bc92da2de78f1c68c82ab,0.0
0x925cd6c0b8bb7ddd6c287f83150ce681fd7bd6e3,161652.699998
0x929b4a3d13937733c1841002c01d2c7290127e90,350807.92
0x92da1b5196bc5641bb19308774df17904d4d7ad3,0.0
0x9361dd21930cbe29436b53317e171923ad134292,634147.15
0x9444f7577cbbf4a8abd83e03844aae31dc8d958c,0.0
0x950177bfd6a4dfa7f4452f86af2117076fa92ce4,332320.8437892373
0x9862d73a25e9b6306620c1a160f83d9831d33472,3306612.0202762
0x99ccc0d988f77873cbba36b5edded05d9bed12e4,0.0
0x99d7d59026d3c9c5472b1931b1ea4928d42ab1ed,840128.9004
0x9a0955ed12a0296148fcb255d301cc80e2d6679a,660778.74001365
0x9a0fe0736ea46d026b7da21bbabf4f4e62869b3d,8.355e-05
0x9b0e084e5f2fee1d29f250049bbee9587bfd0b50,0.0
0x9b0efc90f0a75120faa5f9eca6d2ba431272dc5b,23661.01
0x9f65ee976d4eddd08c4141461560fd58d96a1458,0.0199725
0x9fde6806663d6cb2c65e30229690e0a63cbe7bde,1.999998
0xa15604aac90053a0ef03fe7a8a04208fe9637e11,0.299986
0xa1cea16244629631ddb7e4a8960d2dbafd08a43e,1654837.86637819
0xa289ca6906699c29e26d48f6b38366d781583f77,0.0
0xa29d88a78f5bf3ec55967bf52d746600a9eb0cce,3086884.66901512
0xa2b243c73e2c655b78e021b6f59d37e0f613a601,670.0
0xa4330c74ea65789d9ee3ae333153e15ac348cac5,0.0
0xa43b65237ac3a3207e502207b8ed7eabc8af4bb4,1150005.0
0xa455abbd85b2c4645b71a2e5271612421a21e694,0.0
0xa49eabd8bb8f57e02f70d660a9c1802b0c29fa93,0.0
0xa511b3a4c597302ea3681265dacf67e3bc75b7f3,9.65e-05
0xa64f76560e361cb66287bec2067775b1d6a2c868,0.0
0xa84416076fb4ef98fee2689979c75d78cad511aa,0.0
0xa89b5d9ed1f81f9a39ff0c241571dd2acc5ce211,0.0
0xa99a77cd2556b8b7a2d520c915b0c6c6aa4c449b,986006.0998553989
0xa99ec119ade7f0936b7494ea6bd9f065564e501a,8.7061466465
0xa9bb530c0bd384a57ab3d84a453ae1390eecf926,0.0
0xab04e0c336e12f11be4db567b628e7b23fc848dc,0.009999
0xabf0231ed234df393716f596e153a64375187d58,0.0
0xadef8ff49762eee55b938cfab15867e556397ba7,1969878.391996
0xaef282084c6837e9c06efb7029d783bab4bacbc4,3.95e-05
0xafad3d6f4ccab10d1d94c6845e8a9c810f503220,33815052.165155016
0xb03ca428ca0ce70fae68897e4654c93ed5f8aea2,1277061.8332075
0xb1b236881798e936422cb8e2b861ade72030a46c,312316.739996
0xb2953d086b5ce91fee2466ea53aaac6c66c204fa,81620.6
0xb445cc37de22d93e628c72c0fd27a24ec79d21ee,2886830.8004855495
0xb6f92970d2fca2a8ced4c7bec0003cd08f9d3a56,473.2899965
0xb71b5df5173e8ece34d2a1805628892879496088,922748.92
0xb87a1573bffa6ce272f69e0b99793bb699fdb976,0.00674443
0xbb1bffa3e4290e0cb9c4bb0e6fd145357accf334,9.82432554
0xbbc4a6e40023415172ac48d87cd0adc25f445ec8,64000.99
0xbbc6a05d29a95b4626e529cdf3bb41cf9d95424d,48755942.47973476
0xbcc1c70b5dd5f8f1cade0df4e75dc5333943307c,70522.459997
0xbfc63a5701d8eaf55f7798a03f2e64449ae12e98,0.0004995
0xc03b0727ff61ea60a354be95aac546cc7f2d1157,571988.0
0xc0fdad8c8a384174ac63760b4784231bf5936ed6,60044.9999995
0xc14eca125174dd7c9f45078253139d50624e52cb,1011495.67592
0xc1c58d05451911c0565bf7b4feacbb1edaecde74,927421.07
0xc1cef1a6cbbcd9910e059f719bfe22433f8b9e68,3.095e-05
0xc4063ae0a27309f96da93524463148a55e5a3da5,0.01
0xc4ff86e8e61398edea54f414c399befb773631d6,3565248.24
0xc55d9ee3980b3c70200e85e2dc05517ccb821fb6,0.0
0xc703907b5531515c50b1ec0dc52aa0b03420440c,0.3422533535
0xc8180d4e6b46da2481c5cec2b08d61c3a8d79318,0.0
0xc86ec6066ac04328c7baba2d69f8ceecd61dd2dc,0.0
0xcb24c807fc6a2fdc95dc5c1b769c14510df62dc7,0.0
0xcc951a406ab88d57dca53ca933ad08f9595ec61e,0.0
0xce210512f32c6481d9700884dad72c053eaf0ad8,0.0
0xce7764cd19cc4dc01d6a3c4a67eea8dd7983b32e,6874995.0
0xd05da736ef05694fe573fc45c8f8e0a890bd10cb,0.0004995
0xd09fba38ca4a10b7dcff3c2b8dd8620f8e88c608,0.0
0xd0c2608dc0d36a1c0db47d84afe247afbb606952,0.029999
0xd1213ef74b6af03a85d06d8091044dcd35f3a0b2,6.28704152
0xd1ebdcb3f02c3e3afdc561c563be16c0380a3f6d,0.379992
0xd3cc322071b1835cbfb948492f4b1ef9aafcc8ab,44996.0
0xd43629e61c2c62a080e78c70d8ac94ef1de0f62e,5.95e-05
0xd4e80477eddac8ade1d6406ba7c1ac0236dbbb0a,0.9999995
0xd4f47c29e1dfce382c05f2a6af4e4a9dcd358a0b,0.609137
0xd6b345cbdec3a5572446df0828ff5ca07ae2ed80,0.0
0xd995a38543588f26586b7888e80bcbf2e478dd9b,1854.4732843634
0xda70942ff1ad17abf1a9fbeac29a5a3f4b6a3316,0.0
0xda9ae18bc0675455e247149e8a3c43554104386d,2119129.16068771
0xdb10764bbc9bc5e1a54b85ea893e3f58bfed540f,0.0
0xdb1d902c9ca8733ebaa6d4630d6849fd77f8b320,104115.3199935
0xdce17689fe059e1b8522fe4aaa02d242336a1485,200100.999983
0xde2c4b99e0eaf07510bb799a11c12bd3b108eaba,550000.24588915
0xdf62d02e652c07e87ecbb4673caca5a99ae7a9d2,16759.92
0xdfb0b6344f4bfa8fceec90764eedc62f4811448c,973.739976
0xe06156d34fe618e4e247a74000969303eb921a02,0.0
0xe067c80539559949157dc2e952dbbda236b65f81,25010.435696
0xe118fd7550bcfebcf6ab56d0a101414c78761bf4,0.01
0xe35b54f764d663b2689327210b4c1d975fa8169e,0.0
0xe3e445ee401674044f67766001be78fdc43b91eb,0.0
0xe511f8a1c3b34c96098d7504e00a4a1d2d608209,104729.7499995
0xe55c19880a5f34ca656c4396f586ac8271bab542,0.0
0xe6273025a146d9d530fda99bd5ecf4fa3f65944a,266012102.9680431
0xe687eb0dbc1fb5241cd91cb8915cf8e7f37bcc44,233787.37115399
0xe71e81caf854aebe0bd70d2292232e4442585d36,0.9999975
0xe74bbbd4aa20e69fd289cf3f95e65b2dbb4015cc,0.0
0xe7c171cb32a2129cd92dcecf25e3b3858da4079a,0.0
0xe8b7933eb0f5c8cee44df40b91b0ea3a6b7757ab,53870.9499995
0xe939b50f7f26547dc415c30df6abe30acd15b05a,447142.91
0xe9d2413796b9b9b1349f6f3c195cd148a8705936,0.0
0xeaeeb8d4f15683f93411564947df8cbf72785995,204632.6133658366
0xeaf8d9a43b1d3e056374b489c56d1e48ef1ff6e1,10.0
0xeb68401a423995bd23572b1915e351bbcf38356a,8999.99
0xec577a56b597560fc0bc890a9961f97b74477b4b,0.0
0xecf852bb8c84f92cf94d79554fd23f2ae6071bf1,0.0
0xed6076814674a45993833caeb84ba59ca7a18926,1612686.99
0xf1771f5ec17a4986698a1aba161f8b312bf37a18,6422977.69397
0xf3a5038d2b9462fa13f06bae970e684de0347017,0.0004995
0xf43f6a37af651f378a99ab72123dc1fe71495c87,0.0
0xf59d7eca55dbca076745da959847a057dded77b2,0.0
0xf5b81b04c72f9bd663eb81b4237560bc9ecb70d3,0.9999995
0xf5fe327fb8a27dfcc4332fec0090ac055d1b8f6b,0.0
0xf80fc44aa5bcb676d2168c84eb6887cbe1831db3,0.0
0xf82ea2fb99f26cfe8a60fac1d040476b4776872b,0.0
0xf8f49b58e39ac17cc00786d6912f804c361cdee5,0.0
0xf9a65d5ad2d692131e64cc1879ed08f1f92c6b1b,2e-09
0xfd01b58367c07e83cc533932ccde88182ccaf11d,0.6732685
0xfe473d60df5f358521fca01509e0d39f3cdd1887,334528.37
0xfea587fa1a66c1fdfe80e6356ef0e85389c4505d,0.0873
0xff1f584ff9c696a39dfde31676e97c7d4cc8827e,0.0099955
0x6080604052600436106101dd576000357c01000000000000000000000000000000000000000000000000000000009004806306fdde03146101e2578063095ea7b314610272578063163aa00d146102e557806317da485f146103105780631801fbe51461033b57806318160ddd1461039857806323b872dd146103c357806329de379814610456578063313ce567146104a557806332e99708146104d65780633eaaf86b146105015780633f06e17c1461052c578063490203a7146105955780634ef37628146105c05780636fd396d6146105eb57806370a082311461064257806371d9e0df146106a757806379ba5097146106f657806379c650681461070d57806381269a561461077c578063829965cc146107ed57806387a2a9d614610818578063884897a5146108435780638a769d351461095d5780638ae0368b146109885780638da5cb5b146109b357806395d89b4114610a0a57806397566aa014610a9a578063a70a8d2314610afd578063a9059cbb14610b4c578063bafedcaa14610bbf578063cae9ca5114610bea578063cb9ae70714610cf4578063d416efdb14610d1f578063d4ee1d9014610db0578063dc39d06d14610e07578063dc6e9cf914610e7a578063dd62ed3e14610ea5578063f2fde38b14610f2a575b600080fd5b3480156101ee57600080fd5b506101f7610f7b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023757808201518184015260208101905061021c565b50505050905090810190601f1680156102645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027e57600080fd5b506102cb6004803603604081101561029557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b3480156102f157600080fd5b506102fa61110b565b6040518082815260200191505060405180910390f35b34801561031c57600080fd5b50610325611111565b6040518082815260200191505060405180910390f35b34801561034757600080fd5b5061037e6004803603604081101561035e57600080fd5b810190808035906020019092919080359060200190929190505050611142565b604051808215151515815260200191505060405180910390f35b3480156103a457600080fd5b506103ad6113a2565b6040518082815260200191505060405180910390f35b3480156103cf57600080fd5b5061043c600480360360608110156103e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113fd565b604051808215151515815260200191505060405180910390f35b34801561046257600080fd5b5061048f6004803603602081101561047957600080fd5b8101908080359060200190929190505050611a96565b6040518082815260200191505060405180910390f35b3480156104b157600080fd5b506104ba611aae565b604051808260ff1660ff16815260200191505060405180910390f35b3480156104e257600080fd5b506104eb611ac1565b6040518082815260200191505060405180910390f35b34801561050d57600080fd5b50610516611ade565b6040518082815260200191505060405180910390f35b34801561053857600080fd5b5061057b6004803603602081101561054f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae4565b604051808215151515815260200191505060405180910390f35b3480156105a157600080fd5b506105aa611c04565b6040518082815260200191505060405180910390f35b3480156105cc57600080fd5b506105d5611e5c565b6040518082815260200191505060405180910390f35b3480156105f757600080fd5b50610600611e66565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064e57600080fd5b506106916004803603602081101561066557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8c565b6040518082815260200191505060405180910390f35b3480156106b357600080fd5b506106e0600480360360208110156106ca57600080fd5b8101908080359060200190929190505050611ed5565b6040518082815260200191505060405180910390f35b34801561070257600080fd5b5061070b611eed565b005b34801561071957600080fd5b506107666004803603604081101561073057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061208c565b6040518082815260200191505060405180910390f35b34801561078857600080fd5b506107d36004803603608081101561079f57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612144565b604051808215151515815260200191505060405180910390f35b3480156107f957600080fd5b506108026121da565b6040518082815260200191505060405180910390f35b34801561082457600080fd5b5061082d6121e0565b6040518082815260200191505060405180910390f35b6109436004803603608081101561085957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108a057600080fd5b8201836020820111156108b257600080fd5b803590602001918460208302840111640100000000831117156108d457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121e6565b604051808215151515815260200191505060405180910390f35b34801561096957600080fd5b50610972612652565b6040518082815260200191505060405180910390f35b34801561099457600080fd5b5061099d612658565b6040518082815260200191505060405180910390f35b3480156109bf57600080fd5b506109c861265e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a1657600080fd5b50610a1f612683565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a5f578082015181840152602081019050610a44565b50505050905090810190601f168015610a8c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610aa657600080fd5b50610ae760048036036060811015610abd57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612721565b6040518082815260200191505060405180910390f35b348015610b0957600080fd5b50610b3660048036036020811015610b2057600080fd5b81019080803590602001909291905050506127a3565b6040518082815260200191505060405180910390f35b348015610b5857600080fd5b50610ba560048036036040811015610b6f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127bb565b604051808215151515815260200191505060405180910390f35b348015610bcb57600080fd5b50610bd46129fd565b6040518082815260200191505060405180910390f35b348015610bf657600080fd5b50610cda60048036036060811015610c0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c5457600080fd5b820183602082011115610c6657600080fd5b80359060200191846001830284011164010000000083111715610c8857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612a03565b604051808215151515815260200191505060405180910390f35b348015610d0057600080fd5b50610d09612c52565b6040518082815260200191505060405180910390f35b348015610d2b57600080fd5b50610d6e60048036036020811015610d4257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c58565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dbc57600080fd5b50610dc5612cc1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1357600080fd5b50610e6060048036036040811015610e2a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ce7565b604051808215151515815260200191505060405180910390f35b348015610e8657600080fd5b50610e8f612e4b565b6040518082815260200191505060405180910390f35b348015610eb157600080fd5b50610f1460048036036040811015610ec857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e51565b6040518082815260200191505060405180910390f35b348015610f3657600080fd5b50610f7960048036036020811015610f4d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ed8565b005b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110115780601f10610fe657610100808354040283529160200191611011565b820191906000526020600020905b815481529060010190602001808311610ff457829003601f168201915b505050505081565b600081601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600e5481565b600061113d60106000600754815260200190815260200160002054600954612f7790919063ffffffff16565b905090565b600080600b543385604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001935050505060405160208183030381529060405280519060200120905082811415156111c957600080fd5b600a54816001900411156111dc57600080fd5b6000600f600085815260200190815260200160002054905081600f6000600b5481526020019081526020016000208190555060006001028114151561122057600080fd5b600061122a611c04565b905061127e81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9b90919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112d681600554612f9b90919063ffffffff16565b60058190555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d8190555043600e81905550611333612fb7565b3373ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d82600754600b5460405180848152602001838152602001828152602001935050505060405180910390a26001935050505092915050565b60006113f8601260008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460055461301b90919063ffffffff16565b905090565b600061145182601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301b90919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061152382601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301b90919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115f582601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9b90919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116eb61138860126000601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9b90919063ffffffff16565b60126000601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061184061138860126000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9b90919063ffffffff16565b60126000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f187f451f92c6a4236353b5331d5fb67bdbfcc66b54367037fba41d6bcef08ce760405160405180910390a2601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f187f451f92c6a4236353b5331d5fb67bdbfcc66b54367037fba41d6bcef08ce760405160405180910390a2600190509392505050565b60116020528060005260406000206000915090505481565b600460009054906101000a900460ff1681565b600060106000600754815260200190815260200160002054905090565b60055481565b600081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc9a43a9d07839ddc6fa52cff9559f630776003d97ecd4909f433d10cc760f8903383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a160019050919050565b600080600f6000600b548152602001908152602001600020549050620271006007541115611c4e57600460009054906101000a900460ff1660ff16600a0a61c35002915050611e59565b620222e06007541115611c7e57600460009054906101000a900460ff1660ff16600a0a620124f802915050611e59565b6201d4c06007541115611cae57600460009054906101000a900460ff1660ff16600a0a6201e84802915050611e59565b620186a06007541115611cde57600460009054906101000a900460ff1660ff16600a0a6203d09002915050611e59565b620138806007541115611d0e57600460009054906101000a900460ff1660ff16600a0a6207a12002915050611e59565b61ea606007541115611d3d57600460009054906101000a900460ff1660ff16600a0a620f424002915050611e59565b619c406007541115611da157600460009054906101000a900460ff1660ff16600a0a622625a082604051602001808281526020019150506040516020818303038152906040528051906020012060019004811515611d9757fe5b0602915050611e59565b614e206007541115611e0557600460009054906101000a900460ff1660ff16600a0a623567e082604051602001808281526020019150506040516020818303038152906040528051906020012060019004811515611dfb57fe5b0602915050611e59565b600460009054906101000a900460ff1660ff16600a0a624c4b4082604051602001808281526020019150506040516020818303038152906040528051906020012060019004811515611e5357fe5b06029150505b90565b6000600b54905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60106020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f4957600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006120e082601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9b90919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061213882600554612f9b90919063ffffffff16565b60058190555092915050565b600080833387604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001935050505060405160208183030381529060405280519060200120905082816001900411156121cc57600080fd5b848114915050949350505050565b60075481565b60095481565b600061223a84601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301b90919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122cf84601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9b90919063ffffffff16565b601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612366611388601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301b90919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123fd611388601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9b90919063ffffffff16565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360008090505b83518110156126455761258461138860126000878581518110151561253157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9b90919063ffffffff16565b60126000868481518110151561259657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083818151811015156125ec57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f187f451f92c6a4236353b5331d5fb67bdbfcc66b54367037fba41d6bcef08ce760405160405180910390a28080600101915050612510565b5060019050949350505050565b600a5481565b600b5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127195780601f106126ee57610100808354040283529160200191612719565b820191906000526020600020905b8154815290600101906020018083116126fc57829003601f168201915b505050505081565b600080823386604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018281526020019350505050604051602081830303815290604052805190602001209050809150509392505050565b600f6020528060005260406000206000915090505481565b600080601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061287283601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301b90919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061290783601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9b90919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38073ffffffffffffffffffffffffffffffffffffffff167f187f451f92c6a4236353b5331d5fb67bdbfcc66b54367037fba41d6bcef08ce760405160405180910390a2600191505092915050565b600d5481565b600082601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612be0578082015181840152602081019050612bc5565b50505050905090810190601f168015612c0d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015612c2f57600080fd5b505af1158015612c43573d6000803e3d6000fd5b50505050600190509392505050565b60065481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d4457600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612e0857600080fd5b505af1158015612e1c573d6000803e3d6000fd5b505050506040513d6020811015612e3257600080fd5b8101908080519060200190929190505050905092915050565b60085481565b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612f3357600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082111515612f8757600080fd5b8183811515612f9257fe5b04905092915050565b60008183019050828110151515612fb157600080fd5b92915050565b4260116000600754815260200190815260200160002081905550612fe76001600754612f9b90919063ffffffff16565b600781905550612ff8600754613037565b600a8190555061301260014361301b90919063ffffffff16565b40600b81905550565b600082821115151561302c57600080fd5b818303905092915050565b60008061012c90506000611824905060006130a76011600061306360028961301b90919063ffffffff16565b8152602001908152602001600020546011600061308a60018a61301b90919063ffffffff16565b81526020019081526020016000205461301b90919063ffffffff16565b905061317a613131836131236131006130dd886130cf610412896131b690919063ffffffff16565b612f7790919063ffffffff16565b6130f26103e88961301b90919063ffffffff16565b612f9b90919063ffffffff16565b613115610f50886131b690919063ffffffff16565b612f7790919063ffffffff16565b612f9b90919063ffffffff16565b61316c6127106010600061314f60018c61301b90919063ffffffff16565b8152602001908152602001600020546131b690919063ffffffff16565b612f7790919063ffffffff16565b60106000878152602001908152602001600020819055504360068190555060106000868152602001908152602001600020549350505050919050565b6000818302905060008314806131d657508183828115156131d357fe5b04145b15156131e157600080fd5b9291505056fea165627a7a723058209b2e9dadc103c0f2e241ffc57acd4741fc0cf0ab9e6a4aa7b37196fd9b957bec0029