ETH Price: $3,280.28 (-3.82%)
Gas: 16 Gwei

Contract

0x1fE867bFE9cbE0045467605B959A355223E3885D
 

Overview

ETH Balance

3.531186960138386298 ETH

Eth Value

$11,583.27 (@ $3,280.28/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Enable Trade104105862020-07-07 6:13:271457 days ago1594102407IN
Kyber: Reserve BNT
0 ETH0.0014519550
Set Kyber Networ...104105792020-07-07 6:11:121457 days ago1594102272IN
Kyber: Reserve BNT
0 ETH0.0012991444
Set Bancor Contr...104045692020-07-06 7:33:541458 days ago1594020834IN
Kyber: Reserve BNT
0 ETH0.0022943844
Withdraw Token103036892020-06-20 16:24:411474 days ago1592670281IN
Kyber: Reserve BNT
0 ETH0.0017003640
Set Bancor Contr...102886782020-06-18 8:39:271476 days ago1592469567IN
Kyber: Reserve BNT
0 ETH0.0022943844
Disable Trade102886622020-06-18 8:34:461476 days ago1592469286IN
Kyber: Reserve BNT
0 ETH0.0011351339
Enable Trade102828992020-06-17 11:11:301477 days ago1592392290IN
Kyber: Reserve BNT
0 ETH0.0012777144
Set Bancor Contr...102827792020-06-17 10:47:111477 days ago1592390831IN
Kyber: Reserve BNT
0 ETH0.0022943844
Disable Trade102827712020-06-17 10:45:251477 days ago1592390725IN
Kyber: Reserve BNT
0 ETH0.0013388746
Enable Trade102772292020-06-16 14:07:371478 days ago1592316457IN
Kyber: Reserve BNT
0 ETH0.0015971455
Set Bancor Contr...102772252020-06-16 14:07:091478 days ago1592316429IN
Kyber: Reserve BNT
0 ETH0.0028679755
Disable Trade102764342020-06-16 11:02:021478 days ago1592305322IN
Kyber: Reserve BNT
0 ETH0.0012806644
Enable Trade92508782020-01-10 4:33:411636 days ago1578630821IN
Kyber: Reserve BNT
0 ETH0.000232318
Set Bancor Contr...92508742020-01-10 4:32:351636 days ago1578630755IN
Kyber: Reserve BNT
0 ETH0.000417168
Disable Trade92461652020-01-09 11:22:191637 days ago1578568939IN
Kyber: Reserve BNT
0 ETH0.0005821220
Add Alerter91996942020-01-02 6:59:351644 days ago1577948375IN
Kyber: Reserve BNT
0 ETH0.000705618
Set Kyber Networ...91996212020-01-02 6:39:351644 days ago1577947175IN
Kyber: Reserve BNT
0 ETH0.000236118
Trade91993002020-01-02 5:10:591644 days ago1577941859IN
Kyber: Reserve BNT
0.001 ETH0.00078923
0x6080604091992802020-01-02 5:02:391644 days ago1577941359IN
 Contract Creation
0 ETH0.006907823

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
155350002022-09-14 20:56:21657 days ago1663188981
Kyber: Reserve BNT
0.34835271 ETH
155350002022-09-14 20:56:21657 days ago1663188981
Kyber: Reserve BNT
0.34835271 ETH
139286712022-01-02 22:10:56912 days ago1641161456
Kyber: Reserve BNT
4.70098783 ETH
139286712022-01-02 22:10:56912 days ago1641161456
Kyber: Reserve BNT
4.70098783 ETH
137902582021-12-12 12:20:01934 days ago1639311601
Kyber: Reserve BNT
0.02485261 ETH
137902582021-12-12 12:20:01934 days ago1639311601
Kyber: Reserve BNT
0.0248551 ETH
137600242021-12-07 18:09:52939 days ago1638900592
Kyber: Reserve BNT
7.75160797 ETH
137600242021-12-07 18:09:52939 days ago1638900592
Kyber: Reserve BNT
7.75160797 ETH
137557152021-12-07 1:30:06939 days ago1638840606
Kyber: Reserve BNT
0.05417108 ETH
137557152021-12-07 1:30:06939 days ago1638840606
Kyber: Reserve BNT
0.05417649 ETH
137512972021-12-06 8:45:04940 days ago1638780304
Kyber: Reserve BNT
7.68007152 ETH
137512972021-12-06 8:45:04940 days ago1638780304
Kyber: Reserve BNT
7.68007152 ETH
137149582021-11-30 13:10:54946 days ago1638277854
Kyber: Reserve BNT
14.985 ETH
137149582021-11-30 13:10:54946 days ago1638277854
Kyber: Reserve BNT
14.985 ETH
132793462021-09-23 2:37:141014 days ago1632364634
Kyber: Reserve BNT
0.58496969 ETH
132793462021-09-23 2:37:141014 days ago1632364634
Kyber: Reserve BNT
0.58502819 ETH
132716752021-09-21 21:47:231015 days ago1632260843
Kyber: Reserve BNT
0.59450804 ETH
132716752021-09-21 21:47:231015 days ago1632260843
Kyber: Reserve BNT
0.59450804 ETH
131247012021-08-30 4:23:311038 days ago1630297411
Kyber: Reserve BNT
29.80702919 ETH
131247012021-08-30 4:23:311038 days ago1630297411
Kyber: Reserve BNT
29.81001019 ETH
130996202021-08-26 7:25:501042 days ago1629962750
Kyber: Reserve BNT
23.7764437 ETH
130996202021-08-26 7:25:501042 days ago1629962750
Kyber: Reserve BNT
23.7764437 ETH
130933202021-08-25 7:54:511043 days ago1629878091
Kyber: Reserve BNT
3.84476744 ETH
130933202021-08-25 7:54:511043 days ago1629878091
Kyber: Reserve BNT
3.84476744 ETH
130881722021-08-24 13:01:411044 days ago1629810101
Kyber: Reserve BNT
0.22798905 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x1263D106...e28858BC1
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
KyberBancorReserve

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: KyberBancorReserve.sol
pragma solidity 0.5.11;

import "./IERC20.sol";
import "./IKyberReserve.sol";
import "./WithdrawableV5.sol";
import "./UtilsV5.sol";
import "./IBancorNetwork.sol";

contract KyberBancorReserve is IKyberReserve, Withdrawable, Utils {

    uint constant internal BPS = 10000; // 10^4
    uint constant ETH_BNT_DECIMALS = 18;

    address public kyberNetwork;
    bool public tradeEnabled;
    uint public feeBps;

    IBancorNetwork public bancorNetwork; // 0x0e936B11c2e7b601055e58c7E32417187aF4de4a

    IERC20 public bancorEth; // 0xc0829421C1d260BD3cB3E0F06cfE2D52db2cE315
    IERC20 public bancorETHBNT; // 0xb1CD6e4153B2a390Cf00A6556b0fC1458C4A5533
    IERC20 public bancorToken; // 0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C

    constructor(
        address _bancorNetwork,
        address _kyberNetwork,
        uint _feeBps,
        address _bancorEth,
        address _bancorETHBNT,
        address _bancorToken,
        address _admin
    )
        public
    {
        require(_bancorNetwork != address(0), "constructor: bancorNetwork address is missing");
        require(_kyberNetwork != address(0), "constructor: kyberNetwork address is missing");
        require(_bancorEth != address(0), "constructor: bancorEth address is missing");
        require(_bancorETHBNT != address(0), "constructor: bancorETHBNT address is missing");
        require(_bancorToken != address(0), "constructor: bancorToken address is missing");
        require(_admin != address(0), "constructor: admin address is missing");
        require(_feeBps < BPS, "constructor: fee is too big");

        bancorNetwork = IBancorNetwork(_bancorNetwork);
        bancorToken = IERC20(_bancorToken);
        bancorEth = IERC20(_bancorEth);
        bancorETHBNT = IERC20(_bancorETHBNT);

        kyberNetwork = _kyberNetwork;
        feeBps = _feeBps;
        admin = _admin;
        tradeEnabled = true;

        require(bancorToken.approve(address(bancorNetwork), 2 ** 255));
    }

    function() external payable { }

    function getConversionRate(IERC20 src, IERC20 dest, uint srcQty, uint) public view returns(uint) {
        if (!tradeEnabled) { return 0; }
        if (srcQty == 0) { return 0; }

        if (src != ETH_TOKEN_ADDRESS && dest != ETH_TOKEN_ADDRESS) {
            return 0; // either src or dest must be ETH
        }
        IERC20 token = src == ETH_TOKEN_ADDRESS ? dest : src;
        if (token != bancorToken) { return 0; } // not BNT token

        IERC20[] memory path = getConversionPath(src, dest);

        uint destQty;
        (destQty, ) = bancorNetwork.getReturnByPath(path, srcQty);

        // src and dest can be only BNT or ETH
        uint rate = calcRateFromQty(srcQty, destQty, ETH_BNT_DECIMALS, ETH_BNT_DECIMALS);

        rate = valueAfterReducingFee(rate);

        return rate;
    }

    event TradeExecute(
        address indexed sender,
        address src,
        uint srcAmount,
        address destToken,
        uint destAmount,
        address payable destAddress
    );

    function trade(
        IERC20 srcToken,
        uint srcAmount,
        IERC20 destToken,
        address payable destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool)
    {

        require(tradeEnabled, "trade: trade is not enabled");
        require(msg.sender == kyberNetwork, "trade: sender is not network");
        require(srcAmount > 0, "trade: src amount must be greater than 0");
        require(srcToken == ETH_TOKEN_ADDRESS || destToken == ETH_TOKEN_ADDRESS, "trade: src or dest must be ETH");
        require(srcToken == bancorToken || destToken == bancorToken, "trade: src or dest must be BNT");

        require(doTrade(srcToken, srcAmount, destToken, destAddress, conversionRate, validate), "trade: doTrade function returns false");

        return true;
    }

    event KyberNetworkSet(address kyberNetwork);

    function setKyberNetwork(address _kyberNetwork) public onlyAdmin {
        require(_kyberNetwork != address(0), "setKyberNetwork: kyberNetwork address is missing");

        kyberNetwork = _kyberNetwork;
        emit KyberNetworkSet(_kyberNetwork);
    }

    event BancorNetworkSet(address _bancorNetwork);

    function setBancorContract(address _bancorNetwork) public onlyAdmin {
        require(_bancorNetwork != address(0), "setBancorContract: bancorNetwork address is missing");

        if (address(bancorNetwork) != address(0)) {
            require(bancorToken.approve(address(bancorNetwork), 0), "setBancorContract: can not reset approve token");
        }
        bancorNetwork = IBancorNetwork(_bancorNetwork);
        require(bancorToken.approve(address(bancorNetwork), 2 ** 255), "setBancorContract: can not approve token");

        emit BancorNetworkSet(_bancorNetwork);
    }

    event FeeBpsSet(uint feeBps);

    function setFeeBps(uint _feeBps) public onlyAdmin {
        require(_feeBps < BPS, "setFeeBps: feeBps >= BPS");

        feeBps = _feeBps;
        emit FeeBpsSet(feeBps);
    }

    event TradeEnabled(bool enable);

    function enableTrade() public onlyAdmin returns(bool) {
        tradeEnabled = true;
        emit TradeEnabled(true);

        return true;
    }

    function disableTrade() public onlyAlerter returns(bool) {
        tradeEnabled = false;
        emit TradeEnabled(false);

        return true;
    }

    function doTrade(
        IERC20 srcToken,
        uint srcAmount,
        IERC20 destToken,
        address payable destAddress,
        uint conversionRate,
        bool validate
    )
        internal
        returns(bool)
    {
        // can skip validation if done at kyber network level
        if (validate) {
            require(conversionRate > 0);
            if (srcToken == ETH_TOKEN_ADDRESS)
                require(msg.value == srcAmount, "doTrade: msg value is not correct for ETH trade");
            else
                require(msg.value == 0, "doTrade: msg value is not correct for token trade");
        }

        if (srcToken != ETH_TOKEN_ADDRESS) {
            // collect source amount
            require(srcToken.transferFrom(msg.sender, address(this), srcAmount), "doTrade: collect src token failed");
        }

        IERC20[] memory path = getConversionPath(srcToken, destToken);
        require(path.length > 0, "doTrade: couldn't find path");

        // BNT and ETH have the same decimals
        uint userExpectedDestAmount = calcDstQty(srcAmount, ETH_BNT_DECIMALS, ETH_BNT_DECIMALS, conversionRate);
        require(userExpectedDestAmount > 0, "doTrade: user expected amount must be greater than 0");
        uint destAmount;

        if (srcToken == ETH_TOKEN_ADDRESS) {
            destAmount = bancorNetwork.convert2.value(srcAmount)(path, srcAmount, userExpectedDestAmount, address(0), 0);
        } else {
            destAmount = bancorNetwork.claimAndConvert2(path, srcAmount, userExpectedDestAmount, address(0), 0);
        }

        require(destAmount >= userExpectedDestAmount, "doTrade: dest amount is lower than expected amount");

        // transfer back only expected dest amount
        if (destToken == ETH_TOKEN_ADDRESS) {
            destAddress.transfer(userExpectedDestAmount);
        } else {
            require(destToken.transfer(destAddress, userExpectedDestAmount), "doTrade: transfer back dest token failed");
        }

        emit TradeExecute(msg.sender, address(srcToken), srcAmount, address(destToken), userExpectedDestAmount, destAddress);
        return true;
    }

    function getConversionPath(IERC20 src, IERC20 dest) public view returns(IERC20[] memory path) {

        if (src == bancorToken) {
            // trade from BNT to ETH
            path = new IERC20[](3);
            path[0] = bancorToken;
            path[1] = bancorETHBNT;
            path[2] = bancorEth;
            return path;
        } else if (dest == bancorToken) {
            // trade from ETH to BNT
            path = new IERC20[](3);
            path[0] = bancorEth;
            path[1] = bancorETHBNT;
            path[2] = bancorToken;
            return path;
        }
    }

    function valueAfterReducingFee(uint val) internal view returns(uint) {
        require(val <= MAX_QTY, "valueAfterReducingFee: val > MAX_QTY");
        return ((BPS - feeBps) * val) / BPS;
    }
}

File 2 of 7: IBancorNetwork.sol
pragma solidity 0.5.11;

import "./IERC20.sol";

contract IBancorNetwork {
    // to get rate, return dest amount + fee amount
    function getReturnByPath(IERC20[] calldata _path, uint256 _amount) external view returns (uint256, uint256);
    // to convert ETH to token, return dest amount
    function convert2(
        IERC20[] calldata _path,
        uint256 _amount,
        uint256 _minReturn,
        address _affiliateAccount,
        uint256 _affiliateFee
    ) external payable returns (uint256);

    // to convert token to ETH, return dest amount
    function claimAndConvert2(
        IERC20[] calldata _path,
        uint256 _amount,
        uint256 _minReturn,
        address _affiliateAccount,
        uint256 _affiliateFee
    ) external returns (uint256);
}

File 3 of 7: IERC20.sol
pragma solidity 0.5.11;


interface IERC20 {
    function transfer(address _to, uint _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint _value) external returns (bool success);
    function approve(address _spender, uint _value) external returns (bool success);
    function totalSupply() external view returns (uint supply);
    function balanceOf(address _owner) external view returns (uint balance);
    function allowance(address _owner, address _spender) external view returns (uint remaining);
    function decimals() external view returns(uint digits);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

File 4 of 7: IKyberReserve.sol
pragma solidity 0.5.11;

import "./IERC20.sol";


/// @title Kyber Reserve contract
interface IKyberReserve {

    function trade(
        IERC20 srcToken,
        uint srcAmount,
        IERC20 destToken,
        address payable destAddress,
        uint conversionRate,
        bool validate
    )
        external
        payable
        returns(bool);

    function getConversionRate(IERC20 src, IERC20 dest, uint srcQty, uint blockNumber) external view returns(uint);
}

File 5 of 7: PermissionGroupsV5.sol
pragma solidity 0.5.11;


contract PermissionGroups {

    address public admin;
    address public pendingAdmin;
    mapping(address=>bool) internal operators;
    mapping(address=>bool) internal alerters;
    address[] internal operatorsGroup;
    address[] internal alertersGroup;
    uint constant internal MAX_GROUP_SIZE = 50;

    constructor() public {
        admin = msg.sender;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin);
        _;
    }

    modifier onlyOperator() {
        require(operators[msg.sender]);
        _;
    }

    modifier onlyAlerter() {
        require(alerters[msg.sender]);
        _;
    }

    function getOperators () external view returns(address[] memory) {
        return operatorsGroup;
    }

    function getAlerters () external view returns(address[] memory) {
        return alertersGroup;
    }

    event TransferAdminPending(address pendingAdmin);

    /**
     * @dev Allows the current admin to set the pendingAdmin address.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdmin(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        emit TransferAdminPending(pendingAdmin);
        pendingAdmin = newAdmin;
    }

    /**
     * @dev Allows the current admin to set the admin in one tx. Useful initial deployment.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdminQuickly(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        emit TransferAdminPending(newAdmin);
        emit AdminClaimed(newAdmin, admin);
        admin = newAdmin;
    }

    event AdminClaimed( address newAdmin, address previousAdmin);

    /**
     * @dev Allows the pendingAdmin address to finalize the change admin process.
     */
    function claimAdmin() public {
        require(pendingAdmin == msg.sender);
        emit AdminClaimed(pendingAdmin, admin);
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    event AlerterAdded (address newAlerter, bool isAdd);

    function addAlerter(address newAlerter) public onlyAdmin {
        require(!alerters[newAlerter]); // prevent duplicates.
        require(alertersGroup.length < MAX_GROUP_SIZE);

        emit AlerterAdded(newAlerter, true);
        alerters[newAlerter] = true;
        alertersGroup.push(newAlerter);
    }

    function removeAlerter (address alerter) public onlyAdmin {
        require(alerters[alerter]);
        alerters[alerter] = false;

        for (uint i = 0; i < alertersGroup.length; ++i) {
            if (alertersGroup[i] == alerter) {
                alertersGroup[i] = alertersGroup[alertersGroup.length - 1];
                alertersGroup.length--;
                emit AlerterAdded(alerter, false);
                break;
            }
        }
    }

    event OperatorAdded(address newOperator, bool isAdd);

    function addOperator(address newOperator) public onlyAdmin {
        require(!operators[newOperator]); // prevent duplicates.
        require(operatorsGroup.length < MAX_GROUP_SIZE);

        emit OperatorAdded(newOperator, true);
        operators[newOperator] = true;
        operatorsGroup.push(newOperator);
    }

    function removeOperator (address operator) public onlyAdmin {
        require(operators[operator]);
        operators[operator] = false;

        for (uint i = 0; i < operatorsGroup.length; ++i) {
            if (operatorsGroup[i] == operator) {
                operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1];
                operatorsGroup.length -= 1;
                emit OperatorAdded(operator, false);
                break;
            }
        }
    }
}

File 6 of 7: UtilsV5.sol
pragma solidity 0.5.11;

import "./IERC20.sol";


/// @title Kyber utils and utils2 contracts
contract Utils {

    IERC20 constant internal ETH_TOKEN_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
    uint  constant internal PRECISION = (10**18);
    uint  constant internal MAX_QTY   = (10**28); // 10B tokens
    uint  constant internal MAX_RATE  = (PRECISION * 10**6); // up to 1M tokens per ETH
    uint  constant internal MAX_DECIMALS = 18;
    uint  constant internal ETH_DECIMALS = 18;

    mapping(address=>uint) internal decimals;

    /// @dev get the balance of a user.
    /// @param token The token type
    /// @return The balance
    function getBalance(IERC20 token, address user) public view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS)
            return user.balance;
        else
            return token.balanceOf(user);
    }

    function setDecimals(IERC20 token) internal {
        if (token == ETH_TOKEN_ADDRESS)
            decimals[address(token)] = ETH_DECIMALS;
        else
            decimals[address(token)] = token.decimals();
    }

    function getDecimals(IERC20 token) internal view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS) return ETH_DECIMALS; // save storage access
        uint tokenDecimals = decimals[address(token)];
        // moreover, very possible that old tokens have decimals 0
        // these tokens will just have higher gas fees.
        if (tokenDecimals == 0) return token.decimals();

        return tokenDecimals;
    }

    function calcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(srcQty <= MAX_QTY);
        require(rate <= MAX_RATE);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION;
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals)));
        }
    }

    function calcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(dstQty <= MAX_QTY);
        require(rate <= MAX_RATE);

        //source quantity is rounded up. to avoid dest quantity being too low.
        uint numerator;
        uint denominator;
        if (srcDecimals >= dstDecimals) {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals)));
            denominator = rate;
        } else {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty);
            denominator = (rate * (10**(dstDecimals - srcDecimals)));
        }
        return (numerator + denominator - 1) / denominator; //avoid rounding down errors
    }

    function calcDestAmount(IERC20 src, IERC20 dest, uint srcAmount, uint rate) internal view returns(uint) {
        return calcDstQty(srcAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcSrcAmount(IERC20 src, IERC20 dest, uint destAmount, uint rate) internal view returns(uint) {
        return calcSrcQty(destAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcRateFromQty(uint srcAmount, uint destAmount, uint srcDecimals, uint dstDecimals)
        internal pure returns(uint)
    {
        require(srcAmount <= MAX_QTY);
        require(destAmount <= MAX_QTY);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION / ((10 ** (dstDecimals - srcDecimals)) * srcAmount));
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION * (10 ** (srcDecimals - dstDecimals)) / srcAmount);
        }
    }

    function minOf(uint x, uint y) internal pure returns(uint) {
        return x > y ? y : x;
    }
}

