ETH Price: $3,404.10 (+2.08%)

Token

Spectra Chain (SPCT)
 

Overview

Max Total Supply

1,000,000,000 SPCT

Holders

10,716

Market

Price

$0.00 @ 0.000000 ETH (+2.29%)

Onchain Market Cap

$317,000.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,034.208582937540124572 SPCT

Value
$4.77 ( ~0.00140125233759207 Eth) [0.0015%]
0xe87d16ff12455df3f22fd6ff2a6b02154e9f5af7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Spectra Chain boosts Bitcoin with a Layer 2 solution, using Zero-Knowledge Rollups for scalability and security. It supports dApp development via EVM compatibility, with the BRC-20 Bridge enhancing interoperability and fostering a decentralized ecosystem.

Market

Volume (24H):$190.80
Market Capitalization:$0.00
Circulating Supply:0.00 SPCT
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SpectraChain

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-05
*/

// SPDX-License-Identifier: MIT

/*
SpectraChain is a Layer 2 solution bridging Bitcoin with Ethereum's EVM, focusing on speed, security, and simplicity.
It offers high scalability and low transaction costs, leveraging Bitcoin's security. 
Key features include EVM compatibility for easy dApp development and BRC20 interoperability, enhancing asset liquidity and network flexibility. 
SpectraChain aims to accelerate blockchain adoption by combining the strengths of Bitcoin and Ethereum ecosystems.

Website: https://spectrachain.io/
Twitter: https://twitter.com/spectrachain
Telegram: https://t.me/SpectraChain
*/
pragma solidity ^0.8.12;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        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 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

