GLMR Price: $0.021136 (-2.05%)

Contract

0xd1a891E6eCcB7471Ebd6Bc352F57150d4365dB21

Overview

GLMR Balance

Moonbeam Chain LogoMoonbeam Chain LogoMoonbeam Chain Logo0 GLMR

GLMR Value

$0.00

More Info

Private Name Tags

Transaction Hash
Block
From
To
Init27412142023-01-16 9:27:241104 days ago1673861244IN
0xd1a891E6...d4365dB21
0 GLMR0.01948586102.5

View more zero value Internal Transactions in Advanced View mode

Cross-Chain Transactions
Loading...
Loading

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

Contract Name:
AnyswapV6ERC20_XC20Wrapper

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2023-01-16
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity ^0.8.10;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

/// @title Extension of the ERC20 interface that allows an owner
/// @dev Contract to pilot the ERC20 contract.
interface LocalAsset {
    /// @dev Mint tokens to an address
    /// @custom:selector 40c10f19
    /// @param to address The address to which you want to mint tokens
    /// @param value uint256 the amount of tokens to be minted
    function mint(address to, uint256 value) external returns (bool);

    /// @dev Burn tokens from an address
    /// @custom:selector 9dc29fac
    /// @param from address The address from which you want to burn tokens
    /// @param value uint256 the amount of tokens to be burnt
    function burn(address from, uint256 value) external returns (bool);

    /// @dev Freeze an account, preventing it from operating with the asset
    /// @custom:selector 8d1fdf2f
    /// @param account address The address that you want to freeze
    function freeze(address account) external returns (bool);

    /// @dev Unfreeze an account, letting it from operating againt with the asset
    /// @custom:selector 5ea20216
    /// @param account address The address that you want to unfreeze
    function thaw(address account) external returns (bool);

    /// @dev Freeze the entire asset operations
    /// @custom:selector d4937f51
    function freezeAsset() external returns (bool);

    /// @custom:selector 6b8751c1 (version before v0.26.0)
    function freeze_asset() external returns (bool);

    /// @dev Unfreeze the entire asset operations
    /// @custom:selector 51ec2ad7
    function thawAsset() external returns (bool);

    /// @custom:selector 1cddec19 (version before v0.26.0)
    function thaw_asset() external returns (bool);

    /// @dev Transfer the ownership of an asset to a new account
    /// @custom:selector f2fde38b
    /// @param owner address The address of the new owner
    function transferOwnership(address owner) external returns (bool);

    /// @custom:selector f0350c04 (version before v0.26.0)
    function transfer_ownership(address owner) external returns (bool);

    /// @dev Specify the issuer, admin and freezer of an asset
    /// @custom:selector c7d93c59
    /// @param issuer address The address capable of issuing tokens
    /// @param admin address The address capable of burning tokens and unfreezing accounts/assets
    /// @param freezer address The address capable of freezing accounts/asset
    function setTeam(
        address issuer,
        address admin,
        address freezer
    ) external returns (bool);

    /// @custom:selector f8bf8e95 (version before v0.26.0)
    function set_team(
        address issuer,
        address admin,
        address freezer
    ) external returns (bool);

    /// @dev Specify the name, symbol and decimals of your asset
    /// @custom:selector 37d2c2f4
    /// @param name string The name of the asset
    /// @param symbol string The symbol of the asset
    /// @param decimals uint8 The number of decimals of your asset
    function setMetadata(
        string calldata name,
        string calldata symbol,
        uint8 decimals
    ) external returns (bool);

    /// @custom:selector ee5dc1e4 (version before v0.26.0)
    function set_metadata(
        string calldata name,
        string calldata symbol,
        uint8 decimals
    ) external returns (bool);

    /// @dev Clear the name, symbol and decimals of your asset
    /// @custom:selector efb6d432
    function clearMetadata() external returns (bool);

    /// @custom:selector d3ba4b9e (version before v0.26.0)
    function clear_metadata() external returns (bool);
}

interface IXC20 is IERC20, LocalAsset {}

