ETH Price: $3,335.56 (-3.74%)
Gas: 2 Gwei

Contract

0xcF76b605484Cd4bD46237c05B7De98d538ff44AE
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Token119671472021-03-03 19:15:541239 days ago1614798954IN
0xcF76b605...538ff44AE
0 ETH0.01791004156
Withdraw Ether119671462021-03-03 19:15:521239 days ago1614798952IN
0xcF76b605...538ff44AE
0 ETH0.00529937163.9
Disable Trade119671112021-03-03 19:07:031239 days ago1614798423IN
0xcF76b605...538ff44AE
0 ETH0.00428875146
Enable Trade114588132020-12-15 16:48:061317 days ago1608050886IN
0xcF76b605...538ff44AE
0 ETH0.0022981179
Transfer114584672020-12-15 15:31:151317 days ago1608046275IN
0xcF76b605...538ff44AE
50 ETH0.0020685292
Withdraw Ether109667872020-09-30 23:41:011393 days ago1601509261IN
0xcF76b605...538ff44AE
0 ETH0.0024563976
Withdraw Token109667782020-09-30 23:39:381393 days ago1601509178IN
0xcF76b605...538ff44AE
0 ETH0.008725476
Disable Trade109667632020-09-30 23:35:181393 days ago1601508918IN
0xcF76b605...538ff44AE
0 ETH0.0022031275
Enable Trade107609852020-08-30 8:00:341424 days ago1598774434IN
0xcF76b605...538ff44AE
0 ETH0.00878518302
Withdraw Ether107609532020-08-30 7:53:061424 days ago1598773986IN
0xcF76b605...538ff44AE
0 ETH0.00904652280
Disable Trade107609462020-08-30 7:50:491424 days ago1598773849IN
0xcF76b605...538ff44AE
0 ETH0.00807812275.00000023
Enable Trade107509772020-08-28 19:01:331426 days ago1598641293IN
0xcF76b605...538ff44AE
0 ETH0.002618190
Withdraw Token107509402020-08-28 18:53:081426 days ago1598640788IN
0xcF76b605...538ff44AE
0 ETH0.0120607290
Withdraw Ether107509032020-08-28 18:45:031426 days ago1598640303IN
0xcF76b605...538ff44AE
0 ETH0.00387996120
Disable Trade107508852020-08-28 18:41:071426 days ago1598640067IN
0xcF76b605...538ff44AE
0 ETH0.0047160
Enable Trade107508722020-08-28 18:37:561426 days ago1598639876IN
0xcF76b605...538ff44AE
0 ETH0.002909100
Withdraw Ether107508162020-08-28 18:28:311426 days ago1598639311IN
0xcF76b605...538ff44AE
0 ETH0.00420017130
Disable Trade107507962020-08-28 18:23:341426 days ago1598639014IN
0xcF76b605...538ff44AE
0 ETH0.00381875130
Enable Trade107267202020-08-25 1:39:541429 days ago1598319594IN
0xcF76b605...538ff44AE
0 ETH0.002036370
Withdraw Ether107266212020-08-25 1:17:431429 days ago1598318263IN
0xcF76b605...538ff44AE
0 ETH0.0022616370
Disable Trade107265872020-08-25 1:11:141429 days ago1598317874IN
0xcF76b605...538ff44AE
0 ETH0.0020562570
Enable Trade106328892020-08-10 15:04:521444 days ago1597071892IN
0xcF76b605...538ff44AE
0 ETH0.00369443127
Withdraw Token106328442020-08-10 14:54:331444 days ago1597071273IN
0xcF76b605...538ff44AE
0 ETH0.01473824110
Disable Trade106327832020-08-10 14:40:451444 days ago1597070445IN
0xcF76b605...538ff44AE
0 ETH0.00331937113
Enable Trade104843122020-07-18 15:39:241467 days ago1595086764IN
0xcF76b605...538ff44AE
0 ETH0.0018908565
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
119671462021-03-03 19:15:521239 days ago1614798952
0xcF76b605...538ff44AE
32.35524124 ETH
119645552021-03-03 9:50:261239 days ago1614765026
0xcF76b605...538ff44AE
4.995 ETH
119644502021-03-03 9:24:161239 days ago1614763456
0xcF76b605...538ff44AE
3.50994282 ETH
119634572021-03-03 5:41:161239 days ago1614750076
0xcF76b605...538ff44AE
2.86727515 ETH
119609192021-03-02 20:09:101240 days ago1614715750
0xcF76b605...538ff44AE
3.06350234 ETH
119577152021-03-02 8:21:381240 days ago1614673298
0xcF76b605...538ff44AE
4.995 ETH
119572872021-03-02 6:49:511240 days ago1614667791
0xcF76b605...538ff44AE
2.01499485 ETH
119560272021-03-02 2:10:381240 days ago1614651038
0xcF76b605...538ff44AE
3.90046501 ETH
119536112021-03-01 17:14:561241 days ago1614618896
0xcF76b605...538ff44AE
0.0999 ETH
119466842021-02-28 15:36:031242 days ago1614526563
0xcF76b605...538ff44AE
3.09520793 ETH
119444612021-02-28 7:16:531242 days ago1614496613
0xcF76b605...538ff44AE
4.991 ETH
119438212021-02-28 4:54:521242 days ago1614488092
0xcF76b605...538ff44AE
4.97747308 ETH
119336002021-02-26 15:15:561244 days ago1614352556
0xcF76b605...538ff44AE
5.9892 ETH
119304792021-02-26 3:44:541244 days ago1614311094
0xcF76b605...538ff44AE
3.83678587 ETH
119198412021-02-24 12:30:291246 days ago1614169829
0xcF76b605...538ff44AE
2.51591301 ETH
119153142021-02-23 19:36:131247 days ago1614108973
0xcF76b605...538ff44AE
3.13999471 ETH
119143782021-02-23 16:23:441247 days ago1614097424
0xcF76b605...538ff44AE
3.4635203 ETH
119140702021-02-23 15:19:251247 days ago1614093565
0xcF76b605...538ff44AE
4.2129954 ETH
119129052021-02-23 11:05:371247 days ago1614078337
0xcF76b605...538ff44AE
4.38448095 ETH
119076502021-02-22 15:30:161248 days ago1614007816
0xcF76b605...538ff44AE
6.45108628 ETH
119072372021-02-22 13:56:421248 days ago1614002202
0xcF76b605...538ff44AE
5.18678839 ETH
119047652021-02-22 4:46:541248 days ago1613969214
0xcF76b605...538ff44AE
4.25737764 ETH
119047572021-02-22 4:44:361248 days ago1613969076
0xcF76b605...538ff44AE
7.992 ETH
119029482021-02-21 22:06:211249 days ago1613945181
0xcF76b605...538ff44AE
4.48446672 ETH
119027062021-02-21 21:16:441249 days ago1613942204
0xcF76b605...538ff44AE
3.11836096 ETH
View All Internal Transactions
Loading...
Loading

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