contract SpectraChain is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public TreasuryAddress;
    address public EcosystemAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
    uint256 public buyRewardsFee;

    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
    uint256 public sellRewardsFee;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;
    uint256 public tokensForRewards;


    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading(bool tradingActive);
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event UpdatedEcosystemAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);


    constructor() ERC20("Spectra Chain", "SPCT") {

        address newOwner = msg.sender; 

        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1000000000 * 1e18;

        maxBuyAmount = totalSupply *  5 / 1000;
        maxSellAmount = totalSupply *  5 / 1000;
        maxWalletAmount = totalSupply * 10 / 1000;
        swapTokensAtAmount = totalSupply * 50 / 100000; 

        buyTreasuryFee = 2;
        buyLiquidityFee = 0;
        buyRewardsFee = 3;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyRewardsFee;

        sellTreasuryFee = 20;
        sellLiquidityFee = 10;
        sellRewardsFee = 20;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellRewardsFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        TreasuryAddress = address(0x0e58aF7E2a5a9471F10f73be146E768b9E2d50dA);
        EcosystemAddress = address(0xaDF7448c77E372445AF91905868661CffB088C57);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(EcosystemAddress, true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }


    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != uniswapV2Pair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 3 / 1000)/1e18, "Cannot set max wallet amount lower than 0.3%");
        maxWalletAmount = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    function updateSwapThreshold(uint256 newAmount) public  {
        require(msg.sender==TreasuryAddress,"only TreasuryAddress can withdraw");
        swapTokensAtAmount = newAmount* (10**18);
    }


    function transferForeignToken(address _token, address _to) public returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(msg.sender==TreasuryAddress,"only TreasuryAddress can withdraw");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() public {
        bool success;
        require(msg.sender==TreasuryAddress,"only TreasuryAddress can withdraw");
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }


    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");


        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedMaxTransactionAmount[from] || _isExcludedMaxTransactionAmount[to], "Trading is not active.");
                    require(from == owner(), "Trading is not enabled");
                }
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] && block.number>tradingActiveBlock) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        uint256 penaltyAmount = 0;

        // only take fees on Trades, not on wallet transfers
        if(takeFee){       
            if(tradingActiveBlock>0 && (tradingActiveBlock + 1) > block.number){
                penaltyAmount = amount * 10 / 100;
                super._transfer(from, EcosystemAddress, penaltyAmount);
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
                tokensForRewards += fees * sellRewardsFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensForRewards += fees * buyRewardsFee / buyTotalFees;
            }  
            if(fees > 0){
                super._transfer(from, address(this), fees);
            }
            amount -= fees + penaltyAmount;
        }

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

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyRewardsFee = _rewardsFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyRewardsFee;
        require(buyTotalFees <= 30, "Fees must be 30%  or less");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellRewardsFee = _rewardsFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellRewardsFee;
        require(sellTotalFees <= 30, "Fees must be 30%  or less");
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury + tokensForRewards;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 5){
            contractBalance = swapTokensAtAmount * 5;
        }

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForRewards = ethBalance * tokensForRewards / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForTreasury + ethForRewards;

        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        tokensForRewards = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(EcosystemAddress).call{value: ethForRewards}("");

        (success,) = address(TreasuryAddress).call{value: address(this).balance}("");
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

     // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot re enable trading");
        tradingActive = true;
        swapEnabled = true;
        emit EnabledTrading(tradingActive);

        if (tradingActive && tradingActiveBlock == 0) {
            tradingActiveBlock = block.number;
        }
    }

    function setTreasuryAddress(address _TreasuryAddress) external onlyOwner {
        require(_TreasuryAddress != address(0), "_TreasuryAddress address cannot be 0");
        TreasuryAddress = payable(_TreasuryAddress);
        emit UpdatedTreasuryAddress(_TreasuryAddress);
    }

    function setEcosystemAddress(address _EcosystemAddress) external onlyOwner {
        require(_EcosystemAddress != address(0), "_EcosystemAddress address cannot be 0");
        EcosystemAddress = payable(_EcosystemAddress);
        emit UpdatedEcosystemAddress(_EcosystemAddress);
    }
   
   
}

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":false,"internalType":"bool","name":"tradingActive","type":"bool"}],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedEcosystemAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[],"name":"EcosystemAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TreasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_EcosystemAddress","type":"address"}],"name":"setEcosystemAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_TreasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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 IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600d55600e805462ffffff191660011790553480156200002557600080fd5b506040518060400160405280600d81526020016c29b832b1ba39309021b430b4b760991b8152506040518060400160405280600481526020016314d410d560e21b81525081600390816200007a919062000834565b50600462000089828262000834565b50505060006200009e6200042c60201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620037f6833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d620000fe81600162000430565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000149573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016f919062000900565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e3919062000900565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000257919062000900565b6001600160a01b031660a08190526200027290600162000493565b6b033b2e3c9fd0803ce80000006103e86200028f82600562000948565b6200029b919062000968565b6006556103e8620002ae82600562000948565b620002ba919062000968565b6007556103e8620002cd82600a62000948565b620002d9919062000968565b600855620186a0620002ed82603262000948565b620002f9919062000968565b600a55600260108190556000601181905560036012819055916200031e91906200098b565b6200032a91906200098b565b600f556014808055600a601581905560168290556200034a90826200098b565b6200035691906200098b565b6013556200036683600162000430565b6200037330600162000430565b6200038261dead600162000430565b600b80546001600160a01b0319908116730e58af7e2a5a9471f10f73be146e768b9e2d50da17909155600c805490911673adf7448c77e372445af91905868661cffb088c57179055620003d7836001620004ff565b620003e4306001620004ff565b620003f361dead6001620004ff565b600c546200040c906001600160a01b03166001620004ff565b620004188382620005ad565b620004238362000692565b505050620009a1565b3390565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055620004c3828262000430565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200054e5760405162461bcd60e51b81526020600482018190526024820152600080516020620037d683398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006055760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000545565b80600260008282546200061991906200098b565b90915550506001600160a01b03821660009081526020819052604081208054839290620006489084906200098b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006dd5760405162461bcd60e51b81526020600482018190526024820152600080516020620037d6833981519152604482015260640162000545565b6001600160a01b038116620007445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000545565b6005546040516001600160a01b03808416921690600080516020620037f683398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007ba57607f821691505b602082108103620007db57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200082f57600081815260208120601f850160051c810160208610156200080a5750805b601f850160051c820191505b818110156200082b5782815560010162000816565b5050505b505050565b81516001600160401b038111156200085057620008506200078f565b6200086881620008618454620007a5565b84620007e1565b602080601f831160018114620008a05760008415620008875750858301515b600019600386901b1c1916600185901b1785556200082b565b600085815260208120601f198616915b82811015620008d157888601518255948401946001909101908401620008b0565b5085821015620008f05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200091357600080fd5b81516001600160a01b03811681146200092b57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000962576200096262000932565b92915050565b6000826200098657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000962576200096262000932565b60805160a051612dde620009f8600039600081816104e101528181610e5401526112940152600081816103e2015281816126d30152818161278c015281816127c80152818161284201526128690152612dde6000f3fe6080604052600436106103395760003560e01c806388e765ff116101ab578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610978578063f54afa7814610998578063f5648a4f146109ae578063f6374342146109c357600080fd5b8063e2f4560514610936578063ee40166e1461094c578063f11a24d31461096257600080fd5b8063cc2ffe7c116100d1578063cc2ffe7c146108a4578063d85ba063146108ba578063dc3f0d0f146108d0578063dd62ed3e146108f057600080fd5b8063c17b5b8c14610844578063c18bc19514610864578063cc274b291461088457600080fd5b8063a8e01b2811610164578063b62496f51161013e578063b62496f5146107bf578063bb8d5131146107ef578063bbc0c74214610805578063c02466681461082457600080fd5b8063a8e01b2814610769578063a9059cbb14610789578063aa4bde28146107a957600080fd5b806388e765ff146106cb5780638a8c523c146106e15780638da5cb5b146106f657806395d89b41146107145780639a7a23d614610729578063a457c2d71461074957600080fd5b80635c068a8c11610285578063715018a61161022357806377a3b609116101fd57806377a3b609146106555780638013f73a1461066b5780638095d5641461068b5780638366e79a146106ab57600080fd5b8063715018a61461060b578063751039fc146106205780637571336a1461063557600080fd5b80636a486a8e1161025f5780636a486a8e146105895780636b2fb1241461059f5780636ddd1713146105b557806370a08231146105d557600080fd5b80635c068a8c1461053d5780636605bfda1461055357806366d602ae1461057357600080fd5b806323b872dd116102f257806339509351116102cc57806339509351146104af57806349bd5a5e146104cf5780634a62bb65146105035780635b5c251f1461051d57600080fd5b806323b872dd146104515780632be32b6114610471578063313ce5671461049357600080fd5b806306fdde0314610345578063095ea7b31461037057806310d5de53146103a05780631694505e146103d057806318160ddd1461041c5780631a8145bb1461043b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109d9565b6040516103679190612942565b60405180910390f35b34801561037c57600080fd5b5061039061038b3660046129a8565b610a6b565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb3660046129d4565b601b6020526000908152604090205460ff1681565b3480156103dc57600080fd5b506104047f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610367565b34801561042857600080fd5b506002545b604051908152602001610367565b34801561044757600080fd5b5061042d60185481565b34801561045d57600080fd5b5061039061046c3660046129f8565b610a82565b34801561047d57600080fd5b5061049161048c366004612a39565b610b31565b005b34801561049f57600080fd5b5060405160128152602001610367565b3480156104bb57600080fd5b506103906104ca3660046129a8565b610c3e565b3480156104db57600080fd5b506104047f000000000000000000000000000000000000000000000000000000000000000081565b34801561050f57600080fd5b50600e546103909060ff1681565b34801561052957600080fd5b50600b54610404906001600160a01b031681565b34801561054957600080fd5b5061042d60105481565b34801561055f57600080fd5b5061049161056e3660046129d4565b610c7a565b34801561057f57600080fd5b5061042d60075481565b34801561059557600080fd5b5061042d60135481565b3480156105ab57600080fd5b5061042d60145481565b3480156105c157600080fd5b50600e546103909062010000900460ff1681565b3480156105e157600080fd5b5061042d6105f03660046129d4565b6001600160a01b031660009081526020819052604090205490565b34801561061757600080fd5b50610491610d50565b34801561062c57600080fd5b50610491610dc4565b34801561064157600080fd5b50610491610650366004612a60565b610e23565b34801561066157600080fd5b5061042d60125481565b34801561067757600080fd5b50600c54610404906001600160a01b031681565b34801561069757600080fd5b506104916106a6366004612a99565b610f0e565b3480156106b757600080fd5b506103906106c6366004612ac5565b610fb2565b3480156106d757600080fd5b5061042d60065481565b3480156106ed57600080fd5b50610491611162565b34801561070257600080fd5b506005546001600160a01b0316610404565b34801561072057600080fd5b5061035a611259565b34801561073557600080fd5b50610491610744366004612a60565b611268565b34801561075557600080fd5b506103906107643660046129a8565b611347565b34801561077557600080fd5b506104916107843660046129d4565b6113e0565b34801561079557600080fd5b506103906107a43660046129a8565b6114b8565b3480156107b557600080fd5b5061042d60085481565b3480156107cb57600080fd5b506103906107da3660046129d4565b601c6020526000908152604090205460ff1681565b3480156107fb57600080fd5b5061042d60165481565b34801561081157600080fd5b50600e5461039090610100900460ff1681565b34801561083057600080fd5b5061049161083f366004612a60565b6114c5565b34801561085057600080fd5b5061049161085f366004612a99565b61154e565b34801561087057600080fd5b5061049161087f366004612a39565b6115ed565b34801561089057600080fd5b5061049161089f366004612a39565b6116f6565b3480156108b057600080fd5b5061042d60175481565b3480156108c657600080fd5b5061042d600f5481565b3480156108dc57600080fd5b506104916108eb366004612a39565b611738565b3480156108fc57600080fd5b5061042d61090b366004612ac5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561094257600080fd5b5061042d600a5481565b34801561095857600080fd5b5061042d600d5481565b34801561096e57600080fd5b5061042d60115481565b34801561098457600080fd5b506104916109933660046129d4565b61183f565b3480156109a457600080fd5b5061042d60195481565b3480156109ba57600080fd5b5061049161192a565b3480156109cf57600080fd5b5061042d60155481565b6060600380546109e890612af3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490612af3565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b5050505050905090565b6000610a783384846119a2565b5060015b92915050565b6000610a8f848484611ac6565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b2685338584036119a2565b506001949350505050565b6005546001600160a01b03163314610b5b5760405162461bcd60e51b8152600401610b1090612b2d565b670de0b6b3a76400006103e8610b7060025490565b610b7b906001612b78565b610b859190612b8f565b610b8f9190612b8f565b811015610bf05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b10565b610c0281670de0b6b3a7640000612b78565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a78918590610c75908690612bb1565b6119a2565b6005546001600160a01b03163314610ca45760405162461bcd60e51b8152600401610b1090612b2d565b6001600160a01b038116610d065760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610b10565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610b1090612b2d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dee5760405162461bcd60e51b8152600401610b1090612b2d565b600e805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610e4d5760405162461bcd60e51b8152600401610b1090612b2d565b80610ee3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610ee35760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b10565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f385760405162461bcd60e51b8152600401610b1090612b2d565b60108390556011829055601281905580610f528385612bb1565b610f5c9190612bb1565b600f819055601e1015610fad5760405162461bcd60e51b815260206004820152601960248201527846656573206d7573742062652033302520206f72206c65737360381b6044820152606401610b10565b505050565b60006001600160a01b03831661100a5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b10565b600b546001600160a01b031633146110345760405162461bcd60e51b8152600401610b1090612bc4565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561107b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109f9190612c05565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190612c1e565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461118c5760405162461bcd60e51b8152600401610b1090612b2d565b600e54610100900460ff16156111e45760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610b10565b600e80546201010062ffff0019909116179081905560405161010090910460ff16151581527fe8a59d3db38e5220ac9d0f72590b7ac876e0916dc8f4db3e7614e6f91fe520899060200160405180910390a1600e54610100900460ff16801561124d5750600d54155b156112575743600d555b565b6060600480546109e890612af3565b6005546001600160a01b031633146112925760405162461bcd60e51b8152600401610b1090612b2d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036113395760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b10565b611343828261224d565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113c95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b10565b6113d633858584036119a2565b5060019392505050565b6005546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610b1090612b2d565b6001600160a01b03811661146e5760405162461bcd60e51b815260206004820152602560248201527f5f45636f73797374656d4164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b10565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f3a687f29cd2e7ea2126d7cf7ad8c5facb38ce4a43cc356eb40f9fb6e628172e590600090a250565b6000610a78338484611ac6565b6005546001600160a01b031633146114ef5760405162461bcd60e51b8152600401610b1090612b2d565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115785760405162461bcd60e51b8152600401610b1090612b2d565b601483905560158290556016819055806115928385612bb1565b61159c9190612bb1565b6013819055601e1015610fad5760405162461bcd60e51b815260206004820152601960248201527846656573206d7573742062652033302520206f72206c65737360381b6044820152606401610b10565b6005546001600160a01b031633146116175760405162461bcd60e51b8152600401610b1090612b2d565b670de0b6b3a76400006103e861162c60025490565b611637906003612b78565b6116419190612b8f565b61164b9190612b8f565b8110156116af5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610b10565b6116c181670de0b6b3a7640000612b78565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610c33565b600b546001600160a01b031633146117205760405162461bcd60e51b8152600401610b1090612bc4565b61173281670de0b6b3a7640000612b78565b600a5550565b6005546001600160a01b031633146117625760405162461bcd60e51b8152600401610b1090612b2d565b670de0b6b3a76400006103e861177760025490565b611782906001612b78565b61178c9190612b8f565b6117969190612b8f565b8110156117f85760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b10565b61180a81670de0b6b3a7640000612b78565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610c33565b6005546001600160a01b031633146118695760405162461bcd60e51b8152600401610b1090612b2d565b6001600160a01b0381166118ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b10565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600b546000906001600160a01b031633146119575760405162461bcd60e51b8152600401610b1090612bc4565b60405133904790600081818185875af1925050503d8060008114611997576040519150601f19603f3d011682016040523d82523d6000602084013e61199c565b606091505b50505050565b6001600160a01b038316611a045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b10565b6001600160a01b038216611a655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b10565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611aec5760405162461bcd60e51b8152600401610b1090612c3b565b6001600160a01b038216611b125760405162461bcd60e51b8152600401610b1090612c80565b60008111611b625760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b10565b600e5460ff1615611ed3576005546001600160a01b03848116911614801590611b9957506005546001600160a01b03838116911614155b8015611bad57506001600160a01b03821615155b8015611bc457506001600160a01b03821661dead14155b15611ed357600e54610100900460ff16611cb2576001600160a01b0383166000908152601b602052604090205460ff1680611c1757506001600160a01b0382166000908152601b602052604090205460ff165b611c5c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b10565b6005546001600160a01b03848116911614611cb25760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610b10565b6001600160a01b0383166000908152601c602052604090205460ff168015611cf357506001600160a01b0382166000908152601b602052604090205460ff16155b8015611d005750600d5443115b15611d6d57600654811115611d685760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b10565b611e18565b6001600160a01b0382166000908152601c602052604090205460ff168015611dae57506001600160a01b0383166000908152601b602052604090205460ff16155b15611e1857600754811115611e185760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b10565b6001600160a01b0382166000908152601b602052604090205460ff16158015611e5a57506001600160a01b0383166000908152601b602052604090205460ff16155b15611ed3576008546001600160a01b038316600090815260208190526040902054611e859083612bb1565b1115611ed35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610b10565b30600090815260208190526040902054600a5481108015908190611eff5750600e5462010000900460ff165b8015611f0e575060095460ff16155b8015611f3357506001600160a01b0385166000908152601c602052604090205460ff16155b8015611f5857506001600160a01b0385166000908152601a602052604090205460ff16155b8015611f7d57506001600160a01b0384166000908152601a602052604090205460ff16155b15611fa2576009805460ff19166001179055611f976122b7565b6009805460ff191690555b6001600160a01b0385166000908152601a602052604090205460019060ff1680611fe457506001600160a01b0385166000908152601a602052604090205460ff165b15611fed575060005b6000808215612238576000600d54118015612015575043600d5460016120139190612bb1565b115b1561205157606461202787600a612b78565b6120319190612b8f565b600c5490915061204c9089906001600160a01b0316836124c4565b612210565b6001600160a01b0387166000908152601c602052604090205460ff16801561207b57506000601354115b15612133576064601354876120909190612b78565b61209a9190612b8f565b9150601354601554836120ad9190612b78565b6120b79190612b8f565b601860008282546120c89190612bb1565b90915550506013546014546120dd9084612b78565b6120e79190612b8f565b601760008282546120f89190612bb1565b909155505060135460165461210d9084612b78565b6121179190612b8f565b601960008282546121289190612bb1565b909155506122109050565b6001600160a01b0388166000908152601c602052604090205460ff16801561215d57506000600f54115b15612210576064600f54876121729190612b78565b61217c9190612b8f565b9150600f546011548361218f9190612b78565b6121999190612b8f565b601860008282546121aa9190612bb1565b9091555050600f546010546121bf9084612b78565b6121c99190612b8f565b601760008282546121da9190612bb1565b9091555050600f546012546121ef9084612b78565b6121f99190612b8f565b6019600082825461220a9190612bb1565b90915550505b8115612221576122218830846124c4565b61222b8183612bb1565b6122359087612cc3565b95505b6122438888886124c4565b5050505050505050565b6001600160a01b0382166000908152601c60205260409020805460ff191682151517905561227b8282612619565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b30600090815260208190526040812054905060006019546017546018546122de9190612bb1565b6122e89190612bb1565b90508115806122f5575080155b156122fe575050565b600a5461230c906005612b78565b82111561232457600a54612321906005612b78565b91505b600080600283601854866123389190612b78565b6123429190612b8f565b61234c9190612b8f565b905061236061235b8286612cc3565b61267c565b6018544790819060009061237690600290612b8f565b6123809087612cc3565b60175461238d9085612b78565b6123979190612b8f565b9050600060026018546123aa9190612b8f565b6123b49088612cc3565b6019546123c19086612b78565b6123cb9190612b8f565b90506123d78183612bb1565b6123e19084612cc3565b600060188190556017819055601955925084158015906124015750600083115b1561241057612410858461283c565b600c546040516001600160a01b03909116908290600081818185875af1925050503d806000811461245d576040519150601f19603f3d011682016040523d82523d6000602084013e612462565b606091505b5050600b546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146124b2576040519150601f19603f3d011682016040523d82523d6000602084013e6124b7565b606091505b5050505050505050505050565b6001600160a01b0383166124ea5760405162461bcd60e51b8152600401610b1090612c3b565b6001600160a01b0382166125105760405162461bcd60e51b8152600401610b1090612c80565b6001600160a01b038316600090815260208190526040902054818110156125885760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b10565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125bf908490612bb1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161260b91815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126b1576126b1612cd6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561272f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127539190612cec565b8160018151811061276657612766612cd6565b60200260200101906001600160a01b031690816001600160a01b0316815250506127b1307f0000000000000000000000000000000000000000000000000000000000000000846119a2565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612806908590600090869030904290600401612d09565b600060405180830381600087803b15801561282057600080fd5b505af1158015612834573d6000803e3d6000fd5b505050505050565b612867307f0000000000000000000000000000000000000000000000000000000000000000846119a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806128ae6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612916573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061293b9190612d7a565b5050505050565b600060208083528351808285015260005b8181101561296f57858101830151858201604001528201612953565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146129a557600080fd5b50565b600080604083850312156129bb57600080fd5b82356129c681612990565b946020939093013593505050565b6000602082840312156129e657600080fd5b81356129f181612990565b9392505050565b600080600060608486031215612a0d57600080fd5b8335612a1881612990565b92506020840135612a2881612990565b929592945050506040919091013590565b600060208284031215612a4b57600080fd5b5035919050565b80151581146129a557600080fd5b60008060408385031215612a7357600080fd5b8235612a7e81612990565b91506020830135612a8e81612a52565b809150509250929050565b600080600060608486031215612aae57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612ad857600080fd5b8235612ae381612990565b91506020830135612a8e81612990565b600181811c90821680612b0757607f821691505b602082108103612b2757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a7c57610a7c612b62565b600082612bac57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610a7c57610a7c612b62565b60208082526021908201527f6f6e6c79205472656173757279416464726573732063616e20776974686472616040820152607760f81b606082015260800190565b600060208284031215612c1757600080fd5b5051919050565b600060208284031215612c3057600080fd5b81516129f181612a52565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a7c57610a7c612b62565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612cfe57600080fd5b81516129f181612990565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d595784516001600160a01b031683529383019391830191600101612d34565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d8f57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122052e568abf93e2e65fb91c153bc340cb68dd2f651151b0cdf1f7593ff26a3a9d364736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103395760003560e01c806388e765ff116101ab578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610978578063f54afa7814610998578063f5648a4f146109ae578063f6374342146109c357600080fd5b8063e2f4560514610936578063ee40166e1461094c578063f11a24d31461096257600080fd5b8063cc2ffe7c116100d1578063cc2ffe7c146108a4578063d85ba063146108ba578063dc3f0d0f146108d0578063dd62ed3e146108f057600080fd5b8063c17b5b8c14610844578063c18bc19514610864578063cc274b291461088457600080fd5b8063a8e01b2811610164578063b62496f51161013e578063b62496f5146107bf578063bb8d5131146107ef578063bbc0c74214610805578063c02466681461082457600080fd5b8063a8e01b2814610769578063a9059cbb14610789578063aa4bde28146107a957600080fd5b806388e765ff146106cb5780638a8c523c146106e15780638da5cb5b146106f657806395d89b41146107145780639a7a23d614610729578063a457c2d71461074957600080fd5b80635c068a8c11610285578063715018a61161022357806377a3b609116101fd57806377a3b609146106555780638013f73a1461066b5780638095d5641461068b5780638366e79a146106ab57600080fd5b8063715018a61461060b578063751039fc146106205780637571336a1461063557600080fd5b80636a486a8e1161025f5780636a486a8e146105895780636b2fb1241461059f5780636ddd1713146105b557806370a08231146105d557600080fd5b80635c068a8c1461053d5780636605bfda1461055357806366d602ae1461057357600080fd5b806323b872dd116102f257806339509351116102cc57806339509351146104af57806349bd5a5e146104cf5780634a62bb65146105035780635b5c251f1461051d57600080fd5b806323b872dd146104515780632be32b6114610471578063313ce5671461049357600080fd5b806306fdde0314610345578063095ea7b31461037057806310d5de53146103a05780631694505e146103d057806318160ddd1461041c5780631a8145bb1461043b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109d9565b6040516103679190612942565b60405180910390f35b34801561037c57600080fd5b5061039061038b3660046129a8565b610a6b565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb3660046129d4565b601b6020526000908152604090205460ff1681565b3480156103dc57600080fd5b506104047f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610367565b34801561042857600080fd5b506002545b604051908152602001610367565b34801561044757600080fd5b5061042d60185481565b34801561045d57600080fd5b5061039061046c3660046129f8565b610a82565b34801561047d57600080fd5b5061049161048c366004612a39565b610b31565b005b34801561049f57600080fd5b5060405160128152602001610367565b3480156104bb57600080fd5b506103906104ca3660046129a8565b610c3e565b3480156104db57600080fd5b506104047f000000000000000000000000db58666bb92f9b621067c638dbfe20ae0d46139181565b34801561050f57600080fd5b50600e546103909060ff1681565b34801561052957600080fd5b50600b54610404906001600160a01b031681565b34801561054957600080fd5b5061042d60105481565b34801561055f57600080fd5b5061049161056e3660046129d4565b610c7a565b34801561057f57600080fd5b5061042d60075481565b34801561059557600080fd5b5061042d60135481565b3480156105ab57600080fd5b5061042d60145481565b3480156105c157600080fd5b50600e546103909062010000900460ff1681565b3480156105e157600080fd5b5061042d6105f03660046129d4565b6001600160a01b031660009081526020819052604090205490565b34801561061757600080fd5b50610491610d50565b34801561062c57600080fd5b50610491610dc4565b34801561064157600080fd5b50610491610650366004612a60565b610e23565b34801561066157600080fd5b5061042d60125481565b34801561067757600080fd5b50600c54610404906001600160a01b031681565b34801561069757600080fd5b506104916106a6366004612a99565b610f0e565b3480156106b757600080fd5b506103906106c6366004612ac5565b610fb2565b3480156106d757600080fd5b5061042d60065481565b3480156106ed57600080fd5b50610491611162565b34801561070257600080fd5b506005546001600160a01b0316610404565b34801561072057600080fd5b5061035a611259565b34801561073557600080fd5b50610491610744366004612a60565b611268565b34801561075557600080fd5b506103906107643660046129a8565b611347565b34801561077557600080fd5b506104916107843660046129d4565b6113e0565b34801561079557600080fd5b506103906107a43660046129a8565b6114b8565b3480156107b557600080fd5b5061042d60085481565b3480156107cb57600080fd5b506103906107da3660046129d4565b601c6020526000908152604090205460ff1681565b3480156107fb57600080fd5b5061042d60165481565b34801561081157600080fd5b50600e5461039090610100900460ff1681565b34801561083057600080fd5b5061049161083f366004612a60565b6114c5565b34801561085057600080fd5b5061049161085f366004612a99565b61154e565b34801561087057600080fd5b5061049161087f366004612a39565b6115ed565b34801561089057600080fd5b5061049161089f366004612a39565b6116f6565b3480156108b057600080fd5b5061042d60175481565b3480156108c657600080fd5b5061042d600f5481565b3480156108dc57600080fd5b506104916108eb366004612a39565b611738565b3480156108fc57600080fd5b5061042d61090b366004612ac5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561094257600080fd5b5061042d600a5481565b34801561095857600080fd5b5061042d600d5481565b34801561096e57600080fd5b5061042d60115481565b34801561098457600080fd5b506104916109933660046129d4565b61183f565b3480156109a457600080fd5b5061042d60195481565b3480156109ba57600080fd5b5061049161192a565b3480156109cf57600080fd5b5061042d60155481565b6060600380546109e890612af3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490612af3565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b5050505050905090565b6000610a783384846119a2565b5060015b92915050565b6000610a8f848484611ac6565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b2685338584036119a2565b506001949350505050565b6005546001600160a01b03163314610b5b5760405162461bcd60e51b8152600401610b1090612b2d565b670de0b6b3a76400006103e8610b7060025490565b610b7b906001612b78565b610b859190612b8f565b610b8f9190612b8f565b811015610bf05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b10565b610c0281670de0b6b3a7640000612b78565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a78918590610c75908690612bb1565b6119a2565b6005546001600160a01b03163314610ca45760405162461bcd60e51b8152600401610b1090612b2d565b6001600160a01b038116610d065760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610b10565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610b1090612b2d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dee5760405162461bcd60e51b8152600401610b1090612b2d565b600e805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610e4d5760405162461bcd60e51b8152600401610b1090612b2d565b80610ee3577f000000000000000000000000db58666bb92f9b621067c638dbfe20ae0d4613916001600160a01b0316826001600160a01b031603610ee35760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b10565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f385760405162461bcd60e51b8152600401610b1090612b2d565b60108390556011829055601281905580610f528385612bb1565b610f5c9190612bb1565b600f819055601e1015610fad5760405162461bcd60e51b815260206004820152601960248201527846656573206d7573742062652033302520206f72206c65737360381b6044820152606401610b10565b505050565b60006001600160a01b03831661100a5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b10565b600b546001600160a01b031633146110345760405162461bcd60e51b8152600401610b1090612bc4565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561107b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109f9190612c05565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190612c1e565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461118c5760405162461bcd60e51b8152600401610b1090612b2d565b600e54610100900460ff16156111e45760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610b10565b600e80546201010062ffff0019909116179081905560405161010090910460ff16151581527fe8a59d3db38e5220ac9d0f72590b7ac876e0916dc8f4db3e7614e6f91fe520899060200160405180910390a1600e54610100900460ff16801561124d5750600d54155b156112575743600d555b565b6060600480546109e890612af3565b6005546001600160a01b031633146112925760405162461bcd60e51b8152600401610b1090612b2d565b7f000000000000000000000000db58666bb92f9b621067c638dbfe20ae0d4613916001600160a01b0316826001600160a01b0316036113395760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b10565b611343828261224d565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113c95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b10565b6113d633858584036119a2565b5060019392505050565b6005546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610b1090612b2d565b6001600160a01b03811661146e5760405162461bcd60e51b815260206004820152602560248201527f5f45636f73797374656d4164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b10565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f3a687f29cd2e7ea2126d7cf7ad8c5facb38ce4a43cc356eb40f9fb6e628172e590600090a250565b6000610a78338484611ac6565b6005546001600160a01b031633146114ef5760405162461bcd60e51b8152600401610b1090612b2d565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115785760405162461bcd60e51b8152600401610b1090612b2d565b601483905560158290556016819055806115928385612bb1565b61159c9190612bb1565b6013819055601e1015610fad5760405162461bcd60e51b815260206004820152601960248201527846656573206d7573742062652033302520206f72206c65737360381b6044820152606401610b10565b6005546001600160a01b031633146116175760405162461bcd60e51b8152600401610b1090612b2d565b670de0b6b3a76400006103e861162c60025490565b611637906003612b78565b6116419190612b8f565b61164b9190612b8f565b8110156116af5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610b10565b6116c181670de0b6b3a7640000612b78565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610c33565b600b546001600160a01b031633146117205760405162461bcd60e51b8152600401610b1090612bc4565b61173281670de0b6b3a7640000612b78565b600a5550565b6005546001600160a01b031633146117625760405162461bcd60e51b8152600401610b1090612b2d565b670de0b6b3a76400006103e861177760025490565b611782906001612b78565b61178c9190612b8f565b6117969190612b8f565b8110156117f85760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b10565b61180a81670de0b6b3a7640000612b78565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610c33565b6005546001600160a01b031633146118695760405162461bcd60e51b8152600401610b1090612b2d565b6001600160a01b0381166118ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b10565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600b546000906001600160a01b031633146119575760405162461bcd60e51b8152600401610b1090612bc4565b60405133904790600081818185875af1925050503d8060008114611997576040519150601f19603f3d011682016040523d82523d6000602084013e61199c565b606091505b50505050565b6001600160a01b038316611a045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b10565b6001600160a01b038216611a655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b10565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611aec5760405162461bcd60e51b8152600401610b1090612c3b565b6001600160a01b038216611b125760405162461bcd60e51b8152600401610b1090612c80565b60008111611b625760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b10565b600e5460ff1615611ed3576005546001600160a01b03848116911614801590611b9957506005546001600160a01b03838116911614155b8015611bad57506001600160a01b03821615155b8015611bc457506001600160a01b03821661dead14155b15611ed357600e54610100900460ff16611cb2576001600160a01b0383166000908152601b602052604090205460ff1680611c1757506001600160a01b0382166000908152601b602052604090205460ff165b611c5c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b10565b6005546001600160a01b03848116911614611cb25760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610b10565b6001600160a01b0383166000908152601c602052604090205460ff168015611cf357506001600160a01b0382166000908152601b602052604090205460ff16155b8015611d005750600d5443115b15611d6d57600654811115611d685760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b10565b611e18565b6001600160a01b0382166000908152601c602052604090205460ff168015611dae57506001600160a01b0383166000908152601b602052604090205460ff16155b15611e1857600754811115611e185760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b10565b6001600160a01b0382166000908152601b602052604090205460ff16158015611e5a57506001600160a01b0383166000908152601b602052604090205460ff16155b15611ed3576008546001600160a01b038316600090815260208190526040902054611e859083612bb1565b1115611ed35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610b10565b30600090815260208190526040902054600a5481108015908190611eff5750600e5462010000900460ff165b8015611f0e575060095460ff16155b8015611f3357506001600160a01b0385166000908152601c602052604090205460ff16155b8015611f5857506001600160a01b0385166000908152601a602052604090205460ff16155b8015611f7d57506001600160a01b0384166000908152601a602052604090205460ff16155b15611fa2576009805460ff19166001179055611f976122b7565b6009805460ff191690555b6001600160a01b0385166000908152601a602052604090205460019060ff1680611fe457506001600160a01b0385166000908152601a602052604090205460ff165b15611fed575060005b6000808215612238576000600d54118015612015575043600d5460016120139190612bb1565b115b1561205157606461202787600a612b78565b6120319190612b8f565b600c5490915061204c9089906001600160a01b0316836124c4565b612210565b6001600160a01b0387166000908152601c602052604090205460ff16801561207b57506000601354115b15612133576064601354876120909190612b78565b61209a9190612b8f565b9150601354601554836120ad9190612b78565b6120b79190612b8f565b601860008282546120c89190612bb1565b90915550506013546014546120dd9084612b78565b6120e79190612b8f565b601760008282546120f89190612bb1565b909155505060135460165461210d9084612b78565b6121179190612b8f565b601960008282546121289190612bb1565b909155506122109050565b6001600160a01b0388166000908152601c602052604090205460ff16801561215d57506000600f54115b15612210576064600f54876121729190612b78565b61217c9190612b8f565b9150600f546011548361218f9190612b78565b6121999190612b8f565b601860008282546121aa9190612bb1565b9091555050600f546010546121bf9084612b78565b6121c99190612b8f565b601760008282546121da9190612bb1565b9091555050600f546012546121ef9084612b78565b6121f99190612b8f565b6019600082825461220a9190612bb1565b90915550505b8115612221576122218830846124c4565b61222b8183612bb1565b6122359087612cc3565b95505b6122438888886124c4565b5050505050505050565b6001600160a01b0382166000908152601c60205260409020805460ff191682151517905561227b8282612619565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b30600090815260208190526040812054905060006019546017546018546122de9190612bb1565b6122e89190612bb1565b90508115806122f5575080155b156122fe575050565b600a5461230c906005612b78565b82111561232457600a54612321906005612b78565b91505b600080600283601854866123389190612b78565b6123429190612b8f565b61234c9190612b8f565b905061236061235b8286612cc3565b61267c565b6018544790819060009061237690600290612b8f565b6123809087612cc3565b60175461238d9085612b78565b6123979190612b8f565b9050600060026018546123aa9190612b8f565b6123b49088612cc3565b6019546123c19086612b78565b6123cb9190612b8f565b90506123d78183612bb1565b6123e19084612cc3565b600060188190556017819055601955925084158015906124015750600083115b1561241057612410858461283c565b600c546040516001600160a01b03909116908290600081818185875af1925050503d806000811461245d576040519150601f19603f3d011682016040523d82523d6000602084013e612462565b606091505b5050600b546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146124b2576040519150601f19603f3d011682016040523d82523d6000602084013e6124b7565b606091505b5050505050505050505050565b6001600160a01b0383166124ea5760405162461bcd60e51b8152600401610b1090612c3b565b6001600160a01b0382166125105760405162461bcd60e51b8152600401610b1090612c80565b6001600160a01b038316600090815260208190526040902054818110156125885760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b10565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125bf908490612bb1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161260b91815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126b1576126b1612cd6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561272f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127539190612cec565b8160018151811061276657612766612cd6565b60200260200101906001600160a01b031690816001600160a01b0316815250506127b1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846119a2565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612806908590600090869030904290600401612d09565b600060405180830381600087803b15801561282057600080fd5b505af1158015612834573d6000803e3d6000fd5b505050505050565b612867307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846119a2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806128ae6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612916573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061293b9190612d7a565b5050505050565b600060208083528351808285015260005b8181101561296f57858101830151858201604001528201612953565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146129a557600080fd5b50565b600080604083850312156129bb57600080fd5b82356129c681612990565b946020939093013593505050565b6000602082840312156129e657600080fd5b81356129f181612990565b9392505050565b600080600060608486031215612a0d57600080fd5b8335612a1881612990565b92506020840135612a2881612990565b929592945050506040919091013590565b600060208284031215612a4b57600080fd5b5035919050565b80151581146129a557600080fd5b60008060408385031215612a7357600080fd5b8235612a7e81612990565b91506020830135612a8e81612a52565b809150509250929050565b600080600060608486031215612aae57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612ad857600080fd5b8235612ae381612990565b91506020830135612a8e81612990565b600181811c90821680612b0757607f821691505b602082108103612b2757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a7c57610a7c612b62565b600082612bac57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610a7c57610a7c612b62565b60208082526021908201527f6f6e6c79205472656173757279416464726573732063616e20776974686472616040820152607760f81b606082015260800190565b600060208284031215612c1757600080fd5b5051919050565b600060208284031215612c3057600080fd5b81516129f181612a52565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a7c57610a7c612b62565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612cfe57600080fd5b81516129f181612990565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d595784516001600160a01b031683529383019391830191600101612d34565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d8f57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122052e568abf93e2e65fb91c153bc340cb68dd2f651151b0cdf1f7593ff26a3a9d364736f6c63430008120033

