ETH Price: $3,243.12 (+2.85%)
Gas: 5 Gwei

Contract

0xA7c03D39082B54E8AAC266fCf9A9b56d0892EDFf
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Init Controller114814042020-12-19 4:06:451315 days ago1608350805IN
0xA7c03D39...d0892EDFf
0 ETH0.0039279284
0x60806040107325652020-08-25 23:32:241430 days ago1598398344IN
 Create: WalletImpl
0 ETH0.0859356660

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WalletImpl

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-25
*/

// SPDX-License-Identifier: Apache-2.0
// Copyright 2017 Loopring Technology Limited.
pragma solidity ^0.7.0;


/// @title Ownable
/// @author Brecht Devos - <[email protected]>
/// @dev The Ownable contract has an owner address, and provides basic
///      authorization control functions, this simplifies the implementation of
///      "user permissions".
contract Ownable
{
    address public owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /// @dev The Ownable constructor sets the original `owner` of the contract
    ///      to the sender.
    constructor()
    {
        owner = msg.sender;
    }

    /// @dev Throws if called by any account other than the owner.
    modifier onlyOwner()
    {
        require(msg.sender == owner, "UNAUTHORIZED");
        _;
    }

    /// @dev Allows the current owner to transfer control of the contract to a
    ///      new owner.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(
        address newOwner
        )
        public
        virtual
        onlyOwner
    {
        require(newOwner != address(0), "ZERO_ADDRESS");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    function renounceOwnership()
        public
        onlyOwner
    {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }
}

// Copyright 2017 Loopring Technology Limited.



/// @title WalletRegistry
/// @dev A registry for wallets.
/// @author Daniel Wang - <[email protected]>
interface WalletRegistry
{
    function registerWallet(address wallet) external;
    function isWalletRegistered(address addr) external view returns (bool);
    function numOfWallets() external view returns (uint);
}

// Copyright 2017 Loopring Technology Limited.



// Copyright 2017 Loopring Technology Limited.



/// @title ModuleRegistry
/// @dev A registry for modules.
///
/// @author Daniel Wang - <[email protected]>
interface ModuleRegistry
{
	/// @dev Registers and enables a new module.
    function registerModule(address module) external;

    /// @dev Disables a module
    function disableModule(address module) external;

    /// @dev Returns true if the module is registered and enabled.
    function isModuleEnabled(address module) external view returns (bool);

    /// @dev Returns the list of enabled modules.
    function enabledModules() external view returns (address[] memory _modules);

    /// @dev Returns the number of enbaled modules.
    function numOfEnabledModules() external view returns (uint);

    /// @dev Returns true if the module is ever registered.
    function isModuleRegistered(address module) external view returns (bool);
}




/// @title Controller
///
/// @author Daniel Wang - <[email protected]>
abstract contract Controller
{
    ModuleRegistry public moduleRegistry;
    WalletRegistry public walletRegistry;
    address        public walletFactory;
}

// Copyright 2017 Loopring Technology Limited.



/// @title ERC20 Token Interface
/// @dev see https://github.com/ethereum/EIPs/issues/20
/// @author Daniel Wang - <[email protected]>
abstract contract ERC20
{
    function totalSupply()
        public
        view
        virtual
        returns (uint);

    function balanceOf(
        address who
        )
        public
        view
        virtual
        returns (uint);

    function allowance(
        address owner,
        address spender
        )
        public
        view
        virtual
        returns (uint);

    function transfer(
        address to,
        uint value
        )
        public
        virtual
        returns (bool);

    function transferFrom(
        address from,
        address to,
        uint    value
        )
        public
        virtual
        returns (bool);

    function approve(
        address spender,
        uint    value
        )
        public
        virtual
        returns (bool);
}

// Copyright 2017 Loopring Technology Limited.



// Copyright 2017 Loopring Technology Limited.



// Copyright 2017 Loopring Technology Limited.






/// @title Module
/// @dev Base contract for all smart wallet modules.
///
/// @author Daniel Wang - <[email protected]>
///
/// The design of this contract is inspired by Argent's contract codebase:
/// https://github.com/argentlabs/argent-contracts
interface Module
{
    /// @dev Activates the module for the given wallet (msg.sender) after the module is added.
    ///      Warning: this method shall ONLY be callable by a wallet.
    function activate() external;

    /// @dev Deactivates the module for the given wallet (msg.sender) before the module is removed.
    ///      Warning: this method shall ONLY be callable by a wallet.
    function deactivate() external;
}


// Copyright 2017 Loopring Technology Limited.



/// @title Wallet
/// @dev Base contract for smart wallets.
///      Sub-contracts must NOT use non-default constructor to initialize
///      wallet states, instead, `init` shall be used. This is to enable
///      proxies to be deployed in front of the real wallet contract for
///      saving gas.
///
/// @author Daniel Wang - <[email protected]>
///
/// The design of this contract is inspired by Argent's contract codebase:
/// https://github.com/argentlabs/argent-contracts
interface Wallet
{
    function version() external pure returns (string memory);

    function owner() external view returns (address);

    /// @dev Set a new owner.
    function setOwner(address newOwner) external;

    /// @dev Adds a new module. The `init` method of the module
    ///      will be called with `address(this)` as the parameter.
    ///      This method must throw if the module has already been added.
    /// @param _module The module's address.
    function addModule(address _module) external;

    /// @dev Removes an existing module. This method must throw if the module
    ///      has NOT been added or the module is the wallet's only module.
    /// @param _module The module's address.
    function removeModule(address _module) external;

    /// @dev Checks if a module has been added to this wallet.
    /// @param _module The module to check.
    /// @return True if the module exists; False otherwise.
    function hasModule(address _module) external view returns (bool);

    /// @dev Binds a method from the given module to this
    ///      wallet so the method can be invoked using this wallet's default
    ///      function.
    ///      Note that this method must throw when the given module has
    ///      not been added to this wallet.
    /// @param _method The method's 4-byte selector.
    /// @param _module The module's address. Use address(0) to unbind the method.
    function bindMethod(bytes4 _method, address _module) external;

    /// @dev Returns the module the given method has been bound to.
    /// @param _method The method's 4-byte selector.
    /// @return _module The address of the bound module. If no binding exists,
    ///                 returns address(0) instead.
    function boundMethodModule(bytes4 _method) external view returns (address _module);