Contract Name:
KyberReserve

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-12-12
*/

// File: contracts/ERC20Interface.sol

pragma solidity 0.4.18;


// https://github.com/ethereum/EIPs/issues/20
interface ERC20 {
    function totalSupply() public view returns (uint supply);
    function balanceOf(address _owner) public view returns (uint balance);
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);
    function approve(address _spender, uint _value) public returns (bool success);
    function allowance(address _owner, address _spender) public view returns (uint remaining);
    function decimals() public view returns(uint digits);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

// File: contracts/Utils.sol

pragma solidity 0.4.18;



/// @title Kyber constants contract
contract Utils {

    ERC20 constant internal ETH_TOKEN_ADDRESS = ERC20(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);
    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;

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

    function getDecimals(ERC20 token) internal view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS) return ETH_DECIMALS; // save storage access
        uint tokenDecimals = decimals[token];
        // technically, there might be token with decimals 0
        // 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
    }
}

// File: contracts/PermissionGroups.sol

pragma solidity 0.4.18;


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;

    function PermissionGroups() 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[]) {
        return operatorsGroup;
    }

    function getAlerters () external view returns(address[]) {
        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));
        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));
        TransferAdminPending(newAdmin);
        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);
        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);

        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--;
                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);

        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;
                OperatorAdded(operator, false);
                break;
            }
        }
    }
}

// File: contracts/Withdrawable.sol

pragma solidity 0.4.18;




/**
 * @title Contracts that should be able to recover tokens or ethers
 * @author Ilan Doron
 * @dev This allows to recover any tokens or Ethers received in a contract.
 * This will prevent any accidental loss of tokens.
 */
contract Withdrawable is PermissionGroups {

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

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

    event EtherWithdraw(uint amount, address sendTo);

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

// File: contracts/ConversionRatesInterface.sol

pragma solidity 0.4.18;



interface ConversionRatesInterface {

    function recordImbalance(
        ERC20 token,
        int buyAmount,
        uint rateUpdateBlock,
        uint currentBlock
    )
        public;

    function getRate(ERC20 token, uint currentBlockNumber, bool buy, uint qty) public view returns(uint);
}

// File: contracts/SanityRatesInterface.sol

pragma solidity 0.4.18;


interface SanityRatesInterface {
    function getSanityRate(ERC20 src, ERC20 dest) public view returns(uint);
}

// File: contracts/KyberReserveInterface.sol

pragma solidity 0.4.18;


/// @title Kyber Reserve contract
interface KyberReserveInterface {

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

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint);
}

// File: contracts/reserves/KyberReserve.sol

pragma solidity 0.4.18;