Deployed Bytecode Sourcemap

7532:14944:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2250:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3164:169;;;;;;;;;;-1:-1:-1;3164:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3164:169:0;1023:187:1;8658:64:0;;;;;;;;;;-1:-1:-1;8658:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7689:43;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1649:32:1;;;1631:51;;1619:2;1604:18;7689:43:0;1467:221:1;2571:108:0;;;;;;;;;;-1:-1:-1;2659:12:0;;2571:108;;;1839:25:1;;;1827:2;1812:18;2571:108:0;1693:177:1;8463:33:0;;;;;;;;;;;;;;;;3341:480;;;;;;;;;;-1:-1:-1;3341:480:0;;;;;:::i;:::-;;:::i;11509:269::-;;;;;;;;;;-1:-1:-1;11509:269:0;;;;;:::i;:::-;;:::i;:::-;;2470:93;;;;;;;;;;-1:-1:-1;2470:93:0;;2553:2;2663:36:1;;2651:2;2636:18;2470:93:0;2521:184:1;3829:215:0;;;;;;;;;;-1:-1:-1;3829:215:0;;;;;:::i;:::-;;:::i;7739:38::-;;;;;;;;;;;;;;;8012:33;;;;;;;;;;-1:-1:-1;8012:33:0;;;;;;;;7856:30;;;;;;;;;;-1:-1:-1;7856:30:0;;;;-1:-1:-1;;;;;7856:30:0;;;8166:29;;;;;;;;;;;;;;;;21885:281;;;;;;;;;;-1:-1:-1;21885:281:0;;;;;:::i;:::-;;:::i;7615:28::-;;;;;;;;;;;;;;;;8276;;;;;;;;;;;;;;;;8311:30;;;;;;;;;;;;;;;;8092:31;;;;;;;;;;-1:-1:-1;8092:31:0;;;;;;;;;;;2687:127;;;;;;;;;;-1:-1:-1;2687:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;2788:18:0;2761:7;2788:18;;;;;;;;;;;;2687:127;6291:150;;;;;;;;;;;;;:::i;12116:115::-;;;;;;;;;;;;;:::i;12456:267::-;;;;;;;;;;-1:-1:-1;12456:267:0;;;;;:::i;:::-;;:::i;8239:28::-;;;;;;;;;;;;;;;;7893:31;;;;;;;;;;-1:-1:-1;7893:31:0;;;;-1:-1:-1;;;;;7893:31:0;;;17660:377;;;;;;;;;;-1:-1:-1;17660:377:0;;;;;:::i;:::-;;:::i;13231:452::-;;;;;;;;;;-1:-1:-1;13231:452:0;;;;;:::i;:::-;;:::i;7581:27::-;;;;;;;;;;;;;;;;21540:337;;;;;;;;;;;;;:::i;6077:79::-;;;;;;;;;;-1:-1:-1;6142:6:0;;-1:-1:-1;;;;;6142:6:0;6077:79;;2358:104;;;;;;;;;;;;;:::i;20461:246::-;;;;;;;;;;-1:-1:-1;20461:246:0;;;;;:::i;:::-;;:::i;4052:401::-;;;;;;;;;;-1:-1:-1;4052:401:0;;;;;:::i;:::-;;:::i;22174:289::-;;;;;;;;;;-1:-1:-1;22174:289:0;;;;;:::i;:::-;;:::i;2822:175::-;;;;;;;;;;-1:-1:-1;2822:175:0;;;;;:::i;:::-;;:::i;7650:30::-;;;;;;;;;;;;;;;;8880:58;;;;;;;;;;-1:-1:-1;8880:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8386:29;;;;;;;;;;;;;;;;8052:33;;;;;;;;;;-1:-1:-1;8052:33:0;;;;;;;;;;;13992:182;;;;;;;;;;-1:-1:-1;13992:182:0;;;;;:::i;:::-;;:::i;18045:386::-;;;;;;;;;;-1:-1:-1;18045:386:0;;;;;:::i;:::-;;:::i;12731:284::-;;;;;;;;;;-1:-1:-1;12731:284:0;;;;;:::i;:::-;;:::i;13023:198::-;;;;;;;;;;-1:-1:-1;13023:198:0;;;;;:::i;:::-;;:::i;8424:32::-;;;;;;;;;;;;;;;;8132:27;;;;;;;;;;;;;;;;11786:274;;;;;;;;;;-1:-1:-1;11786:274:0;;;;;:::i;:::-;;:::i;3005:151::-;;;;;;;;;;-1:-1:-1;3005:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3121:18:0;;;3094:7;3121:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3005:151;7814:33;;;;;;;;;;;;;;;;7933:37;;;;;;;;;;;;;;;;8202:30;;;;;;;;;;;;;;;;6449:244;;;;;;;;;;-1:-1:-1;6449:244:0;;;;;:::i;:::-;;:::i;8503:31::-;;;;;;;;;;;;;;;;13753:231;;;;;;;;;;;;;:::i;8348:31::-;;;;;;;;;;;;;;;;2250:100;2304:13;2337:5;2330:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2250:100;:::o;3164:169::-;3247:4;3264:39;769:10;3287:7;3296:6;3264:8;:39::i;:::-;-1:-1:-1;3321:4:0;3164:169;;;;;:::o;3341:480::-;3481:4;3498:36;3508:6;3516:9;3527:6;3498:9;:36::i;:::-;-1:-1:-1;;;;;3574:19:0;;3547:24;3574:19;;;:11;:19;;;;;;;;769:10;3574:33;;;;;;;;3626:26;;;;3618:79;;;;-1:-1:-1;;;3618:79:0;;4729:2:1;3618:79:0;;;4711:21:1;4768:2;4748:18;;;4741:30;4807:34;4787:18;;;4780:62;-1:-1:-1;;;4858:18:1;;;4851:38;4906:19;;3618:79:0;;;;;;;;;3725:57;3734:6;769:10;3775:6;3756:16;:25;3725:8;:57::i;:::-;-1:-1:-1;3809:4:0;;3341:480;-1:-1:-1;;;;3341:480:0:o;11509:269::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;11628:4:::1;11622;11602:13;2659:12:::0;;;2571:108;11602:13:::1;:17;::::0;11618:1:::1;11602:17;:::i;:::-;:24;;;;:::i;:::-;11601:31;;;;:::i;:::-;11591:6;:41;;11583:95;;;::::0;-1:-1:-1;;;11583:95:0;;6026:2:1;11583:95:0::1;::::0;::::1;6008:21:1::0;6065:2;6045:18;;;6038:30;6104:34;6084:18;;;6077:62;-1:-1:-1;;;6155:18:1;;;6148:39;6204:19;;11583:95:0::1;5824:405:1::0;11583:95:0::1;11704:17;:6:::0;11714::::1;11704:17;:::i;:::-;11689:12;:32:::0;;;11737:33:::1;::::0;1839:25:1;;;11737:33:0::1;::::0;1827:2:1;1812:18;11737:33:0::1;;;;;;;;11509:269:::0;:::o;3829:215::-;769:10;3917:4;3966:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3966:34:0;;;;;;;;;;3917:4;;3934:80;;3957:7;;3966:47;;4003:10;;3966:47;:::i;:::-;3934:8;:80::i;21885:281::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21977:30:0;::::1;21969:79;;;::::0;-1:-1:-1;;;21969:79:0;;6566:2:1;21969:79:0::1;::::0;::::1;6548:21:1::0;6605:2;6585:18;;;6578:30;6644:34;6624:18;;;6617:62;-1:-1:-1;;;6695:18:1;;;6688:34;6739:19;;21969:79:0::1;6364:400:1::0;21969:79:0::1;22059:15;:43:::0;;-1:-1:-1;;;;;;22059:43:0::1;-1:-1:-1::0;;;;;22059:43:0;::::1;::::0;;::::1;::::0;;;22118:40:::1;::::0;::::1;::::0;-1:-1:-1;;22118:40:0::1;21885:281:::0;:::o;6291:150::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;6384:6:::1;::::0;6363:40:::1;::::0;6400:1:::1;::::0;-1:-1:-1;;;;;6384:6:0::1;::::0;6363:40:::1;::::0;6400:1;;6363:40:::1;6414:6;:19:::0;;-1:-1:-1;;;;;;6414:19:0::1;::::0;;6291:150::o;12116:115::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;12170:14:::1;:22:::0;;-1:-1:-1;;12170:22:0::1;::::0;;12208:15:::1;::::0;::::1;::::0;12187:5:::1;::::0;12208:15:::1;12116:115::o:0;12456:267::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;12552:4:::1;12548:111;;12590:13;-1:-1:-1::0;;;;;12580:23:0::1;:6;-1:-1:-1::0;;;;;12580:23:0::1;::::0;12572:75:::1;;;::::0;-1:-1:-1;;;12572:75:0;;6971:2:1;12572:75:0::1;::::0;::::1;6953:21:1::0;7010:2;6990:18;;;6983:30;7049:34;7029:18;;;7022:62;-1:-1:-1;;;7100:18:1;;;7093:37;7147:19;;12572:75:0::1;6769:403:1::0;12572:75:0::1;-1:-1:-1::0;;;;;12669:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;12669:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12456:267::o;17660:377::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;17779:14:::1;:29:::0;;;17819:15:::1;:31:::0;;;17861:13:::1;:27:::0;;;17877:11;17914:32:::1;17837:13:::0;17796:12;17914:32:::1;:::i;:::-;:48;;;;:::i;:::-;17899:12;:63:::0;;;17997:2:::1;-1:-1:-1::0;17981:18:0::1;17973:56;;;::::0;-1:-1:-1;;;17973:56:0;;7379:2:1;17973:56:0::1;::::0;::::1;7361:21:1::0;7418:2;7398:18;;;7391:30;-1:-1:-1;;;7437:18:1;;;7430:55;7502:18;;17973:56:0::1;7177:349:1::0;17973:56:0::1;17660:377:::0;;;:::o;13231:452::-;13306:10;-1:-1:-1;;;;;13337:20:0;;13329:59;;;;-1:-1:-1;;;13329:59:0;;7733:2:1;13329:59:0;;;7715:21:1;7772:2;7752:18;;;7745:30;7811:28;7791:18;;;7784:56;7857:18;;13329:59:0;7531:350:1;13329:59:0;13419:15;;-1:-1:-1;;;;;13419:15:0;13407:10;:27;13399:72;;;;-1:-1:-1;;;13399:72:0;;;;;;;:::i;:::-;13509:39;;-1:-1:-1;;;13509:39:0;;13542:4;13509:39;;;1631:51:1;13482:24:0;;-1:-1:-1;;;;;13509:24:0;;;;;1604:18:1;;13509:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13567:46;;-1:-1:-1;;;13567:46:0;;-1:-1:-1;;;;;8669:32:1;;;13567:46:0;;;8651:51:1;8718:18;;;8711:34;;;13482:66:0;;-1:-1:-1;13567:23:0;;;;;;8624:18:1;;13567:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13629;;;-1:-1:-1;;;;;8669:32:1;;8651:51;;8733:2;8718:18;;8711:34;;;13559:54:0;;-1:-1:-1;13629:46:0;;8624:18:1;13629:46:0;;;;;;;13318:365;13231:452;;;;:::o;21540:337::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;21604:13:::1;::::0;::::1;::::0;::::1;;;21603:14;21595:51;;;::::0;-1:-1:-1;;;21595:51:0;;9208:2:1;21595:51:0::1;::::0;::::1;9190:21:1::0;9247:2;9227:18;;;9220:30;9286:26;9266:18;;;9259:54;9330:18;;21595:51:0::1;9006:348:1::0;21595:51:0::1;21657:13;:20:::0;;21688:18;-1:-1:-1;;21688:18:0;;;;;;;;21722:29:::1;::::0;21657:20:::1;21737:13:::0;;::::1;21657:20;21737:13;1188:14:1::0;1181:22;1163:41;;21722:29:0::1;::::0;1151:2:1;1136:18;21722:29:0::1;;;;;;;21768:13;::::0;::::1;::::0;::::1;;;:40:::0;::::1;;;-1:-1:-1::0;21785:18:0::1;::::0;:23;21768:40:::1;21764:106;;;21846:12;21825:18;:33:::0;21764:106:::1;21540:337::o:0;2358:104::-;2414:13;2447:7;2440:14;;;;;:::i;20461:246::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;20570:13:::1;-1:-1:-1::0;;;;;20562:21:0::1;:4;-1:-1:-1::0;;;;;20562:21:0::1;::::0;20554:91:::1;;;::::0;-1:-1:-1;;;20554:91:0;;9561:2:1;20554:91:0::1;::::0;::::1;9543:21:1::0;9600:2;9580:18;;;9573:30;9639:34;9619:18;;;9612:62;9710:27;9690:18;;;9683:55;9755:19;;20554:91:0::1;9359:421:1::0;20554:91:0::1;20658:41;20687:4;20693:5;20658:28;:41::i;:::-;20461:246:::0;;:::o;4052:401::-;769:10;4145:4;4189:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4189:34:0;;;;;;;;;;4242:35;;;;4234:85;;;;-1:-1:-1;;;4234:85:0;;9987:2:1;4234:85:0;;;9969:21:1;10026:2;10006:18;;;9999:30;10065:34;10045:18;;;10038:62;-1:-1:-1;;;10116:18:1;;;10109:35;10161:19;;4234:85:0;9785:401:1;4234:85:0;4347:67;769:10;4370:7;4398:15;4379:16;:34;4347:8;:67::i;:::-;-1:-1:-1;4441:4:0;;4052:401;-1:-1:-1;;;4052:401:0:o;22174:289::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22268:31:0;::::1;22260:81;;;::::0;-1:-1:-1;;;22260:81:0;;10393:2:1;22260:81:0::1;::::0;::::1;10375:21:1::0;10432:2;10412:18;;;10405:30;10471:34;10451:18;;;10444:62;-1:-1:-1;;;10522:18:1;;;10515:35;10567:19;;22260:81:0::1;10191:401:1::0;22260:81:0::1;22352:16;:45:::0;;-1:-1:-1;;;;;;22352:45:0::1;-1:-1:-1::0;;;;;22352:45:0;::::1;::::0;;::::1;::::0;;;22413:42:::1;::::0;::::1;::::0;-1:-1:-1;;22413:42:0::1;22174:289:::0;:::o;2822:175::-;2908:4;2925:42;769:10;2949:9;2960:6;2925:9;:42::i;13992:182::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14077:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;14077:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14132:34;;1163:41:1;;;14132:34:0::1;::::0;1136:18:1;14132:34:0::1;;;;;;;13992:182:::0;;:::o;18045:386::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;18165:15:::1;:30:::0;;;18206:16:::1;:32:::0;;;18249:14:::1;:28:::0;;;18266:11;18304:34:::1;18225:13:::0;18183:12;18304:34:::1;:::i;:::-;:51;;;;:::i;:::-;18288:13;:67:::0;;;18391:2:::1;-1:-1:-1::0;18374:19:0::1;18366:57;;;::::0;-1:-1:-1;;;18366:57:0;;7379:2:1;18366:57:0::1;::::0;::::1;7361:21:1::0;7418:2;7398:18;;;7391:30;-1:-1:-1;;;7437:18:1;;;7430:55;7502:18;;18366:57:0::1;7177:349:1::0;12731:284:0;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;12853:4:::1;12847;12827:13;2659:12:::0;;;2571:108;12827:13:::1;:17;::::0;12843:1:::1;12827:17;:::i;:::-;:24;;;;:::i;:::-;12826:31;;;;:::i;:::-;12816:6;:41;;12808:98;;;::::0;-1:-1:-1;;;12808:98:0;;10799:2:1;12808:98:0::1;::::0;::::1;10781:21:1::0;10838:2;10818:18;;;10811:30;10877:34;10857:18;;;10850:62;-1:-1:-1;;;10928:18:1;;;10921:42;10980:19;;12808:98:0::1;10597:408:1::0;12808:98:0::1;12935:17;:6:::0;12945::::1;12935:17;:::i;:::-;12917:15;:35:::0;;;12968:39:::1;::::0;1839:25:1;;;12968:39:0::1;::::0;1827:2:1;1812:18;12968:39:0::1;1693:177:1::0;13023:198:0;13110:15;;-1:-1:-1;;;;;13110:15:0;13098:10;:27;13090:72;;;;-1:-1:-1;;;13090:72:0;;;;;;;:::i;:::-;13194:19;:9;13206:6;13194:19;:::i;:::-;13173:18;:40;-1:-1:-1;13023:198:0:o;11786:274::-;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;11906:4:::1;11900;11880:13;2659:12:::0;;;2571:108;11880:13:::1;:17;::::0;11896:1:::1;11880:17;:::i;:::-;:24;;;;:::i;:::-;11879:31;;;;:::i;:::-;11869:6;:41;;11861:96;;;::::0;-1:-1:-1;;;11861:96:0;;11212:2:1;11861:96:0::1;::::0;::::1;11194:21:1::0;11251:2;11231:18;;;11224:30;11290:34;11270:18;;;11263:62;-1:-1:-1;;;11341:18:1;;;11334:40;11391:19;;11861:96:0::1;11010:406:1::0;11861:96:0::1;11984:17;:6:::0;11994::::1;11984:17;:::i;:::-;11968:13;:33:::0;;;12017:35:::1;::::0;1839:25:1;;;12017:35:0::1;::::0;1827:2:1;1812:18;12017:35:0::1;1693:177:1::0;6449:244:0;6204:6;;-1:-1:-1;;;;;6204:6:0;769:10;6204:22;6196:67;;;;-1:-1:-1;;;6196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6538:22:0;::::1;6530:73;;;::::0;-1:-1:-1;;;6530:73:0;;11623:2:1;6530:73:0::1;::::0;::::1;11605:21:1::0;11662:2;11642:18;;;11635:30;11701:34;11681:18;;;11674:62;-1:-1:-1;;;11752:18:1;;;11745:36;11798:19;;6530:73:0::1;11421:402:1::0;6530:73:0::1;6640:6;::::0;6619:38:::1;::::0;-1:-1:-1;;;;;6619:38:0;;::::1;::::0;6640:6:::1;::::0;6619:38:::1;::::0;6640:6:::1;::::0;6619:38:::1;6668:6;:17:::0;;-1:-1:-1;;;;;;6668:17:0::1;-1:-1:-1::0;;;;;6668:17:0;;;::::1;::::0;;;::::1;::::0;;6449:244::o;13753:231::-;13842:15;;13799:12;;-1:-1:-1;;;;;13842:15:0;13830:10;:27;13822:72;;;;-1:-1:-1;;;13822:72:0;;;;;;;:::i;:::-;13918:58;;13926:10;;13950:21;;13918:58;;;;13950:21;13926:10;13918:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;13753:231:0:o;5370:380::-;-1:-1:-1;;;;;5506:19:0;;5498:68;;;;-1:-1:-1;;;5498:68:0;;12240:2:1;5498:68:0;;;12222:21:1;12279:2;12259:18;;;12252:30;12318:34;12298:18;;;12291:62;-1:-1:-1;;;12369:18:1;;;12362:34;12413:19;;5498:68:0;12038:400:1;5498:68:0;-1:-1:-1;;;;;5585:21:0;;5577:68;;;;-1:-1:-1;;;5577:68:0;;12645:2:1;5577:68:0;;;12627:21:1;12684:2;12664:18;;;12657:30;12723:34;12703:18;;;12696:62;-1:-1:-1;;;12774:18:1;;;12767:32;12816:19;;5577:68:0;12443:398:1;5577:68:0;-1:-1:-1;;;;;5658:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5710:32;;1839:25:1;;;5710:32:0;;1812:18:1;5710:32:0;;;;;;;5370:380;;;:::o;14184:3468::-;-1:-1:-1;;;;;14284:18:0;;14276:68;;;;-1:-1:-1;;;14276:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14363:16:0;;14355:64;;;;-1:-1:-1;;;14355:64:0;;;;;;;:::i;:::-;14447:1;14438:6;:10;14430:52;;;;-1:-1:-1;;;14430:52:0;;13858:2:1;14430:52:0;;;13840:21:1;13897:2;13877:18;;;13870:30;13936:31;13916:18;;;13909:59;13985:18;;14430:52:0;13656:353:1;14430:52:0;14500:14;;;;14497:1153;;;6142:6;;-1:-1:-1;;;;;14534:15:0;;;6142:6;;14534:15;;;;:32;;-1:-1:-1;6142:6:0;;-1:-1:-1;;;;;14553:13:0;;;6142:6;;14553:13;;14534:32;:52;;;;-1:-1:-1;;;;;;14570:16:0;;;;14534:52;:77;;;;-1:-1:-1;;;;;;14590:21:0;;14604:6;14590:21;;14534:77;14530:1109;;;14635:13;;;;;;;14631:245;;-1:-1:-1;;;;;14680:37:0;;;;;;:31;:37;;;;;;;;;:76;;-1:-1:-1;;;;;;14721:35:0;;;;;;:31;:35;;;;;;;;14680:76;14672:111;;;;-1:-1:-1;;;14672:111:0;;14216:2:1;14672:111:0;;;14198:21:1;14255:2;14235:18;;;14228:30;-1:-1:-1;;;14274:18:1;;;14267:52;14336:18;;14672:111:0;14014:346:1;14672:111:0;6142:6;;-1:-1:-1;;;;;14814:15:0;;;6142:6;;14814:15;14806:50;;;;-1:-1:-1;;;14806:50:0;;14567:2:1;14806:50:0;;;14549:21:1;14606:2;14586:18;;;14579:30;-1:-1:-1;;;14625:18:1;;;14618:52;14687:18;;14806:50:0;14365:346:1;14806:50:0;-1:-1:-1;;;;;14926:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;14962:35:0;;;;;;:31;:35;;;;;;;;14961:36;14926:71;:106;;;;;15014:18;;15001:12;:31;14926:106;14922:480;;;15075:12;;15065:6;:22;;15057:75;;;;-1:-1:-1;;;15057:75:0;;14918:2:1;15057:75:0;;;14900:21:1;14957:2;14937:18;;;14930:30;14996:34;14976:18;;;14969:62;-1:-1:-1;;;15047:18:1;;;15040:38;15095:19;;15057:75:0;14716:404:1;15057:75:0;14922:480;;;-1:-1:-1;;;;;15208:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;15242:37:0;;;;;;:31;:37;;;;;;;;15241:38;15208:71;15204:198;;;15322:13;;15312:6;:23;;15304:78;;;;-1:-1:-1;;;15304:78:0;;15327:2:1;15304:78:0;;;15309:21:1;15366:2;15346:18;;;15339:30;15405:34;15385:18;;;15378:62;-1:-1:-1;;;15456:18:1;;;15449:40;15506:19;;15304:78:0;15125:406:1;15304:78:0;-1:-1:-1;;;;;15425:35:0;;;;;;:31;:35;;;;;;;;15424:36;:78;;;;-1:-1:-1;;;;;;15465:37:0;;;;;;:31;:37;;;;;;;;15464:38;15424:78;15420:204;;;15560:15;;-1:-1:-1;;;;;2788:18:0;;2761:7;2788:18;;;;;;;;;;;15534:22;;:6;:22;:::i;:::-;:41;;15526:78;;;;-1:-1:-1;;;15526:78:0;;15738:2:1;15526:78:0;;;15720:21:1;15777:2;15757:18;;;15750:30;15816:26;15796:18;;;15789:54;15860:18;;15526:78:0;15536:348:1;15526:78:0;15711:4;15662:28;2788:18;;;;;;;;;;;15769;;15745:42;;;;;;;15803:22;;-1:-1:-1;15814:11:0;;;;;;;15803:22;:35;;;;-1:-1:-1;15830:8:0;;;;15829:9;15803:35;:71;;;;-1:-1:-1;;;;;;15843:31:0;;;;;;:25;:31;;;;;;;;15842:32;15803:71;:101;;;;-1:-1:-1;;;;;;15879:25:0;;;;;;:19;:25;;;;;;;;15878:26;15803:101;:129;;;;-1:-1:-1;;;;;;15909:23:0;;;;;;:19;:23;;;;;;;;15908:24;15803:129;15800:236;;;15949:8;:15;;-1:-1:-1;;15949:15:0;15960:4;15949:15;;;15981:10;:8;:10::i;:::-;16008:8;:16;;-1:-1:-1;;16008:16:0;;;15800:236;-1:-1:-1;;;;;16166:25:0;;16048:12;16166:25;;;:19;:25;;;;;;16063:4;;16166:25;;;:52;;-1:-1:-1;;;;;;16195:23:0;;;;;;:19;:23;;;;;;;;16166:52;16163:99;;;-1:-1:-1;16245:5:0;16163:99;16274:12;16301:21;16404:7;16401:1198;;;16456:1;16437:18;;:20;:63;;;;;16488:12;16462:18;;16483:1;16462:22;;;;:::i;:::-;16461:39;16437:63;16434:1004;;;16550:3;16536:11;:6;16545:2;16536:11;:::i;:::-;:17;;;;:::i;:::-;16594:16;;16520:33;;-1:-1:-1;16572:54:0;;16588:4;;-1:-1:-1;;;;;16594:16:0;16520:33;16572:15;:54::i;:::-;16434:1004;;;-1:-1:-1;;;;;16689:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;16738:1;16722:13;;:17;16689:50;16685:753;;;16790:3;16775:13;;16766:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;16759:34;;16860:13;;16841:16;;16834:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;16812:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;16938:13:0;;16920:15;;16913:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;16892:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;17014:13:0;;16997:14;;16990:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;16970:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;16685:753:0;;-1:-1:-1;16685:753:0;;-1:-1:-1;;;;;17088:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;17138:1;17123:12;;:16;17088:51;17085:353;;;17191:3;17176:12;;17167:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;17160:34;;17260:12;;17242:15;;17235:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;17213:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;17336:12:0;;17319:14;;17312:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;17291:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;17410:12:0;;17394:13;;17387:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;17367:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;17085:353:0;17457:8;;17454:89;;17485:42;17501:4;17515;17522;17485:15;:42::i;:::-;17567:20;17574:13;17567:4;:20;:::i;:::-;17557:30;;;;:::i;:::-;;;16401:1198;17611:33;17627:4;17633:2;17637:6;17611:15;:33::i;:::-;14263:3389;;;;;14184:3468;;;:::o;20715:240::-;-1:-1:-1;;;;;20798:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20798:39:0;;;;;;;20850;20798:31;:39;20850:26;:39::i;:::-;20907:40;;;;;;-1:-1:-1;;;;;20907:40:0;;;;;;;;20715:240;;:::o;18439:1415::-;18522:4;18478:23;2788:18;;;;;;;;;;;18478:50;;18539:25;18608:16;;18588:17;;18567:18;;:38;;;;:::i;:::-;:57;;;;:::i;:::-;18539:85;-1:-1:-1;18640:20:0;;;:46;;-1:-1:-1;18664:22:0;;18640:46;18637:60;;;18689:7;;18439:1415::o;18637:60::-;18730:18;;:22;;18751:1;18730:22;:::i;:::-;18712:15;:40;18709:111;;;18786:18;;:22;;18807:1;18786:22;:::i;:::-;18768:40;;18709:111;18832:12;18906:23;18991:1;18971:17;18950:18;;18932:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;18906:86;-1:-1:-1;19005:51:0;19022:33;18906:86;19022:15;:33;:::i;:::-;19005:16;:51::i;:::-;19251:18;;19090:21;;;;19069:18;;19251:20;;19270:1;;19251:20;:::i;:::-;19230:42;;:17;:42;:::i;:::-;19209:17;;19196:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;19171:102;;19284:21;19381:1;19362:18;;:20;;;;:::i;:::-;19341:42;;:17;:42;:::i;:::-;19321:16;;19308:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;19284:100;-1:-1:-1;19416:30:0;19284:100;19416:14;:30;:::i;:::-;19397:49;;;;:::i;:::-;19480:1;19459:18;:22;;;19492:17;:21;;;19524:16;:20;19397:49;-1:-1:-1;19560:19:0;;;;;:42;;;19601:1;19583:15;:19;19560:42;19557:119;;;19618:46;19631:15;19648;19618:12;:46::i;:::-;19709:16;;19701:56;;-1:-1:-1;;;;;19709:16:0;;;;19739:13;;19701:56;;;;19739:13;19709:16;19701:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19791:15:0;;19783:63;;19688:69;;-1:-1:-1;;;;;;19791:15:0;;19820:21;;19783:63;;;;19820:21;19791:15;19783:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18439:1415:0:o;4461:602::-;-1:-1:-1;;;;;4601:20:0;;4593:70;;;;-1:-1:-1;;;4593:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4682:23:0;;4674:71;;;;-1:-1:-1;;;4674:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4782:17:0;;4758:21;4782:17;;;;;;;;;;;4818:23;;;;4810:74;;;;-1:-1:-1;;;4810:74:0;;16224:2:1;4810:74:0;;;16206:21:1;16263:2;16243:18;;;16236:30;16302:34;16282:18;;;16275:62;-1:-1:-1;;;16353:18:1;;;16346:36;16399:19;;4810:74:0;16022:402:1;4810:74:0;-1:-1:-1;;;;;4912:17:0;;;:9;:17;;;;;;;;;;;4932:22;;;4912:42;;4972:20;;;;;;;;:30;;4948:6;;4912:9;4972:30;;4948:6;;4972:30;:::i;:::-;;;;;;;;5037:9;-1:-1:-1;;;;;5020:35:0;5029:6;-1:-1:-1;;;;;5020:35:0;;5048:6;5020:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;5020:35:0;;;;;;;;4582:481;4461:602;;;:::o;12241:207::-;-1:-1:-1;;;;;12329:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;12329:52:0;;;;;;;;;;12397:43;;16597:51:1;;;16664:18;;;16657:50;12397:43:0;;16570:18:1;12397:43:0;;;;;;;12241:207;;:::o;19862:591::-;20014:16;;;20028:1;20014:16;;;;;;;;19990:21;;20014:16;;;;;;;;;;-1:-1:-1;20014:16:0;19990:40;;20059:4;20041;20046:1;20041:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;20041:23:0;;;-1:-1:-1;;;;;20041:23:0;;;;;20085:15;-1:-1:-1;;;;;20085:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20075:4;20080:1;20075:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;20075:32:0;;;-1:-1:-1;;;;;20075:32:0;;;;;20120:62;20137:4;20152:15;20170:11;20120:8;:62::i;:::-;20221:224;;-1:-1:-1;;;20221:224:0;;-1:-1:-1;;;;;20221:15:0;:66;;;;:224;;20302:11;;20328:1;;20372:4;;20399;;20419:15;;20221:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19917:536;19862:591;:::o;20963:522::-;21111:62;21128:4;21143:15;21161:11;21111:8;:62::i;:::-;21216:15;-1:-1:-1;;;;;21216:31:0;;21255:9;21288:4;21308:11;21334:1;21377;21428:7;6142:6;;-1:-1:-1;;;;;6142:6:0;;6077:79;21428:7;21216:261;;;;;;-1:-1:-1;;;;;;21216:261:0;;;-1:-1:-1;;;;;18582:15:1;;;21216:261:0;;;18564:34:1;18614:18;;;18607:34;;;;18657:18;;;18650:34;;;;18700:18;;;18693:34;18764:15;;;18743:19;;;18736:44;21451:15:0;18796:19:1;;;18789:35;18498:19;;21216:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20963:522;;:::o;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;622:70;567:131;:::o;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:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;:::-;1451:5;1215:247;-1:-1:-1;;;1215:247:1:o;1875:456::-;1952:6;1960;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;-1:-1:-1;2202:2:1;2187:18;;2174:32;2215:33;2174:32;2215:33;:::i;:::-;1875:456;;2267:7;;-1:-1:-1;;;2321:2:1;2306:18;;;;2293:32;;1875:456::o;2336:180::-;2395:6;2448:2;2436:9;2427:7;2423:23;2419:32;2416:52;;;2464:1;2461;2454:12;2416:52;-1:-1:-1;2487:23:1;;2336:180;-1:-1:-1;2336:180:1:o;2918:118::-;3004:5;2997:13;2990:21;2983:5;2980:32;2970:60;;3026:1;3023;3016:12;3041:382;3106:6;3114;3167:2;3155:9;3146:7;3142:23;3138:32;3135:52;;;3183:1;3180;3173:12;3135:52;3222:9;3209:23;3241:31;3266:5;3241:31;:::i;:::-;3291:5;-1:-1:-1;3348:2:1;3333:18;;3320:32;3361:30;3320:32;3361:30;:::i;:::-;3410:7;3400:17;;;3041:382;;;;;:::o;3428:316::-;3505:6;3513;3521;3574:2;3562:9;3553:7;3549:23;3545:32;3542:52;;;3590:1;3587;3580:12;3542:52;-1:-1:-1;;3613:23:1;;;3683:2;3668:18;;3655:32;;-1:-1:-1;3734:2:1;3719:18;;;3706:32;;3428:316;-1:-1:-1;3428:316:1:o;3749:388::-;3817:6;3825;3878:2;3866:9;3857:7;3853:23;3849:32;3846:52;;;3894:1;3891;3884:12;3846:52;3933:9;3920:23;3952:31;3977:5;3952:31;:::i;:::-;4002:5;-1:-1:-1;4059:2:1;4044:18;;4031:32;4072:33;4031:32;4072:33;:::i;4142:380::-;4221:1;4217:12;;;;4264;;;4285:61;;4339:4;4331:6;4327:17;4317:27;;4285:61;4392:2;4384:6;4381:14;4361:18;4358:38;4355:161;;4438:10;4433:3;4429:20;4426:1;4419:31;4473:4;4470:1;4463:15;4501:4;4498:1;4491:15;4355:161;;4142:380;;;:::o;4936:356::-;5138:2;5120:21;;;5157:18;;;5150:30;5216:34;5211:2;5196:18;;5189:62;5283:2;5268:18;;4936:356::o;5297:127::-;5358:10;5353:3;5349:20;5346:1;5339:31;5389:4;5386:1;5379:15;5413:4;5410:1;5403:15;5429:168;5502:9;;;5533;;5550:15;;;5544:22;;5530:37;5520:71;;5571:18;;:::i;5602:217::-;5642:1;5668;5658:132;;5712:10;5707:3;5703:20;5700:1;5693:31;5747:4;5744:1;5737:15;5775:4;5772:1;5765:15;5658:132;-1:-1:-1;5804:9:1;;5602:217::o;6234:125::-;6299:9;;;6320:10;;;6317:36;;;6333:18;;:::i;7886:397::-;8088:2;8070:21;;;8127:2;8107:18;;;8100:30;8166:34;8161:2;8146:18;;8139:62;-1:-1:-1;;;8232:2:1;8217:18;;8210:31;8273:3;8258:19;;7886:397::o;8288:184::-;8358:6;8411:2;8399:9;8390:7;8386:23;8382:32;8379:52;;;8427:1;8424;8417:12;8379:52;-1:-1:-1;8450:16:1;;8288:184;-1:-1:-1;8288:184:1:o;8756:245::-;8823:6;8876:2;8864:9;8855:7;8851:23;8847:32;8844:52;;;8892:1;8889;8882:12;8844:52;8924:9;8918:16;8943:28;8965:5;8943:28;:::i;12846:401::-;13048:2;13030:21;;;13087:2;13067:18;;;13060:30;13126:34;13121:2;13106:18;;13099:62;-1:-1:-1;;;13192:2:1;13177:18;;13170:35;13237:3;13222:19;;12846:401::o;13252:399::-;13454:2;13436:21;;;13493:2;13473:18;;;13466:30;13532:34;13527:2;13512:18;;13505:62;-1:-1:-1;;;13598:2:1;13583:18;;13576:33;13641:3;13626:19;;13252:399::o;15889:128::-;15956:9;;;15977:11;;;15974:37;;;15991:18;;:::i;16850:127::-;16911:10;16906:3;16902:20;16899:1;16892:31;16942:4;16939:1;16932:15;16966:4;16963:1;16956:15;16982:251;17052:6;17105:2;17093:9;17084:7;17080:23;17076:32;17073:52;;;17121:1;17118;17111:12;17073:52;17153:9;17147:16;17172:31;17197:5;17172:31;:::i;17238:980::-;17500:4;17548:3;17537:9;17533:19;17579:6;17568:9;17561:25;17605:2;17643:6;17638:2;17627:9;17623:18;17616:34;17686:3;17681:2;17670:9;17666:18;17659:31;17710:6;17745;17739:13;17776:6;17768;17761:22;17814:3;17803:9;17799:19;17792:26;;17853:2;17845:6;17841:15;17827:29;;17874:1;17884:195;17898:6;17895:1;17892:13;17884:195;;;17963:13;;-1:-1:-1;;;;;17959:39:1;17947:52;;18054:15;;;;18019:12;;;;17995:1;17913:9;17884:195;;;-1:-1:-1;;;;;;;18135:32:1;;;;18130:2;18115:18;;18108:60;-1:-1:-1;;;18199:3:1;18184:19;18177:35;18096:3;17238:980;-1:-1:-1;;;17238:980:1:o;18835:306::-;18923:6;18931;18939;18992:2;18980:9;18971:7;18967:23;18963:32;18960:52;;;19008:1;19005;18998:12;18960:52;19037:9;19031:16;19021:26;;19087:2;19076:9;19072:18;19066:25;19056:35;;19131:2;19120:9;19116:18;19110:25;19100:35;;18835:306;;;;;:::o

Swarm Source

ipfs://52e568abf93e2e65fb91c153bc340cb68dd2f651151b0cdf1f7593ff26a3a9d3
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.