File 7 of 7: WithdrawableV5.sol
pragma solidity 0.5.11;

import "./IERC20.sol";
import "./PermissionGroupsV5.sol";


contract Withdrawable is PermissionGroups {

    event TokenWithdraw(IERC20 token, uint amount, address sendTo);

    /**
     * @dev Withdraw all IERC20 compatible tokens
     * @param token IERC20 The address of the token contract
     */
    function withdrawToken(IERC20 token, uint amount, address sendTo) external onlyAdmin {
        require(token.transfer(sendTo, amount));
        emit TokenWithdraw(token, amount, sendTo);
    }

    event EtherWithdraw(uint amount, address sendTo);

    /**
     * @dev Withdraw Ethers
     */
    function withdrawEther(uint amount, address payable sendTo) external onlyAdmin {
        sendTo.transfer(amount);
        emit EtherWithdraw(amount, sendTo);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"enableTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bancorToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bancorEth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_kyberNetwork","type":"address"}],"name":"setKyberNetwork","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bancorETHBNT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"srcToken","type":"address"},{"internalType":"uint256","name":"srcAmount","type":"uint256"},{"internalType":"contract IERC20","name":"destToken","type":"address"},{"internalType":"address payable","name":"destAddress","type":"address"},{"internalType":"uint256","name":"conversionRate","type":"uint256"},{"internalType":"bool","name":"validate","type":"bool"}],"name":"trade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_feeBps","type":"uint256"}],"name":"setFeeBps","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IERC20","name":"src","type":"address"},{"internalType":"contract IERC20","name":"dest","type":"address"}],"name":"getConversionPath","outputs":[{"internalType":"contract IERC20[]","name":"path","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAlerters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IERC20","name":"src","type":"address"},{"internalType":"contract IERC20","name":"dest","type":"address"},{"internalType":"uint256","name":"srcQty","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"getConversionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bancorNetwork","outputs":[{"internalType":"contract IBancorNetwork","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetwork","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_bancorNetwork","type":"address"}],"name":"setBancorContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bancorNetwork","type":"address"},{"internalType":"address","name":"_kyberNetwork","type":"address"},{"internalType":"uint256","name":"_feeBps","type":"uint256"},{"internalType":"address","name":"_bancorEth","type":"address"},{"internalType":"address","name":"_bancorETHBNT","type":"address"},{"internalType":"address","name":"_bancorToken","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"srcAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"destToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"destAmount","type":"uint256"},{"indexed":false,"internalType":"address payable","name":"destAddress","type":"address"}],"name":"TradeExecute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"kyberNetwork","type":"address"}],"name":"KyberNetworkSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_bancorNetwork","type":"address"}],"name":"BancorNetworkSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feeBps","type":"uint256"}],"name":"FeeBpsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAlerter","type":"address"},{"indexed":false,"internalType":"bool","name":"isAdd","type":"bool"}],"name":"AlerterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOperator","type":"address"},{"indexed":false,"internalType":"bool","name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"}]

