ETH Price: $3,321.10 (-4.06%)

Token

Hercules (HERC)
 

Overview

Max Total Supply

180,000,000 HERC

Holders

14,798 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
themarcus.eth
Balance
200 HERC

Value
$0.00
0x10d0739E251F5c212312d023c9fCfE0fDcAfcA23
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Hercules is a decentralized blockchain protocol platform that enables anyone to operate a fully functioning supply chain.

# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
ProxyToken

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/ownership/Ownable.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * > Note: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/ProxyReceiver/IERC1538.sol

pragma solidity ^0.5.0;

/// @title ERC1538 Transparent Contract Standard
/// @dev Required interface
///  Note: the ERC-165 identifier for this interface is 0x61455567
interface IERC1538 {

    /// @dev This emits when one or a set of functions are updated in a transparent contract.
    ///  The message string should give a short description of the change and why
    ///  the change was made.
    event CommitMessage(string message);

    /// @dev This emits for each function that is updated in a transparent contract.
    ///  functionId is the bytes4 of the keccak256 of the function signature.
    ///  oldDelegate is the delegate contract address of the old delegate contract if
    ///  the function is being replaced or removed.
    ///  oldDelegate is the zero value address(0) if a function is being added for the
    ///  first time.
    ///  newDelegate is the delegate contract address of the new delegate contract if
    ///  the function is being added for the first time or if the function is being
    ///  replaced.
    ///  newDelegate is the zero value address(0) if the function is being removed.
    event FunctionUpdate(bytes4 indexed functionId, address indexed oldDelegate, address indexed newDelegate, string functionSignature);

    /// @notice Updates functions in a transparent contract.
    /// @dev If the value of _delegate is zero then the functions specified
    ///  in _functionSignatures are removed.
    ///  If the value of _delegate is a delegate contract address then the functions
    ///  specified in _functionSignatures will be delegated to that address.
    /// @param _delegate The address of a delegate contract to delegate to or zero
    ///        to remove functions.
    /// @param _functionSignatures A list of function signatures listed one after the other
    /// @param _commitMessage A short description of the change and why it is made
    ///        This message is passed to the CommitMessage event.
    function updateContract(address _delegate, string calldata _functionSignatures, string calldata _commitMessage) external;
}

// File: contracts/ProxyReceiver/ProxyBaseStorage.sol

pragma solidity ^0.5.0;

///////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * @title ProxyBaseStorage
 * @dev Defining base storage for the proxy contract.
 */
///////////////////////////////////////////////////////////////////////////////////////////////////

contract ProxyBaseStorage {

    //////////////////////////////////////////// VARS /////////////////////////////////////////////

    // maps functions to the delegate contracts that execute the functions.
    // funcId => delegate contract
    mapping(bytes4 => address) public delegates;
  
    // array of function signatures supported by the contract.
    bytes[] internal funcSignatures;

    // maps each function signature to its position in the funcSignatures array.
    // signature => index+1
    mapping(bytes => uint256) internal funcSignatureToIndex;

    // proxy address of itself, can be used for cross-delegate calls but also safety checking.
    address proxy;

    ///////////////////////////////////////////////////////////////////////////////////////////////

}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through `transferFrom`. This is
     * zero by default.
     *
     * This value changes when `approve` or `transferFrom` are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.5.0;



/**
 * @dev Implementation of the `IERC20` interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using `_mint`.
 * For a generic mechanism see `ERC20Mintable`.
 *
 * *For a detailed writeup see our guide [How to implement supply
 * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an `Approval` event is emitted on calls to `transferFrom`.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See `IERC20.approve`.
 */
contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    /**
     * @dev See `IERC20.totalSupply`.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See `IERC20.balanceOf`.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See `IERC20.transfer`.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See `IERC20.allowance`.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See `IERC20.approve`.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev See `IERC20.transferFrom`.
     *
     * Emits an `Approval` event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of `ERC20`;
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `value`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to `transfer`, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a `Transfer` event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a `Transfer` event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

     /**
     * @dev Destoys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a `Transfer` event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an `Approval` event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /**
     * @dev Destoys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See `_burn` and `_approve`.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20Detailed.sol

pragma solidity ^0.5.0;


/**
 * @dev Optional functions from the ERC20 standard.
 */
contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of
     * these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei.
     *
     * > Note that this information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * `IERC20.balanceOf` and `IERC20.transfer`.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

// File: contracts/ProxyToken.sol

pragma solidity ^0.5.0;







