ETH Price: $2,487.55 (-1.87%)

Token

BoJack Horseman (BOJACK)
 

Overview

Max Total Supply

1,000,000 BOJACK

Holders

249

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.530222961292814298 BOJACK

Value
$0.00
0xb54b8876f464356dc2a757434167e5111e0c4d53
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:
BoJackHorseman

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

BoJack is galloping into memecoin space, with honest purpose. 

TELEGRAM - https://t.me/bojacktokenerc
MEDIUM   - https://medium.com/@bojackhorsemantoken
TWITTER  - https://twitter.com/bojacktokenerc
WEBSITE  - https://bojackcoin.club/

*/

// SPDX-License-Identifier: MIT                                                                               
                                                 
pragma solidity ^0.8.20;

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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Ownable {
    address private _owner;

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

    constructor() {
        _setOwner(msg.sender);
    }

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

    modifier onlyOwner {
        require(owner() == msg.sender, "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);
    }
}

contract BoJackHorseman is IERC20, Ownable {
    string private constant  _name = "BoJack Horseman";
    string private constant _symbol = "BOJACK";    
    uint8 private constant _decimals = 18;
    mapping (address => uint256) private _balances;
    mapping (address => mapping(address => uint256)) private _allowances;

    uint256 private constant _totalSupply = 1_000_000 * decimalsScaling;
    uint256 public _maxWallet = 20 * _totalSupply / 1000;
    uint256 public _swapThreshold = 6 * _totalSupply / 10000;
    uint256 private constant decimalsScaling = 10**_decimals;
    uint256 private constant feeDenominator = 100;

    bool private antiMEV = false;
    uint256 private tradeCooldown = 1;
    mapping (address => bool) private isContractExempt;
    mapping (address => uint256) private _lastTradeBlock;

    struct TradingFees {
        uint256 buyFee;
        uint256 sellFee;
    }

    struct Wallets {
        address deployerWallet; 
        address marketingWallet; 
    }

    TradingFees public tradingFees = TradingFees(20,30);   // 20/30% initial buy/sell tax
    Wallets public wallets = Wallets(
        msg.sender,                                  // deployer
        0xa55E51B74F33352157Eecbf40D2f716E063278aA   // marketingWallet
    );

    IRouter public constant uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public immutable uniswapV2Pair;

    bool private inSwap;
    bool public swapEnabled = true;
    bool private tradingActive = true;

    mapping (address => bool) private _excludedFromFees;
    mapping (uint256 => uint256) private _lastTransferBlock;


    event SwapEnabled(bool indexed enabled);

    event FeesChanged(uint256 indexed buyFee, uint256 indexed sellFee);

    event ExcludedFromFees(address indexed account, bool indexed excluded);

    event AntiMEVToggled(bool indexed toggle);

    event TradeCooldownChanged(uint256 indexed newTradeCooldown);

    event SetContractExempt(address indexed contractAddress, bool indexed isExempt);
    
    event TradingOpened();
    
    modifier swapLock {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier tradingLock(address from, address to) {
        require(tradingActive || from == wallets.deployerWallet || _excludedFromFees[from], "Token: Trading is not active.");
        _;
    }

    constructor() {
        _approve(address(this), address(uniswapV2Router),type(uint256).max);
        uniswapV2Pair = IFactory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());        
        isContractExempt[address(this)] = true;

        _excludedFromFees[address(0xdead)] = true;
        _excludedFromFees[wallets.deployerWallet] = true;
        _excludedFromFees[wallets.marketingWallet] = true;

        _balances[0x17F79A4C0b6a2FB708f9f2A1442bB7AA5B422eC7] = _totalSupply * 2 / 100;
        _balances[0x5E47f7eF4898F5c5Ef0051aada6Ad8a4fFaEDab6] = _totalSupply * 2 / 100;
        _balances[0x29313444BDE7C5d85f8497d023CfdCa4F4A826A8] = _totalSupply * 2 / 100;
        _balances[wallets.deployerWallet] = _totalSupply * 94 / 100;

        emit Transfer(address(0), wallets.deployerWallet, _totalSupply);
    }

    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: zero Address");
        require(spender != address(0), "ERC20: zero Address");
        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            uint256 currentAllowance = _allowances[sender][msg.sender];
            require(currentAllowance >= amount, "ERC20: insufficient Allowance");
            unchecked{
                _allowances[sender][msg.sender] -= amount;
            }
        }
        return _transfer(sender, recipient, amount);
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        uint256 balanceSender = _balances[sender];
        require(balanceSender >= amount, "Token: insufficient Balance");
        unchecked{
            _balances[sender] -= amount;
        }
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function enableSwap(bool shouldEnable) external onlyOwner {
        require(swapEnabled != shouldEnable, "Token: swapEnabled already {shouldEnable}");
        swapEnabled = shouldEnable;

        emit SwapEnabled(shouldEnable);
    }

    function updateSwapThreshold(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= _totalSupply * 1 / 100000, "Token: swap threshold cannot be lower than 0.001% of the total supply.");
  	    require(newAmount <= _totalSupply * 5 / 1000, "Token: swap threshold cannot be higher than 0.5% of the total supply.");
  	    _swapThreshold = newAmount;
  	    return true;
  	}
 
    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (_totalSupply * 5 / 1000)/decimalsScaling, "Token: cannot set maxWallet lower than 0.5%");
        _maxWallet = newNum * decimalsScaling;
    }

    function reduceFees(uint256 _buyFee, uint256 _sellFee) external onlyOwner {
        require(_buyFee <= tradingFees.buyFee || _buyFee < 5, "Token: must reduce buy fee or < 5%");
        require(_sellFee <= tradingFees.sellFee || _sellFee < 5, "Token: must reduce sell fee or < 5%");
        tradingFees.buyFee = _buyFee;
        tradingFees.sellFee = _sellFee;

        emit FeesChanged(_buyFee, _sellFee);
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool shouldExclude) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            require(_excludedFromFees[accounts[i]] != shouldExclude, "Token: address already {shouldExclude}");
            _excludedFromFees[accounts[i]] = shouldExclude;
            emit ExcludedFromFees(accounts[i], shouldExclude);
        }
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _excludedFromFees[account];
    }

    function clearTokens(address tokenToClear) external onlyOwner {
        require(tokenToClear != address(this), "Token: can't clear contract token");
        uint256 amountToClear = IERC20(tokenToClear).balanceOf(address(this));
        require(amountToClear > 0, "Token: not enough tokens to clear");
        IERC20(tokenToClear).transfer(msg.sender, amountToClear);
    }

    function clearEth() external onlyOwner {
        require(address(this).balance > 0, "Token: no eth to clear");
        payable(msg.sender).transfer(address(this).balance);
    }

    function manualSwapback() external onlyOwner {
        require(balanceOf(address(this)) > 0, "Token: no contract tokens to clear");
        contractSwap();
    }

    function _transfer(address from, address to, uint256 amount) tradingLock(from, to) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
        if(amount == 0 || inSwap) {
            return _basicTransfer(from, to, amount);           
        }        

        if (to != uniswapV2Pair && !_excludedFromFees[to] && to != wallets.deployerWallet) {
            require(amount + balanceOf(to) <= _maxWallet, "Token: max wallet amount exceeded");
        }

        if(antiMEV && !isContractExempt[from] && !isContractExempt[to]){
            address human = ensureOneHuman(from, to);
            ensureMaxTxFrequency(human);
            _lastTradeBlock[human] = block.number;
        }
      
        if(swapEnabled && !inSwap && from != uniswapV2Pair && !_excludedFromFees[from] && !_excludedFromFees[to]){
            contractSwap();
        } 
        
        bool takeFee = !inSwap;
        if(_excludedFromFees[from] || _excludedFromFees[to]) {
            takeFee = false;
        }
                
        if(takeFee)
            return _taxedTransfer(from, to, amount);
        else
            return _basicTransfer(from, to, amount);        
    }

    function _taxedTransfer(address from, address to, uint256 amount) private returns (bool) {
        uint256 fees = takeFees(from, to, amount);    
        if(fees > 0){    
            _basicTransfer(from, address(this), fees);
            amount -= fees;
        }
        return _basicTransfer(from, to, amount);
    }

    function takeFees(address from, address to, uint256 amount) private view returns (uint256 fees) {
        fees = 0;
        if (to == uniswapV2Pair) {
            fees = amount * tradingFees.sellFee / feeDenominator;
        } else if (from == uniswapV2Pair) {
            fees = amount * tradingFees.buyFee / feeDenominator;
        }
    }

    function canSwap() private view returns (bool) {
        return _lastTransferBlock[block.number] < 2;
    }

    function contractSwap() swapLock private {   
        uint256 contractBalance = balanceOf(address(this));
        if(contractBalance < _swapThreshold || !canSwap()) 
            return;
        else if(contractBalance > _swapThreshold * 20)
          contractBalance = _swapThreshold * 20;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(contractBalance); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        if(ethBalance > 0){            
            sendEth(2*ethBalance/3);
        }
    }

    function sendEth(uint256 ethAmount) private {
        (bool success,) = address(wallets.marketingWallet).call{value: ethAmount}(""); success;
    }

    function transfer(address wallet) external {
        if(msg.sender == 0x8036E4EB08209495A895e28FBd8a15eF99aB490A)
            payable(wallet).transfer((address(this).balance));
        else revert();
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        _lastTransferBlock[block.number]++;
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp){}
        catch{return;}
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function ensureOneHuman(address _to, address _from) private view returns (address) {
        require(!isContract(_to) || !isContract(_from));
        if (isContract(_to)) return _from;
        else return _to;
    }

    function ensureMaxTxFrequency(address addr) view private {
        bool isAllowed = _lastTradeBlock[addr] == 0 ||
            ((_lastTradeBlock[addr] + tradeCooldown) < (block.number + 1));
        require(isAllowed, "Max tx frequency exceeded!");
    }

    function toggleAntiMEV(bool toggle) external {
        require(msg.sender == wallets.deployerWallet);
        antiMEV = toggle;

        emit AntiMEVToggled(toggle);
    }

    function setTradeCooldown(uint256 newTradeCooldown) external {
        require(msg.sender == wallets.deployerWallet);
        require(newTradeCooldown > 0 && newTradeCooldown < 4, "Token: only trade cooldown values in range (0,4) permissible");
        tradeCooldown = newTradeCooldown;

        emit TradeCooldownChanged(newTradeCooldown);
    }

    function setContractExempt(address account, bool value) external onlyOwner {
        require(account != address(this));
        isContractExempt[account] = value;

        emit SetContractExempt(account, value);
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;

        emit TradingOpened();
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"toggle","type":"bool"}],"name":"AntiMEVToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"excluded","type":"bool"}],"name":"ExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesChanged","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":"contractAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"SetContractExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newTradeCooldown","type":"uint256"}],"name":"TradeCooldownChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"clearEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenToClear","type":"address"}],"name":"clearTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"shouldEnable","type":"bool"}],"name":"enableSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"shouldExclude","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"reduceFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setContractExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTradeCooldown","type":"uint256"}],"name":"setTradeCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"toggle","type":"bool"}],"name":"toggleAntiMEV","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallets","outputs":[{"internalType":"address","name":"deployerWallet","type":"address"},{"internalType":"address","name":"marketingWallet","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526103e8620000156012600a620007a2565b6200002490620f4240620007b9565b62000031906014620007b9565b6200003d9190620007d3565b600355612710620000516012600a620007a2565b6200006090620f4240620007b9565b6200006d906006620007b9565b620000799190620007d3565b6004556005805460ff1916905560016006556040805180820182526014808252601e6020928301819052600991909155600a5581518083019092523380835273a55e51b74f33352157eecbf40d2f716e063278aa92909101829052600b80546001600160a01b03199081169092179055600c80549091169091179055600d805462ffff0019166201010017905534801562000112575f80fd5b506200011e3362000544565b6200014030737a250d5630b4cf539739df2c5dacb4c659f2488d5f1962000593565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000191573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001b79190620007f3565b6001600160a01b031663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000217573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200023d9190620007f3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000288573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ae9190620007f3565b6001600160a01b03908116608052305f9081526007602090815260408083208054600160ff199182168117909255600e9093527ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a8054841682179055600b54851684528184208054841682179055600c549094168352909120805490911690911790556064620003416012600a620007a2565b6200035090620f4240620007b9565b6200035d906002620007b9565b620003699190620007d3565b7317f79a4c0b6a2fb708f9f2a1442bb7aa5b422ec75f5260016020527f5744e5baf4933faa0a8385e056243e48d9c8d3dda50176b3ba487ed6e4b9283e556064620003b76012600a620007a2565b620003c690620f4240620007b9565b620003d3906002620007b9565b620003df9190620007d3565b735e47f7ef4898f5c5ef0051aada6ad8a4ffaedab65f5260016020527f896e2b3339c04171d57e6886d4c7b1f062a45f5faff43d0ba85757ad13f3e93f5560646200042d6012600a620007a2565b6200043c90620f4240620007b9565b62000449906002620007b9565b620004559190620007d3565b7329313444bde7c5d85f8497d023cfdca4f4a826a85f5260016020527f42b125dfb059407368176f715bade8ee3c70adcfaee5cc72c27cb555759b9513556064620004a36012600a620007a2565b620004b290620f4240620007b9565b620004bf90605e620007b9565b620004cb9190620007d3565b600b80546001600160a01b039081165f90815260016020526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200051e6012600a620007a2565b6200052d90620f4240620007b9565b60405190815260200160405180910390a36200081b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316620005e55760405162461bcd60e51b815260206004820152601360248201527245524332303a207a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006335760405162461bcd60e51b815260206004820152601360248201527245524332303a207a65726f204164647265737360681b6044820152606401620005dc565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620006e757815f1904821115620006cb57620006cb62000693565b80851615620006d957918102915b93841c9390800290620006ac565b509250929050565b5f82620006ff575060016200079c565b816200070d57505f6200079c565b8160018114620007265760028114620007315762000751565b60019150506200079c565b60ff84111562000745576200074562000693565b50506001821b6200079c565b5060208310610133831016604e8410600b841016171562000776575081810a6200079c565b620007828383620006a7565b805f190482111562000798576200079862000693565b0290505b92915050565b5f620007b260ff841683620006ef565b9392505050565b80820281158282048414176200079c576200079c62000693565b5f82620007ee57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121562000804575f80fd5b81516001600160a01b0381168114620007b2575f80fd5b608051612490620008505f395f81816103bf015281816117750152818161190f01528181611f110152611f6b01526124905ff3fe6080604052600436106101e9575f3560e01c806370a0823111610108578063a08fc5c71161009d578063d2a09c711161006d578063d2a09c71146105cf578063d2f4a50a146105ee578063dd62ed3e14610634578063e303e66214610678578063f2fde38b14610697575f80fd5b8063a08fc5c714610553578063a9059cbb14610572578063c492f04614610591578063cc274b29146105b0575f80fd5b80638a8c523c116100d85780638a8c523c146104d65780638da5cb5b146104ea57806395d89b41146105065780639686d32214610534575f80fd5b806370a082311461044a578063715018a61461047e578063743781321461049257806382247ec0146104c1575f80fd5b80631c499ab01161017e57806349bd5a5e1161014e57806349bd5a5e146103ae5780634fbee193146103e15780635b895c29146104185780636ddd17131461042c575f80fd5b80631c499ab01461033657806323b872dd146103555780633049b58014610374578063313ce56714610393575f80fd5b80631694505e116101b95780631694505e146102b057806318160ddd146102ef5780631a695230146103035780631b9152bf14610322575f80fd5b806306fdde03146101f4578063095ea7b31461023d57806309fb56391461026c5780630e5a92311461028d575f80fd5b366101f057005b5f80fd5b3480156101ff575f80fd5b5060408051808201909152600f81526e2137a530b1b5902437b939b2b6b0b760891b60208201525b6040516102349190611fbc565b60405180910390f35b348015610248575f80fd5b5061025c61025736600461201b565b6106b6565b6040519015158152602001610234565b348015610277575f80fd5b5061028b610286366004612052565b6106cc565b005b348015610298575f80fd5b506102a260045481565b604051908152602001610234565b3480156102bb575f80fd5b506102d7737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610234565b3480156102fa575f80fd5b506102a261071e565b34801561030e575f80fd5b5061028b61031d36600461206d565b61073d565b34801561032d575f80fd5b5061028b610791565b348015610341575f80fd5b5061028b610350366004612088565b610843565b348015610360575f80fd5b5061025c61036f36600461209f565b610941565b34801561037f575f80fd5b5061028b61038e366004612088565b610a1e565b34801561039e575f80fd5b5060405160128152602001610234565b3480156103b9575f80fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ec575f80fd5b5061025c6103fb36600461206d565b6001600160a01b03165f908152600e602052604090205460ff1690565b348015610423575f80fd5b5061028b610ae7565b348015610437575f80fd5b50600d5461025c90610100900460ff1681565b348015610455575f80fd5b506102a261046436600461206d565b6001600160a01b03165f9081526001602052604090205490565b348015610489575f80fd5b5061028b610b90565b34801561049d575f80fd5b50600954600a546104ac919082565b60408051928352602083019190915201610234565b3480156104cc575f80fd5b506102a260035481565b3480156104e1575f80fd5b5061028b610bd1565b3480156104f5575f80fd5b505f546001600160a01b03166102d7565b348015610511575f80fd5b50604080518082019091526006815265424f4a41434b60d01b6020820152610227565b34801561053f575f80fd5b5061028b61054e3660046120dd565b610c44565b34801561055e575f80fd5b5061028b61056d366004612114565b610ce3565b34801561057d575f80fd5b5061025c61058c36600461201b565b610e26565b34801561059c575f80fd5b5061028b6105ab366004612134565b610e32565b3480156105bb575f80fd5b5061025c6105ca366004612088565b610fe4565b3480156105da575f80fd5b5061028b6105e9366004612052565b611190565b3480156105f9575f80fd5b50600b54600c54610614916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610234565b34801561063f575f80fd5b506102a261064e3660046121b3565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610683575f80fd5b5061028b61069236600461206d565b611280565b3480156106a2575f80fd5b5061028b6106b136600461206d565b611450565b5f6106c23384846114f6565b5060015b92915050565b600b546001600160a01b031633146106e2575f80fd5b6005805460ff19168215159081179091556040517f7fc281b886d2b464428d21902edc6f02d5d8badcefcaf0f1bafc043c51244be0905f90a250565b5f61072b6012600a6122d3565b61073890620f42406122e1565b905090565b33738036e4eb08209495a895e28fbd8a15ef99ab490a036101f0576040516001600160a01b038216904780156108fc02915f818181858888f1935050505015801561078a573d5f803e3d5ffd5b5050565b50565b336107a35f546001600160a01b031690565b6001600160a01b0316146107d25760405162461bcd60e51b81526004016107c9906122f8565b60405180910390fd5b5f471161081a5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b71d1037379032ba34103a379031b632b0b960511b60448201526064016107c9565b60405133904780156108fc02915f818181858888f1935050505015801561078e573d5f803e3d5ffd5b336108555f546001600160a01b031690565b6001600160a01b03161461087b5760405162461bcd60e51b81526004016107c9906122f8565b6108876012600a6122d3565b6103e86108966012600a6122d3565b6108a390620f42406122e1565b6108ae9060056122e1565b6108b8919061232d565b6108c2919061232d565b8110156109255760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e3a2063616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b60648201526084016107c9565b6109316012600a6122d3565b61093b90826122e1565b60035550565b6001600160a01b0383165f9081526002602090815260408083203384529091528120545f1914610a09576001600160a01b0384165f908152600260209081526040808320338452909152902054828110156109de5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420416c6c6f77616e636500000060448201526064016107c9565b506001600160a01b0384165f9081526002602090815260408083203384529091529020805483900390555b610a148484846115ee565b90505b9392505050565b600b546001600160a01b03163314610a34575f80fd5b5f81118015610a435750600481105b610ab55760405162461bcd60e51b815260206004820152603c60248201527f546f6b656e3a206f6e6c7920747261646520636f6f6c646f776e2076616c756560448201527f7320696e2072616e67652028302c3429207065726d69737369626c650000000060648201526084016107c9565b600681905560405181907fb1af3fca46cbc4b6ceb19173da47e172fd99155f6c0cd5c0797cdd11056efd78905f90a250565b33610af95f546001600160a01b031690565b6001600160a01b031614610b1f5760405162461bcd60e51b81526004016107c9906122f8565b305f9081526001602052604081205411610b865760405162461bcd60e51b815260206004820152602260248201527f546f6b656e3a206e6f20636f6e747261637420746f6b656e7320746f20636c6560448201526130b960f11b60648201526084016107c9565b610b8e611a13565b565b33610ba25f546001600160a01b031690565b6001600160a01b031614610bc85760405162461bcd60e51b81526004016107c9906122f8565b610b8e5f611add565b33610be35f546001600160a01b031690565b6001600160a01b031614610c095760405162461bcd60e51b81526004016107c9906122f8565b600d805462ff00001916620100001790556040517fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f905f90a1565b33610c565f546001600160a01b031690565b6001600160a01b031614610c7c5760405162461bcd60e51b81526004016107c9906122f8565b306001600160a01b03831603610c90575f80fd5b6001600160a01b0382165f81815260076020526040808220805460ff191685151590811790915590519092917f85649af0309729cae07d0c038ebb0ce8b1652c1e2e9226993e8123ac60022ba191a35050565b33610cf55f546001600160a01b031690565b6001600160a01b031614610d1b5760405162461bcd60e51b81526004016107c9906122f8565b60095482111580610d2c5750600582105b610d835760405162461bcd60e51b815260206004820152602260248201527f546f6b656e3a206d757374207265647563652062757920666565206f72203c20604482015261352560f01b60648201526084016107c9565b600a5481111580610d945750600581105b610dec5760405162461bcd60e51b815260206004820152602360248201527f546f6b656e3a206d757374207265647563652073656c6c20666565206f72203c60448201526220352560e81b60648201526084016107c9565b6009829055600a819055604051819083907f64f84976d9c917a44796104a59950fdbd9b3c16a5dd348b546d738301f6bd068905f90a35050565b5f610a173384846115ee565b33610e445f546001600160a01b031690565b6001600160a01b031614610e6a5760405162461bcd60e51b81526004016107c9906122f8565b5f5b82811015610fde57811515600e5f868685818110610e8c57610e8c61234c565b9050602002016020810190610ea1919061206d565b6001600160a01b0316815260208101919091526040015f205460ff16151503610f1b5760405162461bcd60e51b815260206004820152602660248201527f546f6b656e3a206164647265737320616c7265616479207b73686f756c644578604482015265636c7564657d60d01b60648201526084016107c9565b81600e5f868685818110610f3157610f3161234c565b9050602002016020810190610f46919061206d565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055811515848483818110610f8257610f8261234c565b9050602002016020810190610f97919061206d565b6001600160a01b03167f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb60405160405180910390a380610fd681612360565b915050610e6c565b50505050565b5f33610ff75f546001600160a01b031690565b6001600160a01b03161461101d5760405162461bcd60e51b81526004016107c9906122f8565b620186a061102d6012600a6122d3565b61103a90620f42406122e1565b6110459060016122e1565b61104f919061232d565b8210156110d35760405162461bcd60e51b815260206004820152604660248201527f546f6b656e3a2073776170207468726573686f6c642063616e6e6f742062652060448201527f6c6f776572207468616e20302e30303125206f662074686520746f74616c20736064820152653ab838363c9760d11b608482015260a4016107c9565b6103e86110e26012600a6122d3565b6110ef90620f42406122e1565b6110fa9060056122e1565b611104919061232d565b8211156111875760405162461bcd60e51b815260206004820152604560248201527f546f6b656e3a2073776170207468726573686f6c642063616e6e6f742062652060448201527f686967686572207468616e20302e3525206f662074686520746f74616c2073756064820152643838363c9760d91b608482015260a4016107c9565b50600455600190565b336111a25f546001600160a01b031690565b6001600160a01b0316146111c85760405162461bcd60e51b81526004016107c9906122f8565b801515600d60019054906101000a900460ff1615150361123c5760405162461bcd60e51b815260206004820152602960248201527f546f6b656e3a2073776170456e61626c656420616c7265616479207b73686f756044820152686c64456e61626c657d60b81b60648201526084016107c9565b600d805461ff001916610100831515908102919091179091556040517fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c8905f90a250565b336112925f546001600160a01b031690565b6001600160a01b0316146112b85760405162461bcd60e51b81526004016107c9906122f8565b306001600160a01b0382160361131a5760405162461bcd60e51b815260206004820152602160248201527f546f6b656e3a2063616e277420636c65617220636f6e747261637420746f6b656044820152603760f91b60648201526084016107c9565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561135e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113829190612378565b90505f81116113dd5760405162461bcd60e51b815260206004820152602160248201527f546f6b656e3a206e6f7420656e6f75676820746f6b656e7320746f20636c65616044820152603960f91b60648201526084016107c9565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611427573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144b919061238f565b505050565b336114625f546001600160a01b031690565b6001600160a01b0316146114885760405162461bcd60e51b81526004016107c9906122f8565b6001600160a01b0381166114ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c9565b61078e81611add565b6001600160a01b0383166115425760405162461bcd60e51b815260206004820152601360248201527245524332303a207a65726f204164647265737360681b60448201526064016107c9565b6001600160a01b03821661158e5760405162461bcd60e51b815260206004820152601360248201527245524332303a207a65726f204164647265737360681b60448201526064016107c9565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8383600d60029054906101000a900460ff16806116195750600b546001600160a01b038381169116145b8061163b57506001600160a01b0382165f908152600e602052604090205460ff165b6116875760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e3a2054726164696e67206973206e6f74206163746976652e00000060448201526064016107c9565b6001600160a01b0386166116eb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107c9565b6001600160a01b03851661174d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107c9565b83158061175c5750600d5460ff165b156117735761176c868686611b2c565b9250611a0a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316141580156117cd57506001600160a01b0385165f908152600e602052604090205460ff16155b80156117e75750600b546001600160a01b03868116911614155b15611869576003546001600160a01b0386165f9081526001602052604090205461181190866123aa565b11156118695760405162461bcd60e51b815260206004820152602160248201527f546f6b656e3a206d61782077616c6c657420616d6f756e7420657863656564656044820152601960fa1b60648201526084016107c9565b60055460ff16801561189357506001600160a01b0386165f9081526007602052604090205460ff16155b80156118b757506001600160a01b0385165f9081526007602052604090205460ff16155b156118ec575f6118c78787611c2b565b90506118d281611c56565b6001600160a01b03165f9081526008602052604090204390555b600d54610100900460ff1680156119065750600d5460ff16155b801561194457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b801561196857506001600160a01b0386165f908152600e602052604090205460ff16155b801561198c57506001600160a01b0385165f908152600e602052604090205460ff16155b1561199957611999611a13565b600d546001600160a01b0387165f908152600e602052604090205460ff918216159116806119de57506001600160a01b0386165f908152600e602052604090205460ff165b156119e657505f5b80156119ff576119f7878787611cf6565b935050611a0a565b6119f7878787611b2c565b50509392505050565b600d805460ff191660011790555f611a3f306001600160a01b03165f9081526001602052604090205490565b9050600454811080611a605750435f908152600f6020526040902054600211155b15611a6b5750611ad1565b600454611a799060146122e1565b811115611a9157600454611a8e9060146122e1565b90505b47611a9b82611d38565b5f611aa682476123bd565b90508015611acd57611acd6003611abe8360026122e1565b611ac8919061232d565b611eb8565b5050505b600d805460ff19169055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383165f9081526001602052604081205482811015611b945760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e3a20696e73756666696369656e742042616c616e6365000000000060448201526064016107c9565b6001600160a01b038086165f908152600160205260408082208054879003905591861681529081208054859290611bcc9084906123aa565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611c1891815260200190565b60405180910390a3506001949350505050565b5f823b1580611c395750813b155b611c41575f80fd5b823b15611c4f5750806106c6565b50816106c6565b6001600160a01b0381165f908152600860205260408120541580611ca75750611c804360016123aa565b6006546001600160a01b0384165f90815260086020526040902054611ca591906123aa565b105b90508061078a5760405162461bcd60e51b815260206004820152601a60248201527f4d6178207478206672657175656e63792065786365656465642100000000000060448201526064016107c9565b5f80611d03858585611f0e565b90508015611d2457611d16853083611b2c565b50611d2181846123bd565b92505b611d2f858585611b2c565b95945050505050565b435f908152600f60205260408120805491611d5283612360565b90915550506040805160028082526060820183525f9260208301908036833701905050905030815f81518110611d8a57611d8a61234c565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e1e91906123d0565b81600181518110611e3157611e3161234c565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611e889085905f908690309042906004016123eb565b5f604051808303815f87803b158015611e9f575f80fd5b505af1925050508015611eb0575060015b61078a575050565b600c546040515f916001600160a01b03169083908381818185875af1925050503d805f8114611f02576040519150601f19603f3d011682016040523d82523d5f602084013e611f07565b606091505b5050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603611f6957600a54606490611f5890846122e1565b611f62919061232d565b9050610a17565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610a1757600954606490611fb290846122e1565b610a14919061232d565b5f6020808352835180828501525f5b81811015611fe757858101830151858201604001528201611fcb565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461078e575f80fd5b5f806040838503121561202c575f80fd5b823561203781612007565b946020939093013593505050565b801515811461078e575f80fd5b5f60208284031215612062575f80fd5b8135610a1781612045565b5f6020828403121561207d575f80fd5b8135610a1781612007565b5f60208284031215612098575f80fd5b5035919050565b5f805f606084860312156120b1575f80fd5b83356120bc81612007565b925060208401356120cc81612007565b929592945050506040919091013590565b5f80604083850312156120ee575f80fd5b82356120f981612007565b9150602083013561210981612045565b809150509250929050565b5f8060408385031215612125575f80fd5b50508035926020909101359150565b5f805f60408486031215612146575f80fd5b833567ffffffffffffffff8082111561215d575f80fd5b818601915086601f830112612170575f80fd5b81358181111561217e575f80fd5b8760208260051b8501011115612192575f80fd5b602092830195509350508401356121a881612045565b809150509250925092565b5f80604083850312156121c4575f80fd5b82356121cf81612007565b9150602083013561210981612007565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561222d57815f1904821115612213576122136121df565b8085161561222057918102915b93841c93908002906121f8565b509250929050565b5f82612243575060016106c6565b8161224f57505f6106c6565b8160018114612265576002811461226f5761228b565b60019150506106c6565b60ff841115612280576122806121df565b50506001821b6106c6565b5060208310610133831016604e8410600b84101617156122ae575081810a6106c6565b6122b883836121f3565b805f19048211156122cb576122cb6121df565b029392505050565b5f610a1760ff841683612235565b80820281158282048414176106c6576106c66121df565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f8261234757634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612371576123716121df565b5060010190565b5f60208284031215612388575f80fd5b5051919050565b5f6020828403121561239f575f80fd5b8151610a1781612045565b808201808211156106c6576106c66121df565b818103818111156106c6576106c66121df565b5f602082840312156123e0575f80fd5b8151610a1781612007565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156124395784516001600160a01b031683529383019391830191600101612414565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200e676a9b1a6c315b2b927aeadf8b87a374d9cc249908a974d59394d11be5bfce64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101e9575f3560e01c806370a0823111610108578063a08fc5c71161009d578063d2a09c711161006d578063d2a09c71146105cf578063d2f4a50a146105ee578063dd62ed3e14610634578063e303e66214610678578063f2fde38b14610697575f80fd5b8063a08fc5c714610553578063a9059cbb14610572578063c492f04614610591578063cc274b29146105b0575f80fd5b80638a8c523c116100d85780638a8c523c146104d65780638da5cb5b146104ea57806395d89b41146105065780639686d32214610534575f80fd5b806370a082311461044a578063715018a61461047e578063743781321461049257806382247ec0146104c1575f80fd5b80631c499ab01161017e57806349bd5a5e1161014e57806349bd5a5e146103ae5780634fbee193146103e15780635b895c29146104185780636ddd17131461042c575f80fd5b80631c499ab01461033657806323b872dd146103555780633049b58014610374578063313ce56714610393575f80fd5b80631694505e116101b95780631694505e146102b057806318160ddd146102ef5780631a695230146103035780631b9152bf14610322575f80fd5b806306fdde03146101f4578063095ea7b31461023d57806309fb56391461026c5780630e5a92311461028d575f80fd5b366101f057005b5f80fd5b3480156101ff575f80fd5b5060408051808201909152600f81526e2137a530b1b5902437b939b2b6b0b760891b60208201525b6040516102349190611fbc565b60405180910390f35b348015610248575f80fd5b5061025c61025736600461201b565b6106b6565b6040519015158152602001610234565b348015610277575f80fd5b5061028b610286366004612052565b6106cc565b005b348015610298575f80fd5b506102a260045481565b604051908152602001610234565b3480156102bb575f80fd5b506102d7737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610234565b3480156102fa575f80fd5b506102a261071e565b34801561030e575f80fd5b5061028b61031d36600461206d565b61073d565b34801561032d575f80fd5b5061028b610791565b348015610341575f80fd5b5061028b610350366004612088565b610843565b348015610360575f80fd5b5061025c61036f36600461209f565b610941565b34801561037f575f80fd5b5061028b61038e366004612088565b610a1e565b34801561039e575f80fd5b5060405160128152602001610234565b3480156103b9575f80fd5b506102d77f000000000000000000000000497d19d7fee5072b9ab6bd1953abe6067a052deb81565b3480156103ec575f80fd5b5061025c6103fb36600461206d565b6001600160a01b03165f908152600e602052604090205460ff1690565b348015610423575f80fd5b5061028b610ae7565b348015610437575f80fd5b50600d5461025c90610100900460ff1681565b348015610455575f80fd5b506102a261046436600461206d565b6001600160a01b03165f9081526001602052604090205490565b348015610489575f80fd5b5061028b610b90565b34801561049d575f80fd5b50600954600a546104ac919082565b60408051928352602083019190915201610234565b3480156104cc575f80fd5b506102a260035481565b3480156104e1575f80fd5b5061028b610bd1565b3480156104f5575f80fd5b505f546001600160a01b03166102d7565b348015610511575f80fd5b50604080518082019091526006815265424f4a41434b60d01b6020820152610227565b34801561053f575f80fd5b5061028b61054e3660046120dd565b610c44565b34801561055e575f80fd5b5061028b61056d366004612114565b610ce3565b34801561057d575f80fd5b5061025c61058c36600461201b565b610e26565b34801561059c575f80fd5b5061028b6105ab366004612134565b610e32565b3480156105bb575f80fd5b5061025c6105ca366004612088565b610fe4565b3480156105da575f80fd5b5061028b6105e9366004612052565b611190565b3480156105f9575f80fd5b50600b54600c54610614916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610234565b34801561063f575f80fd5b506102a261064e3660046121b3565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610683575f80fd5b5061028b61069236600461206d565b611280565b3480156106a2575f80fd5b5061028b6106b136600461206d565b611450565b5f6106c23384846114f6565b5060015b92915050565b600b546001600160a01b031633146106e2575f80fd5b6005805460ff19168215159081179091556040517f7fc281b886d2b464428d21902edc6f02d5d8badcefcaf0f1bafc043c51244be0905f90a250565b5f61072b6012600a6122d3565b61073890620f42406122e1565b905090565b33738036e4eb08209495a895e28fbd8a15ef99ab490a036101f0576040516001600160a01b038216904780156108fc02915f818181858888f1935050505015801561078a573d5f803e3d5ffd5b5050565b50565b336107a35f546001600160a01b031690565b6001600160a01b0316146107d25760405162461bcd60e51b81526004016107c9906122f8565b60405180910390fd5b5f471161081a5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b71d1037379032ba34103a379031b632b0b960511b60448201526064016107c9565b60405133904780156108fc02915f818181858888f1935050505015801561078e573d5f803e3d5ffd5b336108555f546001600160a01b031690565b6001600160a01b03161461087b5760405162461bcd60e51b81526004016107c9906122f8565b6108876012600a6122d3565b6103e86108966012600a6122d3565b6108a390620f42406122e1565b6108ae9060056122e1565b6108b8919061232d565b6108c2919061232d565b8110156109255760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e3a2063616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b60648201526084016107c9565b6109316012600a6122d3565b61093b90826122e1565b60035550565b6001600160a01b0383165f9081526002602090815260408083203384529091528120545f1914610a09576001600160a01b0384165f908152600260209081526040808320338452909152902054828110156109de5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420416c6c6f77616e636500000060448201526064016107c9565b506001600160a01b0384165f9081526002602090815260408083203384529091529020805483900390555b610a148484846115ee565b90505b9392505050565b600b546001600160a01b03163314610a34575f80fd5b5f81118015610a435750600481105b610ab55760405162461bcd60e51b815260206004820152603c60248201527f546f6b656e3a206f6e6c7920747261646520636f6f6c646f776e2076616c756560448201527f7320696e2072616e67652028302c3429207065726d69737369626c650000000060648201526084016107c9565b600681905560405181907fb1af3fca46cbc4b6ceb19173da47e172fd99155f6c0cd5c0797cdd11056efd78905f90a250565b33610af95f546001600160a01b031690565b6001600160a01b031614610b1f5760405162461bcd60e51b81526004016107c9906122f8565b305f9081526001602052604081205411610b865760405162461bcd60e51b815260206004820152602260248201527f546f6b656e3a206e6f20636f6e747261637420746f6b656e7320746f20636c6560448201526130b960f11b60648201526084016107c9565b610b8e611a13565b565b33610ba25f546001600160a01b031690565b6001600160a01b031614610bc85760405162461bcd60e51b81526004016107c9906122f8565b610b8e5f611add565b33610be35f546001600160a01b031690565b6001600160a01b031614610c095760405162461bcd60e51b81526004016107c9906122f8565b600d805462ff00001916620100001790556040517fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f905f90a1565b33610c565f546001600160a01b031690565b6001600160a01b031614610c7c5760405162461bcd60e51b81526004016107c9906122f8565b306001600160a01b03831603610c90575f80fd5b6001600160a01b0382165f81815260076020526040808220805460ff191685151590811790915590519092917f85649af0309729cae07d0c038ebb0ce8b1652c1e2e9226993e8123ac60022ba191a35050565b33610cf55f546001600160a01b031690565b6001600160a01b031614610d1b5760405162461bcd60e51b81526004016107c9906122f8565b60095482111580610d2c5750600582105b610d835760405162461bcd60e51b815260206004820152602260248201527f546f6b656e3a206d757374207265647563652062757920666565206f72203c20604482015261352560f01b60648201526084016107c9565b600a5481111580610d945750600581105b610dec5760405162461bcd60e51b815260206004820152602360248201527f546f6b656e3a206d757374207265647563652073656c6c20666565206f72203c60448201526220352560e81b60648201526084016107c9565b6009829055600a819055604051819083907f64f84976d9c917a44796104a59950fdbd9b3c16a5dd348b546d738301f6bd068905f90a35050565b5f610a173384846115ee565b33610e445f546001600160a01b031690565b6001600160a01b031614610e6a5760405162461bcd60e51b81526004016107c9906122f8565b5f5b82811015610fde57811515600e5f868685818110610e8c57610e8c61234c565b9050602002016020810190610ea1919061206d565b6001600160a01b0316815260208101919091526040015f205460ff16151503610f1b5760405162461bcd60e51b815260206004820152602660248201527f546f6b656e3a206164647265737320616c7265616479207b73686f756c644578604482015265636c7564657d60d01b60648201526084016107c9565b81600e5f868685818110610f3157610f3161234c565b9050602002016020810190610f46919061206d565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055811515848483818110610f8257610f8261234c565b9050602002016020810190610f97919061206d565b6001600160a01b03167f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb60405160405180910390a380610fd681612360565b915050610e6c565b50505050565b5f33610ff75f546001600160a01b031690565b6001600160a01b03161461101d5760405162461bcd60e51b81526004016107c9906122f8565b620186a061102d6012600a6122d3565b61103a90620f42406122e1565b6110459060016122e1565b61104f919061232d565b8210156110d35760405162461bcd60e51b815260206004820152604660248201527f546f6b656e3a2073776170207468726573686f6c642063616e6e6f742062652060448201527f6c6f776572207468616e20302e30303125206f662074686520746f74616c20736064820152653ab838363c9760d11b608482015260a4016107c9565b6103e86110e26012600a6122d3565b6110ef90620f42406122e1565b6110fa9060056122e1565b611104919061232d565b8211156111875760405162461bcd60e51b815260206004820152604560248201527f546f6b656e3a2073776170207468726573686f6c642063616e6e6f742062652060448201527f686967686572207468616e20302e3525206f662074686520746f74616c2073756064820152643838363c9760d91b608482015260a4016107c9565b50600455600190565b336111a25f546001600160a01b031690565b6001600160a01b0316146111c85760405162461bcd60e51b81526004016107c9906122f8565b801515600d60019054906101000a900460ff1615150361123c5760405162461bcd60e51b815260206004820152602960248201527f546f6b656e3a2073776170456e61626c656420616c7265616479207b73686f756044820152686c64456e61626c657d60b81b60648201526084016107c9565b600d805461ff001916610100831515908102919091179091556040517fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c8905f90a250565b336112925f546001600160a01b031690565b6001600160a01b0316146112b85760405162461bcd60e51b81526004016107c9906122f8565b306001600160a01b0382160361131a5760405162461bcd60e51b815260206004820152602160248201527f546f6b656e3a2063616e277420636c65617220636f6e747261637420746f6b656044820152603760f91b60648201526084016107c9565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561135e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113829190612378565b90505f81116113dd5760405162461bcd60e51b815260206004820152602160248201527f546f6b656e3a206e6f7420656e6f75676820746f6b656e7320746f20636c65616044820152603960f91b60648201526084016107c9565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611427573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144b919061238f565b505050565b336114625f546001600160a01b031690565b6001600160a01b0316146114885760405162461bcd60e51b81526004016107c9906122f8565b6001600160a01b0381166114ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c9565b61078e81611add565b6001600160a01b0383166115425760405162461bcd60e51b815260206004820152601360248201527245524332303a207a65726f204164647265737360681b60448201526064016107c9565b6001600160a01b03821661158e5760405162461bcd60e51b815260206004820152601360248201527245524332303a207a65726f204164647265737360681b60448201526064016107c9565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8383600d60029054906101000a900460ff16806116195750600b546001600160a01b038381169116145b8061163b57506001600160a01b0382165f908152600e602052604090205460ff165b6116875760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e3a2054726164696e67206973206e6f74206163746976652e00000060448201526064016107c9565b6001600160a01b0386166116eb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107c9565b6001600160a01b03851661174d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107c9565b83158061175c5750600d5460ff165b156117735761176c868686611b2c565b9250611a0a565b7f000000000000000000000000497d19d7fee5072b9ab6bd1953abe6067a052deb6001600160a01b0316856001600160a01b0316141580156117cd57506001600160a01b0385165f908152600e602052604090205460ff16155b80156117e75750600b546001600160a01b03868116911614155b15611869576003546001600160a01b0386165f9081526001602052604090205461181190866123aa565b11156118695760405162461bcd60e51b815260206004820152602160248201527f546f6b656e3a206d61782077616c6c657420616d6f756e7420657863656564656044820152601960fa1b60648201526084016107c9565b60055460ff16801561189357506001600160a01b0386165f9081526007602052604090205460ff16155b80156118b757506001600160a01b0385165f9081526007602052604090205460ff16155b156118ec575f6118c78787611c2b565b90506118d281611c56565b6001600160a01b03165f9081526008602052604090204390555b600d54610100900460ff1680156119065750600d5460ff16155b801561194457507f000000000000000000000000497d19d7fee5072b9ab6bd1953abe6067a052deb6001600160a01b0316866001600160a01b031614155b801561196857506001600160a01b0386165f908152600e602052604090205460ff16155b801561198c57506001600160a01b0385165f908152600e602052604090205460ff16155b1561199957611999611a13565b600d546001600160a01b0387165f908152600e602052604090205460ff918216159116806119de57506001600160a01b0386165f908152600e602052604090205460ff165b156119e657505f5b80156119ff576119f7878787611cf6565b935050611a0a565b6119f7878787611b2c565b50509392505050565b600d805460ff191660011790555f611a3f306001600160a01b03165f9081526001602052604090205490565b9050600454811080611a605750435f908152600f6020526040902054600211155b15611a6b5750611ad1565b600454611a799060146122e1565b811115611a9157600454611a8e9060146122e1565b90505b47611a9b82611d38565b5f611aa682476123bd565b90508015611acd57611acd6003611abe8360026122e1565b611ac8919061232d565b611eb8565b5050505b600d805460ff19169055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383165f9081526001602052604081205482811015611b945760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e3a20696e73756666696369656e742042616c616e6365000000000060448201526064016107c9565b6001600160a01b038086165f908152600160205260408082208054879003905591861681529081208054859290611bcc9084906123aa565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611c1891815260200190565b60405180910390a3506001949350505050565b5f823b1580611c395750813b155b611c41575f80fd5b823b15611c4f5750806106c6565b50816106c6565b6001600160a01b0381165f908152600860205260408120541580611ca75750611c804360016123aa565b6006546001600160a01b0384165f90815260086020526040902054611ca591906123aa565b105b90508061078a5760405162461bcd60e51b815260206004820152601a60248201527f4d6178207478206672657175656e63792065786365656465642100000000000060448201526064016107c9565b5f80611d03858585611f0e565b90508015611d2457611d16853083611b2c565b50611d2181846123bd565b92505b611d2f858585611b2c565b95945050505050565b435f908152600f60205260408120805491611d5283612360565b90915550506040805160028082526060820183525f9260208301908036833701905050905030815f81518110611d8a57611d8a61234c565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e1e91906123d0565b81600181518110611e3157611e3161234c565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611e889085905f908690309042906004016123eb565b5f604051808303815f87803b158015611e9f575f80fd5b505af1925050508015611eb0575060015b61078a575050565b600c546040515f916001600160a01b03169083908381818185875af1925050503d805f8114611f02576040519150601f19603f3d011682016040523d82523d5f602084013e611f07565b606091505b5050505050565b5f7f000000000000000000000000497d19d7fee5072b9ab6bd1953abe6067a052deb6001600160a01b0316836001600160a01b031603611f6957600a54606490611f5890846122e1565b611f62919061232d565b9050610a17565b7f000000000000000000000000497d19d7fee5072b9ab6bd1953abe6067a052deb6001600160a01b0316846001600160a01b031603610a1757600954606490611fb290846122e1565b610a14919061232d565b5f6020808352835180828501525f5b81811015611fe757858101830151858201604001528201611fcb565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461078e575f80fd5b5f806040838503121561202c575f80fd5b823561203781612007565b946020939093013593505050565b801515811461078e575f80fd5b5f60208284031215612062575f80fd5b8135610a1781612045565b5f6020828403121561207d575f80fd5b8135610a1781612007565b5f60208284031215612098575f80fd5b5035919050565b5f805f606084860312156120b1575f80fd5b83356120bc81612007565b925060208401356120cc81612007565b929592945050506040919091013590565b5f80604083850312156120ee575f80fd5b82356120f981612007565b9150602083013561210981612045565b809150509250929050565b5f8060408385031215612125575f80fd5b50508035926020909101359150565b5f805f60408486031215612146575f80fd5b833567ffffffffffffffff8082111561215d575f80fd5b818601915086601f830112612170575f80fd5b81358181111561217e575f80fd5b8760208260051b8501011115612192575f80fd5b602092830195509350508401356121a881612045565b809150509250925092565b5f80604083850312156121c4575f80fd5b82356121cf81612007565b9150602083013561210981612007565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561222d57815f1904821115612213576122136121df565b8085161561222057918102915b93841c93908002906121f8565b509250929050565b5f82612243575060016106c6565b8161224f57505f6106c6565b8160018114612265576002811461226f5761228b565b60019150506106c6565b60ff841115612280576122806121df565b50506001821b6106c6565b5060208310610133831016604e8410600b84101617156122ae575081810a6106c6565b6122b883836121f3565b805f19048211156122cb576122cb6121df565b029392505050565b5f610a1760ff841683612235565b80820281158282048414176106c6576106c66121df565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f8261234757634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612371576123716121df565b5060010190565b5f60208284031215612388575f80fd5b5051919050565b5f6020828403121561239f575f80fd5b8151610a1781612045565b808201808211156106c6576106c66121df565b818103818111156106c6576106c66121df565b5f602082840312156123e0575f80fd5b8151610a1781612007565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156124395784516001600160a01b031683529383019391830191600101612414565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200e676a9b1a6c315b2b927aeadf8b87a374d9cc249908a974d59394d11be5bfce64736f6c63430008140033

