Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 141 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 12244803 | 1783 days ago | IN | 1 wei | 0.00429275 | ||||
| Deposit For | 10905533 | 1989 days ago | IN | 2 ETH | 0.0067157 | ||||
| Deposit For | 10894140 | 1991 days ago | IN | 0.06 ETH | 0.01183258 | ||||
| Deposit For | 10888621 | 1992 days ago | IN | 0.49 ETH | 0.00449416 | ||||
| Deposit For | 10868355 | 1995 days ago | IN | 1 ETH | 0.00247689 | ||||
| Deposit For | 10834295 | 2000 days ago | IN | 0.125 ETH | 0.00372811 | ||||
| Deposit For | 10828550 | 2001 days ago | IN | 0.29 ETH | 0.00457076 | ||||
| Deposit For | 10815781 | 2003 days ago | IN | 0.854 ETH | 0.00342169 | ||||
| Deposit For | 10815636 | 2003 days ago | IN | 1 ETH | 0.00668798 | ||||
| Deposit For | 10814074 | 2004 days ago | IN | 0.563 ETH | 0.0020428 | ||||
| Deposit For | 10813717 | 2004 days ago | IN | 0.25 ETH | 0.00468158 | ||||
| Deposit For | 10790881 | 2007 days ago | IN | 0.5 ETH | 0.00460651 | ||||
| Deposit For | 10790433 | 2007 days ago | IN | 0.1 ETH | 0.01419909 | ||||
| Deposit For | 10790341 | 2007 days ago | IN | 0.1 ETH | 0.00702212 | ||||
| Deposit For | 10790257 | 2007 days ago | IN | 0.3 ETH | 0.00704766 | ||||
| Deposit For | 10790136 | 2007 days ago | IN | 0.1 ETH | 0.00955009 | ||||
| Deposit For | 10790089 | 2007 days ago | IN | 0.1 ETH | 0.01100558 | ||||
| Deposit For | 10784651 | 2008 days ago | IN | 0.3 ETH | 0.00577091 | ||||
| Deposit For | 10780582 | 2009 days ago | IN | 0.1 ETH | 0.01202698 | ||||
| Deposit For | 10767907 | 2011 days ago | IN | 0.1 ETH | 0.00477504 | ||||
| Deposit For | 10767774 | 2011 days ago | IN | 0.1 ETH | 0.0045963 | ||||
| Deposit For | 10767725 | 2011 days ago | IN | 0.1 ETH | 0.00472397 | ||||
| Deposit For | 10763910 | 2011 days ago | IN | 0.1 ETH | 0.00423881 | ||||
| Deposit For | 10762604 | 2011 days ago | IN | 0.1 ETH | 0.005107 | ||||
| Deposit For | 10762439 | 2011 days ago | IN | 0.1 ETH | 0.00439202 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 12244819 | 1783 days ago | 8.56794584 ETH | ||||
| - | 10791924 | 2007 days ago | 0.08729805 ETH | ||||
| - | 10791343 | 2007 days ago | 0.12640603 ETH | ||||
| - | 10791337 | 2007 days ago | 0.07086113 ETH | ||||
| - | 10791081 | 2007 days ago | 0.24789482 ETH | ||||
| - | 10790589 | 2007 days ago | 0.03020755 ETH | ||||
| - | 10790575 | 2007 days ago | 0.42142262 ETH | ||||
| - | 10788177 | 2007 days ago | 0.11563821 ETH | ||||
| - | 10787334 | 2008 days ago | 0.7210691 ETH | ||||
| - | 10759339 | 2012 days ago | 0.10267178 ETH | ||||
| - | 10758586 | 2012 days ago | 0.83002733 ETH | ||||
| - | 10749777 | 2013 days ago | 0.03139251 ETH | ||||
| - | 10748932 | 2013 days ago | 0.01510591 ETH | ||||
| - | 10748849 | 2014 days ago | 0.52358424 ETH | ||||
| - | 10537613 | 2046 days ago | 0.01559505 ETH | ||||
| - | 10531629 | 2047 days ago | 0.01791288 ETH | ||||
| - | 10516141 | 2049 days ago | 0.00918015 ETH | ||||
| - | 10516038 | 2049 days ago | 0.00917852 ETH | ||||
| - | 10516025 | 2049 days ago | 0.00906245 ETH | ||||
| - | 10515981 | 2049 days ago | 0.01310616 ETH | ||||
| - | 10511818 | 2050 days ago | 0.0043121 ETH | ||||
| - | 10511713 | 2050 days ago | 0.0091773 ETH | ||||
| - | 10447710 | 2060 days ago | 0.01866141 ETH | ||||
| - | 10447004 | 2060 days ago | 0.04660541 ETH | ||||
| - | 10444584 | 2060 days ago | 0.00344544 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Relay
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-06-08
*/
pragma solidity 0.6.2;
pragma experimental ABIEncoderV2;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _owner;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal virtual {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// This contract is taken from openzepplin-sdk
// https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/Initializable.sol
/**
* @title Initializable
*
* @dev Helper contract to support initializer functions. To use it, replace
* the constructor with a function that has the `initializer` modifier.
* WARNING: Unlike constructors, initializer functions must be manually
* invoked. This applies both to deploying an Initializable contract, as well
* as extending an Initializable contract via inheritance.
* WARNING: When used with inheritance, manual care must be taken to not invoke
* a parent initializer twice, or ensure that all initializers are idempotent,
* because this is not dealt with automatically as with constructors.
*/
contract Initializable {
/**
* @dev Indicates that the contract has been initialized.
*/
bool private initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool private initializing;
/**
* @dev Modifier to use in the initializer function of a contract.
*/
modifier initializer() {
require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");
bool isTopLevelCall = !initializing;
if (isTopLevelCall) {
initializing = true;
initialized = true;
}
_;
if (isTopLevelCall) {
initializing = false;
}
}
/// @dev Returns true if and only if the function is running in the constructor
function isConstructor() private view returns (bool) {
// extcodesize checks the size of the code stored in an address, and
// address returns the current address. Since the code is still not
// deployed when running a constructor, any checks on its code size will
// yield zero, making it an effective way to detect if a contract is
// under construction or not.
address self = address(this);
uint256 cs;
assembly { cs := extcodesize(self) }
return cs == 0;
}
// Reserved storage space to allow for layout changes in the future.
uint256[50] private ______gap;
}
// @author Patrick McCorry
// @title DataShard
// @notice Stores data for a given epoch / interval.
// @dev Storage contract.
// Associates msg.sender with a list of bytes32 (hash) -> uint (timestamp).
contract DataShard is Initializable, Ownable {
uint public creationBlock;
// Smart Contract Address => ID-based data storage
mapping (bytes32 => uint) records;
// @param _blockNo Provided by the DataRegistry
function initialize(address _newOwner) initializer onlyOwner public {
creationBlock = block.number;
_transferOwnership(_newOwner);
}
// @dev Destory contract (and all its entries)
function kill() public onlyOwner {
selfdestruct(payable(owner()));
}
// @returns Creation time (blocknumber) for this dataShard
function getCreationBlock() public view returns (uint) {
return creationBlock;
}
// @param _sc Smart contract address
// @param _id Unique identifier for record
// @returns A record (timestamp) or "0" if no record was found.
function fetchRecord(bytes32 _id) public view returns (uint) {
return records[_id];
}
// @param _sc Smart contract address
// @param _id Unique identifier for record
// @param _timestamp A timestamp
// @dev Only stores a record if it is NOT set. e.g. does not replace/update.
function setRecord(bytes32 _id, uint _timestamp) external onlyOwner {
// No need to re-set it if it already exists. We only want the lowest timestamp.
// e.g. if job is sent twice, we keep the earliest timestamp.
if(records[_id] == 0) {
records[_id] = _timestamp;
}
}
}
// @author Patrick McCorry
// @title DataShard
// @notice Manages the creation and destruction of data shards. Helps us be Ethereum Enviromentally Friendly.
// @dev In practice, we only need 2 dataShards for it to work well.
contract DataRegistry is Initializable {
// Shard ID => Address for DataShard
mapping (uint => address) public dataShards;
uint public interval; // Approximately 6000 blocks a day
uint constant TOTAL_SHARDS = 2; // Total number of data shards in rotation
// @returns Number of blocks for an interval.
function getInterval() public view returns (uint) {
return interval;
}
// @returns Number of shards in rotation.
function getTotalShards() public pure returns (uint) {
return TOTAL_SHARDS;
}
// @dev Values for interval and total_shards is hard-coded in the contract. Can be passed as constructor, but not big deal.
function initialize(uint _interval) initializer internal {
interval = _interval;
// We must initialize ALL shards to ensure we have a .kill() function when
// calling resetDataShard(). Otherwise it will always fail due to a revert.
for(uint i=0; i<TOTAL_SHARDS; i++) {
DataShard ds = new DataShard();
ds.initialize(address(this));
dataShards[i] = address(ds);
}
}
// @returns Instance of the DataShard
// @dev Call this function periodically to delete/create data shards.
function resetDataShard() public returns (DataShard) {
// We need to do full loop before deleting an old shard!
if(block.number - DataShard(dataShards[0]).getCreationBlock() >= interval) {
address toDelete = dataShards[1];
dataShards[1] = dataShards[0];
DataShard ds = new DataShard();
ds.initialize(address(this));
dataShards[0] = address(ds);
DataShard(toDelete).kill();
}
}
// @dev Returns the latest / most recently created data shard.
function getLatestDataShard() public view returns (address) {
return dataShards[0];
}
// @param _dataShard Index of data shard
// @param _sc Smart contract that recorded the log
// @param _id Unique identifier for the record
// @returns Record data (timestamp)
function fetchRecord(uint _dataShard, bytes32 _id) public view returns (uint) {
// Confirm the data shard exists so we can fetch data
if(dataShards[_dataShard] != address(0)) {
DataShard rc = DataShard(dataShards[_dataShard]);
return rc.fetchRecord(_id);
}
}
// @param _id Unique identifier for the record
// @param _timestamp A timestamp
// @dev We have integrated with the relay contract; so only relay can call it.
function setRecord(bytes32 _id, uint _timestamp) internal {
// Fetch Index
address dataShardAddr = getLatestDataShard();
// Fetch the DataShard for this day. (It may reset it under the hood)
DataShard rc = DataShard(dataShardAddr);
// Update record!
rc.setRecord(_id, _timestamp);
}
}
// @author Patrick McCorry & Chris Buckland (anydot)
// @title Relay
// @notice Relay tx data structure
contract RelayTxStruct {
// @dev The relay transaction
struct RelayTx {
address to; // Address for external contract
address payable from; // Address for the user who hired the relayer
bytes data; // Call data that we need to send. Includes function call name, etc.
uint deadline; // Expiry block number for appointment
uint compensation; // How much should the operator compensation the user by?
uint gasLimit; // How much gas is allocated to this function call?
uint chainId; // ChainID
address relay; // The relay contract!
}
// @return Relay tx hash (bytes32)
// @dev Pack the encoding when computing the ID.
function computeRelayTxId(RelayTx memory self) public pure returns (bytes32) {
return keccak256(abi.encode(self.to, self.from, self.data, self.deadline, self.compensation, self.gasLimit, self.chainId, self.relay));
}
}
// @author anydot (Patrick & Chris)
// @title Payment Deposit: Accept payments from customers
contract PaymentDeposit is Initializable, Ownable {
mapping(address => uint) public depositors;
uint public uniqueDepositors;
// We index the sender so that it's easy to look up all deposits
// from a given sender.
event Deposit(address indexed sender, uint amount, uint indexed index);
// We index the sender so that it's easy to look up all withdraws
// from a given sender.
event Withdraw(address indexed sender, uint amount);
// Two-step deployment process.
function initialize(address _newOwner) internal initializer onlyOwner {
_transferOwnership(_newOwner);
}
/**
* Supply a deposit for a specified recipient.
* Caution: The recipient must be an externally owned account as all jobs sent to
* any.sender must be signed and associated with a positive balance in this contract.
*/
function depositFor(address recipient) public payable {
require(msg.value > 0, "No value provided to depositFor.");
uint index = getDepositorIndex(recipient);
emit Deposit(recipient, msg.value, index);
}
/**
* Sets the depositors index if necessary.
*/
function getDepositorIndex(address _depositor) internal returns(uint) {
if(depositors[_depositor] == 0) {
uniqueDepositors = uniqueDepositors + 1;
depositors[_depositor] = uniqueDepositors;
}
return depositors[_depositor];
}
/*
* It is only intended for external users who want to deposit via a wallet.
*/
receive() external payable {
require(msg.value > 0, "No value provided to fallback.");
require(tx.origin == msg.sender, "Only EOA can deposit directly.");
uint index = getDepositorIndex(msg.sender);
emit Deposit(msg.sender, msg.value, index);
}
/**
* Move funds out of the contract
*/
function withdraw(address payable recipient, uint amount) onlyOwner public {
recipient.transfer(amount);
emit Withdraw(recipient, amount);
}
/**
* Move funds out of the contract
* Depositor is the OWNER of the funds being withdrawn.
* Recipient is the RECEIVER of the funds.
*/
function withdrawFor(address payable depositor, address payable recipient, uint amount) onlyOwner public {
require(depositors[depositor]>0, "Depositor has never deposited funds.");
recipient.transfer(amount);
emit Withdraw(depositor, amount);
}
/**
* Use admin privileges to migrate a user's deposits to another deposit contract
*/
function migrate(address payable recipient, uint amount, PaymentDeposit otherDeposit) onlyOwner public {
require(address(this).balance >= amount, "Not enough balance to migrate.");
otherDeposit.depositFor.value(amount)(recipient);
emit Withdraw(recipient, amount);
}
}
// @author PISA Research (Patrick & Chris)
// @title Relay: Executing relay transactions
// @notice This contract only handles executing relay transactions.
// It does not have logic to handle the security deposit or proving fraud.
// @dev The operator must supply gast refund this contract as it ms relayers the cost of submitting jobs.
contract Relay is DataRegistry, RelayTxStruct, PaymentDeposit {
mapping(address => bool) public relayers;
event RelayExecuted(bytes32 indexed relayTxId, bool success, address indexed from, address indexed to, uint gasUsed, uint gasPrice);
event RelayerInstalled(address relayer);
event RelayerUninstalled(address relayer);
event OutOfCoins();
// @param _newOwner Owner can install relayers
// @dev Behind the scenes, the DataRegistry is creating two shards via an internal constructor.
function initialize(address _newOwner, uint _shardInterval) public initializer onlyOwner {
PaymentDeposit.initialize(_newOwner);
DataRegistry.initialize(_shardInterval);
}
// @param _relayTx A relay tx containing the job to execute
// @param _gasRefund Whether the relayer requires a gas refund
// @dev Only authorised relayer can execute relay jobs and they are refunded gas at the end of the call.
// Critically, if the relay job fails, we can simply catch exception and continue to record the log.
function execute(RelayTx memory _relayTx, bool _gasRefund) public {
uint gasStarted = gasleft();
// The msg.sender check protects against two problems:
// - Replay attacks across chains (chainid in transaction)
// - Re-entrancy attacks back into .execute() (signer required)
require(relayers[msg.sender], "Relayer must call this function.");
require(_relayTx.relay == address(this), "Relay tx MUST be for this relay contract.");
bytes32 relayTxId = computeRelayTxId(_relayTx);
// Only record log if a compensation is required
if(_relayTx.compensation != 0) {
// Record a log of executing the job, Each shard only records the first job since the first job has the
// earliest timestamp.
setRecord(relayTxId, block.number);
}
// We do not require the customer to sign the relay tx.
// Why? If relayer submits wrong relay tx, it wont have the correct RelayTxId.
// So the RelayTxId won't be recorded and the customer can easily prove
// the correct relay tx was never submitted for execution.
// In the worst case, the contract will only send 63/64 of the transaction's
// remaining gas due to https://eips.ethereum.org/EIPS/eip-150
// But this is problematic as outlined in https://eips.ethereum.org/EIPS/eip-1930
// so to fix... we need to make sure we supply 64/63 * gasLimit.
// Assumption: Underlying contract called did not have a minimum gas required check
// We add 1000 to cover the cost of calculating new gas limit - this should be a lot more than
// is required - measuring shows cost of 58
require(gasleft() > (_relayTx.gasLimit + _relayTx.gasLimit / 63) + 1000, "Not enough gas supplied.");
// execute the actual call
(bool success,) = _relayTx.to.call.gas(_relayTx.gasLimit)(_relayTx.data);
// we add some gas using hard coded opcode pricing for computation that we could measure
uint gasUsed = gasStarted - gasleft() + // execute cost
(msg.data.length * 16) + // data input cost (add 1 for gasRefund bool)
2355 + // cost of RelayExecuted event - 375 + 375 + 375 + (160 * 8)
21000; // transaction cost
if(_gasRefund) {
gasUsed += (9000 + 1000); // refund cost, send + change for calculations
if(!msg.sender.send(gasUsed*tx.gasprice)) {
// Notify admin we need to provide more refund to this contract
emit OutOfCoins();
}
}
emit RelayExecuted(relayTxId, success, _relayTx.from, _relayTx.to, gasUsed, tx.gasprice);
}
// @param _relayer New relayer address
// @dev Only the owner can install a new relayer
function installRelayer(address _relayer) onlyOwner public {
require(!relayers[_relayer], "Relayer is already installed.");
require(_relayer != address(this), "The relay contract cannot be installed as a relayer.");
relayers[_relayer] = true;
emit RelayerInstalled(_relayer);
}
// @param _relayer New relayer address
// @dev Only the owner can uninstall a new relayer
function uninstallRelayer(address _relayer) onlyOwner public {
require(relayers[_relayer], "Relayer must be installed.");
relayers[_relayer] = false;
emit RelayerUninstalled(_relayer);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[],"name":"OutOfCoins","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"relayTxId","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"gasUsed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gasPrice","type":"uint256"}],"name":"RelayExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"relayer","type":"address"}],"name":"RelayerInstalled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"relayer","type":"address"}],"name":"RelayerUninstalled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address payable","name":"from","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"compensation","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"relay","type":"address"}],"internalType":"struct RelayTxStruct.RelayTx","name":"self","type":"tuple"}],"name":"computeRelayTxId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dataShards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"depositFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address payable","name":"from","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"compensation","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"relay","type":"address"}],"internalType":"struct RelayTxStruct.RelayTx","name":"_relayTx","type":"tuple"},{"internalType":"bool","name":"_gasRefund","type":"bool"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dataShard","type":"uint256"},{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"fetchRecord","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestDataShard","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalShards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"uint256","name":"_shardInterval","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"installRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"interval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"contract PaymentDeposit","name":"otherDeposit","type":"address"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"relayers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetDataShard","outputs":[{"internalType":"contract DataShard","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"uninstallRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniqueDepositors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"depositor","type":"address"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405260006100176001600160e01b0361006a16565b603580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b61215a8061007d6000396000f3fe6080604052600436106101445760003560e01c806391ad27b4116100b6578063e345f8d11161006f578063e345f8d1146103d5578063e539a027146103f5578063e775716214610415578063eed75f6d1461042a578063f2fde38b1461044a578063f3fef3a31461046a576101e3565b806391ad27b414610343578063947a36fb146103585780639f1d92671461036d578063a63d6e441461038d578063aa67c919146103a2578063cd6dc687146103b5576101e3565b80635300f841116101085780635300f841146102a2578063715018a6146102cf5780637fd99437146102e457806386f31f2e146102f95780638da5cb5b146103195780638f32d59b1461032e576101e3565b80630c74dc6c146101e857806327a82be51461021e5780632e2d00eb1461024057806334ee6476146102625780633b9ca2d014610282576101e3565b366101e357600034116101725760405162461bcd60e51b815260040161016990611892565b60405180910390fd5b3233146101915760405162461bcd60e51b815260040161016990611755565b600061019c3361048a565b905080336001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15346040516101d89190611709565b60405180910390a350005b600080fd5b3480156101f457600080fd5b50610208610203366004611560565b6104e8565b6040516102159190611709565b60405180910390f35b34801561022a57600080fd5b5061023361053f565b604051610215919061165c565b34801561024c57600080fd5b5061026061025b36600461159b565b61074f565b005b34801561026e57600080fd5b5061023361027d3660046115ef565b610947565b34801561028e57600080fd5b5061026061029d36600461151f565b610962565b3480156102ae57600080fd5b506102c26102bd366004611491565b610a4c565b60405161021591906116e6565b3480156102db57600080fd5b50610260610a61565b3480156102f057600080fd5b50610233610acf565b34801561030557600080fd5b50610260610314366004611491565b610af4565b34801561032557600080fd5b50610233610bab565b34801561033a57600080fd5b506102c2610bba565b34801561034f57600080fd5b50610208610be0565b34801561036457600080fd5b50610208610be6565b34801561037957600080fd5b506102606103883660046114b4565b610bec565b34801561039957600080fd5b50610208610cb5565b6102606103b0366004611491565b610cba565b3480156103c157600080fd5b506102606103d03660046114f4565b610d2d565b3480156103e157600080fd5b506102086103f036600461161f565b610de8565b34801561040157600080fd5b50610260610410366004611491565b610e9e565b34801561042157600080fd5b50610208610f77565b34801561043657600080fd5b50610208610445366004611491565b610f7d565b34801561045657600080fd5b50610260610465366004611491565b610f8f565b34801561047657600080fd5b506102606104853660046114f4565b610fbf565b6001600160a01b0381166000908152603660205260408120546104cc5760378054600101908190556001600160a01b0383166000908152603660205260409020555b506001600160a01b031660009081526036602052604090205490565b80516020808301516040808501516060860151608087015160a088015160c089015160e08a01519551600099610522999098979101611670565b604051602081830303815290604052805190602001209050919050565b60345460008080526033602090815260008051602061210583398151915254604080516320ffd56d60e01b815290519394936001600160a01b03909216926320ffd56d92600480840193829003018186803b15801561059d57600080fd5b505afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105d59190810190611607565b43031061074c5760336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf9477805460008051602061210583398151915254600160009081526001600160a01b031983166001600160a01b03928316179093556040519116919061064590611367565b604051809103906000f080158015610661573d6000803e3d6000fd5b5060405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de89061069190309060040161165c565b600060405180830381600087803b1580156106ab57600080fd5b505af11580156106bf573d6000803e3d6000fd5b50506000808052603360205260008051602061210583398151915280546001600160a01b0319166001600160a01b0386811691909117909155604080516341c0e1b560e01b8152905191871694506341c0e1b59350600480820193929182900301818387803b15801561073157600080fd5b505af1158015610745573d6000803e3d6000fd5b5050505050505b90565b60005a3360009081526038602052604090205490915060ff166107845760405162461bcd60e51b815260040161016990611809565b60e08301516001600160a01b031630146107b05760405162461bcd60e51b8152600401610169906119ba565b60006107bb846104e8565b905083608001516000146107d3576107d3814361105f565b603f8460a00151816107e157fe5b048460a00151016103e8015a1161080a5760405162461bcd60e51b8152600401610169906117d2565b600084600001516001600160a01b03168560a0015186604001516040516108319190611640565b60006040518083038160008787f1925050503d806000811461086f576040519150601f19603f3d011682016040523d82523d6000602084013e610874565b606091505b5090915060009050601036025a8503016109330161520801905084156108e757604051612710919091019033903a830280156108fc02916000818181858888f193505050506108e7576040517fbf3f3724ef99c8fe84317065fe5f9cc66d0c3dd306d1e3a876b3ec97951a3f4790600090a15b85600001516001600160a01b031686602001516001600160a01b0316847f9da746664b5b3b1008960a15062f8f7ce0b9b8e584cf045b1d615997ece65f0d85853a604051610937939291906116f1565b60405180910390a4505050505050565b6033602052600090815260409020546001600160a01b031681565b61096a610bba565b6109865760405162461bcd60e51b815260040161016990611900565b814710156109a65760405162461bcd60e51b815260040161016990611a47565b60405163aa67c91960e01b81526001600160a01b0382169063aa67c9199084906109d490879060040161165c565b6000604051808303818588803b1580156109ed57600080fd5b505af1158015610a01573d6000803e3d6000fd5b5050505050826001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436483604051610a3f9190611709565b60405180910390a2505050565b60386020526000908152604090205460ff1681565b610a69610bba565b610a855760405162461bcd60e51b815260040161016990611900565b6035546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603580546001600160a01b0319169055565b600080526033602052600080516020612105833981519152546001600160a01b031690565b610afc610bba565b610b185760405162461bcd60e51b815260040161016990611900565b6001600160a01b03811660009081526038602052604090205460ff16610b505760405162461bcd60e51b8152600401610169906118c9565b6001600160a01b03811660009081526038602052604090819020805460ff19169055517fbf71a2e72339c706ee003aec232ad0e38d32bda19a6d513193425047a33c7dde90610ba090839061165c565b60405180910390a150565b6035546001600160a01b031690565b6035546000906001600160a01b0316610bd16110d4565b6001600160a01b031614905090565b60345490565b60345481565b610bf4610bba565b610c105760405162461bcd60e51b815260040161016990611900565b6001600160a01b038316600090815260366020526040902054610c455760405162461bcd60e51b815260040161016990611a03565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610c7b573d6000803e3d6000fd5b50826001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051610a3f9190611709565b600290565b60003411610cda5760405162461bcd60e51b815260040161016990611720565b6000610ce58261048a565b905080826001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534604051610d219190611709565b60405180910390a35050565b600054610100900460ff1680610d465750610d466110d8565b80610d54575060005460ff16155b610d705760405162461bcd60e51b81526004016101699061196c565b600054610100900460ff16158015610d9b576000805460ff1961ff0019909116610100171660011790555b610da3610bba565b610dbf5760405162461bcd60e51b815260040161016990611900565b610dc8836110de565b610dd18261118f565b8015610de3576000805461ff00191690555b505050565b6000828152603360205260408120546001600160a01b031615610e9857600083815260336020526040908190205490516313bf242360e31b81526001600160a01b03909116908190639df9211890610e44908690600401611709565b60206040518083038186803b158015610e5c57600080fd5b505afa158015610e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e949190810190611607565b9150505b92915050565b610ea6610bba565b610ec25760405162461bcd60e51b815260040161016990611900565b6001600160a01b03811660009081526038602052604090205460ff1615610efb5760405162461bcd60e51b815260040161016990611935565b6001600160a01b038116301415610f245760405162461bcd60e51b81526004016101699061183e565b6001600160a01b03811660009081526038602052604090819020805460ff19166001179055517f4b25d4880707e035ab47f6b15a868abe2d90dd17251c8a5c81673eea42e2be5790610ba090839061165c565b60375481565b60366020526000908152604090205481565b610f97610bba565b610fb35760405162461bcd60e51b815260040161016990611900565b610fbc816112e5565b50565b610fc7610bba565b610fe35760405162461bcd60e51b815260040161016990611900565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611019573d6000803e3d6000fd5b50816001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364826040516110539190611709565b60405180910390a25050565b6000611069610acf565b6040516308fc698560e11b815290915081906001600160a01b038216906311f8d30a9061109c9087908790600401611712565b600060405180830381600087803b1580156110b657600080fd5b505af11580156110ca573d6000803e3d6000fd5b5050505050505050565b3390565b303b1590565b600054610100900460ff16806110f757506110f76110d8565b80611105575060005460ff16155b6111215760405162461bcd60e51b81526004016101699061196c565b600054610100900460ff1615801561114c576000805460ff1961ff0019909116610100171660011790555b611154610bba565b6111705760405162461bcd60e51b815260040161016990611900565b611179826112e5565b801561118b576000805461ff00191690555b5050565b600054610100900460ff16806111a857506111a86110d8565b806111b6575060005460ff16155b6111d25760405162461bcd60e51b81526004016101699061196c565b600054610100900460ff161580156111fd576000805460ff1961ff0019909116610100171660011790555b603482905560005b60028110156112cf57600060405161121c90611367565b604051809103906000f080158015611238573d6000803e3d6000fd5b5060405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de89061126890309060040161165c565b600060405180830381600087803b15801561128257600080fd5b505af1158015611296573d6000803e3d6000fd5b505050600083815260336020526040902080546001600160a01b0319166001600160a01b03939093169290921790915550600101611205565b50801561118b576000805461ff00191690555050565b6001600160a01b03811661130b5760405162461bcd60e51b81526004016101699061178c565b6035546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603580546001600160a01b0319166001600160a01b0392909216919091179055565b61061a80611aeb83390190565b8035610e9881611ad5565b600082601f83011261138f578081fd5b813567ffffffffffffffff8111156113a5578182fd5b6113b8601f8201601f1916602001611a7e565b91508082528360208285010111156113cf57600080fd5b8060208401602084013760009082016020015292915050565b60006101008083850312156113fb578182fd5b61140481611a7e565b9150506114118383611374565b81526114208360208401611374565b6020820152604082013567ffffffffffffffff81111561143f57600080fd5b61144b8482850161137f565b604083015250606082013560608201526080820135608082015260a082013560a082015260c082013560c08201526114868360e08401611374565b60e082015292915050565b6000602082840312156114a2578081fd5b81356114ad81611ad5565b9392505050565b6000806000606084860312156114c8578182fd5b83356114d381611ad5565b925060208401356114e381611ad5565b929592945050506040919091013590565b60008060408385031215611506578182fd5b823561151181611ad5565b946020939093013593505050565b600080600060608486031215611533578283fd5b833561153e81611ad5565b925060208401359150604084013561155581611ad5565b809150509250925092565b600060208284031215611571578081fd5b813567ffffffffffffffff811115611587578182fd5b611593848285016113e8565b949350505050565b600080604083850312156115ad578182fd5b823567ffffffffffffffff8111156115c3578283fd5b6115cf858286016113e8565b925050602083013580151581146115e4578182fd5b809150509250929050565b600060208284031215611600578081fd5b5035919050565b600060208284031215611618578081fd5b5051919050565b60008060408385031215611631578182fd5b50508035926020909101359150565b60008251611652818460208701611aa5565b9190910192915050565b6001600160a01b0391909116815260200190565b600061010060018060a01b03808c168452808b1660208501528160408501528951808386015261012092506116ab8184870160208e01611aa5565b6060850199909952608084019790975260a08301959095525060c081019290925290921660e0830152601f909201601f191601019392505050565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b918252602082015260400190565b6020808252818101527f4e6f2076616c75652070726f766964656420746f206465706f736974466f722e604082015260600190565b6020808252601e908201527f4f6e6c7920454f412063616e206465706f736974206469726563746c792e0000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526018908201527f4e6f7420656e6f7567682067617320737570706c6965642e0000000000000000604082015260600190565b6020808252818101527f52656c61796572206d7573742063616c6c20746869732066756e6374696f6e2e604082015260600190565b60208082526034908201527f5468652072656c617920636f6e74726163742063616e6e6f7420626520696e736040820152733a30b63632b21030b99030903932b630bcb2b91760611b606082015260800190565b6020808252601e908201527f4e6f2076616c75652070726f766964656420746f2066616c6c6261636b2e0000604082015260600190565b6020808252601a908201527f52656c61796572206d75737420626520696e7374616c6c65642e000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601d908201527f52656c6179657220697320616c726561647920696e7374616c6c65642e000000604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526029908201527f52656c6179207478204d55535420626520666f7220746869732072656c61792060408201526831b7b73a3930b1ba1760b91b606082015260800190565b60208082526024908201527f4465706f7369746f7220686173206e65766572206465706f73697465642066756040820152633732399760e11b606082015260800190565b6020808252601e908201527f4e6f7420656e6f7567682062616c616e636520746f206d6967726174652e0000604082015260600190565b60405181810167ffffffffffffffff81118282101715611a9d57600080fd5b604052919050565b60005b83811015611ac0578181015183820152602001611aa8565b83811115611acf576000848401525b50505050565b6001600160a01b0381168114610fbc57600080fdfe608060405260006100176001600160e01b0361006a16565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b61059d8061007d6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b146100ee5780638f32d59b146101035780639df9211814610118578063c4d66de81461012b578063f2fde38b1461013e5761009e565b806311f8d30a146100a357806317634514146100b857806320ffd56d146100d657806341c0e1b5146100de578063715018a6146100e6575b600080fd5b6100b66100b1366004610455565b610151565b005b6100c06101a7565b6040516100cd919061055e565b60405180910390f35b6100c06101ad565b6100b66101b3565b6100b66101ea565b6100f6610258565b6040516100cd9190610476565b61010b610267565b6040516100cd919061048a565b6100c061012636600461043d565b61028d565b6100b661013936600461040f565b61029f565b6100b661014c36600461040f565b610353565b610159610267565b61017e5760405162461bcd60e51b8152600401610175906104db565b60405180910390fd5b6000828152603560205260409020546101a35760008281526035602052604090208190555b5050565b60345481565b60345490565b6101bb610267565b6101d75760405162461bcd60e51b8152600401610175906104db565b6101df610258565b6001600160a01b0316ff5b6101f2610267565b61020e5760405162461bcd60e51b8152600401610175906104db565b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6033546000906001600160a01b031661027e610383565b6001600160a01b031614905090565b60009081526035602052604090205490565b600054610100900460ff16806102b857506102b8610387565b806102c6575060005460ff16155b6102e25760405162461bcd60e51b815260040161017590610510565b600054610100900460ff1615801561030d576000805460ff1961ff0019909116610100171660011790555b610315610267565b6103315760405162461bcd60e51b8152600401610175906104db565b4360345561033e8261038d565b80156101a3576000805461ff00191690555050565b61035b610267565b6103775760405162461bcd60e51b8152600401610175906104db565b6103808161038d565b50565b3390565b303b1590565b6001600160a01b0381166103b35760405162461bcd60e51b815260040161017590610495565b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215610420578081fd5b81356001600160a01b0381168114610436578182fd5b9392505050565b60006020828403121561044e578081fd5b5035919050565b60008060408385031215610467578081fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b9081526020019056fea2646970667358221220c3a1944e96b5b39558436742e100bedc806ba385b6484ef80b9beac3786d2d6a64736f6c6343000602003344496df070da3f045064f6d6f394484a8de10d5710290d619b67d975ec89320fa26469706673582212208f3869b928adfa627e3d3d43ad5f9d15bba906945fc21b2651dc7cd4e68a3be464736f6c63430006020033
Deployed Bytecode
0x6080604052600436106101445760003560e01c806391ad27b4116100b6578063e345f8d11161006f578063e345f8d1146103d5578063e539a027146103f5578063e775716214610415578063eed75f6d1461042a578063f2fde38b1461044a578063f3fef3a31461046a576101e3565b806391ad27b414610343578063947a36fb146103585780639f1d92671461036d578063a63d6e441461038d578063aa67c919146103a2578063cd6dc687146103b5576101e3565b80635300f841116101085780635300f841146102a2578063715018a6146102cf5780637fd99437146102e457806386f31f2e146102f95780638da5cb5b146103195780638f32d59b1461032e576101e3565b80630c74dc6c146101e857806327a82be51461021e5780632e2d00eb1461024057806334ee6476146102625780633b9ca2d014610282576101e3565b366101e357600034116101725760405162461bcd60e51b815260040161016990611892565b60405180910390fd5b3233146101915760405162461bcd60e51b815260040161016990611755565b600061019c3361048a565b905080336001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15346040516101d89190611709565b60405180910390a350005b600080fd5b3480156101f457600080fd5b50610208610203366004611560565b6104e8565b6040516102159190611709565b60405180910390f35b34801561022a57600080fd5b5061023361053f565b604051610215919061165c565b34801561024c57600080fd5b5061026061025b36600461159b565b61074f565b005b34801561026e57600080fd5b5061023361027d3660046115ef565b610947565b34801561028e57600080fd5b5061026061029d36600461151f565b610962565b3480156102ae57600080fd5b506102c26102bd366004611491565b610a4c565b60405161021591906116e6565b3480156102db57600080fd5b50610260610a61565b3480156102f057600080fd5b50610233610acf565b34801561030557600080fd5b50610260610314366004611491565b610af4565b34801561032557600080fd5b50610233610bab565b34801561033a57600080fd5b506102c2610bba565b34801561034f57600080fd5b50610208610be0565b34801561036457600080fd5b50610208610be6565b34801561037957600080fd5b506102606103883660046114b4565b610bec565b34801561039957600080fd5b50610208610cb5565b6102606103b0366004611491565b610cba565b3480156103c157600080fd5b506102606103d03660046114f4565b610d2d565b3480156103e157600080fd5b506102086103f036600461161f565b610de8565b34801561040157600080fd5b50610260610410366004611491565b610e9e565b34801561042157600080fd5b50610208610f77565b34801561043657600080fd5b50610208610445366004611491565b610f7d565b34801561045657600080fd5b50610260610465366004611491565b610f8f565b34801561047657600080fd5b506102606104853660046114f4565b610fbf565b6001600160a01b0381166000908152603660205260408120546104cc5760378054600101908190556001600160a01b0383166000908152603660205260409020555b506001600160a01b031660009081526036602052604090205490565b80516020808301516040808501516060860151608087015160a088015160c089015160e08a01519551600099610522999098979101611670565b604051602081830303815290604052805190602001209050919050565b60345460008080526033602090815260008051602061210583398151915254604080516320ffd56d60e01b815290519394936001600160a01b03909216926320ffd56d92600480840193829003018186803b15801561059d57600080fd5b505afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105d59190810190611607565b43031061074c5760336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf9477805460008051602061210583398151915254600160009081526001600160a01b031983166001600160a01b03928316179093556040519116919061064590611367565b604051809103906000f080158015610661573d6000803e3d6000fd5b5060405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de89061069190309060040161165c565b600060405180830381600087803b1580156106ab57600080fd5b505af11580156106bf573d6000803e3d6000fd5b50506000808052603360205260008051602061210583398151915280546001600160a01b0319166001600160a01b0386811691909117909155604080516341c0e1b560e01b8152905191871694506341c0e1b59350600480820193929182900301818387803b15801561073157600080fd5b505af1158015610745573d6000803e3d6000fd5b5050505050505b90565b60005a3360009081526038602052604090205490915060ff166107845760405162461bcd60e51b815260040161016990611809565b60e08301516001600160a01b031630146107b05760405162461bcd60e51b8152600401610169906119ba565b60006107bb846104e8565b905083608001516000146107d3576107d3814361105f565b603f8460a00151816107e157fe5b048460a00151016103e8015a1161080a5760405162461bcd60e51b8152600401610169906117d2565b600084600001516001600160a01b03168560a0015186604001516040516108319190611640565b60006040518083038160008787f1925050503d806000811461086f576040519150601f19603f3d011682016040523d82523d6000602084013e610874565b606091505b5090915060009050601036025a8503016109330161520801905084156108e757604051612710919091019033903a830280156108fc02916000818181858888f193505050506108e7576040517fbf3f3724ef99c8fe84317065fe5f9cc66d0c3dd306d1e3a876b3ec97951a3f4790600090a15b85600001516001600160a01b031686602001516001600160a01b0316847f9da746664b5b3b1008960a15062f8f7ce0b9b8e584cf045b1d615997ece65f0d85853a604051610937939291906116f1565b60405180910390a4505050505050565b6033602052600090815260409020546001600160a01b031681565b61096a610bba565b6109865760405162461bcd60e51b815260040161016990611900565b814710156109a65760405162461bcd60e51b815260040161016990611a47565b60405163aa67c91960e01b81526001600160a01b0382169063aa67c9199084906109d490879060040161165c565b6000604051808303818588803b1580156109ed57600080fd5b505af1158015610a01573d6000803e3d6000fd5b5050505050826001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436483604051610a3f9190611709565b60405180910390a2505050565b60386020526000908152604090205460ff1681565b610a69610bba565b610a855760405162461bcd60e51b815260040161016990611900565b6035546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603580546001600160a01b0319169055565b600080526033602052600080516020612105833981519152546001600160a01b031690565b610afc610bba565b610b185760405162461bcd60e51b815260040161016990611900565b6001600160a01b03811660009081526038602052604090205460ff16610b505760405162461bcd60e51b8152600401610169906118c9565b6001600160a01b03811660009081526038602052604090819020805460ff19169055517fbf71a2e72339c706ee003aec232ad0e38d32bda19a6d513193425047a33c7dde90610ba090839061165c565b60405180910390a150565b6035546001600160a01b031690565b6035546000906001600160a01b0316610bd16110d4565b6001600160a01b031614905090565b60345490565b60345481565b610bf4610bba565b610c105760405162461bcd60e51b815260040161016990611900565b6001600160a01b038316600090815260366020526040902054610c455760405162461bcd60e51b815260040161016990611a03565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610c7b573d6000803e3d6000fd5b50826001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051610a3f9190611709565b600290565b60003411610cda5760405162461bcd60e51b815260040161016990611720565b6000610ce58261048a565b905080826001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534604051610d219190611709565b60405180910390a35050565b600054610100900460ff1680610d465750610d466110d8565b80610d54575060005460ff16155b610d705760405162461bcd60e51b81526004016101699061196c565b600054610100900460ff16158015610d9b576000805460ff1961ff0019909116610100171660011790555b610da3610bba565b610dbf5760405162461bcd60e51b815260040161016990611900565b610dc8836110de565b610dd18261118f565b8015610de3576000805461ff00191690555b505050565b6000828152603360205260408120546001600160a01b031615610e9857600083815260336020526040908190205490516313bf242360e31b81526001600160a01b03909116908190639df9211890610e44908690600401611709565b60206040518083038186803b158015610e5c57600080fd5b505afa158015610e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e949190810190611607565b9150505b92915050565b610ea6610bba565b610ec25760405162461bcd60e51b815260040161016990611900565b6001600160a01b03811660009081526038602052604090205460ff1615610efb5760405162461bcd60e51b815260040161016990611935565b6001600160a01b038116301415610f245760405162461bcd60e51b81526004016101699061183e565b6001600160a01b03811660009081526038602052604090819020805460ff19166001179055517f4b25d4880707e035ab47f6b15a868abe2d90dd17251c8a5c81673eea42e2be5790610ba090839061165c565b60375481565b60366020526000908152604090205481565b610f97610bba565b610fb35760405162461bcd60e51b815260040161016990611900565b610fbc816112e5565b50565b610fc7610bba565b610fe35760405162461bcd60e51b815260040161016990611900565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611019573d6000803e3d6000fd5b50816001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364826040516110539190611709565b60405180910390a25050565b6000611069610acf565b6040516308fc698560e11b815290915081906001600160a01b038216906311f8d30a9061109c9087908790600401611712565b600060405180830381600087803b1580156110b657600080fd5b505af11580156110ca573d6000803e3d6000fd5b5050505050505050565b3390565b303b1590565b600054610100900460ff16806110f757506110f76110d8565b80611105575060005460ff16155b6111215760405162461bcd60e51b81526004016101699061196c565b600054610100900460ff1615801561114c576000805460ff1961ff0019909116610100171660011790555b611154610bba565b6111705760405162461bcd60e51b815260040161016990611900565b611179826112e5565b801561118b576000805461ff00191690555b5050565b600054610100900460ff16806111a857506111a86110d8565b806111b6575060005460ff16155b6111d25760405162461bcd60e51b81526004016101699061196c565b600054610100900460ff161580156111fd576000805460ff1961ff0019909116610100171660011790555b603482905560005b60028110156112cf57600060405161121c90611367565b604051809103906000f080158015611238573d6000803e3d6000fd5b5060405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de89061126890309060040161165c565b600060405180830381600087803b15801561128257600080fd5b505af1158015611296573d6000803e3d6000fd5b505050600083815260336020526040902080546001600160a01b0319166001600160a01b03939093169290921790915550600101611205565b50801561118b576000805461ff00191690555050565b6001600160a01b03811661130b5760405162461bcd60e51b81526004016101699061178c565b6035546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603580546001600160a01b0319166001600160a01b0392909216919091179055565b61061a80611aeb83390190565b8035610e9881611ad5565b600082601f83011261138f578081fd5b813567ffffffffffffffff8111156113a5578182fd5b6113b8601f8201601f1916602001611a7e565b91508082528360208285010111156113cf57600080fd5b8060208401602084013760009082016020015292915050565b60006101008083850312156113fb578182fd5b61140481611a7e565b9150506114118383611374565b81526114208360208401611374565b6020820152604082013567ffffffffffffffff81111561143f57600080fd5b61144b8482850161137f565b604083015250606082013560608201526080820135608082015260a082013560a082015260c082013560c08201526114868360e08401611374565b60e082015292915050565b6000602082840312156114a2578081fd5b81356114ad81611ad5565b9392505050565b6000806000606084860312156114c8578182fd5b83356114d381611ad5565b925060208401356114e381611ad5565b929592945050506040919091013590565b60008060408385031215611506578182fd5b823561151181611ad5565b946020939093013593505050565b600080600060608486031215611533578283fd5b833561153e81611ad5565b925060208401359150604084013561155581611ad5565b809150509250925092565b600060208284031215611571578081fd5b813567ffffffffffffffff811115611587578182fd5b611593848285016113e8565b949350505050565b600080604083850312156115ad578182fd5b823567ffffffffffffffff8111156115c3578283fd5b6115cf858286016113e8565b925050602083013580151581146115e4578182fd5b809150509250929050565b600060208284031215611600578081fd5b5035919050565b600060208284031215611618578081fd5b5051919050565b60008060408385031215611631578182fd5b50508035926020909101359150565b60008251611652818460208701611aa5565b9190910192915050565b6001600160a01b0391909116815260200190565b600061010060018060a01b03808c168452808b1660208501528160408501528951808386015261012092506116ab8184870160208e01611aa5565b6060850199909952608084019790975260a08301959095525060c081019290925290921660e0830152601f909201601f191601019392505050565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b918252602082015260400190565b6020808252818101527f4e6f2076616c75652070726f766964656420746f206465706f736974466f722e604082015260600190565b6020808252601e908201527f4f6e6c7920454f412063616e206465706f736974206469726563746c792e0000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526018908201527f4e6f7420656e6f7567682067617320737570706c6965642e0000000000000000604082015260600190565b6020808252818101527f52656c61796572206d7573742063616c6c20746869732066756e6374696f6e2e604082015260600190565b60208082526034908201527f5468652072656c617920636f6e74726163742063616e6e6f7420626520696e736040820152733a30b63632b21030b99030903932b630bcb2b91760611b606082015260800190565b6020808252601e908201527f4e6f2076616c75652070726f766964656420746f2066616c6c6261636b2e0000604082015260600190565b6020808252601a908201527f52656c61796572206d75737420626520696e7374616c6c65642e000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601d908201527f52656c6179657220697320616c726561647920696e7374616c6c65642e000000604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526029908201527f52656c6179207478204d55535420626520666f7220746869732072656c61792060408201526831b7b73a3930b1ba1760b91b606082015260800190565b60208082526024908201527f4465706f7369746f7220686173206e65766572206465706f73697465642066756040820152633732399760e11b606082015260800190565b6020808252601e908201527f4e6f7420656e6f7567682062616c616e636520746f206d6967726174652e0000604082015260600190565b60405181810167ffffffffffffffff81118282101715611a9d57600080fd5b604052919050565b60005b83811015611ac0578181015183820152602001611aa8565b83811115611acf576000848401525b50505050565b6001600160a01b0381168114610fbc57600080fdfe608060405260006100176001600160e01b0361006a16565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b61059d8061007d6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b146100ee5780638f32d59b146101035780639df9211814610118578063c4d66de81461012b578063f2fde38b1461013e5761009e565b806311f8d30a146100a357806317634514146100b857806320ffd56d146100d657806341c0e1b5146100de578063715018a6146100e6575b600080fd5b6100b66100b1366004610455565b610151565b005b6100c06101a7565b6040516100cd919061055e565b60405180910390f35b6100c06101ad565b6100b66101b3565b6100b66101ea565b6100f6610258565b6040516100cd9190610476565b61010b610267565b6040516100cd919061048a565b6100c061012636600461043d565b61028d565b6100b661013936600461040f565b61029f565b6100b661014c36600461040f565b610353565b610159610267565b61017e5760405162461bcd60e51b8152600401610175906104db565b60405180910390fd5b6000828152603560205260409020546101a35760008281526035602052604090208190555b5050565b60345481565b60345490565b6101bb610267565b6101d75760405162461bcd60e51b8152600401610175906104db565b6101df610258565b6001600160a01b0316ff5b6101f2610267565b61020e5760405162461bcd60e51b8152600401610175906104db565b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6033546000906001600160a01b031661027e610383565b6001600160a01b031614905090565b60009081526035602052604090205490565b600054610100900460ff16806102b857506102b8610387565b806102c6575060005460ff16155b6102e25760405162461bcd60e51b815260040161017590610510565b600054610100900460ff1615801561030d576000805460ff1961ff0019909116610100171660011790555b610315610267565b6103315760405162461bcd60e51b8152600401610175906104db565b4360345561033e8261038d565b80156101a3576000805461ff00191690555050565b61035b610267565b6103775760405162461bcd60e51b8152600401610175906104db565b6103808161038d565b50565b3390565b303b1590565b6001600160a01b0381166103b35760405162461bcd60e51b815260040161017590610495565b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215610420578081fd5b81356001600160a01b0381168114610436578182fd5b9392505050565b60006020828403121561044e578081fd5b5035919050565b60008060408385031215610467578081fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b9081526020019056fea2646970667358221220c3a1944e96b5b39558436742e100bedc806ba385b6484ef80b9beac3786d2d6a64736f6c6343000602003344496df070da3f045064f6d6f394484a8de10d5710290d619b67d975ec89320fa26469706673582212208f3869b928adfa627e3d3d43ad5f9d15bba906945fc21b2651dc7cd4e68a3be464736f6c63430006020033
Deployed Bytecode Sourcemap
15095:4652:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13420:1;13408:9;:13;13400:56;;;;-1:-1:-1;;;13400:56:0;;;;;;;;;;;;;;;;;13475:9;13488:10;13475:23;13467:66;;;;-1:-1:-1;;;13467:66:0;;;;;;;;;13544:10;13557:29;13575:10;13557:17;:29::i;:::-;13544:42;;13633:5;13610:10;-1:-1:-1;;;;;13602:37:0;;13622:9;13602:37;;;;;;;;;;;;;;;13362:285;15095:4652;;;;;11427:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11427:228:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8948:467;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8948:467:0;;;:::i;:::-;;;;;;;;16181:2809;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16181:2809:0;;;;;;;;:::i;:::-;;7793:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7793:43:0;;;;;;;;:::i;14439:298::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14439:298:0;;;;;;;;:::i;15164:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15164:40:0;;;;;;;;:::i;:::-;;;;;;;;2824:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2824:148:0;;;:::i;9489:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9489:96:0;;;:::i;19524:220::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19524:220:0;;;;;;;;:::i;2013:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2013:79:0;;;:::i;2379:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2379:94:0;;;:::i;8034:81::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8034:81:0;;;:::i;7842:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7842:20:0;;;:::i;14051:276::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14051:276:0;;;;;;;;:::i;8168:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8168:88:0;;;:::i;12660:236::-;;;;;;;;;:::i;15625:194::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15625:194:0;;;;;;;;:::i;9783:306::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9783:306:0;;;;;;;;:::i;19096:320::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19096:320:0;;;;;;;;:::i;11866:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11866:28:0;;;:::i;11817:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11817:42:0;;;;;;;;:::i;3127:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3127:117:0;;;;;;;;:::i;13712:163::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13712:163:0;;;;;;;;:::i;12971:284::-;-1:-1:-1;;;;;13055:22:0;;13035:4;13055:22;;;:10;:22;;;;;;13052:154;;13118:16;;;13137:1;13118:20;13099:39;;;;-1:-1:-1;;;;;13153:22:0;;-1:-1:-1;13153:22:0;;;:10;:22;;;;;:41;13052:154;-1:-1:-1;;;;;;13225:22:0;;;;;:10;:22;;;;;;;12971:284::o;11427:228::-;11541:7;;11550:9;;;;;11561;;;;;11572:13;;;;11587:17;;;;11606:13;;;;11621:12;;;;11635:10;;;;11530:116;;11495:7;;11530:116;;11541:7;;11550:9;11635:10;11530:116;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11530:116:0;;;11520:127;;;;;;11513:134;;11427:228;;;:::o;8948:467::-;9139:8;;8990:9;9102:13;;;:10;:13;;;;-1:-1:-1;;;;;;;;;;;9102:13:0;;9092:43;;-1:-1:-1;;;9092:43:0;;;;8990:9;;9139:8;-1:-1:-1;;;;;9102:13:0;;;;9092:41;;:43;;;;;;;;;;9102:13;9092:43;;;5:2:-1;;;;30:1;27;20:12;5:2;9092:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9092:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9092:43:0;;;;;;;;;9077:12;:58;:70;9074:335;;9181:10;:13;;;;;-1:-1:-1;;;;;;;;;;;9223:13:0;9192:1;9162:16;9207:13;;;-1:-1:-1;;;;;;9207:29:0;;-1:-1:-1;;;;;9223:13:0;;;9207:29;;;;9181:13;9264:15;9181:13;;;9162:16;9264:15;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;9292:28:0;;-1:-1:-1;;;9292:28:0;;9249:30;;-1:-1:-1;;;;;;9292:13:0;;;;;:28;;9314:4;;9292:28;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9292:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;9333:13:0;;;;:10;:13;;-1:-1:-1;;;;;;;;;;;9333:27:0;;-1:-1:-1;;;;;;9333:27:0;-1:-1:-1;;;;;9333:27:0;;;;;;;;;;:13;9373:26;;-1:-1:-1;;;9373:26:0;;;;:24;;;;-1:-1:-1;9373:24:0;;-1:-1:-1;9373:26:0;;;;;9333:13;9373:26;;;;;;9333:13;9373:24;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;9373:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9373:26:0;;;;9074:335;;;8948:467;:::o;16181:2809::-;16258:15;16276:9;16520:10;16511:20;;;;:8;:20;;;;;;16258:27;;-1:-1:-1;16511:20:0;;16503:65;;;;-1:-1:-1;;;16503:65:0;;;;;;;;;16587:14;;;;-1:-1:-1;;;;;16587:31:0;16613:4;16587:31;16579:85;;;;-1:-1:-1;;;16579:85:0;;;;;;;;;16677:17;16697:26;16714:8;16697:16;:26::i;:::-;16677:46;;16797:8;:21;;;16822:1;16797:26;16794:245;;16993:34;17003:9;17014:12;16993:9;:34::i;:::-;17989:2;17969:8;:17;;;:22;;;;;;17949:8;:17;;;:42;17995:4;17948:51;17936:9;:63;17928:100;;;;-1:-1:-1;;;17928:100:0;;;;;;;;;18078:12;18095:8;:11;;;-1:-1:-1;;;;;18095:16:0;18116:8;:17;;;18135:8;:13;;;18095:54;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;-1:-1;18077:72:0;;-1:-1:-1;18260:12:0;;-1:-1:-1;18364:2:0;18346:8;:20;18288:9;18275:10;:22;:92;18445:4;18275:174;18542:5;18275:272;18260:287;;18583:10;18580:302;;;18700:36;;18622:11;18610:24;;;;;18700:10;;18724:11;18716:19;;18700:36;;;;;;;;;18716:19;18700:10;:36;;;;;;;18696:175;;18843:12;;;;;;;18696:175;18948:8;:11;;;-1:-1:-1;;;;;18899:83:0;18933:8;:13;;;-1:-1:-1;;;;;18899:83:0;18913:9;18899:83;18924:7;18961;18970:11;18899:83;;;;;;;;;;;;;;;;;16181:2809;;;;;;:::o;7793:43::-;;;;;;;;;;;;-1:-1:-1;;;;;7793:43:0;;:::o;14439:298::-;2225:9;:7;:9::i;:::-;2217:54;;;;-1:-1:-1;;;2217:54:0;;;;;;;;;14586:6:::1;14561:21;:31;;14553:74;;;;-1:-1:-1::0;;;14553:74:0::1;;;;;;;;;14638:48;::::0;-1:-1:-1;;;14638:48:0;;-1:-1:-1;;;;;14638:23:0;::::1;::::0;::::1;::::0;14668:6;;14638:48:::1;::::0;14676:9;;14638:48:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;14638:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14638:48:0;;;;;14711:9;-1:-1:-1::0;;;;;14702:27:0::1;;14722:6;14702:27;;;;;;;;;;;;;;;14439:298:::0;;;:::o;15164:40::-;;;;;;;;;;;;;;;:::o;2824:148::-;2225:9;:7;:9::i;:::-;2217:54;;;;-1:-1:-1;;;2217:54:0;;;;;;;;;2915:6:::1;::::0;2894:40:::1;::::0;2931:1:::1;::::0;-1:-1:-1;;;;;2915:6:0::1;::::0;2894:40:::1;::::0;2931:1;;2894:40:::1;2945:6;:19:::0;;-1:-1:-1;;;;;;2945:19:0::1;::::0;;2824:148::o;9489:96::-;9540:7;9565:13;;:10;:13;;-1:-1:-1;;;;;;;;;;;9565:13:0;-1:-1:-1;;;;;9565:13:0;9489:96;:::o;19524:220::-;2225:9;:7;:9::i;:::-;2217:54;;;;-1:-1:-1;;;2217:54:0;;;;;;;;;-1:-1:-1;;;;;19604:18:0;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;19596:57;;;;-1:-1:-1::0;;;19596:57:0::1;;;;;;;;;-1:-1:-1::0;;;;;19666:18:0;::::1;19687:5;19666:18:::0;;;:8:::1;:18;::::0;;;;;;:26;;-1:-1:-1;;19666:26:0::1;::::0;;19708:28;::::1;::::0;::::1;::::0;19675:8;;19708:28:::1;;;;;;;;;;19524:220:::0;:::o;2013:79::-;2078:6;;-1:-1:-1;;;;;2078:6:0;2013:79;:::o;2379:94::-;2459:6;;2419:4;;-1:-1:-1;;;;;2459:6:0;2443:12;:10;:12::i;:::-;-1:-1:-1;;;;;2443:22:0;;2436:29;;2379:94;:::o;8034:81::-;8100:8;;8034:81;:::o;7842:20::-;;;;:::o;14051:276::-;2225:9;:7;:9::i;:::-;2217:54;;;;-1:-1:-1;;;2217:54:0;;;;;;;;;-1:-1:-1;;;;;14175:21:0;::::1;14197:1;14175:21:::0;;;:10:::1;:21;::::0;;;;;14167:72:::1;;;;-1:-1:-1::0;;;14167:72:0::1;;;;;;;;;14250:26;::::0;-1:-1:-1;;;;;14250:18:0;::::1;::::0;:26;::::1;;;::::0;14269:6;;14250:26:::1;::::0;;;14269:6;14250:18;:26;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14250:26:0;14301:9;-1:-1:-1::0;;;;;14292:27:0::1;;14312:6;14292:27;;;;;;;8168:88:::0;7932:1;8168:88;:::o;12660:236::-;12746:1;12734:9;:13;12726:58;;;;-1:-1:-1;;;12726:58:0;;;;;;;;;12795:10;12808:28;12826:9;12808:17;:28::i;:::-;12795:41;;12882:5;12860:9;-1:-1:-1;;;;;12852:36:0;;12871:9;12852:36;;;;;;;;;;;;;;;12660:236;;:::o;15625:194::-;4769:12;;;;;;;;:31;;;4785:15;:13;:15::i;:::-;4769:47;;;-1:-1:-1;4805:11:0;;;;4804:12;4769:47;4761:106;;;;-1:-1:-1;;;4761:106:0;;;;;;;;;4876:19;4899:12;;;;;;4898:13;4918:83;;;;4947:12;:19;;-1:-1:-1;;;;4947:19:0;;;;;4975:18;4962:4;4975:18;;;4918:83;2225:9:::1;:7;:9::i;:::-;2217:54;;;;-1:-1:-1::0;;;2217:54:0::1;;;;;;;;;15725:36:::2;15751:9;15725:25;:36::i;:::-;15772:39;15796:14;15772:23;:39::i;:::-;5023:14:::0;5019:57;;;5063:5;5048:20;;-1:-1:-1;;5048:20:0;;;5019:57;15625:194;;;:::o;9783:306::-;9855:4;9935:22;;;:10;:22;;;;;;-1:-1:-1;;;;;9935:22:0;:36;9932:151;;9986:12;10011:22;;;:10;:22;;;;;;;;10054:19;;-1:-1:-1;;;10054:19:0;;-1:-1:-1;;;;;10011:22:0;;;;;;10054:14;;:19;;10069:3;;10054:19;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10054:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10054:19:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10054:19:0;;;;;;;;;10047:26;;;9932:151;9783:306;;;;:::o;19096:320::-;2225:9;:7;:9::i;:::-;2217:54;;;;-1:-1:-1;;;2217:54:0;;;;;;;;;-1:-1:-1;;;;;19175:18:0;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;19174:19;19166:61;;;;-1:-1:-1::0;;;19166:61:0::1;;;;;;;;;-1:-1:-1::0;;;;;19246:25:0;::::1;19266:4;19246:25;;19238:90;;;;-1:-1:-1::0;;;19238:90:0::1;;;;;;;;;-1:-1:-1::0;;;;;19341:18:0;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;19341:25:0::1;19362:4;19341:25;::::0;;19382:26;::::1;::::0;::::1;::::0;19350:8;;19382:26:::1;;11866:28:::0;;;;:::o;11817:42::-;;;;;;;;;;;;;:::o;3127:117::-;2225:9;:7;:9::i;:::-;2217:54;;;;-1:-1:-1;;;2217:54:0;;;;;;;;;3208:28:::1;3227:8;3208:18;:28::i;:::-;3127:117:::0;:::o;13712:163::-;2225:9;:7;:9::i;:::-;2217:54;;;;-1:-1:-1;;;2217:54:0;;;;;;;;;13798:26:::1;::::0;-1:-1:-1;;;;;13798:18:0;::::1;::::0;:26;::::1;;;::::0;13817:6;;13798:26:::1;::::0;;;13817:6;13798:18;:26;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13798:26:0;13849:9;-1:-1:-1::0;;;;;13840:27:0::1;;13860:6;13840:27;;;;;;;;;;;;;;;13712:163:::0;;:::o;10265:329::-;10355:21;10379:20;:18;:20::i;:::-;10558:29;;-1:-1:-1;;;10558:29:0;;10355:44;;-1:-1:-1;10355:44:0;;-1:-1:-1;;;;;10558:12:0;;;;;:29;;10571:3;;10576:10;;10558:29;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10558:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10558:29:0;;;;10265:329;;;;:::o;786:106::-;874:10;786:106;:::o;5170:508::-;5587:4;5633:17;5665:7;5170:508;:::o;12284:118::-;4769:12;;;;;;;;:31;;;4785:15;:13;:15::i;:::-;4769:47;;;-1:-1:-1;4805:11:0;;;;4804:12;4769:47;4761:106;;;;-1:-1:-1;;;4761:106:0;;;;;;;;;4876:19;4899:12;;;;;;4898:13;4918:83;;;;4947:12;:19;;-1:-1:-1;;;;4947:19:0;;;;;4975:18;4962:4;4975:18;;;4918:83;2225:9:::1;:7;:9::i;:::-;2217:54;;;;-1:-1:-1::0;;;2217:54:0::1;;;;;;;;;12365:29:::2;12384:9;12365:18;:29::i;:::-;5023:14:::0;5019:57;;;5063:5;5048:20;;-1:-1:-1;;5048:20:0;;;5019:57;12284:118;;:::o;8391:434::-;4769:12;;;;;;;;:31;;;4785:15;:13;:15::i;:::-;4769:47;;;-1:-1:-1;4805:11:0;;;;4804:12;4769:47;4761:106;;;;-1:-1:-1;;;4761:106:0;;;;;;;;;4876:19;4899:12;;;;;;4898:13;4918:83;;;;4947:12;:19;;-1:-1:-1;;;;4947:19:0;;;;;4975:18;4962:4;4975:18;;;4918:83;8457:8:::1;:20:::0;;;8657:6:::1;8653:166;7932:1;8667;:14;8653:166;;;8700:12;8715:15;;;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;8742:28:0::1;::::0;-1:-1:-1;;;8742:28:0;;8700:30;;-1:-1:-1;;;;;;8742:13:0;::::1;::::0;::::1;::::0;:28:::1;::::0;8764:4:::1;::::0;8742:28:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;8742:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;;8782:13:0::1;::::0;;;:10:::1;:13;::::0;;;;:27;;-1:-1:-1;;;;;;8782:27:0::1;-1:-1:-1::0;;;;;8782:27:0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;8683:3:0::1;8653:166;;;;5023:14:::0;5019:57;;;5063:5;5048:20;;-1:-1:-1;;5048:20:0;;;8391:434;;:::o;3350:237::-;-1:-1:-1;;;;;3432:22:0;;3424:73;;;;-1:-1:-1;;;3424:73:0;;;;;;;;;3534:6;;3513:38;;-1:-1:-1;;;;;3513:38:0;;;;3534:6;;3513:38;;3534:6;;3513:38;3562:6;:17;;-1:-1:-1;;;;;;3562:17:0;-1:-1:-1;;;;;3562:17:0;;;;;;;;;;3350:237::o;15095:4652::-;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;564:432;;661:3;654:4;646:6;642:17;638:27;628:2;;-1:-1;;669:12;628:2;716:6;703:20;23137:18;23129:6;23126:30;23123:2;;;-1:-1;;23159:12;23123:2;738:60;23232:9;23213:17;;-1:-1;;23209:33;23300:4;23290:15;738:60;;;729:69;;818:6;811:5;804:21;922:3;23300:4;913:6;846;904:16;;901:25;898:2;;;939:1;;929:12;898:2;25407:6;23300:4;846:6;842:17;23300:4;880:5;876:16;25384:30;25463:1;25445:16;;;23300:4;25445:16;25438:27;880:5;621:375;-1:-1;;621:375;1220:1455;;1333:6;;1321:9;1316:3;1312:19;1308:32;1305:2;;;-1:-1;;1343:12;1305:2;1371:22;1333:6;1371:22;;;1362:31;;;1473:49;1518:3;1494:22;1473:49;;;1455:16;1448:75;1617:57;1670:3;1584:2;1650:9;1646:22;1617:57;;;1584:2;1603:5;1599:16;1592:83;1764:2;1753:9;1749:18;1736:32;1788:18;1780:6;1777:30;1774:2;;;1441:1;;1810:12;1774:2;1855:54;1905:3;1896:6;1885:9;1881:22;1855:54;;;1764:2;1841:5;1837:16;1830:80;;1975:2;2033:9;2029:22;2749:20;1975:2;1994:5;1990:16;1983:75;2127:3;2186:9;2182:22;2749:20;2127:3;2147:5;2143:16;2136:75;2276:3;2335:9;2331:22;2749:20;2276:3;2296:5;2292:16;2285:75;2424:3;2483:9;2479:22;2749:20;2424:3;2444:5;2440:16;2433:75;2604:49;2649:3;2570;2629:9;2625:22;2604:49;;;2570:3;2590:5;2586:16;2579:75;1299:1376;;;;;2960:241;;3064:2;3052:9;3043:7;3039:23;3035:32;3032:2;;;-1:-1;;3070:12;3032:2;85:6;72:20;97:33;124:5;97:33;;;3122:63;3026:175;-1:-1;;;3026:175;3208:523;;;;3362:2;3350:9;3341:7;3337:23;3333:32;3330:2;;;-1:-1;;3368:12;3330:2;230:6;217:20;242:41;277:5;242:41;;;3420:71;-1:-1;3528:2;3575:22;;217:20;242:41;217:20;242:41;;;3324:407;;3536:71;;-1:-1;;;3644:2;3683:22;;;;2749:20;;3324:407;3738:382;;;3867:2;3855:9;3846:7;3842:23;3838:32;3835:2;;;-1:-1;;3873:12;3835:2;230:6;217:20;242:41;277:5;242:41;;;3925:71;4033:2;4072:22;;;;2749:20;;-1:-1;;;3829:291;4127:551;;;;4295:2;4283:9;4274:7;4270:23;4266:32;4263:2;;;-1:-1;;4301:12;4263:2;230:6;217:20;242:41;277:5;242:41;;;4353:71;-1:-1;4461:2;4500:22;;2749:20;;-1:-1;4569:2;4630:22;;1093:20;1118:55;1093:20;1118:55;;;4577:85;;;;4257:421;;;;;;5058:375;;5186:2;5174:9;5165:7;5161:23;5157:32;5154:2;;;-1:-1;;5192:12;5154:2;5250:17;5237:31;5288:18;5280:6;5277:30;5274:2;;;-1:-1;;5310:12;5274:2;5340:77;5409:7;5400:6;5389:9;5385:22;5340:77;;;5330:87;5148:285;-1:-1;;;;5148:285;5440:494;;;5582:2;5570:9;5561:7;5557:23;5553:32;5550:2;;;-1:-1;;5588:12;5550:2;5646:17;5633:31;5684:18;5676:6;5673:30;5670:2;;;-1:-1;;5706:12;5670:2;5736:77;5805:7;5796:6;5785:9;5781:22;5736:77;;;5726:87;;;5850:2;5890:9;5886:22;359:20;26206:5;24212:13;24205:21;26184:5;26181:32;26171:2;;-1:-1;;26217:12;26171:2;5858:60;;;;5544:390;;;;;;5941:241;;6045:2;6033:9;6024:7;6020:23;6016:32;6013:2;;;-1:-1;;6051:12;6013:2;-1:-1;2749:20;;6007:175;-1:-1;6007:175;6189:263;;6304:2;6292:9;6283:7;6279:23;6275:32;6272:2;;;-1:-1;;6310:12;6272:2;-1:-1;2897:13;;6266:186;-1:-1;6266:186;6459:366;;;6580:2;6568:9;6559:7;6555:23;6551:32;6548:2;;;-1:-1;;6586:12;6548:2;-1:-1;;2749:20;;;6738:2;6777:22;;;493:20;;-1:-1;6542:283;13449:254;;7970:5;23405:12;8081:52;8126:6;8121:3;8114:4;8107:5;8103:16;8081:52;;;8145:16;;;;;13570:133;-1:-1;;13570:133;13710:213;-1:-1;;;;;24507:54;;;;7068:45;;13828:2;13813:18;;13799:124;14166:1103;;14510:3;23137:18;;24518:42;;;;7106:5;24507:54;7075:3;7068:45;24518:42;7106:5;24507:54;14691:2;14680:9;14676:18;7068:45;14510:3;14728:2;14717:9;14713:18;14706:48;7610:5;23405:12;23561:6;14510:3;14499:9;14495:19;23549;23589:14;;;7703:52;7748:6;23589:14;14499:9;23589:14;14691:2;7729:5;7725:16;7703:52;;;14919:2;14904:18;;7427:37;;;;15002:3;14987:19;;7427:37;;;;15086:3;15071:19;;7427:37;;;;-1:-1;15170:3;15155:19;;7427:37;;;;24507:54;;;15254:3;15239:19;;7068:45;23232:9;25824:14;;;-1:-1;;25820:28;7767:39;;;;-1:-1;;;14481:788;15276:201;24212:13;;24205:21;7310:34;;15388:2;15373:18;;15359:118;15484:423;24212:13;;24205:21;7310:34;;15810:2;15795:18;;7427:37;;;;15893:2;15878:18;;7427:37;15652:2;15637:18;;15623:284;15914:213;7427:37;;;16032:2;16017:18;;16003:124;16134:324;7427:37;;;16444:2;16429:18;;7427:37;16280:2;16265:18;;16251:207;16719:407;16910:2;16924:47;;;16895:18;;;23549:19;8601:34;23589:14;;;8581:55;8655:12;;;16881:245;17133:407;17324:2;17338:47;;;8906:2;17309:18;;;23549:19;8942:32;23589:14;;;8922:53;8994:12;;;17295:245;17547:407;17738:2;17752:47;;;9245:2;17723:18;;;23549:19;9281:34;23589:14;;;9261:55;-1:-1;;;9336:12;;;9329:30;9378:12;;;17709:245;17961:407;18152:2;18166:47;;;9629:2;18137:18;;;23549:19;9665:26;23589:14;;;9645:47;9711:12;;;18123:245;18375:407;18566:2;18580:47;;;18551:18;;;23549:19;9998:34;23589:14;;;9978:55;10052:12;;;18537:245;18789:407;18980:2;18994:47;;;10303:2;18965:18;;;23549:19;10339:34;23589:14;;;10319:55;-1:-1;;;10394:12;;;10387:44;10450:12;;;18951:245;19203:407;19394:2;19408:47;;;10701:2;19379:18;;;23549:19;10737:32;23589:14;;;10717:53;10789:12;;;19365:245;19617:407;19808:2;19822:47;;;11040:2;19793:18;;;23549:19;11076:28;23589:14;;;11056:49;11124:12;;;19779:245;20031:407;20222:2;20236:47;;;20207:18;;;23549:19;11411:34;23589:14;;;11391:55;11465:12;;;20193:245;20445:407;20636:2;20650:47;;;11716:2;20621:18;;;23549:19;11752:31;23589:14;;;11732:52;11803:12;;;20607:245;20859:407;21050:2;21064:47;;;12054:2;21035:18;;;23549:19;12090:34;23589:14;;;12070:55;-1:-1;;;12145:12;;;12138:38;12195:12;;;21021:245;21273:407;21464:2;21478:47;;;12446:2;21449:18;;;23549:19;12482:34;23589:14;;;12462:55;-1:-1;;;12537:12;;;12530:33;12582:12;;;21435:245;21687:407;21878:2;21892:47;;;12833:2;21863:18;;;23549:19;12869:34;23589:14;;;12849:55;-1:-1;;;12924:12;;;12917:28;12964:12;;;21849:245;22101:407;22292:2;22306:47;;;13215:2;22277:18;;;23549:19;13251:32;23589:14;;;13231:53;13303:12;;;22263:245;22735:256;22797:2;22791:9;22823:17;;;22898:18;22883:34;;22919:22;;;22880:62;22877:2;;;22955:1;;22945:12;22877:2;22797;22964:22;22775:216;;-1:-1;22775:216;25480:268;25545:1;25552:101;25566:6;25563:1;25560:13;25552:101;;;25633:11;;;25627:18;25614:11;;;25607:39;25588:2;25581:10;25552:101;;;25668:6;25665:1;25662:13;25659:2;;;25545:1;25724:6;25719:3;25715:16;25708:27;25659:2;;25529:219;;;;25861:117;-1:-1;;;;;24507:54;;25920:35;;25910:2;;25969:1;;25959:12
Swarm Source
ipfs://8f3869b928adfa627e3d3d43ad5f9d15bba906945fc21b2651dc7cd4e68a3be4
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.