Code for 0x4fd6…4fce
Since block 13340700
Panoramix decompilation
# Palkeoramix decompiler. def storage: owner is address at storage 0 unknownea741922 is mapping of uint256 at storage 1 unknown26507538 is mapping of struct at storage 2 unknownafd1d223 is array of struct at storage 3 unknown4b19501e is array of struct at storage 4 unknown3bf8610b is mapping of struct at storage 5 stor6 is array of address at storage 6 def unknown26507538(uint256 _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == address(_param1) return unknown26507538[address(_param1)].field_512 def unknown3bf8610b(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) require _param2 == address(_param2) return unknown3bf8610b[_param1][_param2].field_0, unknown3bf8610b[_param1][_param2].field_256, unknown3bf8610b[_param1][_param2].field_512 def unknown4b19501e(uint256 _param1, uint256 _param2, uint256 _param3) payable: require calldata.size - 4 >=′ 96 require _param1 == address(_param1) require _param2 == address(_param2) require _param3 < unknown4b19501e[_param1][_param2].field_0 return unknown4b19501e[_param1][_param2][_param3].field_0, unknown4b19501e[_param1][_param2][_param3].field_256, unknown4b19501e[_param1][_param2][_param3].field_512, bool(unknown4b19501e[_param1][_param2][_param3].field_768) def getBalanceOf(address tokenAddr, address account) payable: require calldata.size - 4 >=′ 64 require tokenAddr == tokenAddr require account == account return unknown3bf8610b[address(tokenAddr)][address(account)].field_0 def unknown63c0a94f(uint256 _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == address(_param1) return unknown26507538[address(_param1)].field_256 def farmRewards(address _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == _param1 return unknown26507538[_param1].field_0, unknown26507538[_param1].field_256, unknown26507538[_param1].field_512, unknown26507538[_param1].field_768, unknown26507538[_param1].field_1024, unknown26507538[_param1].field_1280, bool(unknown26507538[_param1].field_1440), bool(unknown26507538[_param1].field_1448) def unknown77078872(uint256 _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == address(_param1) return unknown26507538[address(_param1)].field_0 def owner() payable: return owner def unknownafd1d223(uint256 _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == address(_param1) return unknownafd1d223[address(_param1)].field_0 def unknownd20c9ae3(uint256 _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == address(_param1) return bool(unknown26507538[address(_param1)].field_1440) def getTotalStaked(address user) payable: require calldata.size - 4 >=′ 32 require user == user return unknown26507538[address(user)].field_768 def unknowndf23f9be(uint256 _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == address(_param1) return unknown26507538[address(_param1)].field_1024 def unknownea741922(uint256 _param1, uint256 _param2, uint256 _param3) payable: require calldata.size - 4 >=′ 96 require _param1 == address(_param1) require _param2 == address(_param2) return unknownea741922[_param1][_param2][_param3] def hasReward(address _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == _param1 return bool(unknown26507538[address(_param1)].field_1448) # # Regular functions # def _fallback(?) payable: # default function revert def renounceOwnership() payable: if owner != caller: revert with 0, 'Ownable: caller is not the owner' owner = 0 log OwnershipTransferred( address previousOwner=owner, address newOwner=0) def transferOwnership(address newOwner) payable: require calldata.size - 4 >=′ 32 require newOwner == newOwner if owner != caller: revert with 0, 'Ownable: caller is not the owner' if not newOwner: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Ownable: new owner is the zero address' owner = newOwner log OwnershipTransferred( address previousOwner=owner, address newOwner=newOwner) def invalidateReward(address _token) payable: require calldata.size - 4 >=′ 32 require _token == _token if owner != caller: revert with 0, 'Ownable: caller is not the owner' if not unknown26507538[address(_token)].field_1448: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Reward for that farm does not exists' unknown26507538[address(_token)].field_1440 = 0 def unknownb29ad689(uint256 _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == address(_param1) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if not unknown26507538[address(_param1)].field_1448: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Reward for that farm does not exists' unknown26507538[address(_param1)].field_1440 = 1 def unknown19f63a27(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if not unknown26507538[address(_param1)].field_1448: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Reward for that farm does not exists' unknown26507538[address(_param1)].field_512 = _param2 def unknown9c96f420(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if _param2 >= unknownafd1d223[address(_param1)].field_0: revert with 0, 50 unknownafd1d223[address(_param1)][_param2].field_2560 = 0 log 0x4b637f9a: address(_param1), _param2 def unknowne4726259(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if _param2 >= unknownafd1d223[address(_param1)].field_0: revert with 0, 50 unknownafd1d223[address(_param1)][_param2].field_2560 = 0 log 0xf07f2552: address(_param1), _param2 def unknownc4640e30(uint256 _param1, uint256 _param2, uint256 _param3) payable: require calldata.size - 4 >=′ 96 require _param1 == address(_param1) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if _param2 >= unknownafd1d223[address(_param1)].field_0: revert with 0, 50 unknownafd1d223[address(_param1)][_param2].field_2048 = _param3 log 0x1b3d697c: address(_param1), _param2, _param3 def unknown70e13aa5(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) require _param2 == address(_param2) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if not unknown26507538[address(_param1)].field_1448: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Reward for that farm does not exists' unknown26507538[address(_param1)].field_1024 = address(_param2) def unknown6b42e66a(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if not unknown26507538[address(_param1)].field_1448: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Reward for that farm does not exists' require ext_code.size(unknown26507538[address(_param1)].field_0) call unknown26507538[address(_param1)].field_0.transferFrom(address sender, address recipient, uint256 amount) with: gas gas_remaining wei args caller, address(this.address), _param2 if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] def unknowne5c8c572(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) require _param2 == address(_param2) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if not unknown26507538[address(_param1)].field_1448: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Reward for that farm does not exists' idx = 0 while idx < uint256(stor6[address(_param1)]): if idx >= uint256(stor6[address(_param1)]): revert with 0, 50 unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_512 = 0 unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_256 = block.timestamp if idx == -1: revert with 0, 17 mem[0] = address(_param1) mem[32] = 6 idx = idx + 1 continue unknown26507538[address(_param1)].field_0 = address(_param2) def unknown4c9a0a1a(uint256 _param1, uint256 _param2, uint256 _param3, uint256 _param4, uint256 _param5, uint256 _param6, uint256 _param7) payable: require calldata.size - 4 >=′ 224 require _param1 == address(_param1) require _param2 == address(_param2) require _param6 == address(_param6) require _param7 == address(_param7) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if unknown26507538[address(_param1)].field_1448: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Reward for that farm already exists' require ext_code.size(address(_param2)) call address(_param2).transferFrom(address sender, address recipient, uint256 amount) with: gas gas_remaining wei args caller, address(this.address), _param3 if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] unknown26507538[address(_param1)].field_0 = address(_param2) unknown26507538[address(_param1)].field_256 = _param5 unknown26507538[address(_param1)].field_512 = _param4 unknown26507538[address(_param1)].field_768 = 0 unknown26507538[address(_param1)].field_1024 = address(_param6) unknown26507538[address(_param1)].field_1280 = address(_param7) unknown26507538[address(_param1)].field_1440 = 1 unknown26507538[address(_param1)].field_1448 = 1 unknown26507538[address(_param1)].field_1456 = 0 def unknown0faccefc(uint256 _param1) payable: require calldata.size - 4 >=′ 32 require _param1 == address(_param1) idx = 0 s = 0 while idx < unknown4b19501e[address(_param1)][caller].field_0: if idx >= unknown4b19501e[address(_param1)][caller].field_0: revert with 0, 50 if unknown4b19501e[address(_param1)][caller][idx].field_512 > 0xc22e450672894ab6cd8efb11d33f5617839a5bc7dea00c22e450672894ab: revert with 0, 17 if idx >= unknown4b19501e[address(_param1)][caller].field_0: revert with 0, 50 if block.timestamp < unknown4b19501e[address(_param1)][caller][idx].field_256: revert with 0, 17 if block.timestamp - unknown4b19501e[address(_param1)][caller][idx].field_256 < 24 * 3600 * unknown4b19501e[address(_param1)][caller][idx].field_512: if idx == -1: revert with 0, 17 mem[0] = caller mem[32] = sha3(address(_param1), 4) idx = idx + 1 s = s continue if idx >= unknown4b19501e[address(_param1)][caller].field_0: revert with 0, 50 if unknown4b19501e[address(_param1)][caller][idx].field_768: if idx == -1: revert with 0, 17 mem[0] = caller mem[32] = sha3(address(_param1), 4) idx = idx + 1 s = s continue if idx >= unknown4b19501e[address(_param1)][caller].field_0: revert with 0, 50 if s > !unknown4b19501e[address(_param1)][caller][idx].field_0: revert with 0, 17 if idx == -1: revert with 0, 17 mem[0] = caller mem[32] = sha3(address(_param1), 4) idx = idx + 1 s = s + unknown4b19501e[address(_param1)][caller][idx].field_0 continue return s def unknowne27742ca(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) require _param2 == address(_param2) mem[0] = address(_param2) mem[32] = sha3(address(_param1), 4) mem[64] = (32 * unknown4b19501e[address(_param1)][address(_param2)].field_0) + 128 mem[96] = unknown4b19501e[address(_param1)][address(_param2)].field_0 s = 128 idx = 0 while idx < unknown4b19501e[address(_param1)][address(_param2)].field_0: mem[0] = sha3(address(_param2), sha3(address(_param1), 4)) _15 = mem[64] mem[64] = mem[64] + 128 mem[_15] = unknown4b19501e[address(_param1)][address(_param2)][idx].field_0 mem[_15 + 32] = unknown4b19501e[address(_param1)][address(_param2)][idx].field_256 mem[_15 + 64] = unknown4b19501e[address(_param1)][address(_param2)][idx].field_512 mem[_15 + 96] = bool(unknown4b19501e[address(_param1)][address(_param2)][idx].field_768) mem[s] = _15 s = s + 32 idx = idx + 1 continue _16 = mem[64] mem[mem[64]] = 32 _17 = mem[96] mem[mem[64] + 32] = mem[96] idx = 0 s = 128 t = mem[64] + 64 while idx < _17: _24 = mem[s] mem[t] = mem[mem[s]] mem[t + 32] = mem[_24 + 32] mem[t + 64] = mem[_24 + 64] mem[t + 96] = bool(mem[_24 + 96]) idx = idx + 1 s = s + 32 t = t + 128 continue return memory from mem[64] len _16 + (128 * _17) + -mem[64] + 64 def earned(address account, address token) payable: require calldata.size - 4 >=′ 64 require account == account require token == token if unknown3bf8610b[address(account)][address(token)].field_256: if block.timestamp < unknown3bf8610b[address(account)][address(token)].field_256: revert with 0, 17 if unknown3bf8610b[address(account)][address(token)].field_0 and block.timestamp - unknown3bf8610b[address(account)][address(token)].field_256 > -1 / unknown3bf8610b[address(account)][address(token)].field_0: revert with 0, 17 if (block.timestamp * unknown3bf8610b[address(account)][address(token)].field_0) - (unknown3bf8610b[address(account)][address(token)].field_256 * unknown3bf8610b[address(account)][address(token)].field_0) and unknown26507538[address(account)].field_256 / 100 > -1 / (block.timestamp * unknown3bf8610b[address(account)][address(token)].field_0) - (unknown3bf8610b[address(account)][address(token)].field_256 * unknown3bf8610b[address(account)][address(token)].field_0): revert with 0, 17 if unknown3bf8610b[address(account)][address(token)].field_512 > !((block.timestamp * unknown3bf8610b[address(account)][address(token)].field_0 * unknown26507538[address(account)].field_256 / 100) - (unknown3bf8610b[address(account)][address(token)].field_256 * unknown3bf8610b[address(account)][address(token)].field_0 * unknown26507538[address(account)].field_256 / 100) / 24 * 3600): revert with 0, 17 return (unknown3bf8610b[address(account)][address(token)].field_512 + ((block.timestamp * unknown3bf8610b[address(account)][address(token)].field_0 * unknown26507538[address(account)].field_256 / 100) - (unknown3bf8610b[address(account)][address(token)].field_256 * unknown3bf8610b[address(account)][address(token)].field_0 * unknown26507538[address(account)].field_256 / 100) / 24 * 3600)) if block.timestamp < block.timestamp: revert with 0, 17 if unknown3bf8610b[address(account)][address(token)].field_0 and 0 > -1 / unknown3bf8610b[address(account)][address(token)].field_0: revert with 0, 17 if False and unknown26507538[address(account)].field_256 / 100 > 0: revert with 0, 17 if unknown3bf8610b[address(account)][address(token)].field_512 > -1: revert with 0, 17 return unknown3bf8610b[address(account)][address(token)].field_512 def unknowne8bf88b2(uint256 _param1, uint256 _param2, array _param3, uint256 _param4, uint256 _param5, uint256 _param6, uint256 _param7, uint256 _param8, uint256 _param9, uint256 _param10) payable: require calldata.size - 4 >=′ 320 require _param1 == address(_param1) require _param2 == address(_param2) require _param3 <= LOCK8605463013() require _param3 + 35 <′ calldata.size if _param3.length > LOCK8605463013(): revert with 0, 65 if ceil32(ceil32(_param3.length)) + 97 < 96 or ceil32(ceil32(_param3.length)) + 97 > LOCK8605463013(): revert with 0, 65 require _param3 + _param3.length + 36 <= calldata.size require _param5 == bool(_param5) if owner != caller: revert with 0, 'Ownable: caller is not the owner' unknownafd1d223[address(_param1)].field_0++ unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_0 = address(_param2) if unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_256: if unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_256 == uint255(unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_256) * 0.5 < 32: revert with 0, 34 if _param3.length: stor[sha3((11 * unknownafd1d223[address(_param1)].field_0) + ('map', ('mask_shl', 160, 0, 0, ('param', '_param1')), ('name', 'unknownafd1d223', 3)) + 1)][].field_0 = Array(len=_param3.length, data=_param3[all]) else: unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_256 = 0 idx = 0 while (uint255(unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_256) * 0.5) + 31 / 32 > idx: stor[idx + sha3((11 * unknownafd1d223[address(_param1)].field_0) + ('map', ('mask_shl', 160, 0, 0, ('param', '_param1')), ('name', 'unknownafd1d223', 3)) + 1)].field_0 = 0 idx = idx + 1 continue else: if unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_256 == unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_257 < 32: revert with 0, 34 if _param3.length: stor[sha3((11 * unknownafd1d223[address(_param1)].field_0) + ('map', ('mask_shl', 160, 0, 0, ('param', '_param1')), ('name', 'unknownafd1d223', 3)) + 1)][].field_0 = Array(len=_param3.length, data=_param3[all]) else: unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_256 = 0 idx = 0 while unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_257 + 31 / 32 > idx: stor[idx + sha3((11 * unknownafd1d223[address(_param1)].field_0) + ('map', ('mask_shl', 160, 0, 0, ('param', '_param1')), ('name', 'unknownafd1d223', 3)) + 1)].field_0 = 0 idx = idx + 1 continue unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_512 = _param4 unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_768 = uint8(bool(_param5)) unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_1024 = _param6 unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_1280 = _param7 unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_1536 = _param8 unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_1792 = _param9 unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_2048 = _param10 unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_2304 = 0 unknownafd1d223[address(_param1)][unknownafd1d223[address(_param1)].field_0].field_2560 = 1 if unknownafd1d223[address(_param1)].field_0 < 1: revert with 0, 17 log 0xc973c1e8: address(_param1), address(_param2), 352, _param4, bool(_param5), _param6, _param7, _param8, _param9, _param10, unknownafd1d223[address(_param1)].field_0 - 1, _param3.length, _param3[all], 0 def stake(address account, uint256 amount) payable: require calldata.size - 4 >=′ 64 require account == account if amount <= 0: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'staking amount must be greater than 0' if not unknown26507538[address(account)].field_1440: revert with 0, 'Reward is not valid' require ext_code.size(account) call account.transferFrom(address sender, address recipient, uint256 amount) with: gas gas_remaining wei args caller, address(this.address), amount if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] unknown4b19501e[address(account)][caller].field_0++ unknown4b19501e[address(account)][caller][unknown4b19501e[address(account)][caller].field_0].field_0 = amount unknown4b19501e[address(account)][caller][unknown4b19501e[address(account)][caller].field_0].field_256 = block.timestamp unknown4b19501e[address(account)][caller][unknown4b19501e[address(account)][caller].field_0].field_512 = unknown26507538[address(account)].field_512 unknown4b19501e[address(account)][caller][unknown4b19501e[address(account)][caller].field_0].field_768 = 0 if unknown3bf8610b[address(account)][caller].field_256: if block.timestamp < unknown3bf8610b[address(account)][caller].field_256: revert with 0, 17 if unknown3bf8610b[address(account)][caller].field_0 and block.timestamp - unknown3bf8610b[address(account)][caller].field_256 > -1 / unknown3bf8610b[address(account)][caller].field_0: revert with 0, 17 if (block.timestamp * unknown3bf8610b[address(account)][caller].field_0) - (unknown3bf8610b[address(account)][caller].field_256 * unknown3bf8610b[address(account)][caller].field_0) and unknown26507538[address(account)].field_256 / 100 > -1 / (block.timestamp * unknown3bf8610b[address(account)][caller].field_0) - (unknown3bf8610b[address(account)][caller].field_256 * unknown3bf8610b[address(account)][caller].field_0): revert with 0, 17 if unknown3bf8610b[address(account)][caller].field_512 > !((block.timestamp * unknown3bf8610b[address(account)][caller].field_0 * unknown26507538[address(account)].field_256 / 100) - (unknown3bf8610b[address(account)][caller].field_256 * unknown3bf8610b[address(account)][caller].field_0 * unknown26507538[address(account)].field_256 / 100) / 24 * 3600): revert with 0, 17 unknown3bf8610b[address(account)][caller].field_512 = unknown3bf8610b[address(account)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(account)][caller].field_0 * unknown26507538[address(account)].field_256 / 100) - (unknown3bf8610b[address(account)][caller].field_256 * unknown3bf8610b[address(account)][caller].field_0 * unknown26507538[address(account)].field_256 / 100) / 24 * 3600) else: if block.timestamp < block.timestamp: revert with 0, 17 if unknown3bf8610b[address(account)][caller].field_0 and 0 > -1 / unknown3bf8610b[address(account)][caller].field_0: revert with 0, 17 if False and unknown26507538[address(account)].field_256 / 100 > 0: revert with 0, 17 if unknown3bf8610b[address(account)][caller].field_512 > -1: revert with 0, 17 unknown3bf8610b[address(account)][caller].field_512 = unknown3bf8610b[address(account)][caller].field_512 unknown3bf8610b[address(account)][caller].field_256 = block.timestamp if unknown3bf8610b[address(account)][caller].field_0 > !amount: revert with 0, 17 unknown3bf8610b[address(account)][caller].field_0 += amount if unknown26507538[address(account)].field_768 > !amount: revert with 0, 17 unknown26507538[address(account)].field_768 += amount uint256(stor6[address(account)])++ address(stor6[address(account)][uint256(stor6[address(account)])]) = caller log Staked( address token=address(account), address staker_=unknown26507538[address(account)].field_512, uint256 requestedAmount_=amount, uint256 stakedAmount_=caller) def claim(address _recipient) payable: require calldata.size - 4 >=′ 32 require _recipient == _recipient if not unknown26507538[address(_recipient)].field_1440: revert with 0, 'Reward is not valid' if unknown3bf8610b[address(_recipient)][caller].field_256: if block.timestamp < unknown3bf8610b[address(_recipient)][caller].field_256: revert with 0, 17 if unknown3bf8610b[address(_recipient)][caller].field_0 and block.timestamp - unknown3bf8610b[address(_recipient)][caller].field_256 > -1 / unknown3bf8610b[address(_recipient)][caller].field_0: revert with 0, 17 if (block.timestamp * unknown3bf8610b[address(_recipient)][caller].field_0) - (unknown3bf8610b[address(_recipient)][caller].field_256 * unknown3bf8610b[address(_recipient)][caller].field_0) and unknown26507538[address(_recipient)].field_256 / 100 > -1 / (block.timestamp * unknown3bf8610b[address(_recipient)][caller].field_0) - (unknown3bf8610b[address(_recipient)][caller].field_256 * unknown3bf8610b[address(_recipient)][caller].field_0): revert with 0, 17 if unknown3bf8610b[address(_recipient)][caller].field_512 > !((block.timestamp * unknown3bf8610b[address(_recipient)][caller].field_0 * unknown26507538[address(_recipient)].field_256 / 100) - (unknown3bf8610b[address(_recipient)][caller].field_256 * unknown3bf8610b[address(_recipient)][caller].field_0 * unknown26507538[address(_recipient)].field_256 / 100) / 24 * 3600): revert with 0, 17 if unknown3bf8610b[address(_recipient)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_recipient)][caller].field_0 * unknown26507538[address(_recipient)].field_256 / 100) - (unknown3bf8610b[address(_recipient)][caller].field_256 * unknown3bf8610b[address(_recipient)][caller].field_0 * unknown26507538[address(_recipient)].field_256 / 100) / 24 * 3600) <= 0: revert with 0, 'user have no rewards to claim' require ext_code.size(unknown26507538[address(_recipient)].field_0) call unknown26507538[address(_recipient)].field_0.transfer(address recipient, uint256 amount) with: gas gas_remaining wei args caller, unknown3bf8610b[address(_recipient)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_recipient)][caller].field_0 * unknown26507538[address(_recipient)].field_256 / 100) - (unknown3bf8610b[address(_recipient)][caller].field_256 * unknown3bf8610b[address(_recipient)][caller].field_0 * unknown26507538[address(_recipient)].field_256 / 100) / 24 * 3600) if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] unknown3bf8610b[address(_recipient)][caller].field_512 = 0 unknown3bf8610b[address(_recipient)][caller].field_256 = block.timestamp log Claimed( address owner=address(_recipient), address recipient=unknown3bf8610b[address(_recipient)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_recipient)][caller].field_0 * unknown26507538[address(_recipient)].field_256 / 100) - (unknown3bf8610b[address(_recipient)][caller].field_256 * unknown3bf8610b[address(_recipient)][caller].field_0 * unknown26507538[address(_recipient)].field_256 / 100) / 24 * 3600), uint256 amount=caller) else: if block.timestamp < block.timestamp: revert with 0, 17 if unknown3bf8610b[address(_recipient)][caller].field_0 and 0 > -1 / unknown3bf8610b[address(_recipient)][caller].field_0: revert with 0, 17 if False and unknown26507538[address(_recipient)].field_256 / 100 > 0: revert with 0, 17 if unknown3bf8610b[address(_recipient)][caller].field_512 > -1: revert with 0, 17 if unknown3bf8610b[address(_recipient)][caller].field_512 <= 0: revert with 0, 'user have no rewards to claim' require ext_code.size(unknown26507538[address(_recipient)].field_0) call unknown26507538[address(_recipient)].field_0.transfer(address recipient, uint256 amount) with: gas gas_remaining wei args caller, unknown3bf8610b[address(_recipient)][caller].field_512 if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] unknown3bf8610b[address(_recipient)][caller].field_512 = 0 unknown3bf8610b[address(_recipient)][caller].field_256 = block.timestamp log Claimed( address owner=address(_recipient), address recipient=unknown3bf8610b[address(_recipient)][caller].field_512, uint256 amount=caller) def unknown95f29898(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if not unknown26507538[address(_param1)].field_1448: revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Reward for that farm does not exists' idx = 0 while idx < uint256(stor6[address(_param1)]): if idx >= uint256(stor6[address(_param1)]): revert with 0, 50 if not unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_256: if block.timestamp < block.timestamp: revert with 0, 17 if unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 and 0 > -1 / unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0: revert with 0, 17 if False and unknown26507538[address(_param1)].field_256 / 100 > 0: revert with 0, 17 if unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_512 > -1: revert with 0, 17 else: if block.timestamp < unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_256: revert with 0, 17 if unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 and block.timestamp - unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_256 > -1 / unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0: revert with 0, 17 if (block.timestamp * unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0) - (unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_256 * unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0) and unknown26507538[address(_param1)].field_256 / 100 > -1 / (block.timestamp * unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0) - (unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_256 * unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0): revert with 0, 17 if unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_512 > !((block.timestamp * unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 * unknown26507538[address(_param1)].field_256 / 100) - (unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_256 * unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 * unknown26507538[address(_param1)].field_256 / 100) / 24 * 3600): revert with 0, 17 unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_512 += (block.timestamp * unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 * unknown26507538[address(_param1)].field_256 / 100) - (unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_256 * unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 * unknown26507538[address(_param1)].field_256 / 100) / 24 * 3600 unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_256 = block.timestamp if idx == -1: revert with 0, 17 mem[0] = address(_param1) mem[32] = 6 idx = idx + 1 continue unknown26507538[address(_param1)].field_256 = _param2 def unknown10a4a33d(uint256 _param1, uint256 _param2, uint256 _param3) payable: mem[64] = 96 require calldata.size - 4 >=′ 96 require _param1 == address(_param1) if owner != caller: revert with 0, 'Ownable: caller is not the owner' if _param2 > !_param3: revert with 0, 17 mem[0] = address(_param1) mem[32] = 6 if _param2 + _param3 <= uint256(stor6[address(_param1)]): idx = _param2 while idx < _param2 + _param3: if idx >= uint256(stor6[address(_param1)]): revert with 0, 50 mem[0] = address(stor6[address(_param1)][idx]) mem[32] = sha3(address(_param1), 5) if unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0: mem[mem[64] + 4] = address(stor6[address(_param1)][idx]) mem[mem[64] + 36] = unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 require ext_code.size(address(_param1)) call address(_param1).transfer(address recipient, uint256 amount) with: gas gas_remaining wei args address(stor6[address(_param1)][idx]), unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 mem[mem[64]] = ext_call.return_data[0] if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] _41 = mem[64] mem[64] = mem[64] + ceil32(return_data.size) require return_data.size >=′ 32 require mem[_41] == bool(mem[_41]) require mem[_41] if unknown26507538[address(_param1)].field_768 < unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0: revert with 0, 17 mem[0] = address(_param1) mem[32] = 2 unknown26507538[address(_param1)].field_768 -= unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 mem[mem[64]] = address(_param1) mem[mem[64] + 32] = unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 log 0x472be967: address(_param1), unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0, address(stor6[address(_param1)][idx]) if idx == -1: revert with 0, 17 idx = idx + 1 continue else: mem[0] = address(_param1) mem[32] = 6 idx = _param2 while idx < uint256(stor6[address(_param1)]): if idx >= uint256(stor6[address(_param1)]): revert with 0, 50 mem[0] = address(stor6[address(_param1)][idx]) mem[32] = sha3(address(_param1), 5) if unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0: mem[mem[64] + 4] = address(stor6[address(_param1)][idx]) mem[mem[64] + 36] = unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 require ext_code.size(address(_param1)) call address(_param1).transfer(address recipient, uint256 amount) with: gas gas_remaining wei args address(stor6[address(_param1)][idx]), unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 mem[mem[64]] = ext_call.return_data[0] if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] _42 = mem[64] mem[64] = mem[64] + ceil32(return_data.size) require return_data.size >=′ 32 require mem[_42] == bool(mem[_42]) require mem[_42] if unknown26507538[address(_param1)].field_768 < unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0: revert with 0, 17 mem[0] = address(_param1) mem[32] = 2 unknown26507538[address(_param1)].field_768 -= unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 mem[mem[64]] = address(_param1) mem[mem[64] + 32] = unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0 log 0x472be967: address(_param1), unknown3bf8610b[address(_param1)][address(stor6[address(_param1)][idx])].field_0, address(stor6[address(_param1)][idx]) if idx == -1: revert with 0, 17 idx = idx + 1 continue def buyNFT(address beneficiary, uint256 mintAmount) payable: require calldata.size - 4 >=′ 64 require beneficiary == beneficiary if not unknown26507538[address(beneficiary)].field_1440: revert with 0, 'Reward is not valid' if mintAmount >= unknownafd1d223[address(beneficiary)].field_0: revert with 0, 50 if not unknownafd1d223[address(beneficiary)][mintAmount].field_2560: revert with 0, 'NFT is not valid' if mintAmount >= unknownafd1d223[address(beneficiary)].field_0: revert with 0, 50 if unknownafd1d223[address(beneficiary)][mintAmount].field_256: if unknownafd1d223[address(beneficiary)][mintAmount].field_256 == uint255(unknownafd1d223[address(beneficiary)][mintAmount].field_256) * 0.5 < 32: revert with 0, 34 else: if unknownafd1d223[address(beneficiary)][mintAmount].field_256 == unknownafd1d223[address(beneficiary)][mintAmount].field_257 < 32: revert with 0, 34 if unknownafd1d223[address(beneficiary)][mintAmount].field_256: if unknownafd1d223[address(beneficiary)][mintAmount].field_256 == uint255(unknownafd1d223[address(beneficiary)][mintAmount].field_256) * 0.5 < 32: revert with 0, 34 if Mask(256, -1, unknownafd1d223[address(beneficiary)][mintAmount].field_256): if 31 < uint255(unknownafd1d223[address(beneficiary)][mintAmount].field_256) * 0.5: ... # Decompilation aborted, sorry: ("decompilation didn't finish",) else: if unknownafd1d223[address(beneficiary)][mintAmount].field_256 == unknownafd1d223[address(beneficiary)][mintAmount].field_257 < 32: revert with 0, 34 if unknownafd1d223[address(beneficiary)][mintAmount].field_257: if 31 < unknownafd1d223[address(beneficiary)][mintAmount].field_257: ... # Decompilation aborted, sorry: ("decompilation didn't finish",) if 1 > !unknownea741922[caller][address(beneficiary)][mintAmount]: revert with 0, 17 if unknownea741922[caller][address(beneficiary)][mintAmount] + 1 > unknownafd1d223[address(beneficiary)][mintAmount].field_1280: revert with 0, 'Max purchases per user reached' if 1 > !unknownafd1d223[address(beneficiary)][mintAmount].field_2304: revert with 0, 17 if unknownafd1d223[address(beneficiary)][mintAmount].field_2304 + 1 > unknownafd1d223[address(beneficiary)][mintAmount].field_1536: revert with 0, 'Total supply reached its limit' if unknownafd1d223[address(beneficiary)][mintAmount].field_1792 > 0: if unknown26507538[address(beneficiary)].field_1024: if unknown26507538[address(beneficiary)].field_1280: require ext_code.size(unknown26507538[address(beneficiary)].field_1024) static call unknown26507538[address(beneficiary)].field_1024.balanceOf(address account) with: gas gas_remaining wei args caller if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 if ext_call.return_data[0] < unknownafd1d223[address(beneficiary)][mintAmount].field_1792: revert with 0, 'Not enough balance on Fee Token to buy' if eth.balance(this.address) < 0: revert with 0, 'Address: insufficient balance for call' if not ext_code.size(unknown26507538[address(beneficiary)].field_1024): revert with 0, 'Address: call to non-contract' ... # Decompilation aborted, sorry: ("decompilation didn't finish",) if unknownafd1d223[address(beneficiary)][mintAmount].field_1024: require ext_code.size(unknown26507538[address(beneficiary)].field_0) static call unknown26507538[address(beneficiary)].field_0.balanceOf(address account) with: gas gas_remaining wei args caller if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 if ext_call.return_data[0] < unknownafd1d223[address(beneficiary)][mintAmount].field_1024: revert with 0, 'Not enough balance on Reward Token to buy' if eth.balance(this.address) < 0: revert with 0, 'Address: insufficient balance for call' if not ext_code.size(unknown26507538[address(beneficiary)].field_0): revert with 0, 'Address: call to non-contract' ... # Decompilation aborted, sorry: ("decompilation didn't finish",) if not unknownafd1d223[address(beneficiary)][mintAmount].field_768: ... # Decompilation aborted, sorry: ("decompilation didn't finish",) require ext_code.size(unknownafd1d223[address(beneficiary)][mintAmount].field_0) call unknownafd1d223[address(beneficiary)][mintAmount].field_0.mint(address account, uint256 id, uint256 amount, bytes data) with: gas gas_remaining wei args caller, unknownafd1d223[address(beneficiary)][mintAmount].field_512, 1, 128, 0 if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] log 0x72fb95f3: address(beneficiary), mintAmount, unknownafd1d223[address(beneficiary)][mintAmount].field_512, unknown26507538[address(beneficiary)].field_0, unknown26507538[address(beneficiary)].field_1024, caller if 1 > !unknownea741922[caller][address(beneficiary)][mintAmount]: revert with 0, 17 unknownea741922[caller][address(beneficiary)][mintAmount]++ if 1 > !unknownafd1d223[address(beneficiary)][mintAmount].field_2304: revert with 0, 17 if mintAmount >= unknownafd1d223[address(beneficiary)].field_0: revert with 0, 50 unknownafd1d223[address(beneficiary)][mintAmount].field_2304++ return unknownafd1d223[address(beneficiary)][mintAmount].field_512 def unknown2b2a6736(uint256 _param1, uint256 _param2) payable: require calldata.size - 4 >=′ 64 require _param1 == address(_param1) require _param2 < unknownafd1d223[_param1].field_0 if unknownafd1d223[_param1][_param2].field_256: if unknownafd1d223[_param1][_param2].field_256 == uint255(unknownafd1d223[_param1][_param2].field_256) * 0.5 < 32: revert with 0, 34 if unknownafd1d223[_param1][_param2].field_256: if unknownafd1d223[_param1][_param2].field_256 == uint255(unknownafd1d223[_param1][_param2].field_256) * 0.5 < 32: revert with 0, 34 if Mask(256, -1, unknownafd1d223[_param1][_param2].field_256): if 31 >= uint255(unknownafd1d223[_param1][_param2].field_256) * 0.5: mem[128] = 256 * unknownafd1d223[_param1][_param2].field_264 else: mem[128] = stor[sha3((11 * _param2) + ('map', ('param', '_param1'), ('name', 'unknownafd1d223', 3)) + 1)].field_0 idx = 128 s = 0 while (uint255(unknownafd1d223[_param1][_param2].field_256) * 0.5) + 96 > idx: mem[idx + 32] = stor[s + sha3((11 * _param2) + ('map', ('param', '_param1'), ('name', 'unknownafd1d223', 3)) + 1)].field_256 idx = idx + 32 s = s + 1 continue else: if unknownafd1d223[_param1][_param2].field_256 == unknownafd1d223[_param1][_param2].field_257 < 32: revert with 0, 34 if unknownafd1d223[_param1][_param2].field_257: if 31 >= unknownafd1d223[_param1][_param2].field_257: mem[128] = 256 * unknownafd1d223[_param1][_param2].field_264 else: mem[128] = stor[sha3((11 * _param2) + ('map', ('param', '_param1'), ('name', 'unknownafd1d223', 3)) + 1)].field_0 idx = 128 s = 0 while unknownafd1d223[_param1][_param2].field_257 + 96 > idx: mem[idx + 32] = stor[s + sha3((11 * _param2) + ('map', ('param', '_param1'), ('name', 'unknownafd1d223', 3)) + 1)].field_256 idx = idx + 32 s = s + 1 continue return unknownafd1d223[_param1][_param2].field_0, Array(len=2 * Mask(256, -1, unknownafd1d223[_param1][_param2].field_256), data=mem[128 len ceil32(uint255(unknownafd1d223[_param1][_param2].field_256) * 0.5)]), unknownafd1d223[_param1][_param2].field_512, bool(unknownafd1d223[_param1][_param2].field_768), unknownafd1d223[_param1][_param2].field_1024, unknownafd1d223[_param1][_param2].field_1280, unknownafd1d223[_param1][_param2].field_1536, unknownafd1d223[_param1][_param2].field_1792, unknownafd1d223[_param1][_param2].field_2048, unknownafd1d223[_param1][_param2].field_2304, bool(unknownafd1d223[_param1][_param2].field_2560) if unknownafd1d223[_param1][_param2].field_256 == unknownafd1d223[_param1][_param2].field_257 < 32: revert with 0, 34 if unknownafd1d223[_param1][_param2].field_256: if unknownafd1d223[_param1][_param2].field_256 == uint255(unknownafd1d223[_param1][_param2].field_256) * 0.5 < 32: revert with 0, 34 if Mask(256, -1, unknownafd1d223[_param1][_param2].field_256): if 31 >= uint255(unknownafd1d223[_param1][_param2].field_256) * 0.5: mem[128] = 256 * unknownafd1d223[_param1][_param2].field_264 else: mem[128] = stor[sha3((11 * _param2) + ('map', ('param', '_param1'), ('name', 'unknownafd1d223', 3)) + 1)].field_0 idx = 128 s = 0 while (uint255(unknownafd1d223[_param1][_param2].field_256) * 0.5) + 96 > idx: mem[idx + 32] = stor[s + sha3((11 * _param2) + ('map', ('param', '_param1'), ('name', 'unknownafd1d223', 3)) + 1)].field_256 idx = idx + 32 s = s + 1 continue else: if unknownafd1d223[_param1][_param2].field_256 == unknownafd1d223[_param1][_param2].field_257 < 32: revert with 0, 34 if unknownafd1d223[_param1][_param2].field_257: if 31 >= unknownafd1d223[_param1][_param2].field_257: mem[128] = 256 * unknownafd1d223[_param1][_param2].field_264 else: mem[128] = stor[sha3((11 * _param2) + ('map', ('param', '_param1'), ('name', 'unknownafd1d223', 3)) + 1)].field_0 idx = 128 s = 0 while unknownafd1d223[_param1][_param2].field_257 + 96 > idx: mem[idx + 32] = stor[s + sha3((11 * _param2) + ('map', ('param', '_param1'), ('name', 'unknownafd1d223', 3)) + 1)].field_256 idx = idx + 32 s = s + 1 continue return unknownafd1d223[_param1][_param2].field_0, Array(len=unknownafd1d223[_param1][_param2].field_256, data=mem[128 len ceil32(unknownafd1d223[_param1][_param2].field_257)]), unknownafd1d223[_param1][_param2].field_512, bool(unknownafd1d223[_param1][_param2].field_768), unknownafd1d223[_param1][_param2].field_1024, unknownafd1d223[_param1][_param2].field_1280, unknownafd1d223[_param1][_param2].field_1536, unknownafd1d223[_param1][_param2].field_1792, unknownafd1d223[_param1][_param2].field_2048, unknownafd1d223[_param1][_param2].field_2304, bool(unknownafd1d223[_param1][_param2].field_2560) def getNFT(address tokenAddr, uint256 index) payable: require calldata.size - 4 >=′ 64 require tokenAddr == tokenAddr if index >= unknownafd1d223[address(tokenAddr)].field_0: revert with 0, 50 if unknownafd1d223[address(tokenAddr)][index].field_256: if unknownafd1d223[address(tokenAddr)][index].field_256 == uint255(unknownafd1d223[address(tokenAddr)][index].field_256) * 0.5 < 32: revert with 0, 34 if unknownafd1d223[address(tokenAddr)][index].field_256: if unknownafd1d223[address(tokenAddr)][index].field_256 == uint255(unknownafd1d223[address(tokenAddr)][index].field_256) * 0.5 < 32: revert with 0, 34 if Mask(256, -1, unknownafd1d223[address(tokenAddr)][index].field_256): if 31 >= uint255(unknownafd1d223[address(tokenAddr)][index].field_256) * 0.5: mem[832] = 256 * unknownafd1d223[address(tokenAddr)][index].field_264 else: mem[832] = stor[sha3((11 * index) + ('map', ('mask_shl', 160, 0, 0, ('param', 'tokenAddr')), ('name', 'unknownafd1d223', 3)) + 1)].field_0 idx = 832 s = 0 while (uint255(unknownafd1d223[address(tokenAddr)][index].field_256) * 0.5) + 800 > idx: mem[idx + 32] = stor[s + sha3((11 * index) + ('map', ('mask_shl', 160, 0, 0, ('param', 'tokenAddr')), ('name', 'unknownafd1d223', 3)) + 1)].field_256 idx = idx + 32 s = s + 1 continue else: if unknownafd1d223[address(tokenAddr)][index].field_256 == unknownafd1d223[address(tokenAddr)][index].field_257 < 32: revert with 0, 34 if unknownafd1d223[address(tokenAddr)][index].field_257: if 31 >= unknownafd1d223[address(tokenAddr)][index].field_257: mem[832] = 256 * unknownafd1d223[address(tokenAddr)][index].field_264 else: mem[832] = stor[sha3((11 * index) + ('map', ('mask_shl', 160, 0, 0, ('param', 'tokenAddr')), ('name', 'unknownafd1d223', 3)) + 1)].field_0 idx = 832 s = 0 while unknownafd1d223[address(tokenAddr)][index].field_257 + 800 > idx: mem[idx + 32] = stor[s + sha3((11 * index) + ('map', ('mask_shl', 160, 0, 0, ('param', 'tokenAddr')), ('name', 'unknownafd1d223', 3)) + 1)].field_256 idx = idx + 32 s = s + 1 continue return 32, unknownafd1d223[address(tokenAddr)][index].field_0, 352, unknownafd1d223[address(tokenAddr)][index].field_512, bool(unknownafd1d223[address(tokenAddr)][index].field_768), unknownafd1d223[address(tokenAddr)][index].field_1024, unknownafd1d223[address(tokenAddr)][index].field_1280, unknownafd1d223[address(tokenAddr)][index].field_1536, unknownafd1d223[address(tokenAddr)][index].field_1792, unknownafd1d223[address(tokenAddr)][index].field_2048, unknownafd1d223[address(tokenAddr)][index].field_2304, bool(unknownafd1d223[address(tokenAddr)][index].field_2560), 2 * Mask(256, -1, unknownafd1d223[address(tokenAddr)][index].field_256), mem[832 len ceil32(uint255(unknownafd1d223[address(tokenAddr)][index].field_256) * 0.5)] if unknownafd1d223[address(tokenAddr)][index].field_256 == unknownafd1d223[address(tokenAddr)][index].field_257 < 32: revert with 0, 34 if unknownafd1d223[address(tokenAddr)][index].field_256: if unknownafd1d223[address(tokenAddr)][index].field_256 == uint255(unknownafd1d223[address(tokenAddr)][index].field_256) * 0.5 < 32: revert with 0, 34 if Mask(256, -1, unknownafd1d223[address(tokenAddr)][index].field_256): if 31 >= uint255(unknownafd1d223[address(tokenAddr)][index].field_256) * 0.5: mem[832] = 256 * unknownafd1d223[address(tokenAddr)][index].field_264 else: mem[832] = stor[sha3((11 * index) + ('map', ('mask_shl', 160, 0, 0, ('param', 'tokenAddr')), ('name', 'unknownafd1d223', 3)) + 1)].field_0 idx = 832 s = 0 while (uint255(unknownafd1d223[address(tokenAddr)][index].field_256) * 0.5) + 800 > idx: mem[idx + 32] = stor[s + sha3((11 * index) + ('map', ('mask_shl', 160, 0, 0, ('param', 'tokenAddr')), ('name', 'unknownafd1d223', 3)) + 1)].field_256 idx = idx + 32 s = s + 1 continue else: if unknownafd1d223[address(tokenAddr)][index].field_256 == unknownafd1d223[address(tokenAddr)][index].field_257 < 32: revert with 0, 34 if unknownafd1d223[address(tokenAddr)][index].field_257: if 31 >= unknownafd1d223[address(tokenAddr)][index].field_257: mem[832] = 256 * unknownafd1d223[address(tokenAddr)][index].field_264 else: mem[832] = stor[sha3((11 * index) + ('map', ('mask_shl', 160, 0, 0, ('param', 'tokenAddr')), ('name', 'unknownafd1d223', 3)) + 1)].field_0 idx = 832 s = 0 while unknownafd1d223[address(tokenAddr)][index].field_257 + 800 > idx: mem[idx + 32] = stor[s + sha3((11 * index) + ('map', ('mask_shl', 160, 0, 0, ('param', 'tokenAddr')), ('name', 'unknownafd1d223', 3)) + 1)].field_256 idx = idx + 32 s = s + 1 continue return 32, unknownafd1d223[address(tokenAddr)][index].field_0, 352, unknownafd1d223[address(tokenAddr)][index].field_512, bool(unknownafd1d223[address(tokenAddr)][index].field_768), unknownafd1d223[address(tokenAddr)][index].field_1024, unknownafd1d223[address(tokenAddr)][index].field_1280, unknownafd1d223[address(tokenAddr)][index].field_1536, unknownafd1d223[address(tokenAddr)][index].field_1792, unknownafd1d223[address(tokenAddr)][index].field_2048, unknownafd1d223[address(tokenAddr)][index].field_2304, bool(unknownafd1d223[address(tokenAddr)][index].field_2560), unknownafd1d223[address(tokenAddr)][index].field_256, mem[832 len ceil32(unknownafd1d223[address(tokenAddr)][index].field_257)] def withdraw(address _asset) payable: require calldata.size - 4 >=′ 32 require _asset == _asset if not unknown26507538[address(_asset)].field_1440: revert with 0, 'Reward is not valid' if unknown3bf8610b[address(_asset)][caller].field_256: if block.timestamp < unknown3bf8610b[address(_asset)][caller].field_256: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_0 and block.timestamp - unknown3bf8610b[address(_asset)][caller].field_256 > -1 / unknown3bf8610b[address(_asset)][caller].field_0: revert with 0, 17 if (block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0) and unknown26507538[address(_asset)].field_256 / 100 > -1 / (block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0): revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 > !((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600): revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600): if not unknown26507538[address(_asset)].field_1440: revert with 0, 'Reward is not valid' if unknown3bf8610b[address(_asset)][caller].field_256: if block.timestamp < unknown3bf8610b[address(_asset)][caller].field_256: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_0 and block.timestamp - unknown3bf8610b[address(_asset)][caller].field_256 > -1 / unknown3bf8610b[address(_asset)][caller].field_0: revert with 0, 17 if (block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0) and unknown26507538[address(_asset)].field_256 / 100 > -1 / (block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0): revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 > !((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600): revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600) <= 0: revert with 0, 'user have no rewards to claim' require ext_code.size(unknown26507538[address(_asset)].field_0) call unknown26507538[address(_asset)].field_0.transfer(address recipient, uint256 amount) with: gas gas_remaining wei args caller, unknown3bf8610b[address(_asset)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600) if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] unknown3bf8610b[address(_asset)][caller].field_512 = 0 unknown3bf8610b[address(_asset)][caller].field_256 = block.timestamp log Claimed( address owner=address(_asset), address recipient=unknown3bf8610b[address(_asset)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600), uint256 amount=caller) else: if block.timestamp < block.timestamp: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_0 and 0 > -1 / unknown3bf8610b[address(_asset)][caller].field_0: revert with 0, 17 if False and unknown26507538[address(_asset)].field_256 / 100 > 0: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 > -1: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 <= 0: revert with 0, 'user have no rewards to claim' require ext_code.size(unknown26507538[address(_asset)].field_0) call unknown26507538[address(_asset)].field_0.transfer(address recipient, uint256 amount) with: gas gas_remaining wei args caller, unknown3bf8610b[address(_asset)][caller].field_512 if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] unknown3bf8610b[address(_asset)][caller].field_512 = 0 unknown3bf8610b[address(_asset)][caller].field_256 = block.timestamp log Claimed( address owner=address(_asset), address recipient=unknown3bf8610b[address(_asset)][caller].field_512, uint256 amount=caller) else: if block.timestamp < block.timestamp: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_0 and 0 > -1 / unknown3bf8610b[address(_asset)][caller].field_0: revert with 0, 17 if False and unknown26507538[address(_asset)].field_256 / 100 > 0: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 > -1: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512: if not unknown26507538[address(_asset)].field_1440: revert with 0, 'Reward is not valid' if unknown3bf8610b[address(_asset)][caller].field_256: if block.timestamp < unknown3bf8610b[address(_asset)][caller].field_256: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_0 and block.timestamp - unknown3bf8610b[address(_asset)][caller].field_256 > -1 / unknown3bf8610b[address(_asset)][caller].field_0: revert with 0, 17 if (block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0) and unknown26507538[address(_asset)].field_256 / 100 > -1 / (block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0): revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 > !((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600): revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600) <= 0: revert with 0, 'user have no rewards to claim' require ext_code.size(unknown26507538[address(_asset)].field_0) call unknown26507538[address(_asset)].field_0.transfer(address recipient, uint256 amount) with: gas gas_remaining wei args caller, unknown3bf8610b[address(_asset)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600) if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] unknown3bf8610b[address(_asset)][caller].field_512 = 0 unknown3bf8610b[address(_asset)][caller].field_256 = block.timestamp log Claimed( address owner=address(_asset), address recipient=unknown3bf8610b[address(_asset)][caller].field_512 + ((block.timestamp * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) - (unknown3bf8610b[address(_asset)][caller].field_256 * unknown3bf8610b[address(_asset)][caller].field_0 * unknown26507538[address(_asset)].field_256 / 100) / 24 * 3600), uint256 amount=caller) else: if block.timestamp < block.timestamp: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_0 and 0 > -1 / unknown3bf8610b[address(_asset)][caller].field_0: revert with 0, 17 if False and unknown26507538[address(_asset)].field_256 / 100 > 0: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 > -1: revert with 0, 17 if unknown3bf8610b[address(_asset)][caller].field_512 <= 0: revert with 0, 'user have no rewards to claim' require ext_code.size(unknown26507538[address(_asset)].field_0) call unknown26507538[address(_asset)].field_0.transfer(address recipient, uint256 amount) with: gas gas_remaining wei args caller, unknown3bf8610b[address(_asset)][caller].field_512 if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] unknown3bf8610b[address(_asset)][caller].field_512 = 0 unknown3bf8610b[address(_asset)][caller].field_256 = block.timestamp log Claimed( address owner=address(_asset), address recipient=unknown3bf8610b[address(_asset)][caller].field_512, uint256 amount=caller) idx = 0 s = 0 while idx < unknown4b19501e[address(_asset)][caller].field_0: if idx >= unknown4b19501e[address(_asset)][caller].field_0: revert with 0, 50 if unknown4b19501e[address(_asset)][caller][idx].field_512 > 0xc22e450672894ab6cd8efb11d33f5617839a5bc7dea00c22e450672894ab: revert with 0, 17 if idx >= unknown4b19501e[address(_asset)][caller].field_0: revert with 0, 50 if block.timestamp < unknown4b19501e[address(_asset)][caller][idx].field_256: revert with 0, 17 if block.timestamp - unknown4b19501e[address(_asset)][caller][idx].field_256 < 24 * 3600 * unknown4b19501e[address(_asset)][caller][idx].field_512: if idx == -1: revert with 0, 17 mem[0] = caller mem[32] = sha3(address(_asset), 4) idx = idx + 1 s = s continue if idx >= unknown4b19501e[address(_asset)][caller].field_0: revert with 0, 50 if unknown4b19501e[address(_asset)][caller][idx].field_768: if idx == -1: revert with 0, 17 mem[0] = caller mem[32] = sha3(address(_asset), 4) idx = idx + 1 s = s continue if idx >= unknown4b19501e[address(_asset)][caller].field_0: revert with 0, 50 if s > !unknown4b19501e[address(_asset)][caller][idx].field_0: revert with 0, 17 if idx >= unknown4b19501e[address(_asset)][caller].field_0: revert with 0, 50 unknown4b19501e[address(_asset)][caller][idx].field_768 = 1 if idx == -1: revert with 0, 17 mem[0] = caller mem[32] = sha3(address(_asset), 4) idx = idx + 1 s = s + unknown4b19501e[address(_asset)][caller][idx].field_0 continue if s <= 0: revert with 0, 'user have no tokens to withdraw' require ext_code.size(_asset) call _asset.transfer(address recipient, uint256 amount) with: gas gas_remaining wei args caller, s if not ext_call.success: revert with ext_call.return_data[0 len return_data.size] require return_data.size >=′ 32 require ext_call.return_data[0] == bool(ext_call.return_data[0]) require ext_call.return_data[0] if unknown26507538[address(_asset)].field_768 < s: revert with 0, 17 unknown26507538[address(_asset)].field_768 -= s if unknown3bf8610b[address(_asset)][caller].field_0 < s: revert with 0, 17 unknown3bf8610b[address(_asset)][caller].field_0 -= s log 0x472be967: address(_asset), s, caller
Decompilation generated by Panoramix.
Raw bytecode
0x608060405234801561001057600080fd5b50600436106102325760003560e01c80638da5cb5b11610130578063dd2a8b11116100b8578063e8bf88b21161007c578063e8bf88b2146106d1578063ea741922146106e4578063f2fde38b14610715578063f8112eed14610728578063f856f6ce1461073b57600080fd5b8063dd2a8b1114610630578063df23f9be1461065c578063e27742ca1461068b578063e4726259146106ab578063e5c8c572146106be57600080fd5b8063adc9772e116100ff578063adc9772e146105ab578063afd1d223146105be578063b29ad689146105e7578063c4640e30146105fa578063d20c9ae31461060d57600080fd5b80638da5cb5b1461056157806395f29898146105725780639c96f42014610585578063a82ba76f1461059857600080fd5b80634b19501e116101be57806364df21e51161018257806364df21e5146104375780636b42e66a146104ef57806370e13aa514610502578063715018a614610515578063770788721461051d57600080fd5b80634b19501e146103775780634c9a0a1a146103ac57806351cff8d9146103bf57806353290b44146103d257806363c0a94f1461040b57600080fd5b8063211dc32d11610205578063211dc32d146102985780632207bdcf146102ab57806326507538146102cb5780632b2a6736146102f85780633bf8610b1461032257600080fd5b80630faccefc1461023757806310a4a33d1461025d57806319f63a27146102725780631e83409a14610285575b600080fd5b61024a610245366004613069565b61074e565b6040519081526020015b60405180910390f35b61027061026b3660046132a1565b610933565b005b610270610280366004613278565b610b59565b610270610293366004613069565b610bc8565b61024a6102a6366004613083565b610d5b565b6102be6102b9366004613278565b610e59565b6040516102549190613596565b61024a6102d9366004613069565b6001600160a01b03166000908152600260208190526040909120015490565b61030b610306366004613278565b61102e565b6040516102549b9a99989796959493929190613408565b61035c610330366004613083565b600560209081526000928352604080842090915290825290208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610254565b61038a6103853660046131cd565b61113d565b6040805194855260208501939093529183015215156060820152608001610254565b6102706103ba366004613208565b611195565b6102706103cd366004613069565b611394565b61024a6103e0366004613083565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b61024a610419366004613069565b6001600160a01b031660009081526002602052604090206001015490565b61049f610445366004613069565b60026020819052600091825260409091208054600182015492820154600383015460048401546005909401546001600160a01b0393841695949293919282169181169060ff600160a01b8204811691600160a81b90041688565b604080516001600160a01b03998a16815260208101989098528701959095526060860193909352908516608085015290931660a083015291151560c082015290151560e082015261010001610254565b6102706104fd366004613278565b6117bd565b610270610510366004613083565b6118ae565b61027061192e565b61054961052b366004613069565b6001600160a01b039081166000908152600260205260409020541690565b6040516001600160a01b039091168152602001610254565b6000546001600160a01b0316610549565b610270610580366004613278565b611964565b610270610593366004613278565b611a99565b61024a6105a6366004613278565b611b66565b6102706105b9366004613278565b61230f565b61024a6105cc366004613069565b6001600160a01b031660009081526003602052604090205490565b6102706105f5366004613069565b6125c8565b6102706106083660046132a1565b612600565b61062061061b366004613069565b6126ca565b6040519015158152602001610254565b61024a61063e366004613069565b6001600160a01b031660009081526002602052604090206003015490565b61054961066a366004613069565b6001600160a01b039081166000908152600260205260409020600401541690565b61069e610699366004613083565b6126f2565b6040516102549190613477565b6102706106b9366004613278565b61279b565b6102706106cc366004613083565b612860565b6102706106df3660046130b5565b61298b565b61024a6106f23660046131cd565b600160209081526000938452604080852082529284528284209052825290205481565b610270610723366004613069565b612b68565b610270610736366004613069565b612c00565b610620610749366004613069565b612c35565b600080805b6001600160a01b038416600090815260046020908152604080832033845290915290205481101561092c576001600160a01b038416600090815260046020908152604080832033845290915281208054839081106107c157634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160020154620151806107e1919061368d565b6001600160a01b03861660009081526004602090815260408083203384529091528120805492935090918490811061082957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201600101544261084691906136ac565b90508181101580156108af57506001600160a01b0386166000908152600460209081526040808320338452909152902080548490811061089657634e487b7160e01b600052603260045260246000fd5b600091825260209091206003600490920201015460ff16155b15610917576001600160a01b038616600090815260046020908152604080832033845290915290208054849081106108f757634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160000154846109149190613655565b93505b505080806109249061372a565b915050610753565b5092915050565b6000546001600160a01b031633146109665760405162461bcd60e51b815260040161095d906134f0565b60405180910390fd5b60006109728284613655565b6001600160a01b0385166000908152600660205260409020549091508111156109b057506001600160a01b0383166000908152600660205260409020545b825b81811015610b52576001600160a01b03851660009081526006602052604081208054839081106109f257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b038981168452600583526040808520919092168085529252909120549091508015610b3d5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905288169063a9059cbb90604401602060405180830381600087803b158015610a7657600080fd5b505af1158015610a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aae91906132d3565b610ab757600080fd5b6001600160a01b038716600090815260026020526040902060030154610ade9082906136ac565b6001600160a01b03808916600081815260026020908152604091829020600301949094558051918252928101849052908416917f0472be967f9a37138dfea1875af44784cafb79f92044ab33d7d6958eddd9ca6c910160405180910390a25b50508080610b4a9061372a565b9150506109b2565b5050505050565b6000546001600160a01b03163314610b835760405162461bcd60e51b815260040161095d906134f0565b610b8c82612c35565b610ba85760405162461bcd60e51b815260040161095d90613525565b6001600160a01b0390911660009081526002602081905260409091200155565b610bd1816126ca565b610bed5760405162461bcd60e51b815260040161095d90613569565b6000610bf98233610d5b565b905060008111610c4b5760405162461bcd60e51b815260206004820152601d60248201527f757365722068617665206e6f207265776172647320746f20636c61696d000000604482015260640161095d565b6001600160a01b038281166000908152600260205260409081902054905163a9059cbb60e01b81523360048201526024810184905291169063a9059cbb90604401602060405180830381600087803b158015610ca657600080fd5b505af1158015610cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cde91906132d3565b610ce757600080fd5b6001600160a01b038216600081815260056020908152604080832033808552908352818420600281019490945542600190940193909355805193845290830184905290917ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd399268391015b60405180910390a25050565b6001600160a01b0382166000908152600260205260408120600101548190610d859060649061366d565b6001600160a01b0380861660009081526005602090815260408083209388168352929052206001015490915080610db95750425b6000610dc582426136ac565b6001600160a01b038088166000908152600560209081526040808320938a168352929052908120549192509062015180908590610e0390859061368d565b610e0d919061368d565b610e17919061366d565b6001600160a01b038089166000908152600560209081526040808320938b1683529290522060020154909150610e4e908290613655565b979650505050505050565b610ec360405180610160016040528060006001600160a01b0316815260200160608152602001600081526020016000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b6001600160a01b0383166000908152600360205260409020805483908110610efb57634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101608101909152600b9092020180546001600160a01b031682526001810180549293919291840191610f3c906136ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610f68906136ef565b8015610fb55780601f10610f8a57610100808354040283529160200191610fb5565b820191906000526020600020905b815481529060010190602001808311610f9857829003601f168201915b505050918352505060028201546020820152600382015460ff908116151560408301526004830154606083015260058301546080830152600683015460a0830152600783015460c0830152600883015460e08301526009830154610100830152600a909201549091161515610120909101529392505050565b6003602052816000526040600020818154811061104a57600080fd5b60009182526020909120600b9091020180546001820180546001600160a01b03909216945091925061107b906136ef565b80601f01602080910402602001604051908101604052809291908181526020018280546110a7906136ef565b80156110f45780601f106110c9576101008083540402835291602001916110f4565b820191906000526020600020905b8154815290600101906020018083116110d757829003601f168201915b50505060028401546003850154600486015460058701546006880154600789015460088a015460098b0154600a909b0154999a969960ff9687169950949750929591949093168b565b6004602052826000526040600020602052816000526040600020818154811061116557600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919550935090915060ff1684565b6000546001600160a01b031633146111bf5760405162461bcd60e51b815260040161095d906134f0565b6111c887612c35565b156112215760405162461bcd60e51b815260206004820152602360248201527f52657761726420666f722074686174206661726d20616c72656164792065786960448201526273747360e81b606482015260840161095d565b6040516323b872dd60e01b81526001600160a01b038716906323b872dd9061125190339030908a906004016133c0565b602060405180830381600087803b15801561126b57600080fd5b505af115801561127f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a391906132d3565b6112ac57600080fd5b60408051610100810182526001600160a01b0397881681526020808201958652818301968752600060608301818152958a1660808401908152948a1660a08401908152600160c0850181815260e086018281529d8d1684526002948590529590922093518454908c166001600160a01b03199182161785559751918401919091559651908201559251600384015590516004830180549188169190941617909255915160059092018054915195511515600160a81b0260ff60a81b19961515600160a01b026001600160a81b0319909316939095169290921717939093169190911790915550565b61139d816126ca565b6113b95760405162461bcd60e51b815260040161095d90613569565b60006113c58233610d5b565b905080156113d6576113d682610bc8565b6000805b6001600160a01b038416600090815260046020908152604080832033845290915290205481101561161c576001600160a01b0384166000908152600460209081526040808320338452909152812080548390811061144857634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402016002015462015180611468919061368d565b6001600160a01b0386166000908152600460209081526040808320338452909152812080549293509091849081106114b057634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160010154426114cd91906136ac565b905081811015801561153657506001600160a01b0386166000908152600460209081526040808320338452909152902080548490811061151d57634e487b7160e01b600052603260045260246000fd5b600091825260209091206003600490920201015460ff16155b15611607576001600160a01b0386166000908152600460209081526040808320338452909152902080548490811061157e57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201600001548461159b9190613655565b6001600160a01b038716600090815260046020908152604080832033845290915290208054919550600191859081106115e457634e487b7160e01b600052603260045260246000fd5b60009182526020909120600490910201600301805460ff19169115159190911790555b505080806116149061372a565b9150506113da565b506000811161166d5760405162461bcd60e51b815260206004820152601f60248201527f757365722068617665206e6f20746f6b656e7320746f20776974686472617700604482015260640161095d565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b1580156116b557600080fd5b505af11580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed91906132d3565b6116f657600080fd5b6001600160a01b03831660009081526002602052604090206003015461171d9082906136ac565b6001600160a01b03841660009081526002602090815260408083206003019390935560058152828220338352905220546117589082906136ac565b6001600160a01b038416600081815260056020908152604080832033808552908352928190209490945583519283528201849052917f0472be967f9a37138dfea1875af44784cafb79f92044ab33d7d6958eddd9ca6c910160405180910390a2505050565b6000546001600160a01b031633146117e75760405162461bcd60e51b815260040161095d906134f0565b6117f082612c35565b61180c5760405162461bcd60e51b815260040161095d90613525565b6001600160a01b03808316600090815260026020526040908190205490516323b872dd60e01b81529116906323b872dd9061184f903390309086906004016133c0565b602060405180830381600087803b15801561186957600080fd5b505af115801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a191906132d3565b6118aa57600080fd5b5050565b6000546001600160a01b031633146118d85760405162461bcd60e51b815260040161095d906134f0565b6118e182612c35565b6118fd5760405162461bcd60e51b815260040161095d90613525565b6001600160a01b03918216600090815260026020526040902060040180546001600160a01b03191691909216179055565b6000546001600160a01b031633146119585760405162461bcd60e51b815260040161095d906134f0565b6119626000612c5d565b565b6000546001600160a01b0316331461198e5760405162461bcd60e51b815260040161095d906134f0565b61199782612c35565b6119b35760405162461bcd60e51b815260040161095d90613525565b60005b6001600160a01b038316600090815260066020526040902054811015611a79576001600160a01b0383166000908152600660205260408120805483908110611a0e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03169050611a2f8482610d5b565b6001600160a01b0385811660009081526005602090815260408083209590931682529390935290912060028101919091554260019091015580611a718161372a565b9150506119b6565b506001600160a01b03909116600090815260026020526040902060010155565b6000546001600160a01b03163314611ac35760405162461bcd60e51b815260040161095d906134f0565b6001600160a01b0382166000908152600360205260408120805483908110611afb57634e487b7160e01b600052603260045260246000fd5b6000918252602091829020600b9190910201600a01805460ff191692151592909217909155604080516001600160a01b03851681529182018390527f4b637f9aa928687bb7b89657013d900fc0ac9b5352558ebd7d9329786f40e5c391015b60405180910390a15050565b6000611b71836126ca565b611b8d5760405162461bcd60e51b815260040161095d90613569565b6001600160a01b0383166000908152600360205260409020805483908110611bc557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600a600b90920201015460ff16611c1b5760405162461bcd60e51b815260206004820152601060248201526f139195081a5cc81b9bdd081d985b1a5960821b604482015260640161095d565b6001600160a01b0383166000908152600360205260408120805484908110611c5357634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101608101909152600b9092020180546001600160a01b031682526001810180549293919291840191611c94906136ef565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc0906136ef565b8015611d0d5780601f10611ce257610100808354040283529160200191611d0d565b820191906000526020600020905b815481529060010190602001808311611cf057829003601f168201915b5050509183525050600282810154602080840191909152600384015460ff908116151560408086019190915260048087015460608701526005808801546080880152600688015460a080890191909152600789015460c0890152600889015460e08901526009890154610100890152600a9098015490931615156101209096019590955233600090815260018085528282206001600160a01b038e81168085529187528484208e855287528484205491845296909552919020805495810154920154958701519697509195938316949083169392169190611def908690613655565b1115611e3d5760405162461bcd60e51b815260206004820152601e60248201527f4d61782070757263686173657320706572207573657220726561636865640000604482015260640161095d565b60c0850151610120860151611e53906001613655565b1115611ea15760405162461bcd60e51b815260206004820152601e60248201527f546f74616c20737570706c79207265616368656420697473206c696d69740000604482015260640161095d565b60008560e00151118015611ebd57506001600160a01b03821615155b8015611ed157506001600160a01b03811615155b15611fcc5760e08501516040516370a0823160e01b81523360048201526001600160a01b038416906370a082319060240160206040518083038186803b158015611f1a57600080fd5b505afa158015611f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5291906132ef565b1015611faf5760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f7567682062616c616e6365206f6e2046656520546f6b656e20604482015265746f2062757960d01b606482015260840161095d565b60e0850151611fcc906001600160a01b0384169033908490612cad565b6080850151156120cf5760808501516040516370a0823160e01b81523360048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561201a57600080fd5b505afa15801561202e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205291906132ef565b10156120b25760405162461bcd60e51b815260206004820152602960248201527f4e6f7420656e6f7567682062616c616e6365206f6e2052657761726420546f6b604482015268656e20746f2062757960b81b606482015260840161095d565b60808501516120cf906001600160a01b0385169033903090612cad565b604085015160608601511561215b57855160405163731133e960e01b8152336004820152602481018390526001604482015260806064820152600060848201526001600160a01b039091169063731133e99060a401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b505050506121e5565b8551602087015160405163d0def52160e01b81526001600160a01b039092169163d0def52191612190913391906004016133e4565b602060405180830381600087803b1580156121aa57600080fd5b505af11580156121be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e291906132ef565b90505b604080516001600160a01b038b81168252602082018b90529181018390528582166060820152908416608082015233907f72fb95f3ab8b4f61d65e496de1ffef8561ebebd03e1a02aad8ba1efbcc509d6c9060a00160405180910390a23360009081526001602081815260408084206001600160a01b038e16855282528084208c85529091529091205461227891613655565b3360009081526001602081815260408084206001600160a01b038f16855282528084208d8552909152909120919091556101208701516122b791613655565b6001600160a01b038a16600090815260036020526040902080548a9081106122ef57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600b909102016009015598975050505050505050565b6000811161236d5760405162461bcd60e51b815260206004820152602560248201527f7374616b696e6720616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161095d565b612376826126ca565b6123925760405162461bcd60e51b815260040161095d90613569565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd906123c2903390309086906004016133c0565b602060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241491906132d3565b61241d57600080fd5b6001600160a01b038216600081815260046020818152604080842033808652908352818520825160808101845288815242818601908152978752600280865284882081015494820194855260608201888152835460018082018655948a529690982091519590960201938455955195830195909555519181019190915590516003909101805460ff19169115159190911790556124bb908390610d5b565b6001600160a01b038316600090815260056020908152604080832033845290915290206002810191909155426001820155546124f8908290613655565b6001600160a01b038316600081815260056020908152604080832033845282528083209490945591815260029091522060030154612537908290613655565b6001600160a01b038316600081815260026020818152604080842060038101969096556006825280842080546001810182559085528285200180546001600160a01b031916339081179091559385905282825294909101548451938452908301529181018390527f6c86f3fd5118b3aa8bb4f389a617046de0a3d3d477de1a1673d227f802f616dc90606001610d4f565b6000546001600160a01b031633146125f25760405162461bcd60e51b815260040161095d906134f0565b6125fd816001612d0b565b50565b6000546001600160a01b0316331461262a5760405162461bcd60e51b815260040161095d906134f0565b6001600160a01b038316600090815260036020526040902080548291908490811061266557634e487b7160e01b600052603260045260246000fd5b60009182526020918290206008600b909202010191909155604080516001600160a01b038616815291820184905281018290527f1b3d697c33fda85e220a8c743c02387081f8adc3fe713d63d064455d5524072b9060600160405180910390a1505050565b6001600160a01b0316600090815260026020526040902060050154600160a01b900460ff1690565b6001600160a01b0380831660009081526004602090815260408083209385168352928152828220805484518184028101840190955280855260609493919290919084015b8282101561278f576000848152602090819020604080516080810182526004860290920180548352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101612736565b50505050905092915050565b6000546001600160a01b031633146127c55760405162461bcd60e51b815260040161095d906134f0565b6001600160a01b03821660009081526003602052604081208054839081106127fd57634e487b7160e01b600052603260045260246000fd5b6000918252602091829020600b9190910201600a01805460ff191692151592909217909155604080516001600160a01b03851681529182018390527ff07f255232ad62ebcc0f7e508a5d0e136889b9265c7b5cf0315770b74169dd8f9101611b5a565b6000546001600160a01b0316331461288a5760405162461bcd60e51b815260040161095d906134f0565b61289382612c35565b6128af5760405162461bcd60e51b815260040161095d90613525565b60005b6001600160a01b03831660009081526006602052604090205481101561295c576001600160a01b038316600090815260066020526040812080548390811061290a57634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b038781168452600583526040808520919092168452909152812060028101919091554260019091015550806129548161372a565b9150506128b2565b506001600160a01b03918216600090815260026020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b031633146129b55760405162461bcd60e51b815260040161095d906134f0565b6001600160a01b038a811660009081526003602090815260408083208151610160810183528e861681528084018e81529281018d90528b15156060820152608081018b905260a081018a905260c0810189905260e08101889052610100810187905261012081018590526001610140820181905282548082018455928652948490208151600b9093020180546001600160a01b0319169290961691909117855590518051919493612a6c9390850192910190612fa9565b50604082810151600283015560608301516003808401805492151560ff199384161790556080850151600485015560a0850151600585015560c0850151600685015560e085015160078501556101008501516008850155610120850151600985015561014090940151600a909301805493151593909116929092179091556001600160a01b038c166000908152602092909252812054612b0e906001906136ac565b90507fc973c1e895323366e309ea70ccdfa4abc4b32eb8616e4baeecfb5668a32df2448b8b8b8b8b8b8b8b8b8b8b604051612b539b9a9998979695949392919061334f565b60405180910390a15050505050505050505050565b6000546001600160a01b03163314612b925760405162461bcd60e51b815260040161095d906134f0565b6001600160a01b038116612bf75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095d565b6125fd81612c5d565b6000546001600160a01b03163314612c2a5760405162461bcd60e51b815260040161095d906134f0565b6125fd816000612d0b565b6001600160a01b0316600090815260026020526040902060050154600160a81b900460ff1690565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612d05846323b872dd60e01b858585604051602401612cce939291906133c0565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612d68565b50505050565b612d1482612c35565b612d305760405162461bcd60e51b815260040161095d90613525565b6001600160a01b0390911660009081526002602052604090206005018054911515600160a01b0260ff60a01b19909216919091179055565b6000612dbd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e3f9092919063ffffffff16565b805190915015612e3a5780806020019051810190612ddb91906132d3565b612e3a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095d565b505050565b6060612e4e8484600085612e58565b90505b9392505050565b606082471015612eb95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095d565b843b612f075760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095d565b600080866001600160a01b03168587604051612f239190613333565b60006040518083038185875af1925050503d8060008114612f60576040519150601f19603f3d011682016040523d82523d6000602084013e612f65565b606091505b5091509150610e4e82828660608315612f7f575081612e51565b825115612f8f5782518084602001fd5b8160405162461bcd60e51b815260040161095d91906134dd565b828054612fb5906136ef565b90600052602060002090601f016020900481019282612fd7576000855561301d565b82601f10612ff057805160ff191683800117855561301d565b8280016001018555821561301d579182015b8281111561301d578251825591602001919060010190613002565b5061302992915061302d565b5090565b5b80821115613029576000815560010161302e565b80356001600160a01b038116811461305957600080fd5b919050565b803561305981613771565b60006020828403121561307a578081fd5b612e5182613042565b60008060408385031215613095578081fd5b61309e83613042565b91506130ac60208401613042565b90509250929050565b6000806000806000806000806000806101408b8d0312156130d4578586fd5b6130dd8b613042565b99506130eb60208c01613042565b985067ffffffffffffffff8060408d01351115613106578687fd5b60408c01358c018d601f82011261311b578788fd5b818135111561312c5761312c61375b565b6040518135601f01601f19908116603f011681019083821181831017156131555761315561375b565b81604052823581528f60208435850101111561316f57898afd5b8235602084016020830137913582016020018990525098505060608b0135965061319b60808c0161305e565b999c989b50969995989760a0870135975060c08701359660e08101359650610100810135955061012001359350915050565b6000806000606084860312156131e1578283fd5b6131ea84613042565b92506131f860208501613042565b9150604084013590509250925092565b600080600080600080600060e0888a031215613222578283fd5b61322b88613042565b965061323960208901613042565b955060408801359450606088013593506080880135925061325c60a08901613042565b915061326a60c08901613042565b905092959891949750929550565b6000806040838503121561328a578182fd5b61329383613042565b946020939093013593505050565b6000806000606084860312156132b5578283fd5b6132be84613042565b95602085013595506040909401359392505050565b6000602082840312156132e4578081fd5b8151612e5181613771565b600060208284031215613300578081fd5b5051919050565b6000815180845261331f8160208601602086016136c3565b601f01601f19169290920160200192915050565b600082516133458184602087016136c3565b9190910192915050565b6001600160a01b038c811682528b1660208201526101606040820181905260009061337c8382018d613307565b606084019b909b525050961515608088015260a087019590955260c086019390935260e0850191909152610100840152610120830152610140909101529392505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0383168152604060208201819052600090612e4e90830184613307565b6001600160a01b038c1681526101606020820181905260009061342d8382018e613307565b604084019c909c5250509715156060890152608088019690965260a087019490945260c086019290925260e085015261010084015261012083015215156101409091015292915050565b602080825282518282018190526000919060409081850190868401855b828110156134d0578151805185528681015187860152858101518686015260609081015115159085015260809093019290850190600101613494565b5091979650505050505050565b602081526000612e516020830184613307565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f52657761726420666f722074686174206661726d20646f6573206e6f742065786040820152636973747360e01b606082015260800190565b60208082526013908201527214995dd85c99081a5cc81b9bdd081d985b1a59606a1b604082015260600190565b602081526135b06020820183516001600160a01b03169052565b600060208301516101608060408501526135ce610180850183613307565b91506040850151606085015260608501516135ed608086018215159052565b50608085015160a085015260a085015160c085015260c085015160e085015260e085015161010081818701528087015191505061012081818701528087015191505061014081818701528087015191505061364b8286018215159052565b5090949350505050565b6000821982111561366857613668613745565b500190565b60008261368857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156136a7576136a7613745565b500290565b6000828210156136be576136be613745565b500390565b60005b838110156136de5781810151838201526020016136c6565b83811115612d055750506000910152565b600181811c9082168061370357607f821691505b6020821081141561372457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561373e5761373e613745565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146125fd57600080fdfea26469706673582212200d7a13538eb47a9f199c27565dde343b85e33dd60cc5b99384ffd1d604ec71dd64736f6c63430008040033