Deployed Bytecode

0x6080604052600436106101c15760003560e01c806375829def116100f7578063a4edb25e11610095578063d4fac45d11610064578063d4fac45d1461062c578063d621e81314610667578063ea075bfd1461067c578063f851a440146106af576101c1565b8063a4edb25e14610596578063ac8a584a146105ab578063b78b842d146105de578063ce56c454146105f3576101c1565b80637acc8678116100d15780637acc8678146104d25780637c423f54146105055780637cd442721461051a5780639870d7fe14610563576101c1565b806375829def1461044f57806377db93e11461048257806377f50f97146104bd576101c1565b8063408ee7fe1161016457806359c1c6411161013e57806359c1c641146103af5780636940030f146103c45780636cf69811146103d957806372c27b6214610425576101c1565b8063408ee7fe146103345780634d21dff71461036757806354a325a61461037c576101c1565b806326782247116101a0578063267822471461024657806327a099d8146102775780633b172a32146102dc5780633ccdbb28146102f1576101c1565b806299d386146101c357806301a12fd3146101ec57806324a9d8531461021f575b005b3480156101cf57600080fd5b506101d86106c4565b604080519115158252519081900360200190f35b3480156101f857600080fd5b506101c16004803603602081101561020f57600080fd5b50356001600160a01b031661072a565b34801561022b57600080fd5b5061023461088d565b60408051918252519081900360200190f35b34801561025257600080fd5b5061025b610893565b604080516001600160a01b039092168252519081900360200190f35b34801561028357600080fd5b5061028c6108a2565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102c85781810151838201526020016102b0565b505050509050019250505060405180910390f35b3480156102e857600080fd5b5061025b610904565b3480156102fd57600080fd5b506101c16004803603606081101561031457600080fd5b506001600160a01b03813581169160208101359160409091013516610913565b34801561034057600080fd5b506101c16004803603602081101561035757600080fd5b50356001600160a01b0316610a0e565b34801561037357600080fd5b5061025b610b04565b34801561038857600080fd5b506101c16004803603602081101561039f57600080fd5b50356001600160a01b0316610b13565b3480156103bb57600080fd5b5061025b610bc3565b3480156103d057600080fd5b506101d8610bd2565b6101d8600480360360c08110156103ef57600080fd5b506001600160a01b038135811691602081013591604082013581169160608101359091169060808101359060a001351515610c35565b34801561043157600080fd5b506101c16004803603602081101561044857600080fd5b5035610e9c565b34801561045b57600080fd5b506101c16004803603602081101561047257600080fd5b50356001600160a01b0316610f44565b34801561048e57600080fd5b5061028c600480360360408110156104a557600080fd5b506001600160a01b0381358116916020013516610fcf565b3480156104c957600080fd5b506101c1611143565b3480156104de57600080fd5b506101c1600480360360208110156104f557600080fd5b50356001600160a01b03166111cd565b34801561051157600080fd5b5061028c61129d565b34801561052657600080fd5b506102346004803603608081101561053d57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356112fd565b34801561056f57600080fd5b506101c16004803603602081101561058657600080fd5b50356001600160a01b03166114c1565b3480156105a257600080fd5b5061025b6115b7565b3480156105b757600080fd5b506101c1600480360360208110156105ce57600080fd5b50356001600160a01b03166115c6565b3480156105ea57600080fd5b5061025b611725565b3480156105ff57600080fd5b506101c16004803603604081101561061657600080fd5b50803590602001356001600160a01b0316611734565b34801561063857600080fd5b506102346004803603604081101561064f57600080fd5b506001600160a01b03813581169160200135166117c9565b34801561067357600080fd5b506101d861188a565b34801561068857600080fd5b506101c16004803603602081101561069f57600080fd5b50356001600160a01b031661189a565b3480156106bb57600080fd5b5061025b611ade565b600080546001600160a01b031633146106dc57600080fd5b6007805460ff60a01b1916600160a01b179055604080516001815290517f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359181900360200190a15060015b90565b6000546001600160a01b0316331461074157600080fd5b6001600160a01b03811660009081526003602052604090205460ff1661076657600080fd5b6001600160a01b0381166000908152600360205260408120805460ff191690555b60055481101561088957816001600160a01b0316600582815481106107a857fe5b6000918252602090912001546001600160a01b03161415610881576005805460001981019081106107d557fe5b600091825260209091200154600580546001600160a01b0390921691839081106107fb57fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600580549061083790600019830161227f565b50604080516001600160a01b03841681526000602082015281517f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762929181900390910190a1610889565b600101610787565b5050565b60085481565b6001546001600160a01b031681565b606060048054806020026020016040519081016040528092919081815260200182805480156108fa57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108dc575b5050505050905090565b600c546001600160a01b031681565b6000546001600160a01b0316331461092a57600080fd5b826001600160a01b031663a9059cbb82846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561098a57600080fd5b505af115801561099e573d6000803e3d6000fd5b505050506040513d60208110156109b457600080fd5b50516109bf57600080fd5b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b6000546001600160a01b03163314610a2557600080fd5b6001600160a01b03811660009081526003602052604090205460ff1615610a4b57600080fd5b600554603211610a5a57600080fd5b604080516001600160a01b03831681526001602082015281517f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762929181900390910190a16001600160a01b03166000818152600360205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b600a546001600160a01b031681565b6000546001600160a01b03163314610b2a57600080fd5b6001600160a01b038116610b6f5760405162461bcd60e51b81526004018080602001828103825260308152602001806123236030913960400191505060405180910390fd5b600780546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f38622430bb6defd4452b087e8d0b4a6d1c4d35c179c2d7d875d4abb272b9d88b9181900360200190a150565b600b546001600160a01b031681565b3360009081526003602052604081205460ff16610bee57600080fd5b6007805460ff60a01b19169055604080516000815290517f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359181900360200190a150600190565b600754600090600160a01b900460ff16610c96576040805162461bcd60e51b815260206004820152601b60248201527f74726164653a207472616465206973206e6f7420656e61626c65640000000000604482015290519081900360640190fd5b6007546001600160a01b03163314610cf5576040805162461bcd60e51b815260206004820152601c60248201527f74726164653a2073656e646572206973206e6f74206e6574776f726b00000000604482015290519081900360640190fd5b60008611610d345760405162461bcd60e51b81526004018080602001828103825260288152602001806124056028913960400191505060405180910390fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480610d7b57506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b610dcc576040805162461bcd60e51b815260206004820152601e60248201527f74726164653a20737263206f722064657374206d757374206265204554480000604482015290519081900360640190fd5b600c546001600160a01b0388811691161480610df55750600c546001600160a01b038681169116145b610e46576040805162461bcd60e51b815260206004820152601e60248201527f74726164653a20737263206f722064657374206d75737420626520424e540000604482015290519081900360640190fd5b610e54878787878787611aed565b610e8f5760405162461bcd60e51b81526004018080602001828103825260258152602001806124db6025913960400191505060405180910390fd5b5060019695505050505050565b6000546001600160a01b03163314610eb357600080fd5b6127108110610f09576040805162461bcd60e51b815260206004820152601860248201527f7365744665654270733a20666565427073203e3d204250530000000000000000604482015290519081900360640190fd5b60088190556040805182815290517f4f78c4ceb393a616bbd264a4584a9ad15d722042ce1e135e6a8380217f5cb42b9181900360200190a150565b6000546001600160a01b03163314610f5b57600080fd5b6001600160a01b038116610f6e57600080fd5b600154604080516001600160a01b039092168252517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600c546060906001600160a01b0384811691161415611096576040805160038082526080820190925290602082016060803883395050600c5482519293506001600160a01b03169183915060009061102357fe5b6001600160a01b039283166020918202929092010152600b5482519116908290600190811061104e57fe5b6001600160a01b039283166020918202929092010152600a5482519116908290600290811061107957fe5b6001600160a01b039092166020928302919091019091015261113d565b600c546001600160a01b038381169116141561113d576040805160038082526080820190925290602082016060803883395050600a5482519293506001600160a01b0316918391506000906110e757fe5b6001600160a01b039283166020918202929092010152600b5482519116908290600190811061111257fe5b6001600160a01b039283166020918202929092010152600c5482519116908290600290811061107957fe5b92915050565b6001546001600160a01b0316331461115a57600080fd5b600154600054604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b031633146111e457600080fd5b6001600160a01b0381166111f757600080fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600054604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b606060058054806020026020016040519081016040528092919081815260200182805480156108fa576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116108dc575050505050905090565b600754600090600160a01b900460ff16611319575060006114b9565b82611326575060006114b9565b6001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061137057506001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b1561137d575060006114b9565b60006001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146113a957856113ab565b845b600c549091506001600160a01b038083169116146113cd5760009150506114b9565b60606113d98787610fcf565b6009546040805163032125b360e21b815260248101899052600481019182528351604482015283519394506000936001600160a01b0390931692630c8496cc9286928b92829160640190602080870191028083838c5b8381101561144757818101518382015260200161142f565b505050509050019350505050604080518083038186803b15801561146a57600080fd5b505afa15801561147e573d6000803e3d6000fd5b505050506040513d604081101561149457600080fd5b5051905060006114a787836012806120f6565b90506114b28161218d565b9450505050505b949350505050565b6000546001600160a01b031633146114d857600080fd5b6001600160a01b03811660009081526002602052604090205460ff16156114fe57600080fd5b60045460321161150d57600080fd5b604080516001600160a01b03831681526001602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16001600160a01b03166000818152600260205260408120805460ff191660019081179091556004805491820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055565b6009546001600160a01b031681565b6000546001600160a01b031633146115dd57600080fd5b6001600160a01b03811660009081526002602052604090205460ff1661160257600080fd5b6001600160a01b0381166000908152600260205260408120805460ff191690555b60045481101561088957816001600160a01b03166004828154811061164457fe5b6000918252602090912001546001600160a01b0316141561171d5760048054600019810190811061167157fe5b600091825260209091200154600480546001600160a01b03909216918390811061169757fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556004805460001901906116d3908261227f565b50604080516001600160a01b03841681526000602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a1610889565b600101611623565b6007546001600160a01b031681565b6000546001600160a01b0316331461174b57600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611781573d6000803e3d6000fd5b50604080518381526001600160a01b038316602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a15050565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561180157506001600160a01b0381163161113d565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561185757600080fd5b505afa15801561186b573d6000803e3d6000fd5b505050506040513d602081101561188157600080fd5b5051905061113d565b600754600160a01b900460ff1681565b6000546001600160a01b031633146118b157600080fd5b6001600160a01b0381166118f65760405162461bcd60e51b81526004018080602001828103825260338152602001806124806033913960400191505060405180910390fd5b6009546001600160a01b0316156119c957600c546009546040805163095ea7b360e01b81526001600160a01b0392831660048201526000602482018190529151929093169263095ea7b39260448083019360209383900390910190829087803b15801561196257600080fd5b505af1158015611976573d6000803e3d6000fd5b505050506040513d602081101561198c57600080fd5b50516119c95760405162461bcd60e51b815260040180806020018281038252602e8152602001806123d7602e913960400191505060405180910390fd5b600980546001600160a01b0319166001600160a01b038381169190911791829055600c546040805163095ea7b360e01b81529383166004850152600160ff1b60248501525191169163095ea7b39160448083019260209291908290030181600087803b158015611a3857600080fd5b505af1158015611a4c573d6000803e3d6000fd5b505050506040513d6020811015611a6257600080fd5b5051611a9f5760405162461bcd60e51b81526004018080602001828103825260288152602001806122fb6028913960400191505060405180910390fd5b604080516001600160a01b038316815290517f7ff3d9964d574f3c305828d1dbf08ead9c5b2889a50b02bc9ea8d93a899e5a279181900360200190a150565b6000546001600160a01b031681565b60008115611ba75760008311611b0257600080fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611b6a57853414611b655760405162461bcd60e51b815260040180806020018281038252602f815260200180612384602f913960400191505060405180910390fd5b611ba7565b3415611ba75760405162461bcd60e51b81526004018080602001828103825260318152602001806123536031913960400191505060405180910390fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611c8757604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038916916323b872dd9160648083019260209291908290030181600087803b158015611c2057600080fd5b505af1158015611c34573d6000803e3d6000fd5b505050506040513d6020811015611c4a57600080fd5b5051611c875760405162461bcd60e51b815260040180806020018281038252602181526020018061242d6021913960400191505060405180910390fd5b6060611c938887610fcf565b90506000815111611ceb576040805162461bcd60e51b815260206004820152601b60248201527f646f54726164653a20636f756c646e27742066696e6420706174680000000000604482015290519081900360640190fd5b6000611cfa88601280886121f4565b905060008111611d3b5760405162461bcd60e51b81526004018080602001828103825260348152602001806122c76034913960400191505060405180910390fd5b60006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611e455760095460405163569706eb60e01b8152602481018b9052604481018490526000606482018190526084820181905260a060048301908152865160a484015286516001600160a01b039094169363569706eb938e93899385938a93839291829160c401906020808a019102808383885b83811015611de9578181015183820152602001611dd1565b5050505090500196505050505050506020604051808303818588803b158015611e1157600080fd5b505af1158015611e25573d6000803e3d6000fd5b50505050506040513d6020811015611e3c57600080fd5b50519050611f23565b60095460405163e57738e560e01b8152602481018b9052604481018490526000606482018190526084820181905260a060048301908152865160a484015286516001600160a01b039094169363e57738e59388938f93899391928392829160c401906020808a019102808383885b83811015611ecb578181015183820152602001611eb3565b505050509050019650505050505050602060405180830381600087803b158015611ef457600080fd5b505af1158015611f08573d6000803e3d6000fd5b505050506040513d6020811015611f1e57600080fd5b505190505b81811015611f625760405162461bcd60e51b815260040180806020018281038252603281526020018061244e6032913960400191505060405180910390fd5b6001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611fc3576040516001600160a01b0388169083156108fc029084906000818181858888f19350505050158015611fbd573d6000803e3d6000fd5b5061208a565b876001600160a01b031663a9059cbb88846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561202357600080fd5b505af1158015612037573d6000803e3d6000fd5b505050506040513d602081101561204d57600080fd5b505161208a5760405162461bcd60e51b81526004018080602001828103825260288152602001806124b36028913960400191505060405180910390fd5b604080516001600160a01b038c81168252602082018c90528a8116828401526060820185905289166080820152905133917fea9415385bae08fe9f6dc457b02577166790cde83bb18cc340aac6cb81b824de919081900360a00190a25060019998505050505050505050565b60006b204fce5e3e2502611000000085111561211157600080fd5b6b204fce5e3e2502611000000084111561212a57600080fd5b828210612163576012838303111561214157600080fd5b84838303600a0a02670de0b6b3a764000085028161215b57fe5b0490506114b9565b6012828403111561217357600080fd5b84828403600a0a670de0b6b3a76400008602028161215b57fe5b60006b204fce5e3e250261100000008211156121da5760405162461bcd60e51b81526004018080602001828103825260248152602001806123b36024913960400191505060405180910390fd5b612710826008546127100302816121ed57fe5b0492915050565b60006b204fce5e3e2502611000000085111561220f57600080fd5b69d3c21bcecceda100000082111561222657600080fd5b838310612255576012848403111561223d57600080fd5b670de0b6b3a7640000858302858503600a0a0261215b565b6012838503111561226557600080fd5b828403600a0a670de0b6b3a7640000028286028161215b57fe5b8154818355818111156122a3576000838152602090206122a39181019083016122a8565b505050565b61072791905b808211156122c257600081556001016122ae565b509056fe646f54726164653a207573657220657870656374656420616d6f756e74206d7573742062652067726561746572207468616e203073657442616e636f72436f6e74726163743a2063616e206e6f7420617070726f766520746f6b656e7365744b796265724e6574776f726b3a206b796265724e6574776f726b2061646472657373206973206d697373696e67646f54726164653a206d73672076616c7565206973206e6f7420636f727265637420666f7220746f6b656e207472616465646f54726164653a206d73672076616c7565206973206e6f7420636f727265637420666f722045544820747261646576616c756541667465725265647563696e674665653a2076616c203e204d41585f51545973657442616e636f72436f6e74726163743a2063616e206e6f7420726573657420617070726f766520746f6b656e74726164653a2073726320616d6f756e74206d7573742062652067726561746572207468616e2030646f54726164653a20636f6c6c6563742073726320746f6b656e206661696c6564646f54726164653a206465737420616d6f756e74206973206c6f776572207468616e20657870656374656420616d6f756e7473657442616e636f72436f6e74726163743a2062616e636f724e6574776f726b2061646472657373206973206d697373696e67646f54726164653a207472616e73666572206261636b206465737420746f6b656e206661696c656474726164653a20646f54726164652066756e6374696f6e2072657475726e732066616c7365a265627a7a72315820b7ffe464c71fc9687d3e87770547ef43d3ec1085e6f6f772a0a502b72bb8e76864736f6c634300050b0032

