Contract Address Details

0xECa443E8E1Ab29971a45A9c57a6a9875701698A5

RewardByBlock >= 0 Incoming Transactions Last Balance Update: Block #8983558
Created by 0x48a1–21d69f at 0x8e2a–a4c536

Balance

0 POA

(@ /POA)

Fetching tokens...

Contract name:
RewardByBlock
Compiler version
v0.4.24+commit.e67f0147
Optimization enabled
true

Contract source code

pragma solidity ^0.4.24;
/**
* @title EternalStorage
* @dev This contract holds all the necessary state variables to carry out the storage of any contract
* and to support the upgrade functionality.
*/
contract EternalStorage {
// Version number of the current implementation
uint256 internal _version;
// Address of the current implementation
address internal _implementation;
// Storage mappings
mapping(bytes32 => uint256) internal uintStorage;
mapping(bytes32 => string) internal stringStorage;
mapping(bytes32 => address) internal addressStorage;
mapping(bytes32 => bytes) internal bytesStorage;
mapping(bytes32 => bool) internal boolStorage;
mapping(bytes32 => int256) internal intStorage;
mapping(bytes32 => bytes32) internal bytes32Storage;
mapping(bytes32 => uint256[]) internal uintArrayStorage;
mapping(bytes32 => string[]) internal stringArrayStorage;
mapping(bytes32 => address[]) internal addressArrayStorage;
//mapping(bytes32 => bytes[]) internal bytesArrayStorage;
mapping(bytes32 => bool[]) internal boolArrayStorage;
mapping(bytes32 => int256[]) internal intArrayStorage;
mapping(bytes32 => bytes32[]) internal bytes32ArrayStorage;
}
interface IProxyStorage {
function initializeAddresses(
address, address, address, address, address, address, address, address
) external;
function setContractAddress(uint256, address) external returns(bool);
function getBallotsStorage() external view returns(address);
function getKeysManager() external view returns(address);
function getPoaConsensus() external view returns(address);
function getValidatorMetadata() external view returns(address);
function getVotingToChangeKeys() external view returns(address);
function getVotingToChangeMinThreshold() external view returns(address);
}
interface IKeysManager {
function addMiningKey(address) external returns(bool);
function addVotingKey(address, address) external returns(bool);
function addPayoutKey(address, address) external returns(bool);
function createKeys(address, address, address) external;
function initiateKeys(address) external;
function migrateInitialKey(address) external;
function migrateMiningKey(address) external;
function removeMiningKey(address) external returns(bool);
function removeVotingKey(address) external returns(bool);
function removePayoutKey(address) external returns(bool);
function swapMiningKey(address, address) external returns(bool);
function swapVotingKey(address, address) external returns(bool);
function swapPayoutKey(address, address) external returns(bool);
function checkIfMiningExisted(address, address) external view returns(bool);
function initialKeysCount() external view returns(uint256);
function isMiningActive(address) external view returns(bool);
function isVotingActive(address) external view returns(bool);
function isPayoutActive(address) external view returns(bool);
function getVotingByMining(address) external view returns(address);
function getPayoutByMining(address) external view returns(address);
function getTime() external view returns(uint256);
function getMiningKeyHistory(address) external view returns(address);
function getMiningKeyByVoting(address) external view returns(address);
function getInitialKeyStatus(address) external view returns(uint256);
function masterOfCeremony() external view returns(address);
function maxOldMiningKeysDeepCheck() external pure returns(uint256);
function miningKeyByPayout(address) external view returns(address);
function miningKeyByVoting(address) external view returns(address);
}
interface IKeysManagerPrev {
function getInitialKey(address) external view returns(uint8);
}
interface IRewardByBlock {
// Produce rewards for the given benefactors, with corresponding reward codes.
// Only callable by `SYSTEM_ADDRESS`
function reward(address[], uint16[]) external returns (address[], uint256[]);
}
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
function mul(uint256 a, uint256 b) internal pure returns(uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns(uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function sub(uint256 a, uint256 b) internal pure returns(uint256) {
assert(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns(uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
contract RewardByBlock is EternalStorage, IRewardByBlock {
using SafeMath for uint256;
bytes32 internal constant EXTRA_RECEIVERS = keccak256("extraReceivers");
bytes32 internal constant PROXY_STORAGE = keccak256("proxyStorage");
bytes32 internal constant MINTED_TOTALLY = keccak256("mintedTotally");
bytes32 internal constant BRIDGE_AMOUNT = "bridgeAmount";
bytes32 internal constant EXTRA_RECEIVER_AMOUNT = "extraReceiverAmount";
bytes32 internal constant MINTED_FOR_ACCOUNT = "mintedForAccount";
bytes32 internal constant MINTED_FOR_ACCOUNT_IN_BLOCK = "mintedForAccountInBlock";
bytes32 internal constant MINTED_IN_BLOCK = "mintedInBlock";
bytes32 internal constant MINTED_TOTALLY_BY_BRIDGE = "mintedTotallyByBridge";
// solhint-disable const-name-snakecase
// These values must be changed before deploy
uint256 public constant blockRewardAmount = 1 ether;
uint256 public constant emissionFundsAmount = 1 ether;
address public constant emissionFunds = 0x548806F2215F44571431292F2314480c3F519044;
uint256 public constant bridgesAllowedLength = 3;
// solhint-enable const-name-snakecase
event AddedReceiver(uint256 amount, address indexed receiver, address indexed bridge);
event Rewarded(address[] receivers, uint256[] rewards);
modifier onlyBridgeContract {
require(_isBridgeContract(msg.sender));
_;
}
modifier onlySystem {
require(msg.sender == 0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE);
_;
}
function addExtraReceiver(uint256 _amount, address _receiver)
external
onlyBridgeContract
{
require(_amount != 0);
require(_receiver != address(0));
uint256 oldAmount = extraReceiverAmount(_receiver);
if (oldAmount == 0) {
_addExtraReceiver(_receiver);
}
_setExtraReceiverAmount(oldAmount.add(_amount), _receiver);
_setBridgeAmount(bridgeAmount(msg.sender).add(_amount), msg.sender);
emit AddedReceiver(_amount, _receiver, msg.sender);
}
function reward(address[] benefactors, uint16[] kind)
external
onlySystem
returns (address[], uint256[])
{
require(benefactors.length == kind.length);
require(benefactors.length == 1);
require(kind[0] == 0);
address miningKey = benefactors[0];
if (miningKey == address(0)) {
// Return empty arrays
return (new address[](0), new uint256[](0));
}
require(_isMiningActive(miningKey));
uint256 extraLength = extraReceiversLength();
address[] memory receivers = new address[](extraLength.add(2));
uint256[] memory rewards = new uint256[](receivers.length);
receivers[0] = _getPayoutByMining(miningKey);
rewards[0] = blockRewardAmount;
receivers[1] = emissionFunds;
rewards[1] = emissionFundsAmount;
uint256 i;
for (i = 0; i < extraLength; i++) {
address extraAddress = extraReceiverByIndex(i);
uint256 extraAmount = extraReceiverAmount(extraAddress);
_setExtraReceiverAmount(0, extraAddress);
receivers[i.add(2)] = extraAddress;
rewards[i.add(2)] = extraAmount;
}
for (i = 0; i < receivers.length; i++) {
_setMinted(rewards[i], receivers[i]);
}
for (i = 0; i < bridgesAllowedLength; i++) {
address bridgeAddress = bridgesAllowed()[i];
uint256 bridgeAmountForBlock = bridgeAmount(bridgeAddress);
if (bridgeAmountForBlock > 0) {
_setBridgeAmount(0, bridgeAddress);
_addMintedTotallyByBridge(bridgeAmountForBlock, bridgeAddress);
}
}
_clearExtraReceivers();
emit Rewarded(receivers, rewards);
return (receivers, rewards);
}
function bridgesAllowed() public pure returns(address[bridgesAllowedLength]) {
// These values must be changed before deploy
return([
address(0x0000000000000000000000000000000000000000),
address(0x0000000000000000000000000000000000000000),
address(0x0000000000000000000000000000000000000000)
]);
}
function bridgeAmount(address _bridge) public view returns(uint256) {
return uintStorage[
keccak256(abi.encode(BRIDGE_AMOUNT, _bridge))
];
}
function extraReceiverByIndex(uint256 _index) public view returns(address) {
return addressArrayStorage[EXTRA_RECEIVERS][_index];
}
function extraReceiverAmount(address _receiver) public view returns(uint256) {
return uintStorage[
keccak256(abi.encode(EXTRA_RECEIVER_AMOUNT, _receiver))
];
}
function extraReceiversLength() public view returns(uint256) {
return addressArrayStorage[EXTRA_RECEIVERS].length;
}
function mintedForAccount(address _account)
public
view
returns(uint256)
{
return uintStorage[
keccak256(abi.encode(MINTED_FOR_ACCOUNT, _account))
];
}
function mintedForAccountInBlock(address _account, uint256 _blockNumber)
public
view
returns(uint256)
{
return uintStorage[
keccak256(abi.encode(MINTED_FOR_ACCOUNT_IN_BLOCK, _account, _blockNumber))
];
}
function mintedInBlock(uint256 _blockNumber) public view returns(uint256) {
return uintStorage[
keccak256(abi.encode(MINTED_IN_BLOCK, _blockNumber))
];
}
function mintedTotally() public view returns(uint256) {
return uintStorage[MINTED_TOTALLY];
}
function mintedTotallyByBridge(address _bridge) public view returns(uint256) {
return uintStorage[
keccak256(abi.encode(MINTED_TOTALLY_BY_BRIDGE, _bridge))
];
}
function proxyStorage() public view returns(address) {
return addressStorage[PROXY_STORAGE];
}
function _addExtraReceiver(address _receiver) private {
addressArrayStorage[EXTRA_RECEIVERS].push(_receiver);
}
function _addMintedTotallyByBridge(uint256 _amount, address _bridge) private {
bytes32 hash = keccak256(abi.encode(MINTED_TOTALLY_BY_BRIDGE, _bridge));
uintStorage[hash] = uintStorage[hash].add(_amount);
}
function _clearExtraReceivers() private {
addressArrayStorage[EXTRA_RECEIVERS].length = 0;
}
function _getPayoutByMining(address _miningKey)
private
view
returns (address)
{
IKeysManager keysManager = IKeysManager(
IProxyStorage(proxyStorage()).getKeysManager()
);
address payoutKey = keysManager.getPayoutByMining(_miningKey);
return (payoutKey != address(0)) ? payoutKey : _miningKey;
}
function _isBridgeContract(address _addr) private pure returns(bool) {
address[bridgesAllowedLength] memory bridges = bridgesAllowed();
for (uint256 i = 0; i < bridges.length; i++) {
if (_addr == bridges[i]) {
return true;
}
}
return false;
}
function _isMiningActive(address _miningKey)
private
view
returns (bool)
{
IKeysManager keysManager = IKeysManager(
IProxyStorage(proxyStorage()).getKeysManager()
);
return keysManager.isMiningActive(_miningKey);
}
function _setBridgeAmount(uint256 _amount, address _bridge) private {
uintStorage[
keccak256(abi.encode(BRIDGE_AMOUNT, _bridge))
] = _amount;
}
function _setExtraReceiverAmount(uint256 _amount, address _receiver) private {
uintStorage[
keccak256(abi.encode(EXTRA_RECEIVER_AMOUNT, _receiver))
] = _amount;
}
function _setMinted(uint256 _amount, address _account) private {
bytes32 hash;
hash = keccak256(abi.encode(MINTED_FOR_ACCOUNT_IN_BLOCK, _account, block.number));
uintStorage[hash] = _amount;
hash = keccak256(abi.encode(MINTED_FOR_ACCOUNT, _account));
uintStorage[hash] = uintStorage[hash].add(_amount);
hash = keccak256(abi.encode(MINTED_IN_BLOCK, block.number));
uintStorage[hash] = uintStorage[hash].add(_amount);
hash = MINTED_TOTALLY;
uintStorage[hash] = uintStorage[hash].add(_amount);
}
}

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"extraReceiverAmount","inputs":[{"type":"address","name":"_receiver"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"bridgesAllowedLength","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"emissionFunds","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"blockRewardAmount","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedForAccountInBlock","inputs":[{"type":"address","name":"_account"},{"type":"uint256","name":"_blockNumber"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedForAccount","inputs":[{"type":"address","name":"_account"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedInBlock","inputs":[{"type":"uint256","name":"_blockNumber"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedTotally","inputs":[],"constant":true},{"type":"function","stateMutability":"pure","payable":false,"outputs":[{"type":"address[3]","name":""}],"name":"bridgesAllowed","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"addExtraReceiver","inputs":[{"type":"uint256","name":"_amount"},{"type":"address","name":"_receiver"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"proxyStorage","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedTotallyByBridge","inputs":[{"type":"address","name":"_bridge"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"extraReceiverByIndex","inputs":[{"type":"uint256","name":"_index"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"bridgeAmount","inputs":[{"type":"address","name":"_bridge"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"emissionFundsAmount","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"extraReceiversLength","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"address[]","name":""},{"type":"uint256[]","name":""}],"name":"reward","inputs":[{"type":"address[]","name":"benefactors"},{"type":"uint16[]","name":"kind"}],"constant":false},{"type":"event","name":"AddedReceiver","inputs":[{"type":"uint256","name":"amount","indexed":false},{"type":"address","name":"receiver","indexed":true},{"type":"address","name":"bridge","indexed":true}],"anonymous":false},{"type":"event","name":"Rewarded","inputs":[{"type":"address[]","name":"receivers","indexed":false},{"type":"uint256[]","name":"rewards","indexed":false}],"anonymous":false}]
            

Contract Byte Code

0x6080604052600436106100d75763ffffffff60e060020a6000350416630f3a053381146100dc57806310f2ee7c1461010f5780631f4356e41461012457806326cc22561461015557806330f6eb161461016a5780633d84b8c11461018e5780634476d66a146101af578063553a5c85146101c7578063899ca7fc146101dc578063aa9fa27414610229578063ae4b1b5b1461024f578063b4a523e814610264578063db456f7714610285578063e73b9e2f1461029d578063ee8d75ff14610155578063efdc4d01146102be578063f91c2898146102d3575b600080fd5b3480156100e857600080fd5b506100fd600160a060020a0360043516610398565b60408051918252519081900360200190f35b34801561011b57600080fd5b506100fd61045b565b34801561013057600080fd5b50610139610460565b60408051600160a060020a039092168252519081900360200190f35b34801561016157600080fd5b506100fd610478565b34801561017657600080fd5b506100fd600160a060020a0360043516602435610484565b34801561019a57600080fd5b506100fd600160a060020a0360043516610551565b3480156101bb57600080fd5b506100fd6004356105d2565b3480156101d357600080fd5b506100fd61064b565b3480156101e857600080fd5b506101f161068d565b6040518082606080838360005b838110156102165781810151838201526020016101fe565b5050505090500191505060405180910390f35b34801561023557600080fd5b5061024d600435600160a060020a03602435166106b6565b005b34801561025b57600080fd5b50610139610788565b34801561027057600080fd5b506100fd600160a060020a03600435166107d2565b34801561029157600080fd5b50610139600435610853565b3480156102a957600080fd5b506100fd600160a060020a03600435166108a7565b3480156102ca57600080fd5b506100fd610928565b3480156102df57600080fd5b506102ff6024600480358281019290820135918135918201910135610957565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561034357818101518382015260200161032b565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561038257818101518382015260200161036a565b5050505090500194505050505060405180910390f35b604080517f65787472615265636569766572416d6f756e7400000000000000000000000000602080830191909152600160a060020a0384168284015282518083038401815260609092019283905281516000936002938593909282918401908083835b6020831061041a5780518252601f1990920191602091820191016103fb565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205495945050505050565b600381565b73548806f2215f44571431292f2314480c3f51904481565b670de0b6b3a764000081565b604080517f6d696e746564466f724163636f756e74496e426c6f636b000000000000000000602080830191909152600160a060020a0385168284015260608083018590528351808403909101815260809092019283905281516000936002938593909282918401908083835b6020831061050f5780518252601f1990920191602091820191016104f0565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020549695505050505050565b604080517f6d696e746564466f724163636f756e7400000000000000000000000000000000602080830191909152600160a060020a0384168284015282518083038401815260609092019283905281516000936002938593909282918401908083836020831061041a5780518252601f1990920191602091820191016103fb565b604080517f6d696e746564496e426c6f636b0000000000000000000000000000000000000060208083019190915281830184905282518083038401815260609092019283905281516000936002938593909282918401908083836020831061041a5780518252601f1990920191602091820191016103fb565b604080517f6d696e746564546f74616c6c79000000000000000000000000000000000000008152815190819003600d0190206000908152600260205220545b90565b6106956115a0565b50604080516060810182526000808252602082018190529181019190915290565b60006106c133610d77565b15156106cc57600080fd5b8215156106d857600080fd5b600160a060020a03821615156106ed57600080fd5b6106f682610398565b90508015156107085761070882610de2565b61072161071b828563ffffffff610e4e16565b83610e64565b61074361073d84610731336108a7565b9063ffffffff610e4e16565b33610f28565b6040805184815290513391600160a060020a038516917f3c798bbcf33115b42c728b8504cff11dd58736e9fa789f1cda2738db7d696b2a9181900360200190a3505050565b604080517f70726f787953746f7261676500000000000000000000000000000000000000008152815190819003600c019020600090815260046020522054600160a060020a031690565b604080517f6d696e746564546f74616c6c7942794272696467650000000000000000000000602080830191909152600160a060020a0384168284015282518083038401815260609092019283905281516000936002938593909282918401908083836020831061041a5780518252601f1990920191602091820191016103fb565b604080516000805160206116078339815191528152815190819003600e0190206000908152600b60205290812080548390811061088c57fe5b600091825260209091200154600160a060020a031692915050565b604080517f627269646765416d6f756e740000000000000000000000000000000000000000602080830191909152600160a060020a0384168284015282518083038401815260609092019283905281516000936002938593909282918401908083836020831061041a5780518252601f1990920191602091820191016103fb565b604080516000805160206116078339815191528152815190819003600e0190206000908152600b602052205490565b6060806000808280828080808073fffffffffffffffffffffffffffffffffffffffe331461098457600080fd5b8d8c1461099057600080fd5b60018e1461099d57600080fd5b8c8c60008181106109aa57fe5b9050602002013561ffff1661ffff1660001415156109c757600080fd5b8e8e60008181106109d457fe5b90506020020135600160a060020a031698506000600160a060020a031689600160a060020a03161415610a2057604080516000808252602082019081528183019092529b509950610d65565b610a2989610fa9565b1515610a3457600080fd5b610a3c610928565b9750610a4f88600263ffffffff610e4e16565b604051908082528060200260200182016040528015610a78578160200160208202803883390190505b5096508651604051908082528060200260200182016040528015610aa6578160200160208202803883390190505b509550610ab2896110b8565b876000815181101515610ac157fe5b600160a060020a039092166020928302909101909101528551670de0b6b3a76400009087906000908110610af157fe5b60209081029091010152865173548806f2215f44571431292f2314480c3f5190449088906001908110610b2057fe5b600160a060020a039092166020928302909101909101528551670de0b6b3a76400009087906001908110610b5057fe5b60209081029091010152600094505b87851015610bee57610b7085610853565b9350610b7b84610398565b9250610b88600085610e64565b8387610b9b87600263ffffffff610e4e16565b81518110610ba557fe5b600160a060020a039092166020928302909101909101528286610bcf87600263ffffffff610e4e16565b81518110610bd957fe5b60209081029091010152600190940193610b5f565b600094505b8651851015610c3f57610c348686815181101515610c0d57fe5b906020019060200201518887815181101515610c2557fe5b906020019060200201516111e4565b600190940193610bf3565b600094505b6003851015610c9b57610c5561068d565b8560038110610c6057fe5b60200201519150610c70826108a7565b90506000811115610c9057610c86600083610f28565b610c9081836114a0565b600190940193610c44565b610ca3611566565b7fb747d4e9a0b39cc47496d84b42e4066ba8b8a0b89776528bcec4ac2997e224538787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610d0a578181015183820152602001610cf2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610d49578181015183820152602001610d31565b5050505090500194505050505060405180910390a186869a509a505b50505050505050505094509492505050565b6000610d816115a0565b6000610d8b61068d565b9150600090505b6003811015610dd657818160038110610da757fe5b6020020151600160a060020a031684600160a060020a03161415610dce5760019250610ddb565b600101610d92565b600092505b5050919050565b604080516000805160206116078339815191528152815190819003600e0190206000908152600b60209081529181208054600181018255908252919020018054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19909216919091179055565b600082820183811015610e5d57fe5b9392505050565b604080517f65787472615265636569766572416d6f756e7400000000000000000000000000602080830191909152600160a060020a0384168284015282518083038401815260609092019283905281518593600293600093909282918401908083835b60208310610ee65780518252601f199092019160209182019101610ec7565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020939093555050505050565b604080517f627269646765416d6f756e740000000000000000000000000000000000000000602080830191909152600160a060020a03841682840152825180830384018152606090920192839052815185936002936000939092829184019080838360208310610ee65780518252601f199092019160209182019101610ec7565b600080610fb4610788565b600160a060020a0316639a5737866040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ff157600080fd5b505af1158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b5051604080517f9bc91c22000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152915192935090831691639bc91c22916024808201926020929091908290030181600087803b15801561108557600080fd5b505af1158015611099573d6000803e3d6000fd5b505050506040513d60208110156110af57600080fd5b50519392505050565b60008060006110c5610788565b600160a060020a0316639a5737866040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561110257600080fd5b505af1158015611116573d6000803e3d6000fd5b505050506040513d602081101561112c57600080fd5b5051604080517f7cded930000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152915192945090841691637cded930916024808201926020929091908290030181600087803b15801561119657600080fd5b505af11580156111aa573d6000803e3d6000fd5b505050506040513d60208110156111c057600080fd5b50519050600160a060020a03811615156111da57836111dc565b805b949350505050565b604080517f6d696e746564466f724163636f756e74496e426c6f636b000000000000000000602080830191909152600160a060020a0384168284015243606080840191909152835180840390910181526080909201928390528151600093918291908401908083835b6020831061126c5780518252601f19909201916020918201910161124d565b51815160209384036101000a6000190180199092169116179052604080519290940182900382206000818152600283528590208a90557f6d696e746564466f724163636f756e740000000000000000000000000000000083830152600160a060020a0389168386015284518084038601815260609093019485905282519097509195509293508392850191508083835b6020831061131b5780518252601f1990920191602091820191016112fc565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526002909252929020549194506113649350909150859050610e4e565b6000828152600260209081526040918290209290925580517f6d696e746564496e426c6f636b00000000000000000000000000000000000000818401524381830152815180820383018152606090910191829052805190928291908401908083835b602083106113e55780518252601f1990920191602091820191016113c6565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260029092529290205491945061142e9350909150859050610e4e565b60009182526002602081815260408085209390935582517f6d696e746564546f74616c6c79000000000000000000000000000000000000008152835190819003600d01902080855291905291205461148c908463ffffffff610e4e16565b600091825260026020526040909120555050565b604080517f6d696e746564546f74616c6c7942794272696467650000000000000000000000602080830191909152600160a060020a038416828401528251808303840181526060909201928390528151600093918291908401908083835b6020831061151d5780518252601f1990920191602091820191016114fe565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260029092529290205491945061148c9350909150859050610e4e565b604080516000805160206116078339815191528152815190819003600e0190206000908152600b60205290812061159d90826115bf565b50565b6060604051908101604052806003906020820280388339509192915050565b8154818355818111156115e3576000838152602090206115e39181019083016115e8565b505050565b61068a91905b8082111561160257600081556001016115ee565b509056006578747261526563656976657273000000000000000000000000000000000000a165627a7a72305820d6c4b38bc754d13c28cadd30f36a02a8765e2e8e44348af42feabaed63ba42e70029