ETH Price: $3,863.08 (+7.05%)

Token

WWF Token (WWF)
 

Overview

Max Total Supply

316,000,000 WWF

Holders

119

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Circle: USDC Token
Balance
388,049.367830200860453581 WWF

Value
$0.00
0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
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:
WWFToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-16
*/

/**
 *Submitted for verification at Etherscan.io on 2022-12-19
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

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

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

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

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

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

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

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

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

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

    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

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

    function WETH() external pure returns (address);

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

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

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

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

    function symbol() external view returns (string memory);

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

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

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

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

	function functionCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return functionCall(target, data, "Address: low-level call failed");
	}

	function functionCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value
	) internal returns (bytes memory) {
		return
		functionCallWithValue(
			target,
			data,
			value,
			"Address: low-level call with value failed"
		);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(
			address(this).balance >= value,
			"Address: insufficient balance for call"
		);
		require(isContract(target), "Address: call to non-contract");

		(bool success, bytes memory returndata) = target.call{value: value}(
		data
		);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionStaticCall(address target, bytes memory data)
	internal
	view
	returns (bytes memory)
	{
		return
		functionStaticCall(
			target,
			data,
			"Address: low-level static call failed"
		);
	}

	function functionStaticCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");

		(bool success, bytes memory returndata) = target.staticcall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionDelegateCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return
		functionDelegateCall(
			target,
			data,
			"Address: low-level delegate call failed"
		);
	}

	function functionDelegateCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");

		(bool success, bytes memory returndata) = target.delegatecall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function _verifyCallResult(
		bool success,
		bytes memory returndata,
		string memory errorMessage
	) private pure returns (bytes memory) {
		if (success) {
			return returndata;
		} else {
			if (returndata.length > 0) {
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

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

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() public 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 ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }


    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract WWFToken is Ownable, ERC20 {
    using Address for address;

    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "WWF Token";
    string private constant _symbol = "WWF";

    bool public isTradingEnabled;

    uint256 public initialSupply = 316000000 * (10**18);

    // max buy and sell tx is 100% of initialSupply
    uint256 public maxTxAmount = initialSupply;

    // max wallet is 1% of initialSupply
    uint256 public maxWalletAmount = initialSupply * 200 / 10000;

    bool private _swapping;
    uint256 public minimumTokensBeforeSwap = initialSupply * 1 / 100000;

    address public liquidity1Wallet;
    address public liquidity2Wallet;
    address public operationsWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 liquidity1FeeOnBuy;
        uint8 liquidity1FeeOnSell;
        uint8 liquidity2FeeOnBuy;
        uint8 liquidity2FeeOnSell;
        uint8 operationsFeeOnBuy;
        uint8 operationsFeeOnSell;
    }

    // Base taxes
    CustomTaxPeriod private _base = CustomTaxPeriod("base", 0, 0, 0, 0, 0, 15);

    bool private _isLaunched;
    bool public _launchTokensClaimed;
    uint256 private _launchStartTimestamp;
    uint256 private _launchBlockNumber;
    uint256 public launchTokens;

    mapping (address => bool) private _isBlocked;
    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _feeOnSelectedWalletTransfers;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _liquidity1Fee;
    uint8 private _liquidity2Fee;
    uint8 private _operationsFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
    event BlockedAccountChange(address indexed holder, bool indexed status);
    event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
    event WalletChange(string indexed indentifier,address indexed newWallet,address indexed oldWallet);
    event FeeChange(string indexed identifier,uint8 liquidity1Fee,uint8 liquidity2Fee,uint8 operationsFee);
    event CustomTaxPeriodChange(uint256 indexed newValue,uint256 indexed oldValue,string indexed taxType,bytes23 period);
    event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
    event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
    event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
    event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue);
    event ClaimOverflow(address token, uint256 amount);
    event TradingStatusChange(bool indexed newValue, bool indexed oldValue);
    event FeesApplied(uint8 liquidity1Fee,uint8 liquidity2Fee,uint8 operationsFee,uint8 totalFee);

    constructor() ERC20(_name, _symbol) {
        liquidity1Wallet = owner();
        liquidity2Wallet = owner();
        operationsWallet = owner();

        IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _isAllowedToTradeWhenDisabled[owner()] = true;
        _isAllowedToTradeWhenDisabled[address(this)] = true;

        _isExcludedFromMaxTransactionLimit[address(this)] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;

        _mint(owner(), initialSupply);
    }

    receive() external payable {}

    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
        if(_launchBlockNumber == 0) {
            _launchBlockNumber = block.number;
            _launchStartTimestamp = block.timestamp;
            _isLaunched = true;
        }
        emit TradingStatusChange(true, false);
    }
    function deactivateTrading() external onlyOwner {
        isTradingEnabled = false;
        emit TradingStatusChange(false, true);
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value,"WWF: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit AutomatedMarketMakerPairChange(pair, value);
    }
    function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }
    function blockAccount(address account) external onlyOwner {
        require(!_isBlocked[account], "WWF: Account is already blocked");
        if (_isLaunched) {
            require((block.timestamp - _launchStartTimestamp) < 172800, "WWF: Time to block accounts has expired");
        }
        _isBlocked[account] = true;
        emit BlockedAccountChange(account, true);
    }
    function unblockAccount(address account) external onlyOwner {
        require(_isBlocked[account], "WWF: Account is not blcoked");
        _isBlocked[account] = false;
        emit BlockedAccountChange(account, false);
    }
    function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner {
        require(_feeOnSelectedWalletTransfers[account] != value,"WWF: The selected wallet is already set to the value ");
        _feeOnSelectedWalletTransfers[account] = value;
        emit FeeOnSelectedWalletTransfersChange(account, value);
    }
    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFee[account] != excluded,"WWF: Account is already the value of 'excluded'");
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }
    function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxTransactionLimit[account] != excluded,"WWF: Account is already the value of 'excluded'");
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }
    function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxWalletLimit[account] != excluded,"WWF: Account is already the value of 'excluded'");
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }
    function setWallets(address newLiquidity1Wallet,address newLiquidity2Wallet,address newOperationsWallet) external onlyOwner {
        if (liquidity1Wallet != newLiquidity1Wallet) {
            require(newLiquidity1Wallet != address(0), "WWF: The liquidity1Wallet cannot be 0");
            emit WalletChange("liquidity1Wallet", newLiquidity1Wallet, liquidity1Wallet);
            liquidity1Wallet = newLiquidity1Wallet;
        }
        if (liquidity2Wallet != newLiquidity2Wallet) {
            require(newLiquidity2Wallet != address(0), "WWF: The liquidity2Wallet cannot be 0");
            emit WalletChange("liquidity2Wallet", newLiquidity2Wallet, liquidity2Wallet);
            liquidity2Wallet = newLiquidity2Wallet;
        }
        if (operationsWallet != newOperationsWallet) {
            require(newOperationsWallet != address(0), "WWF: The operationsWallet cannot be 0");
            emit WalletChange("operationsWallet", newOperationsWallet, operationsWallet);
            operationsWallet = newOperationsWallet;
        }
    }
    // Base fees
    function setBaseFeesOnBuy(uint8 _liquidity1FeeOnBuy,uint8 _liquidity2FeeOnBuy,uint8 _operationsFeeOnBuy) external onlyOwner {
        _setCustomBuyTaxPeriod(_base,_liquidity1FeeOnBuy,_liquidity2FeeOnBuy,_operationsFeeOnBuy);
        emit FeeChange("baseFees-Buy",_liquidity1FeeOnBuy,_liquidity2FeeOnBuy,_operationsFeeOnBuy);
    }
    function setBaseFeesOnSell(uint8 _liquidity1FeeOnSell,uint8 _liquidity2FeeOnSell,uint8 _operationsFeeOnSell) external onlyOwner {
        _setCustomSellTaxPeriod(_base,_liquidity1FeeOnSell,_liquidity2FeeOnSell,_operationsFeeOnSell);
        emit FeeChange("baseFees-Sell",_liquidity1FeeOnSell,_liquidity2FeeOnSell,_operationsFeeOnSell);
    }
    function setUniswapRouter(address newAddress) external onlyOwner {
        require(newAddress != address(uniswapV2Router),"WWF: The router already has that address");
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
    }
    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxTxAmount, "WWF: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }
    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxWalletAmount,"WWF: Cannot update maxWalletAmount to same value");
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }
    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(newValue != minimumTokensBeforeSwap,"WWF: Cannot update minimumTokensBeforeSwap to same value");
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }
    function claimLaunchTokens() external onlyOwner {
		require(_launchStartTimestamp > 0, "WWF: Launch must have occurred");
		require(!_launchTokensClaimed, "WWF: Launch tokens have already been claimed");
		require(block.number - _launchBlockNumber > 5, "WWF: Only claim launch tokens after launch");
		uint256 tokenBalance = balanceOf(address(this));
		_launchTokensClaimed = true;
		require(launchTokens <= tokenBalance, "WWF: A swap and liquify has already occurred");
		uint256 amount = launchTokens;
		launchTokens = 0;
        (bool success) = IERC20(address(this)).transfer(owner(), amount);
        if (success){
            emit ClaimOverflow(address(this), amount);
        }
    }
    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(amount <= address(this).balance, "WWF: Cannot send more than contract balance");
        (bool success, ) = address(owner()).call{ value: amount }("");
        if (success) {
            emit ClaimOverflow(uniswapV2Router.WETH(), amount);
        }
    }

    // Getters
    function getBaseBuyFees() external view returns (uint8,uint8,uint8) {
        return (_base.liquidity1FeeOnBuy,_base.liquidity2FeeOnBuy,_base.operationsFeeOnBuy);
    }
    function getBaseSellFees() external view returns (uint8,uint8,uint8) {
        return (_base.liquidity1FeeOnSell,_base.liquidity2FeeOnSell,_base.operationsFeeOnSell);
    }
    // Main
    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");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
            require(isTradingEnabled, "WWF: Trading is currently disabled.");
            require(!_isBlocked[to], "WWF: Account is blocked");
            require(!_isBlocked[from], "WWF: Account is blocked");
            if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
                require(amount <= maxTxAmount, "WWF: Buy amount exceeds the maxTxBuyAmount.");
            }
            if (!_isExcludedFromMaxWalletLimit[to]) {
                require((balanceOf(to) + amount) <= maxWalletAmount, "WWF: Expected wallet amount exceeds the maxWalletAmount.");
            }
        }

        _adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], from, to);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            amount = amount - fee;
            if (_launchStartTimestamp > 0 && (block.number - _launchBlockNumber <= 5)) {
                launchTokens += fee;
            }
            super._transfer(from, address(this), fee);
        }
        super._transfer(from, to, amount);
    }

    function _adjustTaxes(bool isBuyFromLp,bool isSelltoLp,address from,address to) private {
        _liquidity1Fee = 0;
        _liquidity2Fee = 0;
        _operationsFee = 0;

        if (isBuyFromLp) {
            if (_isLaunched && block.timestamp - _launchBlockNumber <= 5) {
                _liquidity1Fee = 100;
            } else {
                _liquidity1Fee = _base.liquidity1FeeOnBuy;
                _liquidity2Fee = _base.liquidity2FeeOnBuy;
                _operationsFee = _base.operationsFeeOnBuy;
            }
        }
        if (isSelltoLp) {
            _liquidity1Fee = _base.liquidity1FeeOnSell;
            _liquidity2Fee = _base.liquidity2FeeOnSell;
            _operationsFee = _base.operationsFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) {
            _liquidity1Fee = _base.liquidity1FeeOnBuy;
            _liquidity2Fee = _base.liquidity2FeeOnBuy;
            _operationsFee = _base.operationsFeeOnBuy;
        }
        _totalFee = _liquidity1Fee + _liquidity2Fee + _operationsFee;
        emit FeesApplied(_liquidity1Fee, _liquidity2Fee, _operationsFee, _totalFee);
    }

    function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidity1FeeOnSell,uint8 _liquidity2FeeOnSell,uint8 _operationsFeeOnSell) private {
        if (map.liquidity1FeeOnSell != _liquidity1FeeOnSell) {
            emit CustomTaxPeriodChange(_liquidity1FeeOnSell,map.liquidity1FeeOnSell,"liquidity1FeeOnSell",map.periodName);
            map.liquidity1FeeOnSell = _liquidity1FeeOnSell;
        }
        if (map.liquidity2FeeOnSell != _liquidity2FeeOnSell) {
            emit CustomTaxPeriodChange(_liquidity2FeeOnSell,map.liquidity2FeeOnSell,"liquidity2FeeOnSell",map.periodName);
            map.liquidity2FeeOnSell = _liquidity2FeeOnSell;
        }
        if (map.operationsFeeOnSell != _operationsFeeOnSell) {
            emit CustomTaxPeriodChange(_operationsFeeOnSell,map.operationsFeeOnSell,"operationsFeeOnSell",map.periodName);
            map.operationsFeeOnSell = _operationsFeeOnSell;
        }
    }
    function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidity1FeeOnBuy,uint8 _liquidity2FeeOnBuy,uint8 _operationsFeeOnBuy) private {
        if (map.liquidity1FeeOnBuy != _liquidity1FeeOnBuy) {
            emit CustomTaxPeriodChange(_liquidity1FeeOnBuy,map.liquidity1FeeOnBuy,"liquidity1FeeOnBuy",map.periodName);
            map.liquidity1FeeOnBuy = _liquidity1FeeOnBuy;
        }
        if (map.liquidity2FeeOnBuy != _liquidity2FeeOnBuy) {
            emit CustomTaxPeriodChange(_liquidity2FeeOnBuy,map.liquidity2FeeOnBuy,"liquidity2FeeOnBuy",map.periodName);
            map.liquidity2FeeOnBuy = _liquidity2FeeOnBuy;
        }
        if (map.operationsFeeOnBuy != _operationsFeeOnBuy) {
            emit CustomTaxPeriodChange(_operationsFeeOnBuy,map.operationsFeeOnBuy,"operationsFeeOnBuy",map.periodName);
            map.operationsFeeOnBuy = _operationsFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;

        uint256 amountToLiquify = (contractBalance * _liquidity1Fee) / _totalFee / 2;
        uint256 amountToSwap = contractBalance - amountToLiquify;

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee - (_liquidity1Fee / 2);
        uint256 amountETHLiquidity1 = (ETHBalanceAfterSwap * _liquidity1Fee) / totalETHFee / 2;
        uint256 amountETHLiquidity2 = (ETHBalanceAfterSwap * _liquidity2Fee) / totalETHFee;
        uint256 amountETHOperations = ETHBalanceAfterSwap - (amountETHLiquidity1  + amountETHLiquidity2);

        Address.sendValue(payable(operationsWallet),amountETHOperations);
        Address.sendValue(payable(liquidity2Wallet),amountETHLiquidity2);

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity1);
            emit SwapAndLiquify(amountToSwap, amountETHLiquidity1, amountToLiquify);
        }
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            1, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            liquidity1Wallet,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidity1Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liquidity2Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidity1Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liquidity2Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"_launchTokensClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLaunchTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"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":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity1Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity2Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"minimumTokensBeforeSwap","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":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidity1FeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidity2FeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidity1FeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_liquidity2FeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidity1Wallet","type":"address"},{"internalType":"address","name":"newLiquidity2Wallet","type":"address"},{"internalType":"address","name":"newOperationsWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526b0105639a5344f552bc00000060075560075460085561271060075460c86200002e91906200069b565b6200003a9190620006bb565b600955620186a060075460016200005291906200069b565b6200005e9190620006bb565b600b556040805160e081018252636261736560e01b8152600060208201819052918101829052606081018290526080810182905260a0810191909152600f60c090910181905280546001600160e81b0319167c0f00000000006261736500000000000000000000000000000000000000179055348015620000de57600080fd5b50604051806040016040528060098152602001682baba3102a37b5b2b760b91b815250604051806040016040528060038152602001622baba360e91b81525060006200012f620004c760201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600462000187838262000782565b50600562000196828262000782565b505060008054600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9350839163c45a01559160048083019260209291908290030181865afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a91906200084e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be91906200084e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033291906200084e565b600680546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000366816001620004cb565b6001601760006200037f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526017909252812080549092166001908117909255601590620003d86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601585528382208054871660019081179091556018865284832080548816821790558784168352601995869052848320805488168217905560065490931682528382208054871684179055815291822080549094168117909355620004776000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620004bf620004b66000546001600160a01b031690565b600754620005bb565b505062000896565b3390565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503620005675760405162461bcd60e51b815260206004820152603d60248201527f5757463a204175746f6d61746564206d61726b6574206d616b6572207061697260448201527f20697320616c72656164792073657420746f20746861742076616c756500000060648201526084015b60405180910390fd5b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620006135760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200055e565b806003600082825462000627919062000880565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620006b557620006b562000685565b92915050565b600082620006d957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200070957607f821691505b6020821081036200072a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200068057600081815260208120601f850160051c81016020861015620007595750805b601f850160051c820191505b818110156200077a5782815560010162000765565b505050505050565b81516001600160401b038111156200079e576200079e620006de565b620007b681620007af8454620006f4565b8462000730565b602080601f831160018114620007ee5760008415620007d55750858301515b600019600386901b1c1916600185901b1785556200077a565b600085815260208120601f198616915b828110156200081f57888601518255948401946001909101908401620007fe565b50858210156200083e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200086157600080fd5b81516001600160a01b03811681146200087957600080fd5b9392505050565b80820180821115620006b557620006b562000685565b608051613671620008b260003960006104e101526136716000f3fe60806040526004361061028c5760003560e01c806375cb1bd11161015a578063aee50b1e116100c1578063d32215761161007a578063d3221576146107e7578063dd62ed3e14610807578063e625724614610827578063f2fde38b14610847578063fd72e22a14610867578063fe0175351461088757600080fd5b8063aee50b1e146106ed578063b62496f51461070d578063bea9849e1461073d578063c02466681461075d578063cd43e2281461077d578063d2d7ad83146107d157600080fd5b80638da5cb5b116101135780638da5cb5b14610644578063924241e31461066257806395d89b4114610682578063a457c2d714610697578063a9059cbb146106b7578063aa4bde28146106d757600080fd5b806375cb1bd11461058e57806376dca835146105ae578063781edb3c146105ce5780637c0a893d146105ee578063880bcbc11461060e5780638c0b5e221461062e57600080fd5b806327a14fc2116101fe57806345a42329116101b757806345a42329146104af57806349bd5a5e146104cf5780634d78fdc6146105035780634f225e6d1461052357806370a0823114610543578063715018a61461057957600080fd5b806327a14fc2146104135780632cc25d1414610433578063313ce5671461044857806334cf1fea14610464578063378dc3dc14610479578063395093511461048f57600080fd5b806314fbc5f31161025057806314fbc5f3146103475780631694505e1461036657806318160ddd1461039e5780631e293c10146103bd5780631fcfefcd146103dd57806323b872dd146103f357600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f0578063098df585146103105780630bd05b691461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506006546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108bb565b6040516102c591906130d5565b3480156102fc57600080fd5b506102b961030b36600461313b565b61094d565b34801561031c57600080fd5b5061033061032b366004613167565b610967565b005b34801561033e57600080fd5b50610330610b0d565b34801561035357600080fd5b506010546102b990610100900460ff1681565b34801561037257600080fd5b50600654610386906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b3480156103aa57600080fd5b506003545b6040519081526020016102c5565b3480156103c957600080fd5b506103306103d8366004613167565b610b9a565b3480156103e957600080fd5b506103af60135481565b3480156103ff57600080fd5b506102b961040e366004613180565b610c5d565b34801561041f57600080fd5b5061033061042e366004613167565b610c81565b34801561043f57600080fd5b50610330610d48565b34801561045457600080fd5b50604051601281526020016102c5565b34801561047057600080fd5b50610330611002565b34801561048557600080fd5b506103af60075481565b34801561049b57600080fd5b506102b96104aa36600461313b565b611069565b3480156104bb57600080fd5b506103306104ca3660046131cf565b61108b565b3480156104db57600080fd5b506103867f000000000000000000000000000000000000000000000000000000000000000081565b34801561050f57600080fd5b5061033061051e366004613208565b6111a3565b34801561052f57600080fd5b50600d54610386906001600160a01b031681565b34801561054f57600080fd5b506103af61055e366004613208565b6001600160a01b031660009081526001602052604090205490565b34801561058557600080fd5b50610330611282565b34801561059a57600080fd5b506103306105a936600461322c565b6112f6565b3480156105ba57600080fd5b506103306105c936600461328d565b6115ff565b3480156105da57600080fd5b506103306105e93660046131cf565b6116a3565b3480156105fa57600080fd5b50610330610609366004613208565b611765565b34801561061a57600080fd5b506103306106293660046131cf565b6118c4565b34801561063a57600080fd5b506103af60085481565b34801561065057600080fd5b506000546001600160a01b0316610386565b34801561066e57600080fd5b50600c54610386906001600160a01b031681565b34801561068e57600080fd5b506102e3611986565b3480156106a357600080fd5b506102b96106b236600461313b565b611995565b3480156106c357600080fd5b506102b96106d236600461313b565b611a10565b3480156106e357600080fd5b506103af60095481565b3480156106f957600080fd5b50610330610708366004613167565b611a1e565b34801561071957600080fd5b506102b9610728366004613208565b601a6020526000908152604090205460ff1681565b34801561074957600080fd5b50610330610758366004613208565b611af2565b34801561076957600080fd5b506103306107783660046131cf565b611be8565b34801561078957600080fd5b50600f5460ff600160b81b8204811691600160c81b8104821691600160d81b909104165b6040805160ff948516815292841660208401529216918101919091526060016102c5565b3480156107dd57600080fd5b506103af600b5481565b3480156107f357600080fd5b506103306108023660046131cf565b611caa565b34801561081357600080fd5b506103af6108223660046132d0565b611d2c565b34801561083357600080fd5b5061033061084236600461328d565b611d57565b34801561085357600080fd5b50610330610862366004613208565b611dab565b34801561087357600080fd5b50600e54610386906001600160a01b031681565b34801561089357600080fd5b50600f5460ff600160c01b8204811691600160d01b8104821691600160e01b909104166107ad565b6060600480546108ca906132fe565b80601f01602080910402602001604051908101604052809291908181526020018280546108f6906132fe565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b60003361095b818585611e95565b60019150505b92915050565b6000546001600160a01b0316331461099a5760405162461bcd60e51b815260040161099190613338565b60405180910390fd5b478111156109fe5760405162461bcd60e51b815260206004820152602b60248201527f5757463a2043616e6e6f742073656e64206d6f7265207468616e20636f6e747260448201526a6163742062616c616e636560a81b6064820152608401610991565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a4b576040519150601f19603f3d011682016040523d82523d6000602084013e610a50565b606091505b505090508015610b0957600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae7919061336d565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610b375760405162461bcd60e51b815260040161099190613338565b6006805460ff60a01b1916600160a01b179055601254600003610b6a5743601255426011556010805460ff191660011790555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610bc45760405162461bcd60e51b815260040161099190613338565b6008548103610c2a5760405162461bcd60e51b815260206004820152602c60248201527f5757463a2043616e6e6f7420757064617465206d61785478416d6f756e74207460448201526b6f2073616d652076616c756560a01b6064820152608401610991565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610c6b858285611fb9565b610c76858585612033565b506001949350505050565b6000546001600160a01b03163314610cab5760405162461bcd60e51b815260040161099190613338565b6009548103610d155760405162461bcd60e51b815260206004820152603060248201527f5757463a2043616e6e6f7420757064617465206d617857616c6c6574416d6f7560448201526f6e7420746f2073616d652076616c756560801b6064820152608401610991565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610d725760405162461bcd60e51b815260040161099190613338565b600060115411610dc45760405162461bcd60e51b815260206004820152601e60248201527f5757463a204c61756e6368206d7573742068617665206f6363757272656400006044820152606401610991565b601054610100900460ff1615610e315760405162461bcd60e51b815260206004820152602c60248201527f5757463a204c61756e636820746f6b656e73206861766520616c72656164792060448201526b1899595b8818db185a5b595960a21b6064820152608401610991565b600560125443610e4191906133a0565b11610ea15760405162461bcd60e51b815260206004820152602a60248201527f5757463a204f6e6c7920636c61696d206c61756e636820746f6b656e732061666044820152690e8cae440d8c2eadcc6d60b31b6064820152608401610991565b306000908152600160205260409020546010805461ff001916610100179055601354811015610f275760405162461bcd60e51b815260206004820152602c60248201527f5757463a2041207377617020616e64206c6971756966792068617320616c726560448201526b18591e481bd8d8dd5c9c995960a21b6064820152608401610991565b60138054600091829055903063a9059cbb610f4a6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb91906133b3565b90508015610ffd5760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b6000546001600160a01b0316331461102c5760405162461bcd60e51b815260040161099190613338565b6006805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b60003361095b81858561107c8383611d2c565b61108691906133d0565b611e95565b6000546001600160a01b031633146110b55760405162461bcd60e51b815260040161099190613338565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036111435760405162461bcd60e51b815260206004820152603560248201527f5757463a205468652073656c65637465642077616c6c657420697320616c7265604482015274030b23c9039b2ba103a37903a3432903b30b63ab29605d1b6064820152608401610991565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146111cd5760405162461bcd60e51b815260040161099190613338565b6001600160a01b03811660009081526014602052604090205460ff166112355760405162461bcd60e51b815260206004820152601b60248201527f5757463a204163636f756e74206973206e6f7420626c636f6b656400000000006044820152606401610991565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146112ac5760405162461bcd60e51b815260040161099190613338565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113205760405162461bcd60e51b815260040161099190613338565b600c546001600160a01b03848116911614611413576001600160a01b0383166113995760405162461bcd60e51b815260206004820152602560248201527f5757463a20546865206c69717569646974793157616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610991565b600c546040516f1b1a5c5d5a591a5d1e4c55d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611506576001600160a01b03821661148c5760405162461bcd60e51b815260206004820152602560248201527f5757463a20546865206c69717569646974793257616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610991565b600d546040516f1b1a5c5d5a591a5d1e4c95d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610ffd576001600160a01b03811661157f5760405162461bcd60e51b815260206004820152602560248201527f5757463a20546865206f7065726174696f6e7357616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610991565b600e546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b031633146116295760405162461bcd60e51b815260040161099190613338565b611636600f84848461255c565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146116cd5760405162461bcd60e51b815260040161099190613338565b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361170d5760405162461bcd60e51b8152600401610991906133e3565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611197565b6000546001600160a01b0316331461178f5760405162461bcd60e51b815260040161099190613338565b6001600160a01b03811660009081526014602052604090205460ff16156117f85760405162461bcd60e51b815260206004820152601f60248201527f5757463a204163636f756e7420697320616c726561647920626c6f636b6564006044820152606401610991565b60105460ff1615611872576202a3006011544261181591906133a0565b106118725760405162461bcd60e51b815260206004820152602760248201527f5757463a2054696d6520746f20626c6f636b206163636f756e74732068617320604482015266195e1c1a5c995960ca1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146118ee5760405162461bcd60e51b815260040161099190613338565b6001600160a01b03821660009081526018602052604090205481151560ff90911615150361192e5760405162461bcd60e51b8152600401610991906133e3565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611197565b6060600580546108ca906132fe565b600033816119a38286611d2c565b905083811015611a035760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610991565b610c768286868403611e95565b60003361095b818585612033565b6000546001600160a01b03163314611a485760405162461bcd60e51b815260040161099190613338565b600b548103611abf5760405162461bcd60e51b815260206004820152603860248201527f5757463a2043616e6e6f7420757064617465206d696e696d756d546f6b656e7360448201527f4265666f72655377617020746f2073616d652076616c756500000000000000006064820152608401610991565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b815260040161099190613338565b6006546001600160a01b0390811690821603611b8b5760405162461bcd60e51b815260206004820152602860248201527f5757463a2054686520726f7574657220616c7265616479206861732074686174604482015267206164647265737360c01b6064820152608401610991565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c125760405162461bcd60e51b815260040161099190613338565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611c525760405162461bcd60e51b8152600401610991906133e3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611197565b6000546001600160a01b03163314611cd45760405162461bcd60e51b815260040161099190613338565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611197565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611d815760405162461bcd60e51b815260040161099190613338565b611d8e600f848484612713565b6040516b62617365466565732d42757960a01b8152600c01611650565b6000546001600160a01b03163314611dd55760405162461bcd60e51b815260040161099190613338565b6001600160a01b038116611e3a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611ef75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b038216611f585760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611fc58484611d2c565b9050600019811461202d57818110156120205760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610991565b61202d8484848403611e95565b50505050565b6001600160a01b0383166120595760405162461bcd60e51b815260040161099190613432565b6001600160a01b03821661207f5760405162461bcd60e51b815260040161099190613477565b8060000361209357610ffd838360006128c7565b6001600160a01b03831660009081526015602052604090205460ff161580156120d557506001600160a01b03821660009081526015602052604090205460ff16155b1561237357600654600160a01b900460ff1661213f5760405162461bcd60e51b815260206004820152602360248201527f5757463a2054726164696e672069732063757272656e746c792064697361626c60448201526232b21760e91b6064820152608401610991565b6001600160a01b03821660009081526014602052604090205460ff16156121a25760405162461bcd60e51b815260206004820152601760248201527615d5d18e881058d8dbdd5b9d081a5cc8189b1bd8dad959604a1b6044820152606401610991565b6001600160a01b03831660009081526014602052604090205460ff16156122055760405162461bcd60e51b815260206004820152601760248201527615d5d18e881058d8dbdd5b9d081a5cc8189b1bd8dad959604a1b6044820152606401610991565b6001600160a01b03821660009081526018602052604090205460ff1615801561224757506001600160a01b03831660009081526018602052604090205460ff16155b156122b2576008548111156122b25760405162461bcd60e51b815260206004820152602b60248201527f5757463a2042757920616d6f756e74206578636565647320746865206d61785460448201526a3c213abca0b6b7bab73a1760a91b6064820152608401610991565b6001600160a01b03821660009081526019602052604090205460ff1661237357600954816122f5846001600160a01b031660009081526001602052604090205490565b6122ff91906133d0565b11156123735760405162461bcd60e51b815260206004820152603860248201527f5757463a2045787065637465642077616c6c657420616d6f756e74206578636560448201527f65647320746865206d617857616c6c6574416d6f756e742e00000000000000006064820152608401610991565b6001600160a01b038084166000908152601a60205260408082205492851682529020546123a89160ff908116911685856129f8565b600b543060009081526001602052604090205460065491111590600160a01b900460ff1680156123d55750805b80156123e45750600a5460ff16155b80156123fb5750601b546301000000900460ff1615155b801561241f57506001600160a01b0383166000908152601a602052604090205460ff165b1561244457600a805460ff19166001179055612439612c20565b600a805460ff191690555b600a5460009060ff161580156124635750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff16806124a557506001600160a01b03841660009081526017602052604090205460ff165b156124ae575060005b8080156124c65750601b546301000000900460ff1615155b1561254a57601b546000906064906124e8906301000000900460ff16866134ba565b6124f291906134e7565b90506124fe81856133a0565b93506000601154118015612520575060056012544361251d91906133a0565b11155b1561253d57806013600082825461253791906133d0565b90915550505b6125488630836128c7565b505b6125558585856128c7565b5050505050565b835460ff848116600160c01b90920416146125ec57604051721b1a5c5d5a591a5d1e4c51995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160c01b83048116929087169160008051602061361c833981519152916125cd9160489190911b906134fb565b60405180910390a4835460ff60c01b1916600160c01b60ff8516021784555b835460ff838116600160d01b909204161461267c57604051721b1a5c5d5a591a5d1e4c91995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160d01b83048116929086169160008051602061361c8339815191529161265d9160489190911b906134fb565b60405180910390a4835460ff60d01b1916600160d01b60ff8416021784555b835460ff828116600160e01b909204161461202d57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160e01b83048116929085169160008051602061361c833981519152916126ed9160489190911b906134fb565b60405180910390a4835460ff8216600160e01b0260ff60e01b1990911617845550505050565b835460ff848116600160b81b90920416146127a257604051716c6971756964697479314665654f6e42757960701b81526012016040519081900381208554909160ff600160b81b83048116929087169160008051602061361c833981519152916127839160489190911b906134fb565b60405180910390a4835460ff60b81b1916600160b81b60ff8516021784555b835460ff838116600160c81b909204161461283157604051716c6971756964697479324665654f6e42757960701b81526012016040519081900381208554909160ff600160c81b83048116929086169160008051602061361c833981519152916128129160489190911b906134fb565b60405180910390a4835460ff60c81b1916600160c81b60ff8416021784555b835460ff828116600160d81b909204161461202d57604051716f7065726174696f6e734665654f6e42757960701b81526012016040519081900381208554909160ff600160d81b83048116929085169160008051602061361c833981519152916128a19160489190911b906134fb565b60405180910390a4835460ff8216600160d81b0260ff60d81b1990911617845550505050565b6001600160a01b0383166128ed5760405162461bcd60e51b815260040161099190613432565b6001600160a01b0382166129135760405162461bcd60e51b815260040161099190613477565b6001600160a01b0383166000908152600160205260409020548181101561298b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610991565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129eb9086815260200190565b60405180910390a361202d565b601b805462ffffff191690558315612a885760105460ff168015612a2a5750600560125442612a2791906133a0565b11155b15612a4157601b805460ff19166064179055612a88565b600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b8215612ad557600f54601b8054600160c01b830460ff90811661ffff1990921691909117610100600160d01b85048316021762ff00001916600160e01b9093041662010000029190911790555b82158015612ae1575083155b8015612b2757506001600160a01b03821660009081526016602052604090205460ff1680612b2757506001600160a01b03811660009081526016602052604090205460ff165b15612b7357600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b601b5460ff620100008204811691612b9391610100820481169116613512565b612b9d9190613512565b601b805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b30600090815260016020526040812054601b549091479160029060ff63010000008204811691612c519116866134ba565b612c5b91906134e7565b612c6591906134e7565b90506000612c7382856133a0565b9050612c7e81612db5565b6000612c8a84476133a0565b601b54909150600090612ca29060029060ff1661352b565b601b54612cb991906301000000900460ff1661354d565b601b5460ff91821692506000916002918491612cd69116866134ba565b612ce091906134e7565b612cea91906134e7565b601b549091506000908390612d0790610100900460ff16866134ba565b612d1191906134e7565b90506000612d1f82846133d0565b612d2990866133a0565b600e54909150612d42906001600160a01b031682612f0f565b600d54612d58906001600160a01b031683612f0f565b8615612daa57612d688784613028565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dea57612dea613566565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e67919061336d565b81600181518110612e7a57612e7a613566565b6001600160a01b039283166020918202929092010152600654612ea09130911684611e95565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ed990859060019086903090429060040161357c565b600060405180830381600087803b158015612ef357600080fd5b505af1158015612f07573d6000803e3d6000fd5b505050505050565b80471015612f5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610991565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612fac576040519150601f19603f3d011682016040523d82523d6000602084013e612fb1565b606091505b5050905080610ffd5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610991565b6006546130409030906001600160a01b031684611e95565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156130b0573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061255591906135ed565b600060208083528351808285015260005b81811015613102578581018301518582016040015282016130e6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461313857600080fd5b50565b6000806040838503121561314e57600080fd5b823561315981613123565b946020939093013593505050565b60006020828403121561317957600080fd5b5035919050565b60008060006060848603121561319557600080fd5b83356131a081613123565b925060208401356131b081613123565b929592945050506040919091013590565b801515811461313857600080fd5b600080604083850312156131e257600080fd5b82356131ed81613123565b915060208301356131fd816131c1565b809150509250929050565b60006020828403121561321a57600080fd5b813561322581613123565b9392505050565b60008060006060848603121561324157600080fd5b833561324c81613123565b9250602084013561325c81613123565b9150604084013561326c81613123565b809150509250925092565b803560ff8116811461328857600080fd5b919050565b6000806000606084860312156132a257600080fd5b6132ab84613277565b92506132b960208501613277565b91506132c760408501613277565b90509250925092565b600080604083850312156132e357600080fd5b82356132ee81613123565b915060208301356131fd81613123565b600181811c9082168061331257607f821691505b60208210810361333257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561337f57600080fd5b815161322581613123565b634e487b7160e01b600052601160045260246000fd5b818103818111156109615761096161338a565b6000602082840312156133c557600080fd5b8151613225816131c1565b808201808211156109615761096161338a565b6020808252602f908201527f5757463a204163636f756e7420697320616c7265616479207468652076616c7560408201526e65206f6620276578636c756465642760881b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176109615761096161338a565b634e487b7160e01b600052601260045260246000fd5b6000826134f6576134f66134d1565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff81811683821601908111156109615761096161338a565b600060ff83168061353e5761353e6134d1565b8060ff84160491505092915050565b60ff82811682821603908111156109615761096161338a565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135cc5784516001600160a01b0316835293830193918301916001016135a7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561360257600080fd5b835192506020840151915060408401519050925092509256fe00edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea264697066735822122040a3c53295d532653a9df988885cb6c18c52bf9e5d7bc48c9381955e0fce191564736f6c63430008110033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806375cb1bd11161015a578063aee50b1e116100c1578063d32215761161007a578063d3221576146107e7578063dd62ed3e14610807578063e625724614610827578063f2fde38b14610847578063fd72e22a14610867578063fe0175351461088757600080fd5b8063aee50b1e146106ed578063b62496f51461070d578063bea9849e1461073d578063c02466681461075d578063cd43e2281461077d578063d2d7ad83146107d157600080fd5b80638da5cb5b116101135780638da5cb5b14610644578063924241e31461066257806395d89b4114610682578063a457c2d714610697578063a9059cbb146106b7578063aa4bde28146106d757600080fd5b806375cb1bd11461058e57806376dca835146105ae578063781edb3c146105ce5780637c0a893d146105ee578063880bcbc11461060e5780638c0b5e221461062e57600080fd5b806327a14fc2116101fe57806345a42329116101b757806345a42329146104af57806349bd5a5e146104cf5780634d78fdc6146105035780634f225e6d1461052357806370a0823114610543578063715018a61461057957600080fd5b806327a14fc2146104135780632cc25d1414610433578063313ce5671461044857806334cf1fea14610464578063378dc3dc14610479578063395093511461048f57600080fd5b806314fbc5f31161025057806314fbc5f3146103475780631694505e1461036657806318160ddd1461039e5780631e293c10146103bd5780631fcfefcd146103dd57806323b872dd146103f357600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f0578063098df585146103105780630bd05b691461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506006546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108bb565b6040516102c591906130d5565b3480156102fc57600080fd5b506102b961030b36600461313b565b61094d565b34801561031c57600080fd5b5061033061032b366004613167565b610967565b005b34801561033e57600080fd5b50610330610b0d565b34801561035357600080fd5b506010546102b990610100900460ff1681565b34801561037257600080fd5b50600654610386906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b3480156103aa57600080fd5b506003545b6040519081526020016102c5565b3480156103c957600080fd5b506103306103d8366004613167565b610b9a565b3480156103e957600080fd5b506103af60135481565b3480156103ff57600080fd5b506102b961040e366004613180565b610c5d565b34801561041f57600080fd5b5061033061042e366004613167565b610c81565b34801561043f57600080fd5b50610330610d48565b34801561045457600080fd5b50604051601281526020016102c5565b34801561047057600080fd5b50610330611002565b34801561048557600080fd5b506103af60075481565b34801561049b57600080fd5b506102b96104aa36600461313b565b611069565b3480156104bb57600080fd5b506103306104ca3660046131cf565b61108b565b3480156104db57600080fd5b506103867f000000000000000000000000d01330749b1bf0e88cee415fffb0a93af0f83e1781565b34801561050f57600080fd5b5061033061051e366004613208565b6111a3565b34801561052f57600080fd5b50600d54610386906001600160a01b031681565b34801561054f57600080fd5b506103af61055e366004613208565b6001600160a01b031660009081526001602052604090205490565b34801561058557600080fd5b50610330611282565b34801561059a57600080fd5b506103306105a936600461322c565b6112f6565b3480156105ba57600080fd5b506103306105c936600461328d565b6115ff565b3480156105da57600080fd5b506103306105e93660046131cf565b6116a3565b3480156105fa57600080fd5b50610330610609366004613208565b611765565b34801561061a57600080fd5b506103306106293660046131cf565b6118c4565b34801561063a57600080fd5b506103af60085481565b34801561065057600080fd5b506000546001600160a01b0316610386565b34801561066e57600080fd5b50600c54610386906001600160a01b031681565b34801561068e57600080fd5b506102e3611986565b3480156106a357600080fd5b506102b96106b236600461313b565b611995565b3480156106c357600080fd5b506102b96106d236600461313b565b611a10565b3480156106e357600080fd5b506103af60095481565b3480156106f957600080fd5b50610330610708366004613167565b611a1e565b34801561071957600080fd5b506102b9610728366004613208565b601a6020526000908152604090205460ff1681565b34801561074957600080fd5b50610330610758366004613208565b611af2565b34801561076957600080fd5b506103306107783660046131cf565b611be8565b34801561078957600080fd5b50600f5460ff600160b81b8204811691600160c81b8104821691600160d81b909104165b6040805160ff948516815292841660208401529216918101919091526060016102c5565b3480156107dd57600080fd5b506103af600b5481565b3480156107f357600080fd5b506103306108023660046131cf565b611caa565b34801561081357600080fd5b506103af6108223660046132d0565b611d2c565b34801561083357600080fd5b5061033061084236600461328d565b611d57565b34801561085357600080fd5b50610330610862366004613208565b611dab565b34801561087357600080fd5b50600e54610386906001600160a01b031681565b34801561089357600080fd5b50600f5460ff600160c01b8204811691600160d01b8104821691600160e01b909104166107ad565b6060600480546108ca906132fe565b80601f01602080910402602001604051908101604052809291908181526020018280546108f6906132fe565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b60003361095b818585611e95565b60019150505b92915050565b6000546001600160a01b0316331461099a5760405162461bcd60e51b815260040161099190613338565b60405180910390fd5b478111156109fe5760405162461bcd60e51b815260206004820152602b60248201527f5757463a2043616e6e6f742073656e64206d6f7265207468616e20636f6e747260448201526a6163742062616c616e636560a81b6064820152608401610991565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a4b576040519150601f19603f3d011682016040523d82523d6000602084013e610a50565b606091505b505090508015610b0957600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae7919061336d565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610b375760405162461bcd60e51b815260040161099190613338565b6006805460ff60a01b1916600160a01b179055601254600003610b6a5743601255426011556010805460ff191660011790555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610bc45760405162461bcd60e51b815260040161099190613338565b6008548103610c2a5760405162461bcd60e51b815260206004820152602c60248201527f5757463a2043616e6e6f7420757064617465206d61785478416d6f756e74207460448201526b6f2073616d652076616c756560a01b6064820152608401610991565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610c6b858285611fb9565b610c76858585612033565b506001949350505050565b6000546001600160a01b03163314610cab5760405162461bcd60e51b815260040161099190613338565b6009548103610d155760405162461bcd60e51b815260206004820152603060248201527f5757463a2043616e6e6f7420757064617465206d617857616c6c6574416d6f7560448201526f6e7420746f2073616d652076616c756560801b6064820152608401610991565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610d725760405162461bcd60e51b815260040161099190613338565b600060115411610dc45760405162461bcd60e51b815260206004820152601e60248201527f5757463a204c61756e6368206d7573742068617665206f6363757272656400006044820152606401610991565b601054610100900460ff1615610e315760405162461bcd60e51b815260206004820152602c60248201527f5757463a204c61756e636820746f6b656e73206861766520616c72656164792060448201526b1899595b8818db185a5b595960a21b6064820152608401610991565b600560125443610e4191906133a0565b11610ea15760405162461bcd60e51b815260206004820152602a60248201527f5757463a204f6e6c7920636c61696d206c61756e636820746f6b656e732061666044820152690e8cae440d8c2eadcc6d60b31b6064820152608401610991565b306000908152600160205260409020546010805461ff001916610100179055601354811015610f275760405162461bcd60e51b815260206004820152602c60248201527f5757463a2041207377617020616e64206c6971756966792068617320616c726560448201526b18591e481bd8d8dd5c9c995960a21b6064820152608401610991565b60138054600091829055903063a9059cbb610f4a6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb91906133b3565b90508015610ffd5760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b6000546001600160a01b0316331461102c5760405162461bcd60e51b815260040161099190613338565b6006805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b60003361095b81858561107c8383611d2c565b61108691906133d0565b611e95565b6000546001600160a01b031633146110b55760405162461bcd60e51b815260040161099190613338565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036111435760405162461bcd60e51b815260206004820152603560248201527f5757463a205468652073656c65637465642077616c6c657420697320616c7265604482015274030b23c9039b2ba103a37903a3432903b30b63ab29605d1b6064820152608401610991565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146111cd5760405162461bcd60e51b815260040161099190613338565b6001600160a01b03811660009081526014602052604090205460ff166112355760405162461bcd60e51b815260206004820152601b60248201527f5757463a204163636f756e74206973206e6f7420626c636f6b656400000000006044820152606401610991565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146112ac5760405162461bcd60e51b815260040161099190613338565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113205760405162461bcd60e51b815260040161099190613338565b600c546001600160a01b03848116911614611413576001600160a01b0383166113995760405162461bcd60e51b815260206004820152602560248201527f5757463a20546865206c69717569646974793157616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610991565b600c546040516f1b1a5c5d5a591a5d1e4c55d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611506576001600160a01b03821661148c5760405162461bcd60e51b815260206004820152602560248201527f5757463a20546865206c69717569646974793257616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610991565b600d546040516f1b1a5c5d5a591a5d1e4c95d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610ffd576001600160a01b03811661157f5760405162461bcd60e51b815260206004820152602560248201527f5757463a20546865206f7065726174696f6e7357616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610991565b600e546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b031633146116295760405162461bcd60e51b815260040161099190613338565b611636600f84848461255c565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146116cd5760405162461bcd60e51b815260040161099190613338565b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361170d5760405162461bcd60e51b8152600401610991906133e3565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611197565b6000546001600160a01b0316331461178f5760405162461bcd60e51b815260040161099190613338565b6001600160a01b03811660009081526014602052604090205460ff16156117f85760405162461bcd60e51b815260206004820152601f60248201527f5757463a204163636f756e7420697320616c726561647920626c6f636b6564006044820152606401610991565b60105460ff1615611872576202a3006011544261181591906133a0565b106118725760405162461bcd60e51b815260206004820152602760248201527f5757463a2054696d6520746f20626c6f636b206163636f756e74732068617320604482015266195e1c1a5c995960ca1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146118ee5760405162461bcd60e51b815260040161099190613338565b6001600160a01b03821660009081526018602052604090205481151560ff90911615150361192e5760405162461bcd60e51b8152600401610991906133e3565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611197565b6060600580546108ca906132fe565b600033816119a38286611d2c565b905083811015611a035760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610991565b610c768286868403611e95565b60003361095b818585612033565b6000546001600160a01b03163314611a485760405162461bcd60e51b815260040161099190613338565b600b548103611abf5760405162461bcd60e51b815260206004820152603860248201527f5757463a2043616e6e6f7420757064617465206d696e696d756d546f6b656e7360448201527f4265666f72655377617020746f2073616d652076616c756500000000000000006064820152608401610991565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b815260040161099190613338565b6006546001600160a01b0390811690821603611b8b5760405162461bcd60e51b815260206004820152602860248201527f5757463a2054686520726f7574657220616c7265616479206861732074686174604482015267206164647265737360c01b6064820152608401610991565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c125760405162461bcd60e51b815260040161099190613338565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611c525760405162461bcd60e51b8152600401610991906133e3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611197565b6000546001600160a01b03163314611cd45760405162461bcd60e51b815260040161099190613338565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611197565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611d815760405162461bcd60e51b815260040161099190613338565b611d8e600f848484612713565b6040516b62617365466565732d42757960a01b8152600c01611650565b6000546001600160a01b03163314611dd55760405162461bcd60e51b815260040161099190613338565b6001600160a01b038116611e3a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611ef75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b038216611f585760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611fc58484611d2c565b9050600019811461202d57818110156120205760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610991565b61202d8484848403611e95565b50505050565b6001600160a01b0383166120595760405162461bcd60e51b815260040161099190613432565b6001600160a01b03821661207f5760405162461bcd60e51b815260040161099190613477565b8060000361209357610ffd838360006128c7565b6001600160a01b03831660009081526015602052604090205460ff161580156120d557506001600160a01b03821660009081526015602052604090205460ff16155b1561237357600654600160a01b900460ff1661213f5760405162461bcd60e51b815260206004820152602360248201527f5757463a2054726164696e672069732063757272656e746c792064697361626c60448201526232b21760e91b6064820152608401610991565b6001600160a01b03821660009081526014602052604090205460ff16156121a25760405162461bcd60e51b815260206004820152601760248201527615d5d18e881058d8dbdd5b9d081a5cc8189b1bd8dad959604a1b6044820152606401610991565b6001600160a01b03831660009081526014602052604090205460ff16156122055760405162461bcd60e51b815260206004820152601760248201527615d5d18e881058d8dbdd5b9d081a5cc8189b1bd8dad959604a1b6044820152606401610991565b6001600160a01b03821660009081526018602052604090205460ff1615801561224757506001600160a01b03831660009081526018602052604090205460ff16155b156122b2576008548111156122b25760405162461bcd60e51b815260206004820152602b60248201527f5757463a2042757920616d6f756e74206578636565647320746865206d61785460448201526a3c213abca0b6b7bab73a1760a91b6064820152608401610991565b6001600160a01b03821660009081526019602052604090205460ff1661237357600954816122f5846001600160a01b031660009081526001602052604090205490565b6122ff91906133d0565b11156123735760405162461bcd60e51b815260206004820152603860248201527f5757463a2045787065637465642077616c6c657420616d6f756e74206578636560448201527f65647320746865206d617857616c6c6574416d6f756e742e00000000000000006064820152608401610991565b6001600160a01b038084166000908152601a60205260408082205492851682529020546123a89160ff908116911685856129f8565b600b543060009081526001602052604090205460065491111590600160a01b900460ff1680156123d55750805b80156123e45750600a5460ff16155b80156123fb5750601b546301000000900460ff1615155b801561241f57506001600160a01b0383166000908152601a602052604090205460ff165b1561244457600a805460ff19166001179055612439612c20565b600a805460ff191690555b600a5460009060ff161580156124635750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff16806124a557506001600160a01b03841660009081526017602052604090205460ff165b156124ae575060005b8080156124c65750601b546301000000900460ff1615155b1561254a57601b546000906064906124e8906301000000900460ff16866134ba565b6124f291906134e7565b90506124fe81856133a0565b93506000601154118015612520575060056012544361251d91906133a0565b11155b1561253d57806013600082825461253791906133d0565b90915550505b6125488630836128c7565b505b6125558585856128c7565b5050505050565b835460ff848116600160c01b90920416146125ec57604051721b1a5c5d5a591a5d1e4c51995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160c01b83048116929087169160008051602061361c833981519152916125cd9160489190911b906134fb565b60405180910390a4835460ff60c01b1916600160c01b60ff8516021784555b835460ff838116600160d01b909204161461267c57604051721b1a5c5d5a591a5d1e4c91995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160d01b83048116929086169160008051602061361c8339815191529161265d9160489190911b906134fb565b60405180910390a4835460ff60d01b1916600160d01b60ff8416021784555b835460ff828116600160e01b909204161461202d57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160e01b83048116929085169160008051602061361c833981519152916126ed9160489190911b906134fb565b60405180910390a4835460ff8216600160e01b0260ff60e01b1990911617845550505050565b835460ff848116600160b81b90920416146127a257604051716c6971756964697479314665654f6e42757960701b81526012016040519081900381208554909160ff600160b81b83048116929087169160008051602061361c833981519152916127839160489190911b906134fb565b60405180910390a4835460ff60b81b1916600160b81b60ff8516021784555b835460ff838116600160c81b909204161461283157604051716c6971756964697479324665654f6e42757960701b81526012016040519081900381208554909160ff600160c81b83048116929086169160008051602061361c833981519152916128129160489190911b906134fb565b60405180910390a4835460ff60c81b1916600160c81b60ff8416021784555b835460ff828116600160d81b909204161461202d57604051716f7065726174696f6e734665654f6e42757960701b81526012016040519081900381208554909160ff600160d81b83048116929085169160008051602061361c833981519152916128a19160489190911b906134fb565b60405180910390a4835460ff8216600160d81b0260ff60d81b1990911617845550505050565b6001600160a01b0383166128ed5760405162461bcd60e51b815260040161099190613432565b6001600160a01b0382166129135760405162461bcd60e51b815260040161099190613477565b6001600160a01b0383166000908152600160205260409020548181101561298b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610991565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129eb9086815260200190565b60405180910390a361202d565b601b805462ffffff191690558315612a885760105460ff168015612a2a5750600560125442612a2791906133a0565b11155b15612a4157601b805460ff19166064179055612a88565b600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b8215612ad557600f54601b8054600160c01b830460ff90811661ffff1990921691909117610100600160d01b85048316021762ff00001916600160e01b9093041662010000029190911790555b82158015612ae1575083155b8015612b2757506001600160a01b03821660009081526016602052604090205460ff1680612b2757506001600160a01b03811660009081526016602052604090205460ff165b15612b7357600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b601b5460ff620100008204811691612b9391610100820481169116613512565b612b9d9190613512565b601b805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b30600090815260016020526040812054601b549091479160029060ff63010000008204811691612c519116866134ba565b612c5b91906134e7565b612c6591906134e7565b90506000612c7382856133a0565b9050612c7e81612db5565b6000612c8a84476133a0565b601b54909150600090612ca29060029060ff1661352b565b601b54612cb991906301000000900460ff1661354d565b601b5460ff91821692506000916002918491612cd69116866134ba565b612ce091906134e7565b612cea91906134e7565b601b549091506000908390612d0790610100900460ff16866134ba565b612d1191906134e7565b90506000612d1f82846133d0565b612d2990866133a0565b600e54909150612d42906001600160a01b031682612f0f565b600d54612d58906001600160a01b031683612f0f565b8615612daa57612d688784613028565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dea57612dea613566565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e67919061336d565b81600181518110612e7a57612e7a613566565b6001600160a01b039283166020918202929092010152600654612ea09130911684611e95565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ed990859060019086903090429060040161357c565b600060405180830381600087803b158015612ef357600080fd5b505af1158015612f07573d6000803e3d6000fd5b505050505050565b80471015612f5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610991565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612fac576040519150601f19603f3d011682016040523d82523d6000602084013e612fb1565b606091505b5050905080610ffd5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610991565b6006546130409030906001600160a01b031684611e95565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156130b0573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061255591906135ed565b600060208083528351808285015260005b81811015613102578581018301518582016040015282016130e6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461313857600080fd5b50565b6000806040838503121561314e57600080fd5b823561315981613123565b946020939093013593505050565b60006020828403121561317957600080fd5b5035919050565b60008060006060848603121561319557600080fd5b83356131a081613123565b925060208401356131b081613123565b929592945050506040919091013590565b801515811461313857600080fd5b600080604083850312156131e257600080fd5b82356131ed81613123565b915060208301356131fd816131c1565b809150509250929050565b60006020828403121561321a57600080fd5b813561322581613123565b9392505050565b60008060006060848603121561324157600080fd5b833561324c81613123565b9250602084013561325c81613123565b9150604084013561326c81613123565b809150509250925092565b803560ff8116811461328857600080fd5b919050565b6000806000606084860312156132a257600080fd5b6132ab84613277565b92506132b960208501613277565b91506132c760408501613277565b90509250925092565b600080604083850312156132e357600080fd5b82356132ee81613123565b915060208301356131fd81613123565b600181811c9082168061331257607f821691505b60208210810361333257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561337f57600080fd5b815161322581613123565b634e487b7160e01b600052601160045260246000fd5b818103818111156109615761096161338a565b6000602082840312156133c557600080fd5b8151613225816131c1565b808201808211156109615761096161338a565b6020808252602f908201527f5757463a204163636f756e7420697320616c7265616479207468652076616c7560408201526e65206f6620276578636c756465642760881b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176109615761096161338a565b634e487b7160e01b600052601260045260246000fd5b6000826134f6576134f66134d1565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff81811683821601908111156109615761096161338a565b600060ff83168061353e5761353e6134d1565b8060ff84160491505092915050565b60ff82811682821603908111156109615761096161338a565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135cc5784516001600160a01b0316835293830193918301916001016135a7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561360257600080fd5b835192506020840151915060408401519050925092509256fe00edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea264697066735822122040a3c53295d532653a9df988885cb6c18c52bf9e5d7bc48c9381955e0fce191564736f6c63430008110033

Deployed Bytecode Sourcemap

12509:19453:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12768:28;;;;;;;;;;-1:-1:-1;12768:28:0;;;;-1:-1:-1;;;12768:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;12768:28:0;;;;;;;;7174:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8105:201::-;;;;;;;;;;-1:-1:-1;8105:201:0;;;;;:::i;:::-;;:::i;23879:339::-;;;;;;;;;;-1:-1:-1;23879:339:0;;;;;:::i;:::-;;:::i;:::-;;17225:321;;;;;;;;;;;;;:::i;13715:32::-;;;;;;;;;;-1:-1:-1;13715:32:0;;;;;;;;;;;12586:30;;;;;;;;;;-1:-1:-1;12586:30:0;;;;-1:-1:-1;;;;;12586:30:0;;;;;;-1:-1:-1;;;;;1579:32:1;;;1561:51;;1549:2;1534:18;12586:30:0;1400:218:1;7494:108:0;;;;;;;;;;-1:-1:-1;7582:12:0;;7494:108;;;1769:25:1;;;1757:2;1742:18;7494:108:0;1623:177:1;22292:267:0;;;;;;;;;;-1:-1:-1;22292:267:0;;;;;:::i;:::-;;:::i;13839:27::-;;;;;;;;;;;;;;;;8316:295;;;;;;;;;;-1:-1:-1;8316:295:0;;;;;:::i;:::-;;:::i;22565:272::-;;;;;;;;;;-1:-1:-1;22565:272:0;;;;;:::i;:::-;;:::i;23170:703::-;;;;;;;;;;;;;:::i;7393:93::-;;;;;;;;;;-1:-1:-1;7393:93:0;;7476:2;2408:36:1;;2396:2;2381:18;7393:93:0;2266:184:1;17552:139:0;;;;;;;;;;;;;:::i;12805:51::-;;;;;;;;;;;;;;;;8619:238;;;;;;;;;;-1:-1:-1;8619:238:0;;;;;:::i;:::-;;:::i;18864:343::-;;;;;;;;;;-1:-1:-1;18864:343:0;;;;;:::i;:::-;;:::i;12623:38::-;;;;;;;;;;;;;;;18630:228;;;;;;;;;;-1:-1:-1;18630:228:0;;;;;:::i;:::-;;:::i;13223:31::-;;;;;;;;;;-1:-1:-1;13223:31:0;;;;-1:-1:-1;;;;;13223:31:0;;;7610:127;;;;;;;;;;-1:-1:-1;7610:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7711:18:0;7684:7;7711:18;;;:9;:18;;;;;;;7610:127;6361:148;;;;;;;;;;;;;:::i;20216:1059::-;;;;;;;;;;-1:-1:-1;20216:1059:0;;;;;:::i;:::-;;:::i;21638:345::-;;;;;;;;;;-1:-1:-1;21638:345:0;;;;;:::i;:::-;;:::i;19875:335::-;;;;;;;;;;-1:-1:-1;19875:335:0;;;;;:::i;:::-;;:::i;18239:385::-;;;;;;;;;;-1:-1:-1;18239:385:0;;;;;:::i;:::-;;:::i;19517:352::-;;;;;;;;;;-1:-1:-1;19517:352:0;;;;;:::i;:::-;;:::i;12918:42::-;;;;;;;;;;;;;;;;6147:79;;;;;;;;;;-1:-1:-1;6185:7:0;6212:6;-1:-1:-1;;;;;6212:6:0;6147:79;;13185:31;;;;;;;;;;-1:-1:-1;13185:31:0;;;;-1:-1:-1;;;;;13185:31:0;;;7282:104;;;;;;;;;;;;;:::i;8865:436::-;;;;;;;;;;-1:-1:-1;8865:436:0;;;;;:::i;:::-;;:::i;7745:193::-;;;;;;;;;;-1:-1:-1;7745:193:0;;;;;:::i;:::-;;:::i;13011:60::-;;;;;;;;;;;;;;;;22843:321;;;;;;;;;;-1:-1:-1;22843:321:0;;;;;:::i;:::-;;:::i;14265:57::-;;;;;;;;;;-1:-1:-1;14265:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21989:297;;;;;;;;;;-1:-1:-1;21989:297:0;;;;;:::i;:::-;;:::i;19213:298::-;;;;;;;;;;-1:-1:-1;19213:298:0;;;;;:::i;:::-;;:::i;24242:170::-;;;;;;;;;;-1:-1:-1;24329:5:0;:24;;-1:-1:-1;;;24329:24:0;;;;;-1:-1:-1;;;24354:24:0;;;;;-1:-1:-1;;;24379:24:0;;;;24242:170;;;;4667:4:1;4655:17;;;4637:36;;4709:17;;;4704:2;4689:18;;4682:45;4763:17;;4743:18;;;4736:45;;;;4625:2;4610:18;24242:170:0;4447:340:1;13109:67:0;;;;;;;;;;;;;;;;18016:217;;;;;;;;;;-1:-1:-1;18016:217:0;;;;;:::i;:::-;;:::i;7946:151::-;;;;;;;;;;-1:-1:-1;7946:151:0;;;;;:::i;:::-;;:::i;21299:333::-;;;;;;;;;;-1:-1:-1;21299:333:0;;;;;:::i;:::-;;:::i;6517:244::-;;;;;;;;;;-1:-1:-1;6517:244:0;;;;;:::i;:::-;;:::i;13261:31::-;;;;;;;;;;-1:-1:-1;13261:31:0;;;;-1:-1:-1;;;;;13261:31:0;;;24418:174;;;;;;;;;;-1:-1:-1;24506:5:0;:25;;-1:-1:-1;;;24506:25:0;;;;;-1:-1:-1;;;24532:25:0;;;;;-1:-1:-1;;;24558:25:0;;;;24418:174;;7174:100;7228:13;7261:5;7254:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7174:100;:::o;8105:201::-;8188:4;5560:10;8244:32;5560:10;8260:7;8269:6;8244:8;:32::i;:::-;8294:4;8287:11;;;8105:201;;;;;:::o;23879:339::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;;;;;;;;;23969:21:::1;23959:6;:31;;23951:87;;;::::0;-1:-1:-1;;;23951:87:0;;6133:2:1;23951:87:0::1;::::0;::::1;6115:21:1::0;6172:2;6152:18;;;6145:30;6211:34;6191:18;;;6184:62;-1:-1:-1;;;6262:18:1;;;6255:41;6313:19;;23951:87:0::1;5931:407:1::0;23951:87:0::1;24050:12;6212:6:::0;;24068:42:::1;::::0;-1:-1:-1;;;;;6212:6:0;;;;24098;;24050:12;24068:42;24050:12;24068:42;24098:6;6212;24068:42:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24049:61;;;24125:7;24121:90;;;24168:15;::::0;:22:::1;::::0;;-1:-1:-1;;;24168:22:0;;;;24154:45:::1;::::0;-1:-1:-1;;;;;24168:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24154:45;::::0;;-1:-1:-1;;;;;7001:32:1;;;6983:51;;7065:2;7050:18;;7043:34;;;6956:18;24154:45:0::1;;;;;;;24121:90;23940:278;23879:339:::0;:::o;17225:321::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;17282:16:::1;:23:::0;;-1:-1:-1;;;;17282:23:0::1;-1:-1:-1::0;;;17282:23:0::1;::::0;;17319:18:::1;::::0;17282:23;17319;17316:175:::1;;17380:12;17359:18;:33:::0;17431:15:::1;17407:21;:39:::0;17461:11:::1;:18:::0;;-1:-1:-1;;17461:18:0::1;-1:-1:-1::0;17461:18:0::1;::::0;;17316:175:::1;17506:32;::::0;17532:5:::1;::::0;17506:32;;::::1;::::0;17532:5;;17506:32:::1;17225:321::o:0;22292:267::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;22393:11:::1;;22381:8;:23:::0;22373:80:::1;;;::::0;-1:-1:-1;;;22373:80:0;;7290:2:1;22373:80:0::1;::::0;::::1;7272:21:1::0;7329:2;7309:18;;;7302:30;7368:34;7348:18;;;7341:62;-1:-1:-1;;;7419:18:1;;;7412:42;7471:19;;22373:80:0::1;7088:408:1::0;22373:80:0::1;22506:11;::::0;22469:49:::1;::::0;22496:8;;22469:49:::1;::::0;;;::::1;22529:11;:22:::0;22292:267::o;8316:295::-;8447:4;5560:10;8505:38;8521:4;5560:10;8536:6;8505:15;:38::i;:::-;8554:27;8564:4;8570:2;8574:6;8554:9;:27::i;:::-;-1:-1:-1;8599:4:0;;8316:295;-1:-1:-1;;;;8316:295:0:o;22565:272::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;22661:15:::1;;22649:8;:27:::0;22641:87:::1;;;::::0;-1:-1:-1;;;22641:87:0;;7703:2:1;22641:87:0::1;::::0;::::1;7685:21:1::0;7742:2;7722:18;;;7715:30;7781:34;7761:18;;;7754:62;-1:-1:-1;;;7832:18:1;;;7825:46;7888:19;;22641:87:0::1;7501:412:1::0;22641:87:0::1;22776:15;::::0;22744:48:::1;::::0;22766:8;;22744:48:::1;::::0;;;::::1;22803:15;:26:::0;22565:272::o;23170:703::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;23255:1:::1;23231:21;;:25;23223:68;;;::::0;-1:-1:-1;;;23223:68:0;;8120:2:1;23223:68:0::1;::::0;::::1;8102:21:1::0;8159:2;8139:18;;;8132:30;8198:32;8178:18;;;8171:60;8248:18;;23223:68:0::1;7918:354:1::0;23223:68:0::1;23305:20;::::0;::::1;::::0;::::1;;;23304:21;23296:78;;;::::0;-1:-1:-1;;;23296:78:0;;8479:2:1;23296:78:0::1;::::0;::::1;8461:21:1::0;8518:2;8498:18;;;8491:30;8557:34;8537:18;;;8530:62;-1:-1:-1;;;8608:18:1;;;8601:42;8660:19;;23296:78:0::1;8277:408:1::0;23296:78:0::1;23423:1;23402:18;;23387:12;:33;;;;:::i;:::-;:37;23379:92;;;::::0;-1:-1:-1;;;23379:92:0;;9157:2:1;23379:92:0::1;::::0;::::1;9139:21:1::0;9196:2;9176:18;;;9169:30;9235:34;9215:18;;;9208:62;-1:-1:-1;;;9286:18:1;;;9279:40;9336:19;;23379:92:0::1;8955:406:1::0;23379:92:0::1;23517:4;23476:20;7711:18:::0;;;:9;:18;;;;;;23528:20:::1;:27:::0;;-1:-1:-1;;23528:27:0::1;;;::::0;;23568:12:::1;::::0;-1:-1:-1;;23568:28:0::1;23560:85;;;::::0;-1:-1:-1;;;23560:85:0;;9568:2:1;23560:85:0::1;::::0;::::1;9550:21:1::0;9607:2;9587:18;;;9580:30;9646:34;9626:18;;;9619:62;-1:-1:-1;;;9697:18:1;;;9690:42;9749:19;;23560:85:0::1;9366:408:1::0;23560:85:0::1;23667:12;::::0;;23650:14:::1;23684:16:::0;;;;23667:12;23743:4:::1;23728:30;23759:7;6185::::0;6212:6;-1:-1:-1;;;;;6212:6:0;;6147:79;23759:7:::1;23728:47;::::0;-1:-1:-1;;;;;;23728:47:0::1;::::0;;;;;;-1:-1:-1;;;;;7001:32:1;;;23728:47:0::1;::::0;::::1;6983:51:1::0;7050:18;;;7043:34;;;6956:18;;23728:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23711:64;;23790:7;23786:80;;;23818:36;::::0;;23840:4:::1;6983:51:1::0;;7065:2;7050:18;;7043:34;;;23818:36:0::1;::::0;6956:18:1;23818:36:0::1;;;;;;;23786:80;23218:655;;;23170:703::o:0;17552:139::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;17611:16:::1;:24:::0;;-1:-1:-1;;;;17611:24:0::1;::::0;;17651:32:::1;::::0;17611:24;;17630:5:::1;::::0;17651:32:::1;::::0;17630:5;;17651:32:::1;17552:139::o:0;8619:238::-;8707:4;5560:10;8763:64;5560:10;8779:7;8816:10;8788:25;5560:10;8779:7;8788:9;:25::i;:::-;:38;;;;:::i;:::-;8763:8;:64::i;18864:343::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18972:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;18964:112:::1;;;::::0;-1:-1:-1;;;18964:112:0;;10361:2:1;18964:112:0::1;::::0;::::1;10343:21:1::0;10400:2;10380:18;;;10373:30;10439:34;10419:18;;;10412:62;-1:-1:-1;;;10490:18:1;;;10483:51;10551:19;;18964:112:0::1;10159:417:1::0;18964:112:0::1;-1:-1:-1::0;;;;;19087:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;19087:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19149:50;;154:41:1;;;19149:50:0::1;::::0;127:18:1;19149:50:0::1;;;;;;;;18864:343:::0;;:::o;18630:228::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18709:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18701:59;;;::::0;-1:-1:-1;;;18701:59:0;;10783:2:1;18701:59:0::1;::::0;::::1;10765:21:1::0;10822:2;10802:18;;;10795:30;10861:29;10841:18;;;10834:57;10908:18;;18701:59:0::1;10581:351:1::0;18701:59:0::1;-1:-1:-1::0;;;;;18771:19:0;::::1;18793:5;18771:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;18771:27:0::1;::::0;;18814:36;18793:5;;18771:19;18814:36:::1;::::0;18793:5;;18814:36:::1;18630:228:::0;:::o;6361:148::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;6468:1:::1;6452:6:::0;;6431:40:::1;::::0;-1:-1:-1;;;;;6452:6:0;;::::1;::::0;6431:40:::1;::::0;6468:1;;6431:40:::1;6499:1;6482:19:::0;;-1:-1:-1;;;;;;6482:19:0::1;::::0;;6361:148::o;20216:1059::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;20355:16:::1;::::0;-1:-1:-1;;;;;20355:39:0;;::::1;:16:::0;::::1;:39;20351:299;;-1:-1:-1::0;;;;;20419:33:0;::::1;20411:83;;;::::0;-1:-1:-1;;;20411:83:0;;11139:2:1;20411:83:0::1;::::0;::::1;11121:21:1::0;11178:2;11158:18;;;11151:30;11217:34;11197:18;;;11190:62;-1:-1:-1;;;11268:18:1;;;11261:35;11313:19;;20411:83:0::1;10937:401:1::0;20411:83:0::1;20568:16;::::0;20514:71:::1;::::0;-1:-1:-1;;;11545:31:1;;-1:-1:-1;;;;;20568:16:0;;::::1;::::0;20514:71;::::1;::::0;11601:2:1;11592:12;20514:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20600:16;:38:::0;;-1:-1:-1;;;;;;20600:38:0::1;-1:-1:-1::0;;;;;20600:38:0;::::1;;::::0;;20351:299:::1;20664:16;::::0;-1:-1:-1;;;;;20664:39:0;;::::1;:16:::0;::::1;:39;20660:299;;-1:-1:-1::0;;;;;20728:33:0;::::1;20720:83;;;::::0;-1:-1:-1;;;20720:83:0;;11817:2:1;20720:83:0::1;::::0;::::1;11799:21:1::0;11856:2;11836:18;;;11829:30;11895:34;11875:18;;;11868:62;-1:-1:-1;;;11946:18:1;;;11939:35;11991:19;;20720:83:0::1;11615:401:1::0;20720:83:0::1;20877:16;::::0;20823:71:::1;::::0;-1:-1:-1;;;12223:31:1;;-1:-1:-1;;;;;20877:16:0;;::::1;::::0;20823:71;::::1;::::0;12279:2:1;12270:12;20823:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20909:16;:38:::0;;-1:-1:-1;;;;;;20909:38:0::1;-1:-1:-1::0;;;;;20909:38:0;::::1;;::::0;;20660:299:::1;20973:16;::::0;-1:-1:-1;;;;;20973:39:0;;::::1;:16:::0;::::1;:39;20969:299;;-1:-1:-1::0;;;;;21037:33:0;::::1;21029:83;;;::::0;-1:-1:-1;;;21029:83:0;;12495:2:1;21029:83:0::1;::::0;::::1;12477:21:1::0;12534:2;12514:18;;;12507:30;12573:34;12553:18;;;12546:62;-1:-1:-1;;;12624:18:1;;;12617:35;12669:19;;21029:83:0::1;12293:401:1::0;21029:83:0::1;21186:16;::::0;21132:71:::1;::::0;-1:-1:-1;;;12901:31:1;;-1:-1:-1;;;;;21186:16:0;;::::1;::::0;21132:71;::::1;::::0;12957:2:1;12948:12;21132:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21218:16;:38:::0;;-1:-1:-1;;;;;21218:38:0;::::1;-1:-1:-1::0;;;;;;21218:38:0;;::::1;;::::0;;20216:1059;;;:::o;21638:345::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;21777:93:::1;21801:5;21807:20;21828;21849;21777:23;:93::i;:::-;21886:89;::::0;-1:-1:-1;;;13173:28:1;;13226:2;13217:12;21886:89:0::1;;::::0;;;;;::::1;::::0;;4667:4:1;4655:17;;;4637:36;;4709:17;;;4704:2;4689:18;;4682:45;4763:17;;4743:18;;;4736:45;21886:89:0;;;;::::1;::::0;;;;;4625:2:1;21886:89:0;;::::1;21638:345:::0;;;:::o;19875:335::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19980:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;19972:109:::1;;;;-1:-1:-1::0;;;19972:109:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20092:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;20092:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20157:45;;154:41:1;;;20157:45:0::1;::::0;127:18:1;20157:45:0::1;14:187:1::0;18239:385:0;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18317:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18316:20;18308:64;;;::::0;-1:-1:-1;;;18308:64:0;;13858:2:1;18308:64:0::1;::::0;::::1;13840:21:1::0;13897:2;13877:18;;;13870:30;13936:33;13916:18;;;13909:61;13987:18;;18308:64:0::1;13656:355:1::0;18308:64:0::1;18387:11;::::0;::::1;;18383:146;;;18467:6;18442:21;;18424:15;:39;;;;:::i;:::-;18423:50;18415:102;;;::::0;-1:-1:-1;;;18415:102:0;;14218:2:1;18415:102:0::1;::::0;::::1;14200:21:1::0;14257:2;14237:18;;;14230:30;14296:34;14276:18;;;14269:62;-1:-1:-1;;;14347:18:1;;;14340:37;14394:19;;18415:102:0::1;14016:403:1::0;18415:102:0::1;-1:-1:-1::0;;;;;18539:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;18539:26:0::1;18561:4;18539:26:::0;;::::1;::::0;;;18581:35;;18561:4;;18539:19;18581:35:::1;::::0;::::1;18239:385:::0;:::o;19517:352::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19627:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;19619:114:::1;;;;-1:-1:-1::0;;;19619:114:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19744:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;19744:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19814:47;;154:41:1;;;19814:47:0::1;::::0;127:18:1;19814:47:0::1;14:187:1::0;7282:104:0;7338:13;7371:7;7364:14;;;;;:::i;8865:436::-;8958:4;5560:10;8958:4;9041:25;5560:10;9058:7;9041:9;:25::i;:::-;9014:52;;9105:15;9085:16;:35;;9077:85;;;;-1:-1:-1;;;9077:85:0;;14626:2:1;9077:85:0;;;14608:21:1;14665:2;14645:18;;;14638:30;14704:34;14684:18;;;14677:62;-1:-1:-1;;;14755:18:1;;;14748:35;14800:19;;9077:85:0;14424:401:1;9077:85:0;9198:60;9207:5;9214:7;9242:15;9223:16;:34;9198:8;:60::i;7745:193::-;7824:4;5560:10;7880:28;5560:10;7897:2;7901:6;7880:9;:28::i;22843:321::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;22947:23:::1;;22935:8;:35:::0;22927:103:::1;;;::::0;-1:-1:-1;;;22927:103:0;;15032:2:1;22927:103:0::1;::::0;::::1;15014:21:1::0;15071:2;15051:18;;;15044:30;15110:34;15090:18;;;15083:62;15181:26;15161:18;;;15154:54;15225:19;;22927:103:0::1;14830:420:1::0;22927:103:0::1;23087:23;::::0;23046:65:::1;::::0;23077:8;;23046:65:::1;::::0;;;::::1;23122:23;:34:::0;22843:321::o;21989:297::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;22095:15:::1;::::0;-1:-1:-1;;;;;22095:15:0;;::::1;22073:38:::0;;::::1;::::0;22065:90:::1;;;::::0;-1:-1:-1;;;22065:90:0;;15457:2:1;22065:90:0::1;::::0;::::1;15439:21:1::0;15496:2;15476:18;;;15469:30;15535:34;15515:18;;;15508:62;-1:-1:-1;;;15586:18:1;;;15579:38;15634:19;;22065:90:0::1;15255:404:1::0;22065:90:0::1;22213:15;::::0;22171:59:::1;::::0;-1:-1:-1;;;;;22213:15:0;;::::1;::::0;22171:59;::::1;::::0;::::1;::::0;22213:15:::1;::::0;22171:59:::1;22241:15;:37:::0;;-1:-1:-1;;;;;;22241:37:0::1;-1:-1:-1::0;;;;;22241:37:0;;;::::1;::::0;;;::::1;::::0;;21989:297::o;19213:298::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19308:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19300:98:::1;;;;-1:-1:-1::0;;;19300:98:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19409:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19409:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19463:40;;154:41:1;;;19463:40:0::1;::::0;127:18:1;19463:40:0::1;14:187:1::0;18016:217:0;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18111:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;18111:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18175:50;;154:41:1;;;18175:50:0::1;::::0;127:18:1;18175:50:0::1;14:187:1::0;7946:151:0;-1:-1:-1;;;;;8062:18:0;;;8035:7;8062:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7946:151::o;21299:333::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;21434:89:::1;21457:5;21463:19;21483;21503;21434:22;:89::i;:::-;21539:85;::::0;-1:-1:-1;;;15866:27:1;;15918:2;15909:12;21539:85:0::1;15664:263:1::0;6517:244:0;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6606:22:0;::::1;6598:73;;;::::0;-1:-1:-1;;;6598:73:0;;16134:2:1;6598:73:0::1;::::0;::::1;16116:21:1::0;16173:2;16153:18;;;16146:30;16212:34;16192:18;;;16185:62;-1:-1:-1;;;16263:18:1;;;16256:36;16309:19;;6598:73:0::1;15932:402:1::0;6598:73:0::1;6708:6;::::0;;6687:38:::1;::::0;-1:-1:-1;;;;;6687:38:0;;::::1;::::0;6708:6;::::1;::::0;6687:38:::1;::::0;::::1;6736:6;:17:::0;;-1:-1:-1;;;;;;6736:17:0::1;-1:-1:-1::0;;;;;6736:17:0;;;::::1;::::0;;;::::1;::::0;;6517:244::o;11396:380::-;-1:-1:-1;;;;;11532:19:0;;11524:68;;;;-1:-1:-1;;;11524:68:0;;16541:2:1;11524:68:0;;;16523:21:1;16580:2;16560:18;;;16553:30;16619:34;16599:18;;;16592:62;-1:-1:-1;;;16670:18:1;;;16663:34;16714:19;;11524:68:0;16339:400:1;11524:68:0;-1:-1:-1;;;;;11611:21:0;;11603:68;;;;-1:-1:-1;;;11603:68:0;;16946:2:1;11603:68:0;;;16928:21:1;16985:2;16965:18;;;16958:30;17024:34;17004:18;;;16997:62;-1:-1:-1;;;17075:18:1;;;17068:32;17117:19;;11603:68:0;16744:398:1;11603:68:0;-1:-1:-1;;;;;11684:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11736:32;;1769:25:1;;;11736:32:0;;1742:18:1;11736:32:0;;;;;;;11396:380;;;:::o;11784:453::-;11919:24;11946:25;11956:5;11963:7;11946:9;:25::i;:::-;11919:52;;-1:-1:-1;;11986:16:0;:37;11982:248;;12068:6;12048:16;:26;;12040:68;;;;-1:-1:-1;;;12040:68:0;;17349:2:1;12040:68:0;;;17331:21:1;17388:2;17368:18;;;17361:30;17427:31;17407:18;;;17400:59;17476:18;;12040:68:0;17147:353:1;12040:68:0;12152:51;12161:5;12168:7;12196:6;12177:16;:25;12152:8;:51::i;:::-;11908:329;11784:453;;;:::o;24611:2136::-;-1:-1:-1;;;;;24743:18:0;;24735:68;;;;-1:-1:-1;;;24735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24822:16:0;;24814:64;;;;-1:-1:-1;;;24814:64:0;;;;;;;:::i;:::-;24895:6;24905:1;24895:11;24891:93;;24923:28;24939:4;24945:2;24949:1;24923:15;:28::i;24891:93::-;-1:-1:-1;;;;;25001:35:0;;;;;;:29;:35;;;;;;;;25000:36;:74;;;;-1:-1:-1;;;;;;25041:33:0;;;;;;:29;:33;;;;;;;;25040:34;25000:74;24996:722;;;25099:16;;-1:-1:-1;;;25099:16:0;;;;25091:64;;;;-1:-1:-1;;;25091:64:0;;18517:2:1;25091:64:0;;;18499:21:1;18556:2;18536:18;;;18529:30;18595:34;18575:18;;;18568:62;-1:-1:-1;;;18646:18:1;;;18639:33;18689:19;;25091:64:0;18315:399:1;25091:64:0;-1:-1:-1;;;;;25179:14:0;;;;;;:10;:14;;;;;;;;25178:15;25170:51;;;;-1:-1:-1;;;25170:51:0;;18921:2:1;25170:51:0;;;18903:21:1;18960:2;18940:18;;;18933:30;-1:-1:-1;;;18979:18:1;;;18972:53;19042:18;;25170:51:0;18719:347:1;25170:51:0;-1:-1:-1;;;;;25245:16:0;;;;;;:10;:16;;;;;;;;25244:17;25236:53;;;;-1:-1:-1;;;25236:53:0;;18921:2:1;25236:53:0;;;18903:21:1;18960:2;18940:18;;;18933:30;-1:-1:-1;;;18979:18:1;;;18972:53;19042:18;;25236:53:0;18719:347:1;25236:53:0;-1:-1:-1;;;;;25309:38:0;;;;;;:34;:38;;;;;;;;25308:39;:84;;;;-1:-1:-1;;;;;;25352:40:0;;;;;;:34;:40;;;;;;;;25351:41;25308:84;25304:202;;;25431:11;;25421:6;:21;;25413:77;;;;-1:-1:-1;;;25413:77:0;;19273:2:1;25413:77:0;;;19255:21:1;19312:2;19292:18;;;19285:30;19351:34;19331:18;;;19324:62;-1:-1:-1;;;19402:18:1;;;19395:41;19453:19;;25413:77:0;19071:407:1;25413:77:0;-1:-1:-1;;;;;25525:33:0;;;;;;:29;:33;;;;;;;;25520:187;;25615:15;;25604:6;25588:13;25598:2;-1:-1:-1;;;;;7711:18:0;7684:7;7711:18;;;:9;:18;;;;;;;7610:127;25588:13;:22;;;;:::i;:::-;25587:43;;25579:112;;;;-1:-1:-1;;;25579:112:0;;19685:2:1;25579:112:0;;;19667:21:1;19724:2;19704:18;;;19697:30;19763:34;19743:18;;;19736:62;19834:26;19814:18;;;19807:54;19878:19;;25579:112:0;19483:420:1;25579:112:0;-1:-1:-1;;;;;25743:31:0;;;;;;;:25;:31;;;;;;;25776:29;;;;;;;;25730:86;;25743:31;;;;;25776:29;25769:4;25802:2;25730:12;:86::i;:::-;25870:23;;25860:4;25827:12;7711:18;;;:9;:18;;;;;;25924:16;;-1:-1:-1;;25842:51:0;;-1:-1:-1;;;25924:16:0;;;;:40;;;;;25957:7;25924:40;:67;;;;-1:-1:-1;25982:9:0;;;;25981:10;25924:67;:97;;;;-1:-1:-1;26008:9:0;;;;;;;:13;;25924:97;:143;;;;-1:-1:-1;;;;;;26038:29:0;;;;;;:25;:29;;;;;;;;25924:143;25906:280;;;26094:9;:16;;-1:-1:-1;;26094:16:0;26106:4;26094:16;;;26125:17;:15;:17::i;:::-;26157:9;:17;;-1:-1:-1;;26157:17:0;;;25906:280;26214:9;;26198:12;;26214:9;;26213:10;:30;;;;-1:-1:-1;26227:16:0;;-1:-1:-1;;;26227:16:0;;;;26213:30;-1:-1:-1;;;;;26260:24:0;;;;;;:18;:24;;;;;;26198:45;;-1:-1:-1;26260:24:0;;;:50;;-1:-1:-1;;;;;;26288:22:0;;;;;;:18;:22;;;;;;;;26260:50;26256:98;;;-1:-1:-1;26337:5:0;26256:98;26368:7;:24;;;;-1:-1:-1;26379:9:0;;;;;;;:13;;26368:24;26364:332;;;26433:9;;26409:11;;26446:3;;26424:18;;26433:9;;;;;26424:6;:18;:::i;:::-;26423:26;;;;:::i;:::-;26409:40;-1:-1:-1;26473:12:0;26409:40;26473:6;:12;:::i;:::-;26464:21;;26528:1;26504:21;;:25;:69;;;;;26571:1;26549:18;;26534:12;:33;;;;:::i;:::-;:38;;26504:69;26500:129;;;26610:3;26594:12;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;26500:129:0;26643:41;26659:4;26673;26680:3;26643:15;:41::i;:::-;26394:302;26364:332;26706:33;26722:4;26728:2;26732:6;26706:15;:33::i;:::-;24724:2023;;24611:2136;;;:::o;27987:939::-;28153:23;;:47;;;;-1:-1:-1;;;28153:23:0;;;;:47;28149:250;;28222:104;;-1:-1:-1;;;20540:34:1;;20599:2;20590:12;28222:104:0;;;;;;;;28265:23;;28222:104;;28265:23;-1:-1:-1;;;28265:23:0;;;;;28222:104;;;;-1:-1:-1;;;;;;;;;;;28222:104:0;;;28311:14;;;;;;28222:104;:::i;:::-;;;;;;;;28341:46;;-1:-1:-1;;;;28341:46:0;-1:-1:-1;;;28341:46:0;;;;;;;28149:250;28413:23;;:47;;;;-1:-1:-1;;;28413:23:0;;;;:47;28409:250;;28482:104;;-1:-1:-1;;;21029:34:1;;21088:2;21079:12;28482:104:0;;;;;;;;28525:23;;28482:104;;28525:23;-1:-1:-1;;;28525:23:0;;;;;28482:104;;;;-1:-1:-1;;;;;;;;;;;28482:104:0;;;28571:14;;;;;;28482:104;:::i;:::-;;;;;;;;28601:46;;-1:-1:-1;;;;28601:46:0;-1:-1:-1;;;28601:46:0;;;;;;;28409:250;28673:23;;:47;;;;-1:-1:-1;;;28673:23:0;;;;:47;28669:250;;28742:104;;-1:-1:-1;;;21304:34:1;;21363:2;21354:12;28742:104:0;;;;;;;;28785:23;;28742:104;;28785:23;-1:-1:-1;;;28785:23:0;;;;;28742:104;;;;-1:-1:-1;;;;;;;;;;;28742:104:0;;;28831:14;;;;;;28742:104;:::i;:::-;;;;;;;;28861:46;;;;;-1:-1:-1;;;28861:46:0;-1:-1:-1;;;;28861:46:0;;;;;;27987:939;;;;:::o;28932:914::-;29094:22;;:45;;;;-1:-1:-1;;;29094:22:0;;;;:45;29090:243;;29161:101;;-1:-1:-1;;;21579:33:1;;21637:2;21628:12;29161:101:0;;;;;;;;29203:22;;29161:101;;29203:22;-1:-1:-1;;;29203:22:0;;;;;29161:101;;;;-1:-1:-1;;;;;;;;;;;29161:101:0;;;29247:14;;;;;;29161:101;:::i;:::-;;;;;;;;29277:44;;-1:-1:-1;;;;29277:44:0;-1:-1:-1;;;29277:44:0;;;;;;;29090:243;29347:22;;:45;;;;-1:-1:-1;;;29347:22:0;;;;:45;29343:243;;29414:101;;-1:-1:-1;;;21853:33:1;;21911:2;21902:12;29414:101:0;;;;;;;;29456:22;;29414:101;;29456:22;-1:-1:-1;;;29456:22:0;;;;;29414:101;;;;-1:-1:-1;;;;;;;;;;;29414:101:0;;;29500:14;;;;;;29414:101;:::i;:::-;;;;;;;;29530:44;;-1:-1:-1;;;;29530:44:0;-1:-1:-1;;;29530:44:0;;;;;;;29343:243;29600:22;;:45;;;;-1:-1:-1;;;29600:22:0;;;;:45;29596:243;;29667:101;;-1:-1:-1;;;22127:33:1;;22185:2;22176:12;29667:101:0;;;;;;;;29709:22;;29667:101;;29709:22;-1:-1:-1;;;29709:22:0;;;;;29667:101;;;;-1:-1:-1;;;;;;;;;;;29667:101:0;;;29753:14;;;;;;29667:101;:::i;:::-;;;;;;;;29783:44;;;;;-1:-1:-1;;;29783:44:0;-1:-1:-1;;;;29783:44:0;;;;;;28932:914;;;;:::o;9309:840::-;-1:-1:-1;;;;;9440:18:0;;9432:68;;;;-1:-1:-1;;;9432:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9519:16:0;;9511:64;;;;-1:-1:-1;;;9511:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9661:15:0;;9639:19;9661:15;;;:9;:15;;;;;;9695:21;;;;9687:72;;;;-1:-1:-1;;;9687:72:0;;22401:2:1;9687:72:0;;;22383:21:1;22440:2;22420:18;;;22413:30;22479:34;22459:18;;;22452:62;-1:-1:-1;;;22530:18:1;;;22523:36;22576:19;;9687:72:0;22199:402:1;9687:72:0;-1:-1:-1;;;;;9795:15:0;;;;;;;:9;:15;;;;;;9813:20;;;9795:38;;10013:13;;;;;;;;;;:23;;;;;;10065:26;;;;;;9827:6;1769:25:1;;1757:2;1742:18;;1623:177;10065:26:0;;;;;;;;10104:37;23170:703;26755:1224;26854:14;:18;;-1:-1:-1;;26912:18:0;;;26943:362;;;;26979:11;;;;:56;;;;;27034:1;27012:18;;26994:15;:36;;;;:::i;:::-;:41;;26979:56;26975:319;;;27056:14;:20;;-1:-1:-1;;27056:20:0;27073:3;27056:20;;;26975:319;;;27134:5;:24;27117:14;:41;;-1:-1:-1;;;27134:24:0;;;;;;-1:-1:-1;;27177:41:0;;;;;;;27134:24;-1:-1:-1;;;27194:24:0;;;;27177:41;;-1:-1:-1;;27237:41:0;-1:-1:-1;;;27254:24:0;;;;27237:41;;;;;;;;26975:319;27319:10;27315:199;;;27363:5;:25;27346:14;:42;;-1:-1:-1;;;27363:25:0;;;;;;-1:-1:-1;;27403:42:0;;;;;;;27363:25;-1:-1:-1;;;27420:25:0;;;;27403:42;;-1:-1:-1;;27460:42:0;-1:-1:-1;;;27477:25:0;;;;27460:42;;;;;;;;27315:199;27529:10;27528:11;:27;;;;;27544:11;27543:12;27528:27;:105;;;;-1:-1:-1;;;;;;27560:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;27599:33:0;;;;;;:29;:33;;;;;;;;27560:72;27524:291;;;27667:5;:24;27650:14;:41;;-1:-1:-1;;;27667:24:0;;;;;;-1:-1:-1;;27706:41:0;;;;;;;27667:24;-1:-1:-1;;;27723:24:0;;;;27706:41;;-1:-1:-1;;27762:41:0;-1:-1:-1;;;27779:24:0;;;;27762:41;;;;;;;;27524:291;27871:14;;;;;;;;;27837:31;;27871:14;27854;;;;;27837;:31;:::i;:::-;:48;;;;:::i;:::-;27825:9;:60;;;;;;;;;;-1:-1:-1;;27825:60:0;;;;;;;;27901:70;;;27913:14;;;;;;;;;;22974:36:1;;27825:60:0;27929:14;;;;23041:2:1;23026:18;;23019:45;27945:14:0;;;;;23080:18:1;;;23073:45;27961:9:0;;;;;23149:2:1;23134:18;;23127:45;27901:70:0;;;;;;;22961:3:1;27901:70:0;;;26755:1224;;;;:::o;29854:1163::-;29944:4;29900:23;7711:18;;;:9;:18;;;;;;30086:9;;7711:18;;29989:21;;30098:1;;30086:9;;;;;;;30050:32;;30068:14;7711:18;30050:32;:::i;:::-;30049:46;;;;:::i;:::-;:50;;;;:::i;:::-;30023:76;-1:-1:-1;30110:20:0;30133:33;30023:76;30133:15;:33;:::i;:::-;30110:56;;30179:31;30197:12;30179:17;:31::i;:::-;30223:27;30253:41;30277:17;30253:21;:41;:::i;:::-;30340:14;;30223:71;;-1:-1:-1;30305:19:0;;30340:18;;30357:1;;30340:14;;:18;:::i;:::-;30327:9;;:32;;;:9;;;;;:32;:::i;:::-;30423:14;;30305:54;;;;;-1:-1:-1;30370:27:0;;30455:1;;30305:54;;30401:36;;30423:14;30401:19;:36;:::i;:::-;30400:52;;;;:::i;:::-;:56;;;;:::i;:::-;30520:14;;30370:86;;-1:-1:-1;30467:27:0;;30538:11;;30498:36;;30520:14;;;;;30498:19;:36;:::i;:::-;30497:52;;;;:::i;:::-;30467:82;-1:-1:-1;30560:27:0;30613:42;30467:82;30613:19;:42;:::i;:::-;30590:66;;:19;:66;:::i;:::-;30695:16;;30560:96;;-1:-1:-1;30669:64:0;;-1:-1:-1;;;;;30695:16:0;30560:96;30669:17;:64::i;:::-;30770:16;;30744:64;;-1:-1:-1;;;;;30770:16:0;30788:19;30744:17;:64::i;:::-;30825:19;;30821:189;;30861:51;30875:15;30892:19;30861:13;:51::i;:::-;30932:66;;;23711:25:1;;;23767:2;23752:18;;23745:34;;;23795:18;;;23788:34;;;30932:66:0;;23699:2:1;23684:18;30932:66:0;;;;;;;30821:189;29889:1128;;;;;;;;;29854:1163::o;31025:500::-;31116:16;;;31130:1;31116:16;;;;;;;;31092:21;;31116:16;;;;;;;;;;-1:-1:-1;31116:16:0;31092:40;;31161:4;31143;31148:1;31143:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31143:23:0;;;:7;;;;;;;;;;:23;;;;31187:15;;:22;;;-1:-1:-1;;;31187:22:0;;;;:15;;;;;:20;;:22;;;;;31143:7;;31187:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31177:4;31182:1;31177:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31177:32:0;;;:7;;;;;;;;;:32;31252:15;;31220:62;;31237:4;;31252:15;31270:11;31220:8;:62::i;:::-;31293:15;;:224;;-1:-1:-1;;;31293:224:0;;-1:-1:-1;;;;;31293:15:0;;;;:66;;:224;;31374:11;;31293:15;;31444:4;;31471;;31491:15;;31293:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31081:444;31025:500;:::o;2420:322::-;2534:6;2509:21;:31;;2496:86;;;;-1:-1:-1;;;2496:86:0;;25284:2:1;2496:86:0;;;25266:21:1;25323:2;25303:18;;;25296:30;25362:31;25342:18;;;25335:59;25411:18;;2496:86:0;25082:353:1;2496:86:0;2590:12;2608:9;-1:-1:-1;;;;;2608:14:0;2630:6;2608:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2589:52;;;2659:7;2646:91;;;;-1:-1:-1;;;2646:91:0;;25642:2:1;2646:91:0;;;25624:21:1;25681:2;25661:18;;;25654:30;25720:34;25700:18;;;25693:62;25791:28;25771:18;;;25764:56;25837:19;;2646:91:0;25440:422:1;31533:426:0;31647:15;;31615:62;;31632:4;;-1:-1:-1;;;;;31647:15:0;31665:11;31615:8;:62::i;:::-;31688:15;;31894:16;;31688:263;;-1:-1:-1;;;31688:263:0;;31762:4;31688:263;;;26208:34:1;26258:18;;;26251:34;;;31688:15:0;26301:18:1;;;26294:34;;;26344:18;;;26337:34;-1:-1:-1;;;;;31894:16:0;;;26387:19:1;;;26380:44;31925:15:0;26440:19:1;;;26433:35;31688:15:0;;;:31;;31728:9;;26142:19:1;;31688:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;814:70;759:131;:::o;895:315::-;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2455:118::-;2541:5;2534:13;2527:21;2520:5;2517:32;2507:60;;2563:1;2560;2553:12;2578:382;2643:6;2651;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;2759:9;2746:23;2778:31;2803:5;2778:31;:::i;:::-;2828:5;-1:-1:-1;2885:2:1;2870:18;;2857:32;2898:30;2857:32;2898:30;:::i;:::-;2947:7;2937:17;;;2578:382;;;;;:::o;3173:247::-;3232:6;3285:2;3273:9;3264:7;3260:23;3256:32;3253:52;;;3301:1;3298;3291:12;3253:52;3340:9;3327:23;3359:31;3384:5;3359:31;:::i;:::-;3409:5;3173:247;-1:-1:-1;;;3173:247:1:o;3425:529::-;3502:6;3510;3518;3571:2;3559:9;3550:7;3546:23;3542:32;3539:52;;;3587:1;3584;3577:12;3539:52;3626:9;3613:23;3645:31;3670:5;3645:31;:::i;:::-;3695:5;-1:-1:-1;3752:2:1;3737:18;;3724:32;3765:33;3724:32;3765:33;:::i;:::-;3817:7;-1:-1:-1;3876:2:1;3861:18;;3848:32;3889:33;3848:32;3889:33;:::i;:::-;3941:7;3931:17;;;3425:529;;;;;:::o;3959:156::-;4025:20;;4085:4;4074:16;;4064:27;;4054:55;;4105:1;4102;4095:12;4054:55;3959:156;;;:::o;4120:322::-;4191:6;4199;4207;4260:2;4248:9;4239:7;4235:23;4231:32;4228:52;;;4276:1;4273;4266:12;4228:52;4299:27;4316:9;4299:27;:::i;:::-;4289:37;;4345:36;4377:2;4366:9;4362:18;4345:36;:::i;:::-;4335:46;;4400:36;4432:2;4421:9;4417:18;4400:36;:::i;:::-;4390:46;;4120:322;;;;;:::o;4792:388::-;4860:6;4868;4921:2;4909:9;4900:7;4896:23;4892:32;4889:52;;;4937:1;4934;4927:12;4889:52;4976:9;4963:23;4995:31;5020:5;4995:31;:::i;:::-;5045:5;-1:-1:-1;5102:2:1;5087:18;;5074:32;5115:33;5074:32;5115:33;:::i;5185:380::-;5264:1;5260:12;;;;5307;;;5328:61;;5382:4;5374:6;5370:17;5360:27;;5328:61;5435:2;5427:6;5424:14;5404:18;5401:38;5398:161;;5481:10;5476:3;5472:20;5469:1;5462:31;5516:4;5513:1;5506:15;5544:4;5541:1;5534:15;5398:161;;5185:380;;;:::o;5570:356::-;5772:2;5754:21;;;5791:18;;;5784:30;5850:34;5845:2;5830:18;;5823:62;5917:2;5902:18;;5570:356::o;6553:251::-;6623:6;6676:2;6664:9;6655:7;6651:23;6647:32;6644:52;;;6692:1;6689;6682:12;6644:52;6724:9;6718:16;6743:31;6768:5;6743:31;:::i;8690:127::-;8751:10;8746:3;8742:20;8739:1;8732:31;8782:4;8779:1;8772:15;8806:4;8803:1;8796:15;8822:128;8889:9;;;8910:11;;;8907:37;;;8924:18;;:::i;9779:245::-;9846:6;9899:2;9887:9;9878:7;9874:23;9870:32;9867:52;;;9915:1;9912;9905:12;9867:52;9947:9;9941:16;9966:28;9988:5;9966:28;:::i;10029:125::-;10094:9;;;10115:10;;;10112:36;;;10128:18;;:::i;13240:411::-;13442:2;13424:21;;;13481:2;13461:18;;;13454:30;13520:34;13515:2;13500:18;;13493:62;-1:-1:-1;;;13586:2:1;13571:18;;13564:45;13641:3;13626:19;;13240:411::o;17505:401::-;17707:2;17689:21;;;17746:2;17726:18;;;17719:30;17785:34;17780:2;17765:18;;17758:62;-1:-1:-1;;;17851:2:1;17836:18;;17829:35;17896:3;17881:19;;17505:401::o;17911:399::-;18113:2;18095:21;;;18152:2;18132:18;;;18125:30;18191:34;18186:2;18171:18;;18164:62;-1:-1:-1;;;18257:2:1;18242:18;;18235:33;18300:3;18285:19;;17911:399::o;19908:168::-;19981:9;;;20012;;20029:15;;;20023:22;;20009:37;19999:71;;20050:18;;:::i;20081:127::-;20142:10;20137:3;20133:20;20130:1;20123:31;20173:4;20170:1;20163:15;20197:4;20194:1;20187:15;20213:120;20253:1;20279;20269:35;;20284:18;;:::i;:::-;-1:-1:-1;20318:9:1;;20213:120::o;20613:209::-;-1:-1:-1;;20777:38:1;;;;20759:57;;20747:2;20732:18;;20613:209::o;22606:148::-;22694:4;22673:12;;;22687;;;22669:31;;22712:13;;22709:39;;;22728:18;;:::i;23183:165::-;23221:1;23255:4;23252:1;23248:12;23279:3;23269:37;;23286:18;;:::i;:::-;23338:3;23331:4;23328:1;23324:12;23320:22;23315:27;;;23183:165;;;;:::o;23353:151::-;23443:4;23436:12;;;23422;;;23418:31;;23461:14;;23458:40;;;23478:18;;:::i;23965:127::-;24026:10;24021:3;24017:20;24014:1;24007:31;24057:4;24054:1;24047:15;24081:4;24078:1;24071:15;24097:980;24359:4;24407:3;24396:9;24392:19;24438:6;24427:9;24420:25;24464:2;24502:6;24497:2;24486:9;24482:18;24475:34;24545:3;24540:2;24529:9;24525:18;24518:31;24569:6;24604;24598:13;24635:6;24627;24620:22;24673:3;24662:9;24658:19;24651:26;;24712:2;24704:6;24700:15;24686:29;;24733:1;24743:195;24757:6;24754:1;24751:13;24743:195;;;24822:13;;-1:-1:-1;;;;;24818:39:1;24806:52;;24913:15;;;;24878:12;;;;24854:1;24772:9;24743:195;;;-1:-1:-1;;;;;;;24994:32:1;;;;24989:2;24974:18;;24967:60;-1:-1:-1;;;25058:3:1;25043:19;25036:35;24955:3;24097:980;-1:-1:-1;;;24097:980:1:o;26479:306::-;26567:6;26575;26583;26636:2;26624:9;26615:7;26611:23;26607:32;26604:52;;;26652:1;26649;26642:12;26604:52;26681:9;26675:16;26665:26;;26731:2;26720:9;26716:18;26710:25;26700:35;;26775:2;26764:9;26760:18;26754:25;26744:35;;26479:306;;;;;:::o

Swarm Source

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