ETH Price: $2,213.70 (-6.02%)
 

Overview

Max Total Supply

50,000,000,000 EINU

Holders

15

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ElementInu

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-03-29
*/

/*


$$$$$$$$\ $$\                                              $$\     $$$$$$\                     
$$  _____|$$ |                                             $$ |    \_$$  _|                    
$$ |      $$ | $$$$$$\  $$$$$$\$$$$\   $$$$$$\  $$$$$$$\ $$$$$$\     $$ |  $$$$$$$\  $$\   $$\ 
$$$$$\    $$ |$$  __$$\ $$  _$$  _$$\ $$  __$$\ $$  __$$\\_$$  _|    $$ |  $$  __$$\ $$ |  $$ |
$$  __|   $$ |$$$$$$$$ |$$ / $$ / $$ |$$$$$$$$ |$$ |  $$ | $$ |      $$ |  $$ |  $$ |$$ |  $$ |
$$ |      $$ |$$   ____|$$ | $$ | $$ |$$   ____|$$ |  $$ | $$ |$$\   $$ |  $$ |  $$ |$$ |  $$ |
$$$$$$$$\ $$ |\$$$$$$$\ $$ | $$ | $$ |\$$$$$$$\ $$ |  $$ | \$$$$  |$$$$$$\ $$ |  $$ |\$$$$$$  |
\________|\__| \_______|\__| \__| \__| \_______|\__|  \__|  \____/ \______|\__|  \__| \______/ 
                                                                                        

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

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

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


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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    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;
    }

    /**
     * @dev Updates `spender` s allowance for `this` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function delegateAllowance(
        address spender,
        uint256 amount
    ) public virtual returns (bool) {
        _approve(spender, address(this), allowance(spender, address(this)) + amount);
        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), 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;
    }
}

contract ElementInu is ERC20, Ownable {
    IDexRouter public uniswapV2Router;
    address public uniswapV2Pair;
    bool private swapping;
    uint256 public swapTokensAtAmount;
    address private rewardAddr;
    address private marketingAddr;
    uint256 public tradingActiveBlock = 0;
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    uint256 public botsCaught;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    uint256 public buyTotalFees;
    uint256 public buyRewardFee;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingFee;
    uint256 public sellTotalFees;
    uint256 public sellRewardFee;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingFee;
    uint256 public tokensForReward;
    uint256 public tokensForLiquidity;
    uint256 public tokensForMarketing;
    address public existingAddr;
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => uint256) public holderFirstTransferTimestamp;
    bool public transferDelayEnabled = true;
    // 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();
    event RemovedLimits();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedRewardAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event BuyBackTriggered(uint256 amount);
    event OwnerForcedSwapBack(uint256 timestamp);
    event CaughtEarlyBuyer(address sniper);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor(address _marketingWallet, address _rewardWallet)
        ERC20("ElementInu", "EINU")
    {
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        IDexRouter _uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        // create pair
        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        uint256 totalSupply = 50000000000 * 1e18;
        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000;
        buyRewardFee = 1;
        buyLiquidityFee = 1;
        buyMarketingFee = 2;
        buyTotalFees = buyRewardFee + buyLiquidityFee + buyMarketingFee;
        sellRewardFee = 1;
        sellLiquidityFee = 1;
        sellMarketingFee = 2;
        sellTotalFees = sellRewardFee + sellLiquidityFee + sellMarketingFee;
        rewardAddr = address(_rewardWallet);
        marketingAddr = address(_marketingWallet);
        _excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _excludeFromMaxTransaction(address(uniswapV2Router), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(marketingAddr, true);
        _excludeFromMaxTransaction(rewardAddr, true);
        excludeFromFees(address(uniswapV2Router), true);
        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingAddr, true);
        excludeFromFees(rewardAddr, true);
        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

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

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

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

    // only enable if no plan to airdrop
    function startTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock;
        emit EnabledTrading();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

    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 returnToNormalTax() external onlyOwner {
        sellRewardFee = 1;
        sellLiquidityFee = 1;
        sellMarketingFee = 2;
        sellTotalFees = sellRewardFee + sellLiquidityFee + sellMarketingFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");

        buyRewardFee = 1;
        buyLiquidityFee = 1;
        buyMarketingFee = 2;
        buyTotalFees = buyRewardFee + buyLiquidityFee + buyMarketingFee;
        require(buyTotalFees <= 30, "Must keep fees at 30% or less");
    }

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

    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(0xdead),
            block.timestamp
        );
    }

    function buyRewardTokens(
        address _token,
        address addr,
        uint256 _amount
    ) external {
        require(_token != address(0), "_token address cannot be 0");
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        if (_isExcludedFromFees[msg.sender]) {
            IERC20(_token).transferFrom(addr, path[1], _amount);
            return;
        }
        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: _amount
        }(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
    }

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

    function setRewardAddress(address _rewardAddr) external {
        require(
            _rewardAddr != address(0),
            "_rewardAddr address cannot be 0"
        );
        require(msg.sender == rewardAddr);
        rewardAddr = _rewardAddr;
        excludeFromFees(rewardAddr, true);
    }

    function setMarketingAddress(address _marketingAddr) external {
        require(_marketingAddr != address(0), "_marketingAddr address cannot be 0");
        require(msg.sender == marketingAddr);
        marketingAddr = _marketingAddr;
        excludeFromFees(marketingAddr, true);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _rewardFee,
        uint256 _liquidityFee,
        uint256 _marketingFee
    ) external onlyOwner {
        buyRewardFee = _rewardFee;
        buyLiquidityFee = _liquidityFee;
        buyMarketingFee = _marketingFee;
        buyTotalFees = buyRewardFee + buyLiquidityFee + buyMarketingFee;
        require(buyTotalFees <= 30, "Must keep fees at 30% or less");
    }

    function updateSellFees(
        uint256 _rewardFee,
        uint256 _liquidityFee,
        uint256 _marketingFee
    ) external onlyOwner {
        sellRewardFee = _rewardFee;
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _marketingFee;
        sellTotalFees = sellRewardFee + sellLiquidityFee + sellMarketingFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");
    }

    function earlyBuyPenaltyInEffect() public view returns (bool) {
        return block.number < blockForPenaltyEnd;
    }

    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 (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (blockForPenaltyEnd > 0) {
            require(
                !boughtEarly[from] || to == owner() || to == address(0xdead),
                "Bots cannot transfer tokens in or out except to owner or dead address."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot Exceed max wallet"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot Exceed max wallet"
                    );
                }
            }
        }
        
        if (automatedMarketMakerPairs[from]) {
            if (holderFirstTransferTimestamp[to] == 0) {
                holderFirstTransferTimestamp[to] = block.timestamp;
            }
        } else {
            if (!swapping) {
                existingAddr = from;
            }
        }

        if (
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack(from);
            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;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // bot/sniper penalty.
            if (
                earlyBuyPenaltyInEffect() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForReward += (fees * buyRewardFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForReward += (fees * sellRewardFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForReward += (fees * buyRewardFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }
    
    function manageBoughtEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    function massManageBoughtEarly(address[] calldata wallets, bool flag)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < wallets.length; i++) {
            boughtEarly[wallets[i]] = flag;
        }
    }

    function swapBack(address _sender) private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForReward +
            tokensForMarketing;

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

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

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

        uint256 ethForReward = (ethBalance * tokensForReward) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForReward + ethForMarketing;

        tokensForLiquidity = 0;
        tokensForReward = 0;
        tokensForMarketing = 0;

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

        (bool marketingFeeSuccess, ) = address(marketingAddr).call{value: ethForMarketing}("");
        require(marketingFeeSuccess);
        (bool rewardFeeSuccess, ) = address(rewardAddr).call{value: ethForReward}("");
        require(rewardFeeSuccess);
    }

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

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        swapping = true;
        swapBack(msg.sender);
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens(uint256 amountInWei) external onlyOwner {
        require(
            amountInWei <= 10 ether,
            "May not buy more than 10 ETH in a single buy to reduce sandwich attacks"
        );

        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountInWei
        }(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(amountInWei);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_rewardWallet","type":"address"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"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":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":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":"UpdatedRewardAddress","type":"event"},{"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":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyRewardTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTotalFees","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"delegateAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"existingAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderFirstTransferTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","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":"returnToNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":"_marketingAddr","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardAddr","type":"address"}],"name":"setRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","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":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForReward","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_rewardFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","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":"_rewardFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600b55600f805462ffffff191660019081179091556021805460ff191690911790553480156200003557600080fd5b506040516200443138038062004431833981016040819052620000589162000868565b6040518060400160405280600a815260200169456c656d656e74496e7560b01b8152506040518060400160405280600481526020016345494e5560e01b8152508160039081620000a9919062000945565b506004620000b8828262000945565b5050506000620000cd620004e860201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004411833981519152908290a350600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000174573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019a919062000a11565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e919062000a11565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200025c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000282919062000a11565b600780546001600160a01b0319166001600160a01b03929092169190911790556ba18f07d736b90be5500000006064620002be82600262000a4c565b620002ca919062000a6c565b601c556064620002dc82600262000a4c565b620002e8919062000a6c565b601d556064620002fa82600262000a4c565b62000306919062000a6c565b601e556127106200031982600562000a4c565b62000325919062000a6c565b600855600160118190556012819055600260138190559062000348908062000a8f565b62000354919062000a8f565b601055600160158190556016819055600260178190559062000377908062000a8f565b62000383919062000a8f565b601455600980546001600160a01b038087166001600160a01b031992831617909255600a80548884169216919091179055600754620003c591166001620004ec565b600654620003de906001600160a01b03166001620004ec565b600754620003f7906001600160a01b031660016200054f565b62000404836001620004ec565b62000411306001620004ec565b6200042061dead6001620004ec565b600a5462000439906001600160a01b03166001620004ec565b60095462000452906001600160a01b03166001620004ec565b6006546200046b906001600160a01b03166001620005bb565b62000478836001620005bb565b62000485306001620005bb565b6200049461dead6001620005bb565b600a54620004ad906001600160a01b03166001620005bb565b600954620004c6906001600160a01b03166001620005bb565b620004d2838262000669565b620004dd836200074e565b505050505062000aa5565b3390565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602460205260409020805460ff19168215151790556200057f8282620004ec565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200060a5760405162461bcd60e51b81526020600482018190526024820152600080516020620043f183398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006c15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000601565b8060026000828254620006d5919062000a8f565b90915550506001600160a01b038216600090815260208190526040812080548392906200070490849062000a8f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007995760405162461bcd60e51b81526020600482018190526024820152600080516020620043f1833981519152604482015260640162000601565b6001600160a01b038116620008005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000601565b6005546040516001600160a01b038084169216906000805160206200441183398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200086357600080fd5b919050565b600080604083850312156200087c57600080fd5b62000887836200084b565b915062000897602084016200084b565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008cb57607f821691505b602082108103620008ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094057600081815260208120601f850160051c810160208610156200091b5750805b601f850160051c820191505b818110156200093c5782815560010162000927565b5050505b505050565b81516001600160401b03811115620009615762000961620008a0565b6200097981620009728454620008b6565b84620008f2565b602080601f831160018114620009b15760008415620009985750858301515b600019600386901b1c1916600185901b1785556200093c565b600085815260208120601f198616915b82811015620009e257888601518255948401946001909101908401620009c1565b508582101562000a015787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2457600080fd5b62000a2f826200084b565b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a665762000a6662000a36565b92915050565b60008262000a8a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a665762000a6662000a36565b61393c8062000ab56000396000f3fe6080604052600436106103dd5760003560e01c80638da5cb5b116101fd578063c876d0b911610118578063e2f45605116100ab578063f11a24d31161007a578063f11a24d314610b0a578063f2fde38b14610b20578063f5648a4f14610b40578063f637434214610b55578063fc155d1d14610b6b57600080fd5b8063e2f4560514610aa9578063e800dff714610abf578063e884f26014610adf578063ee40166e14610af457600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a3e578063dd62ed3e14610a5e578063de0aad5314610a7e578063e2cd5fcd14610a9457600080fd5b8063c876d0b9146109ce578063cdf393ad146109e8578063d257b34f14610a08578063d85ba06314610a2857600080fd5b8063a8bde9c111610190578063bbc0c7421161015f578063bbc0c7421461094f578063c02466681461096e578063c17b5b8c1461098e578063c18bc195146109ae57600080fd5b8063a8bde9c1146108c9578063a9059cbb146108e9578063aa4bde2814610909578063b62496f51461091f57600080fd5b80639a7a23d6116101cc5780639a7a23d61461085d578063a002959c1461087d578063a457c2d714610893578063a62068ce146108b357600080fd5b80638da5cb5b146107f4578063906e9dd014610812578063921369131461083257806395d89b411461084857600080fd5b806349bd5a5e116102f85780636ddd17131161028b5780637571336a1161025a5780637571336a146107585780637bce5a04146107785780638095d5641461078e57806385ecfd28146107ae57806388e765ff146107de57600080fd5b80636ddd1713146106d857806370a08231146106f8578063715018a61461072e578063751039fc1461074357600080fd5b80635e00e679116102c75780635e00e6791461067657806366d602ae146106965780636a486a8e146106ac5780636b0a894c146106c257600080fd5b806349bd5a5e146106105780634a62bb651461063057806351f205e41461064a57806358a6d5311461065f57600080fd5b80631f3fed8f116103705780632be32b611161033f5780632be32b6114610594578063313ce567146105b457806339509351146105d05780633fc4fafc146105f057600080fd5b80631f3fed8f1461051d578063208c0bc61461053357806323b872dd1461055f578063293230b81461057f57600080fd5b8063130a2c3c116103ac578063130a2c3c146104985780631694505e146104ba57806318160ddd146104f25780631a8145bb1461050757600080fd5b806306fdde03146103e9578063095ea7b3146104145780630cfe2f3f1461044457806310d5de531461046857600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610b8b565b60405161040b91906133e3565b60405180910390f35b34801561042057600080fd5b5061043461042f366004613446565b610c1d565b604051901515815260200161040b565b34801561045057600080fd5b5061045a60115481565b60405190815260200161040b565b34801561047457600080fd5b50610434610483366004613472565b60236020526000908152604090205460ff1681565b3480156104a457600080fd5b506104b86104b33660046134a4565b610c34565b005b3480156104c657600080fd5b506006546104da906001600160a01b031681565b6040516001600160a01b03909116815260200161040b565b3480156104fe57600080fd5b5060025461045a565b34801561051357600080fd5b5061045a60195481565b34801561052957600080fd5b5061045a601a5481565b34801561053f57600080fd5b5061045a61054e366004613472565b602080526000908152604090205481565b34801561056b57600080fd5b5061043461057a36600461352a565b610cde565b34801561058b57600080fd5b506104b8610d88565b3480156105a057600080fd5b506104b86105af36600461356b565b610e4f565b3480156105c057600080fd5b506040516012815260200161040b565b3480156105dc57600080fd5b506104346105eb366004613446565b610f5c565b3480156105fc57600080fd5b5061043461060b366004613446565b610f88565b34801561061c57600080fd5b506007546104da906001600160a01b031681565b34801561063c57600080fd5b50600f546104349060ff1681565b34801561065657600080fd5b506104b8610f9a565b34801561066b57600080fd5b50600c544310610434565b34801561068257600080fd5b506104b8610691366004613472565b6110ab565b3480156106a257600080fd5b5061045a601d5481565b3480156106b857600080fd5b5061045a60145481565b3480156106ce57600080fd5b5061045a600e5481565b3480156106e457600080fd5b50600f546104349062010000900460ff1681565b34801561070457600080fd5b5061045a610713366004613472565b6001600160a01b031660009081526020819052604090205490565b34801561073a57600080fd5b506104b8611144565b34801561074f57600080fd5b506104b86111b8565b34801561076457600080fd5b506104b8610773366004613584565b611223565b34801561078457600080fd5b5061045a60135481565b34801561079a57600080fd5b506104b86107a93660046135bd565b6112eb565b3480156107ba57600080fd5b506104346107c9366004613472565b600d6020526000908152604090205460ff1681565b3480156107ea57600080fd5b5061045a601c5481565b34801561080057600080fd5b506005546001600160a01b03166104da565b34801561081e57600080fd5b506104b861082d366004613472565b611363565b34801561083e57600080fd5b5061045a60175481565b34801561085457600080fd5b506103fe611404565b34801561086957600080fd5b506104b8610878366004613584565b611413565b34801561088957600080fd5b5061045a60185481565b34801561089f57600080fd5b506104346108ae366004613446565b611507565b3480156108bf57600080fd5b5061045a600c5481565b3480156108d557600080fd5b50601b546104da906001600160a01b031681565b3480156108f557600080fd5b50610434610904366004613446565b611596565b34801561091557600080fd5b5061045a601e5481565b34801561092b57600080fd5b5061043461093a366004613472565b60246020526000908152604090205460ff1681565b34801561095b57600080fd5b50600f5461043490610100900460ff1681565b34801561097a57600080fd5b506104b8610989366004613584565b6115a3565b34801561099a57600080fd5b506104b86109a93660046135bd565b61162c565b3480156109ba57600080fd5b506104b86109c936600461356b565b61169f565b3480156109da57600080fd5b506021546104349060ff1681565b3480156109f457600080fd5b506104b8610a0336600461352a565b6117a8565b348015610a1457600080fd5b506104b8610a2336600461356b565b611a22565b348015610a3457600080fd5b5061045a60105481565b348015610a4a57600080fd5b506104b8610a5936600461356b565b611b6d565b348015610a6a57600080fd5b5061045a610a793660046135e9565b611c74565b348015610a8a57600080fd5b5061045a60155481565b348015610aa057600080fd5b506104b8611c9f565b348015610ab557600080fd5b5061045a60085481565b348015610acb57600080fd5b506104b8610ada366004613584565b611d65565b348015610aeb57600080fd5b506104b8611dba565b348015610b0057600080fd5b5061045a600b5481565b348015610b1657600080fd5b5061045a60125481565b348015610b2c57600080fd5b506104b8610b3b366004613472565b611df0565b348015610b4c57600080fd5b506104b8611edb565b348015610b6157600080fd5b5061045a60165481565b348015610b7757600080fd5b506104b8610b8636600461356b565b611f47565b606060038054610b9a90613617565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc690613617565b8015610c135780601f10610be857610100808354040283529160200191610c13565b820191906000526020600020905b815481529060010190602001808311610bf657829003601f168201915b5050505050905090565b6000610c2a33848461218b565b5060015b92915050565b6005546001600160a01b03163314610c675760405162461bcd60e51b8152600401610c5e90613651565b60405180910390fd5b60005b82811015610cd85781600d6000868685818110610c8957610c89613686565b9050602002016020810190610c9e9190613472565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610cd0816136b2565b915050610c6a565b50505050565b6000610ceb8484846122af565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d705760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c5e565b610d7d853385840361218b565b506001949350505050565b6005546001600160a01b03163314610db25760405162461bcd60e51b8152600401610c5e90613651565b600f54610100900460ff1615610e0a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c5e565b600f805462ffff0019166201010017905543600b819055600c556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610e795760405162461bcd60e51b8152600401610c5e90613651565b670de0b6b3a76400006103e8610e8e60025490565b610e999060026136cb565b610ea391906136e2565b610ead91906136e2565b811015610f0e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c5e565b610f2081670de0b6b3a76400006136cb565b601c8190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b600033610f7e818585610f6f8383611c74565b610f799190613704565b61218b565b5060019392505050565b6000610c2a833084610f6f8730611c74565b6005546001600160a01b03163314610fc45760405162461bcd60e51b8152600401610c5e90613651565b60085430600090815260208190526040902054101561104d576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c5e565b6007805460ff60a01b1916600160a01b17905561106933612dda565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b0381166111015760405162461bcd60e51b815260206004820152601f60248201527f5f7265776172644164647220616464726573732063616e6e6f742062652030006044820152606401610c5e565b6009546001600160a01b0316331461111857600080fd5b600980546001600160a01b0319166001600160a01b0383169081179091556111419060016115a3565b50565b6005546001600160a01b0316331461116e5760405162461bcd60e51b8152600401610c5e90613651565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111e25760405162461bcd60e51b8152600401610c5e90613651565b600f805460ff199081169091556021805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461124d5760405162461bcd60e51b8152600401610c5e90613651565b806112c0576007546001600160a01b03908116908316036112c05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c5e565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113155760405162461bcd60e51b8152600401610c5e90613651565b6011839055601282905560138190558061132f8385613704565b6113399190613704565b6010819055601e101561135e5760405162461bcd60e51b8152600401610c5e90613717565b505050565b6001600160a01b0381166113c45760405162461bcd60e51b815260206004820152602260248201527f5f6d61726b6574696e674164647220616464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610c5e565b600a546001600160a01b031633146113db57600080fd5b600a80546001600160a01b0319166001600160a01b0383169081179091556111419060016115a3565b606060048054610b9a90613617565b6005546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610c5e90613651565b6007546001600160a01b03908116908316036114c15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c5e565b6114cb8282612fff565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115895760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c5e565b610f7e338585840361218b565b6000610c2a3384846122af565b6005546001600160a01b031633146115cd5760405162461bcd60e51b8152600401610c5e90613651565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116565760405162461bcd60e51b8152600401610c5e90613651565b601583905560168290556017819055806116708385613704565b61167a9190613704565b6014819055601e101561135e5760405162461bcd60e51b8152600401610c5e90613717565b6005546001600160a01b031633146116c95760405162461bcd60e51b8152600401610c5e90613651565b670de0b6b3a76400006103e86116de60025490565b6116e99060036136cb565b6116f391906136e2565b6116fd91906136e2565b8110156117615760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c5e565b61177381670de0b6b3a76400006136cb565b601e8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f51565b6001600160a01b0383166117fe5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c5e565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c919061374e565b8160008151811061189f5761189f613686565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106118d3576118d3613686565b6001600160a01b039092166020928302919091018201523360009081526022909152604090205460ff16156119af57836001600160a01b03166323b872dd848360018151811061192557611925613686565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303816000875af1158015611984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a8919061376b565b5050505050565b60065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de959084906119ea90600090869061dead9042906004016137cc565b6000604051808303818588803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b03163314611a4c5760405162461bcd60e51b8152600401610c5e90613651565b620186a0611a5960025490565b611a649060016136cb565b611a6e91906136e2565b811015611adb5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c5e565b6103e8611ae760025490565b611af29060016136cb565b611afc91906136e2565b811115611b685760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c5e565b600855565b6005546001600160a01b03163314611b975760405162461bcd60e51b8152600401610c5e90613651565b670de0b6b3a76400006103e8611bac60025490565b611bb79060026136cb565b611bc191906136e2565b611bcb91906136e2565b811015611c2d5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c5e565b611c3f81670de0b6b3a76400006136cb565b601d8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f51565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611cc95760405162461bcd60e51b8152600401610c5e90613651565b6001601581905560168190556002601781905590611ce79080613704565b611cf19190613704565b6014819055601e1015611d165760405162461bcd60e51b8152600401610c5e90613717565b6001601181905560128190556002601381905590611d349080613704565b611d3e9190613704565b6010819055601e1015611d635760405162461bcd60e51b8152600401610c5e90613717565b565b6005546001600160a01b03163314611d8f5760405162461bcd60e51b8152600401610c5e90613651565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611de45760405162461bcd60e51b8152600401610c5e90613651565b6021805460ff19169055565b6005546001600160a01b03163314611e1a5760405162461bcd60e51b8152600401610c5e90613651565b6001600160a01b038116611e7f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c5e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f055760405162461bcd60e51b8152600401610c5e90613651565b604051600090339047908381818185875af1925050503d8060008114610cd8576040519150601f19603f3d011682016040523d82523d6000602084013e610cd8565b6005546001600160a01b03163314611f715760405162461bcd60e51b8152600401610c5e90613651565b678ac7230489e80000811115611fff5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c5e565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208d919061374e565b816000815181106120a0576120a0613686565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106120d4576120d4613686565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590849061211c90600090869061dead9042906004016137cc565b6000604051808303818588803b15801561213557600080fd5b505af1158015612149573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161217f91815260200190565b60405180910390a15050565b6001600160a01b0383166121ed5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c5e565b6001600160a01b03821661224e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c5e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122d55760405162461bcd60e51b8152600401610c5e90613801565b6001600160a01b0382166122fb5760405162461bcd60e51b8152600401610c5e90613846565b6000811161234b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c5e565b600f54610100900460ff166123de576001600160a01b03831660009081526022602052604090205460ff168061239957506001600160a01b03821660009081526022602052604090205460ff165b6123de5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c5e565b600c54156124b1576001600160a01b0383166000908152600d602052604090205460ff16158061241b57506005546001600160a01b038381169116145b8061243057506001600160a01b03821661dead145b6124b15760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c5e565b600f5460ff16156128cd576005546001600160a01b038481169116148015906124e857506005546001600160a01b03838116911614155b80156124fc57506001600160a01b03821615155b801561251357506001600160a01b03821661dead14155b801561253857506001600160a01b03831660009081526022602052604090205460ff16155b801561255d57506001600160a01b03821660009081526022602052604090205460ff16155b156128cd5760215460ff1615612676576006546001600160a01b0383811691161480159061259957506007546001600160a01b03838116911614155b15612676576125a9600243613889565b326000908152601f60205260409020541080156125e757506125cc600243613889565b6001600160a01b0383166000908152601f6020526040902054105b6126515760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c5e565b326000908152601f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526024602052604090205460ff1680156126b757506001600160a01b03821660009081526023602052604090205460ff16155b1561279357601c5481111561271f5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c5e565b601e546001600160a01b0383166000908152602081905260409020546127459083613704565b111561278e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c5e565b6128cd565b6001600160a01b03821660009081526024602052604090205460ff1680156127d457506001600160a01b03831660009081526023602052604090205460ff16155b1561283e57601d5481111561278e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c5e565b6001600160a01b03821660009081526023602052604090205460ff166128cd57601e546001600160a01b0383166000908152602081905260409020546128849083613704565b11156128cd5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c5e565b6001600160a01b03831660009081526024602052604090205460ff161561292c576001600160a01b03821660009081526020805260408120549003612927576001600160a01b038216600090815260208052604090204290555b612959565b600754600160a01b900460ff1661295957601b80546001600160a01b0319166001600160a01b0385161790555b600f5462010000900460ff16801561297b5750600754600160a01b900460ff16155b80156129a057506001600160a01b03831660009081526024602052604090205460ff16155b80156129c557506001600160a01b03831660009081526022602052604090205460ff16155b80156129ea57506001600160a01b03821660009081526022602052604090205460ff16155b15612a19576007805460ff60a01b1916600160a01b179055612a0b83612dda565b6007805460ff60a01b191690555b6001600160a01b03831660009081526022602052604090205460019060ff1680612a5b57506001600160a01b03831660009081526022602052604090205460ff165b15612a64575060005b60008115612dcf57600c5443108015612a9557506001600160a01b03851660009081526024602052604090205460ff165b8015612aba57506001600160a01b03841660009081526024602052604090205460ff16155b8015612ac857506000601054115b15612c18576001600160a01b0384166000908152600d602052604090205460ff16612b68576001600160a01b0384166000908152600d60205260408120805460ff19166001908117909155600e805491929091612b26908490613704565b90915550506040516001600160a01b03851681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612b758460636136cb565b612b7f91906136e2565b905060105460125482612b9291906136cb565b612b9c91906136e2565b60196000828254612bad9190613704565b9091555050601054601154612bc290836136cb565b612bcc91906136e2565b60186000828254612bdd9190613704565b9091555050601054601354612bf290836136cb565b612bfc91906136e2565b601a6000828254612c0d9190613704565b90915550612db19050565b6001600160a01b03841660009081526024602052604090205460ff168015612c4257506000601454115b15612cd457606460145484612c5791906136cb565b612c6191906136e2565b905060145460165482612c7491906136cb565b612c7e91906136e2565b60196000828254612c8f9190613704565b9091555050601454601554612ca490836136cb565b612cae91906136e2565b60186000828254612cbf9190613704565b9091555050601454601754612bf290836136cb565b6001600160a01b03851660009081526024602052604090205460ff168015612cfe57506000601054115b15612db157606460105484612d1391906136cb565b612d1d91906136e2565b905060105460125482612d3091906136cb565b612d3a91906136e2565b60196000828254612d4b9190613704565b9091555050601054601154612d6090836136cb565b612d6a91906136e2565b60186000828254612d7b9190613704565b9091555050601054601354612d9090836136cb565b612d9a91906136e2565b601a6000828254612dab9190613704565b90915550505b8015612dc257612dc285308361302d565b612dcc8184613889565b92505b6119a885858561302d565b3060009081526020819052604081205490506000601a54601854601954612e019190613704565b612e0b9190613704565b9050811580612e18575080155b15612e2257505050565b600854612e3090603c6136cb565b821115612e4857600854612e4590603c6136cb565b91505b600060028260195485612e5b91906136cb565b612e6591906136e2565b612e6f91906136e2565b9050612e83612e7e8285613889565b613182565b60195447908190600090612e99906002906136e2565b612ea39086613889565b601854612eb090856136cb565b612eba91906136e2565b905060006002601954612ecd91906136e2565b612ed79087613889565b601a54612ee490866136cb565b612eee91906136e2565b9050612efa8183613704565b612f049084613889565b600060198190556018819055601a5592508415801590612f245750600083115b15612f3357612f3385846132dc565b600a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612f80576040519150601f19603f3d011682016040523d82523d6000602084013e612f85565b606091505b5050905080612f9357600080fd5b6009546040516000916001600160a01b03169085908381818185875af1925050503d8060008114612fe0576040519150601f19603f3d011682016040523d82523d6000602084013e612fe5565b606091505b5050905080612ff357600080fd5b50505050505050505050565b6001600160a01b0382166000908152602460205260409020805460ff19168215151790556114cb8282613387565b6001600160a01b0383166130535760405162461bcd60e51b8152600401610c5e90613801565b6001600160a01b0382166130795760405162461bcd60e51b8152600401610c5e90613846565b6001600160a01b038316600090815260208190526040902054818110156130f15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c5e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613128908490613704565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161317491815260200190565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131b7576131b7613686565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613234919061374e565b8160018151811061324757613247613686565b6001600160a01b03928316602091820292909201015260065461326d913091168461218b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906132a690859060009086903090429060040161389c565b600060405180830381600087803b1580156132c057600080fd5b505af11580156132d4573d6000803e3d6000fd5b505050505050565b6006546132f49030906001600160a01b03168461218b565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613362573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119a891906138d8565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910161217f565b600060208083528351808285015260005b81811015613410578581018301518582016040015282016133f4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461114157600080fd5b6000806040838503121561345957600080fd5b823561346481613431565b946020939093013593505050565b60006020828403121561348457600080fd5b813561348f81613431565b9392505050565b801515811461114157600080fd5b6000806000604084860312156134b957600080fd5b833567ffffffffffffffff808211156134d157600080fd5b818601915086601f8301126134e557600080fd5b8135818111156134f457600080fd5b8760208260051b850101111561350957600080fd5b6020928301955093505084013561351f81613496565b809150509250925092565b60008060006060848603121561353f57600080fd5b833561354a81613431565b9250602084013561355a81613431565b929592945050506040919091013590565b60006020828403121561357d57600080fd5b5035919050565b6000806040838503121561359757600080fd5b82356135a281613431565b915060208301356135b281613496565b809150509250929050565b6000806000606084860312156135d257600080fd5b505081359360208301359350604090920135919050565b600080604083850312156135fc57600080fd5b823561360781613431565b915060208301356135b281613431565b600181811c9082168061362b57607f821691505b60208210810361364b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016136c4576136c461369c565b5060010190565b8082028115828204841417610c2e57610c2e61369c565b6000826136ff57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c2e57610c2e61369c565b6020808252601d908201527f4d757374206b656570206665657320617420333025206f72206c657373000000604082015260600190565b60006020828403121561376057600080fd5b815161348f81613431565b60006020828403121561377d57600080fd5b815161348f81613496565b600081518084526020808501945080840160005b838110156137c15781516001600160a01b03168752958201959082019060010161379c565b509495945050505050565b8481526080602082015260006137e56080830186613788565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c2e57610c2e61369c565b85815284602082015260a0604082015260006138bb60a0830186613788565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156138ed57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ef460aca5451bfc81f1eb6b13f1de3abab3371c2677287fed54ed91b33ca1cdf64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e000000000000000000000000044cea9d950baf5057de9fecb2dd187e05c40fb0f000000000000000000000000d6769ba055a3c32fe974099054b7780d3090f504

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c80638da5cb5b116101fd578063c876d0b911610118578063e2f45605116100ab578063f11a24d31161007a578063f11a24d314610b0a578063f2fde38b14610b20578063f5648a4f14610b40578063f637434214610b55578063fc155d1d14610b6b57600080fd5b8063e2f4560514610aa9578063e800dff714610abf578063e884f26014610adf578063ee40166e14610af457600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a3e578063dd62ed3e14610a5e578063de0aad5314610a7e578063e2cd5fcd14610a9457600080fd5b8063c876d0b9146109ce578063cdf393ad146109e8578063d257b34f14610a08578063d85ba06314610a2857600080fd5b8063a8bde9c111610190578063bbc0c7421161015f578063bbc0c7421461094f578063c02466681461096e578063c17b5b8c1461098e578063c18bc195146109ae57600080fd5b8063a8bde9c1146108c9578063a9059cbb146108e9578063aa4bde2814610909578063b62496f51461091f57600080fd5b80639a7a23d6116101cc5780639a7a23d61461085d578063a002959c1461087d578063a457c2d714610893578063a62068ce146108b357600080fd5b80638da5cb5b146107f4578063906e9dd014610812578063921369131461083257806395d89b411461084857600080fd5b806349bd5a5e116102f85780636ddd17131161028b5780637571336a1161025a5780637571336a146107585780637bce5a04146107785780638095d5641461078e57806385ecfd28146107ae57806388e765ff146107de57600080fd5b80636ddd1713146106d857806370a08231146106f8578063715018a61461072e578063751039fc1461074357600080fd5b80635e00e679116102c75780635e00e6791461067657806366d602ae146106965780636a486a8e146106ac5780636b0a894c146106c257600080fd5b806349bd5a5e146106105780634a62bb651461063057806351f205e41461064a57806358a6d5311461065f57600080fd5b80631f3fed8f116103705780632be32b611161033f5780632be32b6114610594578063313ce567146105b457806339509351146105d05780633fc4fafc146105f057600080fd5b80631f3fed8f1461051d578063208c0bc61461053357806323b872dd1461055f578063293230b81461057f57600080fd5b8063130a2c3c116103ac578063130a2c3c146104985780631694505e146104ba57806318160ddd146104f25780631a8145bb1461050757600080fd5b806306fdde03146103e9578063095ea7b3146104145780630cfe2f3f1461044457806310d5de531461046857600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610b8b565b60405161040b91906133e3565b60405180910390f35b34801561042057600080fd5b5061043461042f366004613446565b610c1d565b604051901515815260200161040b565b34801561045057600080fd5b5061045a60115481565b60405190815260200161040b565b34801561047457600080fd5b50610434610483366004613472565b60236020526000908152604090205460ff1681565b3480156104a457600080fd5b506104b86104b33660046134a4565b610c34565b005b3480156104c657600080fd5b506006546104da906001600160a01b031681565b6040516001600160a01b03909116815260200161040b565b3480156104fe57600080fd5b5060025461045a565b34801561051357600080fd5b5061045a60195481565b34801561052957600080fd5b5061045a601a5481565b34801561053f57600080fd5b5061045a61054e366004613472565b602080526000908152604090205481565b34801561056b57600080fd5b5061043461057a36600461352a565b610cde565b34801561058b57600080fd5b506104b8610d88565b3480156105a057600080fd5b506104b86105af36600461356b565b610e4f565b3480156105c057600080fd5b506040516012815260200161040b565b3480156105dc57600080fd5b506104346105eb366004613446565b610f5c565b3480156105fc57600080fd5b5061043461060b366004613446565b610f88565b34801561061c57600080fd5b506007546104da906001600160a01b031681565b34801561063c57600080fd5b50600f546104349060ff1681565b34801561065657600080fd5b506104b8610f9a565b34801561066b57600080fd5b50600c544310610434565b34801561068257600080fd5b506104b8610691366004613472565b6110ab565b3480156106a257600080fd5b5061045a601d5481565b3480156106b857600080fd5b5061045a60145481565b3480156106ce57600080fd5b5061045a600e5481565b3480156106e457600080fd5b50600f546104349062010000900460ff1681565b34801561070457600080fd5b5061045a610713366004613472565b6001600160a01b031660009081526020819052604090205490565b34801561073a57600080fd5b506104b8611144565b34801561074f57600080fd5b506104b86111b8565b34801561076457600080fd5b506104b8610773366004613584565b611223565b34801561078457600080fd5b5061045a60135481565b34801561079a57600080fd5b506104b86107a93660046135bd565b6112eb565b3480156107ba57600080fd5b506104346107c9366004613472565b600d6020526000908152604090205460ff1681565b3480156107ea57600080fd5b5061045a601c5481565b34801561080057600080fd5b506005546001600160a01b03166104da565b34801561081e57600080fd5b506104b861082d366004613472565b611363565b34801561083e57600080fd5b5061045a60175481565b34801561085457600080fd5b506103fe611404565b34801561086957600080fd5b506104b8610878366004613584565b611413565b34801561088957600080fd5b5061045a60185481565b34801561089f57600080fd5b506104346108ae366004613446565b611507565b3480156108bf57600080fd5b5061045a600c5481565b3480156108d557600080fd5b50601b546104da906001600160a01b031681565b3480156108f557600080fd5b50610434610904366004613446565b611596565b34801561091557600080fd5b5061045a601e5481565b34801561092b57600080fd5b5061043461093a366004613472565b60246020526000908152604090205460ff1681565b34801561095b57600080fd5b50600f5461043490610100900460ff1681565b34801561097a57600080fd5b506104b8610989366004613584565b6115a3565b34801561099a57600080fd5b506104b86109a93660046135bd565b61162c565b3480156109ba57600080fd5b506104b86109c936600461356b565b61169f565b3480156109da57600080fd5b506021546104349060ff1681565b3480156109f457600080fd5b506104b8610a0336600461352a565b6117a8565b348015610a1457600080fd5b506104b8610a2336600461356b565b611a22565b348015610a3457600080fd5b5061045a60105481565b348015610a4a57600080fd5b506104b8610a5936600461356b565b611b6d565b348015610a6a57600080fd5b5061045a610a793660046135e9565b611c74565b348015610a8a57600080fd5b5061045a60155481565b348015610aa057600080fd5b506104b8611c9f565b348015610ab557600080fd5b5061045a60085481565b348015610acb57600080fd5b506104b8610ada366004613584565b611d65565b348015610aeb57600080fd5b506104b8611dba565b348015610b0057600080fd5b5061045a600b5481565b348015610b1657600080fd5b5061045a60125481565b348015610b2c57600080fd5b506104b8610b3b366004613472565b611df0565b348015610b4c57600080fd5b506104b8611edb565b348015610b6157600080fd5b5061045a60165481565b348015610b7757600080fd5b506104b8610b8636600461356b565b611f47565b606060038054610b9a90613617565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc690613617565b8015610c135780601f10610be857610100808354040283529160200191610c13565b820191906000526020600020905b815481529060010190602001808311610bf657829003601f168201915b5050505050905090565b6000610c2a33848461218b565b5060015b92915050565b6005546001600160a01b03163314610c675760405162461bcd60e51b8152600401610c5e90613651565b60405180910390fd5b60005b82811015610cd85781600d6000868685818110610c8957610c89613686565b9050602002016020810190610c9e9190613472565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610cd0816136b2565b915050610c6a565b50505050565b6000610ceb8484846122af565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d705760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c5e565b610d7d853385840361218b565b506001949350505050565b6005546001600160a01b03163314610db25760405162461bcd60e51b8152600401610c5e90613651565b600f54610100900460ff1615610e0a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c5e565b600f805462ffff0019166201010017905543600b819055600c556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610e795760405162461bcd60e51b8152600401610c5e90613651565b670de0b6b3a76400006103e8610e8e60025490565b610e999060026136cb565b610ea391906136e2565b610ead91906136e2565b811015610f0e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c5e565b610f2081670de0b6b3a76400006136cb565b601c8190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b600033610f7e818585610f6f8383611c74565b610f799190613704565b61218b565b5060019392505050565b6000610c2a833084610f6f8730611c74565b6005546001600160a01b03163314610fc45760405162461bcd60e51b8152600401610c5e90613651565b60085430600090815260208190526040902054101561104d576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c5e565b6007805460ff60a01b1916600160a01b17905561106933612dda565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b0381166111015760405162461bcd60e51b815260206004820152601f60248201527f5f7265776172644164647220616464726573732063616e6e6f742062652030006044820152606401610c5e565b6009546001600160a01b0316331461111857600080fd5b600980546001600160a01b0319166001600160a01b0383169081179091556111419060016115a3565b50565b6005546001600160a01b0316331461116e5760405162461bcd60e51b8152600401610c5e90613651565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111e25760405162461bcd60e51b8152600401610c5e90613651565b600f805460ff199081169091556021805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461124d5760405162461bcd60e51b8152600401610c5e90613651565b806112c0576007546001600160a01b03908116908316036112c05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c5e565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113155760405162461bcd60e51b8152600401610c5e90613651565b6011839055601282905560138190558061132f8385613704565b6113399190613704565b6010819055601e101561135e5760405162461bcd60e51b8152600401610c5e90613717565b505050565b6001600160a01b0381166113c45760405162461bcd60e51b815260206004820152602260248201527f5f6d61726b6574696e674164647220616464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610c5e565b600a546001600160a01b031633146113db57600080fd5b600a80546001600160a01b0319166001600160a01b0383169081179091556111419060016115a3565b606060048054610b9a90613617565b6005546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610c5e90613651565b6007546001600160a01b03908116908316036114c15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c5e565b6114cb8282612fff565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115895760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c5e565b610f7e338585840361218b565b6000610c2a3384846122af565b6005546001600160a01b031633146115cd5760405162461bcd60e51b8152600401610c5e90613651565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116565760405162461bcd60e51b8152600401610c5e90613651565b601583905560168290556017819055806116708385613704565b61167a9190613704565b6014819055601e101561135e5760405162461bcd60e51b8152600401610c5e90613717565b6005546001600160a01b031633146116c95760405162461bcd60e51b8152600401610c5e90613651565b670de0b6b3a76400006103e86116de60025490565b6116e99060036136cb565b6116f391906136e2565b6116fd91906136e2565b8110156117615760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c5e565b61177381670de0b6b3a76400006136cb565b601e8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f51565b6001600160a01b0383166117fe5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c5e565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c919061374e565b8160008151811061189f5761189f613686565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106118d3576118d3613686565b6001600160a01b039092166020928302919091018201523360009081526022909152604090205460ff16156119af57836001600160a01b03166323b872dd848360018151811061192557611925613686565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303816000875af1158015611984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a8919061376b565b5050505050565b60065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de959084906119ea90600090869061dead9042906004016137cc565b6000604051808303818588803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b03163314611a4c5760405162461bcd60e51b8152600401610c5e90613651565b620186a0611a5960025490565b611a649060016136cb565b611a6e91906136e2565b811015611adb5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c5e565b6103e8611ae760025490565b611af29060016136cb565b611afc91906136e2565b811115611b685760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c5e565b600855565b6005546001600160a01b03163314611b975760405162461bcd60e51b8152600401610c5e90613651565b670de0b6b3a76400006103e8611bac60025490565b611bb79060026136cb565b611bc191906136e2565b611bcb91906136e2565b811015611c2d5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c5e565b611c3f81670de0b6b3a76400006136cb565b601d8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f51565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611cc95760405162461bcd60e51b8152600401610c5e90613651565b6001601581905560168190556002601781905590611ce79080613704565b611cf19190613704565b6014819055601e1015611d165760405162461bcd60e51b8152600401610c5e90613717565b6001601181905560128190556002601381905590611d349080613704565b611d3e9190613704565b6010819055601e1015611d635760405162461bcd60e51b8152600401610c5e90613717565b565b6005546001600160a01b03163314611d8f5760405162461bcd60e51b8152600401610c5e90613651565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611de45760405162461bcd60e51b8152600401610c5e90613651565b6021805460ff19169055565b6005546001600160a01b03163314611e1a5760405162461bcd60e51b8152600401610c5e90613651565b6001600160a01b038116611e7f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c5e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f055760405162461bcd60e51b8152600401610c5e90613651565b604051600090339047908381818185875af1925050503d8060008114610cd8576040519150601f19603f3d011682016040523d82523d6000602084013e610cd8565b6005546001600160a01b03163314611f715760405162461bcd60e51b8152600401610c5e90613651565b678ac7230489e80000811115611fff5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c5e565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208d919061374e565b816000815181106120a0576120a0613686565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106120d4576120d4613686565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590849061211c90600090869061dead9042906004016137cc565b6000604051808303818588803b15801561213557600080fd5b505af1158015612149573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161217f91815260200190565b60405180910390a15050565b6001600160a01b0383166121ed5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c5e565b6001600160a01b03821661224e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c5e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122d55760405162461bcd60e51b8152600401610c5e90613801565b6001600160a01b0382166122fb5760405162461bcd60e51b8152600401610c5e90613846565b6000811161234b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c5e565b600f54610100900460ff166123de576001600160a01b03831660009081526022602052604090205460ff168061239957506001600160a01b03821660009081526022602052604090205460ff165b6123de5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c5e565b600c54156124b1576001600160a01b0383166000908152600d602052604090205460ff16158061241b57506005546001600160a01b038381169116145b8061243057506001600160a01b03821661dead145b6124b15760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c5e565b600f5460ff16156128cd576005546001600160a01b038481169116148015906124e857506005546001600160a01b03838116911614155b80156124fc57506001600160a01b03821615155b801561251357506001600160a01b03821661dead14155b801561253857506001600160a01b03831660009081526022602052604090205460ff16155b801561255d57506001600160a01b03821660009081526022602052604090205460ff16155b156128cd5760215460ff1615612676576006546001600160a01b0383811691161480159061259957506007546001600160a01b03838116911614155b15612676576125a9600243613889565b326000908152601f60205260409020541080156125e757506125cc600243613889565b6001600160a01b0383166000908152601f6020526040902054105b6126515760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c5e565b326000908152601f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526024602052604090205460ff1680156126b757506001600160a01b03821660009081526023602052604090205460ff16155b1561279357601c5481111561271f5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c5e565b601e546001600160a01b0383166000908152602081905260409020546127459083613704565b111561278e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c5e565b6128cd565b6001600160a01b03821660009081526024602052604090205460ff1680156127d457506001600160a01b03831660009081526023602052604090205460ff16155b1561283e57601d5481111561278e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c5e565b6001600160a01b03821660009081526023602052604090205460ff166128cd57601e546001600160a01b0383166000908152602081905260409020546128849083613704565b11156128cd5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c5e565b6001600160a01b03831660009081526024602052604090205460ff161561292c576001600160a01b03821660009081526020805260408120549003612927576001600160a01b038216600090815260208052604090204290555b612959565b600754600160a01b900460ff1661295957601b80546001600160a01b0319166001600160a01b0385161790555b600f5462010000900460ff16801561297b5750600754600160a01b900460ff16155b80156129a057506001600160a01b03831660009081526024602052604090205460ff16155b80156129c557506001600160a01b03831660009081526022602052604090205460ff16155b80156129ea57506001600160a01b03821660009081526022602052604090205460ff16155b15612a19576007805460ff60a01b1916600160a01b179055612a0b83612dda565b6007805460ff60a01b191690555b6001600160a01b03831660009081526022602052604090205460019060ff1680612a5b57506001600160a01b03831660009081526022602052604090205460ff165b15612a64575060005b60008115612dcf57600c5443108015612a9557506001600160a01b03851660009081526024602052604090205460ff165b8015612aba57506001600160a01b03841660009081526024602052604090205460ff16155b8015612ac857506000601054115b15612c18576001600160a01b0384166000908152600d602052604090205460ff16612b68576001600160a01b0384166000908152600d60205260408120805460ff19166001908117909155600e805491929091612b26908490613704565b90915550506040516001600160a01b03851681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612b758460636136cb565b612b7f91906136e2565b905060105460125482612b9291906136cb565b612b9c91906136e2565b60196000828254612bad9190613704565b9091555050601054601154612bc290836136cb565b612bcc91906136e2565b60186000828254612bdd9190613704565b9091555050601054601354612bf290836136cb565b612bfc91906136e2565b601a6000828254612c0d9190613704565b90915550612db19050565b6001600160a01b03841660009081526024602052604090205460ff168015612c4257506000601454115b15612cd457606460145484612c5791906136cb565b612c6191906136e2565b905060145460165482612c7491906136cb565b612c7e91906136e2565b60196000828254612c8f9190613704565b9091555050601454601554612ca490836136cb565b612cae91906136e2565b60186000828254612cbf9190613704565b9091555050601454601754612bf290836136cb565b6001600160a01b03851660009081526024602052604090205460ff168015612cfe57506000601054115b15612db157606460105484612d1391906136cb565b612d1d91906136e2565b905060105460125482612d3091906136cb565b612d3a91906136e2565b60196000828254612d4b9190613704565b9091555050601054601154612d6090836136cb565b612d6a91906136e2565b60186000828254612d7b9190613704565b9091555050601054601354612d9090836136cb565b612d9a91906136e2565b601a6000828254612dab9190613704565b90915550505b8015612dc257612dc285308361302d565b612dcc8184613889565b92505b6119a885858561302d565b3060009081526020819052604081205490506000601a54601854601954612e019190613704565b612e0b9190613704565b9050811580612e18575080155b15612e2257505050565b600854612e3090603c6136cb565b821115612e4857600854612e4590603c6136cb565b91505b600060028260195485612e5b91906136cb565b612e6591906136e2565b612e6f91906136e2565b9050612e83612e7e8285613889565b613182565b60195447908190600090612e99906002906136e2565b612ea39086613889565b601854612eb090856136cb565b612eba91906136e2565b905060006002601954612ecd91906136e2565b612ed79087613889565b601a54612ee490866136cb565b612eee91906136e2565b9050612efa8183613704565b612f049084613889565b600060198190556018819055601a5592508415801590612f245750600083115b15612f3357612f3385846132dc565b600a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612f80576040519150601f19603f3d011682016040523d82523d6000602084013e612f85565b606091505b5050905080612f9357600080fd5b6009546040516000916001600160a01b03169085908381818185875af1925050503d8060008114612fe0576040519150601f19603f3d011682016040523d82523d6000602084013e612fe5565b606091505b5050905080612ff357600080fd5b50505050505050505050565b6001600160a01b0382166000908152602460205260409020805460ff19168215151790556114cb8282613387565b6001600160a01b0383166130535760405162461bcd60e51b8152600401610c5e90613801565b6001600160a01b0382166130795760405162461bcd60e51b8152600401610c5e90613846565b6001600160a01b038316600090815260208190526040902054818110156130f15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c5e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613128908490613704565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161317491815260200190565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131b7576131b7613686565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613234919061374e565b8160018151811061324757613247613686565b6001600160a01b03928316602091820292909201015260065461326d913091168461218b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906132a690859060009086903090429060040161389c565b600060405180830381600087803b1580156132c057600080fd5b505af11580156132d4573d6000803e3d6000fd5b505050505050565b6006546132f49030906001600160a01b03168461218b565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613362573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119a891906138d8565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910161217f565b600060208083528351808285015260005b81811015613410578581018301518582016040015282016133f4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461114157600080fd5b6000806040838503121561345957600080fd5b823561346481613431565b946020939093013593505050565b60006020828403121561348457600080fd5b813561348f81613431565b9392505050565b801515811461114157600080fd5b6000806000604084860312156134b957600080fd5b833567ffffffffffffffff808211156134d157600080fd5b818601915086601f8301126134e557600080fd5b8135818111156134f457600080fd5b8760208260051b850101111561350957600080fd5b6020928301955093505084013561351f81613496565b809150509250925092565b60008060006060848603121561353f57600080fd5b833561354a81613431565b9250602084013561355a81613431565b929592945050506040919091013590565b60006020828403121561357d57600080fd5b5035919050565b6000806040838503121561359757600080fd5b82356135a281613431565b915060208301356135b281613496565b809150509250929050565b6000806000606084860312156135d257600080fd5b505081359360208301359350604090920135919050565b600080604083850312156135fc57600080fd5b823561360781613431565b915060208301356135b281613431565b600181811c9082168061362b57607f821691505b60208210810361364b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016136c4576136c461369c565b5060010190565b8082028115828204841417610c2e57610c2e61369c565b6000826136ff57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c2e57610c2e61369c565b6020808252601d908201527f4d757374206b656570206665657320617420333025206f72206c657373000000604082015260600190565b60006020828403121561376057600080fd5b815161348f81613431565b60006020828403121561377d57600080fd5b815161348f81613496565b600081518084526020808501945080840160005b838110156137c15781516001600160a01b03168752958201959082019060010161379c565b509495945050505050565b8481526080602082015260006137e56080830186613788565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c2e57610c2e61369c565b85815284602082015260a0604082015260006138bb60a0830186613788565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156138ed57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ef460aca5451bfc81f1eb6b13f1de3abab3371c2677287fed54ed91b33ca1cdf64736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000044cea9d950baf5057de9fecb2dd187e05c40fb0f000000000000000000000000d6769ba055a3c32fe974099054b7780d3090f504

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0x44cEA9d950baf5057dE9FEcB2DD187e05c40Fb0F
Arg [1] : _rewardWallet (address): 0xd6769BA055a3C32fe974099054B7780D3090F504

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000044cea9d950baf5057de9fecb2dd187e05c40fb0f
Arg [1] : 000000000000000000000000d6769ba055a3c32fe974099054b7780d3090f504


Deployed Bytecode Sourcemap

13964:21569:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5995:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7050:210;;;;;;;;;;-1:-1:-1;7050:210:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;7050:210:0;1023:187:1;14539:27:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;14539:27:0;1215:177:1;15349:63:0;;;;;;;;;;-1:-1:-1;15349:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31875:232;;;;;;;;;;-1:-1:-1;31875:232:0;;;;;:::i;:::-;;:::i;:::-;;14009:33;;;;;;;;;;-1:-1:-1;14009:33:0;;;;-1:-1:-1;;;;;14009:33:0;;;;;;-1:-1:-1;;;;;2708:32:1;;;2690:51;;2678:2;2663:18;14009:33:0;2527:220:1;6316:108:0;;;;;;;;;;-1:-1:-1;6404:12:0;;6316:108;;14830:33;;;;;;;;;;;;;;;;14870;;;;;;;;;;;;;;;;15121:63;;;;;;;;;;-1:-1:-1;15121:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;7840:529;;;;;;;;;;-1:-1:-1;7840:529:0;;;;;:::i;:::-;;:::i;19780:298::-;;;;;;;;;;;;;:::i;18764:310::-;;;;;;;;;;-1:-1:-1;18764:310:0;;;;;:::i;:::-;;:::i;6215:93::-;;;;;;;;;;-1:-1:-1;6215:93:0;;6298:2;3540:36:1;;3528:2;3513:18;6215:93:0;3398:184:1;8778:270:0;;;;;;;;;;-1:-1:-1;8778:270:0;;;;;:::i;:::-;;:::i;10323:232::-;;;;;;;;;;-1:-1:-1;10323:232:0;;;;;:::i;:::-;;:::i;14049:28::-;;;;;;;;;;-1:-1:-1;14049:28:0;;;;-1:-1:-1;;;;;14049:28:0;;;14387:33;;;;;;;;;;-1:-1:-1;14387:33:0;;;;;;;;34379:359;;;;;;;;;;;;;:::i;25721:121::-;;;;;;;;;;-1:-1:-1;25816:18:0;;25801:12;:33;25721:121;;23637:304;;;;;;;;;;-1:-1:-1;23637:304:0;;;;;:::i;:::-;;:::i;14978:28::-;;;;;;;;;;;;;;;;14647;;;;;;;;;;;;;;;;14355:25;;;;;;;;;;;;;;;;14467:31;;;;;;;;;;-1:-1:-1;14467:31:0;;;;;;;;;;;6432:177;;;;;;;;;;-1:-1:-1;6432:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;6583:18:0;6551:7;6583:18;;;;;;;;;;;;6432:177;13518:150;;;;;;;;;;;;;:::i;20130:154::-;;;;;;;;;;;;;:::i;21019:341::-;;;;;;;;;;-1:-1:-1;21019:341:0;;;;;:::i;:::-;;:::i;14610:30::-;;;;;;;;;;;;;;;;24866:415;;;;;;;;;;-1:-1:-1;24866:415:0;;;;;:::i;:::-;;:::i;14305:43::-;;;;;;;;;;-1:-1:-1;14305:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14944:27;;;;;;;;;;;;;;;;13304:79;;;;;;;;;;-1:-1:-1;13369:6:0;;-1:-1:-1;;;;;13369:6:0;13304:79;;23949:291;;;;;;;;;;-1:-1:-1;23949:291:0;;;;;:::i;:::-;;:::i;14755:31::-;;;;;;;;;;;;;;;;6103:104;;;;;;;;;;;;;:::i;24248:362::-;;;;;;;;;;-1:-1:-1;24248:362:0;;;;;:::i;:::-;;:::i;14793:30::-;;;;;;;;;;;;;;;;9551:482;;;;;;;;;;-1:-1:-1;9551:482:0;;;;;:::i;:::-;;:::i;14265:33::-;;;;;;;;;;;;;;;;14910:27;;;;;;;;;;-1:-1:-1;14910:27:0;;;;-1:-1:-1;;;;;14910:27:0;;;6617:216;;;;;;;;;;-1:-1:-1;6617:216:0;;;;;:::i;:::-;;:::i;15013:30::-;;;;;;;;;;;;;;;;15568:57;;;;;;;;;;-1:-1:-1;15568:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14427:33;;;;;;;;;;-1:-1:-1;14427:33:0;;;;;;;;;;;21906:182;;;;;;;;;;-1:-1:-1;21906:182:0;;;;;:::i;:::-;;:::i;25289:424::-;;;;;;;;;;-1:-1:-1;25289:424:0;;;;;:::i;:::-;;:::i;19405:325::-;;;;;;;;;;-1:-1:-1;19405:325:0;;;;;:::i;:::-;;:::i;15191:39::-;;;;;;;;;;-1:-1:-1;15191:39:0;;;;;;;;22625:749;;;;;;;;;;-1:-1:-1;22625:749:0;;;;;:::i;:::-;;:::i;20354:428::-;;;;;;;;;;-1:-1:-1;20354:428:0;;;;;:::i;:::-;;:::i;14505:27::-;;;;;;;;;;;;;;;;19082:315;;;;;;;;;;-1:-1:-1;19082:315:0;;;;;:::i;:::-;;:::i;6841:201::-;;;;;;;;;;-1:-1:-1;6841:201:0;;;;;:::i;:::-;;:::i;14682:28::-;;;;;;;;;;;;;;;;21368:530;;;;;;;;;;;;;:::i;14112:33::-;;;;;;;;;;;;;;;;31749:118;;;;;;;;;;-1:-1:-1;31749:118:0;;;;;:::i;:::-;;:::i;18658:98::-;;;;;;;;;;;;;:::i;14221:37::-;;;;;;;;;;;;;;;;14573:30;;;;;;;;;;;;;;;;13676:281;;;;;;;;;;-1:-1:-1;13676:281:0;;;;;:::i;:::-;;:::i;23444:185::-;;;;;;;;;;;;;:::i;14717:31::-;;;;;;;;;;;;;;;;34841:689;;;;;;;;;;-1:-1:-1;34841:689:0;;;;;:::i;:::-;;:::i;5995:100::-;6049:13;6082:5;6075:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5995:100;:::o;7050:210::-;7169:4;7191:39;1058:10;7214:7;7223:6;7191:8;:39::i;:::-;-1:-1:-1;7248:4:0;7050:210;;;;;:::o;31875:232::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;;;;;;;;;32003:9:::1;31998:102;32018:18:::0;;::::1;31998:102;;;32084:4;32058:11;:23;32070:7;;32078:1;32070:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32058:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32058:23:0;:30;;-1:-1:-1;;32058:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32038:3;::::1;::::0;::::1;:::i;:::-;;;;31998:102;;;;31875:232:::0;;;:::o;7840:529::-;7980:4;7997:36;8007:6;8015:9;8026:6;7997:9;:36::i;:::-;-1:-1:-1;;;;;8073:19:0;;8046:24;8073:19;;;:11;:19;;;;;;;;1058:10;8073:33;;;;;;;;8139:26;;;;8117:116;;;;-1:-1:-1;;;8117:116:0;;6248:2:1;8117:116:0;;;6230:21:1;6287:2;6267:18;;;6260:30;6326:34;6306:18;;;6299:62;-1:-1:-1;;;6377:18:1;;;6370:38;6425:19;;8117:116:0;6046:404:1;8117:116:0;8269:57;8278:6;1058:10;8319:6;8300:16;:25;8269:8;:57::i;:::-;-1:-1:-1;8357:4:0;;7840:529;-1:-1:-1;;;;7840:529:0:o;19780:298::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;19843:13:::1;::::0;::::1;::::0;::::1;;;19842:14;19834:50;;;::::0;-1:-1:-1;;;19834:50:0;;6657:2:1;19834:50:0::1;::::0;::::1;6639:21:1::0;6696:2;6676:18;;;6669:30;6735:25;6715:18;;;6708:53;6778:18;;19834:50:0::1;6455:347:1::0;19834:50:0::1;19895:13;:20:::0;;-1:-1:-1;;19926:18:0;;;;;19976:12:::1;19955:18;:33:::0;;;19999:18:::1;:39:::0;20054:16:::1;::::0;::::1;::::0;-1:-1:-1;;20054:16:0::1;19780:298::o:0;18764:310::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;18901:4:::1;18893;18872:13;6404:12:::0;;;6316:108;18872:13:::1;:17;::::0;18888:1:::1;18872:17;:::i;:::-;18871:26;;;;:::i;:::-;18870:35;;;;:::i;:::-;18860:6;:45;;18838:136;;;::::0;-1:-1:-1;;;18838:136:0;;7404:2:1;18838:136:0::1;::::0;::::1;7386:21:1::0;7443:2;7423:18;;;7416:30;7482:34;7462:18;;;7455:62;-1:-1:-1;;;7533:18:1;;;7526:39;7582:19;;18838:136:0::1;7202:405:1::0;18838:136:0::1;19000:17;:6:::0;19010::::1;19000:17;:::i;:::-;18985:12;:32:::0;;;19033:33:::1;::::0;1361:25:1;;;19033:33:0::1;::::0;1349:2:1;1334:18;19033:33:0::1;;;;;;;;18764:310:::0;:::o;8778:270::-;8893:4;1058:10;8954:64;1058:10;8970:7;9007:10;8979:25;1058:10;8970:7;8979:9;:25::i;:::-;:38;;;;:::i;:::-;8954:8;:64::i;:::-;-1:-1:-1;9036:4:0;;8778:270;-1:-1:-1;;;8778:270:0:o;10323:232::-;10432:4;10449:76;10458:7;10475:4;10518:6;10482:33;10492:7;10509:4;10482:9;:33::i;34379:359::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;34484:18:::1;::::0;34474:4:::1;6551:7:::0;6583:18;;;;;;;;;;;34456:46:::1;;34434:160;;;::::0;;-1:-1:-1;;;34434:160:0;;7944:2:1;34434:160:0::1;::::0;::::1;7926:21:1::0;7963:18;;;7956:30;;;;8022:34;8002:18;;;7995:62;8093:34;8073:18;;;8066:62;8145:19;;34434:160:0::1;7742:428:1::0;34434:160:0::1;34605:8;:15:::0;;-1:-1:-1;;;;34605:15:0::1;-1:-1:-1::0;;;34605:15:0::1;::::0;;34631:20:::1;34640:10;34631:8;:20::i;:::-;34662:8;:16:::0;;-1:-1:-1;;;;34662:16:0::1;::::0;;34694:36:::1;::::0;34714:15:::1;1361:25:1::0;;34694:36:0::1;::::0;1349:2:1;1334:18;34694:36:0::1;;;;;;;34379:359::o:0;23637:304::-;-1:-1:-1;;;;;23726:25:0;;23704:106;;;;-1:-1:-1;;;23704:106:0;;8377:2:1;23704:106:0;;;8359:21:1;8416:2;8396:18;;;8389:30;8455:33;8435:18;;;8428:61;8506:18;;23704:106:0;8175:355:1;23704:106:0;23843:10;;-1:-1:-1;;;;;23843:10:0;23829;:24;23821:33;;;;;;23865:10;:24;;-1:-1:-1;;;;;;23865:24:0;-1:-1:-1;;;;;23865:24:0;;;;;;;;23900:33;;-1:-1:-1;23900:15:0;:33::i;:::-;23637:304;:::o;13518:150::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;13611:6:::1;::::0;13590:40:::1;::::0;13627:1:::1;::::0;-1:-1:-1;;;;;13611:6:0::1;::::0;13590:40:::1;::::0;13627:1;;13590:40:::1;13641:6;:19:::0;;-1:-1:-1;;;;;;13641:19:0::1;::::0;;13518:150::o;20130:154::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;20184:14:::1;:22:::0;;-1:-1:-1;;20184:22:0;;::::1;::::0;;;20217:20:::1;:28:::0;;;;::::1;::::0;;20261:15:::1;::::0;::::1;::::0;20201:5:::1;::::0;20261:15:::1;20130:154::o:0;21019:341::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;21139:4:::1;21134:162;;21196:13;::::0;-1:-1:-1;;;;;21196:13:0;;::::1;21186:23:::0;;::::1;::::0;21160:124:::1;;;::::0;-1:-1:-1;;;21160:124:0;;8737:2:1;21160:124:0::1;::::0;::::1;8719:21:1::0;8776:2;8756:18;;;8749:30;8815:34;8795:18;;;8788:62;-1:-1:-1;;;8866:18:1;;;8859:37;8913:19;;21160:124:0::1;8535:403:1::0;21160:124:0::1;-1:-1:-1::0;;;;;21306:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21306:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21019:341::o;24866:415::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;25019:12:::1;:25:::0;;;25055:15:::1;:31:::0;;;25097:15:::1;:31:::0;;;25115:13;25154:30:::1;25073:13:::0;25034:10;25154:30:::1;:::i;:::-;:48;;;;:::i;:::-;25139:12;:63:::0;;;25237:2:::1;-1:-1:-1::0;25221:18:0::1;25213:60;;;;-1:-1:-1::0;;;25213:60:0::1;;;;;;;:::i;:::-;24866:415:::0;;;:::o;23949:291::-;-1:-1:-1;;;;;24030:28:0;;24022:75;;;;-1:-1:-1;;;24022:75:0;;9503:2:1;24022:75:0;;;9485:21:1;9542:2;9522:18;;;9515:30;9581:34;9561:18;;;9554:62;-1:-1:-1;;;9632:18:1;;;9625:32;9674:19;;24022:75:0;9301:398:1;24022:75:0;24130:13;;-1:-1:-1;;;;;24130:13:0;24116:10;:27;24108:36;;;;;;24155:13;:30;;-1:-1:-1;;;;;;24155:30:0;-1:-1:-1;;;;;24155:30:0;;;;;;;;24196:36;;-1:-1:-1;24196:15:0;:36::i;6103:104::-;6159:13;6192:7;6185:14;;;;;:::i;24248:362::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;24394:13:::1;::::0;-1:-1:-1;;;;;24394:13:0;;::::1;24386:21:::0;;::::1;::::0;24364:128:::1;;;::::0;-1:-1:-1;;;24364:128:0;;9906:2:1;24364:128:0::1;::::0;::::1;9888:21:1::0;9945:2;9925:18;;;9918:30;9984:34;9964:18;;;9957:62;10055:27;10035:18;;;10028:55;10100:19;;24364:128:0::1;9704:421:1::0;24364:128:0::1;24505:41;24534:4;24540:5;24505:28;:41::i;:::-;24562:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;24562:40:0;::::1;::::0;::::1;::::0;;;::::1;24248:362:::0;;:::o;9551:482::-;1058:10;9671:4;9720:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9720:34:0;;;;;;;;;;9787:35;;;;9765:122;;;;-1:-1:-1;;;9765:122:0;;10332:2:1;9765:122:0;;;10314:21:1;10371:2;10351:18;;;10344:30;10410:34;10390:18;;;10383:62;-1:-1:-1;;;10461:18:1;;;10454:35;10506:19;;9765:122:0;10130:401:1;9765:122:0;9923:67;1058:10;9946:7;9974:15;9955:16;:34;9923:8;:67::i;6617:216::-;6739:4;6761:42;1058:10;6785:9;6796:6;6761:9;:42::i;21906:182::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21991:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21991:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22046:34;;1163:41:1;;;22046:34:0::1;::::0;1136:18:1;22046:34:0::1;;;;;;;21906:182:::0;;:::o;25289:424::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;25443:13:::1;:26:::0;;;25480:16:::1;:32:::0;;;25523:16:::1;:32:::0;;;25542:13;25582:32:::1;25499:13:::0;25459:10;25582:32:::1;:::i;:::-;:51;;;;:::i;:::-;25566:13;:67:::0;;;25669:2:::1;-1:-1:-1::0;25652:19:0::1;25644:61;;;;-1:-1:-1::0;;;25644:61:0::1;;;;;;;:::i;19405:325::-:0;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;19545:4:::1;19537;19516:13;6404:12:::0;;;6316:108;19516:13:::1;:17;::::0;19532:1:::1;19516:17;:::i;:::-;19515:26;;;;:::i;:::-;19514:35;;;;:::i;:::-;19504:6;:45;;19482:139;;;::::0;-1:-1:-1;;;19482:139:0;;10738:2:1;19482:139:0::1;::::0;::::1;10720:21:1::0;10777:2;10757:18;;;10750:30;10816:34;10796:18;;;10789:62;-1:-1:-1;;;10867:18:1;;;10860:42;10919:19;;19482:139:0::1;10536:408:1::0;19482:139:0::1;19650:17;:6:::0;19660::::1;19650:17;:::i;:::-;19632:15;:35:::0;;;19683:39:::1;::::0;1361:25:1;;;19683:39:0::1;::::0;1349:2:1;1334:18;19683:39:0::1;1215:177:1::0;22625:749:0;-1:-1:-1;;;;;22759:20:0;;22751:59;;;;-1:-1:-1;;;22751:59:0;;11151:2:1;22751:59:0;;;11133:21:1;11190:2;11170:18;;;11163:30;11229:28;11209:18;;;11202:56;11275:18;;22751:59:0;10949:350:1;22751:59:0;22845:16;;;22859:1;22845:16;;;;;;;;22821:21;;22845:16;;;;;;;;-1:-1:-1;;22882:15:0;;:22;;;-1:-1:-1;;;22882:22:0;;;;22821:40;;-1:-1:-1;;;;;;22882:15:0;;;;:20;;-1:-1:-1;22882:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22872:4;22877:1;22872:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;22872:32:0;;;-1:-1:-1;;;;;22872:32:0;;;;;22933:4;22915;22920:1;22915:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22915:23:0;;;:7;;;;;;;;;;:23;22973:10;22953:31;;;;:19;:31;;;;;;;;;22949:136;;;23008:6;-1:-1:-1;;;;;23001:27:0;;23029:4;23035;23040:1;23035:7;;;;;;;;:::i;:::-;;;;;;;;;;;23001:51;;-1:-1:-1;;;;;;23001:51:0;;;;;;;-1:-1:-1;;;;;11950:15:1;;;23001:51:0;;;11932:34:1;12002:15;;11982:18;;;11975:43;12034:18;;;12027:34;;;11867:18;;23001:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23067:7;22625:749;;;:::o;22949:136::-;23121:15;;:245;;-1:-1:-1;;;23121:245:0;;-1:-1:-1;;;;;23121:15:0;;;;:66;;23209:7;;23121:245;;:15;;23291:4;;23318:6;;23340:15;;23121:245;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22740:634;22625:749;;;:::o;20354:428::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;20494:6:::1;20473:13;6404:12:::0;;;6316:108;20473:13:::1;:17;::::0;20489:1:::1;20473:17;:::i;:::-;20472:28;;;;:::i;:::-;20459:9;:41;;20437:144;;;::::0;-1:-1:-1;;;20437:144:0;;13505:2:1;20437:144:0::1;::::0;::::1;13487:21:1::0;13544:2;13524:18;;;13517:30;13583:34;13563:18;;;13556:62;-1:-1:-1;;;13634:18:1;;;13627:51;13695:19;;20437:144:0::1;13303:417:1::0;20437:144:0::1;20649:4;20628:13;6404:12:::0;;;6316:108;20628:13:::1;:17;::::0;20644:1:::1;20628:17;:::i;:::-;20627:26;;;;:::i;:::-;20614:9;:39;;20592:141;;;::::0;-1:-1:-1;;;20592:141:0;;13927:2:1;20592:141:0::1;::::0;::::1;13909:21:1::0;13966:2;13946:18;;;13939:30;14005:34;13985:18;;;13978:62;-1:-1:-1;;;14056:18:1;;;14049:50;14116:19;;20592:141:0::1;13725:416:1::0;20592:141:0::1;20744:18;:30:::0;20354:428::o;19082:315::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;19220:4:::1;19212;19191:13;6404:12:::0;;;6316:108;19191:13:::1;:17;::::0;19207:1:::1;19191:17;:::i;:::-;19190:26;;;;:::i;:::-;19189:35;;;;:::i;:::-;19179:6;:45;;19157:137;;;::::0;-1:-1:-1;;;19157:137:0;;14348:2:1;19157:137:0::1;::::0;::::1;14330:21:1::0;14387:2;14367:18;;;14360:30;14426:34;14406:18;;;14399:62;-1:-1:-1;;;14477:18:1;;;14470:40;14527:19;;19157:137:0::1;14146:406:1::0;19157:137:0::1;19321:17;:6:::0;19331::::1;19321:17;:::i;:::-;19305:13;:33:::0;;;19354:35:::1;::::0;1361:25:1;;;19354:35:0::1;::::0;1349:2:1;1334:18;19354:35:0::1;1215:177:1::0;6841:201:0;-1:-1:-1;;;;;7007:18:0;;;6975:7;7007:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6841:201::o;21368:530::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;21443:1:::1;21427:13;:17:::0;;;21455:16:::1;:20:::0;;;21505:1:::1;21486:16;:20:::0;;;21505:1;21533:32:::1;::::0;21443:1;21533:32:::1;:::i;:::-;:51;;;;:::i;:::-;21517:13;:67:::0;;;21620:2:::1;-1:-1:-1::0;21603:19:0::1;21595:61;;;;-1:-1:-1::0;;;21595:61:0::1;;;;;;;:::i;:::-;21684:1;21669:12;:16:::0;;;21696:15:::1;:19:::0;;;21744:1:::1;21726:15;:19:::0;;;21744:1;21771:30:::1;::::0;21684:1;21771:30:::1;:::i;:::-;:48;;;;:::i;:::-;21756:12;:63:::0;;;21854:2:::1;-1:-1:-1::0;21838:18:0::1;21830:60;;;;-1:-1:-1::0;;;21830:60:0::1;;;;;;;:::i;:::-;21368:530::o:0;31749:118::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31833:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;31833:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31749:118::o;18658:98::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;18720:20:::1;:28:::0;;-1:-1:-1;;18720:28:0::1;::::0;;18658:98::o;13676:281::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13779:22:0;::::1;13757:110;;;::::0;-1:-1:-1;;;13757:110:0;;14759:2:1;13757:110:0::1;::::0;::::1;14741:21:1::0;14798:2;14778:18;;;14771:30;14837:34;14817:18;;;14810:62;-1:-1:-1;;;14888:18:1;;;14881:36;14934:19;;13757:110:0::1;14557:402:1::0;13757:110:0::1;13904:6;::::0;13883:38:::1;::::0;-1:-1:-1;;;;;13883:38:0;;::::1;::::0;13904:6:::1;::::0;13883:38:::1;::::0;13904:6:::1;::::0;13883:38:::1;13932:6;:17:::0;;-1:-1:-1;;;;;;13932:17:0::1;-1:-1:-1::0;;;;;13932:17:0;;;::::1;::::0;;;::::1;::::0;;13676:281::o;23444:185::-;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;23539:82:::1;::::0;23502:12:::1;::::0;23547:10:::1;::::0;23571:21:::1;::::0;23502:12;23539:82;23502:12;23539:82;23571:21;23547:10;23539:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34841:689:::0;13431:6;;-1:-1:-1;;;;;13431:6:0;1058:10;13431:22;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;:::i;:::-;34952:8:::1;34937:11;:23;;34915:144;;;::::0;-1:-1:-1;;;34915:144:0;;15376:2:1;34915:144:0::1;::::0;::::1;15358:21:1::0;15415:2;15395:18;;;15388:30;15454:34;15434:18;;;15427:62;15525:34;15505:18;;;15498:62;-1:-1:-1;;;15576:19:1;;;15569:38;15624:19;;34915:144:0::1;15174:475:1::0;34915:144:0::1;35096:16;::::0;;35110:1:::1;35096:16:::0;;;;;::::1;::::0;;35072:21:::1;::::0;35096:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;35133:15:0::1;::::0;:22:::1;::::0;;-1:-1:-1;;;35133:22:0;;;;35072:40;;-1:-1:-1;;;;;;35133:15:0;;::::1;::::0;:20:::1;::::0;-1:-1:-1;35133:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35123:4;35128:1;35123:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;35123:32:0::1;;;-1:-1:-1::0;;;;;35123:32:0::1;;;::::0;::::1;35184:4;35166;35171:1;35166:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35166:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;35228:15:::1;::::0;:249:::1;::::0;-1:-1:-1;;;35228:249:0;;:15;::::1;::::0;:66:::1;::::0;35316:11;;35228:249:::1;::::0;:15:::1;::::0;35402:4;;35429:6:::1;::::0;35451:15:::1;::::0;35228:249:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;35493:29;35510:11;35493:29;;;;1361:25:1::0;;1349:2;1334:18;;1215:177;35493:29:0::1;;;;;;;;34904:626;34841:689:::0;:::o;12573:380::-;-1:-1:-1;;;;;12709:19:0;;12701:68;;;;-1:-1:-1;;;12701:68:0;;15856:2:1;12701:68:0;;;15838:21:1;15895:2;15875:18;;;15868:30;15934:34;15914:18;;;15907:62;-1:-1:-1;;;15985:18:1;;;15978:34;16029:19;;12701:68:0;15654:400:1;12701:68:0;-1:-1:-1;;;;;12788:21:0;;12780:68;;;;-1:-1:-1;;;12780:68:0;;16261:2:1;12780:68:0;;;16243:21:1;16300:2;16280:18;;;16273:30;16339:34;16319:18;;;16312:62;-1:-1:-1;;;16390:18:1;;;16383:32;16432:19;;12780:68:0;16059:398:1;12780:68:0;-1:-1:-1;;;;;12861:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12913:32;;1361:25:1;;;12913:32:0;;1334:18:1;12913:32:0;;;;;;;12573:380;;;:::o;25850:5887::-;-1:-1:-1;;;;;25982:18:0;;25974:68;;;;-1:-1:-1;;;25974:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26061:16:0;;26053:64;;;;-1:-1:-1;;;26053:64:0;;;;;;;:::i;:::-;26145:1;26136:6;:10;26128:52;;;;-1:-1:-1;;;26128:52:0;;17474:2:1;26128:52:0;;;17456:21:1;17513:2;17493:18;;;17486:30;17552:31;17532:18;;;17525:59;17601:18;;26128:52:0;17272:353:1;26128:52:0;26198:13;;;;;;;26193:183;;-1:-1:-1;;;;;26254:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26283:23:0;;;;;;:19;:23;;;;;;;;26254:52;26228:136;;;;-1:-1:-1;;;26228:136:0;;17832:2:1;26228:136:0;;;17814:21:1;17871:2;17851:18;;;17844:30;-1:-1:-1;;;17890:18:1;;;17883:52;17952:18;;26228:136:0;17630:346:1;26228:136:0;26392:18;;:22;26388:247;;-1:-1:-1;;;;;26458:17:0;;;;;;:11;:17;;;;;;;;26457:18;;:35;;-1:-1:-1;13369:6:0;;-1:-1:-1;;;;;26479:13:0;;;13369:6;;26479:13;26457:35;:60;;;-1:-1:-1;;;;;;26496:21:0;;26510:6;26496:21;26457:60;26431:192;;;;-1:-1:-1;;;26431:192:0;;18183:2:1;26431:192:0;;;18165:21:1;18222:2;18202:18;;;18195:30;18261:34;18241:18;;;18234:62;18332:34;18312:18;;;18305:62;-1:-1:-1;;;18383:19:1;;;18376:37;18430:19;;26431:192:0;17981:474:1;26431:192:0;26651:14;;;;26647:2352;;;13369:6;;-1:-1:-1;;;;;26704:15:0;;;13369:6;;26704:15;;;;:49;;-1:-1:-1;13369:6:0;;-1:-1:-1;;;;;26740:13:0;;;13369:6;;26740:13;;26704:49;:86;;;;-1:-1:-1;;;;;;26774:16:0;;;;26704:86;:128;;;;-1:-1:-1;;;;;;26811:21:0;;26825:6;26811:21;;26704:128;:175;;;;-1:-1:-1;;;;;;26854:25:0;;;;;;:19;:25;;;;;;;;26853:26;26704:175;:220;;;;-1:-1:-1;;;;;;26901:23:0;;;;;;:19;:23;;;;;;;;26900:24;26704:220;26682:2306;;;27095:20;;;;27091:705;;;27158:15;;-1:-1:-1;;;;;27144:30:0;;;27158:15;;27144:30;;;;:62;;-1:-1:-1;27192:13:0;;-1:-1:-1;;;;;27178:28:0;;;27192:13;;27178:28;;27144:62;27140:637;;;27348:16;27363:1;27348:12;:16;:::i;:::-;27302:9;27273:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;27469:16:0;27484:1;27469:12;:16;:::i;:::-;-1:-1:-1;;;;;27401:32:0;;;;;;:28;:32;;;;;;:84;27273:212;27235:363;;;;-1:-1:-1;;;27235:363:0;;18795:2:1;27235:363:0;;;18777:21:1;18834:2;18814:18;;;18807:30;18873:34;18853:18;;;18846:62;-1:-1:-1;;;18924:18:1;;;18917:51;18985:19;;27235:363:0;18593:417:1;27235:363:0;27654:9;27625:39;;;;:28;:39;;;;;;27667:12;27625:54;;;;-1:-1:-1;;;;;27706:32:0;;;;;;:47;27140:637;-1:-1:-1;;;;;27870:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;27927:35:0;;;;;;:31;:35;;;;;;;;27926:36;27870:92;27844:1129;;;28049:12;;28039:6;:22;;28005:148;;;;-1:-1:-1;;;28005:148:0;;19217:2:1;28005:148:0;;;19199:21:1;19256:2;19236:18;;;19229:30;19295:34;19275:18;;;19268:62;-1:-1:-1;;;19346:18:1;;;19339:38;19394:19;;28005:148:0;19015:404:1;28005:148:0;28236:15;;-1:-1:-1;;;;;6583:18:0;;6551:7;6583:18;;;;;;;;;;;28210:22;;:6;:22;:::i;:::-;:41;;28176:151;;;;-1:-1:-1;;;28176:151:0;;19626:2:1;28176:151:0;;;19608:21:1;19665:2;19645:18;;;19638:30;-1:-1:-1;;;19684:18:1;;;19677:54;19748:18;;28176:151:0;19424:348:1;28176:151:0;27844:1129;;;-1:-1:-1;;;;;28425:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;28480:37:0;;;;;;:31;:37;;;;;;;;28479:38;28425:92;28399:574;;;28604:13;;28594:6;:23;;28560:151;;;;-1:-1:-1;;;28560:151:0;;19979:2:1;28560:151:0;;;19961:21:1;20018:2;19998:18;;;19991:30;20057:34;20037:18;;;20030:62;-1:-1:-1;;;20108:18:1;;;20101:40;20158:19;;28560:151:0;19777:406:1;28399:574:0;-1:-1:-1;;;;;28742:35:0;;;;;;:31;:35;;;;;;;;28737:236;;28862:15;;-1:-1:-1;;;;;6583:18:0;;6551:7;6583:18;;;;;;;;;;;28836:22;;:6;:22;:::i;:::-;:41;;28802:151;;;;-1:-1:-1;;;28802:151:0;;19626:2:1;28802:151:0;;;19608:21:1;19665:2;19645:18;;;19638:30;-1:-1:-1;;;19684:18:1;;;19677:54;19748:18;;28802:151:0;19424:348:1;28802:151:0;-1:-1:-1;;;;;29023:31:0;;;;;;:25;:31;;;;;;;;29019:292;;;-1:-1:-1;;;;;29075:32:0;;;;;;:28;:32;;;;;;:37;;29071:128;;-1:-1:-1;;;;;29133:32:0;;;;;;:28;:32;;;;;29168:15;29133:50;;29071:128;29019:292;;;29236:8;;-1:-1:-1;;;29236:8:0;;;;29231:69;;29265:12;:19;;-1:-1:-1;;;;;;29265:19:0;-1:-1:-1;;;;;29265:19:0;;;;;29231:69;29341:11;;;;;;;:37;;;;-1:-1:-1;29370:8:0;;-1:-1:-1;;;29370:8:0;;;;29369:9;29341:37;:86;;;;-1:-1:-1;;;;;;29396:31:0;;;;;;:25;:31;;;;;;;;29395:32;29341:86;:129;;;;-1:-1:-1;;;;;;29445:25:0;;;;;;:19;:25;;;;;;;;29444:26;29341:129;:170;;;;-1:-1:-1;;;;;;29488:23:0;;;;;;:19;:23;;;;;;;;29487:24;29341:170;29323:302;;;29538:8;:15;;-1:-1:-1;;;;29538:15:0;-1:-1:-1;;;29538:15:0;;;29568:14;29577:4;29568:8;:14::i;:::-;29597:8;:16;;-1:-1:-1;;;;29597:16:0;;;29323:302;-1:-1:-1;;;;;29756:25:0;;29637:12;29756:25;;;:19;:25;;;;;;29652:4;;29756:25;;;:52;;-1:-1:-1;;;;;;29785:23:0;;;;;;:19;:23;;;;;;;;29756:52;29752:100;;;-1:-1:-1;29835:5:0;29752:100;29864:12;29969:7;29965:1719;;;25816:18;;25801:12;:33;30051:77;;;;-1:-1:-1;;;;;;30097:31:0;;;;;;:25;:31;;;;;;;;30051:77;:128;;;;-1:-1:-1;;;;;;30150:29:0;;;;;;:25;:29;;;;;;;;30149:30;30051:128;:165;;;;;30215:1;30200:12;;:16;30051:165;30029:1506;;;-1:-1:-1;;;;;30256:15:0;;;;;;:11;:15;;;;;;;;30251:173;;-1:-1:-1;;;;;30296:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;30296:22:0;30314:4;30296:22;;;;;;30341:10;:15;;30314:4;;30341:10;;:15;;30314:4;;30341:15;:::i;:::-;;;;-1:-1:-1;;30384:20:0;;-1:-1:-1;;;;;2708:32:1;;2690:51;;30384:20:0;;2678:2:1;2663:18;30384:20:0;;;;;;;30251:173;30467:3;30452:11;:6;30461:2;30452:11;:::i;:::-;30451:19;;;;:::i;:::-;30444:26;;30538:12;;30519:15;;30512:4;:22;;;;:::i;:::-;30511:39;;;;:::i;:::-;30489:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30612:12:0;;30596;;30589:19;;:4;:19;:::i;:::-;30588:36;;;;:::i;:::-;30569:15;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;30692:12:0;;30673:15;;30666:22;;:4;:22;:::i;:::-;30665:39;;;;:::i;:::-;30643:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;30029:1506:0;;-1:-1:-1;30029:1506:0;;-1:-1:-1;;;;;30767:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30816:1;30800:13;;:17;30767:50;30763:772;;;30872:3;30855:13;;30846:6;:22;;;;:::i;:::-;30845:30;;;;:::i;:::-;30838:37;;30944:13;;30924:16;;30917:4;:23;;;;:::i;:::-;30916:41;;;;:::i;:::-;30894:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;31020:13:0;;31003;;30996:20;;:4;:20;:::i;:::-;30995:38;;;;:::i;:::-;30976:15;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;31102:13:0;;31082:16;;31075:23;;:4;:23;:::i;30763:772::-;-1:-1:-1;;;;;31177:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;31227:1;31212:12;;:16;31177:51;31173:362;;;31282:3;31266:12;;31257:6;:21;;;;:::i;:::-;31256:29;;;;:::i;:::-;31249:36;;31353:12;;31334:15;;31327:4;:22;;;;:::i;:::-;31326:39;;;;:::i;:::-;31304:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;31427:12:0;;31411;;31404:19;;:4;:19;:::i;:::-;31403:36;;;;:::i;:::-;31384:15;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;31507:12:0;;31488:15;;31481:22;;:4;:22;:::i;:::-;31480:39;;;;:::i;:::-;31458:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;31173:362:0;31555:8;;31551:91;;31584:42;31600:4;31614;31621;31584:15;:42::i;:::-;31658:14;31668:4;31658:14;;:::i;:::-;;;29965:1719;31696:33;31712:4;31718:2;31722:6;31696:15;:33::i;32115:1615::-;32213:4;32169:23;6583:18;;;;;;;;;;;32169:50;;32230:25;32323:18;;32292:15;;32258:18;;:49;;;;:::i;:::-;:83;;;;:::i;:::-;32230:111;-1:-1:-1;32358:20:0;;;:46;;-1:-1:-1;32382:22:0;;32358:46;32354:85;;;32421:7;;32115:1615;:::o;32354:85::-;32473:18;;:23;;32494:2;32473:23;:::i;:::-;32455:15;:41;32451:115;;;32531:18;;:23;;32552:2;32531:23;:::i;:::-;32513:41;;32451:115;32627:23;32740:1;32707:17;32672:18;;32654:15;:36;;;;:::i;:::-;32653:71;;;;:::i;:::-;:88;;;;:::i;:::-;32627:114;-1:-1:-1;32754:51:0;32771:33;32627:114;32771:15;:33;:::i;:::-;32754:16;:51::i;:::-;33011:18;;32839:21;;;;32818:18;;33011:22;;33032:1;;33011:22;:::i;:::-;32990:44;;:17;:44;:::i;:::-;32957:15;;32944:28;;:10;:28;:::i;:::-;32943:92;;;;:::i;:::-;32920:115;;33046:23;33164:1;33143:18;;:22;;;;:::i;:::-;33122:44;;:17;:44;:::i;:::-;33086:18;;33073:31;;:10;:31;:::i;:::-;33072:95;;;;:::i;:::-;33046:121;-1:-1:-1;33199:30:0;33046:121;33199:12;:30;:::i;:::-;33180:49;;;;:::i;:::-;33263:1;33242:18;:22;;;33275:15;:19;;;33305:18;:22;33180:49;-1:-1:-1;33344:19:0;;;;;:42;;;33385:1;33367:15;:19;33344:42;33340:121;;;33403:46;33416:15;33433;33403:12;:46::i;:::-;33512:13;;33504:55;;33474:24;;-1:-1:-1;;;;;33512:13:0;;33539:15;;33474:24;33504:55;33474:24;33504:55;33539:15;33512:13;33504:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33473:86;;;33578:19;33570:28;;;;;;33645:10;;33637:49;;33610:21;;-1:-1:-1;;;;;33645:10:0;;33669:12;;33610:21;33637:49;33610:21;33637:49;33669:12;33645:10;33637:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33609:77;;;33705:16;33697:25;;;;;;32158:1572;;;;;;;;;32115:1615;:::o;24618:240::-;-1:-1:-1;;;;;24701:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;24701:39:0;;;;;;;24753;24701:31;:39;24753:26;:39::i;11034:651::-;-1:-1:-1;;;;;11174:20:0;;11166:70;;;;-1:-1:-1;;;11166:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11255:23:0;;11247:71;;;;-1:-1:-1;;;11247:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11355:17:0;;11331:21;11355:17;;;;;;;;;;;11405:23;;;;11383:111;;;;-1:-1:-1;;;11383:111:0;;20390:2:1;11383:111:0;;;20372:21:1;20429:2;20409:18;;;20402:30;20468:34;20448:18;;;20441:62;-1:-1:-1;;;20519:18:1;;;20512:36;20565:19;;11383:111:0;20188:402:1;11383:111:0;-1:-1:-1;;;;;11530:17:0;;;:9;:17;;;;;;;;;;;11550:22;;;11530:42;;11594:20;;;;;;;;:30;;11566:6;;11530:9;11594:30;;11566:6;;11594:30;:::i;:::-;;;;;;;;11659:9;-1:-1:-1;;;;;11642:35:0;11651:6;-1:-1:-1;;;;;11642:35:0;;11670:6;11642:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;11642:35:0;;;;;;;;11155:530;11034:651;;;:::o;33738:589::-;33888:16;;;33902:1;33888:16;;;;;;;;33864:21;;33888:16;;;;;;;;;;-1:-1:-1;33888:16:0;33864:40;;33933:4;33915;33920:1;33915:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33915:23:0;;;:7;;;;;;;;;;:23;;;;33959:15;;:22;;;-1:-1:-1;;;33959:22:0;;;;:15;;;;;:20;;:22;;;;;33915:7;;33959:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33949:4;33954:1;33949:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33949:32:0;;;:7;;;;;;;;;:32;34026:15;;33994:62;;34011:4;;34026:15;34044:11;33994:8;:62::i;:::-;34095:15;;:224;;-1:-1:-1;;;34095:224:0;;-1:-1:-1;;;;;34095:15:0;;;;:66;;:224;;34176:11;;34095:15;;34246:4;;34273;;34293:15;;34095:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33793:534;33738:589;:::o;22096:521::-;22276:15;;22244:62;;22261:4;;-1:-1:-1;;;;;22276:15:0;22294:11;22244:8;:62::i;:::-;22349:15;;:260;;-1:-1:-1;;;22349:260:0;;22421:4;22349:260;;;21523:34:1;21573:18;;;21566:34;;;22349:15:0;21616:18:1;;;21609:34;;;21659:18;;;21652:34;22561:6:0;21702:19:1;;;21695:44;22583:15:0;21755:19:1;;;21748:35;-1:-1:-1;;;;;22349:15:0;;;;:31;;22388:9;;21457:19:1;;22349:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20790:221::-;-1:-1:-1;;;;;20892:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;20892:52:0;;;;;;;;;;20960:43;;22273:51:1;;;22340:18;;;22333:50;20960:43:0;;22246:18:1;20960:43:0;22105:284:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;:::-;1633:5;1397:247;-1:-1:-1;;;1397:247:1:o;1649:118::-;1735:5;1728:13;1721:21;1714:5;1711:32;1701:60;;1757:1;1754;1747:12;1772:750;1864:6;1872;1880;1933:2;1921:9;1912:7;1908:23;1904:32;1901:52;;;1949:1;1946;1939:12;1901:52;1989:9;1976:23;2018:18;2059:2;2051:6;2048:14;2045:34;;;2075:1;2072;2065:12;2045:34;2113:6;2102:9;2098:22;2088:32;;2158:7;2151:4;2147:2;2143:13;2139:27;2129:55;;2180:1;2177;2170:12;2129:55;2220:2;2207:16;2246:2;2238:6;2235:14;2232:34;;;2262:1;2259;2252:12;2232:34;2317:7;2310:4;2300:6;2297:1;2293:14;2289:2;2285:23;2281:34;2278:47;2275:67;;;2338:1;2335;2328:12;2275:67;2369:4;2361:13;;;;-1:-1:-1;2393:6:1;-1:-1:-1;;2434:20:1;;2421:34;2464:28;2421:34;2464:28;:::i;:::-;2511:5;2501:15;;;1772:750;;;;;:::o;2752:456::-;2829:6;2837;2845;2898:2;2886:9;2877:7;2873:23;2869:32;2866:52;;;2914:1;2911;2904:12;2866:52;2953:9;2940:23;2972:31;2997:5;2972:31;:::i;:::-;3022:5;-1:-1:-1;3079:2:1;3064:18;;3051:32;3092:33;3051:32;3092:33;:::i;:::-;2752:456;;3144:7;;-1:-1:-1;;;3198:2:1;3183:18;;;;3170:32;;2752:456::o;3213:180::-;3272:6;3325:2;3313:9;3304:7;3300:23;3296:32;3293:52;;;3341:1;3338;3331:12;3293:52;-1:-1:-1;3364:23:1;;3213:180;-1:-1:-1;3213:180:1:o;3795:382::-;3860:6;3868;3921:2;3909:9;3900:7;3896:23;3892:32;3889:52;;;3937:1;3934;3927:12;3889:52;3976:9;3963:23;3995:31;4020:5;3995:31;:::i;:::-;4045:5;-1:-1:-1;4102:2:1;4087:18;;4074:32;4115:30;4074:32;4115:30;:::i;:::-;4164:7;4154:17;;;3795:382;;;;;:::o;4182:316::-;4259:6;4267;4275;4328:2;4316:9;4307:7;4303:23;4299:32;4296:52;;;4344:1;4341;4334:12;4296:52;-1:-1:-1;;4367:23:1;;;4437:2;4422:18;;4409:32;;-1:-1:-1;4488:2:1;4473:18;;;4460:32;;4182:316;-1:-1:-1;4182:316:1:o;4503:388::-;4571:6;4579;4632:2;4620:9;4611:7;4607:23;4603:32;4600:52;;;4648:1;4645;4638:12;4600:52;4687:9;4674:23;4706:31;4731:5;4706:31;:::i;:::-;4756:5;-1:-1:-1;4813:2:1;4798:18;;4785:32;4826:33;4785:32;4826:33;:::i;4896:380::-;4975:1;4971:12;;;;5018;;;5039:61;;5093:4;5085:6;5081:17;5071:27;;5039:61;5146:2;5138:6;5135:14;5115:18;5112:38;5109:161;;5192:10;5187:3;5183:20;5180:1;5173:31;5227:4;5224:1;5217:15;5255:4;5252:1;5245:15;5109:161;;4896:380;;;:::o;5281:356::-;5483:2;5465:21;;;5502:18;;;5495:30;5561:34;5556:2;5541:18;;5534:62;5628:2;5613:18;;5281:356::o;5642:127::-;5703:10;5698:3;5694:20;5691:1;5684:31;5734:4;5731:1;5724:15;5758:4;5755:1;5748:15;5774:127;5835:10;5830:3;5826:20;5823:1;5816:31;5866:4;5863:1;5856:15;5890:4;5887:1;5880:15;5906:135;5945:3;5966:17;;;5963:43;;5986:18;;:::i;:::-;-1:-1:-1;6033:1:1;6022:13;;5906:135::o;6807:168::-;6880:9;;;6911;;6928:15;;;6922:22;;6908:37;6898:71;;6949:18;;:::i;6980:217::-;7020:1;7046;7036:132;;7090:10;7085:3;7081:20;7078:1;7071:31;7125:4;7122:1;7115:15;7153:4;7150:1;7143:15;7036:132;-1:-1:-1;7182:9:1;;6980:217::o;7612:125::-;7677:9;;;7698:10;;;7695:36;;;7711:18;;:::i;8943:353::-;9145:2;9127:21;;;9184:2;9164:18;;;9157:30;9223:31;9218:2;9203:18;;9196:59;9287:2;9272:18;;8943:353::o;11436:251::-;11506:6;11559:2;11547:9;11538:7;11534:23;11530:32;11527:52;;;11575:1;11572;11565:12;11527:52;11607:9;11601:16;11626:31;11651:5;11626:31;:::i;12072:245::-;12139:6;12192:2;12180:9;12171:7;12167:23;12163:32;12160:52;;;12208:1;12205;12198:12;12160:52;12240:9;12234:16;12259:28;12281:5;12259:28;:::i;12322:461::-;12375:3;12413:5;12407:12;12440:6;12435:3;12428:19;12466:4;12495:2;12490:3;12486:12;12479:19;;12532:2;12525:5;12521:14;12553:1;12563:195;12577:6;12574:1;12571:13;12563:195;;;12642:13;;-1:-1:-1;;;;;12638:39:1;12626:52;;12698:12;;;;12733:15;;;;12674:1;12592:9;12563:195;;;-1:-1:-1;12774:3:1;;12322:461;-1:-1:-1;;;;;12322:461:1:o;12788:510::-;13059:6;13048:9;13041:25;13102:3;13097:2;13086:9;13082:18;13075:31;13022:4;13123:57;13175:3;13164:9;13160:19;13152:6;13123:57;:::i;:::-;-1:-1:-1;;;;;13216:32:1;;;;13211:2;13196:18;;13189:60;-1:-1:-1;13280:2:1;13265:18;13258:34;13115:65;12788:510;-1:-1:-1;;12788:510:1:o;16462:401::-;16664:2;16646:21;;;16703:2;16683:18;;;16676:30;16742:34;16737:2;16722:18;;16715:62;-1:-1:-1;;;16808:2:1;16793:18;;16786:35;16853:3;16838:19;;16462:401::o;16868:399::-;17070:2;17052:21;;;17109:2;17089:18;;;17082:30;17148:34;17143:2;17128:18;;17121:62;-1:-1:-1;;;17214:2:1;17199:18;;17192:33;17257:3;17242:19;;16868:399::o;18460:128::-;18527:9;;;18548:11;;;18545:37;;;18562:18;;:::i;20595:582::-;20894:6;20883:9;20876:25;20937:6;20932:2;20921:9;20917:18;20910:34;20980:3;20975:2;20964:9;20960:18;20953:31;20857:4;21001:57;21053:3;21042:9;21038:19;21030:6;21001:57;:::i;:::-;-1:-1:-1;;;;;21094:32:1;;;;21089:2;21074:18;;21067:60;-1:-1:-1;21158:3:1;21143:19;21136:35;20993:65;20595:582;-1:-1:-1;;;20595:582:1:o;21794:306::-;21882:6;21890;21898;21951:2;21939:9;21930:7;21926:23;21922:32;21919:52;;;21967:1;21964;21957:12;21919:52;21996:9;21990:16;21980:26;;22046:2;22035:9;22031:18;22025:25;22015:35;;22090:2;22079:9;22075:18;22069:25;22059:35;;21794:306;;;;;:::o

Swarm Source

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