    /// @dev Performs generic transactions. Any module that has been added to this
    ///      wallet can use this method to transact on any third-party contract with
    ///      msg.sender as this wallet itself.
    ///
    ///      This method will emit `Transacted` event if it doesn't throw.
    ///
    ///      Note: this method must ONLY allow invocations from a module that has
    ///      been added to this wallet. The wallet owner shall NOT be permitted
    ///      to call this method directly.
    ///
    /// @param mode The transaction mode, 1 for CALL, 2 for DELEGATECALL.
    /// @param to The desitination address.
    /// @param value The amount of Ether to transfer.
    /// @param data The data to send over using `to.call{value: value}(data)`
    /// @return returnData The transaction's return value.
    function transact(
        uint8    mode,
        address  to,
        uint     value,
        bytes    calldata data
        )
        external
        returns (bytes memory returnData);
}



// Copyright 2017 Loopring Technology Limited.



/// @title ReentrancyGuard
/// @author Brecht Devos - <[email protected]>
/// @dev Exposes a modifier that guards a function against reentrancy
///      Changing the value of the same storage value multiple times in a transaction
///      is cheap (starting from Istanbul) so there is no need to minimize
///      the number of times the value is changed
contract ReentrancyGuard
{
    //The default value must be 0 in order to work behind a proxy.
    uint private _guardValue;

    modifier nonReentrant()
    {
        require(_guardValue == 0, "REENTRANCY");
        _guardValue = 1;
        _;
        _guardValue = 0;
    }
}




/// @title BaseWallet
/// @dev This contract provides basic implementation for a Wallet.
///
/// @author Daniel Wang - <[email protected]>
///
/// The design of this contract is inspired by Argent's contract codebase:
/// https://github.com/argentlabs/argent-contracts
abstract contract BaseWallet is ReentrancyGuard, Wallet
{
    // WARNING: do not delete wallet state data to make this implementation
    // compatible with early versions.
    //
    //  ----- DATA LAYOUT BEGINS -----
    address internal _owner;

    mapping (address => bool) private modules;

    Controller public controller;

    mapping (bytes4  => address) internal methodToModule;
    //  ----- DATA LAYOUT ENDS -----

    event OwnerChanged          (address newOwner);
    event ControllerChanged     (address newController);
    event ModuleAdded           (address module);
    event ModuleRemoved         (address module);
    event MethodBound           (bytes4  method, address module);
    event WalletSetup           (address owner);

    event Transacted(
        address module,
        address to,
        uint    value,
        bytes   data
    );

    modifier onlyFromModule
    {
        require(modules[msg.sender], "MODULE_UNAUTHORIZED");
        _;
    }

    modifier onlyFromFactory
    {
        require(
            msg.sender == controller.walletFactory(),
            "UNAUTHORIZED"
        );
        _;
    }

    /// @dev We need to make sure the Factory address cannot be changed without wallet owner's
    ///      explicit authorization.
    modifier onlyFromFactoryOrModule
    {
        require(
            modules[msg.sender] || msg.sender == controller.walletFactory(),
            "UNAUTHORIZED"
        );
        _;
    }

    /// @dev Set up this wallet by assigning an original owner
    ///
    ///      Note that calling this method more than once will throw.
    ///
    /// @param _initialOwner The owner of this wallet, must not be address(0).
    function initOwner(
        address _initialOwner
        )
        external
        onlyFromFactory
        nonReentrant
    {
        require(controller != Controller(0), "NO_CONTROLLER");
        require(_owner == address(0), "INITIALIZED_ALREADY");
        require(_initialOwner != address(0), "ZERO_ADDRESS");

        _owner = _initialOwner;
        emit WalletSetup(_initialOwner);
    }

    /// @dev Set up this wallet by assigning an controller.
    ///
    ///      Note that calling this method more than once will throw.
    ///      And this method must be invoked before owner is initialized
    ///
    /// @param _controller The Controller instance.
    function initController(
        Controller _controller
        )
        external
        nonReentrant
    {
        require(
            _owner == address(0) &&
            controller == Controller(0) &&
            _controller != Controller(0),
            "CONTROLLER_INIT_FAILED"
        );

        controller = _controller;
    }

    function owner()
        override
        external
        view
        returns (address)
    {
        return _owner;
    }

    function setOwner(address newOwner)
        external
        override
        nonReentrant
        onlyFromModule
    {
        require(newOwner != address(0), "ZERO_ADDRESS");
        require(newOwner != address(this), "PROHIBITED");
        require(newOwner != _owner, "SAME_ADDRESS");
        _owner = newOwner;
        emit OwnerChanged(newOwner);
    }

    function setController(Controller newController)
        external
        nonReentrant
        onlyFromModule
    {
        require(newController != controller, "SAME_CONTROLLER");
        require(newController != Controller(0), "INVALID_CONTROLLER");
        controller = newController;
        emit ControllerChanged(address(newController));
    }

    function addModule(address _module)
        external
        override
        onlyFromFactoryOrModule
    {
        addModuleInternal(_module);
    }

    function removeModule(address _module)
        external
        override
        onlyFromModule
    {
        // Allow deactivate to fail to make sure the module can be removed
        require(modules[_module], "MODULE_NOT_EXISTS");
        try Module(_module).deactivate() {} catch {}
        delete modules[_module];
        emit ModuleRemoved(_module);
    }

    function hasModule(address _module)
        external
        view
        override
        returns (bool)
    {
        return modules[_module];
    }

    function bindMethod(bytes4 _method, address _module)
        external
        override
        onlyFromModule
    {
        require(_method != bytes4(0), "BAD_METHOD");
        if (_module != address(0)) {
            require(modules[_module], "MODULE_UNAUTHORIZED");
        }

        methodToModule[_method] = _module;
        emit MethodBound(_method, _module);
    }

    function boundMethodModule(bytes4 _method)
        external
        view
        override
        returns (address)
    {
        return methodToModule[_method];
    }

    function transact(
        uint8    mode,
        address  to,
        uint     value,
        bytes    calldata data
        )
        external
        override
        onlyFromFactoryOrModule
        returns (bytes memory returnData)
    {
        require(
            !controller.moduleRegistry().isModuleRegistered(to),
            "TRANSACT_ON_MODULE_DISALLOWED"
        );

        bool success;
        (success, returnData) = nonReentrantCall(mode, to, value, data);

        if (!success) {
            assembly {
                returndatacopy(0, 0, returndatasize())
                revert(0, returndatasize())
            }
        }
        emit Transacted(msg.sender, to, value, data);
    }

    function addModuleInternal(address _module)
        internal
    {
        require(_module != address(0), "NULL_MODULE");
        require(modules[_module] == false, "MODULE_EXISTS");
        require(
            controller.moduleRegistry().isModuleEnabled(_module),
            "INVALID_MODULE"
        );
        modules[_module] = true;
        emit ModuleAdded(_module);
        Module(_module).activate();
    }

    receive()
        external
        payable
    {
    }

    /// @dev This default function can receive Ether or perform queries to modules
    ///      using bound methods.
    fallback()
        external
        payable
    {
        address module = methodToModule[msg.sig];
        require(modules[module], "MODULE_UNAUTHORIZED");

        (bool success, bytes memory returnData) = module.call{value: msg.value}(msg.data);
        assembly {
            switch success
            case 0 { revert(add(returnData, 32), mload(returnData)) }
            default { return(add(returnData, 32), mload(returnData)) }
        }
    }

    // This call is introduced to support reentrany check.
    // The caller shall NOT have the nonReentrant modifier.
    function nonReentrantCall(
        uint8        mode,
        address      target,
        uint         value,
        bytes memory data
        )
        private
        nonReentrant
        returns (
            bool success,
            bytes memory returnData
        )
    {
        if (mode == 1) {
            // solium-disable-next-line security/no-call-value
            (success, returnData) = target.call{value: value}(data);
        } else if (mode == 2) {
            // solium-disable-next-line security/no-call-value
            (success, returnData) = target.delegatecall(data);
        } else if (mode == 3) {
            require(value == 0, "INVALID_VALUE");
            // solium-disable-next-line security/no-call-value
            (success, returnData) = target.staticcall(data);
        } else {
            revert("UNSUPPORTED_MODE");
        }
    }
}



