Latest 25 from a total of 14,639 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Trade | 15424893 | 1274 days ago | IN | 0.00000042 ETH | 0.00054276 | ||||
| Withdraw Weth | 14821547 | 1371 days ago | IN | 0 ETH | 0.00098164 | ||||
| Trade And Send | 14587974 | 1408 days ago | IN | 1 wei | 0.00491661 | ||||
| Trade | 13751010 | 1538 days ago | IN | 0 ETH | 0.02836042 | ||||
| Trade | 13751000 | 1538 days ago | IN | 0 ETH | 0.01537402 | ||||
| Trade | 13707936 | 1545 days ago | IN | 0.04 ETH | 0.00869915 | ||||
| Trade | 13707727 | 1545 days ago | IN | 0.02 ETH | 0.01198741 | ||||
| Trade | 13615169 | 1560 days ago | IN | 0.05 ETH | 0.01368285 | ||||
| Trade | 13576030 | 1566 days ago | IN | 0.15 ETH | 0.02526846 | ||||
| Trade | 13572953 | 1567 days ago | IN | 0 ETH | 0.05506327 | ||||
| Trade | 13538438 | 1572 days ago | IN | 0.07 ETH | 0.04292408 | ||||
| Trade | 13284198 | 1612 days ago | IN | 0.03173744 ETH | 0.02835857 | ||||
| Trade | 13274674 | 1613 days ago | IN | 0.01368857 ETH | 0.00758839 | ||||
| Trade | 13274663 | 1613 days ago | IN | 0.01371787 ETH | 0.00347758 | ||||
| Trade | 13256153 | 1616 days ago | IN | 0.01985567 ETH | 0.00802511 | ||||
| Trade | 13232373 | 1620 days ago | IN | 0.6 ETH | 0.01613025 | ||||
| Trade | 13232362 | 1620 days ago | IN | 0.6 ETH | 0.01687632 | ||||
| Trade | 13222624 | 1621 days ago | IN | 0.00001987 ETH | 0.02026934 | ||||
| Trade | 13221928 | 1621 days ago | IN | 0.25 ETH | 0.00873845 | ||||
| Trade | 13213188 | 1623 days ago | IN | 0.065 ETH | 0.02129838 | ||||
| Trade | 13202926 | 1624 days ago | IN | 0.33913287 ETH | 0.01508061 | ||||
| Trade | 13187292 | 1627 days ago | IN | 2.01675145 ETH | 0.04967859 | ||||
| Trade | 13082090 | 1643 days ago | IN | 0.05 ETH | 0.06749677 | ||||
| Trade | 13039884 | 1650 days ago | IN | 0.01 ETH | 0.00342838 | ||||
| Trade | 13037747 | 1650 days ago | IN | 0.02 ETH | 0.00888573 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 23364544 | 160 days ago | 0.00002564 ETH | ||||
| Transfer | 23364544 | 160 days ago | 0.00002564 ETH | ||||
| Quick Convert | 15424893 | 1274 days ago | 0.00000042 ETH | ||||
| - | 14587974 | 1408 days ago | 1 wei | ||||
| - | 13707936 | 1545 days ago | 0.04 ETH | ||||
| - | 13707727 | 1545 days ago | 0.02 ETH | ||||
| - | 13615169 | 1560 days ago | 0.05 ETH | ||||
| - | 13576030 | 1566 days ago | 0.15 ETH | ||||
| - | 13572953 | 1567 days ago | 1.81985408 ETH | ||||
| - | 13572953 | 1567 days ago | 0.94632412 ETH | ||||
| - | 13572953 | 1567 days ago | 0.87352995 ETH | ||||
| - | 13538438 | 1572 days ago | 0.07 ETH | ||||
| - | 13284198 | 1612 days ago | 0.00006334 ETH | ||||
| - | 13284198 | 1612 days ago | 0.00006334 ETH | ||||
| - | 13284198 | 1612 days ago | 0.03173744 ETH | ||||
| - | 13274674 | 1613 days ago | 0.00002732 ETH | ||||
| - | 13274674 | 1613 days ago | 0.00002732 ETH | ||||
| - | 13274674 | 1613 days ago | 0.01368857 ETH | ||||
| - | 13274663 | 1613 days ago | 0.01371787 ETH | ||||
| - | 13256153 | 1616 days ago | 0.00003963 ETH | ||||
| - | 13256153 | 1616 days ago | 0.00003963 ETH | ||||
| - | 13256153 | 1616 days ago | 0.01985567 ETH | ||||
| - | 13232373 | 1620 days ago | 0.6 ETH | ||||
| - | 13232362 | 1620 days ago | 0.6 ETH | ||||
| - | 13222624 | 1621 days ago | 0.00001987 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DexTrading
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-01-27
*/
pragma solidity ^0.5.10;
pragma experimental ABIEncoderV2;
/**
* @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 {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
_owner = msg.sender;
emit OwnershipTransferred(address(0), _owner);
}
/**
* @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 msg.sender == _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 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 onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, "SafeMath: division by zero");
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see `ERC20Detailed`.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through `transferFrom`. This is
* zero by default.
*
* This value changes when `approve` or `transferFrom` are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* > Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an `Approval` event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to `approve`. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* This test is non-exhaustive, and there may be false-negatives: during the
* execution of a contract's constructor, its address will be reported as
* not containing a contract.
*
* > It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*/
function isContract(address account) internal view returns (bool) {
// This method relies in extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != 0x0 && codehash != accountHash);
}
/**
* @dev Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
contract IWETH is IERC20 {
function withdraw(uint256 amount) external;
}
contract ApprovalHandler is Ownable {
using SafeERC20 for IERC20;
function transferFrom(IERC20 erc, address sender, address receiver, uint256 numTokens) external onlyOwner {
erc.safeTransferFrom(sender, receiver, numTokens);
}
}
contract DexTrading is Ownable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
ApprovalHandler public approvalHandler;
event Trade(address indexed from, address indexed to, uint256 toAmount, address indexed trader, address[] exchanges, uint256 tradeType);
IWETH public WETH = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
constructor() public {
approvalHandler = new ApprovalHandler();
}
function trade(
IERC20 from,
IERC20 to,
uint256 fromAmount,
address[] memory exchanges,
address[] memory approvals,
bytes memory data,
uint256[] memory offsets,
uint256[] memory etherValues,
uint256 limitAmount,
uint256 tradeType
) public payable {
require(exchanges.length > 0, 'No Exchanges');
require(exchanges.length == approvals.length, 'Every exchange must have an approval set');
require(limitAmount > 0, 'Limit Amount must be set');
// if from is an ERC20, pull tokens from msg.sender
if (address(from) != 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
approvalHandler.transferFrom(from, msg.sender, address(this), fromAmount);
}
// execute trades on dexes
executeTrades(from, exchanges, approvals, data, offsets, etherValues);
// check how many tokens were received after trade execution
uint256 tradeReturn = viewBalance(to, address(this));
require(tradeReturn >= limitAmount, 'Trade returned less than the minimum amount');
// return any unspent funds
uint256 leftover = viewBalance(from, address(this));
if (leftover > 0) {
sendFunds(from, msg.sender, leftover);
}
sendFunds(to, msg.sender, tradeReturn);
// check for leftover ethFee
address self = address(this);
msg.sender.transfer(self.balance);
emit Trade(address(from), address(to), tradeReturn, msg.sender, exchanges, tradeType);
}
function tradeAndSend(
IERC20 from,
IERC20 to,
address payable recipient,
uint256 fromAmount,
address[] memory exchanges,
address[] memory approvals,
bytes memory data,
uint256[] memory offsets,
uint256[] memory etherValues,
uint256 limitAmount,
uint256 tradeType
) public payable {
require(exchanges.length > 0, 'No Exchanges');
require(exchanges.length == approvals.length, 'Every exchange must have an approval set');
require(limitAmount > 0, 'Limit Amount must be set');
require(recipient != address(0), 'Must set a recipient');
// if from is an ERC20, pull tokens from msg.sender
if (address(from) != 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
approvalHandler.transferFrom(from, msg.sender, address(this), fromAmount);
}
// execute trades on dexes
executeTrades(from, exchanges, approvals, data, offsets, etherValues);
// check how many tokens were received after trade execution
uint256 tradeReturn = viewBalance(to, address(this));
require(tradeReturn >= limitAmount, 'Trade returned less than the minimum amount');
// return any unspent funds
uint256 leftover = viewBalance(from, address(this));
if (leftover > 0) {
sendFunds(from, msg.sender, leftover);
}
sendFunds(to, recipient, tradeReturn);
// check for leftover ethFee
address self = address(this);
msg.sender.transfer(self.balance);
emit Trade(address(from), address(to), tradeReturn, msg.sender, exchanges, tradeType);
}
function executeTrades(
IERC20 from,
address[] memory exchanges,
address[] memory approvals,
bytes memory data,
uint256[] memory offsets,
uint256[] memory etherValues) internal {
for (uint i = 0; i < exchanges.length; i++) {
// prevent calling the approvalHandler and check that exchange is a valid contract address
require(exchanges[i] != address(approvalHandler) && isContract(exchanges[i]), 'Invalid Address');
if (approvals[i] != address(0)) {
// handle approval if the aprovee is not the exchange address
approve(from, approvals[i]);
} else {
// handle approval if the approvee is the exchange address
approve(from, exchanges[i]);
}
// do trade
require(external_call(exchanges[i], etherValues[i], offsets[i], offsets[i + 1] - offsets[i], data), 'External Call Failed');
}
}
// ERC20 Utility Functions
function approve(IERC20 erc, address approvee) internal {
if (
address(erc) != 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE &&
erc.allowance(address(this), approvee) == 0
) {
erc.safeApprove(approvee, uint256(-1));
}
}
function viewBalance(IERC20 erc, address owner) internal view returns(uint256) {
if (address(erc) == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
return owner.balance;
} else {
return erc.balanceOf(owner);
}
}
function sendFunds(IERC20 erc, address payable receiver, uint256 funds) internal {
if (address(erc) == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
receiver.transfer(funds);
} else {
erc.safeTransfer(receiver, funds);
}
}
// Source: https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol
// call has been separated into its own function in order to take advantage
// of the Solidity's code generator to produce a loop that copies tx.data into memory.
function external_call(address destination, uint value, uint dataOffset, uint dataLength, bytes memory data) internal returns (bool) {
bool result;
assembly {
let x := mload(0x40) // "Allocate" memory for output (0x40 is where "free memory" pointer is stored by convention)
let d := add(data, 32) // First 32 bytes are the padded length of data, so exclude that
result := call(
sub(gas, 34710), // 34710 is the value that solidity is currently emitting
// It includes callGas (700) + callVeryLow (3, to pay for SUB) + callValueTransferGas (9000) +
// callNewAccountGas (25000, in case the destination address does not exist and needs creating)
destination,
value,
add(d, dataOffset),
dataLength, // Size of the input (in bytes) - this is what fixes the padding problem
x,
0 // Output is ignored, therefore the output size is zero
)
}
return result;
}
/**
* @dev Returns true if `account` is a contract.
*
* This test is non-exhaustive, and there may be false-negatives: during the
* execution of a contract's constructor, its address will be reported as
* not containing a contract.
*
* > It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*/
function isContract(address account) internal view returns (bool) {
// This method relies in extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != 0x0 && codehash != accountHash);
}
function withdrawWeth() external {
uint256 amount = WETH.balanceOf(address(this));
WETH.withdraw(amount);
}
function () external payable {
require(msg.sender != tx.origin);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"toAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"address[]","name":"exchanges","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"tradeType","type":"uint256"}],"name":"Trade","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"approvalHandler","outputs":[{"internalType":"contract ApprovalHandler","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"from","type":"address"},{"internalType":"contract IERC20","name":"to","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"address[]","name":"exchanges","type":"address[]"},{"internalType":"address[]","name":"approvals","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256[]","name":"offsets","type":"uint256[]"},{"internalType":"uint256[]","name":"etherValues","type":"uint256[]"},{"internalType":"uint256","name":"limitAmount","type":"uint256"},{"internalType":"uint256","name":"tradeType","type":"uint256"}],"name":"trade","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"from","type":"address"},{"internalType":"contract IERC20","name":"to","type":"address"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"address[]","name":"exchanges","type":"address[]"},{"internalType":"address[]","name":"approvals","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256[]","name":"offsets","type":"uint256[]"},{"internalType":"uint256[]","name":"etherValues","type":"uint256[]"},{"internalType":"uint256","name":"limitAmount","type":"uint256"},{"internalType":"uint256","name":"tradeType","type":"uint256"}],"name":"tradeAndSend","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawWeth","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600280546001600160a01b03191673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905534801561003657600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360405161008c906100ce565b604051809103906000f0801580156100a8573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100dc565b610a04806200204d83390190565b611f6180620000ec6000396000f3fe6080604052600436106100965760003560e01c80638da5cb5b11610069578063ad5c46481161004e578063ad5c464814610151578063ef3f3d0b14610166578063f2fde38b1461017957610096565b80638da5cb5b1461010d5780638f32d59b1461012f57610096565b80632922a751146100a55780635a862dcc146100d05780635d46ec34146100e5578063715018a6146100f8575b333214156100a357600080fd5b005b3480156100b157600080fd5b506100ba610199565b6040516100c79190611c7f565b60405180910390f35b3480156100dc57600080fd5b506100a36101b5565b6100a36100f336600461161d565b6102e8565b34801561010457600080fd5b506100a36105a0565b34801561011957600080fd5b5061012261064d565b6040516100c79190611c11565b34801561013b57600080fd5b50610144610669565b6040516100c79190611c71565b34801561015d57600080fd5b506100ba610687565b6100a36101743660046114b7565b6106a3565b34801561018557600080fd5b506100a361019436600461147b565b6109a0565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319061020c903090600401611c1f565b60206040518083038186803b15801561022457600080fd5b505afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061025c919081019061176e565b6002546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d906102b3908490600401611d92565b600060405180830381600087803b1580156102cd57600080fd5b505af11580156102e1573d6000803e3d6000fd5b5050505050565b600087511161032c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d12565b60405180910390fd5b8551875114610367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611cc2565b600082116103a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d52565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8b1614610461576001546040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906315dacbea9061042e908d90339030908e90600401611c8d565b600060405180830381600087803b15801561044857600080fd5b505af115801561045c573d6000803e3d6000fd5b505050505b61046f8a88888888886109ea565b600061047b8a30610bca565b9050828110156104b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611ce2565b60006104c38c30610bca565b905080156104d6576104d68c3383610cc7565b6104e18b3384610cc7565b60405130903390823180156108fc02916000818181858888f19350505050158015610510573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f7d76860f120f877ecdc289aa48a7ccc6d0782d9fc59f154c29bc262b7f8308cc868e8960405161058993929190611da0565b60405180910390a450505050505050505050505050565b6105a8610669565b6105de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d22565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60008751116106de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d12565b8551875114610719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611cc2565b60008211610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d52565b73ffffffffffffffffffffffffffffffffffffffff89166107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d32565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8c1614610860576001546040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906315dacbea9061082d908e90339030908e90600401611c8d565b600060405180830381600087803b15801561084757600080fd5b505af115801561085b573d6000803e3d6000fd5b505050505b61086e8b88888888886109ea565b600061087a8b30610bca565b9050828110156108b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611ce2565b60006108c28d30610bca565b905080156108d5576108d58d3383610cc7565b6108e08c8c84610cc7565b60405130903390823180156108fc02916000818181858888f1935050505015801561090f573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff167f7d76860f120f877ecdc289aa48a7ccc6d0782d9fc59f154c29bc262b7f8308cc868e8960405161098893929190611da0565b60405180910390a45050505050505050505050505050565b6109a8610669565b6109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d22565b6109e781610d6e565b50565b60005b8551811015610bc157600154865173ffffffffffffffffffffffffffffffffffffffff90911690879083908110610a2057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610a635750610a63868281518110610a5657fe5b6020026020010151610e48565b610a99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d42565b600073ffffffffffffffffffffffffffffffffffffffff16858281518110610abd57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614610b0257610afd87868381518110610af057fe5b6020026020010151610e84565b610b12565b610b1287878381518110610af057fe5b610b83868281518110610b2157fe5b6020026020010151838381518110610b3557fe5b6020026020010151858481518110610b4957fe5b6020026020010151868581518110610b5d57fe5b6020026020010151878660010181518110610b7457fe5b60200260200101510388610faf565b610bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611cf2565b6001016109ed565b50505050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff84161415610c1c575073ffffffffffffffffffffffffffffffffffffffff811631610cc1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190610c6e908590600401611c11565b60206040518083038186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cbe919081019061176e565b90505b92915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff84161415610d425760405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015610d3c573d6000803e3d6000fd5b50610d69565b610d6973ffffffffffffffffffffffffffffffffffffffff8416838363ffffffff610fd716565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116610dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611cd2565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610e7c5750808214155b949350505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff831614801590610f5f57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e90610f0d9030908590600401611c2d565b60206040518083038186803b158015610f2557600080fd5b505afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f5d919081019061176e565b155b15610fab57610fab73ffffffffffffffffffffffffffffffffffffffff8316827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff61109416565b5050565b60008060405160208401600082878984018b8d6187965a03f193505050505b95945050505050565b604051610d699084907fa9059cbb00000000000000000000000000000000000000000000000000000000906110129086908690602401611c56565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111b3565b80158061114257506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063dd62ed3e906110f09030908690600401611c48565b60206040518083038186803b15801561110857600080fd5b505afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611140919081019061176e565b155b611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d72565b604051610d699084907f095ea7b300000000000000000000000000000000000000000000000000000000906110129086908690602401611c56565b6111d28273ffffffffffffffffffffffffffffffffffffffff16610e48565b611208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d82565b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516112319190611bfe565b6000604051808303816000865af19150503d806000811461126e576040519150601f19603f3d011682016040523d82523d6000602084013e611273565b606091505b5091509150816112af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d02565b80511561130057808060200190516112ca9190810190611499565b611300576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d62565b50505050565b8035610cc181611eef565b600082601f83011261132257600080fd5b813561133561133082611df6565b611dcf565b9150818183526020840193506020810190508385602084028201111561135a57600080fd5b60005b8381101561138657816113708882611306565b845250602092830192919091019060010161135d565b5050505092915050565b600082601f8301126113a157600080fd5b81356113af61133082611df6565b915081818352602084019350602081019050838560208402820111156113d457600080fd5b60005b8381101561138657816113ea8882611465565b84525060209283019291909101906001016113d7565b8051610cc181611f03565b600082601f83011261141c57600080fd5b813561142a61133082611e17565b9150808252602083016020830185838301111561144657600080fd5b611451838284611eb7565b50505092915050565b8035610cc181611f0c565b8035610cc181611f15565b8051610cc181611f15565b60006020828403121561148d57600080fd5b6000610e7c8484611306565b6000602082840312156114ab57600080fd5b6000610e7c8484611400565b60008060008060008060008060008060006101608c8e0312156114d957600080fd5b60006114e58e8e61145a565b9b505060206114f68e828f0161145a565b9a505060406115078e828f01611306565b99505060606115188e828f01611465565b98505060808c013567ffffffffffffffff81111561153557600080fd5b6115418e828f01611311565b97505060a08c013567ffffffffffffffff81111561155e57600080fd5b61156a8e828f01611311565b96505060c08c013567ffffffffffffffff81111561158757600080fd5b6115938e828f0161140b565b95505060e08c013567ffffffffffffffff8111156115b057600080fd5b6115bc8e828f01611390565b9450506101008c013567ffffffffffffffff8111156115da57600080fd5b6115e68e828f01611390565b9350506101206115f88e828f01611465565b92505061014061160a8e828f01611465565b9150509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d03121561163d57600080fd5b60006116498d8d61145a565b9a5050602061165a8d828e0161145a565b995050604061166b8d828e01611465565b98505060608b013567ffffffffffffffff81111561168857600080fd5b6116948d828e01611311565b97505060808b013567ffffffffffffffff8111156116b157600080fd5b6116bd8d828e01611311565b96505060a08b013567ffffffffffffffff8111156116da57600080fd5b6116e68d828e0161140b565b95505060c08b013567ffffffffffffffff81111561170357600080fd5b61170f8d828e01611390565b94505060e08b013567ffffffffffffffff81111561172c57600080fd5b6117388d828e01611390565b93505061010061174a8d828e01611465565b92505061012061175c8d828e01611465565b9150509295989b9194979a5092959850565b60006020828403121561178057600080fd5b6000610e7c8484611470565b600061179883836117af565b505060200190565b6117a981611eac565b82525050565b6117a981611e75565b60006117c382611e63565b6117cd8185611e67565b93506117d883611e5d565b8060005b838110156118065781516117f0888261178c565b97506117fb83611e5d565b9250506001016117dc565b509495945050505050565b6117a981611e80565b600061182582611e63565b61182f8185611e70565b935061183f818560208601611ec3565b9290920192915050565b6117a981611e85565b600061185f602883611e67565b7f45766572792065786368616e6765206d757374206861766520616e206170707281527f6f76616c20736574000000000000000000000000000000000000000000000000602082015260400192915050565b60006118be602683611e67565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b600061191d602b83611e67565b7f54726164652072657475726e6564206c657373207468616e20746865206d696e81527f696d756d20616d6f756e74000000000000000000000000000000000000000000602082015260400192915050565b600061197c601483611e67565b7f45787465726e616c2043616c6c204661696c6564000000000000000000000000815260200192915050565b60006119b5602083611e67565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006119ee600c83611e67565b7f4e6f2045786368616e6765730000000000000000000000000000000000000000815260200192915050565b6000611a27602083611e67565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000611a60601483611e67565b7f4d75737420736574206120726563697069656e74000000000000000000000000815260200192915050565b6000611a99600f83611e67565b7f496e76616c696420416464726573730000000000000000000000000000000000815260200192915050565b6000611ad2601883611e67565b7f4c696d697420416d6f756e74206d757374206265207365740000000000000000815260200192915050565b6000611b0b602a83611e67565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b6000611b6a603683611e67565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015260400192915050565b6000611bc9601f83611e67565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6117a981611ea9565b6000611c0a828461181a565b9392505050565b60208101610cc182846117af565b60208101610cc182846117a0565b60408101611c3b82856117a0565b611c0a60208301846117af565b60408101611c3b82856117af565b60408101611c6482856117af565b611c0a6020830184611bf5565b60208101610cc18284611811565b60208101610cc18284611849565b60808101611c9b8287611849565b611ca860208301866117a0565b611cb560408301856117a0565b610fce6060830184611bf5565b60208082528101610cc181611852565b60208082528101610cc1816118b1565b60208082528101610cc181611910565b60208082528101610cc18161196f565b60208082528101610cc1816119a8565b60208082528101610cc1816119e1565b60208082528101610cc181611a1a565b60208082528101610cc181611a53565b60208082528101610cc181611a8c565b60208082528101610cc181611ac5565b60208082528101610cc181611afe565b60208082528101610cc181611b5d565b60208082528101610cc181611bbc565b60208101610cc18284611bf5565b60608101611dae8286611bf5565b8181036020830152611dc081856117b8565b9050610e7c6040830184611bf5565b60405181810167ffffffffffffffff81118282101715611dee57600080fd5b604052919050565b600067ffffffffffffffff821115611e0d57600080fd5b5060209081020190565b600067ffffffffffffffff821115611e2e57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b90815260200190565b919050565b6000610cc182611e90565b151590565b6000610cc182611e75565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b6000610cc182611e85565b82818337506000910152565b60005b83811015611ede578181015183820152602001611ec6565b838111156113005750506000910152565b611ef881611e75565b81146109e757600080fd5b611ef881611e80565b611ef881611e85565b611ef881611ea956fea365627a7a72315820637d2b509f9f40bd0aa7dc40732f7611fa4eab38ce9ca07c88af47c64af2860b6c6578706572696d656e74616cf564736f6c6343000510004060806040819052600080546001600160a01b03191633178082556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36109ad806100576000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80638da5cb5b116100505780638da5cb5b146100895780638f32d59b146100a7578063f2fde38b146100bc57610067565b806315dacbea1461006c578063715018a614610081575b600080fd5b61007f61007a366004610605565b6100cf565b005b61007f610144565b6100916101f1565b60405161009e9190610832565b60405180910390f35b6100af61020d565b60405161009e9190610868565b61007f6100ca3660046105c9565b61022b565b6100d761020d565b610116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610896565b60405180910390fd5b61013e73ffffffffffffffffffffffffffffffffffffffff851684848463ffffffff61027516565b50505050565b61014c61020d565b610182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610896565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b61023361020d565b610269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610896565b61027281610334565b50565b60405161013e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906102b290879087908790602401610840565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261040e565b73ffffffffffffffffffffffffffffffffffffffff8116610381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610876565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61042d8273ffffffffffffffffffffffffffffffffffffffff1661055b565b610463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d906108b6565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161048c919061081f565b6000604051808303816000865af19150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161050a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610886565b80511561013e578080602001905161052591908101906105e7565b61013e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d906108a6565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061058f5750808214155b949350505050565b80356105a28161093b565b92915050565b80516105a28161094f565b80356105a281610958565b80356105a281610961565b6000602082840312156105db57600080fd5b600061058f8484610597565b6000602082840312156105f957600080fd5b600061058f84846105a8565b6000806000806080858703121561061b57600080fd5b600061062787876105b3565b945050602061063887828801610597565b935050604061064987828801610597565b925050606061065a878288016105be565b91505092959194509250565b61066f816108d8565b82525050565b61066f816108e3565b6000610689826108c6565b61069381856108ca565b93506106a381856020860161090f565b9290920192915050565b60006106ba6026836108cf565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006107196020836108cf565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006107526020836108cf565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b600061078b602a836108cf565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b60006107ea601f836108cf565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b61066f8161090c565b600061082b828461067e565b9392505050565b602081016105a28284610666565b6060810161084e8286610666565b61085b6020830185610666565b61058f6040830184610816565b602081016105a28284610675565b602080825281016105a2816106ad565b602080825281016105a28161070c565b602080825281016105a281610745565b602080825281016105a28161077e565b602080825281016105a2816107dd565b5190565b919050565b90815260200190565b60006105a2826108f3565b151590565b60006105a2826108d8565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b60005b8381101561092a578181015183820152602001610912565b8381111561013e5750506000910152565b610944816108d8565b811461027257600080fd5b610944816108e3565b610944816108e8565b6109448161090c56fea365627a7a723158200048ed3468e6cdff6d26bf573cd4db9ef56fd2e25368c315c4b55b666300d6396c6578706572696d656e74616cf564736f6c63430005100040
Deployed Bytecode
0x6080604052600436106100965760003560e01c80638da5cb5b11610069578063ad5c46481161004e578063ad5c464814610151578063ef3f3d0b14610166578063f2fde38b1461017957610096565b80638da5cb5b1461010d5780638f32d59b1461012f57610096565b80632922a751146100a55780635a862dcc146100d05780635d46ec34146100e5578063715018a6146100f8575b333214156100a357600080fd5b005b3480156100b157600080fd5b506100ba610199565b6040516100c79190611c7f565b60405180910390f35b3480156100dc57600080fd5b506100a36101b5565b6100a36100f336600461161d565b6102e8565b34801561010457600080fd5b506100a36105a0565b34801561011957600080fd5b5061012261064d565b6040516100c79190611c11565b34801561013b57600080fd5b50610144610669565b6040516100c79190611c71565b34801561015d57600080fd5b506100ba610687565b6100a36101743660046114b7565b6106a3565b34801561018557600080fd5b506100a361019436600461147b565b6109a0565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319061020c903090600401611c1f565b60206040518083038186803b15801561022457600080fd5b505afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061025c919081019061176e565b6002546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d906102b3908490600401611d92565b600060405180830381600087803b1580156102cd57600080fd5b505af11580156102e1573d6000803e3d6000fd5b5050505050565b600087511161032c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d12565b60405180910390fd5b8551875114610367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611cc2565b600082116103a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d52565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8b1614610461576001546040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906315dacbea9061042e908d90339030908e90600401611c8d565b600060405180830381600087803b15801561044857600080fd5b505af115801561045c573d6000803e3d6000fd5b505050505b61046f8a88888888886109ea565b600061047b8a30610bca565b9050828110156104b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611ce2565b60006104c38c30610bca565b905080156104d6576104d68c3383610cc7565b6104e18b3384610cc7565b60405130903390823180156108fc02916000818181858888f19350505050158015610510573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f7d76860f120f877ecdc289aa48a7ccc6d0782d9fc59f154c29bc262b7f8308cc868e8960405161058993929190611da0565b60405180910390a450505050505050505050505050565b6105a8610669565b6105de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d22565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60008751116106de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d12565b8551875114610719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611cc2565b60008211610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d52565b73ffffffffffffffffffffffffffffffffffffffff89166107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d32565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8c1614610860576001546040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906315dacbea9061082d908e90339030908e90600401611c8d565b600060405180830381600087803b15801561084757600080fd5b505af115801561085b573d6000803e3d6000fd5b505050505b61086e8b88888888886109ea565b600061087a8b30610bca565b9050828110156108b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611ce2565b60006108c28d30610bca565b905080156108d5576108d58d3383610cc7565b6108e08c8c84610cc7565b60405130903390823180156108fc02916000818181858888f1935050505015801561090f573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff167f7d76860f120f877ecdc289aa48a7ccc6d0782d9fc59f154c29bc262b7f8308cc868e8960405161098893929190611da0565b60405180910390a45050505050505050505050505050565b6109a8610669565b6109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d22565b6109e781610d6e565b50565b60005b8551811015610bc157600154865173ffffffffffffffffffffffffffffffffffffffff90911690879083908110610a2057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610a635750610a63868281518110610a5657fe5b6020026020010151610e48565b610a99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d42565b600073ffffffffffffffffffffffffffffffffffffffff16858281518110610abd57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614610b0257610afd87868381518110610af057fe5b6020026020010151610e84565b610b12565b610b1287878381518110610af057fe5b610b83868281518110610b2157fe5b6020026020010151838381518110610b3557fe5b6020026020010151858481518110610b4957fe5b6020026020010151868581518110610b5d57fe5b6020026020010151878660010181518110610b7457fe5b60200260200101510388610faf565b610bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611cf2565b6001016109ed565b50505050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff84161415610c1c575073ffffffffffffffffffffffffffffffffffffffff811631610cc1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190610c6e908590600401611c11565b60206040518083038186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cbe919081019061176e565b90505b92915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff84161415610d425760405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015610d3c573d6000803e3d6000fd5b50610d69565b610d6973ffffffffffffffffffffffffffffffffffffffff8416838363ffffffff610fd716565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116610dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611cd2565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610e7c5750808214155b949350505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff831614801590610f5f57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e90610f0d9030908590600401611c2d565b60206040518083038186803b158015610f2557600080fd5b505afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f5d919081019061176e565b155b15610fab57610fab73ffffffffffffffffffffffffffffffffffffffff8316827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff61109416565b5050565b60008060405160208401600082878984018b8d6187965a03f193505050505b95945050505050565b604051610d699084907fa9059cbb00000000000000000000000000000000000000000000000000000000906110129086908690602401611c56565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111b3565b80158061114257506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063dd62ed3e906110f09030908690600401611c48565b60206040518083038186803b15801561110857600080fd5b505afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611140919081019061176e565b155b611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d72565b604051610d699084907f095ea7b300000000000000000000000000000000000000000000000000000000906110129086908690602401611c56565b6111d28273ffffffffffffffffffffffffffffffffffffffff16610e48565b611208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d82565b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516112319190611bfe565b6000604051808303816000865af19150503d806000811461126e576040519150601f19603f3d011682016040523d82523d6000602084013e611273565b606091505b5091509150816112af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d02565b80511561130057808060200190516112ca9190810190611499565b611300576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032390611d62565b50505050565b8035610cc181611eef565b600082601f83011261132257600080fd5b813561133561133082611df6565b611dcf565b9150818183526020840193506020810190508385602084028201111561135a57600080fd5b60005b8381101561138657816113708882611306565b845250602092830192919091019060010161135d565b5050505092915050565b600082601f8301126113a157600080fd5b81356113af61133082611df6565b915081818352602084019350602081019050838560208402820111156113d457600080fd5b60005b8381101561138657816113ea8882611465565b84525060209283019291909101906001016113d7565b8051610cc181611f03565b600082601f83011261141c57600080fd5b813561142a61133082611e17565b9150808252602083016020830185838301111561144657600080fd5b611451838284611eb7565b50505092915050565b8035610cc181611f0c565b8035610cc181611f15565b8051610cc181611f15565b60006020828403121561148d57600080fd5b6000610e7c8484611306565b6000602082840312156114ab57600080fd5b6000610e7c8484611400565b60008060008060008060008060008060006101608c8e0312156114d957600080fd5b60006114e58e8e61145a565b9b505060206114f68e828f0161145a565b9a505060406115078e828f01611306565b99505060606115188e828f01611465565b98505060808c013567ffffffffffffffff81111561153557600080fd5b6115418e828f01611311565b97505060a08c013567ffffffffffffffff81111561155e57600080fd5b61156a8e828f01611311565b96505060c08c013567ffffffffffffffff81111561158757600080fd5b6115938e828f0161140b565b95505060e08c013567ffffffffffffffff8111156115b057600080fd5b6115bc8e828f01611390565b9450506101008c013567ffffffffffffffff8111156115da57600080fd5b6115e68e828f01611390565b9350506101206115f88e828f01611465565b92505061014061160a8e828f01611465565b9150509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d03121561163d57600080fd5b60006116498d8d61145a565b9a5050602061165a8d828e0161145a565b995050604061166b8d828e01611465565b98505060608b013567ffffffffffffffff81111561168857600080fd5b6116948d828e01611311565b97505060808b013567ffffffffffffffff8111156116b157600080fd5b6116bd8d828e01611311565b96505060a08b013567ffffffffffffffff8111156116da57600080fd5b6116e68d828e0161140b565b95505060c08b013567ffffffffffffffff81111561170357600080fd5b61170f8d828e01611390565b94505060e08b013567ffffffffffffffff81111561172c57600080fd5b6117388d828e01611390565b93505061010061174a8d828e01611465565b92505061012061175c8d828e01611465565b9150509295989b9194979a5092959850565b60006020828403121561178057600080fd5b6000610e7c8484611470565b600061179883836117af565b505060200190565b6117a981611eac565b82525050565b6117a981611e75565b60006117c382611e63565b6117cd8185611e67565b93506117d883611e5d565b8060005b838110156118065781516117f0888261178c565b97506117fb83611e5d565b9250506001016117dc565b509495945050505050565b6117a981611e80565b600061182582611e63565b61182f8185611e70565b935061183f818560208601611ec3565b9290920192915050565b6117a981611e85565b600061185f602883611e67565b7f45766572792065786368616e6765206d757374206861766520616e206170707281527f6f76616c20736574000000000000000000000000000000000000000000000000602082015260400192915050565b60006118be602683611e67565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b600061191d602b83611e67565b7f54726164652072657475726e6564206c657373207468616e20746865206d696e81527f696d756d20616d6f756e74000000000000000000000000000000000000000000602082015260400192915050565b600061197c601483611e67565b7f45787465726e616c2043616c6c204661696c6564000000000000000000000000815260200192915050565b60006119b5602083611e67565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006119ee600c83611e67565b7f4e6f2045786368616e6765730000000000000000000000000000000000000000815260200192915050565b6000611a27602083611e67565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000611a60601483611e67565b7f4d75737420736574206120726563697069656e74000000000000000000000000815260200192915050565b6000611a99600f83611e67565b7f496e76616c696420416464726573730000000000000000000000000000000000815260200192915050565b6000611ad2601883611e67565b7f4c696d697420416d6f756e74206d757374206265207365740000000000000000815260200192915050565b6000611b0b602a83611e67565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b6000611b6a603683611e67565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015260400192915050565b6000611bc9601f83611e67565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6117a981611ea9565b6000611c0a828461181a565b9392505050565b60208101610cc182846117af565b60208101610cc182846117a0565b60408101611c3b82856117a0565b611c0a60208301846117af565b60408101611c3b82856117af565b60408101611c6482856117af565b611c0a6020830184611bf5565b60208101610cc18284611811565b60208101610cc18284611849565b60808101611c9b8287611849565b611ca860208301866117a0565b611cb560408301856117a0565b610fce6060830184611bf5565b60208082528101610cc181611852565b60208082528101610cc1816118b1565b60208082528101610cc181611910565b60208082528101610cc18161196f565b60208082528101610cc1816119a8565b60208082528101610cc1816119e1565b60208082528101610cc181611a1a565b60208082528101610cc181611a53565b60208082528101610cc181611a8c565b60208082528101610cc181611ac5565b60208082528101610cc181611afe565b60208082528101610cc181611b5d565b60208082528101610cc181611bbc565b60208101610cc18284611bf5565b60608101611dae8286611bf5565b8181036020830152611dc081856117b8565b9050610e7c6040830184611bf5565b60405181810167ffffffffffffffff81118282101715611dee57600080fd5b604052919050565b600067ffffffffffffffff821115611e0d57600080fd5b5060209081020190565b600067ffffffffffffffff821115611e2e57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b90815260200190565b919050565b6000610cc182611e90565b151590565b6000610cc182611e75565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b6000610cc182611e85565b82818337506000910152565b60005b83811015611ede578181015183820152602001611ec6565b838111156113005750506000910152565b611ef881611e75565b81146109e757600080fd5b611ef881611e80565b611ef881611e85565b611ef881611ea956fea365627a7a72315820637d2b509f9f40bd0aa7dc40732f7611fa4eab38ce9ca07c88af47c64af2860b6c6578706572696d656e74616cf564736f6c63430005100040
Deployed Bytecode Sourcemap
14521:8724:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23210:10;23224:9;23210:23;;23202:32;;;;;;14521:8724;14627:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14627:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;23024:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23024:130:0;;;:::i;14981:1626::-;;;;;;;;;:::i;1693:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1693:140:0;;;:::i;882:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;882:79:0;;;:::i;:::-;;;;;;;;1248:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1248:92:0;;;:::i;:::-;;;;;;;;14816:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14816:69:0;;;:::i;16615:1727::-;;;;;;;;;:::i;1988:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1988:109:0;;;;;;;;:::i;14627:38::-;;;;;;:::o;23024:130::-;23085:4;;:29;;;;;23068:14;;23085:4;;;:14;;:29;;23108:4;;23085:29;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23085:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23085:29: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;23085:29:0;;;;;;;;;23125:4;;:21;;;;;23068:46;;-1:-1:-1;23125:4:0;;;:13;;:21;;23068:46;;23125:21;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23125:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23125:21:0;;;;23024:130;:::o;14981:1626::-;15361:1;15342:9;:16;:20;15334:45;;;;;;;;;;;;;;;;;;;;;;15418:9;:16;15398:9;:16;:36;15390:89;;;;;;;;;;;;;;15512:1;15498:11;:15;15490:52;;;;;;;;;;;;;;15637:42;15620:59;;;;15616:165;;15696:15;;:73;;;;;:15;;;;;:28;;:73;;15725:4;;15731:10;;15751:4;;15758:10;;15696:73;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15696:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15696:73:0;;;;15616:165;15829:69;15843:4;15849:9;15860;15871:4;15877:7;15886:11;15829:13;:69::i;:::-;15981:19;16003:30;16015:2;16027:4;16003:11;:30::i;:::-;15981:52;;16067:11;16052;:26;;16044:82;;;;;;;;;;;;;;16176:16;16195:32;16207:4;16221;16195:11;:32::i;:::-;16176:51;-1:-1:-1;16242:12:0;;16238:82;;16271:37;16281:4;16287:10;16299:8;16271:9;:37::i;:::-;16332:38;16342:2;16346:10;16358:11;16332:9;:38::i;:::-;16460:33;;16444:4;;16460:10;;16480:12;;16460:33;;;;;16421:12;16460:33;16421:12;16460:33;16480:12;16460:10;:33;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16460:33:0;16566:10;16519:80;;16548:2;16519:80;;16533:4;16519:80;;;16553:11;16578:9;16589;16519:80;;;;;;;;;;;;;;;;;14981:1626;;;;;;;;;;;;;:::o;1693:140::-;1094:9;:7;:9::i;:::-;1086:54;;;;;;;;;;;;;;1792:1;1776:6;;1755:40;;;1776:6;;;;1755:40;;1792:1;;1755:40;1823:1;1806:19;;;;;;1693:140::o;882:79::-;920:7;947:6;;;882:79;:::o;1248:92::-;1288:4;1326:6;;;1312:10;:20;;1248:92::o;14816:69::-;;;;;;:::o;16615:1727::-;17038:1;17019:9;:16;:20;17011:45;;;;;;;;;;;;;;17095:9;:16;17075:9;:16;:36;17067:89;;;;;;;;;;;;;;17189:1;17175:11;:15;17167:52;;;;;;;;;;;;;;17238:23;;;17230:56;;;;;;;;;;;;;;17381:42;17364:59;;;;17360:165;;17440:15;;:73;;;;;:15;;;;;:28;;:73;;17469:4;;17475:10;;17495:4;;17502:10;;17440:73;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17440:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17440:73:0;;;;17360:165;17573:69;17587:4;17593:9;17604;17615:4;17621:7;17630:11;17573:13;:69::i;:::-;17725:19;17747:30;17759:2;17771:4;17747:11;:30::i;:::-;17725:52;;17811:11;17796;:26;;17788:82;;;;;;;;;;;;;;17920:16;17939:32;17951:4;17965;17939:11;:32::i;:::-;17920:51;-1:-1:-1;17986:12:0;;17982:82;;18015:37;18025:4;18031:10;18043:8;18015:9;:37::i;:::-;18076;18086:2;18090:9;18101:11;18076:9;:37::i;:::-;18203:33;;18187:4;;18203:10;;18223:12;;18203:33;;;;;18164:12;18203:33;18164:12;18203:33;18223:12;18203:10;:33;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18203:33:0;18301:10;18254:80;;18283:2;18254:80;;18268:4;18254:80;;;18288:11;18313:9;18324;18254:80;;;;;;;;;;;;;;;;;16615:1727;;;;;;;;;;;;;;:::o;1988:109::-;1094:9;:7;:9::i;:::-;1086:54;;;;;;;;;;;;;;2061:28;2080:8;2061:18;:28::i;:::-;1988:109;:::o;18350:1070::-;18601:6;18596:813;18617:9;:16;18613:1;:20;18596:813;;;18799:15;;18775:12;;18799:15;;;;;18775:9;;18785:1;;18775:12;;;;;;;;;;;;:40;;;;:68;;;;;18819:24;18830:9;18840:1;18830:12;;;;;;;;;;;;;;18819:10;:24::i;:::-;18767:96;;;;;;;;;;;;;;18910:1;18886:26;;:9;18896:1;18886:12;;;;;;;;;;;;;;:26;;;18882:341;;19020:27;19028:4;19034:9;19044:1;19034:12;;;;;;;;;;;;;;19020:7;:27::i;:::-;18882:341;;;19176:27;19184:4;19190:9;19200:1;19190:12;;;;;;;19176:27;19278:90;19292:9;19302:1;19292:12;;;;;;;;;;;;;;19306:11;19318:1;19306:14;;;;;;;;;;;;;;19322:7;19330:1;19322:10;;;;;;;;;;;;;;19351:7;19359:1;19351:10;;;;;;;;;;;;;;19334:7;19342:1;19346;19342:5;19334:14;;;;;;;;;;;;;;:27;19363:4;19278:13;:90::i;:::-;19270:123;;;;;;;;;;;;;;18635:3;;18596:813;;;;18350:1070;;;;;;:::o;19757:268::-;19827:7;19867:42;19851:58;;;;19847:171;;;-1:-1:-1;19933:13:0;;;;19926:20;;19847:171;19986:20;;;;;:13;;;;;;:20;;20000:5;;19986:20;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19986:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19986:20: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;19986:20:0;;;;;;;;;19979:27;;19847:171;19757:268;;;;:::o;20033:280::-;20145:42;20129:58;;;;20125:181;;;20204:24;;:17;;;;:24;;;;;20222:5;;20204:24;;;;20222:5;20204:17;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20204:24:0;20125:181;;;20261:33;:16;;;20278:8;20288:5;20261:33;:16;:33;:::i;:::-;20033:280;;;:::o;2203:229::-;2277:22;;;2269:73;;;;;;;;;;;;;;2379:6;;;2358:38;;;;;;;2379:6;;;2358:38;;;2407:6;:17;;;;;;;;;;;;;;;2203:229::o;22198:818::-;22258:4;22925:20;;22768:66;22965:15;;;;;:42;;;22996:11;22984:8;:23;;22965:42;22957:51;22198:818;-1:-1:-1;;;;22198:818:0:o;19462:287::-;19563:42;19547:58;;;;;;;:118;;-1:-1:-1;19622:38:0;;;;;:13;;;;;;:38;;19644:4;;19651:8;;19622:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19622:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19622:38: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;19622:38:0;;;;;;;;;:43;19547:118;19529:213;;;19692:38;:15;;;19708:8;19726:2;19692:38;:15;:38;:::i;:::-;19462:287;;:::o;20592:1162::-;20719:4;20736:11;20797:4;20791:11;20931:2;20925:4;20921:13;21623:1;21603;21494:10;21464;21461:1;21457:18;21433:5;21403:11;21055:5;21050:3;21046:15;21023:689;21013:699;-1:-1:-1;;;;20592:1162:0;;;;;;;;:::o;11063:176::-;11172:58;;11146:85;;11165:5;;11195:23;;11172:58;;11220:2;;11224:5;;11172:58;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;11172:58:0;;;49:4:-1;25:18;;61:17;;11172:58:0;182:15:-1;11172:58:0;;;;179:29:-1;;;;160:49;;;11146:18:0;:85::i;11459:621::-;11829:10;;;11828:62;;-1:-1:-1;11845:39:0;;;;;:15;;;;;;:39;;11869:4;;11876:7;;11845:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11845:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11845:39: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;11845:39:0;;;;;;;;;:44;11828:62;11820:152;;;;;;;;;;;;;;12009:62;;11983:89;;12002:5;;12032:22;;12009:62;;12056:7;;12065:5;;12009:62;;;;13057:1114;13661:27;13669:5;13661:25;;;:27::i;:::-;13653:71;;;;;;;;;;;;;;13798:12;13812:23;13847:5;13839:19;;13859:4;13839:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;13797:67:0;;;;13883:7;13875:52;;;;;;;;;;;;;;13944:17;;:21;13940:224;;14086:10;14075:30;;;;;;;;;;;;;;14067:85;;;;;;;;;;;;;;13057:1114;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;313:707;;430:3;423:4;415:6;411:17;407:27;397:2;;448:1;445;438:12;397:2;485:6;472:20;507:80;522:64;579:6;522:64;;;507:80;;;498:89;;604:5;629:6;622:5;615:21;659:4;651:6;647:17;637:27;;681:4;676:3;672:14;665:21;;734:6;781:3;773:4;765:6;761:17;756:3;752:27;749:36;746:2;;;798:1;795;788:12;746:2;823:1;808:206;833:6;830:1;827:13;808:206;;;891:3;913:37;946:3;934:10;913:37;;;901:50;;-1:-1;974:4;965:14;;;;993;;;;;855:1;848:9;808:206;;;812:14;390:630;;;;;;;;1046:707;;1163:3;1156:4;1148:6;1144:17;1140:27;1130:2;;1181:1;1178;1171:12;1130:2;1218:6;1205:20;1240:80;1255:64;1312:6;1255:64;;1240:80;1231:89;;1337:5;1362:6;1355:5;1348:21;1392:4;1384:6;1380:17;1370:27;;1414:4;1409:3;1405:14;1398:21;;1467:6;1514:3;1506:4;1498:6;1494:17;1489:3;1485:27;1482:36;1479:2;;;1531:1;1528;1521:12;1479:2;1556:1;1541:206;1566:6;1563:1;1560:13;1541:206;;;1624:3;1646:37;1679:3;1667:10;1646:37;;;1634:50;;-1:-1;1707:4;1698:14;;;;1726;;;;;1588:1;1581:9;1541:206;;1761:128;1836:13;;1854:30;1836:13;1854:30;;1897:440;;1998:3;1991:4;1983:6;1979:17;1975:27;1965:2;;2016:1;2013;2006:12;1965:2;2053:6;2040:20;2075:64;2090:48;2131:6;2090:48;;2075:64;2066:73;;2159:6;2152:5;2145:21;2195:4;2187:6;2183:17;2228:4;2221:5;2217:16;2263:3;2254:6;2249:3;2245:16;2242:25;2239:2;;;2280:1;2277;2270:12;2239:2;2290:41;2324:6;2319:3;2314;2290:41;;;1958:379;;;;;;;;2345:158;2426:20;;2451:47;2426:20;2451:47;;2510:130;2577:20;;2602:33;2577:20;2602:33;;2647:134;2725:13;;2743:33;2725:13;2743:33;;2788:241;;2892:2;2880:9;2871:7;2867:23;2863:32;2860:2;;;2908:1;2905;2898:12;2860:2;2943:1;2960:53;3005:7;2985:9;2960:53;;3036:257;;3148:2;3136:9;3127:7;3123:23;3119:32;3116:2;;;3164:1;3161;3154:12;3116:2;3199:1;3216:61;3269:7;3249:9;3216:61;;3300:2221;;;;;;;;;;;;3720:3;3708:9;3699:7;3695:23;3691:33;3688:2;;;3737:1;3734;3727:12;3688:2;3772:1;3789:67;3848:7;3828:9;3789:67;;;3779:77;;3751:111;3893:2;3911:67;3970:7;3961:6;3950:9;3946:22;3911:67;;;3901:77;;3872:112;4015:2;4033:61;4086:7;4077:6;4066:9;4062:22;4033:61;;;4023:71;;3994:106;4131:2;4149:53;4194:7;4185:6;4174:9;4170:22;4149:53;;;4139:63;;4110:98;4267:3;4256:9;4252:19;4239:33;4292:18;4284:6;4281:30;4278:2;;;4324:1;4321;4314:12;4278:2;4344:78;4414:7;4405:6;4394:9;4390:22;4344:78;;;4334:88;;4218:210;4487:3;4476:9;4472:19;4459:33;4512:18;4504:6;4501:30;4498:2;;;4544:1;4541;4534:12;4498:2;4564:78;4634:7;4625:6;4614:9;4610:22;4564:78;;;4554:88;;4438:210;4707:3;4696:9;4692:19;4679:33;4732:18;4724:6;4721:30;4718:2;;;4764:1;4761;4754:12;4718:2;4784:62;4838:7;4829:6;4818:9;4814:22;4784:62;;;4774:72;;4658:194;4911:3;4900:9;4896:19;4883:33;4936:18;4928:6;4925:30;4922:2;;;4968:1;4965;4958:12;4922:2;4988:78;5058:7;5049:6;5038:9;5034:22;4988:78;;;4978:88;;4862:210;5131:3;5120:9;5116:19;5103:33;5156:18;5148:6;5145:30;5142:2;;;5188:1;5185;5178:12;5142:2;5208:78;5278:7;5269:6;5258:9;5254:22;5208:78;;;5198:88;;5082:210;5323:3;5342:53;5387:7;5378:6;5367:9;5363:22;5342:53;;;5332:63;;5302:99;5432:3;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;;;5441:64;;5411:100;3682:1839;;;;;;;;;;;;;;;5528:2077;;;;;;;;;;;5922:3;5910:9;5901:7;5897:23;5893:33;5890:2;;;5939:1;5936;5929:12;5890:2;5974:1;5991:67;6050:7;6030:9;5991:67;;;5981:77;;5953:111;6095:2;6113:67;6172:7;6163:6;6152:9;6148:22;6113:67;;;6103:77;;6074:112;6217:2;6235:53;6280:7;6271:6;6260:9;6256:22;6235:53;;;6225:63;;6196:98;6353:2;6342:9;6338:18;6325:32;6377:18;6369:6;6366:30;6363:2;;;6409:1;6406;6399:12;6363:2;6429:78;6499:7;6490:6;6479:9;6475:22;6429:78;;;6419:88;;6304:209;6572:3;6561:9;6557:19;6544:33;6597:18;6589:6;6586:30;6583:2;;;6629:1;6626;6619:12;6583:2;6649:78;6719:7;6710:6;6699:9;6695:22;6649:78;;;6639:88;;6523:210;6792:3;6781:9;6777:19;6764:33;6817:18;6809:6;6806:30;6803:2;;;6849:1;6846;6839:12;6803:2;6869:62;6923:7;6914:6;6903:9;6899:22;6869:62;;;6859:72;;6743:194;6996:3;6985:9;6981:19;6968:33;7021:18;7013:6;7010:30;7007:2;;;7053:1;7050;7043:12;7007:2;7073:78;7143:7;7134:6;7123:9;7119:22;7073:78;;;7063:88;;6947:210;7216:3;7205:9;7201:19;7188:33;7241:18;7233:6;7230:30;7227:2;;;7273:1;7270;7263:12;7227:2;7293:78;7363:7;7354:6;7343:9;7339:22;7293:78;;;7283:88;;7167:210;7408:3;7427:53;7472:7;7463:6;7452:9;7448:22;7427:53;;;7417:63;;7387:99;7517:3;7536:53;7581:7;7572:6;7561:9;7557:22;7536:53;;;7526:63;;7496:99;5884:1721;;;;;;;;;;;;;;7612:263;;7727:2;7715:9;7706:7;7702:23;7698:32;7695:2;;;7743:1;7740;7733:12;7695:2;7778:1;7795:64;7851:7;7831:9;7795:64;;7883:173;;7970:46;8012:3;8004:6;7970:46;;;-1:-1;;8045:4;8036:14;;7963:93;8064:142;8155:45;8194:5;8155:45;;;8150:3;8143:58;8137:69;;;8213:103;8286:24;8304:5;8286:24;;8474:690;;8619:54;8667:5;8619:54;;;8686:86;8765:6;8760:3;8686:86;;;8679:93;;8793:56;8843:5;8793:56;;;8869:7;8897:1;8882:260;8907:6;8904:1;8901:13;8882:260;;;8974:6;8968:13;8995:63;9054:3;9039:13;8995:63;;;8988:70;;9075:60;9128:6;9075:60;;;9065:70;-1:-1;;8929:1;8922:9;8882:260;;;-1:-1;9155:3;;8598:566;-1:-1;;;;;8598:566;9172:104;9249:21;9264:5;9249:21;;9283:356;;9411:38;9443:5;9411:38;;;9461:88;9542:6;9537:3;9461:88;;;9454:95;;9554:52;9599:6;9594:3;9587:4;9580:5;9576:16;9554:52;;;9618:16;;;;;9391:248;-1:-1;;9391:248;9646:172;9752:60;9806:5;9752:60;;10146:377;;10306:67;10370:2;10365:3;10306:67;;;10406:34;10386:55;;10475:10;10470:2;10461:12;;10454:32;10514:2;10505:12;;10292:231;-1:-1;;10292:231;10532:375;;10692:67;10756:2;10751:3;10692:67;;;10792:34;10772:55;;10861:8;10856:2;10847:12;;10840:30;10898:2;10889:12;;10678:229;-1:-1;;10678:229;10916:380;;11076:67;11140:2;11135:3;11076:67;;;11176:34;11156:55;;11245:13;11240:2;11231:12;;11224:35;11287:2;11278:12;;11062:234;-1:-1;;11062:234;11305:320;;11465:67;11529:2;11524:3;11465:67;;;11565:22;11545:43;;11616:2;11607:12;;11451:174;-1:-1;;11451:174;11634:332;;11794:67;11858:2;11853:3;11794:67;;;11894:34;11874:55;;11957:2;11948:12;;11780:186;-1:-1;;11780:186;11975:312;;12135:67;12199:2;12194:3;12135:67;;;12235:14;12215:35;;12278:2;12269:12;;12121:166;-1:-1;;12121:166;12296:332;;12456:67;12520:2;12515:3;12456:67;;;12556:34;12536:55;;12619:2;12610:12;;12442:186;-1:-1;;12442:186;12637:320;;12797:67;12861:2;12856:3;12797:67;;;12897:22;12877:43;;12948:2;12939:12;;12783:174;-1:-1;;12783:174;12966:315;;13126:67;13190:2;13185:3;13126:67;;;13226:17;13206:38;;13272:2;13263:12;;13112:169;-1:-1;;13112:169;13290:324;;13450:67;13514:2;13509:3;13450:67;;;13550:26;13530:47;;13605:2;13596:12;;13436:178;-1:-1;;13436:178;13623:379;;13783:67;13847:2;13842:3;13783:67;;;13883:34;13863:55;;13952:12;13947:2;13938:12;;13931:34;13993:2;13984:12;;13769:233;-1:-1;;13769:233;14011:391;;14171:67;14235:2;14230:3;14171:67;;;14271:34;14251:55;;14340:24;14335:2;14326:12;;14319:46;14393:2;14384:12;;14157:245;-1:-1;;14157:245;14411:331;;14571:67;14635:2;14630:3;14571:67;;;14671:33;14651:54;;14733:2;14724:12;;14557:185;-1:-1;;14557:185;14750:113;14833:24;14851:5;14833:24;;14870:262;;15014:93;15103:3;15094:6;15014:93;;;15007:100;14995:137;-1:-1;;;14995:137;15139:213;15257:2;15242:18;;15271:71;15246:9;15315:6;15271:71;;15359:229;15485:2;15470:18;;15499:79;15474:9;15551:6;15499:79;;15595:340;15749:2;15734:18;;15763:79;15738:9;15815:6;15763:79;;;15853:72;15921:2;15910:9;15906:18;15897:6;15853:72;;15942:324;16088:2;16073:18;;16102:71;16077:9;16146:6;16102:71;;16273:324;16419:2;16404:18;;16433:71;16408:9;16477:6;16433:71;;;16515:72;16583:2;16572:9;16568:18;16559:6;16515:72;;16604:201;16716:2;16701:18;;16730:65;16705:9;16768:6;16730:65;;16812:259;16953:2;16938:18;;16967:94;16942:9;17034:6;16967:94;;17078:607;17310:3;17295:19;;17325:85;17299:9;17383:6;17325:85;;;17421:80;17497:2;17486:9;17482:18;17473:6;17421:80;;;17512;17588:2;17577:9;17573:18;17564:6;17512:80;;;17603:72;17671:2;17660:9;17656:18;17647:6;17603:72;;17938:407;18129:2;18143:47;;;18114:18;;18204:131;18114:18;18204:131;;18352:407;18543:2;18557:47;;;18528:18;;18618:131;18528:18;18618:131;;18766:407;18957:2;18971:47;;;18942:18;;19032:131;18942:18;19032:131;;19180:407;19371:2;19385:47;;;19356:18;;19446:131;19356:18;19446:131;;19594:407;19785:2;19799:47;;;19770:18;;19860:131;19770:18;19860:131;;20008:407;20199:2;20213:47;;;20184:18;;20274:131;20184:18;20274:131;;20422:407;20613:2;20627:47;;;20598:18;;20688:131;20598:18;20688:131;;20836:407;21027:2;21041:47;;;21012:18;;21102:131;21012:18;21102:131;;21250:407;21441:2;21455:47;;;21426:18;;21516:131;21426:18;21516:131;;21664:407;21855:2;21869:47;;;21840:18;;21930:131;21840:18;21930:131;;22078:407;22269:2;22283:47;;;22254:18;;22344:131;22254:18;22344:131;;22492:407;22683:2;22697:47;;;22668:18;;22758:131;22668:18;22758:131;;22906:407;23097:2;23111:47;;;23082:18;;23172:131;23082:18;23172:131;;23320:213;23438:2;23423:18;;23452:71;23427:9;23496:6;23452:71;;23540:583;23764:2;23749:18;;23778:71;23753:9;23822:6;23778:71;;;23897:9;23891:4;23887:20;23882:2;23871:9;23867:18;23860:48;23922:108;24025:4;24016:6;23922:108;;;23914:116;;24041:72;24109:2;24098:9;24094:18;24085:6;24041:72;;24130:256;24192:2;24186:9;24218:17;;;24293:18;24278:34;;24314:22;;;24275:62;24272:2;;;24350:1;24347;24340:12;24272:2;24366;24359:22;24170:216;;-1:-1;24170:216;24393:304;;24552:18;24544:6;24541:30;24538:2;;;24584:1;24581;24574:12;24538:2;-1:-1;24619:4;24607:17;;;24672:15;;24475:222;25015:321;;25158:18;25150:6;25147:30;25144:2;;;25190:1;25187;25180:12;25144:2;-1:-1;25321:4;25257;25234:17;;;;25253:9;25230:33;25311:15;;25081:255;25343:151;25467:4;25458:14;;25415:79;25501:137;25604:12;;25575:63;25889:178;26007:19;;;26056:4;26047:14;;26000:67;26076:144;26211:3;26189:31;-1:-1;26189:31;26400:91;;26462:24;26480:5;26462:24;;26604:85;26670:13;26663:21;;26646:43;26696:105;;26772:24;26790:5;26772:24;;26808:121;26881:42;26870:54;;26853:76;26936:72;26998:5;26981:27;27015:129;;27102:37;27133:5;27102:37;;28274:145;28355:6;28350:3;28345;28332:30;-1:-1;28411:1;28393:16;;28386:27;28325:94;28428:268;28493:1;28500:101;28514:6;28511:1;28508:13;28500:101;;;28581:11;;;28575:18;28562:11;;;28555:39;28536:2;28529:10;28500:101;;;28616:6;28613:1;28610:13;28607:2;;;-1:-1;;28681:1;28663:16;;28656:27;28477:219;28704:117;28773:24;28791:5;28773:24;;;28766:5;28763:35;28753:2;;28812:1;28809;28802:12;28968:111;29034:21;29049:5;29034:21;;29086:145;29169:38;29201:5;29169:38;;29238:117;29307:24;29325:5;29307:24;
Swarm Source
bzzr://0048ed3468e6cdff6d26bf573cd4db9ef56fd2e25368c315c4b55b666300d639
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.