ETH Price: $3,182.61 (-0.21%)

Contract

0x977c9ABB01Ed3E99e9953fD1F472aE9f459E7E70
 
Transaction Hash
Method
Block
From
To
Withdraw135963782021-11-11 17:59:121159 days ago1636653552IN
Kyber: Reserve AMPL
0 ETH0.00653089162.86122597
Withdraw135902922021-11-10 19:13:481160 days ago1636571628IN
Kyber: Reserve AMPL
0 ETH0.01195015191.96727132
Disable Trade135902732021-11-10 19:09:141160 days ago1636571354IN
Kyber: Reserve AMPL
0 ETH0.0055547185.93145628
Transfer93206382020-01-20 20:56:371820 days ago1579553797IN
Kyber: Reserve AMPL
150 ETH0.000179878
Withdraw93152082020-01-20 0:58:021821 days ago1579481882IN
Kyber: Reserve AMPL
0 ETH0.000142264
Withdraw93151962020-01-20 0:55:041821 days ago1579481704IN
Kyber: Reserve AMPL
0 ETH0.000159114
Transfer93151462020-01-20 0:41:531821 days ago1579480913IN
Kyber: Reserve AMPL
0.006 ETH0.000024731.1
Transfer Admin Q...93015742020-01-17 22:53:591823 days ago1579301639IN
Kyber: Reserve AMPL
0 ETH0.0009728130
Add Alerter93015742020-01-17 22:53:591823 days ago1579301639IN
Kyber: Reserve AMPL
0 ETH0.0022443630
Add Alerter93015742020-01-17 22:53:591823 days ago1579301639IN
Kyber: Reserve AMPL
0 ETH0.0022443630
Add Alerter93015742020-01-17 22:53:591823 days ago1579301639IN
Kyber: Reserve AMPL
0 ETH0.0026943630
Add Operator93015742020-01-17 22:53:591823 days ago1579301639IN
Kyber: Reserve AMPL
0 ETH0.0022516230
Add Operator93015742020-01-17 22:53:591823 days ago1579301639IN
Kyber: Reserve AMPL
0 ETH0.0022516230
Add Operator93015742020-01-17 22:53:591823 days ago1579301639IN
Kyber: Reserve AMPL
0 ETH0.0027016230
Approve Withdraw...93015742020-01-17 22:53:591823 days ago1579301639IN
Kyber: Reserve AMPL
0 ETH0.0036646530
Approve Withdraw...93015742020-01-17 22:53:591823 days ago1579301639IN
Kyber: Reserve AMPL
0 ETH0.0020291130

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
135963782021-11-11 17:59:121159 days ago1636653552
Kyber: Reserve AMPL
0.44657544 ETH
112344732020-11-11 5:41:321525 days ago1605073292
Kyber: Reserve AMPL
0.19165962 ETH
112218932020-11-09 7:20:201526 days ago1604906420
Kyber: Reserve AMPL
3.85098604 ETH
112214342020-11-09 5:36:391527 days ago1604900199
Kyber: Reserve AMPL
2.29470069 ETH
112206522020-11-09 2:42:011527 days ago1604889721
Kyber: Reserve AMPL
3.45585311 ETH
112204722020-11-09 2:00:161527 days ago1604887216
Kyber: Reserve AMPL
2.95388103 ETH
112204722020-11-09 2:00:161527 days ago1604887216
Kyber: Reserve AMPL
4.13742096 ETH
112204342020-11-09 1:50:371527 days ago1604886637
Kyber: Reserve AMPL
3.81948467 ETH
112204292020-11-09 1:48:301527 days ago1604886510
Kyber: Reserve AMPL
2.23629629 ETH
112203622020-11-09 1:33:221527 days ago1604885602
Kyber: Reserve AMPL
0.08991 ETH
112199862020-11-09 0:11:251527 days ago1604880685
Kyber: Reserve AMPL
2.76244476 ETH
112187642020-11-08 19:50:521527 days ago1604865052
Kyber: Reserve AMPL
2.76854801 ETH
112177462020-11-08 16:11:041527 days ago1604851864
Kyber: Reserve AMPL
3.38845682 ETH
112139822020-11-08 2:10:031528 days ago1604801403
Kyber: Reserve AMPL
0.9598884 ETH
112139462020-11-08 2:03:381528 days ago1604801018
Kyber: Reserve AMPL
1.81008723 ETH
112139342020-11-08 2:00:491528 days ago1604800849
Kyber: Reserve AMPL
4.04352723 ETH
112138752020-11-08 1:48:101528 days ago1604800090
Kyber: Reserve AMPL
2.40706961 ETH
112136222020-11-08 0:52:221528 days ago1604796742
Kyber: Reserve AMPL
4.99461039 ETH
112121902020-11-07 19:24:501528 days ago1604777090
Kyber: Reserve AMPL
3.93525883 ETH
112118382020-11-07 18:08:541528 days ago1604772534
Kyber: Reserve AMPL
3.18771335 ETH
112108972020-11-07 14:38:271528 days ago1604759907
Kyber: Reserve AMPL
4.23950433 ETH
112095482020-11-07 9:35:561528 days ago1604741756
Kyber: Reserve AMPL
2.75918193 ETH
112094072020-11-07 9:05:051528 days ago1604739905
Kyber: Reserve AMPL
0.96772363 ETH
112076392020-11-07 2:38:411529 days ago1604716721
Kyber: Reserve AMPL
0.91368189 ETH
112075102020-11-07 2:07:371529 days ago1604714857
Kyber: Reserve AMPL
4.90279872 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.