/// @title Kyber Reserve contract
contract KyberReserve is KyberReserveInterface, Withdrawable, Utils {

    address public kyberNetwork;
    bool public tradeEnabled;
    ConversionRatesInterface public conversionRatesContract;
    SanityRatesInterface public sanityRatesContract;
    mapping(bytes32=>bool) public approvedWithdrawAddresses; // sha3(token,address)=>bool
    mapping(address=>address) public tokenWallet;

    function KyberReserve(address _kyberNetwork, ConversionRatesInterface _ratesContract, address _admin) public {
        require(_admin != address(0));
        require(_ratesContract != address(0));
        require(_kyberNetwork != address(0));
        kyberNetwork = _kyberNetwork;
        conversionRatesContract = _ratesContract;
        admin = _admin;
        tradeEnabled = true;
    }

    event DepositToken(ERC20 token, uint amount);

    function() public payable {
        DepositToken(ETH_TOKEN_ADDRESS, msg.value);
    }

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

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool)
    {
        require(tradeEnabled);
        require(msg.sender == kyberNetwork);

        require(doTrade(srcToken, srcAmount, destToken, destAddress, conversionRate, validate));

        return true;
    }

    event TradeEnabled(bool enable);

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

        return true;
    }

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

        return true;
    }

    event WithdrawAddressApproved(ERC20 token, address addr, bool approve);

    function approveWithdrawAddress(ERC20 token, address addr, bool approve) public onlyAdmin {
        approvedWithdrawAddresses[keccak256(token, addr)] = approve;
        WithdrawAddressApproved(token, addr, approve);

        setDecimals(token);
        if ((tokenWallet[token] == address(0x0)) && (token != ETH_TOKEN_ADDRESS)) {
            tokenWallet[token] = this; // by default
            require(token.approve(this, 2 ** 255));
        }
    }

    event NewTokenWallet(ERC20 token, address wallet);

    function setTokenWallet(ERC20 token, address wallet) public onlyAdmin {
        require(wallet != address(0x0));
        tokenWallet[token] = wallet;
        NewTokenWallet(token, wallet);
    }

    event WithdrawFunds(ERC20 token, uint amount, address destination);

    function withdraw(ERC20 token, uint amount, address destination) public onlyOperator returns(bool) {
        require(approvedWithdrawAddresses[keccak256(token, destination)]);

        if (token == ETH_TOKEN_ADDRESS) {
            destination.transfer(amount);
        } else {
            require(token.transferFrom(tokenWallet[token], destination, amount));
        }

        WithdrawFunds(token, amount, destination);

        return true;
    }

    event SetContractAddresses(address network, address rate, address sanity);

    function setContracts(
        address _kyberNetwork,
        ConversionRatesInterface _conversionRates,
        SanityRatesInterface _sanityRates
    )
        public
        onlyAdmin
    {
        require(_kyberNetwork != address(0));
        require(_conversionRates != address(0));

        kyberNetwork = _kyberNetwork;
        conversionRatesContract = _conversionRates;
        sanityRatesContract = _sanityRates;

        SetContractAddresses(kyberNetwork, conversionRatesContract, sanityRatesContract);
    }

    ////////////////////////////////////////////////////////////////////////////
    /// status functions ///////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    function getBalance(ERC20 token) public view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS)
            return this.balance;
        else {
            address wallet = tokenWallet[token];
            uint balanceOfWallet = token.balanceOf(wallet);
            uint allowanceOfWallet = token.allowance(wallet, this);

            return (balanceOfWallet < allowanceOfWallet) ? balanceOfWallet : allowanceOfWallet;
        }
    }

    function getDestQty(ERC20 src, ERC20 dest, uint srcQty, uint rate) public view returns(uint) {
        uint dstDecimals = getDecimals(dest);
        uint srcDecimals = getDecimals(src);

        return calcDstQty(srcQty, srcDecimals, dstDecimals, rate);
    }

    function getSrcQty(ERC20 src, ERC20 dest, uint dstQty, uint rate) public view returns(uint) {
        uint dstDecimals = getDecimals(dest);
        uint srcDecimals = getDecimals(src);

        return calcSrcQty(dstQty, srcDecimals, dstDecimals, rate);
    }

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint) {
        ERC20 token;
        bool  isBuy;

        if (!tradeEnabled) return 0;

        if (ETH_TOKEN_ADDRESS == src) {
            isBuy = true;
            token = dest;
        } else if (ETH_TOKEN_ADDRESS == dest) {
            isBuy = false;
            token = src;
        } else {
            return 0; // pair is not listed
        }

        uint rate = conversionRatesContract.getRate(token, blockNumber, isBuy, srcQty);
        uint destQty = getDestQty(src, dest, srcQty, rate);

        if (getBalance(dest) < destQty) return 0;

        if (sanityRatesContract != address(0)) {
            uint sanityRate = sanityRatesContract.getSanityRate(src, dest);
            if (rate > sanityRate) return 0;
        }

        return rate;
    }

    /// @dev do a trade
    /// @param srcToken Src token
    /// @param srcAmount Amount of src token
    /// @param destToken Destination token
    /// @param destAddress Destination address to send tokens to
    /// @param validate If true, additional validations are applicable
    /// @return true iff trade is successful
    function doTrade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address 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);
            else
                require(msg.value == 0);
        }

        uint destAmount = getDestQty(srcToken, destToken, srcAmount, conversionRate);
        // sanity check
        require(destAmount > 0);

        // add to imbalance
        ERC20 token;
        int tradeAmount;
        if (srcToken == ETH_TOKEN_ADDRESS) {
            tradeAmount = int(destAmount);
            token = destToken;
        } else {
            tradeAmount = -1 * int(srcAmount);
            token = srcToken;
        }

        conversionRatesContract.recordImbalance(
            token,
            tradeAmount,
            0,
            block.number
        );

        // collect src tokens
        if (srcToken != ETH_TOKEN_ADDRESS) {
            require(srcToken.transferFrom(msg.sender, tokenWallet[srcToken], srcAmount));
        }

        // send dest tokens
        if (destToken == ETH_TOKEN_ADDRESS) {
            destAddress.transfer(destAmount);
        } else {
            require(destToken.transferFrom(tokenWallet[destToken], destAddress, destAmount));
        }

        TradeExecute(msg.sender, srcToken, srcAmount, destToken, destAmount, destAddress);

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"enableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"wallet","type":"address"}],"name":"setTokenWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sanityRatesContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"addr","type":"address"},{"name":"approve","type":"bool"}],"name":"approveWithdrawAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"destination","type":"address"}],"name":"withdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"srcToken","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"destToken","type":"address"},{"name":"destAddress","type":"address"},{"name":"conversionRate","type":"uint256"},{"name":"validate","type":"bool"}],"name":"trade","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAlerters","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"},{"name":"blockNumber","type":"uint256"}],"name":"getConversionRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"dstQty","type":"uint256"},{"name":"rate","type":"uint256"}],"name":"getSrcQty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kyberNetwork","type":"address"},{"name":"_conversionRates","type":"address"},{"name":"_sanityRates","type":"address"}],"name":"setContracts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetwork","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"conversionRatesContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradeEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"approvedWithdrawAddresses","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"},{"name":"rate","type":"uint256"}],"name":"getDestQty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_kyberNetwork","type":"address"},{"name":"_ratesContract","type":"address"},{"name":"_admin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"DepositToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"origin","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"srcAmount","type":"uint256"},{"indexed":false,"name":"destToken","type":"address"},{"indexed":false,"name":"destAmount","type":"uint256"},{"indexed":false,"name":"destAddress","type":"address"}],"name":"TradeExecute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"enable","type":"bool"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"approve","type":"bool"}],"name":"WithdrawAddressApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"wallet","type":"address"}],"name":"NewTokenWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"destination","type":"address"}],"name":"WithdrawFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"network","type":"address"},{"indexed":false,"name":"rate","type":"address"},{"indexed":false,"name":"sanity","type":"address"}],"name":"SetContractAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAdmin","type":"address"},{"indexed":false,"name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAlerter","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"AlerterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOperator","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"}]

Deployed Bytecode