/// @title WalletImpl
contract WalletImpl is BaseWallet {
    function version()
        external
        override
        pure
        returns (string memory)
    {
        // 使用中国省会作为别名
        return "1.1.5 (shenyang)";
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newController","type":"address"}],"name":"ControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"method","type":"bytes4"},{"indexed":false,"internalType":"address","name":"module","type":"address"}],"name":"MethodBound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"module","type":"address"}],"name":"ModuleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"module","type":"address"}],"name":"ModuleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"module","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Transacted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"WalletSetup","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_module","type":"address"}],"name":"addModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_method","type":"bytes4"},{"internalType":"address","name":"_module","type":"address"}],"name":"bindMethod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_method","type":"bytes4"}],"name":"boundMethodModule","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract Controller","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_module","type":"address"}],"name":"hasModule","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Controller","name":"_controller","type":"address"}],"name":"initController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"}],"name":"initOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_module","type":"address"}],"name":"removeModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Controller","name":"newController","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"mode","type":"uint8"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transact","outputs":[{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b506118f2806100206000396000f3fe6080604052600436106100c65760003560e01c806392eefe9b1161007f578063c7b2e59611610059578063c7b2e5961461046a578063cf38db69146104b1578063f77c4791146104e5578063fb01cc36146104fa576100cd565b806392eefe9b146103c1578063a0632461146103f4578063b149206e14610427576100cd565b80630d009297146101cf57806313af4035146102045780631ed86f191461023757806354fd4d501461026a5780637122b74c146102f45780638da5cb5b14610390576100cd565b366100cd57005b600080356001600160e01b0319168152600460209081526040808320546001600160a01b031680845260029092529091205460ff16610149576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b60006060826001600160a01b031634600036604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146101ac576040519150601f19603f3d011682016040523d82523d6000602084013e6101b1565b606091505b509150915081600081146101c757815160208301f35b815160208301fd5b3480156101db57600080fd5b50610202600480360360208110156101f257600080fd5b50356001600160a01b031661052d565b005b34801561021057600080fd5b506102026004803603602081101561022757600080fd5b50356001600160a01b031661077c565b34801561024357600080fd5b506102026004803603602081101561025a57600080fd5b50356001600160a01b031661095b565b34801561027657600080fd5b5061027f610a46565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b95781810151838201526020016102a1565b50505050905090810190601f1680156102e65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030057600080fd5b5061027f6004803603608081101561031757600080fd5b60ff823516916001600160a01b03602082013516916040820135919081019060808101606082013564010000000081111561035157600080fd5b82018360208201111561036357600080fd5b8035906020019184600183028401116401000000008311171561038557600080fd5b509092509050610a70565b34801561039c57600080fd5b506103a5610d7f565b604080516001600160a01b039092168252519081900360200190f35b3480156103cd57600080fd5b50610202600480360360208110156103e457600080fd5b50356001600160a01b0316610d8e565b34801561040057600080fd5b506102026004803603602081101561041757600080fd5b50356001600160a01b0316610f2b565b34801561043357600080fd5b506102026004803603604081101561044a57600080fd5b5080356001600160e01b03191690602001356001600160a01b031661108b565b34801561047657600080fd5b5061049d6004803603602081101561048d57600080fd5b50356001600160a01b0316611212565b604080519115158252519081900360200190f35b3480156104bd57600080fd5b506103a5600480360360208110156104d457600080fd5b50356001600160e01b031916611230565b3480156104f157600080fd5b506103a5611255565b34801561050657600080fd5b506102026004803603602081101561051d57600080fd5b50356001600160a01b0316611264565b600360009054906101000a90046001600160a01b03166001600160a01b031663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b15801561057b57600080fd5b505afa15801561058f573d6000803e3d6000fd5b505050506040513d60208110156105a557600080fd5b50516001600160a01b031633146105f2576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b60005415610634576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b60016000556003546001600160a01b0316610686576040805162461bcd60e51b815260206004820152600d60248201526c2727afa1a7a72a2927a62622a960991b604482015290519081900360640190fd5b6001546001600160a01b0316156106da576040805162461bcd60e51b8152602060048201526013602482015272494e495449414c495a45445f414c524541445960681b604482015290519081900360640190fd5b6001600160a01b038116610724576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f2d09b2e98dd73e6a5c2de8f80056fba918b4d574202a95c8e11eab46f89a21b69181900360200190a15060008055565b600054156107be576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160009081553381526002602052604090205460ff1661081c576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6001600160a01b038116610866576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b6001600160a01b0381163014156108b1576040805162461bcd60e51b815260206004820152600a602482015269141493d212509255115160b21b604482015290519081900360640190fd5b6001546001600160a01b0382811691161415610903576040805162461bcd60e51b815260206004820152600c60248201526b53414d455f4144445245535360a01b604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369181900360200190a15060008055565b3360009081526002602052604090205460ff16806109fa5750600360009054906101000a90046001600160a01b03166001600160a01b031663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b1580156109c257600080fd5b505afa1580156109d6573d6000803e3d6000fd5b505050506040513d60208110156109ec57600080fd5b50516001600160a01b031633145b610a3a576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b610a4381611351565b50565b60408051808201909152601081526f312e312e3520287368656e79616e672960801b602082015290565b3360009081526002602052604090205460609060ff1680610b125750600360009054906101000a90046001600160a01b03166001600160a01b031663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b158015610ada57600080fd5b505afa158015610aee573d6000803e3d6000fd5b505050506040513d6020811015610b0457600080fd5b50516001600160a01b031633145b610b52576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663b95459e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610ba057600080fd5b505afa158015610bb4573d6000803e3d6000fd5b505050506040513d6020811015610bca57600080fd5b505160408051631c5ebe2f60e01b81526001600160a01b03888116600483015291519190921691631c5ebe2f916024808301926020929190829003018186803b158015610c1657600080fd5b505afa158015610c2a573d6000803e3d6000fd5b505050506040513d6020811015610c4057600080fd5b505115610c94576040805162461bcd60e51b815260206004820152601d60248201527f5452414e534143545f4f4e5f4d4f44554c455f444953414c4c4f574544000000604482015290519081900360640190fd5b6000610cd887878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115d892505050565b9250905080610ceb573d6000803e3d6000fd5b7fd15cdc35d9f75ae49cb70603e3d7c2f6d6bff47de15cfbcdfcbbd8ab19aa7aca338787878760405180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039850909650505050505050a15095945050505050565b6001546001600160a01b031690565b60005415610dd0576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160009081553381526002602052604090205460ff16610e2e576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6003546001600160a01b0382811691161415610e83576040805162461bcd60e51b815260206004820152600f60248201526e29a0a6a2afa1a7a72a2927a62622a960891b604482015290519081900360640190fd5b6001600160a01b038116610ed3576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa1a7a72a2927a62622a960711b604482015290519081900360640190fd5b600380546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f027c3e080ed9215f564a9455a666f7e459b3edc0bb6e02a1bf842fde4d0ccfc19181900360200190a15060008055565b3360009081526002602052604090205460ff16610f85576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526002602052604090205460ff16610fe6576040805162461bcd60e51b81526020600482015260116024820152704d4f44554c455f4e4f545f45584953545360781b604482015290519081900360640190fd5b806001600160a01b03166351b42b006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561102157600080fd5b505af1925050508015611032575060015b506001600160a01b038116600081815260026020908152604091829020805460ff19169055815192835290517f0a1ee69f55c33d8467c69ca59ce2007a737a88603d75392972520bf67cb513b89281900390910190a150565b3360009081526002602052604090205460ff166110e5576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6001600160e01b0319821661112e576040805162461bcd60e51b815260206004820152600a60248201526910905117d351551213d160b21b604482015290519081900360640190fd5b6001600160a01b038116156111a0576001600160a01b03811660009081526002602052604090205460ff166111a0576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6001600160e01b0319821660008181526004602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915582519384529083015280517fe38e0cbd107669b7b8120e2f6edde6ac4731cb8b123c1ab8b6db9b6bf0536fb29281900390910190a15050565b6001600160a01b031660009081526002602052604090205460ff1690565b6001600160e01b0319166000908152600460205260409020546001600160a01b031690565b6003546001600160a01b031681565b600054156112a6576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b60016000819055546001600160a01b03161580156112cd57506003546001600160a01b0316155b80156112e157506001600160a01b03811615155b61132b576040805162461bcd60e51b815260206004820152601660248201527510d3d3951493d313115497d253925517d1905253115160521b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b039290921691909117905560008055565b6001600160a01b03811661139a576040805162461bcd60e51b815260206004820152600b60248201526a4e554c4c5f4d4f44554c4560a81b604482015290519081900360640190fd5b6001600160a01b03811660009081526002602052604090205460ff16156113f8576040805162461bcd60e51b815260206004820152600d60248201526c4d4f44554c455f45584953545360981b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663b95459e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561144657600080fd5b505afa15801561145a573d6000803e3d6000fd5b505050506040513d602081101561147057600080fd5b505160408051632d9ad53d60e01b81526001600160a01b03848116600483015291519190921691632d9ad53d916024808301926020929190829003018186803b1580156114bc57600080fd5b505afa1580156114d0573d6000803e3d6000fd5b505050506040513d60208110156114e657600080fd5b505161152a576040805162461bcd60e51b815260206004820152600e60248201526d494e56414c49445f4d4f44554c4560901b604482015290519081900360640190fd5b6001600160a01b038116600081815260026020908152604091829020805460ff19166001179055815192835290517fead6a006345da1073a106d5f32372d2d2204f46cb0b4bca8f5ebafcbbed12b8a9281900390910190a1806001600160a01b0316630f15f4c06040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156115bd57600080fd5b505af11580156115d1573d6000803e3d6000fd5b5050505050565b60006060600054600014611620576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b6001600081905560ff871614156116de57846001600160a01b031684846040518082805190602001908083835b6020831061166c5780518252601f19909201916020918201910161164d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146116ce576040519150601f19603f3d011682016040523d82523d6000602084013e6116d3565b606091505b5090925090506118ad565b8560ff166002141561178457846001600160a01b0316836040518082805190602001908083835b602083106117245780518252601f199092019160209182019101611705565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146116ce576040519150601f19603f3d011682016040523d82523d6000602084013e6116d3565b8560ff166003141561186d5783156117d3576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f56414c554560981b604482015290519081900360640190fd5b846001600160a01b0316836040518082805190602001908083835b6020831061180d5780518252601f1990920191602091820191016117ee565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146116ce576040519150601f19603f3d011682016040523d82523d6000602084013e6116d3565b6040805162461bcd60e51b815260206004820152601060248201526f554e535550504f525445445f4d4f444560801b604482015290519081900360640190fd5b6000805590959094509250505056fea2646970667358221220b3b72b358bc075ba67eadf36be0a3d4f30f7067e8e91a35f724dae238b92871464736f6c63430007000033

Deployed Bytecode

0x6080604052600436106100c65760003560e01c806392eefe9b1161007f578063c7b2e59611610059578063c7b2e5961461046a578063cf38db69146104b1578063f77c4791146104e5578063fb01cc36146104fa576100cd565b806392eefe9b146103c1578063a0632461146103f4578063b149206e14610427576100cd565b80630d009297146101cf57806313af4035146102045780631ed86f191461023757806354fd4d501461026a5780637122b74c146102f45780638da5cb5b14610390576100cd565b366100cd57005b600080356001600160e01b0319168152600460209081526040808320546001600160a01b031680845260029092529091205460ff16610149576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b60006060826001600160a01b031634600036604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146101ac576040519150601f19603f3d011682016040523d82523d6000602084013e6101b1565b606091505b509150915081600081146101c757815160208301f35b815160208301fd5b3480156101db57600080fd5b50610202600480360360208110156101f257600080fd5b50356001600160a01b031661052d565b005b34801561021057600080fd5b506102026004803603602081101561022757600080fd5b50356001600160a01b031661077c565b34801561024357600080fd5b506102026004803603602081101561025a57600080fd5b50356001600160a01b031661095b565b34801561027657600080fd5b5061027f610a46565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b95781810151838201526020016102a1565b50505050905090810190601f1680156102e65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030057600080fd5b5061027f6004803603608081101561031757600080fd5b60ff823516916001600160a01b03602082013516916040820135919081019060808101606082013564010000000081111561035157600080fd5b82018360208201111561036357600080fd5b8035906020019184600183028401116401000000008311171561038557600080fd5b509092509050610a70565b34801561039c57600080fd5b506103a5610d7f565b604080516001600160a01b039092168252519081900360200190f35b3480156103cd57600080fd5b50610202600480360360208110156103e457600080fd5b50356001600160a01b0316610d8e565b34801561040057600080fd5b506102026004803603602081101561041757600080fd5b50356001600160a01b0316610f2b565b34801561043357600080fd5b506102026004803603604081101561044a57600080fd5b5080356001600160e01b03191690602001356001600160a01b031661108b565b34801561047657600080fd5b5061049d6004803603602081101561048d57600080fd5b50356001600160a01b0316611212565b604080519115158252519081900360200190f35b3480156104bd57600080fd5b506103a5600480360360208110156104d457600080fd5b50356001600160e01b031916611230565b3480156104f157600080fd5b506103a5611255565b34801561050657600080fd5b506102026004803603602081101561051d57600080fd5b50356001600160a01b0316611264565b600360009054906101000a90046001600160a01b03166001600160a01b031663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b15801561057b57600080fd5b505afa15801561058f573d6000803e3d6000fd5b505050506040513d60208110156105a557600080fd5b50516001600160a01b031633146105f2576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b60005415610634576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b60016000556003546001600160a01b0316610686576040805162461bcd60e51b815260206004820152600d60248201526c2727afa1a7a72a2927a62622a960991b604482015290519081900360640190fd5b6001546001600160a01b0316156106da576040805162461bcd60e51b8152602060048201526013602482015272494e495449414c495a45445f414c524541445960681b604482015290519081900360640190fd5b6001600160a01b038116610724576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f2d09b2e98dd73e6a5c2de8f80056fba918b4d574202a95c8e11eab46f89a21b69181900360200190a15060008055565b600054156107be576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160009081553381526002602052604090205460ff1661081c576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6001600160a01b038116610866576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b6001600160a01b0381163014156108b1576040805162461bcd60e51b815260206004820152600a602482015269141493d212509255115160b21b604482015290519081900360640190fd5b6001546001600160a01b0382811691161415610903576040805162461bcd60e51b815260206004820152600c60248201526b53414d455f4144445245535360a01b604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369181900360200190a15060008055565b3360009081526002602052604090205460ff16806109fa5750600360009054906101000a90046001600160a01b03166001600160a01b031663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b1580156109c257600080fd5b505afa1580156109d6573d6000803e3d6000fd5b505050506040513d60208110156109ec57600080fd5b50516001600160a01b031633145b610a3a576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b610a4381611351565b50565b60408051808201909152601081526f312e312e3520287368656e79616e672960801b602082015290565b3360009081526002602052604090205460609060ff1680610b125750600360009054906101000a90046001600160a01b03166001600160a01b031663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b158015610ada57600080fd5b505afa158015610aee573d6000803e3d6000fd5b505050506040513d6020811015610b0457600080fd5b50516001600160a01b031633145b610b52576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663b95459e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610ba057600080fd5b505afa158015610bb4573d6000803e3d6000fd5b505050506040513d6020811015610bca57600080fd5b505160408051631c5ebe2f60e01b81526001600160a01b03888116600483015291519190921691631c5ebe2f916024808301926020929190829003018186803b158015610c1657600080fd5b505afa158015610c2a573d6000803e3d6000fd5b505050506040513d6020811015610c4057600080fd5b505115610c94576040805162461bcd60e51b815260206004820152601d60248201527f5452414e534143545f4f4e5f4d4f44554c455f444953414c4c4f574544000000604482015290519081900360640190fd5b6000610cd887878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115d892505050565b9250905080610ceb573d6000803e3d6000fd5b7fd15cdc35d9f75ae49cb70603e3d7c2f6d6bff47de15cfbcdfcbbd8ab19aa7aca338787878760405180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039850909650505050505050a15095945050505050565b6001546001600160a01b031690565b60005415610dd0576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160009081553381526002602052604090205460ff16610e2e576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6003546001600160a01b0382811691161415610e83576040805162461bcd60e51b815260206004820152600f60248201526e29a0a6a2afa1a7a72a2927a62622a960891b604482015290519081900360640190fd5b6001600160a01b038116610ed3576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa1a7a72a2927a62622a960711b604482015290519081900360640190fd5b600380546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f027c3e080ed9215f564a9455a666f7e459b3edc0bb6e02a1bf842fde4d0ccfc19181900360200190a15060008055565b3360009081526002602052604090205460ff16610f85576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526002602052604090205460ff16610fe6576040805162461bcd60e51b81526020600482015260116024820152704d4f44554c455f4e4f545f45584953545360781b604482015290519081900360640190fd5b806001600160a01b03166351b42b006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561102157600080fd5b505af1925050508015611032575060015b506001600160a01b038116600081815260026020908152604091829020805460ff19169055815192835290517f0a1ee69f55c33d8467c69ca59ce2007a737a88603d75392972520bf67cb513b89281900390910190a150565b3360009081526002602052604090205460ff166110e5576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6001600160e01b0319821661112e576040805162461bcd60e51b815260206004820152600a60248201526910905117d351551213d160b21b604482015290519081900360640190fd5b6001600160a01b038116156111a0576001600160a01b03811660009081526002602052604090205460ff166111a0576040805162461bcd60e51b81526020600482015260136024820152721353d115531157d5539055551213d492569151606a1b604482015290519081900360640190fd5b6001600160e01b0319821660008181526004602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915582519384529083015280517fe38e0cbd107669b7b8120e2f6edde6ac4731cb8b123c1ab8b6db9b6bf0536fb29281900390910190a15050565b6001600160a01b031660009081526002602052604090205460ff1690565b6001600160e01b0319166000908152600460205260409020546001600160a01b031690565b6003546001600160a01b031681565b600054156112a6576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b60016000819055546001600160a01b03161580156112cd57506003546001600160a01b0316155b80156112e157506001600160a01b03811615155b61132b576040805162461bcd60e51b815260206004820152601660248201527510d3d3951493d313115497d253925517d1905253115160521b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b039290921691909117905560008055565b6001600160a01b03811661139a576040805162461bcd60e51b815260206004820152600b60248201526a4e554c4c5f4d4f44554c4560a81b604482015290519081900360640190fd5b6001600160a01b03811660009081526002602052604090205460ff16156113f8576040805162461bcd60e51b815260206004820152600d60248201526c4d4f44554c455f45584953545360981b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663b95459e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561144657600080fd5b505afa15801561145a573d6000803e3d6000fd5b505050506040513d602081101561147057600080fd5b505160408051632d9ad53d60e01b81526001600160a01b03848116600483015291519190921691632d9ad53d916024808301926020929190829003018186803b1580156114bc57600080fd5b505afa1580156114d0573d6000803e3d6000fd5b505050506040513d60208110156114e657600080fd5b505161152a576040805162461bcd60e51b815260206004820152600e60248201526d494e56414c49445f4d4f44554c4560901b604482015290519081900360640190fd5b6001600160a01b038116600081815260026020908152604091829020805460ff19166001179055815192835290517fead6a006345da1073a106d5f32372d2d2204f46cb0b4bca8f5ebafcbbed12b8a9281900390910190a1806001600160a01b0316630f15f4c06040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156115bd57600080fd5b505af11580156115d1573d6000803e3d6000fd5b5050505050565b60006060600054600014611620576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b6001600081905560ff871614156116de57846001600160a01b031684846040518082805190602001908083835b6020831061166c5780518252601f19909201916020918201910161164d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146116ce576040519150601f19603f3d011682016040523d82523d6000602084013e6116d3565b606091505b5090925090506118ad565b8560ff166002141561178457846001600160a01b0316836040518082805190602001908083835b602083106117245780518252601f199092019160209182019101611705565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146116ce576040519150601f19603f3d011682016040523d82523d6000602084013e6116d3565b8560ff166003141561186d5783156117d3576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f56414c554560981b604482015290519081900360640190fd5b846001600160a01b0316836040518082805190602001908083835b6020831061180d5780518252601f1990920191602091820191016117ee565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146116ce576040519150601f19603f3d011682016040523d82523d6000602084013e6116d3565b6040805162461bcd60e51b815260206004820152601060248201526f554e535550504f525445445f4d4f444560801b604482015290519081900360640190fd5b6000805590959094509250505056fea2646970667358221220b3b72b358bc075ba67eadf36be0a3d4f30f7067e8e91a35f724dae238b92871464736f6c63430007000033

Deployed Bytecode Sourcemap

17382:238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15918:14;15950:7;;-1:-1:-1;;;;;;15950:7:0;15935:23;;:14;:23;;;;;;;;;-1:-1:-1;;;;;15935:23:0;15977:15;;;:7;:15;;;;;;;;;15969:47;;;;;-1:-1:-1;;;15969:47:0;;;;;;;;;;;;-1:-1:-1;;;15969:47:0;;;;;;;;;;;;;;;16030:12;16044:23;16071:6;-1:-1:-1;;;;;16071:11:0;16090:9;16101:8;;16071:39;;;;;;;;;;;;;;-1:-1:-1;16071:39:0;;-1:-1:-1;16071:39:0;;-1:-1:-1;;16071:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16029:81;;;;16152:7;16178:1;16173:57;;;;16288:10;16282:17;16277:2;16265:10;16261:19;16254:46;16173:57;16216:10;16210:17;16205:2;16193:10;16189:19;16182:46;11286:407;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11286:407:0;-1:-1:-1;;;;;11286:407:0;;:::i;:::-;;12475:368;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12475:368:0;-1:-1:-1;;;;;12475:368:0;;:::i;13217:155::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13217:155:0;-1:-1:-1;;;;;13217:155:0;;:::i;17423:194::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14497:731;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14497:731:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14497:731:0;;-1:-1:-1;14497:731:0;-1:-1:-1;14497:731:0;:::i;12336:131::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;12336:131:0;;;;;;;;;;;;;;12851:358;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12851:358:0;-1:-1:-1;;;;;12851:358:0;;:::i;13380:371::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13380:371:0;-1:-1:-1;;;;;13380:371:0;;:::i;13924:383::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13924:383:0;;-1:-1:-1;;;;;;13924:383:0;;;;;-1:-1:-1;;;;;13924:383:0;;:::i;13759:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13759:157:0;-1:-1:-1;;;;;13759:157:0;;:::i;:::-;;;;;;;;;;;;;;;;;;14315:174;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14315:174:0;-1:-1:-1;;;;;;14315:174:0;;:::i;9834:28::-;;;;;;;;;;;;;:::i;11978:350::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11978:350:0;-1:-1:-1;;;;;11978:350:0;;:::i;11286:407::-;10623:10;;;;;;;;;-1:-1:-1;;;;;10623:10:0;-1:-1:-1;;;;;10623:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10623:26:0;-1:-1:-1;;;;;10609:40:0;:10;:40;10587:102;;;;;-1:-1:-1;;;10587:102:0;;;;;;;;;;;;-1:-1:-1;;;10587:102:0;;;;;;;;;;;;;;;9129:11:::1;::::0;:16;9121:39:::1;;;::::0;;-1:-1:-1;;;9121:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9121:39:0;;;;;;;;;;;;;::::1;;9185:1;9171:11;:15:::0;11437:10:::2;::::0;-1:-1:-1;;;;;11437:10:0::2;11429:53;;;::::0;;-1:-1:-1;;;11429:53:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;11429:53:0;;;;;;;;;;;;;::::2;;11501:6;::::0;-1:-1:-1;;;;;11501:6:0::2;:20:::0;11493:52:::2;;;::::0;;-1:-1:-1;;;11493:52:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;11493:52:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;11564:27:0;::::2;11556:52;;;::::0;;-1:-1:-1;;;11556:52:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;11556:52:0;;;;;;;;;;;;;::::2;;11621:6;:22:::0;;-1:-1:-1;;;;;11621:22:0;::::2;-1:-1:-1::0;;;;;;11621:22:0;;::::2;::::0;::::2;::::0;;;11659:26:::2;::::0;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;9223:1:0::1;9209:15:::0;;11286:407::o;12475:368::-;9129:11;;:16;9121:39;;;;;-1:-1:-1;;;9121:39:0;;;;;;;;;;;;-1:-1:-1;;;9121:39:0;;;;;;;;;;;;;;;9185:1;9171:11;:15;;;10483:10:::1;10475:19:::0;;:7:::1;:19;::::0;;;;;::::1;;10467:51;;;::::0;;-1:-1:-1;;;10467:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10467:51:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;12617:22:0;::::2;12609:47;;;::::0;;-1:-1:-1;;;12609:47:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;12609:47:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;12675:25:0;::::2;12695:4;12675:25;;12667:48;;;::::0;;-1:-1:-1;;;12667:48:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;12667:48:0;;;;;;;;;;;;;::::2;;12746:6;::::0;-1:-1:-1;;;;;12734:18:0;;::::2;12746:6:::0;::::2;12734:18;;12726:43;;;::::0;;-1:-1:-1;;;12726:43:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;12726:43:0;;;;;;;;;;;;;::::2;;12780:6;:17:::0;;-1:-1:-1;;;;;12780:17:0;::::2;-1:-1:-1::0;;;;;;12780:17:0;;::::2;::::0;::::2;::::0;;;12813:22:::2;::::0;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;9223:1:0;9209:15;;12475:368::o;13217:155::-;10930:10;10922:19;;;;:7;:19;;;;;;;;;:63;;;10959:10;;;;;;;;;-1:-1:-1;;;;;10959:10:0;-1:-1:-1;;;;;10959:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10959:26:0;-1:-1:-1;;;;;10945:40:0;:10;:40;10922:63;10900:125;;;;;-1:-1:-1;;;10900:125:0;;;;;;;;;;;;-1:-1:-1;;;10900:125:0;;;;;;;;;;;;;;;13338:26:::1;13356:7;13338:17;:26::i;:::-;13217:155:::0;:::o;17423:194::-;17584:25;;;;;;;;;;;;-1:-1:-1;;;17584:25:0;;;;17423:194;:::o;14497:731::-;10930:10;10922:19;;;;:7;:19;;;;;;14717:23;;10922:19;;;:63;;;10959:10;;;;;;;;;-1:-1:-1;;;;;10959:10:0;-1:-1:-1;;;;;10959:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10959:26:0;-1:-1:-1;;;;;10945:40:0;:10;:40;10922:63;10900:125;;;;;-1:-1:-1;;;10900:125:0;;;;;;;;;;;;-1:-1:-1;;;10900:125:0;;;;;;;;;;;;;;;14781:10:::1;;;;;;;;;-1:-1:-1::0;;;;;14781:10:0::1;-1:-1:-1::0;;;;;14781:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14781:27:0;:50:::1;::::0;;-1:-1:-1;;;14781:50:0;;-1:-1:-1;;;;;14781:50:0;;::::1;;::::0;::::1;::::0;;;:46;;;::::1;::::0;::::1;::::0;:50;;;;;:27:::1;::::0;:50;;;;;;;:46;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14781:50:0;14780:51:::1;14758:130;;;::::0;;-1:-1:-1;;;14758:130:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14901:12;14948:39;14965:4;14971:2;14975:5;14982:4;;14948:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;14948:16:0::1;::::0;-1:-1:-1;;;14948:39:0:i:1;:::-;14924:63:::0;-1:-1:-1;14924:63:0;-1:-1:-1;14924:63:0;15000:166:::1;;15078:16;15075:1;::::0;15057:38:::1;15123:16;15075:1;15113:27;15038:117;15181:39;15192:10;15204:2;15208:5;15215:4;;15181:39;;;;-1:-1:-1::0;;;;;15181:39:0::1;;;;;;-1:-1:-1::0;;;;;15181:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;15181:39:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;15181:39:0;;-1:-1:-1;;;;;;;15181:39:0::1;11036:1;14497:731:::0;;;;;;;:::o;12336:131::-;12453:6;;-1:-1:-1;;;;;12453:6:0;12336:131;:::o;12851:358::-;9129:11;;:16;9121:39;;;;;-1:-1:-1;;;9121:39:0;;;;;;;;;;;;-1:-1:-1;;;9121:39:0;;;;;;;;;;;;;;;9185:1;9171:11;:15;;;10483:10:::1;10475:19:::0;;:7:::1;:19;::::0;;;;;::::1;;10467:51;;;::::0;;-1:-1:-1;;;10467:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10467:51:0;;;;;;;;;;;;;::::1;;13005:10:::2;::::0;-1:-1:-1;;;;;12988:27:0;;::::2;13005:10:::0;::::2;12988:27;;12980:55;;;::::0;;-1:-1:-1;;;12980:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;12980:55:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;13054:30:0;::::2;13046:61;;;::::0;;-1:-1:-1;;;13046:61:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;13046:61:0;;;;;;;;;;;;;::::2;;13118:10;:26:::0;;-1:-1:-1;;;;;13118:26:0;::::2;-1:-1:-1::0;;;;;;13118:26:0;;::::2;::::0;::::2;::::0;;;13160:41:::2;::::0;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;9223:1:0;9209:15;;12851:358::o;13380:371::-;10483:10;10475:19;;;;:7;:19;;;;;;;;10467:51;;;;;-1:-1:-1;;;10467:51:0;;;;;;;;;;;;-1:-1:-1;;;10467:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13579:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;::::1;;13571:46;;;::::0;;-1:-1:-1;;;13571:46:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;13571:46:0;;;;;;;;;;;;;::::1;;13639:7;-1:-1:-1::0;;;;;13632:26:0::1;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;13628:44:::0;-1:-1:-1;;;;;13689:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;;13682:23;;-1:-1:-1;;13682:23:0::1;::::0;;13721:22;;;;;;;::::1;::::0;;;;;;;;::::1;13380:371:::0;:::o;13924:383::-;10483:10;10475:19;;;;:7;:19;;;;;;;;10467:51;;;;;-1:-1:-1;;;10467:51:0;;;;;;;;;;;;-1:-1:-1;;;10467:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14061:20:0;::::1;14053:43;;;::::0;;-1:-1:-1;;;14053:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;14053:43:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;14111:21:0;::::1;::::0;14107:102:::1;;-1:-1:-1::0;;;;;14157:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;::::1;;14149:48;;;::::0;;-1:-1:-1;;;14149:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;14149:48:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;;14221:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:33;;-1:-1:-1;;;;;;14221:33:0::1;-1:-1:-1::0;;;;;14221:33:0;::::1;::::0;;::::1;::::0;;;14270:29;;;;;;;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;13924:383:::0;;:::o;13759:157::-;-1:-1:-1;;;;;13892:16:0;13863:4;13892:16;;;:7;:16;;;;;;;;;13759:157::o;14315:174::-;-1:-1:-1;;;;;;14458:23:0;14426:7;14458:23;;;:14;:23;;;;;;-1:-1:-1;;;;;14458:23:0;;14315:174::o;9834:28::-;;;-1:-1:-1;;;;;9834:28:0;;:::o;11978:350::-;9129:11;;:16;9121:39;;;;;-1:-1:-1;;;9121:39:0;;;;;;;;;;;;-1:-1:-1;;;9121:39:0;;;;;;;;;;;;;;;9185:1;9171:11;:15;;;12124:6;-1:-1:-1;;;;;12124:6:0::1;:20:::0;:64;::::1;;;-1:-1:-1::0;12161:10:0::1;::::0;-1:-1:-1;;;;;12161:10:0::1;:27:::0;12124:64:::1;:109;;;;-1:-1:-1::0;;;;;;12205:28:0;::::1;::::0;::::1;12124:109;12102:181;;;::::0;;-1:-1:-1;;;12102:181:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12102:181:0;;;;;;;;;;;;;::::1;;12296:10;:24:::0;;-1:-1:-1;;;;;;12296:24:0::1;-1:-1:-1::0;;;;;12296:24:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;9209:15:0;;11978:350::o;15236:427::-;-1:-1:-1;;;;;15322:21:0;;15314:45;;;;;-1:-1:-1;;;15314:45:0;;;;;;;;;;;;-1:-1:-1;;;15314:45:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15378:16:0;;;;;;:7;:16;;;;;;;;:25;15370:51;;;;;-1:-1:-1;;;15370:51:0;;;;;;;;;;;;-1:-1:-1;;;15370:51:0;;;;;;;;;;;;;;;15454:10;;;;;;;;;-1:-1:-1;;;;;15454:10:0;-1:-1:-1;;;;;15454:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15454:27:0;:52;;;-1:-1:-1;;;15454:52:0;;-1:-1:-1;;;;;15454:52:0;;;;;;;;;:43;;;;;;;:52;;;;;:27;;:52;;;;;;;:43;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15454:52:0;15432:116;;;;;-1:-1:-1;;;15432:116:0;;;;;;;;;;;;-1:-1:-1;;;15432:116:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15559:16:0;;;;;;:7;:16;;;;;;;;;:23;;-1:-1:-1;;15559:23:0;15578:4;15559:23;;;15598:20;;;;;;;;;;;;;;;;;15636:7;-1:-1:-1;;;;;15629:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15236:427;:::o;16449:899::-;16672:12;16699:23;9129:11;;9144:1;9129:16;9121:39;;;;;-1:-1:-1;;;9121:39:0;;;;;;;;;;;;-1:-1:-1;;;9121:39:0;;;;;;;;;;;;;;;9185:1;9171:11;:15;;;16754:9:::1;::::0;::::1;;16750:591;;;16868:6;-1:-1:-1::0;;;;;16868:11:0::1;16887:5;16894:4;16868:31;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;16868:31:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;16844:55:0;;-1:-1:-1;16844:55:0;-1:-1:-1;16750:591:0::1;;;16921:4;:9;;16929:1;16921:9;16917:424;;;17035:6;-1:-1:-1::0;;;;;17035:19:0::1;17055:4;17035:25;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;17035:25:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16917:424;17082:4;:9;;17090:1;17082:9;17078:263;;;17116:10:::0;;17108:36:::1;;;::::0;;-1:-1:-1;;;17108:36:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17108:36:0;;;;;;;;;;;;;::::1;;17247:6;-1:-1:-1::0;;;;;17247:17:0::1;17265:4;17247:23;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;17247:23:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17078:263;17303:26;::::0;;-1:-1:-1;;;17303:26:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17303:26:0;;;;;;;;;;;;;::::1;17078:263;9223:1:::0;9209:15;;16449:899;;;;-1:-1:-1;16449:899:0;-1:-1:-1;;;16449:899:0:o

Swarm Source

ipfs://b3b72b358bc075ba67eadf36be0a3d4f30f7067e8e91a35f724dae238b928714

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  ]

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.