Deployed Bytecode Sourcemap

165:8147:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5067:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5067:145:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;2406:456:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2406:456:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2406:456:4;-1:-1:-1;;;;;2406:456:4;;:::i;391:18:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;391:18:3;;;:::i;:::-;;;;;;;;;;;;;;;;85:27:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;85:27:4;;;:::i;:::-;;;;-1:-1:-1;;;;;85:27:4;;;;;;;;;;;;;;656:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;656:103:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;656:103:4;;;;;;;;;;;;;;;;;657:25:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;657:25:3;;;:::i;330:192:6:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;330:192:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;330:192:6;;;;;;;;;;;;;;;;;:::i;2094:306:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2094:306:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2094:306:4;-1:-1:-1;;;;;2094:306:4;;:::i;504:23:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;504:23:3;;;:::i;3914:254::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3914:254:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3914:254:3;-1:-1:-1;;;;;3914:254:3;;:::i;579:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;579:26:3;;;:::i;5218:150::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5218:150:3;;;:::i;3012:846::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;3012:846:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4847:176::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4847:176:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4847:176:3;;:::i;1074:188:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1074:188:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1074:188:4;-1:-1:-1;;;;;1074:188:4;;:::i;7518:592:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7518:592:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7518:592:3;;;;;;;;;;:::i;1836:194:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1836:194:4;;;:::i;1437:228::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1437:228:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1437:228:4;-1:-1:-1;;;;;1437:228:4;;:::i;765:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;765:101:4;;;:::i;2005:804:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2005:804:3;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2005:804:3;;;;;;;;;;;;;;;;;;;;;;:::i;2927:317:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2927:317:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2927:317:4;-1:-1:-1;;;;;2927:317:4;;:::i;416:35:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;416:35:3;;;:::i;3250:474:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3250:474:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3250:474:4;-1:-1:-1;;;;;3250:474:4;;:::i;328:27:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;328:27:3;;;:::i;627:163:6:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;627:163:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;627:163:6;;;;;;-1:-1:-1;;;;;627:163:6;;:::i;665:209:5:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;665:209:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;665:209:5;;;;;;;;;;:::i;361:24:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;361:24:3;;;:::i;4227:579::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4227:579:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4227:579:3;-1:-1:-1;;;;;4227:579:3;;:::i;59:20:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;59:20:4;;;:::i;5067:145:3:-;5115:4;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;5131:12:3;:19;;-1:-1:-1;;;;5131:19:3;-1:-1:-1;;;5131:19:3;;;5165:18;;;5146:4;5165:18;;;;;;;;;;;;;-1:-1:-1;5201:4:3;468:1:4;5067:145:3;:::o;2406:456:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;2482:17:4;;;;;;:8;:17;;;;;;;;2474:26;;;;;;-1:-1:-1;;;;;2510:17:4;;2530:5;2510:17;;;:8;:17;;;;;:25;;-1:-1:-1;;2510:25:4;;;2546:310;2567:13;:20;2563:24;;2546:310;;;2632:7;-1:-1:-1;;;;;2612:27:4;:13;2626:1;2612:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2612:16:4;:27;2608:238;;;2678:13;2692:20;;-1:-1:-1;;2692:24:4;;;2678:39;;;;;;;;;;;;;;;;2659:13;:16;;-1:-1:-1;;;;;2678:39:4;;;;2673:1;;2659:16;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;2659:58:4;-1:-1:-1;;;;;2659:58:4;;;;;;;;;;2735:13;:22;;;;;-1:-1:-1;;2735:22:4;;;:::i;:::-;-1:-1:-1;2780:28:4;;;-1:-1:-1;;;;;2780:28:4;;;;2802:5;2780:28;;;;;;;;;;;;;;;;;2826:5;;2608:238;2589:3;;2546:310;;;;2406:456;:::o;391:18:3:-;;;;:::o;85:27:4:-;;;-1:-1:-1;;;;;85:27:4;;:::o;656:103::-;703:16;738:14;731:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;731:21:4;;;;;;;;;;;;;;;;;;;;;;;656:103;:::o;657:25:3:-;;;-1:-1:-1;;;;;657:25:3;;:::o;330:192:6:-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;433:5:6;-1:-1:-1;;;;;433:14:6;;448:6;456;433:30;;;;;;;;;;;;;-1:-1:-1;;;;;433:30:6;-1:-1:-1;;;;;433:30:6;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;433:30:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;433:30:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;433:30:6;425:39;;;;;;479:36;;;-1:-1:-1;;;;;479:36:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;330:192;;;:::o;2094:306:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;2170:20:4;;;;;;:8;:20;;;;;;;;2169:21;2161:30;;;;;;2232:13;:20;328:2;-1:-1:-1;2224:46:4;;;;;;2286:30;;;-1:-1:-1;;;;;2286:30:4;;;;2311:4;2286:30;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2326:20:4;;;;;:8;:20;;;;;:27;;-1:-1:-1;;2326:27:4;2349:4;2326:27;;;;;;2363:13;27:10:-1;;23:18;;;45:23;;2363:30:4;;;;;;;-1:-1:-1;;;;;;2363:30:4;;;;;;2094:306::o;504:23:3:-;;;-1:-1:-1;;;;;504:23:3;;:::o;3914:254::-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;3997:27:3;;3989:88;;;;-1:-1:-1;;;3989:88:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4088:12;:28;;-1:-1:-1;;;;;4088:28:3;;-1:-1:-1;;;;;;4088:28:3;;;;;;;;4131:30;;;;;;;;;;;;;;;;3914:254;:::o;579:26::-;;;-1:-1:-1;;;;;579:26:3;;:::o;5218:150::-;620:10:4;5269:4:3;611:20:4;;;:8;:20;;;;;;;;603:29;;;;;;5285:12:3;:20;;-1:-1:-1;;;;5285:20:3;;;5320:19;;;5300:5;5320:19;;;;;;;;;;;;;-1:-1:-1;5357:4:3;5218:150;:::o;3012:846::-;3273:12;;3244:4;;-1:-1:-1;;;3273:12:3;;;;3265:52;;;;;-1:-1:-1;;;3265:52:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;3349:12;;-1:-1:-1;;;;;3349:12:3;3335:10;:26;3327:67;;;;;-1:-1:-1;;;3327:67:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;3424:1;3412:9;:13;3404:66;;;;-1:-1:-1;;;3404:66:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3488:29:3;;168:42:5;3488:29:3;;:63;;-1:-1:-1;;;;;;3521:30:3;;168:42:5;3521:30:3;3488:63;3480:106;;;;;-1:-1:-1;;;3480:106:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;3616:11;;-1:-1:-1;;;;;3604:23:3;;;3616:11;;3604:23;;:51;;-1:-1:-1;3644:11:3;;-1:-1:-1;;;;;3631:24:3;;;3644:11;;3631:24;3604:51;3596:94;;;;;-1:-1:-1;;;3596:94:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;3709:78;3717:8;3727:9;3738;3749:11;3762:14;3778:8;3709:7;:78::i;:::-;3701:128;;;;-1:-1:-1;;;3701:128:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3847:4:3;3012:846;;;;;;;;:::o;4847:176::-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;267:5:3;4915:7;:13;4907:50;;;;;-1:-1:-1;;;4907:50:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;4968:6;:16;;;4999:17;;;;;;;;;;;;;;;;;4847:176;:::o;1074:188:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;1150:22:4;;1142:31;;;;;;1209:12;;1188:34;;;-1:-1:-1;;;;;1209:12:4;;;1188:34;;;;;;;;;;;;1232:12;:23;;-1:-1:-1;;;;;;1232:23:4;-1:-1:-1;;;;;1232:23:4;;;;;;;;;;1074:188::o;7518:592:3:-;7634:11;;7590:20;;-1:-1:-1;;;;;7627:18:3;;;7634:11;;7627:18;7623:481;;;7705:15;;;7718:1;7705:15;;;;;;;;;;;;;17::-1;;105:10;7705:15:3;88:34:-1;-1:-1;;7744:11:3;;7734:7;;;;-1:-1:-1;;;;;;7744:11:3;;7734:7;;-1:-1:-1;7744:11:3;;7734:7;;;;-1:-1:-1;;;;;7734:21:3;;;:7;;;;;;;;;:21;7779:12;;7769:7;;7779:12;;;7769:4;;7779:12;;7769:7;;;;;;-1:-1:-1;;;;;7769:22:3;;;:7;;;;;;;;;:22;7815:9;;7805:7;;7815:9;;;7805:4;;7810:1;;7805:7;;;;;;-1:-1:-1;;;;;7805:19:3;;;:7;;;;;;;;;;;:19;7838:11;;7623:481;7878:11;;-1:-1:-1;;;;;7870:19:3;;;7878:11;;7870:19;7866:238;;;7949:15;;;7962:1;7949:15;;;;;;;;;;;;;17::-1;;105:10;7949:15:3;88:34:-1;-1:-1;;7988:9:3;;7978:7;;;;-1:-1:-1;;;;;;7988:9:3;;7978:7;;-1:-1:-1;7988:9:3;;7978:7;;;;-1:-1:-1;;;;;7978:19:3;;;:7;;;;;;;;;:19;8021:12;;8011:7;;8021:12;;;8011:4;;8021:12;;8011:7;;;;;;-1:-1:-1;;;;;8011:22:3;;;:7;;;;;;;;;:22;8057:11;;8047:7;;8057:11;;;8047:4;;8052:1;;8047:7;;;;;7866:238;7518:592;;;;:::o;1836:194:4:-;1883:12;;-1:-1:-1;;;;;1883:12:4;1899:10;1883:26;1875:35;;;;;;1938:12;;;1952:5;1925:33;;;-1:-1:-1;;;;;1938:12:4;;;1925:33;;1952:5;;;;1925:33;;;;;;;;;;;;;;;;1976:12;;;;1968:20;;-1:-1:-1;;;;;;1968:20:4;;;-1:-1:-1;;;;;1976:12:4;;1968:20;;;;1998:25;;;1836:194::o;1437:228::-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;1520:22:4;;1512:31;;;;;;1558:30;;;-1:-1:-1;;;;;1558:30:4;;;;;;;;;;;;;;;1626:5;;1603:29;;;-1:-1:-1;;;;;1603:29:4;;;;;1626:5;;;1603:29;;;;;;;;;;;;;;;;1642:5;:16;;-1:-1:-1;;;;;;1642:16:4;-1:-1:-1;;;;;1642:16:4;;;;;;;;;;1437:228::o;765:101::-;811:16;846:13;839:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;839:20:4;;;;;;;;;;;;;;;;;;;;;;765:101;:::o;2005:804:3:-;2117:12;;2096:4;;-1:-1:-1;;;2117:12:3;;;;2112:32;;-1:-1:-1;2140:1:3;2133:8;;2112:32;2157:11;2153:30;;-1:-1:-1;2179:1:3;2172:8;;2153:30;-1:-1:-1;;;;;2197:24:3;;168:42:5;2197:24:3;;;;:53;;-1:-1:-1;;;;;;2225:25:3;;168:42:5;2225:25:3;;2197:53;2193:126;;;-1:-1:-1;2273:1:3;2266:8;;2193:126;2328:12;-1:-1:-1;;;;;2343:24:3;;168:42:5;2343:24:3;:37;;2377:3;2343:37;;;2370:4;2343:37;2403:11;;2328:52;;-1:-1:-1;;;;;;2394:20:3;;;2403:11;;2394:20;2390:39;;2425:1;2418:8;;;;;2390:39;2456:20;2479:28;2497:3;2502:4;2479:17;:28::i;:::-;2554:13;;:43;;;-1:-1:-1;;;2554:43:3;;;;;;;;;;;;;;;;;;;;;;2456:51;;-1:-1:-1;2518:12:3;;-1:-1:-1;;;;;2554:13:3;;;;:29;;2456:51;;2590:6;;2554:43;;;;;;;;;;;;;;2518:12;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2554:43:3;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2554:43:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2554:43:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2554:43:3;;-1:-1:-1;2655:9:3;2667:68;2683:6;2554:43;319:2;;2667:15;:68::i;:::-;2655:80;;2753:27;2775:4;2753:21;:27::i;:::-;2746:34;-1:-1:-1;;;;;2005:804:3;;;;;;;:::o;2927:317:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;3005:22:4;;;;;;:9;:22;;;;;;;;3004:23;2996:32;;;;;;3069:14;:21;328:2;-1:-1:-1;3061:47:4;;;;;;3124:32;;;-1:-1:-1;;;;;3124:32:4;;;;3151:4;3124:32;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3166:22:4;;;;;:9;:22;;;;;:29;;-1:-1:-1;;3166:29:4;3191:4;3166:29;;;;;;3205:14;27:10:-1;;23:18;;;45:23;;3205:32:4;;;;;;;-1:-1:-1;;;;;;3205:32:4;;;;;;2927:317::o;416:35:3:-;;;-1:-1:-1;;;;;416:35:3;;:::o;3250:474:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;3328:19:4;;;;;;:9;:19;;;;;;;;3320:28;;;;;;-1:-1:-1;;;;;3358:19:4;;3380:5;3358:19;;;:9;:19;;;;;:27;;-1:-1:-1;;3358:27:4;;;3396:322;3417:14;:21;3413:25;;3396:322;;;3484:8;-1:-1:-1;;;;;3463:29:4;:14;3478:1;3463:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3463:17:4;:29;3459:249;;;3532:14;3547:21;;-1:-1:-1;;3547:25:4;;;3532:41;;;;;;;;;;;;;;;;3512:14;:17;;-1:-1:-1;;;;;3532:41:4;;;;3527:1;;3512:17;;;;;;;;;;;;;;;:61;;-1:-1:-1;;;;;;3512:61:4;-1:-1:-1;;;;;3512:61:4;;;;;;;;;;3591:14;:26;;-1:-1:-1;;3591:26:4;;;;;;:::i;:::-;-1:-1:-1;3640:30:4;;;-1:-1:-1;;;;;3640:30:4;;;;3664:5;3640:30;;;;;;;;;;;;;;;;;3688:5;;3459:249;3440:3;;3396:322;;328:27:3;;;-1:-1:-1;;;;;328:27:3;;:::o;627:163:6:-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;716:23:6;;-1:-1:-1;;;;;716:15:6;;;:23;;;;;732:6;;716:23;;;;732:6;716:15;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;754:29:6;;;;;;-1:-1:-1;;;;;754:29:6;;;;;;;;;;;;;;;;;;;627:163;;:::o;665:209:5:-;733:4;-1:-1:-1;;;;;753:26:5;;168:42;753:26;749:118;;;-1:-1:-1;;;;;;800:12:5;;;793:19;;749:118;846:5;-1:-1:-1;;;;;846:15:5;;862:4;846:21;;;;;;;;;;;;;-1:-1:-1;;;;;846:21:5;-1:-1:-1;;;;;846:21:5;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;846:21:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;846:21:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;846:21:5;;-1:-1:-1;839:28:5;;361:24:3;;;-1:-1:-1;;;361:24:3;;;;;:::o;4227:579::-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;4313:28:3;;4305:92;;;;-1:-1:-1;;;4305:92:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4420:13;;-1:-1:-1;;;;;4420:13:3;4412:36;4408:172;;4472:11;;4500:13;;4472:46;;;-1:-1:-1;;;4472:46:3;;-1:-1:-1;;;;;4500:13:3;;;4472:46;;;;:11;:46;;;;;;;;:11;;;;;:19;;:46;;;;;;;;;;;;;;;;:11;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;4472:46:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4472:46:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4472:46:3;4464:105;;;;-1:-1:-1;;;4464:105:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4589:13;:46;;-1:-1:-1;;;;;;4589:46:3;-1:-1:-1;;;;;4589:46:3;;;;;;;;;;;4653:11;;:53;;;-1:-1:-1;;;4653:53:3;;4681:13;;;4653:53;;;;-1:-1:-1;;;4653:53:3;;;;;:11;;;:19;;:53;;;;;;;;;;;;;;-1:-1:-1;4653:11:3;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;4653:53:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4653:53:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4653:53:3;4645:106;;;;-1:-1:-1;;;4645:106:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4767:32;;;-1:-1:-1;;;;;4767:32:3;;;;;;;;;;;;;;;4227:579;:::o;59:20:4:-;;;-1:-1:-1;;;;;59:20:4;;:::o;5374:2138:3:-;5594:4;5680:8;5676:324;;;5729:1;5712:14;:18;5704:27;;;;;;-1:-1:-1;;;;;5749:29:3;;168:42:5;5749:29:3;5745:244;;;5817:9;5804;:22;5796:82;;;;-1:-1:-1;;;5796:82:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5745:244;;;5921:9;:14;5913:76;;;;-1:-1:-1;;;5913:76:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6014:29:3;;168:42:5;6014:29:3;6010:202;;6104:59;;;-1:-1:-1;;;6104:59:3;;6126:10;6104:59;;;;6146:4;6104:59;;;;;;;;;;;;-1:-1:-1;;;;;6104:21:3;;;;;:59;;;;;;;;;;;;;;-1:-1:-1;6104:21:3;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;6104:59:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6104:59:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6104:59:3;6096:105;;;;-1:-1:-1;;;6096:105:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6222:20;6245:38;6263:8;6273:9;6245:17;:38::i;:::-;6222:61;;6315:1;6301:4;:11;:15;6293:55;;;;;-1:-1:-1;;;6293:55:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;6405:27;6435:73;6446:9;319:2;;6493:14;6435:10;:73::i;:::-;6405:103;;6551:1;6526:22;:26;6518:91;;;;-1:-1:-1;;;6518:91:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6619:15;-1:-1:-1;;;;;6649:29:3;;168:42:5;6649:29:3;6645:298;;;6707:13;;:95;;-1:-1:-1;;;6707:95:3;;;;;;;;;;;;;;:13;:95;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6707:13:3;;;;:22;;6736:9;;6747:4;;6736:9;;6764:22;;6707:13;;:95;;;;;;;;;;;;;;;:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6707:95:3;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6707:95:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6707:95:3;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6707:95:3;;-1:-1:-1;6645:298:3;;;6846:13;;:86;;-1:-1:-1;;;6846:86:3;;;;;;;;;;;;;;:13;:86;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6846:13:3;;;;:30;;6877:4;;6883:9;;6894:22;;6846:13;;;;:86;;;;;;;;;;;;;;:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6846:86:3;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6846:86:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6846:86:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6846:86:3;;-1:-1:-1;6645:298:3;6975:22;6961:10;:36;;6953:99;;;;-1:-1:-1;;;6953:99:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7118:30:3;;168:42:5;7118:30:3;7114:244;;;7164:44;;-1:-1:-1;;;;;7164:20:3;;;:44;;;;;7185:22;;7164:44;;;;7185:22;7164:20;:44;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7164:44:3;7114:244;;;7247:9;-1:-1:-1;;;;;7247:18:3;;7266:11;7279:22;7247:55;;;;;;;;;;;;;-1:-1:-1;;;;;7247:55:3;-1:-1:-1;;;;;7247:55:3;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7247:55:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7247:55:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7247:55:3;7239:108;;;;-1:-1:-1;;;7239:108:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7373:111;;;-1:-1:-1;;;;;7373:111:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7386:10;;7373:111;;;;;;;;;;-1:-1:-1;7501:4:3;;5374:2138;-1:-1:-1;;;;;;;;;5374:2138:3:o;3329:614:5:-;3453:4;304:6;3481:9;:20;;3473:29;;;;;;304:6;3520:10;:21;;3512:30;;;;;;3572:11;3557;:26;3553:384;;458:2;3622:11;3608;:25;3607:43;;3599:52;;;;;;3737:9;3721:11;3707;:25;3700:2;:33;3699:47;254:6;3673:10;:22;:74;;;;;;3665:83;;;;3553:384;458:2;3802:11;3788;:25;3787:43;;3779:52;;;;;;3916:9;3900:11;3886;:25;3879:2;:33;254:6;3853:10;:22;:60;:72;;;;8116:194:3;8179:4;304:6:5;8203:3:3;:14;;8195:63;;;;-1:-1:-1;;;8195:63:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;267:5;8293:3;8283:6;;267:5;8277:12;8276:20;8275:28;;;;;;;8116:194;-1:-1:-1;;8116:194:3:o;1526:558:5:-;1628:4;304:6;1652;:17;;1644:26;;;;;;368:17;1688:16;;;1680:25;;;;;;1735:11;1720;:26;1716:362;;458:2;1785:11;1771;:25;1770:43;;1762:52;;;;;;254:6;1836:13;;;1858:25;;;1853:2;:31;1836:49;1835:63;;1716:362;458:2;1952:11;1938;:25;1937:43;;1929:52;;;;;;2053:11;2039;:25;2034:2;:31;254:6;2021:45;2012:4;2003:6;:13;2002:65;;;;165:8147:3;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://b7ffe464c71fc9687d3e87770547ef43d3ec1085e6f6f772a0a502b72bb8e768

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.