contract ProxyToken is
    ERC20,
    ERC20Detailed,
    Ownable,
    ProxyBaseStorage,
    IERC1538
{
    mapping(address => mapping(bytes4 => bool)) public WhiteListedCaller;

    mapping(bytes4 => bool) public nonWhiteListed;

    address balanceOfDelegate;

    event balanceOfDelegateUpdated(address newDelegate);

    constructor() public ERC20Detailed("Hercules", "HERC", 18) {
        _mint(0x1a2a618f83e89efBD9C9C120AB38C1C2eC9c4E76, 234259085000000000000000000);
    }

    function updateBalanceDelegate(address _a) public onlyOwner() {
        balanceOfDelegate = _a;
        emit balanceOfDelegateUpdated(_a);
    }
    function WhiteListCaller(address a, bytes4 _function) public onlyOwner() {
        WhiteListedCaller[a][_function] = true;
    }
    function deWhiteListCaller(address a, bytes4 _function) public onlyOwner() {
        WhiteListedCaller[a][_function] = false;
    }

    function toggleFunctionWhiteListing(bytes4 _function) public onlyOwner() {
        nonWhiteListed[_function] = !nonWhiteListed[_function];
    }

    function burn(uint256 _amount) public {
        _burn(msg.sender, _amount);
    }

    function balanceOf(address _user, uint256 _id) public returns (uint256) {
        bytes memory encoded = abi.encodeWithSelector(0x00fdd58e, _user, _id);
        bool b;
        bytes memory data;
        (b, data) = balanceOfDelegate.delegatecall(encoded);
        return abi.decode(data, (uint256));
    }
    function() external payable {
        address delegate = delegates[msg.sig];

        require(delegate != address(0), "Function does not exist.");

        if (nonWhiteListed[msg.sig] == false) {
            require(
                WhiteListedCaller[msg.sender][msg.sig] == true,
                "user needs to be whitelist to trigger external call"
            );
        }

        assembly {
            let ptr := mload(0x40)
            calldatacopy(ptr, 0, calldatasize)
            let result := delegatecall(gas, delegate, ptr, calldatasize, 0, 0)
            let size := returndatasize
            returndatacopy(ptr, 0, size)
            switch result
                case 0 {
                    revert(ptr, size)
                }
                default {
                    return(ptr, size)
                }
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////

    /// @notice Updates functions in a transparent contract.
    /// @dev If the value of _delegate is zero then the functions specified
    ///  in _functionSignatures are removed.
    ///  If the value of _delegate is a delegate contract address then the functions
    ///  specified in _functionSignatures will be delegated to that address.
    /// @param _delegate The address of a delegate contract to delegate to or zero
    /// @param _functionSignatures A list of function signatures listed one after the other
    /// @param _commitMessage A short description of the change and why it is made
    ///        This message is passed to the CommitMessage event.
    function updateContract(
        address _delegate,
        string calldata _functionSignatures,
        string calldata _commitMessage
    ) external onlyOwner() {
        // ***
        // NEEDS SECURITY ADDING HERE, SUGGEST MULTI-ADDRESS APPROVAL SYSTEM OR EQUIVALENT.
        // ***

        // pos is first used to check the size of the delegate contract.
        // After that pos is the current memory location of _functionSignatures.
        // It is used to move through the characters of _functionSignatures
        uint256 pos;

        if (_delegate != address(0)) {
            assembly {
                pos := extcodesize(_delegate)
            }
            require(
                pos > 0,
                "_delegate address is not a contract and is not address(0)"
            );
        }

        // creates a bytes version of _functionSignatures
        bytes memory signatures = bytes(_functionSignatures);

        // stores the position in memory where _functionSignatures ends.
        uint256 signaturesEnd;

        // stores the starting position of a function signature in _functionSignatures
        uint256 start;

        assembly {
            pos := add(signatures, 32)
            start := pos
            signaturesEnd := add(pos, mload(signatures))
        }
        // the function id of the current function signature
        bytes4 funcId;

        // the delegate address that is being replaced or address(0) if removing functions
        address oldDelegate;

        // the length of the current function signature in _functionSignatures
        uint256 num;

        // the current character in _functionSignatures
        uint256 char;

        // the position of the current function signature in the funcSignatures array
        uint256 index;

        // the last position in the funcSignatures array
        uint256 lastIndex;

        // parse the _functionSignatures string and handle each function

        for (; pos < signaturesEnd; pos++) {
            assembly {
                char := byte(0, mload(pos))
            }
            // 0x29 == )
            if (char == 0x29) {
                pos++;
                num = (pos - start);
                start = pos;
                assembly {
                    mstore(signatures, num)
                }
                funcId = bytes4(keccak256(signatures));
                oldDelegate = delegates[funcId];
                if (_delegate == address(0)) {
                    index = funcSignatureToIndex[signatures];
                    require(index != 0, "Function does not exist.");
                    index--;
                    lastIndex = funcSignatures.length - 1;
                    if (index != lastIndex) {
                        funcSignatures[index] = funcSignatures[lastIndex];
                        funcSignatureToIndex[funcSignatures[lastIndex]] =
                            index +
                            1;
                    }
                    funcSignatures.length--;
                    delete funcSignatureToIndex[signatures];
                    delete delegates[funcId];
                    emit FunctionUpdate(
                        funcId,
                        oldDelegate,
                        address(0),
                        string(signatures)
                    );
                } else if (funcSignatureToIndex[signatures] == 0) {
                    require(oldDelegate == address(0), "FuncId clash.");
                    delegates[funcId] = _delegate;
                    funcSignatures.push(signatures);
                    funcSignatureToIndex[signatures] = funcSignatures.length;
                    emit FunctionUpdate(
                        funcId,
                        address(0),
                        _delegate,
                        string(signatures)
                    );
                } else if (delegates[funcId] != _delegate) {
                    delegates[funcId] = _delegate;
                    emit FunctionUpdate(
                        funcId,
                        oldDelegate,
                        _delegate,
                        string(signatures)
                    );

                }

                WhiteListedCaller[msg.sender][funcId] = true;

                assembly {
                    signatures := add(signatures, num)
                }

            }
        }
        emit CommitMessage(_commitMessage);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"},{"name":"_function","type":"bytes4"}],"name":"deWhiteListCaller","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_function","type":"bytes4"}],"name":"toggleFunctionWhiteListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes4"}],"name":"nonWhiteListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_delegate","type":"address"},{"name":"_functionSignatures","type":"string"},{"name":"_commitMessage","type":"string"}],"name":"updateContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes4"}],"name":"delegates","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"},{"name":"_function","type":"bytes4"}],"name":"WhiteListCaller","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_a","type":"address"}],"name":"updateBalanceDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes4"}],"name":"WhiteListedCaller","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newDelegate","type":"address"}],"name":"balanceOfDelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"message","type":"string"}],"name":"CommitMessage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"functionId","type":"bytes4"},{"indexed":true,"name":"oldDelegate","type":"address"},{"indexed":true,"name":"newDelegate","type":"address"},{"indexed":false,"name":"functionSignature","type":"string"}],"name":"FunctionUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040523480156200001157600080fd5b50604080518082018252600881527f48657263756c657300000000000000000000000000000000000000000000000060208083019182528351808501909452600484527f4845524300000000000000000000000000000000000000000000000000000000908401528151919291601291620000909160039190620002e4565b508151620000a6906004906020850190620002e4565b506005805460ff191660ff929092169190911761010060a860020a0319166101003381029190911791829055604051600160a060020a0391909204169250600091507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a362000141731a2a618f83e89efbd9c9c120ab38c1c2ec9c4e766ac1c64a71aeca0bfa14000064010000000062000147810204565b62000389565b600160a060020a0382161515620001bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254620001dc908264010000000062001c626200026882021704565b600255600160a060020a03821660009081526020819052604090205462000212908264010000000062001c626200026882021704565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082820183811015620002dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200032757805160ff191683800117855562000357565b8280016001018555821562000357579182015b82811115620003575782518255916020019190600101906200033a565b506200036592915062000369565b5090565b6200038691905b8082111562000365576000815560010162000370565b90565b6120c380620003996000396000f3fe6080604052600436106101475763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041662fdd58e81146102b157806306fdde03146102fc578063095ea7b31461038657806318160ddd146103d35780631d6800ed146103e857806323b872dd1461042d5780632d46990b14610470578063313ce567146104a457806339509351146104cf57806342966c68146105085780635b2addb614610532578063614555671461056657806370a0823114610645578063715018a6146106785780638da5cb5b1461068d5780638f32d59b146106be57806395d89b41146106d3578063a0a2daf0146106e8578063a36c9f171461071c578063a457c2d71461075f578063a9059cbb14610798578063dd54993b146107d1578063dd62ed3e14610804578063e2b0afd31461083f578063f2fde38b14610882575b60008035600160e060020a031916815260066020526040902054600160a060020a03168015156101c1576040805160e560020a62461bcd02815260206004820152601860248201527f46756e6374696f6e20646f6573206e6f742065786973742e0000000000000000604482015290519081900360640190fd5b60008035600160e060020a0319168152600b602052604090205460ff16151561028c57336000908152600a60209081526040808320600160e060020a0319843516845290915290205460ff16151560011461028c576040805160e560020a62461bcd02815260206004820152603360248201527f75736572206e6565647320746f2062652077686974656c69737420746f20747260448201527f69676765722065787465726e616c2063616c6c00000000000000000000000000606482015290519081900360840190fd5b60405136600082376000803683855af43d806000843e8180156102ad578184f35b8184fd5b3480156102bd57600080fd5b506102ea600480360360408110156102d457600080fd5b50600160a060020a0381351690602001356108b5565b60408051918252519081900360200190f35b34801561030857600080fd5b506103116109db565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561034b578181015183820152602001610333565b50505050905090810190601f1680156103785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039257600080fd5b506103bf600480360360408110156103a957600080fd5b50600160a060020a038135169060200135610a72565b604080519115158252519081900360200190f35b3480156103df57600080fd5b506102ea610a88565b3480156103f457600080fd5b5061042b6004803603604081101561040b57600080fd5b508035600160a060020a03169060200135600160e060020a031916610a8e565b005b34801561043957600080fd5b506103bf6004803603606081101561045057600080fd5b50600160a060020a03813581169160208101359091169060400135610b12565b34801561047c57600080fd5b5061042b6004803603602081101561049357600080fd5b5035600160e060020a031916610b69565b3480156104b057600080fd5b506104b9610bdf565b6040805160ff9092168252519081900360200190f35b3480156104db57600080fd5b506103bf600480360360408110156104f257600080fd5b50600160a060020a038135169060200135610be8565b34801561051457600080fd5b5061042b6004803603602081101561052b57600080fd5b5035610c24565b34801561053e57600080fd5b506103bf6004803603602081101561055557600080fd5b5035600160e060020a031916610c31565b34801561057257600080fd5b5061042b6004803603606081101561058957600080fd5b600160a060020a0382351691908101906040810160208201356401000000008111156105b457600080fd5b8201836020820111156105c657600080fd5b803590602001918460018302840111640100000000831117156105e857600080fd5b91939092909160208101903564010000000081111561060657600080fd5b82018360208201111561061857600080fd5b8035906020019184600183028401116401000000008311171561063a57600080fd5b509092509050610c46565b34801561065157600080fd5b506102ea6004803603602081101561066857600080fd5b5035600160a060020a031661154a565b34801561068457600080fd5b5061042b611565565b34801561069957600080fd5b506106a261160e565b60408051600160a060020a039092168252519081900360200190f35b3480156106ca57600080fd5b506103bf611622565b3480156106df57600080fd5b50610311611638565b3480156106f457600080fd5b506106a26004803603602081101561070b57600080fd5b5035600160e060020a031916611699565b34801561072857600080fd5b5061042b6004803603604081101561073f57600080fd5b508035600160a060020a03169060200135600160e060020a0319166116b4565b34801561076b57600080fd5b506103bf6004803603604081101561078257600080fd5b50600160a060020a03813516906020013561173b565b3480156107a457600080fd5b506103bf600480360360408110156107bb57600080fd5b50600160a060020a038135169060200135611777565b3480156107dd57600080fd5b5061042b600480360360208110156107f457600080fd5b5035600160a060020a0316611784565b34801561081057600080fd5b506102ea6004803603604081101561082757600080fd5b50600160a060020a0381358116916020013516611831565b34801561084b57600080fd5b506103bf6004803603604081101561086257600080fd5b508035600160a060020a03169060200135600160e060020a03191661185c565b34801561088e57600080fd5b5061042b600480360360208110156108a557600080fd5b5035600160a060020a031661187c565b60408051600160a060020a03808516602483015260448083018590528351808403909101815260649092018352602082018051600160e060020a03167efdd58e00000000000000000000000000000000000000000000000000000000178152600c549351835160009586946060949116928692909182918083835b6020831061094f5780518252601f199092019160209182019101610930565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146109af576040519150601f19603f3d011682016040523d82523d6000602084013e6109b4565b606091505b5080519193509150602080830191908110156109cf57600080fd5b50519695505050505050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b505050505090505b90565b6000610a7f3384846118d1565b50600192915050565b60025490565b610a96611622565b1515610ada576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b600160a060020a039091166000908152600a60209081526040808320600160e060020a0319909416835292905220805460ff19169055565b6000610b1f848484611a3e565b600160a060020a038416600090815260016020908152604080832033808552925290912054610b5f918691610b5a908663ffffffff611c0216565b6118d1565b5060019392505050565b610b71611622565b1515610bb5576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b600160e060020a0319166000908152600b60205260409020805460ff19811660ff90911615179055565b60055460ff1690565b336000818152600160209081526040808320600160a060020a03871684529091528120549091610a7f918590610b5a908663ffffffff611c6216565b610c2e3382611cc6565b50565b600b6020526000908152604090205460ff1681565b610c4e611622565b1515610c92576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b6000600160a060020a03861615610d245750843b60008111610d24576040805160e560020a62461bcd02815260206004820152603960248201527f5f64656c65676174652061646472657373206973206e6f74206120636f6e747260448201527f61637420616e64206973206e6f74206164647265737328302900000000000000606482015290519081900360840190fd5b606085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870198509596508601909401938693509150819050808080805b878a10156114d957895160001a925082602914156114ce576001968a038701808a526020808b01829020600160e060020a031981166000908152600690925260409091205498909b019a8b98909750600160a060020a0390811696509094508f161515611102576008896040518082805190602001908083835b60208310610e105780518252601f199092019160209182019101610df1565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205493505050811515610e97576040805160e560020a62461bcd02815260206004820152601860248201527f46756e6374696f6e20646f6573206e6f742065786973742e0000000000000000604482015290519081900360640190fd5b506007546000199182019101808214610f8a576007805482908110610eb857fe5b90600052602060002001600783815481101515610ed157fe5b906000526020600020019080546001816001161561010002031660029004610efa929190611eda565b50816001016008600783815481101515610f1057fe5b906000526020600020016040518082805460018160011615610100020316600290048015610f755780601f10610f53576101008083540402835291820191610f75565b820191906000526020600020905b815481529060010190602001808311610f61575b50509283525050604051908190036020019020555b6007805490610f9d906000198301611f5f565b506008896040518082805190602001908083835b60208310610fd05780518252601f199092019160209182019101610fb1565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600090556006600087600160e060020a031916600160e060020a031916815260200190815260200160002060006101000a815490600160a060020a0302191690556000600160a060020a031685600160a060020a031687600160e060020a0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110c35781810151838201526020016110ab565b50505050905090810190601f1680156110f05780820380516001836020036101000a031916815260200191505b509250505060405180910390a461149a565b6008896040518082805190602001908083835b602083106111345780518252601f199092019160209182019101611115565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205415159150611340905057600160a060020a038516156111c9576040805160e560020a62461bcd02815260206004820152600d60248201527f46756e63496420636c6173682e00000000000000000000000000000000000000604482015290519081900360640190fd5b8e6006600088600160e060020a031916600160e060020a031916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055506007899080600181540180825580915050906001820390600052602060002001600090919290919091509080519060200190611252929190611f88565b50506007546040518a516008918c91819060208401908083835b6020831061128b5780518252601f19909201916020918201910161126c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020819055508e600160a060020a03166000600160a060020a031687600160e060020a0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c604051808060200182810382528381815181526020019150805190602001908083836000838110156110c35781810151838201526020016110ab565b8e600160a060020a03166006600088600160e060020a031916600160e060020a031916815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a031614151561149a578e6006600088600160e060020a031916600160e060020a031916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055508e600160a060020a031685600160a060020a031687600160e060020a0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561145f578181015183820152602001611447565b50505050905090810190601f16801561148c5780820380516001836020036101000a031916815260200191505b509250505060405180910390a45b336000908152600a60209081526040808320600160e060020a03198a1684529091529020805460ff19166001179055978301975b600190990198610d77565b7faa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de8c8c60405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a1505050505050505050505050505050565b600160a060020a031660009081526020819052604090205490565b61156d611622565b15156115b1576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b6005546040516000916101009004600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6005546101009004600160a060020a031690565b6005546101009004600160a060020a0316331490565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a675780601f10610a3c57610100808354040283529160200191610a67565b600660205260009081526040902054600160a060020a031681565b6116bc611622565b1515611700576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b600160a060020a039091166000908152600a60209081526040808320600160e060020a0319909416835292905220805460ff19166001179055565b336000818152600160209081526040808320600160a060020a03871684529091528120549091610a7f918590610b5a908663ffffffff611c0216565b6000610a7f338484611a3e565b61178c611622565b15156117d0576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b600c8054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fc80ec255189b7b91d3801bdc57e87dfe3b41f3e5f283fca32d5ee295dc68c6239181900360200190a150565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b600a60209081526000928352604080842090915290825290205460ff1681565b611884611622565b15156118c8576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b610c2e81611de0565b600160a060020a0383161515611956576040805160e560020a62461bcd028152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03821615156119dc576040805160e560020a62461bcd02815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600160a060020a0383161515611ac4576040805160e560020a62461bcd02815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382161515611b4a576040805160e560020a62461bcd02815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038316600090815260208190526040902054611b73908263ffffffff611c0216565b600160a060020a038085166000908152602081905260408082209390935590841681522054611ba8908263ffffffff611c6216565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115611c5c576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611cbf576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600160a060020a0382161515611d4c576040805160e560020a62461bcd02815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600254611d5f908263ffffffff611c0216565b600255600160a060020a038216600090815260208190526040902054611d8b908263ffffffff611c0216565b600160a060020a038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b600160a060020a0381161515611e66576040805160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600554604051600160a060020a0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360058054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611f135780548555611f4f565b82800160010185558215611f4f57600052602060002091601f016020900482015b82811115611f4f578254825591600101919060010190611f34565b50611f5b929150611ff6565b5090565b815481835581811115611f8357600083815260209020611f83918101908301612010565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fc957805160ff1916838001178555611f4f565b82800160010185558215611f4f579182015b82811115611f4f578251825591602001919060010190611fdb565b610a6f91905b80821115611f5b5760008155600101611ffc565b610a6f91905b80821115611f5b57600061202a8282612033565b50600101612016565b50805460018160011615610100020316600290046000825580601f106120595750610c2e565b601f016020900490600052602060002090810190610c2e9190611ff656fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a165627a7a7230582028b8fc82feb2e9e69149cbfb325fd08956f995be40e29c985a7cce5ea75d34b10029

Deployed Bytecode

0x6080604052600436106101475763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041662fdd58e81146102b157806306fdde03146102fc578063095ea7b31461038657806318160ddd146103d35780631d6800ed146103e857806323b872dd1461042d5780632d46990b14610470578063313ce567146104a457806339509351146104cf57806342966c68146105085780635b2addb614610532578063614555671461056657806370a0823114610645578063715018a6146106785780638da5cb5b1461068d5780638f32d59b146106be57806395d89b41146106d3578063a0a2daf0146106e8578063a36c9f171461071c578063a457c2d71461075f578063a9059cbb14610798578063dd54993b146107d1578063dd62ed3e14610804578063e2b0afd31461083f578063f2fde38b14610882575b60008035600160e060020a031916815260066020526040902054600160a060020a03168015156101c1576040805160e560020a62461bcd02815260206004820152601860248201527f46756e6374696f6e20646f6573206e6f742065786973742e0000000000000000604482015290519081900360640190fd5b60008035600160e060020a0319168152600b602052604090205460ff16151561028c57336000908152600a60209081526040808320600160e060020a0319843516845290915290205460ff16151560011461028c576040805160e560020a62461bcd02815260206004820152603360248201527f75736572206e6565647320746f2062652077686974656c69737420746f20747260448201527f69676765722065787465726e616c2063616c6c00000000000000000000000000606482015290519081900360840190fd5b60405136600082376000803683855af43d806000843e8180156102ad578184f35b8184fd5b3480156102bd57600080fd5b506102ea600480360360408110156102d457600080fd5b50600160a060020a0381351690602001356108b5565b60408051918252519081900360200190f35b34801561030857600080fd5b506103116109db565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561034b578181015183820152602001610333565b50505050905090810190601f1680156103785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039257600080fd5b506103bf600480360360408110156103a957600080fd5b50600160a060020a038135169060200135610a72565b604080519115158252519081900360200190f35b3480156103df57600080fd5b506102ea610a88565b3480156103f457600080fd5b5061042b6004803603604081101561040b57600080fd5b508035600160a060020a03169060200135600160e060020a031916610a8e565b005b34801561043957600080fd5b506103bf6004803603606081101561045057600080fd5b50600160a060020a03813581169160208101359091169060400135610b12565b34801561047c57600080fd5b5061042b6004803603602081101561049357600080fd5b5035600160e060020a031916610b69565b3480156104b057600080fd5b506104b9610bdf565b6040805160ff9092168252519081900360200190f35b3480156104db57600080fd5b506103bf600480360360408110156104f257600080fd5b50600160a060020a038135169060200135610be8565b34801561051457600080fd5b5061042b6004803603602081101561052b57600080fd5b5035610c24565b34801561053e57600080fd5b506103bf6004803603602081101561055557600080fd5b5035600160e060020a031916610c31565b34801561057257600080fd5b5061042b6004803603606081101561058957600080fd5b600160a060020a0382351691908101906040810160208201356401000000008111156105b457600080fd5b8201836020820111156105c657600080fd5b803590602001918460018302840111640100000000831117156105e857600080fd5b91939092909160208101903564010000000081111561060657600080fd5b82018360208201111561061857600080fd5b8035906020019184600183028401116401000000008311171561063a57600080fd5b509092509050610c46565b34801561065157600080fd5b506102ea6004803603602081101561066857600080fd5b5035600160a060020a031661154a565b34801561068457600080fd5b5061042b611565565b34801561069957600080fd5b506106a261160e565b60408051600160a060020a039092168252519081900360200190f35b3480156106ca57600080fd5b506103bf611622565b3480156106df57600080fd5b50610311611638565b3480156106f457600080fd5b506106a26004803603602081101561070b57600080fd5b5035600160e060020a031916611699565b34801561072857600080fd5b5061042b6004803603604081101561073f57600080fd5b508035600160a060020a03169060200135600160e060020a0319166116b4565b34801561076b57600080fd5b506103bf6004803603604081101561078257600080fd5b50600160a060020a03813516906020013561173b565b3480156107a457600080fd5b506103bf600480360360408110156107bb57600080fd5b50600160a060020a038135169060200135611777565b3480156107dd57600080fd5b5061042b600480360360208110156107f457600080fd5b5035600160a060020a0316611784565b34801561081057600080fd5b506102ea6004803603604081101561082757600080fd5b50600160a060020a0381358116916020013516611831565b34801561084b57600080fd5b506103bf6004803603604081101561086257600080fd5b508035600160a060020a03169060200135600160e060020a03191661185c565b34801561088e57600080fd5b5061042b600480360360208110156108a557600080fd5b5035600160a060020a031661187c565b60408051600160a060020a03808516602483015260448083018590528351808403909101815260649092018352602082018051600160e060020a03167efdd58e00000000000000000000000000000000000000000000000000000000178152600c549351835160009586946060949116928692909182918083835b6020831061094f5780518252601f199092019160209182019101610930565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146109af576040519150601f19603f3d011682016040523d82523d6000602084013e6109b4565b606091505b5080519193509150602080830191908110156109cf57600080fd5b50519695505050505050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b505050505090505b90565b6000610a7f3384846118d1565b50600192915050565b60025490565b610a96611622565b1515610ada576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b600160a060020a039091166000908152600a60209081526040808320600160e060020a0319909416835292905220805460ff19169055565b6000610b1f848484611a3e565b600160a060020a038416600090815260016020908152604080832033808552925290912054610b5f918691610b5a908663ffffffff611c0216565b6118d1565b5060019392505050565b610b71611622565b1515610bb5576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b600160e060020a0319166000908152600b60205260409020805460ff19811660ff90911615179055565b60055460ff1690565b336000818152600160209081526040808320600160a060020a03871684529091528120549091610a7f918590610b5a908663ffffffff611c6216565b610c2e3382611cc6565b50565b600b6020526000908152604090205460ff1681565b610c4e611622565b1515610c92576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b6000600160a060020a03861615610d245750843b60008111610d24576040805160e560020a62461bcd02815260206004820152603960248201527f5f64656c65676174652061646472657373206973206e6f74206120636f6e747260448201527f61637420616e64206973206e6f74206164647265737328302900000000000000606482015290519081900360840190fd5b606085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870198509596508601909401938693509150819050808080805b878a10156114d957895160001a925082602914156114ce576001968a038701808a526020808b01829020600160e060020a031981166000908152600690925260409091205498909b019a8b98909750600160a060020a0390811696509094508f161515611102576008896040518082805190602001908083835b60208310610e105780518252601f199092019160209182019101610df1565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205493505050811515610e97576040805160e560020a62461bcd02815260206004820152601860248201527f46756e6374696f6e20646f6573206e6f742065786973742e0000000000000000604482015290519081900360640190fd5b506007546000199182019101808214610f8a576007805482908110610eb857fe5b90600052602060002001600783815481101515610ed157fe5b906000526020600020019080546001816001161561010002031660029004610efa929190611eda565b50816001016008600783815481101515610f1057fe5b906000526020600020016040518082805460018160011615610100020316600290048015610f755780601f10610f53576101008083540402835291820191610f75565b820191906000526020600020905b815481529060010190602001808311610f61575b50509283525050604051908190036020019020555b6007805490610f9d906000198301611f5f565b506008896040518082805190602001908083835b60208310610fd05780518252601f199092019160209182019101610fb1565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600090556006600087600160e060020a031916600160e060020a031916815260200190815260200160002060006101000a815490600160a060020a0302191690556000600160a060020a031685600160a060020a031687600160e060020a0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110c35781810151838201526020016110ab565b50505050905090810190601f1680156110f05780820380516001836020036101000a031916815260200191505b509250505060405180910390a461149a565b6008896040518082805190602001908083835b602083106111345780518252601f199092019160209182019101611115565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205415159150611340905057600160a060020a038516156111c9576040805160e560020a62461bcd02815260206004820152600d60248201527f46756e63496420636c6173682e00000000000000000000000000000000000000604482015290519081900360640190fd5b8e6006600088600160e060020a031916600160e060020a031916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055506007899080600181540180825580915050906001820390600052602060002001600090919290919091509080519060200190611252929190611f88565b50506007546040518a516008918c91819060208401908083835b6020831061128b5780518252601f19909201916020918201910161126c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020819055508e600160a060020a03166000600160a060020a031687600160e060020a0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c604051808060200182810382528381815181526020019150805190602001908083836000838110156110c35781810151838201526020016110ab565b8e600160a060020a03166006600088600160e060020a031916600160e060020a031916815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a031614151561149a578e6006600088600160e060020a031916600160e060020a031916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055508e600160a060020a031685600160a060020a031687600160e060020a0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561145f578181015183820152602001611447565b50505050905090810190601f16801561148c5780820380516001836020036101000a031916815260200191505b509250505060405180910390a45b336000908152600a60209081526040808320600160e060020a03198a1684529091529020805460ff19166001179055978301975b600190990198610d77565b7faa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de8c8c60405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a1505050505050505050505050505050565b600160a060020a031660009081526020819052604090205490565b61156d611622565b15156115b1576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b6005546040516000916101009004600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6005546101009004600160a060020a031690565b6005546101009004600160a060020a0316331490565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a675780601f10610a3c57610100808354040283529160200191610a67565b600660205260009081526040902054600160a060020a031681565b6116bc611622565b1515611700576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b600160a060020a039091166000908152600a60209081526040808320600160e060020a0319909416835292905220805460ff19166001179055565b336000818152600160209081526040808320600160a060020a03871684529091528120549091610a7f918590610b5a908663ffffffff611c0216565b6000610a7f338484611a3e565b61178c611622565b15156117d0576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b600c8054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fc80ec255189b7b91d3801bdc57e87dfe3b41f3e5f283fca32d5ee295dc68c6239181900360200190a150565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b600a60209081526000928352604080842090915290825290205460ff1681565b611884611622565b15156118c8576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612078833981519152604482015290519081900360640190fd5b610c2e81611de0565b600160a060020a0383161515611956576040805160e560020a62461bcd028152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03821615156119dc576040805160e560020a62461bcd02815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600160a060020a0383161515611ac4576040805160e560020a62461bcd02815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382161515611b4a576040805160e560020a62461bcd02815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038316600090815260208190526040902054611b73908263ffffffff611c0216565b600160a060020a038085166000908152602081905260408082209390935590841681522054611ba8908263ffffffff611c6216565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115611c5c576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611cbf576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600160a060020a0382161515611d4c576040805160e560020a62461bcd02815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600254611d5f908263ffffffff611c0216565b600255600160a060020a038216600090815260208190526040902054611d8b908263ffffffff611c0216565b600160a060020a038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b600160a060020a0381161515611e66576040805160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600554604051600160a060020a0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360058054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611f135780548555611f4f565b82800160010185558215611f4f57600052602060002091601f016020900482015b82811115611f4f578254825591600101919060010190611f34565b50611f5b929150611ff6565b5090565b815481835581811115611f8357600083815260209020611f83918101908301612010565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fc957805160ff1916838001178555611f4f565b82800160010185558215611f4f579182015b82811115611f4f578251825591602001919060010190611fdb565b610a6f91905b80821115611f5b5760008155600101611ffc565b610a6f91905b80821115611f5b57600061202a8282612033565b50600101612016565b50805460018160011615610100020316600290046000825580601f106120595750610c2e565b601f016020900490600052602060002090810190610c2e9190611ff656fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a165627a7a7230582028b8fc82feb2e9e69149cbfb325fd08956f995be40e29c985a7cce5ea75d34b10029

Deployed Bytecode Sourcemap

22162:7722:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23697:16;23726:7;;-1:-1:-1;;;;;;23726:7:0;23716:18;;:9;:18;;;;;;-1:-1:-1;;;;;23716:18:0;23755:22;;;23747:59;;;;;-1:-1:-1;;;;;23747:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23823:23;23838:7;;-1:-1:-1;;;;;;23838:7:0;23823:23;;:14;:23;;;;;;;;:32;;23819:224;;23916:10;23898:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;;23928:7:0;;;23898:38;;;;;;;;;;:46;;:38;:46;23872:159;;;;;-1:-1:-1;;;;;23872:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24096:4;24090:11;24136:12;24133:1;24128:3;24115:34;24227:1;24224;24210:12;24205:3;24195:8;24190:3;24177:52;24255:14;24306:4;24303:1;24298:3;24283:28;24332:6;24356:66;;;;24483:4;24478:3;24471:17;24356:66;24398:4;24393:3;24386:17;23340:312;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23340:312:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23340:312:0;;;;;;;;;;;;;;;;;;;;;;;;;21138:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21138:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;21138:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14916:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14916:148:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14916:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13939:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13939:91:0;;;;22954:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22954:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22954:133:0;;-1:-1:-1;;;;;22954:133:0;;;;;-1:-1:-1;;;;;;22954:133:0;;;;;15535:256;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15535:256:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15535:256:0;;;;;;;;;;;;;;;;;;23095:146;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23095:146:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23095:146:0;-1:-1:-1;;;;;;23095:146:0;;;21996:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21996:83:0;;;;;;;;;;;;;;;;;;;;;;;16200:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16200:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;16200:206:0;;;;;;;;;23249:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23249:83:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23249:83:0;;;22353:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22353:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22353:45:0;-1:-1:-1;;;;;;22353:45:0;;;25313:4568;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25313:4568:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;25313:4568:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;25313:4568:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25313:4568:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;25313:4568:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;25313:4568:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25313:4568:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;25313:4568:0;;-1:-1:-1;25313:4568:0;-1:-1:-1;25313:4568:0;;14093:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14093:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14093:110:0;-1:-1:-1;;;;;14093:110:0;;;1710:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1710:140:0;;;;899:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;899:79:0;;;;;;;;-1:-1:-1;;;;;899:79:0;;;;;;;;;;;;;;1265:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1265:92:0;;;;21340:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21340:87:0;;;;5266:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5266:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5266:43:0;-1:-1:-1;;;;;;5266:43:0;;;22818:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22818:130:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22818:130:0;;-1:-1:-1;;;;;22818:130:0;;;;;-1:-1:-1;;;;;;22818:130:0;;;16909:216;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16909:216:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;16909:216:0;;;;;;;;;14416:156;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14416:156:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14416:156:0;;;;;;;;;22665:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22665:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22665:147:0;-1:-1:-1;;;;;22665:147:0;;;14635:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14635:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14635:134:0;;;;;;;;;;;22276:68;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22276:68:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22276:68:0;;-1:-1:-1;;;;;22276:68:0;;;;;-1:-1:-1;;;;;;22276:68:0;;;2005:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2005:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2005:109:0;-1:-1:-1;;;;;2005:109:0;;;23340:312;23446:46;;;-1:-1:-1;;;;;23446:46:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23446:46:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;23446:46:0;179:29:-1;160:49;;23560:17:0;;:39;;;;23403:7;;;;23423:20;;23560:17;;;23446:46;;23560:39;;;;;;25:18:-1;36:153;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;23560:39:0;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;-1:-1;23617:27:0;;23548:51;;-1:-1:-1;23548:51:0;-1:-1:-1;23617:27:0;;;;;;5:11:-1;;2:2;;;29:1;26;19:12;2:2;-1:-1;23617:27:0;;23340:312;-1:-1:-1;;;;;;23340:312:0:o;21138:83::-;21208:5;21201:12;;;;;;;;-1:-1:-1;;21201:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21175:13;;21201:12;;21208:5;;21201:12;;21208:5;21201:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21138:83;;:::o;14916:148::-;14981:4;14998:36;15007:10;15019:7;15028:5;14998:8;:36::i;:::-;-1:-1:-1;15052:4:0;14916:148;;;;:::o;13939:91::-;14010:12;;13939:91;:::o;22954:133::-;1111:9;:7;:9::i;:::-;1103:54;;;;;;;-1:-1:-1;;;;;1103:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1103:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23040:20:0;;;23074:5;23040:20;;;:17;:20;;;;;;;;-1:-1:-1;;;;;;23040:31:0;;;;;;;;;:39;;-1:-1:-1;;23040:39:0;;;22954:133::o;15535:256::-;15624:4;15641:36;15651:6;15659:9;15670:6;15641:9;:36::i;:::-;-1:-1:-1;;;;;15717:19:0;;;;;;:11;:19;;;;;;;;15705:10;15717:31;;;;;;;;;15688:73;;15697:6;;15717:43;;15753:6;15717:43;:35;:43;:::i;:::-;15688:8;:73::i;:::-;-1:-1:-1;15779:4:0;15535:256;;;;;:::o;23095:146::-;1111:9;:7;:9::i;:::-;1103:54;;;;;;;-1:-1:-1;;;;;1103:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1103:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23208:25:0;;;;;:14;:25;;;;;;;-1:-1:-1;;23179:54:0;;23208:25;;;;23207:26;23179:54;;;23095:146::o;21996:83::-;22062:9;;;;21996:83;:::o;16200:206::-;16306:10;16280:4;16327:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16327:32:0;;;;;;;;;;16280:4;;16297:79;;16318:7;;16327:48;;16364:10;16327:48;:36;:48;:::i;23249:83::-;23298:26;23304:10;23316:7;23298:5;:26::i;:::-;23249:83;:::o;22353:45::-;;;;;;;;;;;;;;;:::o;25313:4568::-;1111:9;:7;:9::i;:::-;1103:54;;;;;;;-1:-1:-1;;;;;1103:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1103:54:0;;;;;;;;;;;;;;;25851:11;-1:-1:-1;;;;;25879:23:0;;;25875:268;;-1:-1:-1;25954:22:0;;26037:1;26031:7;;26005:126;;;;;-1:-1:-1;;;;;26005:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26214:23;26246:19;;26214:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;26617:17:0;;26548:2;26532:19;;;;-1:-1:-1;26214:52:0;;-1:-1:-1;26608:27:0;;;;;;26532:19;;-1:-1:-1;99:1;-1:-1;99:1;;-1:-1;99:1;;;;27331:2498:0;27344:13;27338:3;:19;27331:2498;;;27431:3;27425:10;27422:1;27417:19;27409:27;;27495:4;27503;27495:12;27491:2327;;;27528:5;27559:11;;;;;27652:23;;;27728:21;;;;;;;-1:-1:-1;;;;;;27783:17:0;;;;;;:9;:17;;;;;;;;27528:5;;;;;;;27728:21;;-1:-1:-1;;;;;;27783:17:0;;;;-1:-1:-1;27559:11:0;;-1:-1:-1;27823:23:0;;;27819:1812;;;27879:20;27900:10;27879:32;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;27879:32:0;;;;;-1:-1:-1;27879:32:0;;;;;;;;;;;;-1:-1:-1;;;27942:10:0;;;27934:47;;;;;-1:-1:-1;;;;;27934:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28046:14:0;:21;-1:-1:-1;;28004:7:0;;;;28046:25;28098:18;;;28094:268;;28169:14;:25;;28184:9;;28169:25;;;;;;;;;;;;;28145:14;28160:5;28145:21;;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28300:5;28337:1;28300:38;28221:20;28242:14;28257:9;28242:25;;;;;;;;;;;;;;;;;28221:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28221:47:0;;;-1:-1:-1;;28221:47:0;;;;;;;;;;:117;28094:268;28384:14;:23;;;;;-1:-1:-1;;28384:23:0;;;:::i;:::-;;28437:20;28458:10;28437:32;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28437:32:0;;;;;;;;;;;;;;;;;;;;;28430:39;;;28499:9;:17;28509:6;-1:-1:-1;;;;;28499:17:0;;-1:-1:-1;;;;;28499:17:0;;;;;;;;;;;;;;28492:24;;;;;-1:-1:-1;;;;;28492:24:0;;;;;28664:1;-1:-1:-1;;;;;28544:190:0;28618:11;-1:-1:-1;;;;;28544:190:0;28585:6;-1:-1:-1;;;;;28544:190:0;;;28700:10;28544:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28544:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27819:1812;;;28764:20;28785:10;28764:32;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28764:32:0;;;;;-1:-1:-1;28764:32:0;;;;;;;;;;;:37;28760:871;;-1:-1:-1;28760:871:0;;-1:-1:-1;28760:871:0;-1:-1:-1;;;;;28834:25:0;;;28826:51;;;;;-1:-1:-1;;;;;28826:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28920:9;28900;:17;28910:6;-1:-1:-1;;;;;28900:17:0;;-1:-1:-1;;;;;28900:17:0;;;;;;;;;;;;;;:29;;;;;-1:-1:-1;;;;;28900:29:0;;;;;-1:-1:-1;;;;;28900:29:0;;;;;;28952:14;28972:10;28952:31;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;28952:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;29041:14:0;:21;29006:32;;;;:20;;29027:10;;29006:32;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;29006:32:0;;;;;;;;;;;;;;;;;;;;;:56;;;;29201:9;-1:-1:-1;;;;;29090:188:0;29172:1;-1:-1:-1;;;;;29090:188:0;29131:6;-1:-1:-1;;;;;29090:188:0;;;29244:10;29090:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;28760:871:0;29329:9;-1:-1:-1;;;;;29308:30:0;:9;:17;29318:6;-1:-1:-1;;;;;29308:17:0;;-1:-1:-1;;;;;29308:17:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29308:17:0;-1:-1:-1;;;;;29308:30:0;;;29304:327;;;29383:9;29363;:17;29373:6;-1:-1:-1;;;;;29363:17:0;;-1:-1:-1;;;;;29363:17:0;;;;;;;;;;;;;;:29;;;;;-1:-1:-1;;;;;29363:29:0;;;;;-1:-1:-1;;;;;29363:29:0;;;;;;29532:9;-1:-1:-1;;;;;29420:189:0;29494:11;-1:-1:-1;;;;;29420:189:0;29461:6;-1:-1:-1;;;;;29420:189:0;;;29575:10;29420:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29420:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29304:327;29669:10;29651:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;;29651:37:0;;;;;;;;;:44;;-1:-1:-1;;29651:44:0;29691:4;29651:44;;;29762:20;;;;29725:76;27359:5;;;;;27331:2498;;;29844:29;29858:14;;29844:29;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;29844:29:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;29844:29:0;;;;-1:-1:-1;29844:29:0;;-1:-1:-1;;;;29844:29:0;1168:1;;;;;;;;;;25313:4568;;;;;:::o;14093:110::-;-1:-1:-1;;;;;14177:18:0;14150:7;14177:18;;;;;;;;;;;;14093:110::o;1710:140::-;1111:9;:7;:9::i;:::-;1103:54;;;;;;;-1:-1:-1;;;;;1103:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1103:54:0;;;;;;;;;;;;;;;1793:6;;1772:40;;1809:1;;1793:6;;;-1:-1:-1;;;;;1793:6:0;;1772:40;;1809:1;;1772:40;1823:6;:19;;-1:-1:-1;;1823:19:0;;;1710:140::o;899:79::-;964:6;;;;;-1:-1:-1;;;;;964:6:0;;899:79::o;1265:92::-;1343:6;;;;;-1:-1:-1;;;;;1343:6:0;1329:10;:20;;1265:92::o;21340:87::-;21412:7;21405:14;;;;;;;;-1:-1:-1;;21405:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21379:13;;21405:14;;21412:7;;21405:14;;21412:7;21405:14;;;;;;;;;;;;;;;;;;;;;;;;5266:43;;;;;;;;;;;;-1:-1:-1;;;;;5266:43:0;;:::o;22818:130::-;1111:9;:7;:9::i;:::-;1103:54;;;;;;;-1:-1:-1;;;;;1103:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1103:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22902:20:0;;;;;;;:17;:20;;;;;;;;-1:-1:-1;;;;;;22902:31:0;;;;;;;;;:38;;-1:-1:-1;;22902:38:0;22936:4;22902:38;;;22818:130::o;16909:216::-;17020:10;16994:4;17041:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17041:32:0;;;;;;;;;;16994:4;;17011:84;;17032:7;;17041:53;;17078:15;17041:53;:36;:53;:::i;14416:156::-;14485:4;14502:40;14512:10;14524:9;14535:6;14502:9;:40::i;22665:147::-;1111:9;:7;:9::i;:::-;1103:54;;;;;;;-1:-1:-1;;;;;1103:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1103:54:0;;;;;;;;;;;;;;;22738:17;:22;;-1:-1:-1;;;;;22738:22:0;;-1:-1:-1;;22738:22:0;;;;;;;;22776:28;;;;;;;;;;;;;;;;22665:147;:::o;14635:134::-;-1:-1:-1;;;;;14734:18:0;;;14707:7;14734:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14635:134::o;22276:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2005:109::-;1111:9;:7;:9::i;:::-;1103:54;;;;;;;-1:-1:-1;;;;;1103:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1103:54:0;;;;;;;;;;;;;;;2078:28;2097:8;2078:18;:28::i;19711:335::-;-1:-1:-1;;;;;19804:19:0;;;;19796:68;;;;;-1:-1:-1;;;;;19796:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19883:21:0;;;;19875:68;;;;;-1:-1:-1;;;;;19875:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19956:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;20007:31;;;;;;;;;;;;;;;;;19711:335;;;:::o;17615:429::-;-1:-1:-1;;;;;17713:20:0;;;;17705:70;;;;;-1:-1:-1;;;;;17705:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17794:23:0;;;;17786:71;;;;;-1:-1:-1;;;;;17786:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17890:17:0;;:9;:17;;;;;;;;;;;:29;;17912:6;17890:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;17870:17:0;;;:9;:17;;;;;;;;;;;:49;;;;17953:20;;;;;;;:32;;17978:6;17953:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;17930:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;18001:35;;;;;;;17930:20;;18001:35;;;;;;;;;;;;;17615:429;;;:::o;10061:184::-;10119:7;10147:6;;;;10139:49;;;;;-1:-1:-1;;;;;10139:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10211:5:0;;;10061:184::o;9605:181::-;9663:7;9695:5;;;9719:6;;;;9711:46;;;;;-1:-1:-1;;;;;9711:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9777:1;9605:181;-1:-1:-1;;;9605:181:0:o;18965:306::-;-1:-1:-1;;;;;19040:21:0;;;;19032:67;;;;;-1:-1:-1;;;;;19032:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19127:12;;:23;;19144:5;19127:23;:16;:23;:::i;:::-;19112:12;:38;-1:-1:-1;;;;;19182:18:0;;:9;:18;;;;;;;;;;;:29;;19205:5;19182:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;19161:18:0;;:9;:18;;;;;;;;;;;:50;;;;19227:36;;;;;;;19161:9;;19227:36;;;;;;;;;;;18965:306;;:::o;2220:229::-;-1:-1:-1;;;;;2294:22:0;;;;2286:73;;;;;-1:-1:-1;;;;;2286:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2396:6;;2375:38;;-1:-1:-1;;;;;2375:38:0;;;;2396:6;;;;;2375:38;;;;;2424:6;:17;;-1:-1:-1;;;;;2424:17:0;;;;;-1:-1:-1;;2424:17:0;;;;;;;;;2220:229::o;22162:7722::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22162:7722:0;;;-1:-1:-1;22162:7722:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i

Swarm Source

bzzr://28b8fc82feb2e9e69149cbfb325fd08956f995be40e29c985a7cce5ea75d34b1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.