ETH Price: $3,312.66 (-1.63%)
Gas: 1 Gwei

Token

Unofficial Pudgy Verse Token (IGLOO)
 

Overview

Max Total Supply

500,000,000 IGLOO

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 IGLOO

Value
$0.00
0x3d36f0c72b650ef3d1c55c7ee94bf28c7d551524
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
IGLOO

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.23;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if(currentAllowance != type(uint256).max) { 
            require(
                currentAllowance >= amount,
                "ERC20: transfer amount exceeds allowance"
            );
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _initialTransfer(address to, uint256 amount) internal virtual {
        _balances[to] = amount;
        _totalSupply += amount;
        emit Transfer(address(0), to, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

contract IGLOO is ERC20, Ownable {
    IDexRouter public immutable dexRouter;
    address public lPair;

    mapping(address => uint256) public walletProtection;

    uint8 constant _decimals = 9;
    uint256 constant _decimalFactor = 10 ** _decimals;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    uint256 public maxSwapTokens;

    address public taxCollector;

    bool public swapEnabled = true;

    uint256 public tradingActiveTime;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public pairs;

    event SetPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("Unofficial Pudgy Verse Token", "IGLOO") {
        taxCollector = msg.sender;

        address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        dexRouter = IDexRouter(routerAddress);

        _approve(msg.sender, routerAddress, type(uint256).max);
        _approve(address(this), routerAddress, type(uint256).max);

        uint256 totalSupply = 500_000_000 * _decimalFactor;

        swapTokensAtAmount = (totalSupply * 1) / 10000;
        maxSwapTokens = totalSupply / 100;

        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[address(this)] = true;

        _initialTransfer(msg.sender, totalSupply);
    }

    receive() external payable {}

    function decimals() public pure override returns (uint8) {
        return 9;
    }

    function updateSwapTokens(uint256 atAmount, uint256 maxAmount) external onlyOwner {
        require(maxAmount <= totalSupply() / 100, "Max swap cannot be higher than 1% supply.");
        swapTokensAtAmount = atAmount;
        maxSwapTokens = maxAmount;
    }

    function toggleSwap() external onlyOwner {
        swapEnabled = !swapEnabled;
    }

    function setPair(address pair, bool value) external onlyOwner {
        require(pair != lPair, "The main pair cannot be removed from pairs");

        pairs[pair] = value;
        emit SetPair(pair, value);
    }

    function getSellFees() public view returns (uint256) {
        if(block.number - tradingActiveTime > 75) return 0;
        return 5;
    }

    function getBuyFees() public view returns (uint256) {
        if(block.number - tradingActiveTime > 75) return 0;
        else if(block.number - tradingActiveTime > 50) return 5;
        else if(block.number - tradingActiveTime > 25) return 10;
        return 15;
    }

    function removeTax() external onlyOwner {
        require(tradingActiveTime > 76);
        tradingActiveTime -= 75;
    }

    function excludeFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if(tradingActiveTime == 0) {
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet active");
        }
        else {
            if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
                uint256 fees = 0;
                uint256 _sf = getSellFees();
                uint256 _bf = getBuyFees();

                if (pairs[to]) {
                    if(_sf > 0)
                        fees = (amount * _sf) / 100;
                }
                else if (_bf > 0 && pairs[from]) {
                    fees = (amount * _bf) / 100;
                    if(block.timestamp - tradingActiveTime < 4) walletProtection[from] = block.timestamp;
                }

                if (fees > 0) {
                    super._transfer(from, address(this), fees);
                    amount -= fees;
                }   

                if (swapEnabled && !swapping && pairs[to]) {
                    swapping = true;
                    swapBack(amount);
                    swapping = false;
                }   
            }
        }

        _beforeTokenTransfer(from, to);
        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 amount) private {
        uint256 amountToSwap = balanceOf(address(this));
        if (amountToSwap < swapTokensAtAmount) return;
        if (amountToSwap > maxSwapTokens) amountToSwap = maxSwapTokens;
        if (amountToSwap > amount) amountToSwap = amount;
        if (amountToSwap == 0) return;

        swapTokensForEth(amountToSwap);
        bool success;
        (success, ) = taxCollector.call{value: address(this).balance}("");
    }

    function withdrawTax() external {
        require(msg.sender == owner() || msg.sender == taxCollector, "Unauthorised");
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

    function addLP(uint256 tokens) external payable {
        require(tradingActiveTime == 0);
        require(msg.value > 0, "Insufficient funds");
        require(tokens > 0, "No LP tokens specified");

        if(lPair == address(0)) {
            lPair = IDexFactory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
            pairs[lPair] = true;
        }

        super._transfer(msg.sender, address(this), tokens * _decimalFactor);

        dexRouter.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
    }

    function antisnipe(address[] calldata _wallets, uint256[] calldata _tokens) external payable onlyOwner {
        _isExcludedFromFees[lPair] = true;
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        if(_wallets.length > 0) {
            for(uint256 i = 0; i < _wallets.length; i++) {
                dexRouter.swapETHForExactTokens{value: address(this).balance} (
                    _tokens[i],
                    path,
                    _wallets[i],
                    block.timestamp
                );
            }
        }
        _isExcludedFromFees[lPair] = false;
        live();
    }

    function live() public onlyOwner {
        require(tradingActiveTime == 0);
        tradingActiveTime = block.number;
    }

    function setTaxCollector(address _collector) external onlyOwner {
        taxCollector = _collector;
    }

    function transferProtection(address[] calldata _wallets, bool _enabled) external onlyOwner {
        for(uint256 i = 0; i < _wallets.length; i++) {
            walletProtection[_wallets[i]] = _enabled ? block.number : 0;
        }
    }

    function _beforeTokenTransfer(address from, address to) internal view {
        require(walletProtection[from] == 0 || block.number - walletProtection[from] == 0 || to == owner(), "Wallet protection enabled, please contact support");
    }
}

Contract Security Audit

Contract ABI

[{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPair","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":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"addLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"antisnipe","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"live","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSwapTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"pairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collector","type":"address"}],"name":"setTaxCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"transferProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"atAmount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"updateSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletProtection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600b805460ff60a01b1916600160a01b17905534801562000023575f80fd5b506040518060400160405280601c81526020017f556e6f6666696369616c20507564677920566572736520546f6b656e000000008152506040518060400160405280600581526020016449474c4f4f60d81b81525081600390816200008991906200041c565b5060046200009882826200041c565b5050505f620000ac620001d860201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b80546001600160a01b03191633908117909155737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052906200013790825f19620001dc565b6200014530825f19620001dc565b5f620001546009600a620005f7565b6200016490631dcd65006200060e565b9050612710620001768260016200060e565b62000182919062000628565b6009556200019260648262000628565b600a55335f818152600d60205260408082208054600160ff1991821681179092553084529190922080549091169091179055620001d0908262000307565b50506200065e565b3390565b6001600160a01b038316620002445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620002a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200023b565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382165f908152602081905260408120829055600280548392906200033590849062000648565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620003a757607f821691505b602082108103620003c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200041757805f5260205f20601f840160051c81016020851015620003f35750805b601f840160051c820191505b8181101562000414575f8155600101620003ff565b50505b505050565b81516001600160401b038111156200043857620004386200037e565b620004508162000449845462000392565b84620003cc565b602080601f83116001811462000486575f84156200046e5750858301515b5f19600386901b1c1916600185901b178555620004e0565b5f85815260208120601f198616915b82811015620004b65788860151825594840194600190910190840162000495565b5085821015620004d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200053c57815f1904821115620005205762000520620004e8565b808516156200052e57918102915b93841c939080029062000501565b509250929050565b5f826200055457506001620005f1565b816200056257505f620005f1565b81600181146200057b57600281146200058657620005a6565b6001915050620005f1565b60ff8411156200059a576200059a620004e8565b50506001821b620005f1565b5060208310610133831016604e8410600b8410161715620005cb575081810a620005f1565b620005d78383620004fc565b805f1904821115620005ed57620005ed620004e8565b0290505b92915050565b5f6200060760ff84168362000544565b9392505050565b8082028115828204841417620005f157620005f1620004e8565b5f826200064357634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620005f157620005f1620004e8565b608051612443620006a85f395f818161026e015281816108440152818161093201528181610dcf01528181610e5d01528181610fa201528181611c220152611cd801526124435ff3fe60806040526004361061020a575f3560e01c8063685fc56811610113578063a457c2d71161009d578063dd62ed3e1161006d578063dd62ed3e146105c1578063dfa20f0a14610605578063e2f4560514610619578063f2fde38b1461062e578063fe33b3021461064d575f80fd5b8063a457c2d714610545578063a9059cbb14610564578063ad29ffde14610583578063bea1dcf8146105a2575f80fd5b8063715018a6116100e3578063715018a6146104cd57806386a22eff146104e15780638da5cb5b14610500578063957aa58c1461051d57806395d89b4114610531575f80fd5b8063685fc568146104525780636ddd1713146104665780636e0c63d91461048657806370a0823114610499575f80fd5b80632e13becf11610194578063395093511161016457806339509351146103b55780635031595f146103d45780635208d031146103e9578063535a2437146104085780635c5d341214610433575f80fd5b80632e13becf146103525780632f5f257214610371578063313ce5671461038557806336a1efe4146103a0575f80fd5b8063095ea7b3116101da578063095ea7b3146102c9578063114d687d146102f857806318160ddd1461030b5780631ff8d5071461031f57806323b872dd14610333575f80fd5b80630644e7571461021557806306fdde031461023c5780630758d9241461025d57806308695b41146102a8575f80fd5b3661021157005b5f80fd5b348015610220575f80fd5b5061022961067b565b6040519081526020015b60405180910390f35b348015610247575f80fd5b506102506106d5565b6040516102339190611d40565b348015610268575f80fd5b506102907f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610233565b3480156102b3575f80fd5b506102c76102c2366004611da3565b610765565b005b3480156102d4575f80fd5b506102e86102e3366004611dc5565b6107ba565b6040519015158152602001610233565b6102c7610306366004611e37565b6107d0565b348015610316575f80fd5b50600254610229565b34801561032a575f80fd5b506102c7610a3f565b34801561033e575f80fd5b506102e861034d366004611e9e565b610a8a565b34801561035d575f80fd5b506102c761036c366004611ef0565b610b3a565b34801561037c575f80fd5b506102c7610bcc565b348015610390575f80fd5b5060405160098152602001610233565b3480156103ab575f80fd5b50610229600a5481565b3480156103c0575f80fd5b506102e86103cf366004611dc5565b610c1d565b3480156103df575f80fd5b50610229600c5481565b3480156103f4575f80fd5b50600654610290906001600160a01b031681565b348015610413575f80fd5b50610229610422366004611da3565b60076020525f908152604090205481565b34801561043e575f80fd5b506102c761044d366004611f40565b610c58565b34801561045d575f80fd5b50610229610d03565b348015610471575f80fd5b50600b546102e890600160a01b900460ff1681565b6102c7610494366004611f60565b610d25565b3480156104a4575f80fd5b506102296104b3366004611da3565b6001600160a01b03165f9081526020819052604090205490565b3480156104d8575f80fd5b506102c761108e565b3480156104ec575f80fd5b506102c76104fb366004611f77565b611101565b34801561050b575f80fd5b506005546001600160a01b0316610290565b348015610528575f80fd5b506102c76111ef565b34801561053c575f80fd5b5061025061122b565b348015610550575f80fd5b506102e861055f366004611dc5565b61123a565b34801561056f575f80fd5b506102e861057e366004611dc5565b6112d2565b34801561058e575f80fd5b506102c761059d366004611ef0565b6112de565b3480156105ad575f80fd5b50600b54610290906001600160a01b031681565b3480156105cc575f80fd5b506102296105db366004611faa565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610610575f80fd5b506102c76113d7565b348015610624575f80fd5b5061022960095481565b348015610639575f80fd5b506102c7610648366004611da3565b611474565b348015610658575f80fd5b506102e8610667366004611da3565b600e6020525f908152604090205460ff1681565b5f604b600c544361068c9190611ff5565b111561069757505f90565b6032600c54436106a79190611ff5565b11156106b35750600590565b6019600c54436106c39190611ff5565b11156106cf5750600a90565b50600f90565b6060600380546106e490612008565b80601f016020809104026020016040519081016040528092919081815260200182805461071090612008565b801561075b5780601f106107325761010080835404028352916020019161075b565b820191905f5260205f20905b81548152906001019060200180831161073e57829003601f168201915b5050505050905090565b6005546001600160a01b031633146107985760405162461bcd60e51b815260040161078f90612040565b60405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6107c633848461155e565b5060015b92915050565b6005546001600160a01b031633146107fa5760405162461bcd60e51b815260040161078f90612040565b6006546001600160a01b03165f908152600d60205260408082208054600160ff199091161790558051600280825260608201909252908160200160208202803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c29190612089565b815f815181106108d4576108d46120a4565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610908576109086120a4565b6001600160a01b03909216602092830291909101909101528315610a0f575f5b84811015610a0d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fb3bdb4147868685818110610972576109726120a4565b90506020020135858a8a8781811061098c5761098c6120a4565b90506020020160208101906109a19190611da3565b426040518663ffffffff1660e01b81526004016109c194939291906120fb565b5f6040518083038185885af11580156109dc573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a04919081019061212f565b50600101610928565b505b6006546001600160a01b03165f908152600d60205260409020805460ff19169055610a386111ef565b5050505050565b6005546001600160a01b03163314610a695760405162461bcd60e51b815260040161078f90612040565b600b805460ff60a01b198116600160a01b9182900460ff1615909102179055565b5f610a96848484611681565b6001600160a01b0384165f9081526001602090815260408083203384529091529020545f198114610b2f5782811015610b225760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161078f565b610b2f853385840361155e565b506001949350505050565b6005546001600160a01b03163314610b645760405162461bcd60e51b815260040161078f90612040565b5f5b82811015610bc65781610b79575f610b7b565b435b60075f868685818110610b9057610b906120a4565b9050602002016020810190610ba59190611da3565b6001600160a01b0316815260208101919091526040015f2055600101610b66565b50505050565b6005546001600160a01b03163314610bf65760405162461bcd60e51b815260040161078f90612040565b604c600c5411610c04575f80fd5b604b600c5f828254610c169190611ff5565b9091555050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107c6918590610c539086906121e8565b61155e565b6005546001600160a01b03163314610c825760405162461bcd60e51b815260040161078f90612040565b6064610c8d60025490565b610c9791906121fb565b811115610cf85760405162461bcd60e51b815260206004820152602960248201527f4d617820737761702063616e6e6f7420626520686967686572207468616e2031604482015268129039bab838363c9760b91b606482015260840161078f565b600991909155600a55565b5f604b600c5443610d149190611ff5565b1115610d1f57505f90565b50600590565b600c5415610d31575f80fd5b5f3411610d755760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b604482015260640161078f565b5f8111610dbd5760405162461bcd60e51b8152602060048201526016602482015275139bc81314081d1bdad95b9cc81cdc1958da599a595960521b604482015260640161078f565b6006546001600160a01b0316610f80577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4d9190612089565b6001600160a01b031663c9c653967f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edb9190612089565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303815f875af1158015610f24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190612089565b600680546001600160a01b0319166001600160a01b039290921691821790555f908152600e60205260409020805460ff191660011790555b610fa03330610f916009600a6122fa565b610f9b9085612308565b611913565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7194730610fef306001600160a01b03165f9081526020819052604090205490565b5f806110036005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611069573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610bc6919061231f565b6005546001600160a01b031633146110b85760405162461bcd60e51b815260040161078f90612040565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461112b5760405162461bcd60e51b815260040161078f90612040565b6006546001600160a01b039081169083160361119c5760405162461bcd60e51b815260206004820152602a60248201527f546865206d61696e20706169722063616e6e6f742062652072656d6f7665642060448201526966726f6d20706169727360b01b606482015260840161078f565b6001600160a01b0382165f818152600e6020526040808220805460ff191685151590811790915590519092917ff40a563af144a84735f7f6c7c3029794b0ac17713e5f048d3fd00ed85aa4ca7a91a35050565b6005546001600160a01b031633146112195760405162461bcd60e51b815260040161078f90612040565b600c5415611225575f80fd5b43600c55565b6060600480546106e490612008565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156112bb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161078f565b6112c8338585840361155e565b5060019392505050565b5f6107c6338484611681565b6005546001600160a01b031633146113085760405162461bcd60e51b815260040161078f90612040565b5f5b82811015610bc65781600d5f868685818110611328576113286120a4565b905060200201602081019061133d9190611da3565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055838382818110611376576113766120a4565b905060200201602081019061138b9190611da3565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516113c7911515815260200190565b60405180910390a260010161130a565b6005546001600160a01b03163314806113fa5750600b546001600160a01b031633145b6114355760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5cd95960a21b604482015260640161078f565b6040515f90339047908381818185875af1925050503d805f8114610bc6576040519150601f19603f3d011682016040523d82523d5f602084013e610bc6565b6005546001600160a01b0316331461149e5760405162461bcd60e51b815260040161078f90612040565b6001600160a01b0381166115035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161078f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161078f565b6001600160a01b0382166116215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161078f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116a75760405162461bcd60e51b815260040161078f9061234a565b6001600160a01b0382166116cd5760405162461bcd60e51b815260040161078f9061238f565b600c545f0361175d576001600160a01b0383165f908152600d602052604090205460ff168061171357506001600160a01b0382165f908152600d602052604090205460ff165b6117585760405162461bcd60e51b815260206004820152601660248201527554726164696e67206e6f74207965742061637469766560501b604482015260640161078f565b6118f9565b6001600160a01b0383165f908152600d602052604090205460ff1615801561179d57506001600160a01b0382165f908152600d602052604090205460ff16155b156118f9575f806117ac610d03565b90505f6117b761067b565b6001600160a01b0386165f908152600e602052604090205490915060ff16156117fe5781156117f95760646117ec8386612308565b6117f691906121fb565b92505b611872565b5f8111801561182457506001600160a01b0386165f908152600e602052604090205460ff165b156118725760646118358286612308565b61183f91906121fb565b92506004600c54426118519190611ff5565b1015611872576001600160a01b0386165f9081526007602052604090204290555b821561189057611883863085611913565b61188d8385611ff5565b93505b600b54600160a01b900460ff1680156118ac575060085460ff16155b80156118cf57506001600160a01b0385165f908152600e602052604090205460ff165b156118f5576008805460ff191660011790556118ea84611a66565b6008805460ff191690555b5050505b6119038383611b08565b61190e838383611913565b505050565b6001600160a01b0383166119395760405162461bcd60e51b815260040161078f9061234a565b6001600160a01b03821661195f5760405162461bcd60e51b815260040161078f9061238f565b6001600160a01b0383165f90815260208190526040902054818110156119d65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161078f565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611a0c9084906121e8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a5891815260200190565b60405180910390a350505050565b305f90815260208190526040902054600954811015611a83575050565b600a54811115611a925750600a545b81811115611a9d5750805b805f03611aa8575050565b611ab181611bcd565b600b546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611afb576040519150601f19603f3d011682016040523d82523d5f602084013e611b00565b606091505b505050505050565b6001600160a01b0382165f908152600760205260409020541580611b4b57506001600160a01b0382165f90815260076020526040902054611b499043611ff5565b155b80611b6357506005546001600160a01b038281169116145b611bc95760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b606482015260840161078f565b5050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c0057611c006120a4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ca09190612089565b81600181518110611cb357611cb36120a4565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790611d179085905f908690309042906004016123d2565b5f604051808303815f87803b158015611d2e575f80fd5b505af1158015611b00573d5f803e3d5ffd5b5f602080835283518060208501525f5b81811015611d6c57858101830151858201604001528201611d50565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611da0575f80fd5b50565b5f60208284031215611db3575f80fd5b8135611dbe81611d8c565b9392505050565b5f8060408385031215611dd6575f80fd5b8235611de181611d8c565b946020939093013593505050565b5f8083601f840112611dff575f80fd5b50813567ffffffffffffffff811115611e16575f80fd5b6020830191508360208260051b8501011115611e30575f80fd5b9250929050565b5f805f8060408587031215611e4a575f80fd5b843567ffffffffffffffff80821115611e61575f80fd5b611e6d88838901611def565b90965094506020870135915080821115611e85575f80fd5b50611e9287828801611def565b95989497509550505050565b5f805f60608486031215611eb0575f80fd5b8335611ebb81611d8c565b92506020840135611ecb81611d8c565b929592945050506040919091013590565b80358015158114611eeb575f80fd5b919050565b5f805f60408486031215611f02575f80fd5b833567ffffffffffffffff811115611f18575f80fd5b611f2486828701611def565b9094509250611f37905060208501611edc565b90509250925092565b5f8060408385031215611f51575f80fd5b50508035926020909101359150565b5f60208284031215611f70575f80fd5b5035919050565b5f8060408385031215611f88575f80fd5b8235611f9381611d8c565b9150611fa160208401611edc565b90509250929050565b5f8060408385031215611fbb575f80fd5b8235611fc681611d8c565b91506020830135611fd681611d8c565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156107ca576107ca611fe1565b600181811c9082168061201c57607f821691505b60208210810361203a57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215612099575f80fd5b8151611dbe81611d8c565b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b838110156120f05781516001600160a01b0316875295820195908201906001016120cb565b509495945050505050565b848152608060208201525f61211360808301866120b8565b6001600160a01b03949094166040830152506060015292915050565b5f6020808385031215612140575f80fd5b825167ffffffffffffffff80821115612157575f80fd5b818501915085601f83011261216a575f80fd5b81518181111561217c5761217c612075565b8060051b604051601f19603f830116810181811085821117156121a1576121a1612075565b6040529182528482019250838101850191888311156121be575f80fd5b938501935b828510156121dc578451845293850193928501926121c3565b98975050505050505050565b808201808211156107ca576107ca611fe1565b5f8261221557634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b8085111561225457815f190482111561223a5761223a611fe1565b8085161561224757918102915b93841c939080029061221f565b509250929050565b5f8261226a575060016107ca565b8161227657505f6107ca565b816001811461228c5760028114612296576122b2565b60019150506107ca565b60ff8411156122a7576122a7611fe1565b50506001821b6107ca565b5060208310610133831016604e8410600b84101617156122d5575081810a6107ca565b6122df838361221a565b805f19048211156122f2576122f2611fe1565b029392505050565b5f611dbe60ff84168361225c565b80820281158282048414176107ca576107ca611fe1565b5f805f60608486031215612331575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a060408201525f6123f060a08301866120b8565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220983aa693a18d77310c181c713a4bc5b9caae82b2e8cce924d02f81608008c75664736f6c63430008170033

Deployed Bytecode

0x60806040526004361061020a575f3560e01c8063685fc56811610113578063a457c2d71161009d578063dd62ed3e1161006d578063dd62ed3e146105c1578063dfa20f0a14610605578063e2f4560514610619578063f2fde38b1461062e578063fe33b3021461064d575f80fd5b8063a457c2d714610545578063a9059cbb14610564578063ad29ffde14610583578063bea1dcf8146105a2575f80fd5b8063715018a6116100e3578063715018a6146104cd57806386a22eff146104e15780638da5cb5b14610500578063957aa58c1461051d57806395d89b4114610531575f80fd5b8063685fc568146104525780636ddd1713146104665780636e0c63d91461048657806370a0823114610499575f80fd5b80632e13becf11610194578063395093511161016457806339509351146103b55780635031595f146103d45780635208d031146103e9578063535a2437146104085780635c5d341214610433575f80fd5b80632e13becf146103525780632f5f257214610371578063313ce5671461038557806336a1efe4146103a0575f80fd5b8063095ea7b3116101da578063095ea7b3146102c9578063114d687d146102f857806318160ddd1461030b5780631ff8d5071461031f57806323b872dd14610333575f80fd5b80630644e7571461021557806306fdde031461023c5780630758d9241461025d57806308695b41146102a8575f80fd5b3661021157005b5f80fd5b348015610220575f80fd5b5061022961067b565b6040519081526020015b60405180910390f35b348015610247575f80fd5b506102506106d5565b6040516102339190611d40565b348015610268575f80fd5b506102907f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610233565b3480156102b3575f80fd5b506102c76102c2366004611da3565b610765565b005b3480156102d4575f80fd5b506102e86102e3366004611dc5565b6107ba565b6040519015158152602001610233565b6102c7610306366004611e37565b6107d0565b348015610316575f80fd5b50600254610229565b34801561032a575f80fd5b506102c7610a3f565b34801561033e575f80fd5b506102e861034d366004611e9e565b610a8a565b34801561035d575f80fd5b506102c761036c366004611ef0565b610b3a565b34801561037c575f80fd5b506102c7610bcc565b348015610390575f80fd5b5060405160098152602001610233565b3480156103ab575f80fd5b50610229600a5481565b3480156103c0575f80fd5b506102e86103cf366004611dc5565b610c1d565b3480156103df575f80fd5b50610229600c5481565b3480156103f4575f80fd5b50600654610290906001600160a01b031681565b348015610413575f80fd5b50610229610422366004611da3565b60076020525f908152604090205481565b34801561043e575f80fd5b506102c761044d366004611f40565b610c58565b34801561045d575f80fd5b50610229610d03565b348015610471575f80fd5b50600b546102e890600160a01b900460ff1681565b6102c7610494366004611f60565b610d25565b3480156104a4575f80fd5b506102296104b3366004611da3565b6001600160a01b03165f9081526020819052604090205490565b3480156104d8575f80fd5b506102c761108e565b3480156104ec575f80fd5b506102c76104fb366004611f77565b611101565b34801561050b575f80fd5b506005546001600160a01b0316610290565b348015610528575f80fd5b506102c76111ef565b34801561053c575f80fd5b5061025061122b565b348015610550575f80fd5b506102e861055f366004611dc5565b61123a565b34801561056f575f80fd5b506102e861057e366004611dc5565b6112d2565b34801561058e575f80fd5b506102c761059d366004611ef0565b6112de565b3480156105ad575f80fd5b50600b54610290906001600160a01b031681565b3480156105cc575f80fd5b506102296105db366004611faa565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610610575f80fd5b506102c76113d7565b348015610624575f80fd5b5061022960095481565b348015610639575f80fd5b506102c7610648366004611da3565b611474565b348015610658575f80fd5b506102e8610667366004611da3565b600e6020525f908152604090205460ff1681565b5f604b600c544361068c9190611ff5565b111561069757505f90565b6032600c54436106a79190611ff5565b11156106b35750600590565b6019600c54436106c39190611ff5565b11156106cf5750600a90565b50600f90565b6060600380546106e490612008565b80601f016020809104026020016040519081016040528092919081815260200182805461071090612008565b801561075b5780601f106107325761010080835404028352916020019161075b565b820191905f5260205f20905b81548152906001019060200180831161073e57829003601f168201915b5050505050905090565b6005546001600160a01b031633146107985760405162461bcd60e51b815260040161078f90612040565b60405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6107c633848461155e565b5060015b92915050565b6005546001600160a01b031633146107fa5760405162461bcd60e51b815260040161078f90612040565b6006546001600160a01b03165f908152600d60205260408082208054600160ff199091161790558051600280825260608201909252908160200160208202803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c29190612089565b815f815181106108d4576108d46120a4565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610908576109086120a4565b6001600160a01b03909216602092830291909101909101528315610a0f575f5b84811015610a0d577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663fb3bdb4147868685818110610972576109726120a4565b90506020020135858a8a8781811061098c5761098c6120a4565b90506020020160208101906109a19190611da3565b426040518663ffffffff1660e01b81526004016109c194939291906120fb565b5f6040518083038185885af11580156109dc573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a04919081019061212f565b50600101610928565b505b6006546001600160a01b03165f908152600d60205260409020805460ff19169055610a386111ef565b5050505050565b6005546001600160a01b03163314610a695760405162461bcd60e51b815260040161078f90612040565b600b805460ff60a01b198116600160a01b9182900460ff1615909102179055565b5f610a96848484611681565b6001600160a01b0384165f9081526001602090815260408083203384529091529020545f198114610b2f5782811015610b225760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161078f565b610b2f853385840361155e565b506001949350505050565b6005546001600160a01b03163314610b645760405162461bcd60e51b815260040161078f90612040565b5f5b82811015610bc65781610b79575f610b7b565b435b60075f868685818110610b9057610b906120a4565b9050602002016020810190610ba59190611da3565b6001600160a01b0316815260208101919091526040015f2055600101610b66565b50505050565b6005546001600160a01b03163314610bf65760405162461bcd60e51b815260040161078f90612040565b604c600c5411610c04575f80fd5b604b600c5f828254610c169190611ff5565b9091555050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107c6918590610c539086906121e8565b61155e565b6005546001600160a01b03163314610c825760405162461bcd60e51b815260040161078f90612040565b6064610c8d60025490565b610c9791906121fb565b811115610cf85760405162461bcd60e51b815260206004820152602960248201527f4d617820737761702063616e6e6f7420626520686967686572207468616e2031604482015268129039bab838363c9760b91b606482015260840161078f565b600991909155600a55565b5f604b600c5443610d149190611ff5565b1115610d1f57505f90565b50600590565b600c5415610d31575f80fd5b5f3411610d755760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b604482015260640161078f565b5f8111610dbd5760405162461bcd60e51b8152602060048201526016602482015275139bc81314081d1bdad95b9cc81cdc1958da599a595960521b604482015260640161078f565b6006546001600160a01b0316610f80577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4d9190612089565b6001600160a01b031663c9c653967f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edb9190612089565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303815f875af1158015610f24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190612089565b600680546001600160a01b0319166001600160a01b039290921691821790555f908152600e60205260409020805460ff191660011790555b610fa03330610f916009600a6122fa565b610f9b9085612308565b611913565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7194730610fef306001600160a01b03165f9081526020819052604090205490565b5f806110036005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611069573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610bc6919061231f565b6005546001600160a01b031633146110b85760405162461bcd60e51b815260040161078f90612040565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461112b5760405162461bcd60e51b815260040161078f90612040565b6006546001600160a01b039081169083160361119c5760405162461bcd60e51b815260206004820152602a60248201527f546865206d61696e20706169722063616e6e6f742062652072656d6f7665642060448201526966726f6d20706169727360b01b606482015260840161078f565b6001600160a01b0382165f818152600e6020526040808220805460ff191685151590811790915590519092917ff40a563af144a84735f7f6c7c3029794b0ac17713e5f048d3fd00ed85aa4ca7a91a35050565b6005546001600160a01b031633146112195760405162461bcd60e51b815260040161078f90612040565b600c5415611225575f80fd5b43600c55565b6060600480546106e490612008565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156112bb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161078f565b6112c8338585840361155e565b5060019392505050565b5f6107c6338484611681565b6005546001600160a01b031633146113085760405162461bcd60e51b815260040161078f90612040565b5f5b82811015610bc65781600d5f868685818110611328576113286120a4565b905060200201602081019061133d9190611da3565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055838382818110611376576113766120a4565b905060200201602081019061138b9190611da3565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516113c7911515815260200190565b60405180910390a260010161130a565b6005546001600160a01b03163314806113fa5750600b546001600160a01b031633145b6114355760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5cd95960a21b604482015260640161078f565b6040515f90339047908381818185875af1925050503d805f8114610bc6576040519150601f19603f3d011682016040523d82523d5f602084013e610bc6565b6005546001600160a01b0316331461149e5760405162461bcd60e51b815260040161078f90612040565b6001600160a01b0381166115035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161078f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161078f565b6001600160a01b0382166116215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161078f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116a75760405162461bcd60e51b815260040161078f9061234a565b6001600160a01b0382166116cd5760405162461bcd60e51b815260040161078f9061238f565b600c545f0361175d576001600160a01b0383165f908152600d602052604090205460ff168061171357506001600160a01b0382165f908152600d602052604090205460ff165b6117585760405162461bcd60e51b815260206004820152601660248201527554726164696e67206e6f74207965742061637469766560501b604482015260640161078f565b6118f9565b6001600160a01b0383165f908152600d602052604090205460ff1615801561179d57506001600160a01b0382165f908152600d602052604090205460ff16155b156118f9575f806117ac610d03565b90505f6117b761067b565b6001600160a01b0386165f908152600e602052604090205490915060ff16156117fe5781156117f95760646117ec8386612308565b6117f691906121fb565b92505b611872565b5f8111801561182457506001600160a01b0386165f908152600e602052604090205460ff165b156118725760646118358286612308565b61183f91906121fb565b92506004600c54426118519190611ff5565b1015611872576001600160a01b0386165f9081526007602052604090204290555b821561189057611883863085611913565b61188d8385611ff5565b93505b600b54600160a01b900460ff1680156118ac575060085460ff16155b80156118cf57506001600160a01b0385165f908152600e602052604090205460ff165b156118f5576008805460ff191660011790556118ea84611a66565b6008805460ff191690555b5050505b6119038383611b08565b61190e838383611913565b505050565b6001600160a01b0383166119395760405162461bcd60e51b815260040161078f9061234a565b6001600160a01b03821661195f5760405162461bcd60e51b815260040161078f9061238f565b6001600160a01b0383165f90815260208190526040902054818110156119d65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161078f565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611a0c9084906121e8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a5891815260200190565b60405180910390a350505050565b305f90815260208190526040902054600954811015611a83575050565b600a54811115611a925750600a545b81811115611a9d5750805b805f03611aa8575050565b611ab181611bcd565b600b546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611afb576040519150601f19603f3d011682016040523d82523d5f602084013e611b00565b606091505b505050505050565b6001600160a01b0382165f908152600760205260409020541580611b4b57506001600160a01b0382165f90815260076020526040902054611b499043611ff5565b155b80611b6357506005546001600160a01b038281169116145b611bc95760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b606482015260840161078f565b5050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c0057611c006120a4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ca09190612089565b81600181518110611cb357611cb36120a4565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790611d179085905f908690309042906004016123d2565b5f604051808303815f87803b158015611d2e575f80fd5b505af1158015611b00573d5f803e3d5ffd5b5f602080835283518060208501525f5b81811015611d6c57858101830151858201604001528201611d50565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611da0575f80fd5b50565b5f60208284031215611db3575f80fd5b8135611dbe81611d8c565b9392505050565b5f8060408385031215611dd6575f80fd5b8235611de181611d8c565b946020939093013593505050565b5f8083601f840112611dff575f80fd5b50813567ffffffffffffffff811115611e16575f80fd5b6020830191508360208260051b8501011115611e30575f80fd5b9250929050565b5f805f8060408587031215611e4a575f80fd5b843567ffffffffffffffff80821115611e61575f80fd5b611e6d88838901611def565b90965094506020870135915080821115611e85575f80fd5b50611e9287828801611def565b95989497509550505050565b5f805f60608486031215611eb0575f80fd5b8335611ebb81611d8c565b92506020840135611ecb81611d8c565b929592945050506040919091013590565b80358015158114611eeb575f80fd5b919050565b5f805f60408486031215611f02575f80fd5b833567ffffffffffffffff811115611f18575f80fd5b611f2486828701611def565b9094509250611f37905060208501611edc565b90509250925092565b5f8060408385031215611f51575f80fd5b50508035926020909101359150565b5f60208284031215611f70575f80fd5b5035919050565b5f8060408385031215611f88575f80fd5b8235611f9381611d8c565b9150611fa160208401611edc565b90509250929050565b5f8060408385031215611fbb575f80fd5b8235611fc681611d8c565b91506020830135611fd681611d8c565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156107ca576107ca611fe1565b600181811c9082168061201c57607f821691505b60208210810361203a57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215612099575f80fd5b8151611dbe81611d8c565b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b838110156120f05781516001600160a01b0316875295820195908201906001016120cb565b509495945050505050565b848152608060208201525f61211360808301866120b8565b6001600160a01b03949094166040830152506060015292915050565b5f6020808385031215612140575f80fd5b825167ffffffffffffffff80821115612157575f80fd5b818501915085601f83011261216a575f80fd5b81518181111561217c5761217c612075565b8060051b604051601f19603f830116810181811085821117156121a1576121a1612075565b6040529182528482019250838101850191888311156121be575f80fd5b938501935b828510156121dc578451845293850193928501926121c3565b98975050505050505050565b808201808211156107ca576107ca611fe1565b5f8261221557634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b8085111561225457815f190482111561223a5761223a611fe1565b8085161561224757918102915b93841c939080029061221f565b509250929050565b5f8261226a575060016107ca565b8161227657505f6107ca565b816001811461228c5760028114612296576122b2565b60019150506107ca565b60ff8411156122a7576122a7611fe1565b50506001821b6107ca565b5060208310610133831016604e8410600b84101617156122d5575081810a6107ca565b6122df838361221a565b805f19048211156122f2576122f2611fe1565b029392505050565b5f611dbe60ff84168361225c565b80820281158282048414176107ca576107ca611fe1565b5f805f60608486031215612331575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a060408201525f6123f060a08301866120b8565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220983aa693a18d77310c181c713a4bc5b9caae82b2e8cce924d02f81608008c75664736f6c63430008170033

Deployed Bytecode Sourcemap

10791:7698:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13083:274;;;;;;;;;;;;;:::i;:::-;;;160:25:1;;;148:2;133:18;13083:274:0;;;;;;;;4025:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10831:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;10831:37:0;749:221:1;17881:108:0;;;;;;;;;;-1:-1:-1;17881:108:0;;;;;:::i;:::-;;:::i;:::-;;5080:210;;;;;;;;;;-1:-1:-1;5080:210:0;;;;;:::i;:::-;;:::i;:::-;;;1848:14:1;;1841:22;1823:41;;1811:2;1796:18;5080:210:0;1683:187:1;17045:694:0;;;;;;:::i;:::-;;:::i;4346:108::-;;;;;;;;;;-1:-1:-1;4434:12:0;;4346:108;;12615:86;;;;;;;;;;;;;:::i;5298:620::-;;;;;;;;;;-1:-1:-1;5298:620:0;;;;;:::i;:::-;;:::i;17997:240::-;;;;;;;;;;-1:-1:-1;17997:240:0;;;;;:::i;:::-;;:::i;13365:124::-;;;;;;;;;;;;;:::i;12252:84::-;;;;;;;;;;-1:-1:-1;12252:84:0;;12327:1;4303:36:1;;4291:2;4276:18;12252:84:0;4161:184:1;11125:28:0;;;;;;;;;;;;;;;;5926:297;;;;;;;;;;-1:-1:-1;5926:297:0;;;;;:::i;:::-;;:::i;11237:32::-;;;;;;;;;;;;;;;;10875:20;;;;;;;;;;-1:-1:-1;10875:20:0;;;;-1:-1:-1;;;;;10875:20:0;;;10904:51;;;;;;;;;;-1:-1:-1;10904:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;12344:263;;;;;;;;;;-1:-1:-1;12344:263:0;;;;;:::i;:::-;;:::i;12934:141::-;;;;;;;;;;;;;:::i;11198:30::-;;;;;;;;;;-1:-1:-1;11198:30:0;;;;-1:-1:-1;;;11198:30:0;;;;;;16431:606;;;;;;:::i;:::-;;:::i;4462:177::-;;;;;;;;;;-1:-1:-1;4462:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;4613:18:0;4581:7;4613:18;;;;;;;;;;;;4462:177;8526:148;;;;;;;;;;;;;:::i;12709:217::-;;;;;;;;;;-1:-1:-1;12709:217:0;;;;;:::i;:::-;;:::i;8312:79::-;;;;;;;;;;-1:-1:-1;8377:6:0;;-1:-1:-1;;;;;8377:6:0;8312:79;;17747:126;;;;;;;;;;;;;:::i;4133:104::-;;;;;;;;;;;;;:::i;6231:482::-;;;;;;;;;;-1:-1:-1;6231:482:0;;;;;:::i;:::-;;:::i;4647:216::-;;;;;;;;;;-1:-1:-1;4647:216:0;;;;;:::i;:::-;;:::i;13497:278::-;;;;;;;;;;-1:-1:-1;13497:278:0;;;;;:::i;:::-;;:::i;11162:27::-;;;;;;;;;;-1:-1:-1;11162:27:0;;;;-1:-1:-1;;;;;11162:27:0;;;4871:201;;;;;;;;;;-1:-1:-1;4871:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5037:18:0;;;5005:7;5037:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4871:201;16190:233;;;;;;;;;;;;;:::i;11085:33::-;;;;;;;;;;;;;;;;8682:281;;;;;;;;;;-1:-1:-1;8682:281:0;;;;;:::i;:::-;;:::i;11337:37::-;;;;;;;;;;-1:-1:-1;11337:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13083:274;13126:7;13184:2;13164:17;;13149:12;:32;;;;:::i;:::-;:37;13146:183;;;-1:-1:-1;13195:1:0;;13083:274::o;13146:183::-;13250:2;13230:17;;13215:12;:32;;;;:::i;:::-;:37;13212:117;;;-1:-1:-1;13261:1:0;;13083:274::o;13212:117::-;13316:2;13296:17;;13281:12;:32;;;;:::i;:::-;:37;13278:51;;;-1:-1:-1;13327:2:0;;13083:274::o;13278:51::-;-1:-1:-1;13347:2:0;;13083:274::o;4025:100::-;4079:13;4112:5;4105:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4025:100;:::o;17881:108::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;;;;;;;;;17956:12:::1;:25:::0;;-1:-1:-1;;;;;;17956:25:0::1;-1:-1:-1::0;;;;;17956:25:0;;;::::1;::::0;;;::::1;::::0;;17881:108::o;5080:210::-;5199:4;5221:39;175:10;5244:7;5253:6;5221:8;:39::i;:::-;-1:-1:-1;5278:4:0;5080:210;;;;;:::o;17045:694::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;17179:5:::1;::::0;-1:-1:-1;;;;;17179:5:0::1;17159:26;::::0;;;:19:::1;:26;::::0;;;;;:33;;17188:4:::1;-1:-1:-1::0;;17159:33:0;;::::1;;::::0;;17227:16;;17241:1:::1;17227:16:::0;;;;;::::1;::::0;;;;::::1;;;;;;;;;;;::::0;-1:-1:-1;17227:16:0::1;17203:40;;17264:9;-1:-1:-1::0;;;;;17264:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17254:4;17259:1;17254:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;17254:26:0::1;;;-1:-1:-1::0;;;;;17254:26:0::1;;;::::0;::::1;17309:4;17291;17296:1;17291:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17291:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:23;17330:19;;17327:343:::1;;17370:9;17366:293;17385:19:::0;;::::1;17366:293;;;17430:9;-1:-1:-1::0;;;;;17430:31:0::1;;17469:21;17515:7;;17523:1;17515:10;;;;;;;:::i;:::-;;;;;;;17548:4;17575:8;;17584:1;17575:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17609:15;17430:213;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;17430:213:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;17406:3:0::1;;17366:293;;;;17327:343;17700:5;::::0;-1:-1:-1;;;;;17700:5:0::1;17709;17680:26:::0;;;:19:::1;:26;::::0;;;;:34;;-1:-1:-1;;17680:34:0::1;::::0;;17725:6:::1;:4;:6::i;:::-;17148:591;17045:694:::0;;;;:::o;12615:86::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;12682:11:::1;::::0;;-1:-1:-1;;;;12667:26:0;::::1;-1:-1:-1::0;;;12682:11:0;;;::::1;;;12681:12;12667:26:::0;;::::1;;::::0;;12615:86::o;5298:620::-;5438:4;5455:36;5465:6;5473:9;5484:6;5455:9;:36::i;:::-;-1:-1:-1;;;;;5531:19:0;;5504:24;5531:19;;;:11;:19;;;;;;;;175:10;5531:33;;;;;;;;-1:-1:-1;;5578:37:0;;5575:314;;5679:6;5659:16;:26;;5633:128;;;;-1:-1:-1;;;5633:128:0;;9529:2:1;5633:128:0;;;9511:21:1;9568:2;9548:18;;;9541:30;9607:34;9587:18;;;9580:62;-1:-1:-1;;;9658:18:1;;;9651:38;9706:19;;5633:128:0;9327:404:1;5633:128:0;5805:57;5814:6;175:10;5855:6;5836:16;:25;5805:8;:57::i;:::-;-1:-1:-1;5906:4:0;;5298:620;-1:-1:-1;;;;5298:620:0:o;17997:240::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;18103:9:::1;18099:131;18118:19:::0;;::::1;18099:131;;;18191:8;:27;;18217:1;18191:27;;;18202:12;18191:27;18159:16;:29;18176:8;;18185:1;18176:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18159:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18159:29:0;:59;18139:3:::1;;18099:131;;;;17997:240:::0;;;:::o;13365:124::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;13444:2:::1;13424:17;;:22;13416:31;;;::::0;::::1;;13479:2;13458:17;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;13365:124:0:o;5926:297::-;175:10;6041:4;6135:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6135:34:0;;;;;;;;;;6041:4;;6063:130;;6113:7;;6135:47;;6172:10;;6135:47;:::i;:::-;6063:8;:130::i;12344:263::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;12474:3:::1;12458:13;4434:12:::0;;;4346:108;12458:13:::1;:19;;;;:::i;:::-;12445:9;:32;;12437:86;;;::::0;-1:-1:-1;;;12437:86:0;;10290:2:1;12437:86:0::1;::::0;::::1;10272:21:1::0;10329:2;10309:18;;;10302:30;10368:34;10348:18;;;10341:62;-1:-1:-1;;;10419:18:1;;;10412:39;10468:19;;12437:86:0::1;10088:405:1::0;12437:86:0::1;12534:18;:29:::0;;;;12574:13:::1;:25:::0;12344:263::o;12934:141::-;12978:7;13036:2;13016:17;;13001:12;:32;;;;:::i;:::-;:37;12998:50;;;-1:-1:-1;13047:1:0;;12934:141::o;12998:50::-;-1:-1:-1;13066:1:0;;12934:141::o;16431:606::-;16498:17;;:22;16490:31;;;;;;16552:1;16540:9;:13;16532:44;;;;-1:-1:-1;;;16532:44:0;;10700:2:1;16532:44:0;;;10682:21:1;10739:2;10719:18;;;10712:30;-1:-1:-1;;;10758:18:1;;;10751:48;10816:18;;16532:44:0;10498:342:1;16532:44:0;16604:1;16595:6;:10;16587:45;;;;-1:-1:-1;;;16587:45:0;;11047:2:1;16587:45:0;;;11029:21:1;11086:2;11066:18;;;11059:30;-1:-1:-1;;;11105:18:1;;;11098:52;11167:18;;16587:45:0;10845:346:1;16587:45:0;16648:5;;-1:-1:-1;;;;;16648:5:0;16645:169;;16704:9;-1:-1:-1;;;;;16704:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16692:43:0;;16736:9;-1:-1:-1;;;;;16736:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16692:76;;-1:-1:-1;;;;;;16692:76:0;;;;;;;-1:-1:-1;;;;;11426:15:1;;;16692:76:0;;;11408:34:1;16762:4:0;11458:18:1;;;11451:43;11343:18;;16692:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16684:5;:84;;-1:-1:-1;;;;;;16684:84:0;-1:-1:-1;;;;;16684:84:0;;;;;;;;;-1:-1:-1;16783:12:0;;;:5;:12;;;;;:19;;-1:-1:-1;;16783:19:0;-1:-1:-1;16783:19:0;;;16645:169;16826:67;16842:10;16862:4;11033:15;10991:1;11033:2;:15;:::i;:::-;16869:23;;:6;:23;:::i;:::-;16826:15;:67::i;:::-;16906:9;-1:-1:-1;;;;;16906:25:0;;16939:21;16970:4;16976:24;16994:4;-1:-1:-1;;;;;4613:18:0;4581:7;4613:18;;;;;;;;;;;;4462:177;16976:24;17001:1;17003;17005:7;8377:6;;-1:-1:-1;;;;;8377:6:0;;8312:79;17005:7;16906:123;;;;;;-1:-1:-1;;;;;;16906:123:0;;;-1:-1:-1;;;;;13414:15:1;;;16906:123:0;;;13396:34:1;13446:18;;;13439:34;;;;13489:18;;;13482:34;;;;13532:18;;;13525:34;13596:15;;;13575:19;;;13568:44;17013:15:0;13628:19:1;;;13621:35;13330:19;;16906:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8526:148::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;8617:6:::1;::::0;8596:40:::1;::::0;8633:1:::1;::::0;-1:-1:-1;;;;;8617:6:0::1;::::0;8596:40:::1;::::0;8633:1;;8596:40:::1;8647:6;:19:::0;;-1:-1:-1;;;;;;8647:19:0::1;::::0;;8526:148::o;12709:217::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;12798:5:::1;::::0;-1:-1:-1;;;;;12798:5:0;;::::1;12790:13:::0;;::::1;::::0;12782:68:::1;;;::::0;-1:-1:-1;;;12782:68:0;;14180:2:1;12782:68:0::1;::::0;::::1;14162:21:1::0;14219:2;14199:18;;;14192:30;14258:34;14238:18;;;14231:62;-1:-1:-1;;;14309:18:1;;;14302:40;14359:19;;12782:68:0::1;13978:406:1::0;12782:68:0::1;-1:-1:-1::0;;;;;12863:11:0;::::1;;::::0;;;:5:::1;:11;::::0;;;;;:19;;-1:-1:-1;;12863:19:0::1;::::0;::::1;;::::0;;::::1;::::0;;;12898:20;;12863:19;;:11;12898:20:::1;::::0;::::1;12709:217:::0;;:::o;17747:126::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;17799:17:::1;::::0;:22;17791:31:::1;;;::::0;::::1;;17853:12;17833:17;:32:::0;17747:126::o;4133:104::-;4189:13;4222:7;4215:14;;;;;:::i;6231:482::-;175:10;6351:4;6400:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6400:34:0;;;;;;;;;;6467:35;;;;6445:122;;;;-1:-1:-1;;;6445:122:0;;14591:2:1;6445:122:0;;;14573:21:1;14630:2;14610:18;;;14603:30;14669:34;14649:18;;;14642:62;-1:-1:-1;;;14720:18:1;;;14713:35;14765:19;;6445:122:0;14389:401:1;6445:122:0;6603:67;175:10;6626:7;6654:15;6635:16;:34;6603:8;:67::i;:::-;-1:-1:-1;6701:4:0;;6231:482;-1:-1:-1;;;6231:482:0:o;4647:216::-;4769:4;4791:42;175:10;4815:9;4826:6;4791:9;:42::i;13497:278::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;13599:9:::1;13594:174;13614:19:::0;;::::1;13594:174;;;13690:8;13655:19;:32;13675:8;;13684:1;13675:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13655:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13655:32:0;:43;;-1:-1:-1;;13655:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13734:8;;13743:1;13734:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13718:38:0::1;;13747:8;13718:38;;;;1848:14:1::0;1841:22;1823:41;;1811:2;1796:18;;1683:187;13718:38:0::1;;;;;;;;13635:3;;13594:174;;16190:233:::0;8377:6;;-1:-1:-1;;;;;8377:6:0;16241:10;:21;;:51;;-1:-1:-1;16280:12:0;;-1:-1:-1;;;;;16280:12:0;16266:10;:26;16241:51;16233:76;;;;-1:-1:-1;;;16233:76:0;;14997:2:1;16233:76:0;;;14979:21:1;15036:2;15016:18;;;15009:30;-1:-1:-1;;;15055:18:1;;;15048:42;15107:18;;16233:76:0;14795:336:1;16233:76:0;16357:58;;16320:12;;16365:10;;16389:21;;16320:12;16357:58;16320:12;16357:58;16389:21;16365:10;16357:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8682:281;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8785:22:0;::::1;8763:110;;;::::0;-1:-1:-1;;;8763:110:0;;15548:2:1;8763:110:0::1;::::0;::::1;15530:21:1::0;15587:2;15567:18;;;15560:30;15626:34;15606:18;;;15599:62;-1:-1:-1;;;15677:18:1;;;15670:36;15723:19;;8763:110:0::1;15346:402:1::0;8763:110:0::1;8910:6;::::0;8889:38:::1;::::0;-1:-1:-1;;;;;8889:38:0;;::::1;::::0;8910:6:::1;::::0;8889:38:::1;::::0;8910:6:::1;::::0;8889:38:::1;8938:6;:17:::0;;-1:-1:-1;;;;;;8938:17:0::1;-1:-1:-1::0;;;;;8938:17:0;;;::::1;::::0;;;::::1;::::0;;8682:281::o;7380:380::-;-1:-1:-1;;;;;7516:19:0;;7508:68;;;;-1:-1:-1;;;7508:68:0;;15955:2:1;7508:68:0;;;15937:21:1;15994:2;15974:18;;;15967:30;16033:34;16013:18;;;16006:62;-1:-1:-1;;;16084:18:1;;;16077:34;16128:19;;7508:68:0;15753:400:1;7508:68:0;-1:-1:-1;;;;;7595:21:0;;7587:68;;;;-1:-1:-1;;;7587:68:0;;16360:2:1;7587:68:0;;;16342:21:1;16399:2;16379:18;;;16372:30;16438:34;16418:18;;;16411:62;-1:-1:-1;;;16489:18:1;;;16482:32;16531:19;;7587:68:0;16158:398:1;7587:68:0;-1:-1:-1;;;;;7668:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7720:32;;160:25:1;;;7720:32:0;;133:18:1;7720:32:0;;;;;;;7380:380;;;:::o;13783:1489::-;-1:-1:-1;;;;;13915:18:0;;13907:68;;;;-1:-1:-1;;;13907:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13994:16:0;;13986:64;;;;-1:-1:-1;;;13986:64:0;;;;;;;:::i;:::-;14066:17;;14087:1;14066:22;14063:1115;;-1:-1:-1;;;;;14113:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;14142:23:0;;;;;;:19;:23;;;;;;;;14113:52;14105:87;;;;-1:-1:-1;;;14105:87:0;;17573:2:1;14105:87:0;;;17555:21:1;17612:2;17592:18;;;17585:30;-1:-1:-1;;;17631:18:1;;;17624:52;17693:18;;14105:87:0;17371:346:1;14105:87:0;14063:1115;;;-1:-1:-1;;;;;14239:25:0;;;;;;:19;:25;;;;;;;;14238:26;:54;;;;-1:-1:-1;;;;;;14269:23:0;;;;;;:19;:23;;;;;;;;14268:24;14238:54;14234:933;;;14313:12;14348:11;14362:13;:11;:13::i;:::-;14348:27;;14394:11;14408:12;:10;:12::i;:::-;-1:-1:-1;;;;;14445:9:0;;;;;;:5;:9;;;;;;14394:26;;-1:-1:-1;14445:9:0;;14441:350;;;14482:7;;14479:64;;14540:3;14524:12;14533:3;14524:6;:12;:::i;:::-;14523:20;;;;:::i;:::-;14516:27;;14479:64;14441:350;;;14596:1;14590:3;:7;:22;;;;-1:-1:-1;;;;;;14601:11:0;;;;;;:5;:11;;;;;;;;14590:22;14586:205;;;14661:3;14645:12;14654:3;14645:6;:12;:::i;:::-;14644:20;;;;:::i;:::-;14637:27;;14728:1;14708:17;;14690:15;:35;;;;:::i;:::-;:39;14687:84;;;-1:-1:-1;;;;;14731:22:0;;;;;;:16;:22;;;;;14756:15;14731:40;;14687:84;14815:8;;14811:136;;14848:42;14864:4;14878;14885;14848:15;:42::i;:::-;14913:14;14923:4;14913:14;;:::i;:::-;;;14811:136;14974:11;;-1:-1:-1;;;14974:11:0;;;;:24;;;;-1:-1:-1;14990:8:0;;;;14989:9;14974:24;:37;;;;-1:-1:-1;;;;;;15002:9:0;;;;;;:5;:9;;;;;;;;14974:37;14970:179;;;15036:8;:15;;-1:-1:-1;;15036:15:0;15047:4;15036:15;;;15074:16;15083:6;15074:8;:16::i;:::-;15113:8;:16;;-1:-1:-1;;15113:16:0;;;14970:179;14294:873;;;14234:933;15190:30;15211:4;15217:2;15190:20;:30::i;:::-;15231:33;15247:4;15253:2;15257:6;15231:15;:33::i;:::-;13783:1489;;;:::o;6721:651::-;-1:-1:-1;;;;;6861:20:0;;6853:70;;;;-1:-1:-1;;;6853:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6942:23:0;;6934:71;;;;-1:-1:-1;;;6934:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7042:17:0;;7018:21;7042:17;;;;;;;;;;;7092:23;;;;7070:111;;;;-1:-1:-1;;;7070:111:0;;17924:2:1;7070:111:0;;;17906:21:1;17963:2;17943:18;;;17936:30;18002:34;17982:18;;;17975:62;-1:-1:-1;;;18053:18:1;;;18046:36;18099:19;;7070:111:0;17722:402:1;7070:111:0;-1:-1:-1;;;;;7217:17:0;;;:9;:17;;;;;;;;;;;7237:22;;;7217:42;;7281:20;;;;;;;;:30;;7253:6;;7217:9;7281:30;;7253:6;;7281:30;:::i;:::-;;;;;;;;7346:9;-1:-1:-1;;;;;7329:35:0;7338:6;-1:-1:-1;;;;;7329:35:0;;7357:6;7329:35;;;;160:25:1;;148:2;133:18;;14:177;7329:35:0;;;;;;;;6842:530;6721:651;;;:::o;15704:478::-;15798:4;15757:20;4613:18;;;;;;;;;;;15834;;15819:33;;15815:46;;;15854:7;15704:478;:::o;15815:46::-;15890:13;;15875:12;:28;15871:62;;;-1:-1:-1;15920:13:0;;15871:62;15963:6;15948:12;:21;15944:48;;;-1:-1:-1;15986:6:0;15944:48;16007:12;16023:1;16007:17;16003:30;;16026:7;15704:478;:::o;16003:30::-;16045;16062:12;16045:16;:30::i;:::-;16123:12;;:51;;16086:12;;-1:-1:-1;;;;;16123:12:0;;16148:21;;16086:12;16123:51;16086:12;16123:51;16148:21;16123:12;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15704:478:0:o;18245:241::-;-1:-1:-1;;;;;18334:22:0;;;;;;:16;:22;;;;;;:27;;:73;;-1:-1:-1;;;;;;18380:22:0;;;;;;:16;:22;;;;;;18365:37;;:12;:37;:::i;:::-;:42;18334:73;:90;;;-1:-1:-1;8377:6:0;;-1:-1:-1;;;;;18411:13:0;;;8377:6;;18411:13;18334:90;18326:152;;;;-1:-1:-1;;;18326:152:0;;18331:2:1;18326:152:0;;;18313:21:1;18370:2;18350:18;;;18343:30;18409:34;18389:18;;;18382:62;-1:-1:-1;;;18460:18:1;;;18453:47;18517:19;;18326:152:0;18129:413:1;18326:152:0;18245:241;;:::o;15280:416::-;15370:16;;;15384:1;15370:16;;;;;;;;15346:21;;15370:16;;;;;;;;;;-1:-1:-1;15370:16:0;15346:40;;15415:4;15397;15402:1;15397:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15397:23:0;;;-1:-1:-1;;;;;15397:23:0;;;;;15441:9;-1:-1:-1;;;;;15441:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15431:4;15436:1;15431:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15431:26:0;;;:7;;;;;;;;;:26;15470:218;;-1:-1:-1;;;15470:218:0;;:9;:60;;;;;;:218;;15545:11;;15571:1;;15615:4;;15642;;15662:15;;15470:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;196:548:1;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;975:131::-;-1:-1:-1;;;;;1050:31:1;;1040:42;;1030:70;;1096:1;1093;1086:12;1030:70;975:131;:::o;1111:247::-;1170:6;1223:2;1211:9;1202:7;1198:23;1194:32;1191:52;;;1239:1;1236;1229:12;1191:52;1278:9;1265:23;1297:31;1322:5;1297:31;:::i;:::-;1347:5;1111:247;-1:-1:-1;;;1111:247:1:o;1363:315::-;1431:6;1439;1492:2;1480:9;1471:7;1467:23;1463:32;1460:52;;;1508:1;1505;1498:12;1460:52;1547:9;1534:23;1566:31;1591:5;1566:31;:::i;:::-;1616:5;1668:2;1653:18;;;;1640:32;;-1:-1:-1;;;1363:315:1:o;1875:367::-;1938:8;1948:6;2002:3;1995:4;1987:6;1983:17;1979:27;1969:55;;2020:1;2017;2010:12;1969:55;-1:-1:-1;2043:20:1;;2086:18;2075:30;;2072:50;;;2118:1;2115;2108:12;2072:50;2155:4;2147:6;2143:17;2131:29;;2215:3;2208:4;2198:6;2195:1;2191:14;2183:6;2179:27;2175:38;2172:47;2169:67;;;2232:1;2229;2222:12;2169:67;1875:367;;;;;:::o;2247:773::-;2369:6;2377;2385;2393;2446:2;2434:9;2425:7;2421:23;2417:32;2414:52;;;2462:1;2459;2452:12;2414:52;2502:9;2489:23;2531:18;2572:2;2564:6;2561:14;2558:34;;;2588:1;2585;2578:12;2558:34;2627:70;2689:7;2680:6;2669:9;2665:22;2627:70;:::i;:::-;2716:8;;-1:-1:-1;2601:96:1;-1:-1:-1;2804:2:1;2789:18;;2776:32;;-1:-1:-1;2820:16:1;;;2817:36;;;2849:1;2846;2839:12;2817:36;;2888:72;2952:7;2941:8;2930:9;2926:24;2888:72;:::i;:::-;2247:773;;;;-1:-1:-1;2979:8:1;-1:-1:-1;;;;2247:773:1:o;3025:456::-;3102:6;3110;3118;3171:2;3159:9;3150:7;3146:23;3142:32;3139:52;;;3187:1;3184;3177:12;3139:52;3226:9;3213:23;3245:31;3270:5;3245:31;:::i;:::-;3295:5;-1:-1:-1;3352:2:1;3337:18;;3324:32;3365:33;3324:32;3365:33;:::i;:::-;3025:456;;3417:7;;-1:-1:-1;;;3471:2:1;3456:18;;;;3443:32;;3025:456::o;3486:160::-;3551:20;;3607:13;;3600:21;3590:32;;3580:60;;3636:1;3633;3626:12;3580:60;3486:160;;;:::o;3651:505::-;3743:6;3751;3759;3812:2;3800:9;3791:7;3787:23;3783:32;3780:52;;;3828:1;3825;3818:12;3780:52;3868:9;3855:23;3901:18;3893:6;3890:30;3887:50;;;3933:1;3930;3923:12;3887:50;3972:70;4034:7;4025:6;4014:9;4010:22;3972:70;:::i;:::-;4061:8;;-1:-1:-1;3946:96:1;-1:-1:-1;4115:35:1;;-1:-1:-1;4146:2:1;4131:18;;4115:35;:::i;:::-;4105:45;;3651:505;;;;;:::o;4558:248::-;4626:6;4634;4687:2;4675:9;4666:7;4662:23;4658:32;4655:52;;;4703:1;4700;4693:12;4655:52;-1:-1:-1;;4726:23:1;;;4796:2;4781:18;;;4768:32;;-1:-1:-1;4558:248:1:o;4811:180::-;4870:6;4923:2;4911:9;4902:7;4898:23;4894:32;4891:52;;;4939:1;4936;4929:12;4891:52;-1:-1:-1;4962:23:1;;4811:180;-1:-1:-1;4811:180:1:o;4996:315::-;5061:6;5069;5122:2;5110:9;5101:7;5097:23;5093:32;5090:52;;;5138:1;5135;5128:12;5090:52;5177:9;5164:23;5196:31;5221:5;5196:31;:::i;:::-;5246:5;-1:-1:-1;5270:35:1;5301:2;5286:18;;5270:35;:::i;:::-;5260:45;;4996:315;;;;;:::o;5316:388::-;5384:6;5392;5445:2;5433:9;5424:7;5420:23;5416:32;5413:52;;;5461:1;5458;5451:12;5413:52;5500:9;5487:23;5519:31;5544:5;5519:31;:::i;:::-;5569:5;-1:-1:-1;5626:2:1;5611:18;;5598:32;5639:33;5598:32;5639:33;:::i;:::-;5691:7;5681:17;;;5316:388;;;;;:::o;5709:127::-;5770:10;5765:3;5761:20;5758:1;5751:31;5801:4;5798:1;5791:15;5825:4;5822:1;5815:15;5841:128;5908:9;;;5929:11;;;5926:37;;;5943:18;;:::i;5974:380::-;6053:1;6049:12;;;;6096;;;6117:61;;6171:4;6163:6;6159:17;6149:27;;6117:61;6224:2;6216:6;6213:14;6193:18;6190:38;6187:161;;6270:10;6265:3;6261:20;6258:1;6251:31;6305:4;6302:1;6295:15;6333:4;6330:1;6323:15;6187:161;;5974:380;;;:::o;6359:356::-;6561:2;6543:21;;;6580:18;;;6573:30;6639:34;6634:2;6619:18;;6612:62;6706:2;6691:18;;6359:356::o;6720:127::-;6781:10;6776:3;6772:20;6769:1;6762:31;6812:4;6809:1;6802:15;6836:4;6833:1;6826:15;6852:251;6922:6;6975:2;6963:9;6954:7;6950:23;6946:32;6943:52;;;6991:1;6988;6981:12;6943:52;7023:9;7017:16;7042:31;7067:5;7042:31;:::i;7108:127::-;7169:10;7164:3;7160:20;7157:1;7150:31;7200:4;7197:1;7190:15;7224:4;7221:1;7214:15;7240:465;7293:3;7331:5;7325:12;7358:6;7353:3;7346:19;7384:4;7413;7408:3;7404:14;7397:21;;7452:4;7445:5;7441:16;7475:1;7485:195;7499:6;7496:1;7493:13;7485:195;;;7564:13;;-1:-1:-1;;;;;7560:39:1;7548:52;;7620:12;;;;7655:15;;;;7596:1;7514:9;7485:195;;;-1:-1:-1;7696:3:1;;7240:465;-1:-1:-1;;;;;7240:465:1:o;7710:502::-;7973:6;7962:9;7955:25;8016:3;8011:2;8000:9;7996:18;7989:31;7936:4;8037:57;8089:3;8078:9;8074:19;8066:6;8037:57;:::i;:::-;-1:-1:-1;;;;;8130:32:1;;;;8125:2;8110:18;;8103:60;-1:-1:-1;8194:2:1;8179:18;8172:34;8029:65;7710:502;-1:-1:-1;;7710:502:1:o;8217:1105::-;8312:6;8343:2;8386;8374:9;8365:7;8361:23;8357:32;8354:52;;;8402:1;8399;8392:12;8354:52;8435:9;8429:16;8464:18;8505:2;8497:6;8494:14;8491:34;;;8521:1;8518;8511:12;8491:34;8559:6;8548:9;8544:22;8534:32;;8604:7;8597:4;8593:2;8589:13;8585:27;8575:55;;8626:1;8623;8616:12;8575:55;8655:2;8649:9;8677:2;8673;8670:10;8667:36;;;8683:18;;:::i;:::-;8729:2;8726:1;8722:10;8761:2;8755:9;8824:2;8820:7;8815:2;8811;8807:11;8803:25;8795:6;8791:38;8879:6;8867:10;8864:22;8859:2;8847:10;8844:18;8841:46;8838:72;;;8890:18;;:::i;:::-;8926:2;8919:22;8976:18;;;9010:15;;;;-1:-1:-1;9052:11:1;;;9048:20;;;9080:19;;;9077:39;;;9112:1;9109;9102:12;9077:39;9136:11;;;;9156:135;9172:6;9167:3;9164:15;9156:135;;;9238:10;;9226:23;;9189:12;;;;9269;;;;9156:135;;;9310:6;8217:1105;-1:-1:-1;;;;;;;;8217:1105:1:o;9736:125::-;9801:9;;;9822:10;;;9819:36;;;9835:18;;:::i;9866:217::-;9906:1;9932;9922:132;;9976:10;9971:3;9967:20;9964:1;9957:31;10011:4;10008:1;10001:15;10039:4;10036:1;10029:15;9922:132;-1:-1:-1;10068:9:1;;9866:217::o;11505:416::-;11594:1;11631:5;11594:1;11645:270;11666:7;11656:8;11653:21;11645:270;;;11725:4;11721:1;11717:6;11713:17;11707:4;11704:27;11701:53;;;11734:18;;:::i;:::-;11784:7;11774:8;11770:22;11767:55;;;11804:16;;;;11767:55;11883:22;;;;11843:15;;;;11645:270;;;11649:3;11505:416;;;;;:::o;11926:806::-;11975:5;12005:8;11995:80;;-1:-1:-1;12046:1:1;12060:5;;11995:80;12094:4;12084:76;;-1:-1:-1;12131:1:1;12145:5;;12084:76;12176:4;12194:1;12189:59;;;;12262:1;12257:130;;;;12169:218;;12189:59;12219:1;12210:10;;12233:5;;;12257:130;12294:3;12284:8;12281:17;12278:43;;;12301:18;;:::i;:::-;-1:-1:-1;;12357:1:1;12343:16;;12372:5;;12169:218;;12471:2;12461:8;12458:16;12452:3;12446:4;12443:13;12439:36;12433:2;12423:8;12420:16;12415:2;12409:4;12406:12;12402:35;12399:77;12396:159;;;-1:-1:-1;12508:19:1;;;12540:5;;12396:159;12587:34;12612:8;12606:4;12587:34;:::i;:::-;12657:6;12653:1;12649:6;12645:19;12636:7;12633:32;12630:58;;;12668:18;;:::i;:::-;12706:20;;11926:806;-1:-1:-1;;;11926:806:1:o;12737:140::-;12795:5;12824:47;12865:4;12855:8;12851:19;12845:4;12824:47;:::i;12882:168::-;12955:9;;;12986;;13003:15;;;12997:22;;12983:37;12973:71;;13024:18;;:::i;13667:306::-;13755:6;13763;13771;13824:2;13812:9;13803:7;13799:23;13795:32;13792:52;;;13840:1;13837;13830:12;13792:52;13869:9;13863:16;13853:26;;13919:2;13908:9;13904:18;13898:25;13888:35;;13963:2;13952:9;13948:18;13942:25;13932:35;;13667:306;;;;;:::o;16561:401::-;16763:2;16745:21;;;16802:2;16782:18;;;16775:30;16841:34;16836:2;16821:18;;16814:62;-1:-1:-1;;;16907:2:1;16892:18;;16885:35;16952:3;16937:19;;16561:401::o;16967:399::-;17169:2;17151:21;;;17208:2;17188:18;;;17181:30;17247:34;17242:2;17227:18;;17220:62;-1:-1:-1;;;17313:2:1;17298:18;;17291:33;17356:3;17341:19;;16967:399::o;18547:582::-;18846:6;18835:9;18828:25;18889:6;18884:2;18873:9;18869:18;18862:34;18932:3;18927:2;18916:9;18912:18;18905:31;18809:4;18953:57;19005:3;18994:9;18990:19;18982:6;18953:57;:::i;:::-;-1:-1:-1;;;;;19046:32:1;;;;19041:2;19026:18;;19019:60;-1:-1:-1;19110:3:1;19095:19;19088:35;18945:65;18547:582;-1:-1:-1;;;18547:582:1:o

Swarm Source

ipfs://983aa693a18d77310c181c713a4bc5b9caae82b2e8cce924d02f81608008c756
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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