0x6060604052600436106101655763ffffffff60e060020a60003504166299d38681146101b957806301a12fd3146101e05780631bc7bfec14610201578063267822471461022657806327a099d8146102555780633ccdbb28146102bb578063408ee7fe146102e457806347e6924f14610303578063546dc71c1461031657806369328dec146103405780636940030f146103695780636cf698111461037c57806375829def146103a857806377f50f97146103c75780637acc8678146103da5780637c423f54146103f95780637cd442721461040c5780639870d7fe14610449578063a7fca95314610468578063a80cbac614610493578063ac8a584a146104b2578063b3066d49146104d1578063b78b842d146104fc578063ce56c4541461050f578063d5847d3314610531578063d621e81314610544578063d7b7024d14610557578063f851a4401461056d578063f8b2cb4f14610580578063fa64dffa1461059f575b7f2d0c0a8842b9944ece1495eb61121621b5e36bd6af3bba0318c695f525aef79f60008051602061204983398151915234604051600160a060020a03909216825260208201526040908101905180910390a1005b34156101c457600080fd5b6101cc6105ca565b604051901515815260200160405180910390f35b34156101eb57600080fd5b6101ff600160a060020a0360043516610658565b005b341561020c57600080fd5b6101ff600160a060020a03600435811690602435166107c8565b341561023157600080fd5b610239610874565b604051600160a060020a03909116815260200160405180910390f35b341561026057600080fd5b610268610883565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102a757808201518382015260200161028f565b505050509050019250505060405180910390f35b34156102c657600080fd5b6101ff600160a060020a0360043581169060243590604435166108eb565b34156102ef57600080fd5b6101ff600160a060020a03600435166109e2565b341561030e57600080fd5b610239610ade565b341561032157600080fd5b6101ff600160a060020a03600435811690602435166044351515610aed565b341561034b57600080fd5b6101cc600160a060020a036004358116906024359060443516610cd7565b341561037457600080fd5b6101cc610eb0565b6101cc600160a060020a03600435811690602435906044358116906064351660843560a4351515610f31565b34156103b357600080fd5b6101ff600160a060020a0360043516610f9e565b34156103d257600080fd5b6101ff611039565b34156103e557600080fd5b6101ff600160a060020a03600435166110d3565b341561040457600080fd5b6102686111b5565b341561041757600080fd5b610437600160a060020a036004358116906024351660443560643561121b565b60405190815260200160405180910390f35b341561045457600080fd5b6101ff600160a060020a0360043516611406565b341561047357600080fd5b610437600160a060020a03600435811690602435166044356064356114d6565b341561049e57600080fd5b610239600160a060020a0360043516611508565b34156104bd57600080fd5b6101ff600160a060020a0360043516611523565b34156104dc57600080fd5b6101ff600160a060020a036004358116906024358116906044351661168f565b341561050757600080fd5b610239611773565b341561051a57600080fd5b6101ff600435600160a060020a0360243516611782565b341561053c57600080fd5b610239611815565b341561054f57600080fd5b6101cc611824565b341561056257600080fd5b6101cc600435611845565b341561057857600080fd5b61023961185a565b341561058b57600080fd5b610437600160a060020a0360043516611869565b34156105aa57600080fd5b610437600160a060020a03600435811690602435166044356064356119bd565b6000805433600160a060020a039081169116146105e657600080fd5b6007805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356001604051901515815260200160405180910390a15060015b90565b6000805433600160a060020a0390811691161461067457600080fd5b600160a060020a03821660009081526003602052604090205460ff16151561069b57600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156107c45781600160a060020a03166005828154811015156106e057fe5b600091825260209091200154600160a060020a031614156107bc5760058054600019810190811061070d57fe5b60009182526020909120015460058054600160a060020a03909216918390811061073357fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600580549061076f906000198301611ff4565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a16107c4565b6001016106bd565b5050565b60005433600160a060020a039081169116146107e357600080fd5b600160a060020a03811615156107f857600080fd5b600160a060020a038281166000908152600b6020526040908190208054600160a060020a031916928416929092179091557f81995c7b922889ac0a81e41866106d4046268ea3a9abaae9f9e080a6ce36ee7d908390839051600160a060020a039283168152911660208201526040908101905180910390a15050565b600154600160a060020a031681565b61088b612018565b60048054806020026020016040519081016040528092919081815260200182805480156108e157602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116108c3575b5050505050905090565b60005433600160a060020a0390811691161461090657600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561096357600080fd5b6102c65a03f1151561097457600080fd5b50505060405180519050151561098957600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b60005433600160a060020a039081169116146109fd57600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610a2357600080fd5b60055460329010610a3357600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610ab28382611ff4565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b600954600160a060020a031681565b60005433600160a060020a03908116911614610b0857600080fd5b80600a600085856040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040908101600020805460ff1916921515929092179091557fd5fd5351efae1f4bb760079da9f0ff9589e2c3e216337ca9d39cdff573b245c49084908490849051600160a060020a0393841681529190921660208201529015156040808301919091526060909101905180910390a1610bc7836119e4565b600160a060020a038381166000908152600b602052604090205416158015610c065750600160a060020a03831660008051602061204983398151915214155b15610cd257600160a060020a038381166000818152600b60205260408082208054600160a060020a03191630958616179055919263095ea7b39290917f800000000000000000000000000000000000000000000000000000000000000091516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610cac57600080fd5b6102c65a03f11515610cbd57600080fd5b505050604051805190501515610cd257600080fd5b505050565b600160a060020a03331660009081526002602052604081205460ff161515610cfe57600080fd5b600a600085846040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040016000205460ff161515610d5957600080fd5b600160a060020a0384166000805160206120498339815191521415610dae57600160a060020a03821683156108fc0284604051600060405180830381858888f193505050501515610da957600080fd5b610e52565b600160a060020a038085166000818152600b60205260408082205492936323b872dd9316918691889190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610e2c57600080fd5b6102c65a03f11515610e3d57600080fd5b505050604051805190501515610e5257600080fd5b7fb67719fc33c1f17d31bf3a698690d62066b1e0bae28fcd3c56cf2c015c2863d6848484604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a15060019392505050565b600160a060020a03331660009081526003602052604081205460ff161515610ed757600080fd5b6007805474ff0000000000000000000000000000000000000000191690557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356000604051901515815260200160405180910390a150600190565b60075460009074010000000000000000000000000000000000000000900460ff161515610f5d57600080fd5b60075433600160a060020a03908116911614610f7857600080fd5b610f86878787878787611aa1565b1515610f9157600080fd5b5060019695505050505050565b60005433600160a060020a03908116911614610fb957600080fd5b600160a060020a0381161515610fce57600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a0390811691161461105457600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60005433600160a060020a039081169116146110ee57600080fd5b600160a060020a038116151561110357600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b6111bd612018565b60058054806020026020016040519081016040528092919081815260200182805480156108e157602002820191906000526020600020908154600160a060020a031681526001909101906020018083116108c3575050505050905090565b600080600080600080600760149054906101000a900460ff16151561124357600095506113f9565b600080516020612049833981519152600160a060020a038b16141561126e57600193508894506112a2565b600080516020612049833981519152600160a060020a038a16141561129957600093508994506112a2565b600095506113f9565b600854600160a060020a031663b8e9c22e8689878c60006040516020015260405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252151560448301526064820152608401602060405180830381600087803b151561131257600080fd5b6102c65a03f1151561132357600080fd5b50505060405180519050925061133b8a8a8a866119bd565b9150816113478a611869565b101561135657600095506113f9565b600954600160a060020a0316156113f557600954600160a060020a031663a58092b78b8b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156113c857600080fd5b6102c65a03f115156113d957600080fd5b5050506040518051915050808311156113f557600095506113f9565b8295505b5050505050949350505050565b60005433600160a060020a0390811691161461142157600080fd5b600160a060020a03811660009081526002602052604090205460ff161561144757600080fd5b6004546032901061145757600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610ab28382611ff4565b60008060006114e486611df6565b91506114ef87611df6565b90506114fd85828487611eb4565b979650505050505050565b600b60205260009081526040902054600160a060020a031681565b6000805433600160a060020a0390811691161461153f57600080fd5b600160a060020a03821660009081526002602052604090205460ff16151561156657600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156107c45781600160a060020a03166004828154811015156115ab57fe5b600091825260209091200154600160a060020a03161415611687576004805460001981019081106115d857fe5b60009182526020909120015460048054600160a060020a0390921691839081106115fe57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560048054600019019061163a9082611ff4565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a16107c4565b600101611588565b60005433600160a060020a039081169116146116aa57600080fd5b600160a060020a03831615156116bf57600080fd5b600160a060020a03821615156116d457600080fd5b60078054600160a060020a03808616600160a060020a0319928316179283905560088054868316908416179081905560098054868416941693909317928390557f7a85322644a4462d8ff5482d2a841a4d231f8cfb3c9f4a50f66f8b2bd568c31c938216929082169116604051600160a060020a03938416815291831660208301529091166040808301919091526060909101905180910390a1505050565b600754600160a060020a031681565b60005433600160a060020a0390811691161461179d57600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f1935050505015156117ce57600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b600854600160a060020a031681565b60075474010000000000000000000000000000000000000000900460ff1681565b600a6020526000908152604090205460ff1681565b600054600160a060020a031681565b6000808080600160a060020a038516600080516020612049833981519152141561189f5730600160a060020a03163193506119b5565b600160a060020a038086166000818152600b602052604080822054909316955090916370a08231918691516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561190c57600080fd5b6102c65a03f1151561191d57600080fd5b5050506040518051925050600160a060020a03851663dd62ed3e843060006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561198757600080fd5b6102c65a03f1151561199857600080fd5b50505060405180519150508082106119b057806119b2565b815b93505b505050919050565b60008060006119cb86611df6565b91506119d687611df6565b90506114fd85828487611f5b565b600160a060020a0381166000805160206120498339815191521415611a2457600160a060020a038116600090815260066020526040902060129055611a9e565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611a6a57600080fd5b6102c65a03f11515611a7b57600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b6000806000808415611af55760008611611aba57600080fd5b600160a060020a038a166000805160206120498339815191521415611aea57348914611ae557600080fd5b611af5565b3415611af557600080fd5b611b018a898b896119bd565b925060008311611b1057600080fd5b600160a060020a038a166000805160206120498339815191521415611b39575086905081611b43565b5088905060001988025b600854600160a060020a031663c6fd2103838360004360405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515611ba957600080fd5b6102c65a03f11515611bba57600080fd5b505050600160a060020a038a1660008051602061204983398151915214611c8057600160a060020a03808b166000818152600b60205260408082205492936323b872dd9333939116918e9190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611c5a57600080fd5b6102c65a03f11515611c6b57600080fd5b505050604051805190501515611c8057600080fd5b600160a060020a0388166000805160206120498339815191521415611cd557600160a060020a03871683156108fc0284604051600060405180830381858888f193505050501515611cd057600080fd5b611d79565b600160a060020a038089166000818152600b60205260408082205492936323b872dd9316918b91889190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611d5357600080fd5b6102c65a03f11515611d6457600080fd5b505050604051805190501515611d7957600080fd5b33600160a060020a03167fea9415385bae08fe9f6dc457b02577166790cde83bb18cc340aac6cb81b824de8b8b8b878c604051600160a060020a039586168152602081019490945291841660408085019190915260608401919091529216608082015260a001905180910390a25060019998505050505050505050565b600080600160a060020a0383166000805160206120498339815191521415611e215760129150611eae565b50600160a060020a038216600090815260066020526040902054801515611eaa5782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611e8857600080fd5b6102c65a03f11515611e9957600080fd5b505050604051805190509150611eae565b8091505b50919050565b600080806b204fce5e3e25026110000000871115611ed157600080fd5b69d3c21bcecceda1000000841115611ee857600080fd5b848610611f195760128587031115611eff57600080fd5b5050828403600a0a8502670de0b6b3a76400000282611f3f565b60128686031115611f2957600080fd5b5050670de0b6b3a76400008502848403600a0a83025b80600182840103811515611f4f57fe5b04979650505050505050565b60006b204fce5e3e25026110000000851115611f7657600080fd5b69d3c21bcecceda1000000821115611f8d57600080fd5b838310611fc05760128484031115611fa457600080fd5b670de0b6b3a7640000858302858503600a0a025b049050611fec565b60128385031115611fd057600080fd5b828403600a0a670de0b6b3a764000002828602811515611fb857fe5b949350505050565b815481835581811511610cd257600083815260209020610cd291810190830161202a565b60206040519081016040526000815290565b61065591905b808211156120445760008155600101612030565b50905600000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea165627a7a72305820759891b305e45ecc25a9959c4d0a44c09a9387d84dbb3d83aaa761f481dbe40b0029