library SafeERC20 {
    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(
            address(token).code.length > 0,
            "SafeERC20: call to non-contract"
        );

        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) {
            // Return data is optional
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

// TokenType token type enumerations
// When in `need approve` situations, the user should approve to this wrapper contract,
// not to the Router contract, and not to the target token to be wrapped.
// If not, this wrapper will fail its function.
enum TokenType {
    MintBurnAny, // mint and burn(address from, uint256 amount), don't need approve
    MintBurnFrom, // mint and burnFrom(address from, uint256 amount), need approve
    MintBurnSelf, // mint and burn(uint256 amount), call transferFrom first, need approve
    Transfer, // transfer and transferFrom, need approve
    TransferDeposit, // transfer and transferFrom, deposit and withdraw, need approve, block when lack of liquidity
    TransferDeposit2 // transfer and transferFrom, deposit and withdraw, need approve, don't block when lack of liquidity
}

// deploy steps:
// 1. deploy this contract
// 2. retrieve or register xc20 token
//      set owner to this contract for mintable xc20, or
//      set issuer and admin to this contract for external xc20
// 3. call init() function of this contract
contract AnyswapV6ERC20_XC20Wrapper is IERC20 {
    using SafeERC20 for IERC20;
    string public name;
    string public symbol;
    uint8 public decimals;

    // impl MintBurnWrapper of `token()` and `tokenType()` interface
    TokenType public tokenType;
    address public token; // the target token this contract is wrapping

    /// @dev Records amount of AnyswapV6ERC20 token owned by account.
    mapping(address => uint256) public override balanceOf;
    uint256 private _totalSupply;

    // init flag for setting immediate vault, needed for CREATE2 support
    bool private _init;

    // flag to enable/disable swapout vs vault.burn so multiple events are triggered
    bool private _vaultOnly;

    // delay for timelock functions
    uint256 public constant DELAY = 2 days;

    // set of minters, can be this bridge or other bridges
    mapping(address => bool) public isMinter;
    address[] public minters;

    // primary controller of the token contract
    address public vault;

    address public pendingMinter;
    uint256 public delayMinter;

    modifier onlyAuth() {
        require(isMinter[msg.sender], "onlyAuth");
        _;
    }

    modifier onlyVault() {
        require(msg.sender == vault, "onlyVault");
        _;
    }

    modifier onlyMintableXC20() {
        require(isMintableXC20(), "onlyMintableXC20");
        _;
    }

    modifier onlyExternalXC20() {
        require(!isMintableXC20(), "onlyExternalXC20");
        _;
    }

    function isMintableXC20() public view returns (bool) {
        return tokenType == TokenType.MintBurnAny;
    }

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

    function mpc() external view returns (address) {
        return vault;
    }

    function setVaultOnly(bool enabled) external onlyVault {
        _vaultOnly = enabled;
    }

    function setMinter(address _auth) external onlyVault {
        require(_auth != address(0), "zero address");
        pendingMinter = _auth;
        delayMinter = block.timestamp + DELAY;
    }

    function applyMinter() external onlyVault {
        require(pendingMinter != address(0) && block.timestamp >= delayMinter);
        isMinter[pendingMinter] = true;
        minters.push(pendingMinter);

        pendingMinter = address(0);
        delayMinter = 0;
    }

    // No time delay revoke minter emergency function
    function revokeMinter(address _auth) external onlyVault {
        isMinter[_auth] = false;
    }

    function getAllMinters() external view returns (address[] memory) {
        return minters;
    }

    function changeVault(address newVault) external onlyVault returns (bool) {
        require(newVault != address(0), "zero address");
        emit LogChangeVault(vault, newVault, block.timestamp);
        vault = newVault;
        return true;
    }

    function mint(address to, uint256 amount) external onlyAuth returns (bool) {
        _swapin(to, amount);
        return true;
    }

    function burn(address from, uint256 amount)
        external
        onlyAuth
        returns (bool)
    {
        _swapout(from, amount);
        return true;
    }

    function Swapin(
        bytes32 txhash,
        address account,
        uint256 amount
    ) external onlyAuth returns (bool) {
        _swapin(account, amount);
        emit LogSwapin(txhash, account, amount);
        return true;
    }

    // swapout to evm chain
    function Swapout(uint256 amount, address bindaddr) external returns (bool) {
        require(!_vaultOnly, "vaultOnly");
        require(bindaddr != address(0), "zero address");
        _swapout(msg.sender, amount);
        emit LogSwapout(msg.sender, bindaddr, amount);
        return true;
    }

    // swapout to non-evm chain
    function Swapout(uint256 amount, string memory bindaddr)
        external
        returns (bool)
    {
        require(!_vaultOnly, "vaultOnly");
        require(bytes(bindaddr).length > 0, "empty bindaddr");
        _swapout(msg.sender, amount);
        emit LogSwapout(msg.sender, amount, bindaddr);
        return true;
    }

    function _swapin(address to, uint256 amount) internal {
        if (isMintableXC20()) {
            IXC20(token).mint(to, amount);
        } else if (IERC20(token).balanceOf(address(this)) >= amount) {
            IERC20(token).safeTransfer(to, amount);
        } else {
            _mint(to, amount);
        }
    }

    function _swapout(address from, uint256 amount) internal {
        if (isMintableXC20()) {
            IXC20(token).burn(from, amount);
        } else if (balanceOf[from] >= amount) {
            _burn(from, amount);
        } else {
            IERC20(token).safeTransferFrom(from, address(this), amount);
        }
    }

    /// @dev Records number of AnyswapV6ERC20 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping(address => mapping(address => uint256)) public override allowance;

    event LogChangeVault(
        address indexed oldVault,
        address indexed newVault,
        uint256 indexed effectiveTime
    );
    event LogSwapin(
        bytes32 indexed txhash,
        address indexed account,
        uint256 amount
    );
    event LogSwapout(
        address indexed account,
        address indexed bindaddr,
        uint256 amount
    );
    event LogSwapout(address indexed account, uint256 amount, string bindaddr);

    constructor() {
        vault = msg.sender;
    }

    // call `init` after this contract got suitable roles of the underlying xc20 token
    // make this function `payable` as it may call set meta data which needs deposit (bond)
    // add `_underlyingIsMint` flag as the underlying also support external xc20
    // add `_callInitMetaData` flag as the meta data may be already set outside
    function init(
        string calldata _name,
        string calldata _symbol,
        uint8 _decimals,
        address _vault,
        address _auth,
        address _underlying,
        bool _underlyingIsMint,
        bool _callInitMetaData
    ) external payable onlyVault {
        require(!_init, "inited");
        _init = true;

        require(
            _underlying != address(0) && _underlying != address(this),
            "wrong underlying token"
        );

        token = _underlying;
        tokenType = _underlyingIsMint
            ? TokenType.MintBurnAny
            : TokenType.TransferDeposit;

        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        if (_callInitMetaData && _underlyingIsMint) {
            _initMetaData(_name, _symbol, _decimals);
        }

        require(
            _decimals == IERC20(_underlying).decimals(),
            "decimals mismatch"
        );
        require(bytes(IERC20(_underlying).symbol()).length > 0, "empty symbol");

        require(_vault != address(0), "zero vault address");
        vault = _vault;

        require(_auth != address(0), "zero auth address");
        isMinter[_auth] = true;
        minters.push(_auth);

        // return left value to the message sender
        uint256 balance = address(this).balance;
        if (balance > 0) {
            (bool success, ) = msg.sender.call{value: balance}("");
            require(success);
        }
    }

    /// @dev Returns the total supply of AnyswapV6ERC20 token as the ETH held in this contract.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function deposit() external returns (uint256) {
        uint256 _amount = IERC20(token).balanceOf(msg.sender);
        IERC20(token).safeTransferFrom(msg.sender, address(this), _amount);
        return _deposit(_amount, msg.sender);
    }

    function deposit(uint256 amount) external returns (uint256) {
        IERC20(token).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, msg.sender);
    }

    function deposit(uint256 amount, address to) external returns (uint256) {
        IERC20(token).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, to);
    }

    function depositVault(uint256 amount, address to)
        external
        onlyVault
        returns (uint256)
    {
        return _deposit(amount, to);
    }

    function _deposit(uint256 amount, address to)
        internal
        onlyExternalXC20
        returns (uint256)
    {
        _mint(to, amount);
        return amount;
    }

    function withdraw() external returns (uint256) {
        return _withdraw(msg.sender, balanceOf[msg.sender], msg.sender);
    }

    function withdraw(uint256 amount) external returns (uint256) {
        return _withdraw(msg.sender, amount, msg.sender);
    }

    function withdraw(uint256 amount, address to) external returns (uint256) {
        return _withdraw(msg.sender, amount, to);
    }

    function withdrawVault(
        address from,
        uint256 amount,
        address to
    ) external onlyVault returns (uint256) {
        return _withdraw(from, amount, to);
    }

    function _withdraw(
        address from,
        uint256 amount,
        address to
    ) internal onlyExternalXC20 returns (uint256) {
        _burn(from, amount);
        IERC20(token).safeTransfer(to, amount);
        return 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 += amount;
        balanceOf[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `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 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 balance = balanceOf[account];
        require(balance >= amount, "ERC20: burn amount exceeds balance");

        balanceOf[account] = balance - amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV6ERC20 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value)
        external
        override
        returns (bool)
    {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV6ERC20 token from caller's account to account (`to`).
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV6ERC20 token.
    function transfer(address to, uint256 value)
        external
        override
        returns (bool)
    {
        require(to != address(0) && to != address(this));
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV6ERC20 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of AnyswapV6ERC20 token.
    ///   - `from` account must have approved caller to spend at least `value` of AnyswapV6ERC20 token, unless `from` and caller are the same account.
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override returns (bool) {
        require(to != address(0) && to != address(this));
        if (from != msg.sender) {
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "ERC20: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }

        uint256 balance = balanceOf[from];
        require(balance >= value, "ERC20: transfer amount exceeds balance");

        balanceOf[from] = balance - value;
        balanceOf[to] += value;
        emit Transfer(from, to, value);

        return true;
    }

    // wrapper xc20 local asset interfaces
    // this contract could be the owner of xc20 token
    // so it should have the abilities of its roles
    // but forbid modify the metadata

    function freeze(address account)
        external
        onlyVault
        onlyMintableXC20
        returns (bool)
    {
        return IXC20(token).freeze(account);
    }

    function thaw(address account)
        external
        onlyVault
        onlyMintableXC20
        returns (bool)
    {
        return IXC20(token).thaw(account);
    }

    function freezeAsset() external onlyVault onlyMintableXC20 returns (bool) {
        return IXC20(token).freezeAsset();
    }

    function freeze_asset() external onlyVault onlyMintableXC20 returns (bool) {
        return IXC20(token).freeze_asset();
    }

    function thawAsset() external onlyVault onlyMintableXC20 returns (bool) {
        return IXC20(token).thawAsset();
    }

    function thaw_asset() external onlyVault onlyMintableXC20 returns (bool) {
        return IXC20(token).thaw_asset();
    }

    function transferOwnership(address _owner)
        external
        onlyVault
        onlyMintableXC20
        returns (bool)
    {
        return IXC20(token).transferOwnership(_owner);
    }

    function transfer_ownership(address _owner)
        external
        onlyVault
        onlyMintableXC20
        returns (bool)
    {
        return IXC20(token).transfer_ownership(_owner);
    }

    function setTeam(
        address issuer,
        address admin,
        address freezer
    ) external onlyVault onlyMintableXC20 returns (bool) {
        return IXC20(token).setTeam(issuer, admin, freezer);
    }

    function set_team(
        address issuer,
        address admin,
        address freezer
    ) external onlyVault onlyMintableXC20 returns (bool) {
        return IXC20(token).set_team(issuer, admin, freezer);
    }

    function _initMetaData(
        string calldata _name,
        string calldata _symbol,
        uint8 _decimals
    ) internal {
        bool success;
        try IXC20(token).setMetadata(_name, _symbol, _decimals) returns (
            bool succ
        ) {
            success = succ;
        } catch {}

        if (!success) {
            try IXC20(token).set_metadata(_name, _symbol, _decimals) returns (
                bool succ
            ) {
                success = succ;
            } catch {}
        }

        require(success, "init meta data failed");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"bindaddr","type":"string"}],"name":"LogSwapout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"bindaddr","type":"string"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMinter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"freeze","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeze_asset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_auth","type":"address"},{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"bool","name":"_underlyingIsMint","type":"bool"},{"internalType":"bool","name":"_callInitMetaData","type":"bool"}],"name":"init","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"isMintableXC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"issuer","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"freezer","type":"address"}],"name":"setTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setVaultOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"issuer","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"freezer","type":"address"}],"name":"set_team","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"thaw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thawAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thaw_asset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenType","outputs":[{"internalType":"enum TokenType","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transfer_ownership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

0x608060405234801561001057600080fd5b50600880546001600160a01b0319163317905561302e806100326000396000f3fe6080604052600436106102c75760003560e01c806391c5df4911610175578063cfbd4885116100dc578063f0350c0411610095578063f8bf8e951161006f578063f8bf8e951461086a578063fbfa77cf1461088a578063fc0c546a146108aa578063fca3b5aa146108d057600080fd5b8063f0350c041461082a578063f2fde38b1461084a578063f75c2664146105da57600080fd5b8063cfbd488514610775578063d0e30db014610795578063d4937f51146107aa578063dd62ed3e146107bf578063e1003d5a146107f7578063ec126c771461080a57600080fd5b8063ad54056d1161012e578063ad54056d146106bf578063b6b55f25146106df578063bebbf4d0146106ff578063c30812401461071f578063c4b740f514610735578063c7d93c591461075557600080fd5b806391c5df49146105f857806395d89b41146106185780639dc29fac1461062d578063a045442c1461064d578063a9059cbb1461066f578063aa271e1a1461068f57600080fd5b80633f4abad61161023457806369b41170116101ed57806370a08231116101c757806370a08231146105555780638623ec7b146105825780638d1fdf2f146105ba5780638da5cb5b146105da57600080fd5b806369b41170146105095780636b8751c1146105205780636e553f651461053557600080fd5b80633f4abad61461045f57806340c10f191461047457806351ec2ad7146104945780635ea20216146104a957806360e232a9146104c9578063628d6cba146104e957600080fd5b80631cddec19116102865780631cddec191461039d57806323b872dd146103b25780632e1a7d4d146103d257806330fa738c146103f2578063313ce5671461041e5780633ccfd60b1461044a57600080fd5b806239d6ec146102cc578062f714ce146102ff57806306fdde031461031f578063095ea7b3146103415780630d707df81461037157806318160ddd14610388575b600080fd5b3480156102d857600080fd5b506102ec6102e7366004612741565b6108f0565b6040519081526020015b60405180910390f35b34801561030b57600080fd5b506102ec61031a36600461277d565b610939565b34801561032b57600080fd5b5061033461094f565b6040516102f691906127f9565b34801561034d57600080fd5b5061036161035c36600461280c565b6109dd565b60405190151581526020016102f6565b34801561037d57600080fd5b50610386610a49565b005b34801561039457600080fd5b506004546102ec565b3480156103a957600080fd5b50610361610b18565b3480156103be57600080fd5b506103616103cd366004612836565b610be5565b3480156103de57600080fd5b506102ec6103ed366004612872565b610dd1565b3480156103fe57600080fd5b5060025461041190610100900460ff1681565b6040516102f691906128a1565b34801561042a57600080fd5b506002546104389060ff1681565b60405160ff90911681526020016102f6565b34801561045657600080fd5b506102ec610dde565b34801561046b57600080fd5b50610361610dfa565b34801561048057600080fd5b5061036161048f36600461280c565b610e1f565b3480156104a057600080fd5b50610361610e61565b3480156104b557600080fd5b506103616104c43660046128c9565b610f05565b3480156104d557600080fd5b506103616104e43660046128c9565b610fd3565b3480156104f557600080fd5b5061036161050436600461277d565b611088565b34801561051557600080fd5b506102ec6202a30081565b34801561052c57600080fd5b5061036161113c565b34801561054157600080fd5b506102ec61055036600461277d565b6111e0565b34801561056157600080fd5b506102ec6105703660046128c9565b60036020526000908152604090205481565b34801561058e57600080fd5b506105a261059d366004612872565b61120b565b6040516001600160a01b0390911681526020016102f6565b3480156105c657600080fd5b506103616105d53660046128c9565b611235565b3480156105e657600080fd5b506008546001600160a01b03166105a2565b34801561060457600080fd5b506009546105a2906001600160a01b031681565b34801561062457600080fd5b506103346112bf565b34801561063957600080fd5b5061036161064836600461280c565b6112cc565b34801561065957600080fd5b50610662611305565b6040516102f691906128e4565b34801561067b57600080fd5b5061036161068a36600461280c565b611367565b34801561069b57600080fd5b506103616106aa3660046128c9565b60066020526000908152604090205460ff1681565b3480156106cb57600080fd5b506103616106da3660046129a0565b61143e565b3480156106eb57600080fd5b506102ec6106fa366004612872565b61151d565b34801561070b57600080fd5b506102ec61071a36600461277d565b611548565b34801561072b57600080fd5b506102ec600a5481565b34801561074157600080fd5b50610386610750366004612a3b565b611575565b34801561076157600080fd5b50610361610770366004612a5f565b6115b9565b34801561078157600080fd5b506103866107903660046128c9565b611692565b3480156107a157600080fd5b506102ec6116dd565b3480156107b657600080fd5b50610361611784565b3480156107cb57600080fd5b506102ec6107da366004612a99565b600b60209081526000928352604080842090915290825290205481565b610386610805366004612b1b565b611828565b34801561081657600080fd5b50610361610825366004612bf6565b611c68565b34801561083657600080fd5b506103616108453660046128c9565b611cdd565b34801561085657600080fd5b506103616108653660046128c9565b611d67565b34801561087657600080fd5b50610361610885366004612a5f565b611df1565b34801561089657600080fd5b506008546105a2906001600160a01b031681565b3480156108b657600080fd5b506002546105a2906201000090046001600160a01b031681565b3480156108dc57600080fd5b506103866108eb3660046128c9565b611e8b565b6008546000906001600160a01b031633146109265760405162461bcd60e51b815260040161091d90612c1b565b60405180910390fd5b610931848484611f09565b949350505050565b6000610946338484611f09565b90505b92915050565b6000805461095c90612c3e565b80601f016020809104026020016040519081016040528092919081815260200182805461098890612c3e565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b505050505081565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a389086815260200190565b60405180910390a350600192915050565b6008546001600160a01b03163314610a735760405162461bcd60e51b815260040161091d90612c1b565b6009546001600160a01b031615801590610a8f5750600a544210155b610a9857600080fd5b600980546001600160a01b0390811660009081526006602052604081208054600160ff199091168117909155835460078054928301815583527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889091018054919093166001600160a01b0319918216179092558254909116909155600a55565b6008546000906001600160a01b03163314610b455760405162461bcd60e51b815260040161091d90612c1b565b610b4d610dfa565b610b695760405162461bcd60e51b815260040161091d90612c78565b60028054906101000a90046001600160a01b03166001600160a01b0316631cddec196040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be09190612ca2565b905090565b60006001600160a01b03831615801590610c0857506001600160a01b0383163014155b610c1157600080fd5b6001600160a01b0384163314610d0b576001600160a01b0384166000908152600b602090815260408083203384529091529020546000198114610d095782811015610c9e5760405162461bcd60e51b815260206004820181905260248201527f45524332303a2072657175657374206578636565647320616c6c6f77616e6365604482015260640161091d565b6000610caa8483612cd5565b6001600160a01b0387166000818152600b6020908152604080832033808552908352928190208590555184815293945090927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b505b6001600160a01b03841660009081526003602052604090205482811015610d445760405162461bcd60e51b815260040161091d90612ce8565b610d4e8382612cd5565b6001600160a01b038087166000908152600360205260408082209390935590861681529081208054859290610d84908490612d2e565b92505081905550836001600160a01b0316856001600160a01b0316600080516020612fd983398151915285604051610dbe91815260200190565b60405180910390a3506001949350505050565b6000610949338333611f09565b336000818152600360205260408120549091610be09181611f09565b600080600254610100900460ff166005811115610e1957610e1961288b565b14905090565b3360009081526006602052604081205460ff16610e4e5760405162461bcd60e51b815260040161091d90612d41565b610e588383611f82565b50600192915050565b6008546000906001600160a01b03163314610e8e5760405162461bcd60e51b815260040161091d90612c1b565b610e96610dfa565b610eb25760405162461bcd60e51b815260040161091d90612c78565b60028054906101000a90046001600160a01b03166001600160a01b03166351ec2ad76040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bbc573d6000803e3d6000fd5b6008546000906001600160a01b03163314610f325760405162461bcd60e51b815260040161091d90612c1b565b610f3a610dfa565b610f565760405162461bcd60e51b815260040161091d90612c78565b600254604051632f51010b60e11b81526001600160a01b0384811660048301526201000090920490911690635ea20216906024015b6020604051808303816000875af1158015610faa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109499190612ca2565b919050565b6008546000906001600160a01b031633146110005760405162461bcd60e51b815260040161091d90612c1b565b6001600160a01b0382166110265760405162461bcd60e51b815260040161091d90612d63565b60085460405142916001600160a01b03808616929116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a450600880546001600160a01b0383166001600160a01b03199091161790556001919050565b600554600090610100900460ff16156110cf5760405162461bcd60e51b81526020600482015260096024820152687661756c744f6e6c7960b81b604482015260640161091d565b6001600160a01b0382166110f55760405162461bcd60e51b815260040161091d90612d63565b6110ff33846120b5565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c88890602001610a38565b6008546000906001600160a01b031633146111695760405162461bcd60e51b815260040161091d90612c1b565b611171610dfa565b61118d5760405162461bcd60e51b815260040161091d90612c78565b60028054906101000a90046001600160a01b03166001600160a01b0316636b8751c16040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bbc573d6000803e3d6000fd5b600254600090611201906201000090046001600160a01b0316333086612145565b61094683836121b6565b6007818154811061121b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6008546000906001600160a01b031633146112625760405162461bcd60e51b815260040161091d90612c1b565b61126a610dfa565b6112865760405162461bcd60e51b815260040161091d90612c78565b600254604051638d1fdf2f60e01b81526001600160a01b0384811660048301526201000090920490911690638d1fdf2f90602401610f8b565b6001805461095c90612c3e565b3360009081526006602052604081205460ff166112fb5760405162461bcd60e51b815260040161091d90612d41565b610e5883836120b5565b6060600780548060200260200160405190810160405280929190818152602001828054801561135d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161133f575b5050505050905090565b60006001600160a01b0383161580159061138a57506001600160a01b0383163014155b61139357600080fd5b33600090815260036020526040902054828110156113c35760405162461bcd60e51b815260040161091d90612ce8565b6113cd8382612cd5565b33600090815260036020526040808220929092556001600160a01b03861681529081208054859290611400908490612d2e565b90915550506040518381526001600160a01b038516903390600080516020612fd9833981519152906020015b60405180910390a35060019392505050565b600554600090610100900460ff16156114855760405162461bcd60e51b81526020600482015260096024820152687661756c744f6e6c7960b81b604482015260640161091d565b60008251116114c75760405162461bcd60e51b815260206004820152600e60248201526d32b6b83a3c903134b73230b2323960911b604482015260640161091d565b6114d133846120b5565b336001600160a01b03167f9c92ad817e5474d30a4378deface765150479363a897b0590fbb12ae9d89396b848460405161150c929190612d89565b60405180910390a250600192915050565b60025460009061153e906201000090046001600160a01b0316333085612145565b61094982336121b6565b6008546000906001600160a01b031633146112015760405162461bcd60e51b815260040161091d90612c1b565b6008546001600160a01b0316331461159f5760405162461bcd60e51b815260040161091d90612c1b565b600580549115156101000261ff0019909216919091179055565b6008546000906001600160a01b031633146115e65760405162461bcd60e51b815260040161091d90612c1b565b6115ee610dfa565b61160a5760405162461bcd60e51b815260040161091d90612c78565b60025460405163c7d93c5960e01b81526001600160a01b03868116600483015285811660248301528481166044830152620100009092049091169063c7d93c59906064015b6020604051808303816000875af115801561166e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109319190612ca2565b6008546001600160a01b031633146116bc5760405162461bcd60e51b815260040161091d90612c1b565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6002546040516370a0823160e01b81523360048201526000918291620100009091046001600160a01b0316906370a0823190602401602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117539190612da2565b600254909150611774906201000090046001600160a01b0316333084612145565b61177e81336121b6565b91505090565b6008546000906001600160a01b031633146117b15760405162461bcd60e51b815260040161091d90612c1b565b6117b9610dfa565b6117d55760405162461bcd60e51b815260040161091d90612c78565b60028054906101000a90046001600160a01b03166001600160a01b031663d4937f516040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bbc573d6000803e3d6000fd5b6008546001600160a01b031633146118525760405162461bcd60e51b815260040161091d90612c1b565b60055460ff161561188e5760405162461bcd60e51b81526020600482015260066024820152651a5b9a5d195960d21b604482015260640161091d565b6005805460ff191660011790556001600160a01b038316158015906118bc57506001600160a01b0383163014155b6119015760405162461bcd60e51b81526020600482015260166024820152753bb937b733903ab73232b9363cb4b733903a37b5b2b760511b604482015260640161091d565b6002805462010000600160b01b031916620100006001600160a01b038616021790558161192f576004611932565b60005b6002805461ff0019166101008360058111156119505761195061288b565b021790555060006119628a8c83612e01565b506001611970888a83612e01565b506002805460ff191660ff881617905580801561198a5750815b1561199c5761199c8a8a8a8a8a612211565b826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fe9190612ec2565b60ff168660ff1614611a465760405162461bcd60e51b81526020600482015260116024820152700c8cac6d2dac2d8e640dad2e6dac2e8c6d607b1b604482015260640161091d565b6000836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611a86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aae9190810190612edf565b5111611aeb5760405162461bcd60e51b815260206004820152600c60248201526b195b5c1d1e481cde5b589bdb60a21b604482015260640161091d565b6001600160a01b038516611b365760405162461bcd60e51b81526020600482015260126024820152717a65726f207661756c74206164647265737360701b604482015260640161091d565b600880546001600160a01b0319166001600160a01b03878116919091179091558416611b985760405162461bcd60e51b81526020600482015260116024820152707a65726f2061757468206164647265737360781b604482015260640161091d565b6001600160a01b0384166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055478015611c5b57604051600090339083908381818185875af1925050503d8060008114611c46576040519150601f19603f3d011682016040523d82523d6000602084013e611c4b565b606091505b5050905080611c5957600080fd5b505b5050505050505050505050565b3360009081526006602052604081205460ff16611c975760405162461bcd60e51b815260040161091d90612d41565b611ca18383611f82565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161142c91815260200190565b6008546000906001600160a01b03163314611d0a5760405162461bcd60e51b815260040161091d90612c1b565b611d12610dfa565b611d2e5760405162461bcd60e51b815260040161091d90612c78565b600254604051633c0d430160e21b81526001600160a01b038481166004830152620100009092049091169063f0350c0490602401610f8b565b6008546000906001600160a01b03163314611d945760405162461bcd60e51b815260040161091d90612c1b565b611d9c610dfa565b611db85760405162461bcd60e51b815260040161091d90612c78565b60025460405163f2fde38b60e01b81526001600160a01b038481166004830152620100009092049091169063f2fde38b90602401610f8b565b6008546000906001600160a01b03163314611e1e5760405162461bcd60e51b815260040161091d90612c1b565b611e26610dfa565b611e425760405162461bcd60e51b815260040161091d90612c78565b60025460405163f8bf8e9560e01b81526001600160a01b03868116600483015285811660248301528481166044830152620100009092049091169063f8bf8e959060640161164f565b6008546001600160a01b03163314611eb55760405162461bcd60e51b815260040161091d90612c1b565b6001600160a01b038116611edb5760405162461bcd60e51b815260040161091d90612d63565b600980546001600160a01b0319166001600160a01b038316179055611f036202a30042612d2e565b600a5550565b6000611f13610dfa565b15611f535760405162461bcd60e51b815260206004820152601060248201526f06f6e6c7945787465726e616c584332360841b604482015260640161091d565b611f5d8484612365565b600254611f7a906201000090046001600160a01b031683856124aa565b509092915050565b611f8a610dfa565b15612013576002546040516340c10f1960e01b81526001600160a01b0384811660048301526024820184905262010000909204909116906340c10f19906044015b6020604051808303816000875af1158015611fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200e9190612ca2565b505050565b6002546040516370a0823160e01b815230600482015282916201000090046001600160a01b0316906370a0823190602401602060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190612da2565b106120ab576002546120a7906201000090046001600160a01b031683836124aa565b5050565b6120a782826124da565b6120bd610dfa565b1561210257600254604051632770a7eb60e21b81526001600160a01b038481166004830152602482018490526201000090920490911690639dc29fac90604401611fcb565b6001600160a01b038216600090815260036020526040902054811161212b576120a78282612365565b6002546120a7906201000090046001600160a01b03168330845b6040516001600160a01b03808516602483015283166044820152606481018290526121b09085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526125a7565b50505050565b60006121c0610dfa565b156122005760405162461bcd60e51b815260206004820152601060248201526f06f6e6c7945787465726e616c584332360841b604482015260640161091d565b61220a82846124da565b5090919050565b600254604051630df4b0bd60e21b81526000916201000090046001600160a01b0316906337d2c2f4906122509089908990899089908990600401612f7f565b6020604051808303816000875af192505050801561228b575060408051601f3d908101601f1916820190925261228891810190612ca2565b60015b156122935790505b8061231857600254604051633b97707960e21b8152620100009091046001600160a01b03169063ee5dc1e4906122d59089908990899089908990600401612f7f565b6020604051808303816000875af1925050508015612310575060408051601f3d908101601f1916820190925261230d91810190612ca2565b60015b156123185790505b8061235d5760405162461bcd60e51b81526020600482015260156024820152741a5b9a5d081b595d184819185d184819985a5b1959605a1b604482015260640161091d565b505050505050565b6001600160a01b0382166123c55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161091d565b6001600160a01b038216600090815260036020526040902054818110156124395760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161091d565b6124438282612cd5565b6001600160a01b03841660009081526003602052604081209190915560048054849290612471908490612cd5565b90915550506040518281526000906001600160a01b03851690600080516020612fd98339815191529060200160405180910390a3505050565b6040516001600160a01b03831660248201526044810182905261200e90849063a9059cbb60e01b90606401612179565b6001600160a01b0382166125305760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161091d565b80600460008282546125429190612d2e565b90915550506001600160a01b0382166000908152600360205260408120805483929061256f908490612d2e565b90915550506040518181526001600160a01b03831690600090600080516020612fd98339815191529060200160405180910390a35050565b6000826001600160a01b03163b116126015760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015260640161091d565b600080836001600160a01b03168360405161261c9190612fbc565b6000604051808303816000865af19150503d8060008114612659576040519150601f19603f3d011682016040523d82523d6000602084013e61265e565b606091505b5091509150816126b05760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015260640161091d565b8051156121b057808060200190518101906126cb9190612ca2565b6121b05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161091d565b80356001600160a01b0381168114610fce57600080fd5b60008060006060848603121561275657600080fd5b61275f8461272a565b9250602084013591506127746040850161272a565b90509250925092565b6000806040838503121561279057600080fd5b823591506127a06020840161272a565b90509250929050565b60005b838110156127c45781810151838201526020016127ac565b50506000910152565b600081518084526127e58160208601602086016127a9565b601f01601f19169290920160200192915050565b60208152600061094660208301846127cd565b6000806040838503121561281f57600080fd5b6128288361272a565b946020939093013593505050565b60008060006060848603121561284b57600080fd5b6128548461272a565b92506128626020850161272a565b9150604084013590509250925092565b60006020828403121561288457600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600683106128c357634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156128db57600080fd5b6109468261272a565b6020808252825182820181905260009190848201906040850190845b818110156129255783516001600160a01b031683529284019291840191600101612900565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561297057612970612931565b604052919050565b600067ffffffffffffffff82111561299257612992612931565b50601f01601f191660200190565b600080604083850312156129b357600080fd5b82359150602083013567ffffffffffffffff8111156129d157600080fd5b8301601f810185136129e257600080fd5b80356129f56129f082612978565b612947565b818152866020838501011115612a0a57600080fd5b816020840160208301376000602083830101528093505050509250929050565b8015158114612a3857600080fd5b50565b600060208284031215612a4d57600080fd5b8135612a5881612a2a565b9392505050565b600080600060608486031215612a7457600080fd5b612a7d8461272a565b9250612a8b6020850161272a565b91506127746040850161272a565b60008060408385031215612aac57600080fd5b612ab58361272a565b91506127a06020840161272a565b60008083601f840112612ad557600080fd5b50813567ffffffffffffffff811115612aed57600080fd5b602083019150836020828501011115612b0557600080fd5b9250929050565b60ff81168114612a3857600080fd5b6000806000806000806000806000806101008b8d031215612b3b57600080fd5b8a3567ffffffffffffffff80821115612b5357600080fd5b612b5f8e838f01612ac3565b909c509a5060208d0135915080821115612b7857600080fd5b50612b858d828e01612ac3565b90995097505060408b0135612b9981612b0c565b9550612ba760608c0161272a565b9450612bb560808c0161272a565b9350612bc360a08c0161272a565b925060c08b0135612bd381612a2a565b915060e08b0135612be381612a2a565b809150509295989b9194979a5092959850565b600080600060608486031215612c0b57600080fd5b833592506128626020850161272a565b6020808252600990820152681bdb9b1e55985d5b1d60ba1b604082015260600190565b600181811c90821680612c5257607f821691505b602082108103612c7257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f06f6e6c794d696e7461626c65584332360841b604082015260600190565b600060208284031215612cb457600080fd5b8151612a5881612a2a565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094957610949612cbf565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8082018082111561094957610949612cbf565b6020808252600890820152670dedcd8f282eae8d60c31b604082015260600190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061093160408301846127cd565b600060208284031215612db457600080fd5b5051919050565b601f82111561200e57600081815260208120601f850160051c81016020861015612de25750805b601f850160051c820191505b8181101561235d57828155600101612dee565b67ffffffffffffffff831115612e1957612e19612931565b612e2d83612e278354612c3e565b83612dbb565b6000601f841160018114612e615760008515612e495750838201355b600019600387901b1c1916600186901b178355612ebb565b600083815260209020601f19861690835b82811015612e925786850135825560209485019460019092019101612e72565b5086821015612eaf5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060208284031215612ed457600080fd5b8151612a5881612b0c565b600060208284031215612ef157600080fd5b815167ffffffffffffffff811115612f0857600080fd5b8201601f81018413612f1957600080fd5b8051612f276129f082612978565b818152856020838501011115612f3c57600080fd5b612f4d8260208301602086016127a9565b95945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000612f93606083018789612f56565b8281036020840152612fa6818688612f56565b91505060ff831660408301529695505050505050565b60008251612fce8184602087016127a9565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220394b8944e34a0f93e11ec17ebe3e880acd7280ebe51ea11754cbc887c8d3be8f64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102c75760003560e01c806391c5df4911610175578063cfbd4885116100dc578063f0350c0411610095578063f8bf8e951161006f578063f8bf8e951461086a578063fbfa77cf1461088a578063fc0c546a146108aa578063fca3b5aa146108d057600080fd5b8063f0350c041461082a578063f2fde38b1461084a578063f75c2664146105da57600080fd5b8063cfbd488514610775578063d0e30db014610795578063d4937f51146107aa578063dd62ed3e146107bf578063e1003d5a146107f7578063ec126c771461080a57600080fd5b8063ad54056d1161012e578063ad54056d146106bf578063b6b55f25146106df578063bebbf4d0146106ff578063c30812401461071f578063c4b740f514610735578063c7d93c591461075557600080fd5b806391c5df49146105f857806395d89b41146106185780639dc29fac1461062d578063a045442c1461064d578063a9059cbb1461066f578063aa271e1a1461068f57600080fd5b80633f4abad61161023457806369b41170116101ed57806370a08231116101c757806370a08231146105555780638623ec7b146105825780638d1fdf2f146105ba5780638da5cb5b146105da57600080fd5b806369b41170146105095780636b8751c1146105205780636e553f651461053557600080fd5b80633f4abad61461045f57806340c10f191461047457806351ec2ad7146104945780635ea20216146104a957806360e232a9146104c9578063628d6cba146104e957600080fd5b80631cddec19116102865780631cddec191461039d57806323b872dd146103b25780632e1a7d4d146103d257806330fa738c146103f2578063313ce5671461041e5780633ccfd60b1461044a57600080fd5b806239d6ec146102cc578062f714ce146102ff57806306fdde031461031f578063095ea7b3146103415780630d707df81461037157806318160ddd14610388575b600080fd5b3480156102d857600080fd5b506102ec6102e7366004612741565b6108f0565b6040519081526020015b60405180910390f35b34801561030b57600080fd5b506102ec61031a36600461277d565b610939565b34801561032b57600080fd5b5061033461094f565b6040516102f691906127f9565b34801561034d57600080fd5b5061036161035c36600461280c565b6109dd565b60405190151581526020016102f6565b34801561037d57600080fd5b50610386610a49565b005b34801561039457600080fd5b506004546102ec565b3480156103a957600080fd5b50610361610b18565b3480156103be57600080fd5b506103616103cd366004612836565b610be5565b3480156103de57600080fd5b506102ec6103ed366004612872565b610dd1565b3480156103fe57600080fd5b5060025461041190610100900460ff1681565b6040516102f691906128a1565b34801561042a57600080fd5b506002546104389060ff1681565b60405160ff90911681526020016102f6565b34801561045657600080fd5b506102ec610dde565b34801561046b57600080fd5b50610361610dfa565b34801561048057600080fd5b5061036161048f36600461280c565b610e1f565b3480156104a057600080fd5b50610361610e61565b3480156104b557600080fd5b506103616104c43660046128c9565b610f05565b3480156104d557600080fd5b506103616104e43660046128c9565b610fd3565b3480156104f557600080fd5b5061036161050436600461277d565b611088565b34801561051557600080fd5b506102ec6202a30081565b34801561052c57600080fd5b5061036161113c565b34801561054157600080fd5b506102ec61055036600461277d565b6111e0565b34801561056157600080fd5b506102ec6105703660046128c9565b60036020526000908152604090205481565b34801561058e57600080fd5b506105a261059d366004612872565b61120b565b6040516001600160a01b0390911681526020016102f6565b3480156105c657600080fd5b506103616105d53660046128c9565b611235565b3480156105e657600080fd5b506008546001600160a01b03166105a2565b34801561060457600080fd5b506009546105a2906001600160a01b031681565b34801561062457600080fd5b506103346112bf565b34801561063957600080fd5b5061036161064836600461280c565b6112cc565b34801561065957600080fd5b50610662611305565b6040516102f691906128e4565b34801561067b57600080fd5b5061036161068a36600461280c565b611367565b34801561069b57600080fd5b506103616106aa3660046128c9565b60066020526000908152604090205460ff1681565b3480156106cb57600080fd5b506103616106da3660046129a0565b61143e565b3480156106eb57600080fd5b506102ec6106fa366004612872565b61151d565b34801561070b57600080fd5b506102ec61071a36600461277d565b611548565b34801561072b57600080fd5b506102ec600a5481565b34801561074157600080fd5b50610386610750366004612a3b565b611575565b34801561076157600080fd5b50610361610770366004612a5f565b6115b9565b34801561078157600080fd5b506103866107903660046128c9565b611692565b3480156107a157600080fd5b506102ec6116dd565b3480156107b657600080fd5b50610361611784565b3480156107cb57600080fd5b506102ec6107da366004612a99565b600b60209081526000928352604080842090915290825290205481565b610386610805366004612b1b565b611828565b34801561081657600080fd5b50610361610825366004612bf6565b611c68565b34801561083657600080fd5b506103616108453660046128c9565b611cdd565b34801561085657600080fd5b506103616108653660046128c9565b611d67565b34801561087657600080fd5b50610361610885366004612a5f565b611df1565b34801561089657600080fd5b506008546105a2906001600160a01b031681565b3480156108b657600080fd5b506002546105a2906201000090046001600160a01b031681565b3480156108dc57600080fd5b506103866108eb3660046128c9565b611e8b565b6008546000906001600160a01b031633146109265760405162461bcd60e51b815260040161091d90612c1b565b60405180910390fd5b610931848484611f09565b949350505050565b6000610946338484611f09565b90505b92915050565b6000805461095c90612c3e565b80601f016020809104026020016040519081016040528092919081815260200182805461098890612c3e565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b505050505081565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a389086815260200190565b60405180910390a350600192915050565b6008546001600160a01b03163314610a735760405162461bcd60e51b815260040161091d90612c1b565b6009546001600160a01b031615801590610a8f5750600a544210155b610a9857600080fd5b600980546001600160a01b0390811660009081526006602052604081208054600160ff199091168117909155835460078054928301815583527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889091018054919093166001600160a01b0319918216179092558254909116909155600a55565b6008546000906001600160a01b03163314610b455760405162461bcd60e51b815260040161091d90612c1b565b610b4d610dfa565b610b695760405162461bcd60e51b815260040161091d90612c78565b60028054906101000a90046001600160a01b03166001600160a01b0316631cddec196040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be09190612ca2565b905090565b60006001600160a01b03831615801590610c0857506001600160a01b0383163014155b610c1157600080fd5b6001600160a01b0384163314610d0b576001600160a01b0384166000908152600b602090815260408083203384529091529020546000198114610d095782811015610c9e5760405162461bcd60e51b815260206004820181905260248201527f45524332303a2072657175657374206578636565647320616c6c6f77616e6365604482015260640161091d565b6000610caa8483612cd5565b6001600160a01b0387166000818152600b6020908152604080832033808552908352928190208590555184815293945090927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b505b6001600160a01b03841660009081526003602052604090205482811015610d445760405162461bcd60e51b815260040161091d90612ce8565b610d4e8382612cd5565b6001600160a01b038087166000908152600360205260408082209390935590861681529081208054859290610d84908490612d2e565b92505081905550836001600160a01b0316856001600160a01b0316600080516020612fd983398151915285604051610dbe91815260200190565b60405180910390a3506001949350505050565b6000610949338333611f09565b336000818152600360205260408120549091610be09181611f09565b600080600254610100900460ff166005811115610e1957610e1961288b565b14905090565b3360009081526006602052604081205460ff16610e4e5760405162461bcd60e51b815260040161091d90612d41565b610e588383611f82565b50600192915050565b6008546000906001600160a01b03163314610e8e5760405162461bcd60e51b815260040161091d90612c1b565b610e96610dfa565b610eb25760405162461bcd60e51b815260040161091d90612c78565b60028054906101000a90046001600160a01b03166001600160a01b03166351ec2ad76040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bbc573d6000803e3d6000fd5b6008546000906001600160a01b03163314610f325760405162461bcd60e51b815260040161091d90612c1b565b610f3a610dfa565b610f565760405162461bcd60e51b815260040161091d90612c78565b600254604051632f51010b60e11b81526001600160a01b0384811660048301526201000090920490911690635ea20216906024015b6020604051808303816000875af1158015610faa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109499190612ca2565b919050565b6008546000906001600160a01b031633146110005760405162461bcd60e51b815260040161091d90612c1b565b6001600160a01b0382166110265760405162461bcd60e51b815260040161091d90612d63565b60085460405142916001600160a01b03808616929116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a450600880546001600160a01b0383166001600160a01b03199091161790556001919050565b600554600090610100900460ff16156110cf5760405162461bcd60e51b81526020600482015260096024820152687661756c744f6e6c7960b81b604482015260640161091d565b6001600160a01b0382166110f55760405162461bcd60e51b815260040161091d90612d63565b6110ff33846120b5565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c88890602001610a38565b6008546000906001600160a01b031633146111695760405162461bcd60e51b815260040161091d90612c1b565b611171610dfa565b61118d5760405162461bcd60e51b815260040161091d90612c78565b60028054906101000a90046001600160a01b03166001600160a01b0316636b8751c16040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bbc573d6000803e3d6000fd5b600254600090611201906201000090046001600160a01b0316333086612145565b61094683836121b6565b6007818154811061121b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6008546000906001600160a01b031633146112625760405162461bcd60e51b815260040161091d90612c1b565b61126a610dfa565b6112865760405162461bcd60e51b815260040161091d90612c78565b600254604051638d1fdf2f60e01b81526001600160a01b0384811660048301526201000090920490911690638d1fdf2f90602401610f8b565b6001805461095c90612c3e565b3360009081526006602052604081205460ff166112fb5760405162461bcd60e51b815260040161091d90612d41565b610e5883836120b5565b6060600780548060200260200160405190810160405280929190818152602001828054801561135d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161133f575b5050505050905090565b60006001600160a01b0383161580159061138a57506001600160a01b0383163014155b61139357600080fd5b33600090815260036020526040902054828110156113c35760405162461bcd60e51b815260040161091d90612ce8565b6113cd8382612cd5565b33600090815260036020526040808220929092556001600160a01b03861681529081208054859290611400908490612d2e565b90915550506040518381526001600160a01b038516903390600080516020612fd9833981519152906020015b60405180910390a35060019392505050565b600554600090610100900460ff16156114855760405162461bcd60e51b81526020600482015260096024820152687661756c744f6e6c7960b81b604482015260640161091d565b60008251116114c75760405162461bcd60e51b815260206004820152600e60248201526d32b6b83a3c903134b73230b2323960911b604482015260640161091d565b6114d133846120b5565b336001600160a01b03167f9c92ad817e5474d30a4378deface765150479363a897b0590fbb12ae9d89396b848460405161150c929190612d89565b60405180910390a250600192915050565b60025460009061153e906201000090046001600160a01b0316333085612145565b61094982336121b6565b6008546000906001600160a01b031633146112015760405162461bcd60e51b815260040161091d90612c1b565b6008546001600160a01b0316331461159f5760405162461bcd60e51b815260040161091d90612c1b565b600580549115156101000261ff0019909216919091179055565b6008546000906001600160a01b031633146115e65760405162461bcd60e51b815260040161091d90612c1b565b6115ee610dfa565b61160a5760405162461bcd60e51b815260040161091d90612c78565b60025460405163c7d93c5960e01b81526001600160a01b03868116600483015285811660248301528481166044830152620100009092049091169063c7d93c59906064015b6020604051808303816000875af115801561166e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109319190612ca2565b6008546001600160a01b031633146116bc5760405162461bcd60e51b815260040161091d90612c1b565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6002546040516370a0823160e01b81523360048201526000918291620100009091046001600160a01b0316906370a0823190602401602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117539190612da2565b600254909150611774906201000090046001600160a01b0316333084612145565b61177e81336121b6565b91505090565b6008546000906001600160a01b031633146117b15760405162461bcd60e51b815260040161091d90612c1b565b6117b9610dfa565b6117d55760405162461bcd60e51b815260040161091d90612c78565b60028054906101000a90046001600160a01b03166001600160a01b031663d4937f516040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bbc573d6000803e3d6000fd5b6008546001600160a01b031633146118525760405162461bcd60e51b815260040161091d90612c1b565b60055460ff161561188e5760405162461bcd60e51b81526020600482015260066024820152651a5b9a5d195960d21b604482015260640161091d565b6005805460ff191660011790556001600160a01b038316158015906118bc57506001600160a01b0383163014155b6119015760405162461bcd60e51b81526020600482015260166024820152753bb937b733903ab73232b9363cb4b733903a37b5b2b760511b604482015260640161091d565b6002805462010000600160b01b031916620100006001600160a01b038616021790558161192f576004611932565b60005b6002805461ff0019166101008360058111156119505761195061288b565b021790555060006119628a8c83612e01565b506001611970888a83612e01565b506002805460ff191660ff881617905580801561198a5750815b1561199c5761199c8a8a8a8a8a612211565b826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fe9190612ec2565b60ff168660ff1614611a465760405162461bcd60e51b81526020600482015260116024820152700c8cac6d2dac2d8e640dad2e6dac2e8c6d607b1b604482015260640161091d565b6000836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611a86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aae9190810190612edf565b5111611aeb5760405162461bcd60e51b815260206004820152600c60248201526b195b5c1d1e481cde5b589bdb60a21b604482015260640161091d565b6001600160a01b038516611b365760405162461bcd60e51b81526020600482015260126024820152717a65726f207661756c74206164647265737360701b604482015260640161091d565b600880546001600160a01b0319166001600160a01b03878116919091179091558416611b985760405162461bcd60e51b81526020600482015260116024820152707a65726f2061757468206164647265737360781b604482015260640161091d565b6001600160a01b0384166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055478015611c5b57604051600090339083908381818185875af1925050503d8060008114611c46576040519150601f19603f3d011682016040523d82523d6000602084013e611c4b565b606091505b5050905080611c5957600080fd5b505b5050505050505050505050565b3360009081526006602052604081205460ff16611c975760405162461bcd60e51b815260040161091d90612d41565b611ca18383611f82565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161142c91815260200190565b6008546000906001600160a01b03163314611d0a5760405162461bcd60e51b815260040161091d90612c1b565b611d12610dfa565b611d2e5760405162461bcd60e51b815260040161091d90612c78565b600254604051633c0d430160e21b81526001600160a01b038481166004830152620100009092049091169063f0350c0490602401610f8b565b6008546000906001600160a01b03163314611d945760405162461bcd60e51b815260040161091d90612c1b565b611d9c610dfa565b611db85760405162461bcd60e51b815260040161091d90612c78565b60025460405163f2fde38b60e01b81526001600160a01b038481166004830152620100009092049091169063f2fde38b90602401610f8b565b6008546000906001600160a01b03163314611e1e5760405162461bcd60e51b815260040161091d90612c1b565b611e26610dfa565b611e425760405162461bcd60e51b815260040161091d90612c78565b60025460405163f8bf8e9560e01b81526001600160a01b03868116600483015285811660248301528481166044830152620100009092049091169063f8bf8e959060640161164f565b6008546001600160a01b03163314611eb55760405162461bcd60e51b815260040161091d90612c1b565b6001600160a01b038116611edb5760405162461bcd60e51b815260040161091d90612d63565b600980546001600160a01b0319166001600160a01b038316179055611f036202a30042612d2e565b600a5550565b6000611f13610dfa565b15611f535760405162461bcd60e51b815260206004820152601060248201526f06f6e6c7945787465726e616c584332360841b604482015260640161091d565b611f5d8484612365565b600254611f7a906201000090046001600160a01b031683856124aa565b509092915050565b611f8a610dfa565b15612013576002546040516340c10f1960e01b81526001600160a01b0384811660048301526024820184905262010000909204909116906340c10f19906044015b6020604051808303816000875af1158015611fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200e9190612ca2565b505050565b6002546040516370a0823160e01b815230600482015282916201000090046001600160a01b0316906370a0823190602401602060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190612da2565b106120ab576002546120a7906201000090046001600160a01b031683836124aa565b5050565b6120a782826124da565b6120bd610dfa565b1561210257600254604051632770a7eb60e21b81526001600160a01b038481166004830152602482018490526201000090920490911690639dc29fac90604401611fcb565b6001600160a01b038216600090815260036020526040902054811161212b576120a78282612365565b6002546120a7906201000090046001600160a01b03168330845b6040516001600160a01b03808516602483015283166044820152606481018290526121b09085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526125a7565b50505050565b60006121c0610dfa565b156122005760405162461bcd60e51b815260206004820152601060248201526f06f6e6c7945787465726e616c584332360841b604482015260640161091d565b61220a82846124da565b5090919050565b600254604051630df4b0bd60e21b81526000916201000090046001600160a01b0316906337d2c2f4906122509089908990899089908990600401612f7f565b6020604051808303816000875af192505050801561228b575060408051601f3d908101601f1916820190925261228891810190612ca2565b60015b156122935790505b8061231857600254604051633b97707960e21b8152620100009091046001600160a01b03169063ee5dc1e4906122d59089908990899089908990600401612f7f565b6020604051808303816000875af1925050508015612310575060408051601f3d908101601f1916820190925261230d91810190612ca2565b60015b156123185790505b8061235d5760405162461bcd60e51b81526020600482015260156024820152741a5b9a5d081b595d184819185d184819985a5b1959605a1b604482015260640161091d565b505050505050565b6001600160a01b0382166123c55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161091d565b6001600160a01b038216600090815260036020526040902054818110156124395760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161091d565b6124438282612cd5565b6001600160a01b03841660009081526003602052604081209190915560048054849290612471908490612cd5565b90915550506040518281526000906001600160a01b03851690600080516020612fd98339815191529060200160405180910390a3505050565b6040516001600160a01b03831660248201526044810182905261200e90849063a9059cbb60e01b90606401612179565b6001600160a01b0382166125305760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161091d565b80600460008282546125429190612d2e565b90915550506001600160a01b0382166000908152600360205260408120805483929061256f908490612d2e565b90915550506040518181526001600160a01b03831690600090600080516020612fd98339815191529060200160405180910390a35050565b6000826001600160a01b03163b116126015760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015260640161091d565b600080836001600160a01b03168360405161261c9190612fbc565b6000604051808303816000865af19150503d8060008114612659576040519150601f19603f3d011682016040523d82523d6000602084013e61265e565b606091505b5091509150816126b05760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015260640161091d565b8051156121b057808060200190518101906126cb9190612ca2565b6121b05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161091d565b80356001600160a01b0381168114610fce57600080fd5b60008060006060848603121561275657600080fd5b61275f8461272a565b9250602084013591506127746040850161272a565b90509250925092565b6000806040838503121561279057600080fd5b823591506127a06020840161272a565b90509250929050565b60005b838110156127c45781810151838201526020016127ac565b50506000910152565b600081518084526127e58160208601602086016127a9565b601f01601f19169290920160200192915050565b60208152600061094660208301846127cd565b6000806040838503121561281f57600080fd5b6128288361272a565b946020939093013593505050565b60008060006060848603121561284b57600080fd5b6128548461272a565b92506128626020850161272a565b9150604084013590509250925092565b60006020828403121561288457600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600683106128c357634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156128db57600080fd5b6109468261272a565b6020808252825182820181905260009190848201906040850190845b818110156129255783516001600160a01b031683529284019291840191600101612900565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561297057612970612931565b604052919050565b600067ffffffffffffffff82111561299257612992612931565b50601f01601f191660200190565b600080604083850312156129b357600080fd5b82359150602083013567ffffffffffffffff8111156129d157600080fd5b8301601f810185136129e257600080fd5b80356129f56129f082612978565b612947565b818152866020838501011115612a0a57600080fd5b816020840160208301376000602083830101528093505050509250929050565b8015158114612a3857600080fd5b50565b600060208284031215612a4d57600080fd5b8135612a5881612a2a565b9392505050565b600080600060608486031215612a7457600080fd5b612a7d8461272a565b9250612a8b6020850161272a565b91506127746040850161272a565b60008060408385031215612aac57600080fd5b612ab58361272a565b91506127a06020840161272a565b60008083601f840112612ad557600080fd5b50813567ffffffffffffffff811115612aed57600080fd5b602083019150836020828501011115612b0557600080fd5b9250929050565b60ff81168114612a3857600080fd5b6000806000806000806000806000806101008b8d031215612b3b57600080fd5b8a3567ffffffffffffffff80821115612b5357600080fd5b612b5f8e838f01612ac3565b909c509a5060208d0135915080821115612b7857600080fd5b50612b858d828e01612ac3565b90995097505060408b0135612b9981612b0c565b9550612ba760608c0161272a565b9450612bb560808c0161272a565b9350612bc360a08c0161272a565b925060c08b0135612bd381612a2a565b915060e08b0135612be381612a2a565b809150509295989b9194979a5092959850565b600080600060608486031215612c0b57600080fd5b833592506128626020850161272a565b6020808252600990820152681bdb9b1e55985d5b1d60ba1b604082015260600190565b600181811c90821680612c5257607f821691505b602082108103612c7257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f06f6e6c794d696e7461626c65584332360841b604082015260600190565b600060208284031215612cb457600080fd5b8151612a5881612a2a565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094957610949612cbf565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8082018082111561094957610949612cbf565b6020808252600890820152670dedcd8f282eae8d60c31b604082015260600190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061093160408301846127cd565b600060208284031215612db457600080fd5b5051919050565b601f82111561200e57600081815260208120601f850160051c81016020861015612de25750805b601f850160051c820191505b8181101561235d57828155600101612dee565b67ffffffffffffffff831115612e1957612e19612931565b612e2d83612e278354612c3e565b83612dbb565b6000601f841160018114612e615760008515612e495750838201355b600019600387901b1c1916600186901b178355612ebb565b600083815260209020601f19861690835b82811015612e925786850135825560209485019460019092019101612e72565b5086821015612eaf5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060208284031215612ed457600080fd5b8151612a5881612b0c565b600060208284031215612ef157600080fd5b815167ffffffffffffffff811115612f0857600080fd5b8201601f81018413612f1957600080fd5b8051612f276129f082612978565b818152856020838501011115612f3c57600080fd5b612f4d8260208301602086016127a9565b95945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000612f93606083018789612f56565b8281036020840152612fa6818688612f56565b91505060ff831660408301529695505050505050565b60008251612fce8184602087016127a9565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220394b8944e34a0f93e11ec17ebe3e880acd7280ebe51ea11754cbc887c8d3be8f64736f6c63430008110033

Deployed Bytecode Sourcemap

7092:16364:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16272:189;;;;;;;;;;-1:-1:-1;16272:189:0;;;;;:::i;:::-;;:::i;:::-;;;671:25:1;;;659:2;644:18;16272:189:0;;;;;;;;16132:132;;;;;;;;;;-1:-1:-1;16132:132:0;;;;;:::i;:::-;;:::i;7178:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18220:247::-;;;;;;;;;;-1:-1:-1;18220:247:0;;;;;:::i;:::-;;:::i;:::-;;;2146:14:1;;2139:22;2121:41;;2109:2;2094:18;18220:247:0;1981:187:1;9224:275:0;;;;;;;;;;;;;:::i;:::-;;14736:102;;;;;;;;;;-1:-1:-1;14818:12:0;;14736:102;;21852:124;;;;;;;;;;;;;:::i;19999:882::-;;;;;;;;;;-1:-1:-1;19999:882:0;;;;;:::i;:::-;;:::i;15996:128::-;;;;;;;;;;-1:-1:-1;15996:128:0;;;;;:::i;:::-;;:::i;7330:26::-;;;;;;;;;;-1:-1:-1;7330:26:0;;;;;;;;;;;;;;;;;;:::i;7230:21::-;;;;;;;;;;-1:-1:-1;7230:21:0;;;;;;;;;;;3341:4:1;3329:17;;;3311:36;;3299:2;3284:18;7230:21:0;3169:184:1;15859:129:0;;;;;;;;;;;;;:::i;8623:113::-;;;;;;;;;;;;;:::i;10035:135::-;;;;;;;;;;-1:-1:-1;10035:135:0;;;;;:::i;:::-;;:::i;21722:122::-;;;;;;;;;;;;;:::i;21269:175::-;;;;;;;;;;-1:-1:-1;21269:175:0;;;;;:::i;:::-;;:::i;9775:252::-;;;;;;;;;;-1:-1:-1;9775:252:0;;;;;:::i;:::-;;:::i;10642:302::-;;;;;;;;;;-1:-1:-1;10642:302:0;;;;;:::i;:::-;;:::i;7862:38::-;;;;;;;;;;;;7894:6;7862:38;;21586:128;;;;;;;;;;;;;:::i;15294:194::-;;;;;;;;;;-1:-1:-1;15294:194:0;;;;;:::i;:::-;;:::i;7509:53::-;;;;;;;;;;-1:-1:-1;7509:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;8016:24;;;;;;;;;;-1:-1:-1;8016:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3713:32:1;;;3695:51;;3683:2;3668:18;8016:24:0;3549:203:1;21082:179:0;;;;;;;;;;-1:-1:-1;21082:179:0;;;;;:::i;:::-;;:::i;8744:80::-;;;;;;;;;;-1:-1:-1;8811:5:0;;-1:-1:-1;;;;;8811:5:0;8744:80;;8127:28;;;;;;;;;;-1:-1:-1;8127:28:0;;;;-1:-1:-1;;;;;8127:28:0;;;7203:20;;;;;;;;;;;;;:::i;10178:172::-;;;;;;;;;;-1:-1:-1;10178:172:0;;;;;:::i;:::-;;:::i;9668:99::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18769:461::-;;;;;;;;;;-1:-1:-1;18769:461:0;;;;;:::i;:::-;;:::i;7969:40::-;;;;;;;;;;-1:-1:-1;7969:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10985:337;;;;;;;;;;-1:-1:-1;10985:337:0;;;;;:::i;:::-;;:::i;15096:190::-;;;;;;;;;;-1:-1:-1;15096:190:0;;;;;:::i;:::-;;:::i;15496:165::-;;;;;;;;;;-1:-1:-1;15496:165:0;;;;;:::i;:::-;;:::i;8162:26::-;;;;;;;;;;;;;;;;8918:94;;;;;;;;;;-1:-1:-1;8918:94:0;;;;;:::i;:::-;;:::i;22400:220::-;;;;;;;;;;-1:-1:-1;22400:220:0;;;;;:::i;:::-;;:::i;9562:98::-;;;;;;;;;;-1:-1:-1;9562:98:0;;;;;:::i;:::-;;:::i;14846:242::-;;;;;;;;;;;;;:::i;21452:126::-;;;;;;;;;;;;;:::i;12162:73::-;;;;;;;;;;-1:-1:-1;12162:73:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;13119:1512;;;;;;:::i;:::-;;:::i;10358:247::-;;;;;;;;;;-1:-1:-1;10358:247:0;;;;;:::i;:::-;;:::i;22191:201::-;;;;;;;;;;-1:-1:-1;22191:201:0;;;;;:::i;:::-;;:::i;21984:199::-;;;;;;;;;;-1:-1:-1;21984:199:0;;;;;:::i;:::-;;:::i;22628:222::-;;;;;;;;;;-1:-1:-1;22628:222:0;;;;;:::i;:::-;;:::i;8098:20::-;;;;;;;;;;-1:-1:-1;8098:20:0;;;;-1:-1:-1;;;;;8098:20:0;;;7363;;;;;;;;;;-1:-1:-1;7363:20:0;;;;;;;-1:-1:-1;;;;;7363:20:0;;;9020:196;;;;;;;;;;-1:-1:-1;9020:196:0;;;;;:::i;:::-;;:::i;16272:189::-;8351:5;;16399:7;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;;;;;;;;;16426:27:::1;16436:4;16442:6;16450:2;16426:9;:27::i;:::-;16419:34:::0;16272:189;-1:-1:-1;;;;16272:189:0:o;16132:132::-;16196:7;16223:33;16233:10;16245:6;16253:2;16223:9;:33::i;:::-;16216:40;;16132:132;;;;;:::o;7178:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18220:247::-;18355:10;18323:4;18345:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;18345:30:0;;;;;;;;;;:38;;;18399:36;18323:4;;18345:30;;18399:36;;;;18378:5;671:25:1;;659:2;644:18;;525:177;18399:36:0;;;;;;;;-1:-1:-1;18455:4:0;18220:247;;;;:::o;9224:275::-;8351:5;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;9285:13:::1;::::0;-1:-1:-1;;;;;9285:13:0::1;:27:::0;;::::1;::::0;:61:::1;;;9335:11;;9316:15;:30;;9285:61;9277:70;;;::::0;::::1;;9367:13;::::0;;-1:-1:-1;;;;;9367:13:0;;::::1;9358:23;::::0;;;:8:::1;:23;::::0;;;;:30;;9384:4:::1;-1:-1:-1::0;;9358:30:0;;::::1;::::0;::::1;::::0;;;9412:13;;9399:7:::1;:27:::0;;;;::::1;::::0;;;;;;;::::1;::::0;;9412:13;;;::::1;-1:-1:-1::0;;;;;;9399:27:0;;::::1;;::::0;;;9439:26;;;;::::1;::::0;;;9476:11:::1;:15:::0;9224:275::o;21852:124::-;8351:5;;21919:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;21949:5:::2;::::0;::::2;;;;;;-1:-1:-1::0;;;;;21949:5:0::2;-1:-1:-1::0;;;;;21943:23:0::2;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21936:32;;21852:124:::0;:::o;19999:882::-;20123:4;-1:-1:-1;;;;;20148:16:0;;;;;;:39;;-1:-1:-1;;;;;;20168:19:0;;20182:4;20168:19;;20148:39;20140:48;;;;;;-1:-1:-1;;;;;20203:18:0;;20211:10;20203:18;20199:407;;-1:-1:-1;;;;;20256:15:0;;20238;20256;;;:9;:15;;;;;;;;20272:10;20256:27;;;;;;;;-1:-1:-1;;20302:28:0;;20298:297;;20370:5;20359:7;:16;;20351:61;;;;-1:-1:-1;;;20351:61:0;;10415:2:1;20351:61:0;;;10397:21:1;;;10434:18;;;10427:30;10493:34;10473:18;;;10466:62;10545:18;;20351:61:0;10213:356:1;20351:61:0;20431:15;20449;20459:5;20449:7;:15;:::i;:::-;-1:-1:-1;;;;;20483:15:0;;;;;;:9;:15;;;;;;;;20499:10;20483:27;;;;;;;;;;:37;;;20544:35;671:25:1;;;20483:37:0;;-1:-1:-1;20499:10:0;;20544:35;;644:18:1;20544:35:0;;;;;;;20332:263;20298:297;20223:383;20199:407;-1:-1:-1;;;;;20636:15:0;;20618;20636;;;:9;:15;;;;;;20670:16;;;;20662:67;;;;-1:-1:-1;;;20662:67:0;;;;;;;:::i;:::-;20760:15;20770:5;20760:7;:15;:::i;:::-;-1:-1:-1;;;;;20742:15:0;;;;;;;:9;:15;;;;;;:33;;;;20786:13;;;;;;;;:22;;20803:5;;20742:15;20786:22;;20803:5;;20786:22;:::i;:::-;;;;;;;;20839:2;-1:-1:-1;;;;;20824:25:0;20833:4;-1:-1:-1;;;;;20824:25:0;-1:-1:-1;;;;;;;;;;;20843:5:0;20824:25;;;;671::1;;659:2;644:18;;525:177;20824:25:0;;;;;;;;-1:-1:-1;20869:4:0;;19999:882;-1:-1:-1;;;;19999:882:0:o;15996:128::-;16048:7;16075:41;16085:10;16097:6;16105:10;16075:9;:41::i;15859:129::-;15934:10;15897:7;15946:21;;;:9;:21;;;;;;15897:7;;15924:56;;15934:10;15924:9;:56::i;8623:113::-;8670:4;;8694:9;;;;;;;:34;;;;;;;;:::i;:::-;;8687:41;;8623:113;:::o;10035:135::-;8245:10;10104:4;8236:20;;;:8;:20;;;;;;;;8228:41;;;;-1:-1:-1;;;8228:41:0;;;;;;;:::i;:::-;10121:19:::1;10129:2;10133:6;10121:7;:19::i;:::-;-1:-1:-1::0;10158:4:0::1;10035:135:::0;;;;:::o;21722:122::-;8351:5;;21788:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;21818:5:::2;::::0;::::2;;;;;;-1:-1:-1::0;;;;;21818:5:0::2;-1:-1:-1::0;;;;;21812:22:0::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;21269:175:::0;8351:5;;21381:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;21416:5:::2;::::0;21410:26:::2;::::0;-1:-1:-1;;;21410:26:0;;-1:-1:-1;;;;;3713:32:1;;;21410:26:0::2;::::0;::::2;3695:51:1::0;21416:5:0;;;::::2;::::0;;::::2;::::0;21410:17:::2;::::0;3668:18:1;;21410:26:0::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8493:1::-;21269:175:::0;;;:::o;9775:252::-;8351:5;;9842:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9867:22:0;::::1;9859:47;;;;-1:-1:-1::0;;;9859:47:0::1;;;;;;;:::i;:::-;9937:5;::::0;9922:48:::1;::::0;9954:15:::1;::::0;-1:-1:-1;;;;;9922:48:0;;::::1;::::0;9937:5;::::1;::::0;9922:48:::1;::::0;9937:5:::1;::::0;9922:48:::1;-1:-1:-1::0;9981:5:0::1;:16:::0;;-1:-1:-1;;;;;9981:16:0;::::1;-1:-1:-1::0;;;;;;9981:16:0;;::::1;;::::0;;;9775:252;;;:::o;10642:302::-;10737:10;;10711:4;;10737:10;;;;;10736:11;10728:33;;;;-1:-1:-1;;;10728:33:0;;12255:2:1;10728:33:0;;;12237:21:1;12294:1;12274:18;;;12267:29;-1:-1:-1;;;12312:18:1;;;12305:39;12361:18;;10728:33:0;12053:332:1;10728:33:0;-1:-1:-1;;;;;10780:22:0;;10772:47;;;;-1:-1:-1;;;10772:47:0;;;;;;;:::i;:::-;10830:28;10839:10;10851:6;10830:8;:28::i;:::-;10874:40;;671:25:1;;;-1:-1:-1;;;;;10874:40:0;;;10885:10;;10874:40;;659:2:1;644:18;10874:40:0;525:177:1;21586:128:0;8351:5;;21655:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;21685:5:::2;::::0;::::2;;;;;;-1:-1:-1::0;;;;;21685:5:0::2;-1:-1:-1::0;;;;;21679:25:0::2;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;15294:194:::0;15384:5;;15357:7;;15377:65;;15384:5;;;-1:-1:-1;;;;;15384:5:0;15408:10;15428:4;15435:6;15377:30;:65::i;:::-;15460:20;15469:6;15477:2;15460:8;:20::i;8016:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8016:24:0;;-1:-1:-1;8016:24:0;:::o;21082:179::-;8351:5;;21196:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;21231:5:::2;::::0;21225:28:::2;::::0;-1:-1:-1;;;21225:28:0;;-1:-1:-1;;;;;3713:32:1;;;21225:28:0::2;::::0;::::2;3695:51:1::0;21231:5:0;;;::::2;::::0;;::::2;::::0;21225:19:::2;::::0;3668:18:1;;21225:28:0::2;3549:203:1::0;7203:20:0;;;;;;;:::i;10178:172::-;8245:10;10276:4;8236:20;;;:8;:20;;;;;;;;8228:41;;;;-1:-1:-1;;;8228:41:0;;;;;;;:::i;:::-;10298:22:::1;10307:4;10313:6;10298:8;:22::i;9668:99::-:0;9716:16;9752:7;9745:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9745:14:0;;;;;;;;;;;;;;;;;;;;;;;9668:99;:::o;18769:461::-;18868:4;-1:-1:-1;;;;;18898:16:0;;;;;;:39;;-1:-1:-1;;;;;;18918:19:0;;18932:4;18918:19;;18898:39;18890:48;;;;;;18977:10;18949:15;18967:21;;;:9;:21;;;;;;19007:16;;;;18999:67;;;;-1:-1:-1;;;18999:67:0;;;;;;;:::i;:::-;19103:15;19113:5;19103:7;:15;:::i;:::-;19089:10;19079:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;19129:13:0;;;;;;;:22;;19146:5;;19079:21;19129:22;;19146:5;;19129:22;:::i;:::-;;;;-1:-1:-1;;19167:31:0;;671:25:1;;;-1:-1:-1;;;;;19167:31:0;;;19176:10;;-1:-1:-1;;;;;;;;;;;19167:31:0;659:2:1;644:18;19167:31:0;;;;;;;;-1:-1:-1;19218:4:0;;18769:461;-1:-1:-1;;;18769:461:0:o;10985:337::-;11109:10;;11078:4;;11109:10;;;;;11108:11;11100:33;;;;-1:-1:-1;;;11100:33:0;;12255:2:1;11100:33:0;;;12237:21:1;12294:1;12274:18;;;12267:29;-1:-1:-1;;;12312:18:1;;;12305:39;12361:18;;11100:33:0;12053:332:1;11100:33:0;11177:1;11158:8;11152:22;:26;11144:53;;;;-1:-1:-1;;;11144:53:0;;12592:2:1;11144:53:0;;;12574:21:1;12631:2;12611:18;;;12604:30;-1:-1:-1;;;12650:18:1;;;12643:44;12704:18;;11144:53:0;12390:338:1;11144:53:0;11208:28;11217:10;11229:6;11208:8;:28::i;:::-;11263:10;-1:-1:-1;;;;;11252:40:0;;11275:6;11283:8;11252:40;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;11310:4:0;10985:337;;;;:::o;15096:190::-;15174:5;;15147:7;;15167:65;;15174:5;;;-1:-1:-1;;;;;15174:5:0;15198:10;15218:4;15225:6;15167:30;:65::i;:::-;15250:28;15259:6;15267:10;15250:8;:28::i;15496:165::-;8351:5;;15601:7;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;8918:94::-;8351:5;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8984:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;8984:20:0;;::::1;::::0;;;::::1;::::0;;8918:94::o;22400:220::-;8351:5;;22544:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;22574:5:::2;::::0;22568:44:::2;::::0;-1:-1:-1;;;22568:44:0;;-1:-1:-1;;;;;13287:15:1;;;22568:44:0::2;::::0;::::2;13269:34:1::0;13339:15;;;13319:18;;;13312:43;13391:15;;;13371:18;;;13364:43;22574:5:0;;;::::2;::::0;;::::2;::::0;22568:20:::2;::::0;13204:18:1;;22568:44:0::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9562:98::-:0;8351:5;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9629:15:0::1;9647:5;9629:15:::0;;;:8:::1;:15;::::0;;;;:23;;-1:-1:-1;;9629:23:0::1;::::0;;9562:98::o;14846:242::-;14928:5;;14921:35;;-1:-1:-1;;;14921:35:0;;14945:10;14921:35;;;3695:51:1;14883:7:0;;;;14928:5;;;;-1:-1:-1;;;;;14928:5:0;;14921:23;;3668:18:1;;14921:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14974:5;;14903:53;;-1:-1:-1;14967:66:0;;14974:5;;;-1:-1:-1;;;;;14974:5:0;14998:10;15018:4;14903:53;14967:30;:66::i;:::-;15051:29;15060:7;15069:10;15051:8;:29::i;:::-;15044:36;;;14846:242;:::o;21452:126::-;8351:5;;21520:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;21550:5:::2;::::0;::::2;;;;;;-1:-1:-1::0;;;;;21550:5:0::2;-1:-1:-1::0;;;;;21544:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;13119:1512:::0;8351:5;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;13424:5:::1;::::0;::::1;;13423:6;13415:25;;;::::0;-1:-1:-1;;;13415:25:0;;13809:2:1;13415:25:0::1;::::0;::::1;13791:21:1::0;13848:1;13828:18;;;13821:29;-1:-1:-1;;;13866:18:1;;;13859:36;13912:18;;13415:25:0::1;13607:329:1::0;13415:25:0::1;13451:5;:12:::0;;-1:-1:-1;;13451:12:0::1;13459:4;13451:12;::::0;;-1:-1:-1;;;;;13498:25:0;::::1;::::0;;::::1;::::0;:57:::1;;-1:-1:-1::0;;;;;;13527:28:0;::::1;13550:4;13527:28;;13498:57;13476:129;;;::::0;-1:-1:-1;;;13476:129:0;;14143:2:1;13476:129:0::1;::::0;::::1;14125:21:1::0;14182:2;14162:18;;;14155:30;-1:-1:-1;;;14201:18:1;;;14194:52;14263:18;;13476:129:0::1;13941:346:1::0;13476:129:0::1;13618:5;:19:::0;;-1:-1:-1;;;;;;13618:19:0::1;::::0;-1:-1:-1;;;;;13618:19:0;::::1;;;::::0;;13660:17;:95:::1;;13730:25;13660:95;;;13693:21;13660:95;13648:9;:107:::0;;-1:-1:-1;;13648:107:0::1;;::::0;::::1;::::0;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;13768:4:0::1;:12;13775:5:::0;;13768:4;:12:::1;:::i;:::-;-1:-1:-1::0;13791:6:0::1;:16;13800:7:::0;;13791:6;:16:::1;:::i;:::-;-1:-1:-1::0;13818:8:0::1;:20:::0;;-1:-1:-1;;13818:20:0::1;;::::0;::::1;;::::0;;13855:17;:38;::::1;;;;13876:17;13855:38;13851:111;;;13910:40;13924:5;;13931:7;;13940:9;13910:13;:40::i;:::-;14016:11;-1:-1:-1::0;;;;;14009:28:0::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13996:43;;:9;:43;;;13974:110;;;::::0;-1:-1:-1;;;13974:110:0;;16804:2:1;13974:110:0::1;::::0;::::1;16786:21:1::0;16843:2;16823:18;;;16816:30;-1:-1:-1;;;16862:18:1;;;16855:47;16919:18;;13974:110:0::1;16602:341:1::0;13974:110:0::1;14148:1;14116:11;-1:-1:-1::0;;;;;14109:26:0::1;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;14109:28:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;14103:42;:46;14095:71;;;::::0;-1:-1:-1;;;14095:71:0;;17804:2:1;14095:71:0::1;::::0;::::1;17786:21:1::0;17843:2;17823:18;;;17816:30;-1:-1:-1;;;17862:18:1;;;17855:42;17914:18;;14095:71:0::1;17602:336:1::0;14095:71:0::1;-1:-1:-1::0;;;;;14187:20:0;::::1;14179:51;;;::::0;-1:-1:-1;;;14179:51:0;;18145:2:1;14179:51:0::1;::::0;::::1;18127:21:1::0;18184:2;18164:18;;;18157:30;-1:-1:-1;;;18203:18:1;;;18196:48;18261:18;;14179:51:0::1;17943:342:1::0;14179:51:0::1;14241:5;:14:::0;;-1:-1:-1;;;;;;14241:14:0::1;-1:-1:-1::0;;;;;14241:14:0;;::::1;::::0;;;::::1;::::0;;;14276:19;::::1;14268:49;;;::::0;-1:-1:-1;;;14268:49:0;;18492:2:1;14268:49:0::1;::::0;::::1;18474:21:1::0;18531:2;18511:18;;;18504:30;-1:-1:-1;;;18550:18:1;;;18543:47;18607:18;;14268:49:0::1;18290:341:1::0;14268:49:0::1;-1:-1:-1::0;;;;;14328:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:22;;-1:-1:-1;;14328:22:0::1;14346:4;14328:22:::0;;::::1;::::0;;;14361:7:::1;:19:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;14361:19:0::1;::::0;;::::1;::::0;;14463:21:::1;14499:11:::0;;14495:129:::1;;14546:35;::::0;14528:12:::1;::::0;14546:10:::1;::::0;14569:7;;14528:12;14546:35;14528:12;14546:35;14569:7;14546:10;:35:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14527:54;;;14604:7;14596:16;;;::::0;::::1;;14512:112;14495:129;13404:1227;13119:1512:::0;;;;;;;;;;:::o;10358:247::-;8245:10;10484:4;8236:20;;;:8;:20;;;;;;;;8228:41;;;;-1:-1:-1;;;8228:41:0;;;;;;;:::i;:::-;10501:24:::1;10509:7;10518:6;10501:7;:24::i;:::-;10559:7;-1:-1:-1::0;;;;;10541:34:0::1;10551:6;10541:34;10568:6;10541:34;;;;671:25:1::0;;659:2;644:18;;525:177;22191:201:0;8351:5;;22316:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;22351:5:::2;::::0;22345:39:::2;::::0;-1:-1:-1;;;22345:39:0;;-1:-1:-1;;;;;3713:32:1;;;22345:39:0::2;::::0;::::2;3695:51:1::0;22351:5:0;;;::::2;::::0;;::::2;::::0;22345:31:::2;::::0;3668:18:1;;22345:39:0::2;3549:203:1::0;21984:199:0;8351:5;;22108:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;22143:5:::2;::::0;22137:38:::2;::::0;-1:-1:-1;;;22137:38:0;;-1:-1:-1;;;;;3713:32:1;;;22137:38:0::2;::::0;::::2;3695:51:1::0;22143:5:0;;;::::2;::::0;;::::2;::::0;22137:30:::2;::::0;3668:18:1;;22137:38:0::2;3549:203:1::0;22628:222:0;8351:5;;22773:4;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;8445:16:::1;:14;:16::i;:::-;8437:45;;;;-1:-1:-1::0;;;8437:45:0::1;;;;;;;:::i;:::-;22803:5:::2;::::0;22797:45:::2;::::0;-1:-1:-1;;;22797:45:0;;-1:-1:-1;;;;;13287:15:1;;;22797:45:0::2;::::0;::::2;13269:34:1::0;13339:15;;;13319:18;;;13312:43;13391:15;;;13371:18;;;13364:43;22803:5:0;;;::::2;::::0;;::::2;::::0;22797:21:::2;::::0;13204:18:1;;22797:45:0::2;13029:384:1::0;9020:196:0;8351:5;;-1:-1:-1;;;;;8351:5:0;8337:10;:19;8329:41;;;;-1:-1:-1;;;8329:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9092:19:0;::::1;9084:44;;;;-1:-1:-1::0;;;9084:44:0::1;;;;;;;:::i;:::-;9139:13;:21:::0;;-1:-1:-1;;;;;;9139:21:0::1;-1:-1:-1::0;;;;;9139:21:0;::::1;;::::0;;9185:23:::1;7894:6;9185:15;:23;:::i;:::-;9171:11;:37:::0;-1:-1:-1;9020:196:0:o;16469:250::-;16599:7;8558:16;:14;:16::i;:::-;8557:17;8549:46;;;;-1:-1:-1;;;8549:46:0;;19048:2:1;8549:46:0;;;19030:21:1;19087:2;19067:18;;;19060:30;-1:-1:-1;;;19106:18:1;;;19099:46;19162:18;;8549:46:0;18846:340:1;8549:46:0;16619:19:::1;16625:4;16631:6;16619:5;:19::i;:::-;16656:5;::::0;16649:38:::1;::::0;16656:5;;::::1;-1:-1:-1::0;;;;;16656:5:0::1;16676:2:::0;16680:6;16649:26:::1;:38::i;:::-;-1:-1:-1::0;16705:6:0;;16469:250;-1:-1:-1;;16469:250:0:o;11330:325::-;11399:16;:14;:16::i;:::-;11395:253;;;11438:5;;11432:29;;-1:-1:-1;;;11432:29:0;;-1:-1:-1;;;;;19383:32:1;;;11432:29:0;;;19365:51:1;19432:18;;;19425:34;;;11438:5:0;;;;;;;;11432:17;;19338:18:1;;11432:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11330:325;;:::o;11395:253::-;11490:5;;11483:38;;-1:-1:-1;;;11483:38:0;;11515:4;11483:38;;;3695:51:1;11525:6:0;;11490:5;;;-1:-1:-1;;;;;11490:5:0;;11483:23;;3668:18:1;;11483:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;11479:169;;11555:5;;11548:38;;11555:5;;;-1:-1:-1;;;;;11555:5:0;11575:2;11579:6;11548:26;:38::i;:::-;11330:325;;:::o;11479:169::-;11619:17;11625:2;11629:6;11619:5;:17::i;11663:330::-;11735:16;:14;:16::i;:::-;11731:255;;;11774:5;;11768:31;;-1:-1:-1;;;11768:31:0;;-1:-1:-1;;;;;19383:32:1;;;11768:31:0;;;19365:51:1;19432:18;;;19425:34;;;11774:5:0;;;;;;;;11768:17;;19338:18:1;;11768:31:0;19191:274:1;11731:255:0;-1:-1:-1;;;;;11821:15:0;;;;;;:9;:15;;;;;;:25;-1:-1:-1;11817:169:0;;11863:19;11869:4;11875:6;11863:5;:19::i;11817:169::-;11922:5;;11915:59;;11922:5;;;-1:-1:-1;;;;;11922:5:0;11946:4;11960;11967:6;5126:284;5323:68;;-1:-1:-1;;;;;19728:15:1;;;5323:68:0;;;19710:34:1;19780:15;;19760:18;;;19753:43;19812:18;;;19805:34;;;5270:132:0;;5303:5;;-1:-1:-1;;;5346:27:0;19645:18:1;;5323:68:0;;;;-1:-1:-1;;5323:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;5323:68:0;-1:-1:-1;;;;;;5323:68:0;;;;;;;;;;5270:18;:132::i;:::-;5126:284;;;;:::o;15669:182::-;15777:7;8558:16;:14;:16::i;:::-;8557:17;8549:46;;;;-1:-1:-1;;;8549:46:0;;19048:2:1;8549:46:0;;;19030:21:1;19087:2;19067:18;;;19060:30;-1:-1:-1;;;19106:18:1;;;19099:46;19162:18;;8549:46:0;18846:340:1;8549:46:0;15802:17:::1;15808:2;15812:6;15802:5;:17::i;:::-;-1:-1:-1::0;15837:6:0;;15669:182;-1:-1:-1;15669:182:0:o;22858:595::-;23033:5;;23027:51;;-1:-1:-1;;;23027:51:0;;23000:12;;23033:5;;;-1:-1:-1;;;;;23033:5:0;;23027:24;;:51;;23052:5;;;;23059:7;;;;23068:9;;23027:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23027:51:0;;;;;;;;-1:-1:-1;;23027:51:0;;;;;;;;;;;;:::i;:::-;;;23023:150;;;23148:4;-1:-1:-1;23023:150:0;23190:7;23185:207;;23224:5;;23218:52;;-1:-1:-1;;;23218:52:0;;23224:5;;;;-1:-1:-1;;;;;23224:5:0;;23218:25;;:52;;23244:5;;;;23251:7;;;;23260:9;;23218:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23218:52:0;;;;;;;;-1:-1:-1;;23218:52:0;;;;;;;;;;;;:::i;:::-;;;23214:167;;;23352:4;-1:-1:-1;23214:167:0;23412:7;23404:41;;;;-1:-1:-1;;;23404:41:0;;20844:2:1;23404:41:0;;;20826:21:1;20883:2;20863:18;;;20856:30;-1:-1:-1;;;20902:18:1;;;20895:51;20963:18;;23404:41:0;20642:345:1;23404:41:0;22989:464;22858:595;;;;;:::o;17600:403::-;-1:-1:-1;;;;;17676:21:0;;17668:67;;;;-1:-1:-1;;;17668:67:0;;21194:2:1;17668:67:0;;;21176:21:1;21233:2;21213:18;;;21206:30;21272:34;21252:18;;;21245:62;-1:-1:-1;;;21323:18:1;;;21316:31;21364:19;;17668:67:0;20992:397:1;17668:67:0;-1:-1:-1;;;;;17766:18:0;;17748:15;17766:18;;;:9;:18;;;;;;17803:17;;;;17795:64;;;;-1:-1:-1;;;17795:64:0;;21596:2:1;17795:64:0;;;21578:21:1;21635:2;21615:18;;;21608:30;21674:34;21654:18;;;21647:62;-1:-1:-1;;;21725:18:1;;;21718:32;21767:19;;17795:64:0;21394:398:1;17795:64:0;17893:16;17903:6;17893:7;:16;:::i;:::-;-1:-1:-1;;;;;17872:18:0;;;;;;:9;:18;;;;;:37;;;;17920:12;:22;;17936:6;;17872:18;17920:22;;17936:6;;17920:22;:::i;:::-;;;;-1:-1:-1;;17958:37:0;;671:25:1;;;17984:1:0;;-1:-1:-1;;;;;17958:37:0;;;-1:-1:-1;;;;;;;;;;;17958:37:0;659:2:1;644:18;17958:37:0;;;;;;;17657:346;17600:403;;:::o;4871:247::-;5041:58;;-1:-1:-1;;;;;19383:32:1;;5041:58:0;;;19365:51:1;19432:18;;;19425:34;;;4988:122:0;;5021:5;;-1:-1:-1;;;5064:23:0;19338:18:1;;5041:58:0;19191:274:1;17000:268:0;-1:-1:-1;;;;;17076:21:0;;17068:65;;;;-1:-1:-1;;;17068:65:0;;21999:2:1;17068:65:0;;;21981:21:1;22038:2;22018:18;;;22011:30;22077:33;22057:18;;;22050:61;22128:18;;17068:65:0;21797:355:1;17068:65:0;17162:6;17146:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;17179:18:0;;;;;;:9;:18;;;;;:28;;17201:6;;17179:18;:28;;17201:6;;17179:28;:::i;:::-;;;;-1:-1:-1;;17223:37:0;;671:25:1;;;-1:-1:-1;;;;;17223:37:0;;;17240:1;;-1:-1:-1;;;;;;;;;;;17223:37:0;659:2:1;644:18;17223:37:0;;;;;;;17000:268;;:::o;5418:582::-;5549:1;5528:5;-1:-1:-1;;;;;5520:26:0;;:30;5498:111;;;;-1:-1:-1;;;5498:111:0;;22359:2:1;5498:111:0;;;22341:21:1;22398:2;22378:18;;;22371:30;22437:33;22417:18;;;22410:61;22488:18;;5498:111:0;22157:355:1;5498:111:0;5623:12;5637:23;5672:5;-1:-1:-1;;;;;5664:19:0;5684:4;5664:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5622:67;;;;5708:7;5700:52;;;;-1:-1:-1;;;5700:52:0;;23011:2:1;5700:52:0;;;22993:21:1;;;23030:18;;;23023:30;23089:34;23069:18;;;23062:62;23141:18;;5700:52:0;22809:356:1;5700:52:0;5769:17;;:21;5765:228;;5884:10;5873:30;;;;;;;;;;;;:::i;:::-;5847:134;;;;-1:-1:-1;;;5847:134:0;;23372:2:1;5847:134:0;;;23354:21:1;23411:2;23391:18;;;23384:30;23450:34;23430:18;;;23423:62;-1:-1:-1;;;23501:18:1;;;23494:40;23551:19;;5847:134:0;23170:406:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:328;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;453:2;442:9;438:18;425:32;415:42;;476:38;510:2;499:9;495:18;476:38;:::i;:::-;466:48;;192:328;;;;;:::o;707:254::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:52;;;852:1;849;842:12;804:52;888:9;875:23;865:33;;917:38;951:2;940:9;936:18;917:38;:::i;:::-;907:48;;707:254;;;;;:::o;966:250::-;1051:1;1061:113;1075:6;1072:1;1069:13;1061:113;;;1151:11;;;1145:18;1132:11;;;1125:39;1097:2;1090:10;1061:113;;;-1:-1:-1;;1208:1:1;1190:16;;1183:27;966:250::o;1221:271::-;1263:3;1301:5;1295:12;1328:6;1323:3;1316:19;1344:76;1413:6;1406:4;1401:3;1397:14;1390:4;1383:5;1379:16;1344:76;:::i;:::-;1474:2;1453:15;-1:-1:-1;;1449:29:1;1440:39;;;;1481:4;1436:50;;1221:271;-1:-1:-1;;1221:271:1:o;1497:220::-;1646:2;1635:9;1628:21;1609:4;1666:45;1707:2;1696:9;1692:18;1684:6;1666:45;:::i;1722:254::-;1790:6;1798;1851:2;1839:9;1830:7;1826:23;1822:32;1819:52;;;1867:1;1864;1857:12;1819:52;1890:29;1909:9;1890:29;:::i;:::-;1880:39;1966:2;1951:18;;;;1938:32;;-1:-1:-1;;;1722:254:1:o;2173:328::-;2250:6;2258;2266;2319:2;2307:9;2298:7;2294:23;2290:32;2287:52;;;2335:1;2332;2325:12;2287:52;2358:29;2377:9;2358:29;:::i;:::-;2348:39;;2406:38;2440:2;2429:9;2425:18;2406:38;:::i;:::-;2396:48;;2491:2;2480:9;2476:18;2463:32;2453:42;;2173:328;;;;;:::o;2506:180::-;2565:6;2618:2;2606:9;2597:7;2593:23;2589:32;2586:52;;;2634:1;2631;2624:12;2586:52;-1:-1:-1;2657:23:1;;2506:180;-1:-1:-1;2506:180:1:o;2691:127::-;2752:10;2747:3;2743:20;2740:1;2733:31;2783:4;2780:1;2773:15;2807:4;2804:1;2797:15;2823:341;2968:2;2953:18;;3001:1;2990:13;;2980:144;;3046:10;3041:3;3037:20;3034:1;3027:31;3081:4;3078:1;3071:15;3109:4;3106:1;3099:15;2980:144;3133:25;;;2823:341;:::o;3358:186::-;3417:6;3470:2;3458:9;3449:7;3445:23;3441:32;3438:52;;;3486:1;3483;3476:12;3438:52;3509:29;3528:9;3509:29;:::i;3757:658::-;3928:2;3980:21;;;4050:13;;3953:18;;;4072:22;;;3899:4;;3928:2;4151:15;;;;4125:2;4110:18;;;3899:4;4194:195;4208:6;4205:1;4202:13;4194:195;;;4273:13;;-1:-1:-1;;;;;4269:39:1;4257:52;;4364:15;;;;4329:12;;;;4305:1;4223:9;4194:195;;;-1:-1:-1;4406:3:1;;3757:658;-1:-1:-1;;;;;;3757:658:1:o;4420:127::-;4481:10;4476:3;4472:20;4469:1;4462:31;4512:4;4509:1;4502:15;4536:4;4533:1;4526:15;4552:275;4623:2;4617:9;4688:2;4669:13;;-1:-1:-1;;4665:27:1;4653:40;;4723:18;4708:34;;4744:22;;;4705:62;4702:88;;;4770:18;;:::i;:::-;4806:2;4799:22;4552:275;;-1:-1:-1;4552:275:1:o;4832:187::-;4881:4;4914:18;4906:6;4903:30;4900:56;;;4936:18;;:::i;:::-;-1:-1:-1;5002:2:1;4981:15;-1:-1:-1;;4977:29:1;5008:4;4973:40;;4832:187::o;5024:741::-;5102:6;5110;5163:2;5151:9;5142:7;5138:23;5134:32;5131:52;;;5179:1;5176;5169:12;5131:52;5215:9;5202:23;5192:33;;5276:2;5265:9;5261:18;5248:32;5303:18;5295:6;5292:30;5289:50;;;5335:1;5332;5325:12;5289:50;5358:22;;5411:4;5403:13;;5399:27;-1:-1:-1;5389:55:1;;5440:1;5437;5430:12;5389:55;5476:2;5463:16;5501:49;5517:32;5546:2;5517:32;:::i;:::-;5501:49;:::i;:::-;5573:2;5566:5;5559:17;5613:7;5608:2;5603;5599;5595:11;5591:20;5588:33;5585:53;;;5634:1;5631;5624:12;5585:53;5689:2;5684;5680;5676:11;5671:2;5664:5;5660:14;5647:45;5733:1;5728:2;5723;5716:5;5712:14;5708:23;5701:34;5754:5;5744:15;;;;;5024:741;;;;;:::o;5770:118::-;5856:5;5849:13;5842:21;5835:5;5832:32;5822:60;;5878:1;5875;5868:12;5822:60;5770:118;:::o;5893:241::-;5949:6;6002:2;5990:9;5981:7;5977:23;5973:32;5970:52;;;6018:1;6015;6008:12;5970:52;6057:9;6044:23;6076:28;6098:5;6076:28;:::i;:::-;6123:5;5893:241;-1:-1:-1;;;5893:241:1:o;6139:334::-;6216:6;6224;6232;6285:2;6273:9;6264:7;6260:23;6256:32;6253:52;;;6301:1;6298;6291:12;6253:52;6324:29;6343:9;6324:29;:::i;:::-;6314:39;;6372:38;6406:2;6395:9;6391:18;6372:38;:::i;:::-;6362:48;;6429:38;6463:2;6452:9;6448:18;6429:38;:::i;6478:260::-;6546:6;6554;6607:2;6595:9;6586:7;6582:23;6578:32;6575:52;;;6623:1;6620;6613:12;6575:52;6646:29;6665:9;6646:29;:::i;:::-;6636:39;;6694:38;6728:2;6717:9;6713:18;6694:38;:::i;6743:348::-;6795:8;6805:6;6859:3;6852:4;6844:6;6840:17;6836:27;6826:55;;6877:1;6874;6867:12;6826:55;-1:-1:-1;6900:20:1;;6943:18;6932:30;;6929:50;;;6975:1;6972;6965:12;6929:50;7012:4;7004:6;7000:17;6988:29;;7064:3;7057:4;7048:6;7040;7036:19;7032:30;7029:39;7026:59;;;7081:1;7078;7071:12;7026:59;6743:348;;;;;:::o;7096:114::-;7180:4;7173:5;7169:16;7162:5;7159:27;7149:55;;7200:1;7197;7190:12;7215:1349;7353:6;7361;7369;7377;7385;7393;7401;7409;7417;7425;7478:3;7466:9;7457:7;7453:23;7449:33;7446:53;;;7495:1;7492;7485:12;7446:53;7535:9;7522:23;7564:18;7605:2;7597:6;7594:14;7591:34;;;7621:1;7618;7611:12;7591:34;7660:59;7711:7;7702:6;7691:9;7687:22;7660:59;:::i;:::-;7738:8;;-1:-1:-1;7634:85:1;-1:-1:-1;7826:2:1;7811:18;;7798:32;;-1:-1:-1;7842:16:1;;;7839:36;;;7871:1;7868;7861:12;7839:36;;7910:61;7963:7;7952:8;7941:9;7937:24;7910:61;:::i;:::-;7990:8;;-1:-1:-1;7884:87:1;-1:-1:-1;;8075:2:1;8060:18;;8047:32;8088:29;8047:32;8088:29;:::i;:::-;8136:5;-1:-1:-1;8160:38:1;8194:2;8179:18;;8160:38;:::i;:::-;8150:48;;8217:39;8251:3;8240:9;8236:19;8217:39;:::i;:::-;8207:49;;8275:39;8309:3;8298:9;8294:19;8275:39;:::i;:::-;8265:49;;8366:3;8355:9;8351:19;8338:33;8380:30;8402:7;8380:30;:::i;:::-;8429:7;-1:-1:-1;8488:3:1;8473:19;;8460:33;8502:30;8460:33;8502:30;:::i;:::-;8551:7;8541:17;;;7215:1349;;;;;;;;;;;;;:::o;8569:322::-;8646:6;8654;8662;8715:2;8703:9;8694:7;8690:23;8686:32;8683:52;;;8731:1;8728;8721:12;8683:52;8767:9;8754:23;8744:33;;8796:38;8830:2;8819:9;8815:18;8796:38;:::i;8896:332::-;9098:2;9080:21;;;9137:1;9117:18;;;9110:29;-1:-1:-1;;;9170:2:1;9155:18;;9148:39;9219:2;9204:18;;8896:332::o;9233:380::-;9312:1;9308:12;;;;9355;;;9376:61;;9430:4;9422:6;9418:17;9408:27;;9376:61;9483:2;9475:6;9472:14;9452:18;9449:38;9446:161;;9529:10;9524:3;9520:20;9517:1;9510:31;9564:4;9561:1;9554:15;9592:4;9589:1;9582:15;9446:161;;9233:380;;;:::o;9618:340::-;9820:2;9802:21;;;9859:2;9839:18;;;9832:30;-1:-1:-1;;;9893:2:1;9878:18;;9871:46;9949:2;9934:18;;9618:340::o;9963:245::-;10030:6;10083:2;10071:9;10062:7;10058:23;10054:32;10051:52;;;10099:1;10096;10089:12;10051:52;10131:9;10125:16;10150:28;10172:5;10150:28;:::i;10574:127::-;10635:10;10630:3;10626:20;10623:1;10616:31;10666:4;10663:1;10656:15;10690:4;10687:1;10680:15;10706:128;10773:9;;;10794:11;;;10791:37;;;10808:18;;:::i;10839:402::-;11041:2;11023:21;;;11080:2;11060:18;;;11053:30;11119:34;11114:2;11099:18;;11092:62;-1:-1:-1;;;11185:2:1;11170:18;;11163:36;11231:3;11216:19;;10839:402::o;11246:125::-;11311:9;;;11332:10;;;11329:36;;;11345:18;;:::i;11376:331::-;11578:2;11560:21;;;11617:1;11597:18;;;11590:29;-1:-1:-1;;;11650:2:1;11635:18;;11628:38;11698:2;11683:18;;11376:331::o;11712:336::-;11914:2;11896:21;;;11953:2;11933:18;;;11926:30;-1:-1:-1;;;11987:2:1;11972:18;;11965:42;12039:2;12024:18;;11712:336::o;12733:291::-;12910:6;12899:9;12892:25;12953:2;12948;12937:9;12933:18;12926:30;12873:4;12973:45;13014:2;13003:9;12999:18;12991:6;12973:45;:::i;13418:184::-;13488:6;13541:2;13529:9;13520:7;13516:23;13512:32;13509:52;;;13557:1;13554;13547:12;13509:52;-1:-1:-1;13580:16:1;;13418:184;-1:-1:-1;13418:184:1:o;14418:545::-;14520:2;14515:3;14512:11;14509:448;;;14556:1;14581:5;14577:2;14570:17;14626:4;14622:2;14612:19;14696:2;14684:10;14680:19;14677:1;14673:27;14667:4;14663:38;14732:4;14720:10;14717:20;14714:47;;;-1:-1:-1;14755:4:1;14714:47;14810:2;14805:3;14801:12;14798:1;14794:20;14788:4;14784:31;14774:41;;14865:82;14883:2;14876:5;14873:13;14865:82;;;14928:17;;;14909:1;14898:13;14865:82;;15139:1206;15263:18;15258:3;15255:27;15252:53;;;15285:18;;:::i;:::-;15314:94;15404:3;15364:38;15396:4;15390:11;15364:38;:::i;:::-;15358:4;15314:94;:::i;:::-;15434:1;15459:2;15454:3;15451:11;15476:1;15471:616;;;;16131:1;16148:3;16145:93;;;-1:-1:-1;16204:19:1;;;16191:33;16145:93;-1:-1:-1;;15096:1:1;15092:11;;;15088:24;15084:29;15074:40;15120:1;15116:11;;;15071:57;16251:78;;15444:895;;15471:616;14365:1;14358:14;;;14402:4;14389:18;;-1:-1:-1;;15507:17:1;;;15608:9;15630:229;15644:7;15641:1;15638:14;15630:229;;;15733:19;;;15720:33;15705:49;;15840:4;15825:20;;;;15793:1;15781:14;;;;15660:12;15630:229;;;15634:3;15887;15878:7;15875:16;15872:159;;;16011:1;16007:6;16001:3;15995;15992:1;15988:11;15984:21;15980:34;15976:39;15963:9;15958:3;15954:19;15941:33;15937:79;15929:6;15922:95;15872:159;;;16074:1;16068:3;16065:1;16061:11;16057:19;16051:4;16044:33;15444:895;;;15139:1206;;;:::o;16350:247::-;16418:6;16471:2;16459:9;16450:7;16446:23;16442:32;16439:52;;;16487:1;16484;16477:12;16439:52;16519:9;16513:16;16538:29;16561:5;16538:29;:::i;16948:649::-;17028:6;17081:2;17069:9;17060:7;17056:23;17052:32;17049:52;;;17097:1;17094;17087:12;17049:52;17130:9;17124:16;17163:18;17155:6;17152:30;17149:50;;;17195:1;17192;17185:12;17149:50;17218:22;;17271:4;17263:13;;17259:27;-1:-1:-1;17249:55:1;;17300:1;17297;17290:12;17249:55;17329:2;17323:9;17354:49;17370:32;17399:2;17370:32;:::i;17354:49::-;17426:2;17419:5;17412:17;17466:7;17461:2;17456;17452;17448:11;17444:20;17441:33;17438:53;;;17487:1;17484;17477:12;17438:53;17500:67;17564:2;17559;17552:5;17548:14;17543:2;17539;17535:11;17500:67;:::i;:::-;17586:5;16948:649;-1:-1:-1;;;;;16948:649:1:o;19850:267::-;19939:6;19934:3;19927:19;19991:6;19984:5;19977:4;19972:3;19968:14;19955:43;-1:-1:-1;20043:1:1;20018:16;;;20036:4;20014:27;;;20007:38;;;;20099:2;20078:15;;;-1:-1:-1;;20074:29:1;20065:39;;;20061:50;;19850:267::o;20122:515::-;20363:2;20352:9;20345:21;20326:4;20389:62;20447:2;20436:9;20432:18;20424:6;20416;20389:62;:::i;:::-;20499:9;20491:6;20487:22;20482:2;20471:9;20467:18;20460:50;20527;20570:6;20562;20554;20527:50;:::i;:::-;20519:58;;;20625:4;20617:6;20613:17;20608:2;20597:9;20593:18;20586:45;20122:515;;;;;;;;:::o;22517:287::-;22646:3;22684:6;22678:13;22700:66;22759:6;22754:3;22747:4;22739:6;22735:17;22700:66;:::i;:::-;22782:16;;;;;22517:287;-1:-1:-1;;22517:287:1:o

Swarm Source

ipfs://394b8944e34a0f93e11ec17ebe3e880acd7280ebe51ea11754cbc887c8d3be8f

Block Transaction Gas Used Reward
view all blocks collator

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.