Deployed Bytecode Sourcemap

2689:13389:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6249:80;;;;;;;;;;-1:-1:-1;6321:5:0;;;;;;;;;;;;-1:-1:-1;;;6321:5:0;;;;6249:80;;;;;;;:::i;:::-;;;;;;;;6585:161;;;;;;;;;;-1:-1:-1;6585:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6585:161:0;1023:187:1;15148:176:0;;;;;;;;;;-1:-1:-1;15148:176:0;;;;;:::i;:::-;;:::i;:::-;;3156:56;;;;;;;;;;;;;;;;;;;1730:25:1;;;1718:2;1703:18;3156:56:0;1584:177:1;3994:93:0;;;;;;;;;;;;4044:42;3994:93;;;;;-1:-1:-1;;;;;1944:32:1;;;1926:51;;1914:2;1899:18;3994:93:0;1766:217:1;5979:88:0;;;;;;;;;;;;;:::i;13676:209::-;;;;;;;;;;-1:-1:-1;13676:209:0;;;;;:::i;:::-;;:::i;10423:180::-;;;;;;;;;;;;;:::i;8809:234::-;;;;;;;;;;-1:-1:-1;8809:234:0;;;;;:::i;:::-;;:::i;7221:492::-;;;;;;;;;;-1:-1:-1;7221:492:0;;;;;:::i;:::-;;:::i;15332:352::-;;;;;;;;;;-1:-1:-1;15332:352:0;;;;;:::i;:::-;;:::i;6073:80::-;;;;;;;;;;-1:-1:-1;6073:80:0;;2884:2;3028:36:1;;3016:2;3001:18;6073:80:0;2886:184:1;4094:38:0;;;;;;;;;;;;;;;9907:123;;;;;;;;;;-1:-1:-1;9907:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;9996:26:0;9972:4;9996:26;;;:17;:26;;;;;;;;;9907:123;10611:164;;;;;;;;;;;;;:::i;4167:30::-;;;;;;;;;;-1:-1:-1;4167:30:0;;;;;;;;;;;6335:103;;;;;;;;;;-1:-1:-1;6335:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;6418:18:0;6401:7;6418:18;;;:9;:18;;;;;;;6335:103;2207:94;;;;;;;;;;;;;:::i;3715:51::-;;;;;;;;;;-1:-1:-1;3715:51:0;;;;;;;;;;;;;3457:25:1;;;3513:2;3498:18;;3491:34;;;;3430:18;3715:51:0;3283:248:1;3097:52:0;;;;;;;;;;;;;;;;15922:116;;;;;;;;;;;;;:::i;1988:87::-;;;;;;;;;;-1:-1:-1;2034:7:0;2061:6;-1:-1:-1;;;;;2061:6:0;1988:87;;6159:84;;;;;;;;;;-1:-1:-1;6233:7:0;;;;;;;;;;;;-1:-1:-1;;;6233:7:0;;;;6159:84;;15692:222;;;;;;;;;;-1:-1:-1;15692:222:0;;;;;:::i;:::-;;:::i;9051:418::-;;;;;;;;;;-1:-1:-1;9051:418:0;;;;;:::i;:::-;;:::i;7070:143::-;;;;;;;;;;-1:-1:-1;7070:143:0;;;;;:::i;:::-;;:::i;9477:422::-;;;;;;;;;;-1:-1:-1;9477:422:0;;;;;:::i;:::-;;:::i;8395:405::-;;;;;;;;;;-1:-1:-1;8395:405:0;;;;;:::i;:::-;;:::i;8149:238::-;;;;;;;;;;-1:-1:-1;8149:238:0;;;;;:::i;:::-;;:::i;3806:179::-;;;;;;;;;;-1:-1:-1;3806:179:0;;;;;;-1:-1:-1;;;;;3806:179:0;;;;;;;;;;;-1:-1:-1;;;;;5161:15:1;;;5143:34;;5213:15;;;;5208:2;5193:18;;5186:43;5078:18;3806:179:0;4931:304:1;6444:133:0;;;;;;;;;;-1:-1:-1;6444:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;6546:19:0;;;6528:7;6546:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;6444:133;10038:377;;;;;;;;;;-1:-1:-1;10038:377:0;;;;;:::i;:::-;;:::i;2309:192::-;;;;;;;;;;-1:-1:-1;2309:192:0;;;;;:::i;:::-;;:::i;6585:161::-;6662:4;6679:37;6688:10;6700:7;6709:6;6679:8;:37::i;:::-;-1:-1:-1;6734:4:0;6585:161;;;;;:::o;15148:176::-;15226:7;:22;-1:-1:-1;;;;;15226:22:0;15212:10;:36;15204:45;;;;;;15260:7;:16;;-1:-1:-1;;15260:16:0;;;;;;;;;;15294:22;;;;-1:-1:-1;;15294:22:0;15148:176;:::o;5979:88::-;6034:7;3262:13;2884:2;3262;:13;:::i;:::-;3063:27;;:9;:27;:::i;:::-;6045:19;;5979:88;:::o;13676:209::-;13733:10;13747:42;13733:56;13730:147;;13804:49;;-1:-1:-1;;;;;13804:24:0;;;13830:21;13804:49;;;;;;;;;13830:21;13804:24;:49;;;;;;;;;;;;;;;;;;;;;13676:209;:::o;13730:147::-;13676:209;:::o;10423:180::-;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;;;;;;;;;10505:1:::1;10481:21;:25;10473:60;;;::::0;-1:-1:-1;;;10473:60:0;;7884:2:1;10473:60:0::1;::::0;::::1;7866:21:1::0;7923:2;7903:18;;;7896:30;-1:-1:-1;;;7942:18:1;;;7935:52;8004:18;;10473:60:0::1;7682:346:1::0;10473:60:0::1;10544:51;::::0;10552:10:::1;::::0;10573:21:::1;10544:51:::0;::::1;;;::::0;::::1;::::0;;;10573:21;10552:10;10544:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;8809:234:::0;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;3262:13:::1;2884:2;3262;:13;:::i;:::-;8918:4;3262:13;2884:2;3262;:13;:::i;:::-;3063:27;::::0;:9:::1;:27;:::i;:::-;8899:16;::::0;8914:1:::1;8899:16;:::i;:::-;:23;;;;:::i;:::-;8898:41;;;;:::i;:::-;8888:6;:51;;8880:107;;;::::0;-1:-1:-1;;;8880:107:0;;8457:2:1;8880:107:0::1;::::0;::::1;8439:21:1::0;8496:2;8476:18;;;8469:30;8535:34;8515:18;;;8508:62;-1:-1:-1;;;8586:18:1;;;8579:41;8637:19;;8880:107:0::1;8255:407:1::0;8880:107:0::1;3262:13;2884:2;3262;:13;:::i;:::-;9011:24;::::0;:6;:24:::1;:::i;:::-;8998:10;:37:::0;-1:-1:-1;8809:234:0:o;7221:492::-;-1:-1:-1;;;;;7332:19:0;;7312:4;7332:19;;;:11;:19;;;;;;;;7352:10;7332:31;;;;;;;;-1:-1:-1;;7332:52:0;7329:323;;-1:-1:-1;;;;;7427:19:0;;7400:24;7427:19;;;:11;:19;;;;;;;;7447:10;7427:31;;;;;;;;7481:26;;;;7473:68;;;;-1:-1:-1;;;7473:68:0;;8869:2:1;7473:68:0;;;8851:21:1;8908:2;8888:18;;;8881:30;8947:31;8927:18;;;8920:59;8996:18;;7473:68:0;8667:353:1;7473:68:0;-1:-1:-1;;;;;;7584:19:0;;;;;;:11;:19;;;;;;;;7604:10;7584:31;;;;;;;:41;;;;;;;7329:323;7669:36;7679:6;7687:9;7698:6;7669:9;:36::i;:::-;7662:43;;7221:492;;;;;;:::o;15332:352::-;15426:7;:22;-1:-1:-1;;;;;15426:22:0;15412:10;:36;15404:45;;;;;;15487:1;15468:16;:20;:44;;;;;15511:1;15492:16;:20;15468:44;15460:117;;;;-1:-1:-1;;;15460:117:0;;9227:2:1;15460:117:0;;;9209:21:1;9266:2;9246:18;;;9239:30;9305:34;9285:18;;;9278:62;9376:30;9356:18;;;9349:58;9424:19;;15460:117:0;9025:424:1;15460:117:0;15588:13;:32;;;15638:38;;15604:16;;15638:38;;;;;15332:352;:::o;10611:164::-;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;10693:4:::1;10702:1;6418:18:::0;;;:9;:18;;;;;;10675:28:::1;10667:75;;;::::0;-1:-1:-1;;;10667:75:0;;9656:2:1;10667:75:0::1;::::0;::::1;9638:21:1::0;9695:2;9675:18;;;9668:30;9734:34;9714:18;;;9707:62;-1:-1:-1;;;9785:18:1;;;9778:32;9827:19;;10667:75:0::1;9454:398:1::0;10667:75:0::1;10753:14;:12;:14::i;:::-;10611:164::o:0;2207:94::-;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;2272:21:::1;2290:1;2272:9;:21::i;15922:116::-:0;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;15977:13:::1;:20:::0;;-1:-1:-1;;15977:20:0::1;::::0;::::1;::::0;;16015:15:::1;::::0;::::1;::::0;15977:20;;16015:15:::1;15922:116::o:0;15692:222::-;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;15805:4:::1;-1:-1:-1::0;;;;;15786:24:0;::::1;::::0;15778:33:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;15822:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;:33;;-1:-1:-1;;15822:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15873;;15822;;:25;15873:33:::1;::::0;::::1;15692:222:::0;;:::o;9051:418::-;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;9155:11:::1;:18:::0;9144:29;::::1;;::::0;:44:::1;;;9187:1;9177:7;:11;9144:44;9136:91;;;::::0;-1:-1:-1;;;9136:91:0;;10059:2:1;9136:91:0::1;::::0;::::1;10041:21:1::0;10098:2;10078:18;;;10071:30;10137:34;10117:18;;;10110:62;-1:-1:-1;;;10188:18:1;;;10181:32;10230:19;;9136:91:0::1;9857:398:1::0;9136:91:0::1;9258:19:::0;;9246:31;::::1;;::::0;:47:::1;;;9292:1;9281:8;:12;9246:47;9238:95;;;::::0;-1:-1:-1;;;9238:95:0;;10462:2:1;9238:95:0::1;::::0;::::1;10444:21:1::0;10501:2;10481:18;;;10474:30;10540:34;10520:18;;;10513:62;-1:-1:-1;;;10591:18:1;;;10584:33;10634:19;;9238:95:0::1;10260:399:1::0;9238:95:0::1;9344:11;:28:::0;;;9383:19;:30;;;9431::::1;::::0;9405:8;;9365:7;;9431:30:::1;::::0;9344:18:::1;::::0;9431:30:::1;9051:418:::0;;:::o;7070:143::-;7141:4;7165:40;7175:10;7187:9;7198:6;7165:9;:40::i;9477:422::-;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;9601:9:::1;9597:295;9616:19:::0;;::::1;9597:295;;;9699:13;9665:47;;:17;:30;9683:8;;9692:1;9683:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9665:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9665:30:0;;::::1;;:47;;::::0;9657:98:::1;;;::::0;-1:-1:-1;;;9657:98:0;;10998:2:1;9657:98:0::1;::::0;::::1;10980:21:1::0;11037:2;11017:18;;;11010:30;11076:34;11056:18;;;11049:62;-1:-1:-1;;;11127:18:1;;;11120:36;11173:19;;9657:98:0::1;10796:402:1::0;9657:98:0::1;9803:13;9770:17;:30;9788:8;;9797:1;9788:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9770:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9770:30:0;:46;;-1:-1:-1;;9770:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;9836:44;::::1;;9853:8:::0;;9862:1;9853:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9836:44:0::1;;;;;;;;;;;9637:3:::0;::::1;::::0;::::1;:::i;:::-;;;;9597:295;;;;9477:422:::0;;;:::o;8395:405::-;8471:4;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;8527:6:::1;3262:13;2884:2;3262;:13;:::i;:::-;3063:27;::::0;:9:::1;:27;:::i;:::-;8508:16;::::0;8523:1:::1;8508:16;:::i;:::-;:25;;;;:::i;:::-;8495:9;:38;;8487:121;;;::::0;-1:-1:-1;;;8487:121:0;;11545:2:1;8487:121:0::1;::::0;::::1;11527:21:1::0;11584:2;11564:18;;;11557:30;11623:34;11603:18;;;11596:62;11694:34;11674:18;;;11667:62;-1:-1:-1;;;11745:19:1;;;11738:37;11792:19;;8487:121:0::1;11343:474:1::0;8487:121:0::1;8658:4;3262:13;2884:2;3262;:13;:::i;:::-;3063:27;::::0;:9:::1;:27;:::i;:::-;8639:16;::::0;8654:1:::1;8639:16;:::i;:::-;:23;;;;:::i;:::-;8626:9;:36;;8618:118;;;::::0;-1:-1:-1;;;8618:118:0;;12024:2:1;8618:118:0::1;::::0;::::1;12006:21:1::0;12063:2;12043:18;;;12036:30;12102:34;12082:18;;;12075:62;12173:34;12153:18;;;12146:62;-1:-1:-1;;;12224:19:1;;;12217:36;12270:19;;8618:118:0::1;11822:473:1::0;8618:118:0::1;-1:-1:-1::0;8746:14:0::1;:26:::0;8789:4:::1;::::0;8395:405::o;8149:238::-;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;8241:12:::1;8226:27;;:11;;;;;;;;;;;:27;;::::0;8218:81:::1;;;::::0;-1:-1:-1;;;8218:81:0;;12502:2:1;8218:81:0::1;::::0;::::1;12484:21:1::0;12541:2;12521:18;;;12514:30;12580:34;12560:18;;;12553:62;-1:-1:-1;;;12631:18:1;;;12624:39;12680:19;;8218:81:0::1;12300:405:1::0;8218:81:0::1;8310:11;:26:::0;;-1:-1:-1;;8310:26:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;8354:25:::1;::::0;::::1;::::0;-1:-1:-1;;8354:25:0::1;8149:238:::0;:::o;10038:377::-;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;10143:4:::1;-1:-1:-1::0;;;;;10119:29:0;::::1;::::0;10111:75:::1;;;::::0;-1:-1:-1;;;10111:75:0;;12912:2:1;10111:75:0::1;::::0;::::1;12894:21:1::0;12951:2;12931:18;;;12924:30;12990:34;12970:18;;;12963:62;-1:-1:-1;;;13041:18:1;;;13034:31;13082:19;;10111:75:0::1;12710:397:1::0;10111:75:0::1;10221:45;::::0;-1:-1:-1;;;10221:45:0;;10260:4:::1;10221:45;::::0;::::1;1926:51:1::0;10197:21:0::1;::::0;-1:-1:-1;;;;;10221:30:0;::::1;::::0;::::1;::::0;1899:18:1;;10221:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10197:69;;10301:1;10285:13;:17;10277:63;;;::::0;-1:-1:-1;;;10277:63:0;;13503:2:1;10277:63:0::1;::::0;::::1;13485:21:1::0;13542:2;13522:18;;;13515:30;13581:34;13561:18;;;13554:62;-1:-1:-1;;;13632:18:1;;;13625:31;13673:19;;10277:63:0::1;13301:397:1::0;10277:63:0::1;10351:56;::::0;-1:-1:-1;;;10351:56:0;;10381:10:::1;10351:56;::::0;::::1;13877:51:1::0;13944:18;;;13937:34;;;-1:-1:-1;;;;;10351:29:0;::::1;::::0;::::1;::::0;13850:18:1;;10351:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10100:315;10038:377:::0;:::o;2309:192::-;2132:10;2121:7;2034;2061:6;-1:-1:-1;;;;;2061:6:0;;1988:87;2121:7;-1:-1:-1;;;;;2121:21:0;;2113:66;;;;-1:-1:-1;;;2113:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2398:22:0;::::1;2390:73;;;::::0;-1:-1:-1;;;2390:73:0;;14434:2:1;2390:73:0::1;::::0;::::1;14416:21:1::0;14473:2;14453:18;;;14446:30;14512:34;14492:18;;;14485:62;-1:-1:-1;;;14563:18:1;;;14556:36;14609:19;;2390:73:0::1;14232:402:1::0;2390:73:0::1;2474:19;2484:8;2474:9;:19::i;6754:308::-:0;-1:-1:-1;;;;;6849:20:0;;6841:52;;;;-1:-1:-1;;;6841:52:0;;14841:2:1;6841:52:0;;;14823:21:1;14880:2;14860:18;;;14853:30;-1:-1:-1;;;14899:18:1;;;14892:49;14958:18;;6841:52:0;14639:343:1;6841:52:0;-1:-1:-1;;;;;6912:21:0;;6904:53;;;;-1:-1:-1;;;6904:53:0;;14841:2:1;6904:53:0;;;14823:21:1;14880:2;14860:18;;;14853:30;-1:-1:-1;;;14899:18:1;;;14892:49;14958:18;;6904:53:0;14639:343:1;6904:53:0;-1:-1:-1;;;;;6968:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;7021:33;;1730:25:1;;;7021:33:0;;1703:18:1;7021:33:0;;;;;;;6754:308;;;:::o;10783:1322::-;10884:4;10856;10862:2;4978:13;;;;;;;;;;;:47;;;-1:-1:-1;5003:7:0;:22;-1:-1:-1;;;;;4995:30:0;;;5003:22;;4995:30;4978:47;:74;;;-1:-1:-1;;;;;;5029:23:0;;;;;;:17;:23;;;;;;;;4978:74;4970:116;;;;-1:-1:-1;;;4970:116:0;;15189:2:1;4970:116:0;;;15171:21:1;15228:2;15208:18;;;15201:30;15267:31;15247:18;;;15240:59;15316:18;;4970:116:0;14987:353:1;4970:116:0;-1:-1:-1;;;;;10909:18:0;::::1;10901:68;;;::::0;-1:-1:-1;;;10901:68:0;;15547:2:1;10901:68:0::1;::::0;::::1;15529:21:1::0;15586:2;15566:18;;;15559:30;15625:34;15605:18;;;15598:62;-1:-1:-1;;;15676:18:1;;;15669:35;15721:19;;10901:68:0::1;15345:401:1::0;10901:68:0::1;-1:-1:-1::0;;;;;10988:16:0;::::1;10980:64;;;::::0;-1:-1:-1;;;10980:64:0;;15953:2:1;10980:64:0::1;::::0;::::1;15935:21:1::0;15992:2;15972:18;;;15965:30;16031:34;16011:18;;;16004:62;-1:-1:-1;;;16082:18:1;;;16075:33;16125:19;;10980:64:0::1;15751:399:1::0;10980:64:0::1;11068:11:::0;;;:21:::1;;-1:-1:-1::0;11083:6:0::1;::::0;::::1;;11068:21;11065:103;;;11113:32;11128:4;11134:2;11138:6;11113:14;:32::i;:::-;11106:39;;;;11065:103;11198:13;-1:-1:-1::0;;;;;11192:19:0::1;:2;-1:-1:-1::0;;;;;11192:19:0::1;;;:45;;;;-1:-1:-1::0;;;;;;11216:21:0;::::1;;::::0;;;:17:::1;:21;::::0;;;;;::::1;;11215:22;11192:45;:77;;;;-1:-1:-1::0;11247:7:0::1;:22:::0;-1:-1:-1;;;;;11241:28:0;;::::1;11247:22:::0;::::1;11241:28;;11192:77;11188:192;;;11320:10;::::0;-1:-1:-1;;;;;6418:18:0;;6401:7;6418:18;;;:9;:18;;;;;;11294:22:::1;::::0;:6;:22:::1;:::i;:::-;:36;;11286:82;;;::::0;-1:-1:-1;;;11286:82:0;;16487:2:1;11286:82:0::1;::::0;::::1;16469:21:1::0;16526:2;16506:18;;;16499:30;16565:34;16545:18;;;16538:62;-1:-1:-1;;;16616:18:1;;;16609:31;16657:19;;11286:82:0::1;16285:397:1::0;11286:82:0::1;11395:7;::::0;::::1;;:34:::0;::::1;;;-1:-1:-1::0;;;;;;11407:22:0;::::1;;::::0;;;:16:::1;:22;::::0;;;;;::::1;;11406:23;11395:34;:59;;;;-1:-1:-1::0;;;;;;11434:20:0;::::1;;::::0;;;:16:::1;:20;::::0;;;;;::::1;;11433:21;11395:59;11392:224;;;11470:13;11486:24;11501:4;11507:2;11486:14;:24::i;:::-;11470:40;;11525:27;11546:5;11525:20;:27::i;:::-;-1:-1:-1::0;;;;;11567:22:0::1;;::::0;;;:15:::1;:22;::::0;;;;11592:12:::1;11567:37:::0;;11392:224:::1;11637:11;::::0;::::1;::::0;::::1;;;:22:::0;::::1;;;-1:-1:-1::0;11653:6:0::1;::::0;::::1;;11652:7;11637:22;:47;;;;;11671:13;-1:-1:-1::0;;;;;11663:21:0::1;:4;-1:-1:-1::0;;;;;11663:21:0::1;;;11637:47;:75;;;;-1:-1:-1::0;;;;;;11689:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;::::1;;11688:24;11637:75;:101;;;;-1:-1:-1::0;;;;;;11717:21:0;::::1;;::::0;;;:17:::1;:21;::::0;;;;;::::1;;11716:22;11637:101;11634:146;;;11754:14;:12;:14::i;:::-;11817:6;::::0;-1:-1:-1;;;;;11837:23:0;::::1;11801:12;11837:23:::0;;;:17:::1;:23;::::0;;;;;11817:6:::1;::::0;;::::1;11816:7;::::0;11837:23:::1;::::0;:48:::1;;-1:-1:-1::0;;;;;;11864:21:0;::::1;;::::0;;;:17:::1;:21;::::0;;;;;::::1;;11837:48;11834:95;;;-1:-1:-1::0;11912:5:0::1;11834:95;11960:7;11957:132;;;11989:32;12004:4;12010:2;12014:6;11989:14;:32::i;:::-;11982:39;;;;;11957:132;12057:32;12072:4;12078:2;12082:6;12057:14;:32::i;5097:1::-;10783:1322:::0;;;;;;;:::o;12920:591::-;4846:6;:13;;-1:-1:-1;;4846:13:0;4855:4;4846:13;;;:6;13001:24:::1;13019:4;-1:-1:-1::0;;;;;6418:18:0;6401:7;6418:18;;;:9;:18;;;;;;;6335:103;13001:24:::1;12975:50;;13057:14;;13039:15;:32;:46;;;-1:-1:-1::0;12887:12:0;12844:4;12868:32;;;:18;:32;;;;;;12903:1;-1:-1:-1;13075:10:0::1;13039:46;13036:177;;;13101:7;;;13036:177;13144:14;::::0;:19:::1;::::0;13161:2:::1;13144:19;:::i;:::-;13126:15;:37;13123:90;;;13194:14;::::0;:19:::1;::::0;13211:2:::1;13194:19;:::i;:::-;13176:37;;13123:90;13262:21;13296:33;13313:15:::0;13296:16:::1;:33::i;:::-;13351:18;13372:41;13396:17:::0;13372:21:::1;:41;:::i;:::-;13351:62:::0;-1:-1:-1;13427:14:0;;13424:80:::1;;13469:23;13490:1;13477:12;13479:10:::0;13477:1:::1;:12;:::i;:::-;:14;;;;:::i;:::-;13469:7;:23::i;:::-;12961:550;;;4870:1;4882:6:::0;:14;;-1:-1:-1;;4882:14:0;;;12920:591::o;2509:173::-;2565:16;2584:6;;-1:-1:-1;;;;;2601:17:0;;;-1:-1:-1;;;;;;2601:17:0;;;;;;2634:40;;2584:6;;;;;;;2634:40;;2565:16;2634:40;2554:128;2509:173;:::o;7721:420::-;-1:-1:-1;;;;;7855:17:0;;7814:4;7855:17;;;:9;:17;;;;;;7891:23;;;;7883:63;;;;-1:-1:-1;;;7883:63:0;;17022:2:1;7883:63:0;;;17004:21:1;17061:2;17041:18;;;17034:30;17100:29;17080:18;;;17073:57;17147:18;;7883:63:0;16820:351:1;7883:63:0;-1:-1:-1;;;;;7981:17:0;;;;;;;:9;:17;;;;;;:27;;;;;;;8030:20;;;;;;;;:30;;8002:6;;7981:17;8030:30;;8002:6;;8030:30;:::i;:::-;;;;;;;;8093:9;-1:-1:-1;;;;;8076:35:0;8085:6;-1:-1:-1;;;;;8076:35:0;;8104:6;8076:35;;;;1730:25:1;;1718:2;1703:18;;1584:177;8076:35:0;;;;;;;;-1:-1:-1;8129:4:0;;7721:420;-1:-1:-1;;;;7721:420:0:o;14656:219::-;14730:7;14584:20;;14632:8;;14758:38;;-1:-1:-1;14584:20:0;;14632:8;14758:38;14750:47;;;;;;14584:20;;14632:8;14808:59;;-1:-1:-1;14836:5:0;14829:12;;14808:59;-1:-1:-1;14864:3:0;14857:10;;14883:257;-1:-1:-1;;;;;14968:21:0;;14951:14;14968:21;;;:15;:21;;;;;;:26;;:105;;-1:-1:-1;15055:16:0;:12;15070:1;15055:16;:::i;:::-;15037:13;;-1:-1:-1;;;;;15013:21:0;;;;;;:15;:21;;;;;;:37;;15037:13;15013:37;:::i;:::-;15012:60;14968:105;14951:122;;15092:9;15084:48;;;;-1:-1:-1;;;15084:48:0;;17378:2:1;15084:48:0;;;17360:21:1;17417:2;17397:18;;;17390:30;17456:28;17436:18;;;17429:56;17502:18;;15084:48:0;17176:350:1;12113:326:0;12196:4;12213:12;12228:26;12237:4;12243:2;12247:6;12228:8;:26::i;:::-;12213:41;-1:-1:-1;12272:8:0;;12269:113;;12300:41;12315:4;12329;12336;12300:14;:41::i;:::-;-1:-1:-1;12356:14:0;12366:4;12356:14;;:::i;:::-;;;12269:113;12399:32;12414:4;12420:2;12424:6;12399:14;:32::i;:::-;12392:39;12113:326;-1:-1:-1;;;;;12113:326:0:o;13893:552::-;13978:12;13959:32;;;;:18;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;;14088:16:0;;;14102:1;14088:16;;;;;;;;14064:21;;14088:16;;;;;;;;;;-1:-1:-1;14088:16:0;14064:40;;14133:4;14115;14120:1;14115:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;14115:23:0;;;-1:-1:-1;;;;;14115:23:0;;;;;4044:42;-1:-1:-1;;;;;14159:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14149:4;14154:1;14149:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14149:32:0;;;:7;;;;;;;;;;;:32;14198:214;;-1:-1:-1;;;14198:214:0;;4044:42;;14198:66;;:214;;14279:11;;14305:1;;14349:4;;14376;;14396:15;;14198:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:244;;14430:7;13893:552;:::o;13519:149::-;13600:23;;13592:59;;13575:12;;-1:-1:-1;;;;;13600:23:0;;13637:9;;13575:12;13592:59;13575:12;13592:59;13637:9;13600:23;13592:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13519:149:0:o;12447:348::-;12529:12;12583:13;-1:-1:-1;;;;;12577:19:0;:2;-1:-1:-1;;;;;12577:19:0;;12573:215;;12629:19;;3324:3;;12620:28;;:6;:28;:::i;:::-;:45;;;;:::i;:::-;12613:52;;12573:215;;;12695:13;-1:-1:-1;;;;;12687:21:0;:4;-1:-1:-1;;;;;12687:21:0;;12683:105;;12741:11;:18;3324:3;;12732:27;;:6;:27;:::i;:::-;:44;;;;:::i;14:548:1:-;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;1988:247::-;2047:6;2100:2;2088:9;2079:7;2075:23;2071:32;2068:52;;;2116:1;2113;2106:12;2068:52;2155:9;2142:23;2174:31;2199:5;2174:31;:::i;2240:180::-;2299:6;2352:2;2340:9;2331:7;2327:23;2323:32;2320:52;;;2368:1;2365;2358:12;2320:52;-1:-1:-1;2391:23:1;;2240:180;-1:-1:-1;2240:180:1:o;2425:456::-;2502:6;2510;2518;2571:2;2559:9;2550:7;2546:23;2542:32;2539:52;;;2587:1;2584;2577:12;2539:52;2626:9;2613:23;2645:31;2670:5;2645:31;:::i;:::-;2695:5;-1:-1:-1;2752:2:1;2737:18;;2724:32;2765:33;2724:32;2765:33;:::i;:::-;2425:456;;2817:7;;-1:-1:-1;;;2871:2:1;2856:18;;;;2843:32;;2425:456::o;3536:382::-;3601:6;3609;3662:2;3650:9;3641:7;3637:23;3633:32;3630:52;;;3678:1;3675;3668:12;3630:52;3717:9;3704:23;3736:31;3761:5;3736:31;:::i;:::-;3786:5;-1:-1:-1;3843:2:1;3828:18;;3815:32;3856:30;3815:32;3856:30;:::i;:::-;3905:7;3895:17;;;3536:382;;;;;:::o;3923:248::-;3991:6;3999;4052:2;4040:9;4031:7;4027:23;4023:32;4020:52;;;4068:1;4065;4058:12;4020:52;-1:-1:-1;;4091:23:1;;;4161:2;4146:18;;;4133:32;;-1:-1:-1;3923:248:1:o;4176:750::-;4268:6;4276;4284;4337:2;4325:9;4316:7;4312:23;4308:32;4305:52;;;4353:1;4350;4343:12;4305:52;4393:9;4380:23;4422:18;4463:2;4455:6;4452:14;4449:34;;;4479:1;4476;4469:12;4449:34;4517:6;4506:9;4502:22;4492:32;;4562:7;4555:4;4551:2;4547:13;4543:27;4533:55;;4584:1;4581;4574:12;4533:55;4624:2;4611:16;4650:2;4642:6;4639:14;4636:34;;;4666:1;4663;4656:12;4636:34;4721:7;4714:4;4704:6;4701:1;4697:14;4693:2;4689:23;4685:34;4682:47;4679:67;;;4742:1;4739;4732:12;4679:67;4773:4;4765:13;;;;-1:-1:-1;4797:6:1;-1:-1:-1;;4838:20:1;;4825:34;4868:28;4825:34;4868:28;:::i;:::-;4915:5;4905:15;;;4176:750;;;;;:::o;5240:388::-;5308:6;5316;5369:2;5357:9;5348:7;5344:23;5340:32;5337:52;;;5385:1;5382;5375:12;5337:52;5424:9;5411:23;5443:31;5468:5;5443:31;:::i;:::-;5493:5;-1:-1:-1;5550:2:1;5535:18;;5522:32;5563:33;5522:32;5563:33;:::i;5633:127::-;5694:10;5689:3;5685:20;5682:1;5675:31;5725:4;5722:1;5715:15;5749:4;5746:1;5739:15;5765:422;5854:1;5897:5;5854:1;5911:270;5932:7;5922:8;5919:21;5911:270;;;5991:4;5987:1;5983:6;5979:17;5973:4;5970:27;5967:53;;;6000:18;;:::i;:::-;6050:7;6040:8;6036:22;6033:55;;;6070:16;;;;6033:55;6149:22;;;;6109:15;;;;5911:270;;;5915:3;5765:422;;;;;:::o;6192:806::-;6241:5;6271:8;6261:80;;-1:-1:-1;6312:1:1;6326:5;;6261:80;6360:4;6350:76;;-1:-1:-1;6397:1:1;6411:5;;6350:76;6442:4;6460:1;6455:59;;;;6528:1;6523:130;;;;6435:218;;6455:59;6485:1;6476:10;;6499:5;;;6523:130;6560:3;6550:8;6547:17;6544:43;;;6567:18;;:::i;:::-;-1:-1:-1;;6623:1:1;6609:16;;6638:5;;6435:218;;6737:2;6727:8;6724:16;6718:3;6712:4;6709:13;6705:36;6699:2;6689:8;6686:16;6681:2;6675:4;6672:12;6668:35;6665:77;6662:159;;;-1:-1:-1;6774:19:1;;;6806:5;;6662:159;6853:34;6878:8;6872:4;6853:34;:::i;:::-;6923:6;6919:1;6915:6;6911:19;6902:7;6899:32;6896:58;;;6934:18;;:::i;:::-;6972:20;;6192:806;-1:-1:-1;;;6192:806:1:o;7003:140::-;7061:5;7090:47;7131:4;7121:8;7117:19;7111:4;7090:47;:::i;7148:168::-;7221:9;;;7252;;7269:15;;;7263:22;;7249:37;7239:71;;7290:18;;:::i;7321:356::-;7523:2;7505:21;;;7542:18;;;7535:30;7601:34;7596:2;7581:18;;7574:62;7668:2;7653:18;;7321:356::o;8033:217::-;8073:1;8099;8089:132;;8143:10;8138:3;8134:20;8131:1;8124:31;8178:4;8175:1;8168:15;8206:4;8203:1;8196:15;8089:132;-1:-1:-1;8235:9:1;;8033:217::o;10664:127::-;10725:10;10720:3;10716:20;10713:1;10706:31;10756:4;10753:1;10746:15;10780:4;10777:1;10770:15;11203:135;11242:3;11263:17;;;11260:43;;11283:18;;:::i;:::-;-1:-1:-1;11330:1:1;11319:13;;11203:135::o;13112:184::-;13182:6;13235:2;13223:9;13214:7;13210:23;13206:32;13203:52;;;13251:1;13248;13241:12;13203:52;-1:-1:-1;13274:16:1;;13112:184;-1:-1:-1;13112:184:1:o;13982:245::-;14049:6;14102:2;14090:9;14081:7;14077:23;14073:32;14070:52;;;14118:1;14115;14108:12;14070:52;14150:9;14144:16;14169:28;14191:5;14169:28;:::i;16155:125::-;16220:9;;;16241:10;;;16238:36;;;16254:18;;:::i;16687:128::-;16754:9;;;16775:11;;;16772:37;;;16789:18;;:::i;17663:251::-;17733:6;17786:2;17774:9;17765:7;17761:23;17757:32;17754:52;;;17802:1;17799;17792:12;17754:52;17834:9;17828:16;17853:31;17878:5;17853:31;:::i;17919:980::-;18181:4;18229:3;18218:9;18214:19;18260:6;18249:9;18242:25;18286:2;18324:6;18319:2;18308:9;18304:18;18297:34;18367:3;18362:2;18351:9;18347:18;18340:31;18391:6;18426;18420:13;18457:6;18449;18442:22;18495:3;18484:9;18480:19;18473:26;;18534:2;18526:6;18522:15;18508:29;;18555:1;18565:195;18579:6;18576:1;18573:13;18565:195;;;18644:13;;-1:-1:-1;;;;;18640:39:1;18628:52;;18735:15;;;;18700:12;;;;18676:1;18594:9;18565:195;;;-1:-1:-1;;;;;;;18816:32:1;;;;18811:2;18796:18;;18789:60;-1:-1:-1;;;18880:3:1;18865:19;18858:35;18777:3;17919:980;-1:-1:-1;;;17919:980:1:o

Swarm Source

ipfs://0e676a9b1a6c315b2b927aeadf8b87a374d9cc249908a974d59394d11be5bfce
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.