Deployed Bytecode Sourcemap

9569:8114:0:-;;;;;;;;;-1:-1:-1;;;9569:8114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10466:42;-1:-1:-1;;;;;;;;;;;10498:9:0;10466:42;;-1:-1:-1;;;;;10466:42:0;;;;;;;;;;;;;;;;;;;;9569:8114;11223:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5982:463;;;;;;;;;;-1:-1:-1;;;;;5982:463:0;;;;;;;12137:198;;;;;;;;;;-1:-1:-1;;;;;12137:198:0;;;;;;;;;;3606:27;;;;;;;;;;;;;;;-1:-1:-1;;;;;3606:27:0;;;;;;;;;;;;;;4217:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;71:3;;;64:6;52:2;45:3;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;7883:189:0;;;;;;;;;;-1:-1:-1;;;;;7883:189:0;;;;;;;;;;;;;5666:308;;;;;;;;;;-1:-1:-1;;;;;5666:308:0;;;;;9773:47;;;;;;;;;;;;11613:458;;;;;;;;;;-1:-1:-1;;;;;11613:458:0;;;;;;;;;;;;;;12418:461;;;;;;;;;;-1:-1:-1;;;;;12418:461:0;;;;;;;;;;;;;11376:150;;;;;;;;;;;;10722:453;;-1:-1:-1;;;;;10722:453:0;;;;;;;;;;;;;;;;;;;;;;;;4635:187;;;;;;;;;;-1:-1:-1;;;;;4635:187:0;;;;;5404:194;;;;;;;;;;;;5003:223;;;;;;;;;;-1:-1:-1;;;;;5003:223:0;;;;;4323:96;;;;;;;;;;;;14756:888;;;;;;;;;;-1:-1:-1;;;;;14756:888:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6514:319;;;;;;;;;;-1:-1:-1;;;;;6514:319:0;;;;;14485:263;;;;;;;;;;-1:-1:-1;;;;;14485:263:0;;;;;;;;;;;;;;9918:44;;;;;;;;;;-1:-1:-1;;;;;9918:44:0;;;;;6841:481;;;;;;;;;;-1:-1:-1;;;;;6841:481:0;;;;;12969:534;;;;;;;;;;-1:-1:-1;;;;;12969:534:0;;;;;;;;;;;;;;;9646:27;;;;;;;;;;;;8184:153;;;;;;;;;;;;-1:-1:-1;;;;;8184:153:0;;;;;9711:55;;;;;;;;;;;;9680:24;;;;;;;;;;;;9827:55;;;;;;;;;;;;;;3579:20;;;;;;;;;;;;13757:448;;;;;;;;;;-1:-1:-1;;;;;13757:448:0;;;;;14213:264;;;;;;;;;;-1:-1:-1;;;;;14213:264:0;;;;;;;;;;;;;;11223:145;11271:4;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;11288:12;:19;;-1:-1:-1;;11288:19:0;;;;;11318:18;11303:4;11318:18;;;;;;;;;;;;;;;;-1:-1:-1;11356:4:0;4016:1;11223:145;:::o;5982:463::-;6131:6;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;6059:17:0;;;;;;:8;:17;;;;;;;;6051:26;;;;;;;;-1:-1:-1;;;;;;6088:17:0;;6108:5;6088:17;;;:8;:17;;;;;:25;;-1:-1:-1;;6088:25:0;;;6126:312;6147:13;:20;6143:24;;6126:312;;;6213:7;-1:-1:-1;;;;;6193:27:0;:13;6207:1;6193:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6193:16:0;:27;6189:238;;;6260:13;6274:20;;-1:-1:-1;;6274:24:0;;;6260:39;;;;;;;;;;;;;;;;6241:13;:16;;-1:-1:-1;;;;;6260:39:0;;;;6255:1;;6241:16;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;6241:58:0;-1:-1:-1;;;;;6241:58:0;;;;;;;;;;6318:13;:22;;;;;-1:-1:-1;;6318:22:0;;;:::i;:::-;;6359:28;6372:7;6381:5;6359:28;;-1:-1:-1;;;;;6359:28:0;;;;;;;;;;;;;;;;;;;;;;6406:5;;6189:238;6169:3;;6126:312;;;5982:463;;:::o;12137:198::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;12226:22:0;;;;12218:31;;;;;;-1:-1:-1;;;;;12260:18:0;;;;;;;:11;:18;;;;;;;:27;;-1:-1:-1;;;;;;12260:27:0;;;;;;;;;;;12298:29;;12260:18;;:27;;12298:29;-1:-1:-1;;;;;12298:29:0;;;;;;;;;;;;;;;;;;;;;;12137:198;;:::o;3606:27::-;;;-1:-1:-1;;;;;3606:27:0;;:::o;4217:98::-;4264:9;;:::i;:::-;4293:14;4286:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4286:21:0;;;;;;;;;;;;;;;;;;;;;;;4217:98;:::o;7883:189::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;7986:5;-1:-1:-1;;;;;7986:14:0;;8001:6;8009;7986:30;;;;;;;;-1:-1:-1;;;7986:30:0;;;;;;-1:-1:-1;;;;;7986:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7978:39;;;;;;;;8028:36;8042:5;8049:6;8057;8028:36;;-1:-1:-1;;;;;8028:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7883:189;;;:::o;5666:308::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;5743:20:0;;;;;;:8;:20;;;;;;;;5742:21;5734:30;;;;;;5806:13;:20;3854:2;5806:37;;5798:46;;;;;;5857:30;5870:10;5882:4;5857:30;;-1:-1:-1;;;;;5857:30:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5898:20:0;;;;;;:8;:20;;;;;:27;;-1:-1:-1;;5898:27:0;5921:4;5898:27;;;;;;5936:13;:30;;:13;;:30;;;:13;:30;;:::i;:::-;-1:-1:-1;5936:30:0;;;;;;;;;;;-1:-1:-1;;;;;;5936:30:0;-1:-1:-1;;;;;5936:30:0;;;;;;;;;;5666:308::o;9773:47::-;;;-1:-1:-1;;;;;9773:47:0;;:::o;11613:458::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;11766:7;11714:25;:49;11750:5;11757:4;11740:22;;;-1:-1:-1;;;;;11740:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;11714:49;;;;;;;;;;;;;-1:-1:-1;11714:49:0;:59;;-1:-1:-1;;11714:59:0;;;;;;;;;;;11784:45;;11808:5;;11815:4;;11821:7;;11784:45;-1:-1:-1;;;;;11784:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11842:18;11854:5;11842:11;:18::i;:::-;-1:-1:-1;;;;;11876:18:0;;;11906:3;11876:18;;;:11;:18;;;;;;;:34;11875:68;;;;-1:-1:-1;;;;;;11916:26:0;;-1:-1:-1;;;;;;;;;;;11916:26:0;;11875:68;11871:193;;;-1:-1:-1;;;;;11960:18:0;;;;;;;:11;:18;;;;;;:25;;-1:-1:-1;;;;;;11960:25:0;11981:4;11960:25;;;;;;:18;;12022:13;;11981:4;;12042:8;;12022:29;;;;;;-1:-1:-1;;;12022:29:0;;;;;;-1:-1:-1;;;;;12022:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12014:38;;;;;;;;11613:458;;;:::o;12418:461::-;-1:-1:-1;;;;;4086:10:0;4076:21;12511:4;4076:21;;;:9;:21;;;;;;;;4068:30;;;;;;;;12536:25;:56;12572:5;12579:11;12562:29;;;-1:-1:-1;;;;;12562:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;12536:56;;;;;;;;;;;;;;;;12528:65;;;;;;;;-1:-1:-1;;;;;12610:26:0;;-1:-1:-1;;;;;;;;;;;12610:26:0;12606:188;;;-1:-1:-1;;;;;12653:20:0;;:28;;;;12674:6;12653:28;;;;;;;;;;;;;;;;;;;;;;;;;;12606:188;;;-1:-1:-1;;;;;12722:18:0;;;12741;;;;:11;:18;;;;;;;12722;;;;12741;;12761:11;;12774:6;;12741:18;12722:59;;;;;;-1:-1:-1;;;12722:59:0;;;;;;-1:-1:-1;;;;;12722:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12714:68;;;;;;;;12806:41;12820:5;12827:6;12835:11;12806:41;;-1:-1:-1;;;;;12806:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12867:4:0;12418:461;;;;;:::o;11376:150::-;-1:-1:-1;;;;;4177:10:0;4168:20;11427:4;4168:20;;;:8;:20;;;;;;;;4160:29;;;;;;;;11444:12;:20;;-1:-1:-1;;11444:20:0;;;11475:19;11459:5;11475:19;;;;;;;;;;;;;;;;-1:-1:-1;11514:4:0;11376:150;:::o;10722:453::-;10984:12;;10954:4;;10984:12;;;;;10976:21;;;;;;;;11030:12;;11016:10;-1:-1:-1;;;;;11016:26:0;;;11030:12;;11016:26;11008:35;;;;;;11064:78;11072:8;11082:9;11093;11104:11;11117:14;11133:8;11064:7;:78::i;:::-;11056:87;;;;;;;;-1:-1:-1;11163:4:0;10722:453;;;;;;;;:::o;4635:187::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;4712:22:0;;;;4704:31;;;;;;4767:12;;4746:34;;-1:-1:-1;;;;;4767:12:0;4746:34;;-1:-1:-1;;;;;4746:34:0;;;;;;;;;;;;;;4791:12;:23;;-1:-1:-1;;;;;;4791:23:0;-1:-1:-1;;;;;4791:23:0;;;;;;;;;;4635:187::o;5404:194::-;5452:12;;5468:10;-1:-1:-1;;;;;5452:26:0;;;:12;;:26;5444:35;;;;;;5503:12;;;5517:5;5490:33;;-1:-1:-1;;;;;5503:12:0;;;;5517:5;5490:33;;-1:-1:-1;;;;;5490:33:0;;;;;;;;;;;;;;;;;;;;;;5542:12;;;;5534:20;;-1:-1:-1;;;;;;5534:20:0;;;-1:-1:-1;;;;;5542:12:0;;5534:20;;;;5565:25;;;5404:194::o;5003:223::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;5087:22:0;;;;5079:31;;;;;;5121:30;5142:8;5121:30;;-1:-1:-1;;;;;5121:30:0;;;;;;;;;;;;;;5185:5;;5162:29;;5175:8;;-1:-1:-1;;;;;5185:5:0;5162:29;;-1:-1:-1;;;;;5162:29:0;;;;;;;;;;;;;;;;;;;;;;5202:5;:16;;-1:-1:-1;;;;;;5202:16:0;-1:-1:-1;;;;;5202:16:0;;;;;;;;;;5003:223::o;4323:96::-;4369:9;;:::i;:::-;4398:13;4391:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4391:20:0;;;;;;;;;;;;;;;;;;;;;;4323:96;:::o;14756:888::-;14857:4;14874:11;14896;15234:9;15323:12;15493:15;14925:12;;;;;;;;;;;14924:13;14920:27;;;14946:1;14939:8;;;;14920:27;-1:-1:-1;;;;;;;;;;;;;;;;14964:24:0;;;14960:262;;;15013:4;15005:12;;15040:4;15032:12;;14960:262;;;-1:-1:-1;;;;;;;;;;;;;;;;15066:25:0;;;15062:160;;;15116:5;15108:13;;15144:3;15136:11;;15062:160;;;15187:1;15180:8;;;;15062:160;15246:23;;-1:-1:-1;;;;;15246:23:0;:31;15278:5;15285:11;15298:5;15305:6;15246:23;:66;;;;;;;-1:-1:-1;;;15246:66:0;;;;;;-1:-1:-1;;;;;15246:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15234:78;;15338:35;15349:3;15354:4;15360:6;15368:4;15338:10;:35::i;:::-;15323:50;;15409:7;15390:16;15401:4;15390:10;:16::i;:::-;:26;15386:40;;;15425:1;15418:8;;;;15386:40;15443:19;;-1:-1:-1;;;;;15443:19:0;:33;15439:174;;15511:19;;-1:-1:-1;;;;;15511:19:0;:33;15545:3;15550:4;15511:19;:44;;;;;;;-1:-1:-1;;;15511:44:0;;;;;;-1:-1:-1;;;;;15511:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15574:17:0;;;15570:31;;;15600:1;15593:8;;;;15570:31;15632:4;15625:11;;14756:888;;;;;;;;;;;;:::o;6514:319::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;6593:22:0;;;;;;:9;:22;;;;;;;;6592:23;6584:32;;;;;;6658:14;:21;3854:2;6658:38;;6650:47;;;;;;6710:32;6724:11;6737:4;6710:32;;-1:-1:-1;;;;;6710:32:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6753:22:0;;;;;;:9;:22;;;;;:29;;-1:-1:-1;;6753:29:0;6778:4;6753:29;;;;;;6793:14;:32;;:14;;:32;;;:14;:32;;:::i;14485:263::-;14571:4;14588:16;14635;14607:17;14619:4;14607:11;:17::i;:::-;14588:36;;14654:16;14666:3;14654:11;:16::i;:::-;14635:35;;14690:50;14701:6;14709:11;14722;14735:4;14690:10;:50::i;:::-;14683:57;14485:263;-1:-1:-1;;;;;;;14485:263:0:o;9918:44::-;;;;;;;;;;;;-1:-1:-1;;;;;9918:44:0;;:::o;6841:481::-;6996:6;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;6920:19:0;;;;;;:9;:19;;;;;;;;6912:28;;;;;;;;-1:-1:-1;;;;;;6951:19:0;;6973:5;6951:19;;;:9;:19;;;;;:27;;-1:-1:-1;;6951:27:0;;;6991:324;7012:14;:21;7008:25;;6991:324;;;7080:8;-1:-1:-1;;;;;7059:29:0;:14;7074:1;7059:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7059:17:0;:29;7055:249;;;7129:14;7144:21;;-1:-1:-1;;7144:25:0;;;7129:41;;;;;;;;;;;;;;;;7109:14;:17;;-1:-1:-1;;;;;7129:41:0;;;;7124:1;;7109:17;;;;;;;;;;;;;;;:61;;-1:-1:-1;;;;;;7109:61:0;-1:-1:-1;;;;;7109:61:0;;;;;;;;;;7189:14;:26;;-1:-1:-1;;7189:26:0;;;;;;:::i;:::-;;7234:30;7248:8;7258:5;7234:30;;-1:-1:-1;;;;;7234:30:0;;;;;;;;;;;;;;;;;;;;;;7283:5;;7055:249;7035:3;;6991:324;;12969:534;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;13185:27:0;;;;13177:36;;;;;;-1:-1:-1;;;;;13232:30:0;;;;13224:39;;;;;;13276:12;:28;;-1:-1:-1;;;;;13276:28:0;;;-1:-1:-1;;;;;;13276:28:0;;;;;;;;13315:23;:42;;;;;;;;;;;;;13368:19;:34;;;;;;;;;;;;;;;13415:80;;13436:12;;;13450:23;;;;13475:19;13415:80;;-1:-1:-1;;;;;13415:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12969:534;;;:::o;9646:27::-;;;-1:-1:-1;;;;;9646:27:0;;:::o;8184:153::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;8266:15:0;;:23;;;;8282:6;8266:23;;;;;;;;;;;;;;;;;;;;;;;;;;8300:29;8314:6;8322;8300:29;;;;;-1:-1:-1;;;;;8300:29:0;;;;;;;;;;;;;;;;8184:153;;:::o;9711:55::-;;;-1:-1:-1;;;;;9711:55:0;;:::o;9680:24::-;;;;;;;;;:::o;9827:55::-;;;;;;;;;;;;;;;:::o;3579:20::-;;;-1:-1:-1;;;;;3579:20:0;;:::o;13757:448::-;13810:4;;;;-1:-1:-1;;;;;13831:26:0;;-1:-1:-1;;;;;;;;;;;13831:26:0;13827:371;;;13879:4;-1:-1:-1;;;;;13879:12:0;;13872:19;;;;13827:371;-1:-1:-1;;;;;13939:18:0;;;;;;;:11;:18;;;;;;;;;;;-1:-1:-1;13939:18:0;;13995:15;;13939:18;;13995:23;;;;;;-1:-1:-1;;;13995:23:0;;;;;;-1:-1:-1;;;;;13995:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;14058:15:0;;;14074:6;14082:4;14058:29;;;;;;;;-1:-1:-1;;;14058:29:0;;;;;;-1:-1:-1;;;;;14058:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14112:35:0;;;14111:75;;14169:17;14111:75;;;14151:15;14111:75;14104:82;;13827:371;13757:448;;;;;;:::o;14213:264::-;14300:4;14317:16;14364;14336:17;14348:4;14336:11;:17::i;:::-;14317:36;;14383:16;14395:3;14383:11;:16::i;:::-;14364:35;;14419:50;14430:6;14438:11;14451;14464:4;14419:10;:50::i;1358:174::-;-1:-1:-1;;;;;1416:26:0;;-1:-1:-1;;;;;;;;;;;1416:26:0;1412:112;;;-1:-1:-1;;;;;1444:15:0;;;;;;:8;:15;;;;;1300:2;1444:30;;1412:112;;;1508:5;-1:-1:-1;;;;;1508:14:0;;:16;;;;;;;;;;;-1:-1:-1;;;1508:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1490:15:0;;;;;;:8;:15;;;;;:34;-1:-1:-1;1412:112:0;1358:174;:::o;15986:1694::-;16205:4;16528:15;16705:11;16727:15;16294:8;16290:226;;;16344:1;16327:18;;16319:27;;;;;;-1:-1:-1;;;;;16365:29:0;;-1:-1:-1;;;;;;;;;;;16365:29:0;16361:143;;;16421:9;:22;;16413:31;;;;;;16361:143;;;16489:9;:14;16481:23;;;;;;16546:58;16557:8;16567:9;16578;16589:14;16546:10;:58::i;:::-;16528:76;-1:-1:-1;16661:1:0;16648:14;;16640:23;;;;;;-1:-1:-1;;;;;16757:29:0;;-1:-1:-1;;;;;;;;;;;16757:29:0;16753:220;;;-1:-1:-1;16855:9:0;;-1:-1:-1;16821:10:0;16753:220;;;-1:-1:-1;16953:8:0;;-1:-1:-1;;;16911:19:0;;16753:220;16985:23;;-1:-1:-1;;;;;16985:23:0;:39;17039:5;17059:11;16985:23;17101:12;16985:139;;-1:-1:-1;;;16985:139:0;;;;;;-1:-1:-1;;;;;16985:139:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16985:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;17172:29:0;;-1:-1:-1;;;;;;;;;;;17172:29:0;17168:138;;-1:-1:-1;;;;;17226:21:0;;;17260;;;;:11;:21;;;;;;;17226;;;;17248:10;;17260:21;;;17283:9;;17260:21;17226:67;;;;;;-1:-1:-1;;;17226:67:0;;;;;;-1:-1:-1;;;;;17226:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17218:76;;;;;;;;-1:-1:-1;;;;;17351:30:0;;-1:-1:-1;;;;;;;;;;;17351:30:0;17347:208;;;-1:-1:-1;;;;;17398:20:0;;:32;;;;17419:10;17398:32;;;;;;;;;;;;;;;;;;;;;;;;;;17347:208;;;-1:-1:-1;;;;;17471:22:0;;;17494;;;;:11;:22;;;;;;;17471;;;;17494;;17518:11;;17531:10;;17494:22;17471:71;;;;;;-1:-1:-1;;;17471:71:0;;;;;;-1:-1:-1;;;;;17471:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17463:80;;;;;;;;17580:10;-1:-1:-1;;;;;17567:81:0;;17592:8;17602:9;17613;17624:10;17636:11;17567:81;;-1:-1:-1;;;;;17567:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17668:4:0;;15986:1694;-1:-1:-1;;;;;;;;;15986:1694:0:o;1540:479::-;1596:4;;-1:-1:-1;;;;;1617:26:0;;-1:-1:-1;;;;;;;;;;;1617:26:0;1613:51;;;1300:2;1645:19;;;;1613:51;-1:-1:-1;;;;;;1719:15:0;;;;;;:8;:15;;;;;;1935:18;;1932:46;;;1962:5;-1:-1:-1;;;;;1962:14:0;;:16;;;;;;;;;;;-1:-1:-1;;;1962:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1955:23;;;;1932:46;1998:13;1991:20;;1540:479;;;;;:::o;2604:861::-;2706:4;;;1096:6;2731:17;;;2723:26;;;;;;1161:17;2768:16;;;2760:25;;;;;;2942:26;;;2938:430;;1252:2;2994:25;;;2993:43;;2985:52;;;;;;-1:-1:-1;;3092:25:0;;;3087:2;:31;3065:54;;1045:6;3065:54;3149:4;2938:430;;;1252:2;3195:25;;;3194:43;;3186:52;;;;;;-1:-1:-1;;1045:6:0;3266:18;;3328:25;;;3323:2;:31;3315:40;;2938:430;3417:11;3412:1;3398:11;3386:9;:23;:27;3385:43;;;;;;;;;2604:861;-1:-1:-1;;;;;;;2604:861:0:o;2027:569::-;2129:4;1096:6;2154:17;;;2146:26;;;;;;1161:17;2191:16;;;2183:25;;;;;;2225:26;;;2221:368;;1252:2;2277:25;;;2276:43;;2268:52;;;;;;1045:6;2343:13;;;2365:25;;;2360:2;:31;2343:49;2342:63;;2335:70;;;;2221:368;1252:2;2447:25;;;2446:43;;2438:52;;;;;;2563:11;2549;:25;2544:2;:31;1045:6;2531:45;2522:4;2513:6;:13;2512:65;;;;;;2221:368;2027:569;;;;;;:::o;9569:8114::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://759891b305e45ecc25a9959c4d0a44c09a9387d84dbb3d83aaa761f481dbe40b

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.