ETH Price: $3,473.12 (+1.59%)
Gas: 11 Gwei

Token

Balto Token (BALTO)
 

Overview

Max Total Supply

220,000,000 BALTO

Holders

165 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,824.573126024015413895 BALTO

Value
$0.00
0x2d07cd174a5041bac0735cc55e49124fe86c4bf7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Balto Token provides holders with a growth- and utility-forward approach. An integrated ecosystem, utilyzing concepts like treasury, NFTs, rewards, Crypto mining, staking, farming and more.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BaltoToken

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 2022-11-16
*/

// 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 BaltoToken is Ownable, ERC20 {
    using Address for address;

    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Balto Token";
    string private constant _symbol = "BALTO";

    bool public isTradingEnabled;

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

    // max buy and sell tx is 2.25% of initialSupply
    uint256 public maxTxAmount = initialSupply * 225 / 10000;

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

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

    address public liquidityWallet;
    address public operationsWallet;
    address public buyBackWallet;
    address public charityWallet;
    address public otherWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 operationsFeeOnBuy;
        uint8 operationsFeeOnSell;
        uint8 buyBackFeeOnBuy;
        uint8 buyBackFeeOnSell;
        uint8 charityFeeOnBuy;
        uint8 charityFeeOnSell;
        uint8 otherFeeOnBuy;
        uint8 otherFeeOnSell;
    }

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

    bool private _isLaunched;
    uint256 private _launchStartTimestamp;
    uint256 private _launchBlockNumber;

    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 _liquidityFee;
    uint8 private _operationsFee;
    uint8 private _buyBackFee;
    uint8 private _charityFee;
    uint8 private _otherFee;
    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 liquidityFee,uint8 operationsFee,uint8 buyBackFee,uint8 charityFee,uint8 otherFee);
    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 ClaimETHOverflow(uint256 amount);
    event FeesApplied(uint8 liquidityFee,uint8 operationsFee,uint8 buyBackFee,uint8 charityFee,uint8 otherFee,uint8 totalFee);

    constructor() ERC20(_name, _symbol) {
        liquidityWallet = owner();
        operationsWallet = owner();
        buyBackWallet = owner();
        otherWallet = 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 {}

    // Setters
    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
        if(_launchBlockNumber == 0) {
            _launchBlockNumber = block.number;
            _launchStartTimestamp = block.timestamp;
            _isLaunched = true;
        }
    }
    function deactivateTrading() external onlyOwner {
        isTradingEnabled = false;
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value,"Balto: 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], "Balto: Account is already blocked");
        if (_isLaunched) {
            require((block.timestamp - _launchStartTimestamp) < 172800, "Balto: Time to block accounts has expired");
        }
        _isBlocked[account] = true;
        emit BlockedAccountChange(account, true);
    }
    function unblockAccount(address account) external onlyOwner {
        require(_isBlocked[account], "Balto: Account is not blcoked");
        _isBlocked[account] = false;
        emit BlockedAccountChange(account, false);
    }
    function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner {
        require(_feeOnSelectedWalletTransfers[account] != value,"Balto: 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,"Balto: 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,"Balto: 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,"Balto: Account is already the value of 'excluded'");
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }
    function setWallets(
        address newLiquidityWallet,address newOperationsWallet,address newBuyBackWallet,address newCharityWallet,address newOtherWallet
    ) external onlyOwner {
        if (liquidityWallet != newLiquidityWallet) {
            require(newLiquidityWallet != address(0), "Balto: The liquidityWallet cannot be 0");
            emit WalletChange("liquidityWallet", newLiquidityWallet, liquidityWallet);
            liquidityWallet = newLiquidityWallet;
        }
        if (operationsWallet != newOperationsWallet) {
            require(newOperationsWallet != address(0), "Balto: The operationsWallet cannot be 0");
            emit WalletChange("operationsWallet", newOperationsWallet, operationsWallet);
            operationsWallet = newOperationsWallet;
        }
        if (buyBackWallet != newBuyBackWallet) {
            require(newBuyBackWallet != address(0), "Balto: The buyBackWallet cannot be 0");
            emit WalletChange("buyBackWallet", newBuyBackWallet, buyBackWallet);
            buyBackWallet = newBuyBackWallet;
        }
        if (charityWallet != newCharityWallet) {
            require(newCharityWallet != address(0), "Balto: The charityWallet cannot be 0");
            emit WalletChange("charityWallet", newCharityWallet, charityWallet);
            charityWallet = newCharityWallet;
        }
        if (otherWallet != newOtherWallet) {
            require(newOtherWallet != address(0), "Balto: The otherWallet cannot be 0");
            emit WalletChange("otherWallet", newOtherWallet, otherWallet);
            otherWallet = newOtherWallet;
        }
    }
    // Base fees
    function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy,uint8 _operationsFeeOnBuy,uint8 _buyBackFeeOnBuy,uint8 _charityFeeOnBuy,uint8 _otherFeeOnBuy) external onlyOwner {
        _setCustomBuyTaxPeriod(_base,_liquidityFeeOnBuy,_operationsFeeOnBuy,_buyBackFeeOnBuy,_charityFeeOnBuy,_otherFeeOnBuy);
        emit FeeChange("baseFees-Buy",_liquidityFeeOnBuy,_operationsFeeOnBuy,_buyBackFeeOnBuy,_charityFeeOnBuy,_otherFeeOnBuy);
    }
    function setBaseFeesOnSell(uint8 _liquidityFeeOnSell,uint8 _operationsFeeOnSell,uint8 _buyBackFeeOnSell,uint8 _charityFeeOnSell,uint8 _otherFeeOnSell) external onlyOwner {
        _setCustomSellTaxPeriod(_base,_liquidityFeeOnSell,_operationsFeeOnSell,_buyBackFeeOnSell,_charityFeeOnSell,_otherFeeOnSell);
        emit FeeChange("baseFees-Sell",_liquidityFeeOnSell,_operationsFeeOnSell,_buyBackFeeOnSell,_charityFeeOnSell,_otherFeeOnSell);
    }
    function setUniswapRouter(address newAddress) external onlyOwner {
        require(newAddress != address(uniswapV2Router),"Balto: The router already has that address");
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
    }
    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxTxAmount, "Balto: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }
    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxWalletAmount,"Balto: Cannot update maxWalletAmount to same value");
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }
    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(newValue != minimumTokensBeforeSwap,"Balto: Cannot update minimumTokensBeforeSwap to same value");
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }
    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(amount <= address(this).balance, "Balto: Cannot send more than contract balance");
        (bool success, ) = address(owner()).call{ value: amount }("");
        if (success) {
            emit ClaimETHOverflow(amount);
        }
    }

    // Getters
    function getBaseBuyFees() external view returns (uint8,uint8,uint8,uint8,uint8) {
        return (_base.liquidityFeeOnBuy,_base.operationsFeeOnBuy,_base.buyBackFeeOnBuy,_base.charityFeeOnBuy,_base.otherFeeOnBuy);
    }
    function getBaseSellFees() external view returns (uint8,uint8,uint8,uint8,uint8) {
        return (_base.liquidityFeeOnSell,_base.operationsFeeOnSell,_base.buyBackFeeOnSell,_base.charityFeeOnSell,_base.otherFeeOnSell);
    }
    // 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, "Balto: Trading is currently disabled.");
            require(!_isBlocked[to], "Balto: Account is blocked");
            require(!_isBlocked[from], "Balto: Account is blocked");
            if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
                require(amount <= maxTxAmount, "Balto: Buy amount exceeds the maxTxBuyAmount.");
            }
            if (!_isExcludedFromMaxWalletLimit[to]) {
                require((balanceOf(to) + amount) <= maxWalletAmount, "Balto: 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;
            super._transfer(from, address(this), fee);
        }
        super._transfer(from, to, amount);
    }

    function _adjustTaxes(bool isBuyFromLp,bool isSelltoLp,address from,address to) private {
        _liquidityFee = 0;
        _operationsFee = 0;
        _buyBackFee = 0;
        _charityFee = 0;
        _otherFee = 0;

        if (isBuyFromLp) {
            if (_isLaunched && block.number - _launchBlockNumber <= 5) {
                _liquidityFee = 100;
            } else {
                _liquidityFee = _base.liquidityFeeOnBuy;
                _operationsFee = _base.operationsFeeOnBuy;
                _buyBackFee = _base.buyBackFeeOnBuy;
                _charityFee = _base.charityFeeOnBuy;
                _otherFee = _base.otherFeeOnBuy;
            }
        }
        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _operationsFee = _base.operationsFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _charityFee = _base.charityFeeOnSell;
            _otherFee = _base.otherFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _operationsFee = _base.operationsFeeOnBuy;
            _buyBackFee = _base.buyBackFeeOnBuy;
            _charityFee = _base.charityFeeOnBuy;
            _otherFee = _base.otherFeeOnBuy;
        }
        _totalFee = _liquidityFee + _operationsFee + _buyBackFee + _charityFee + _otherFee;
        emit FeesApplied(_liquidityFee, _operationsFee, _buyBackFee, _charityFee, _otherFee, _totalFee);
    }

    function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidityFeeOnSell,uint8 _operationsFeeOnSell,uint8 _buyBackFeeOnSell,uint8 _charityFeeOnSell,uint8 _otherFeeOnSell) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(_liquidityFeeOnSell,map.liquidityFeeOnSell,"liquidityFeeOnSell",map.periodName);
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.operationsFeeOnSell != _operationsFeeOnSell) {
            emit CustomTaxPeriodChange(_operationsFeeOnSell,map.operationsFeeOnSell,"operationsFeeOnSell",map.periodName);
            map.operationsFeeOnSell = _operationsFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit CustomTaxPeriodChange(_buyBackFeeOnSell,map.buyBackFeeOnSell,"buyBackFeeOnSell",map.periodName);
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.charityFeeOnSell != _charityFeeOnSell) {
            emit CustomTaxPeriodChange(_charityFeeOnSell,map.charityFeeOnSell,"charityFeeOnSell",map.periodName);
            map.charityFeeOnSell = _charityFeeOnSell;
        }
        if (map.otherFeeOnSell != _otherFeeOnSell) {
            emit CustomTaxPeriodChange(_otherFeeOnSell,map.otherFeeOnSell,"otherFeeOnSell",map.periodName);
            map.otherFeeOnSell = _otherFeeOnSell;
        }
    }
    function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidityFeeOnBuy,uint8 _operationsFeeOnBuy,uint8 _buyBackFeeOnBuy,uint8 _charityFeeOnBuy,uint8 _otherFeeOnBuy) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(_liquidityFeeOnBuy,map.liquidityFeeOnBuy,"liquidityFeeOnBuy",map.periodName);
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.operationsFeeOnBuy != _operationsFeeOnBuy) {
            emit CustomTaxPeriodChange(_operationsFeeOnBuy,map.operationsFeeOnBuy,"operationsFeeOnBuy",map.periodName);
            map.operationsFeeOnBuy = _operationsFeeOnBuy;
        }
        if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
            emit CustomTaxPeriodChange(_buyBackFeeOnBuy,map.buyBackFeeOnBuy,"buyBackFeeOnBuy",map.periodName);
            map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
        }
        if (map.charityFeeOnBuy != _charityFeeOnBuy) {
            emit CustomTaxPeriodChange(_charityFeeOnBuy,map.charityFeeOnBuy,"charityFeeOnBuy",map.periodName);
            map.charityFeeOnBuy = _charityFeeOnBuy;
        }
        if (map.otherFeeOnBuy != _otherFeeOnBuy) {
            emit CustomTaxPeriodChange(_otherFeeOnBuy,map.otherFeeOnBuy,"otherFeeOnBuy",map.periodName);
            map.otherFeeOnBuy = _otherFeeOnBuy;
        }
    }

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

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

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee - (_liquidityFee / 2);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) / totalETHFee / 2;
        uint256 amountETHOperations = (ETHBalanceAfterSwap * _operationsFee) / totalETHFee;
        uint256 amountETHBuyBack = (ETHBalanceAfterSwap * _buyBackFee) / totalETHFee;
        uint256 amountETHCharity = (ETHBalanceAfterSwap * _charityFee) / totalETHFee;
        uint256 amountETHOther = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHBuyBack + amountETHOperations + amountETHCharity);

        Address.sendValue(payable(operationsWallet),amountETHOperations);
        Address.sendValue(payable(buyBackWallet),amountETHBuyBack);
        Address.sendValue(payable(charityWallet),amountETHCharity);
        Address.sendValue(payable(otherWallet),amountETHOther);

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(amountToSwap, amountETHLiquidity, 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
            liquidityWallet,
            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":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","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":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"charityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"otherFee","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":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"charityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"otherFee","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":"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":"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":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","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"},{"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"},{"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":"liquidityWallet","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":"otherWallet","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":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_charityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_otherFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_charityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_otherFeeOnSell","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":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newOperationsWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"},{"internalType":"address","name":"newCharityWallet","type":"address"},{"internalType":"address","name":"newOtherWallet","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"}]

60a06040526ab5facfe5b81c365c00000060075561271060075460e1620000279190620006ff565b6200003391906200071f565b60085561271060075460646200004a9190620006ff565b6200005691906200071f565b600955620186a060075460196200006e9190620006ff565b6200007a91906200071f565b600b55604080516101a081018252636261736560e01b81526000602082018190529181018290526001606082018190526080820181905260a0820181905260c0820152600260e08201819052610100820181905261012082018190526101408201819052610160820181905261018090910152601180546001600160c01b031916636261736560981b1790556012556013805469020202020202010101016001600160501b03199091161790553480156200013457600080fd5b506040518060400160405280600b81526020016a2130b63a37902a37b5b2b760a91b8152506040518060400160405280600581526020016442414c544f60d81b8152506000620001896200052b60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001e18382620007e6565b506005620001f08282620007e6565b505060008054600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e8054831682179055601080549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9350839163c45a01559160048083019260209291908290030181865afa15801562000288573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ae9190620008b2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003229190620008b2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000370573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003969190620008b2565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003ca8160016200052f565b6001601a6000620003e36000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601a9092528120805490921660019081179092556018906200043c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553080825260188552838220805487166001908117909155601b865284832080548816821790558784168352601c95869052848320805488168217905560065490931682528382208054871684179055815291822080549094168117909355620004db6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620005236200051a6000546001600160a01b031690565b6007546200061f565b5050620008fa565b3390565b6001600160a01b0382166000908152601d602052604090205481151560ff909116151503620005cb5760405162461bcd60e51b815260206004820152603f60248201527f42616c746f3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084015b60405180910390fd5b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620006775760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005c2565b80600360008282546200068b9190620008e4565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620007195762000719620006e9565b92915050565b6000826200073d57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200076d57607f821691505b6020821081036200078e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006e457600081815260208120601f850160051c81016020861015620007bd5750805b601f850160051c820191505b81811015620007de57828155600101620007c9565b505050505050565b81516001600160401b0381111562000802576200080262000742565b6200081a8162000813845462000758565b8462000794565b602080601f831160018114620008525760008415620008395750858301515b600019600386901b1c1916600185901b178555620007de565b600085815260208120601f198616915b82811015620008835788860151825594840194600190910190840162000862565b5085821015620008a25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008c557600080fd5b81516001600160a01b0381168114620008dd57600080fd5b9392505050565b80820180821115620007195762000719620006e9565b6080516138926200091660003960006104cc01526138926000f3fe6080604052600436106102815760003560e01c80637c0a893d1161014f578063b1ba39ea116100c1578063d32215761161007a578063d3221576146107ef578063d46980161461080f578063dd62ed3e1461082f578063f2fde38b1461084f578063fd72e22a1461086f578063fe0175351461088f57600080fd5b8063b1ba39ea146106d8578063b62496f5146106f8578063bea9849e14610728578063c024666814610748578063cd43e22814610768578063d2d7ad83146107d957600080fd5b806395d89b411161011357806395d89b411461062d5780639fad968314610642578063a457c2d714610662578063a9059cbb14610682578063aa4bde28146106a2578063aee50b1e146106b857600080fd5b80637c0a893d1461059957806382528791146105b9578063880bcbc1146105d95780638c0b5e22146105f95780638da5cb5b1461060f57600080fd5b806327a14fc2116101f357806349bd5a5e116101ac57806349bd5a5e146104ba5780634d78fdc6146104ee57806370a082311461050e578063715018a614610544578063781edb3c146105595780637b2087691461057957600080fd5b806327a14fc214610413578063313ce5671461043357806334cf1fea1461044f578063378dc3dc14610464578063395093511461047a57806345a423291461049a57600080fd5b80630d36f564116102455780630d36f5641461033c5780631694505e1461037457806318160ddd146103945780631cd348c0146103b35780631e293c10146103d357806323b872dd146103f357600080fd5b8063064a59d01461028d57806306fdde03146102c3578063095ea7b3146102e5578063098df585146103055780630bd05b691461032757600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506006546102ae90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102cf57600080fd5b506102d86108d5565b6040516102ba91906132b2565b3480156102f157600080fd5b506102ae610300366004613318565b610967565b34801561031157600080fd5b50610325610320366004613344565b610981565b005b34801561033357600080fd5b50610325610aae565b34801561034857600080fd5b5060105461035c906001600160a01b031681565b6040516001600160a01b0390911681526020016102ba565b34801561038057600080fd5b5060065461035c906001600160a01b031681565b3480156103a057600080fd5b506003545b6040519081526020016102ba565b3480156103bf57600080fd5b50600e5461035c906001600160a01b031681565b3480156103df57600080fd5b506103256103ee366004613344565b610b0d565b3480156103ff57600080fd5b506102ae61040e36600461335d565b610bd2565b34801561041f57600080fd5b5061032561042e366004613344565b610bf6565b34801561043f57600080fd5b50604051601281526020016102ba565b34801561045b57600080fd5b50610325610cbf565b34801561047057600080fd5b506103a560075481565b34801561048657600080fd5b506102ae610495366004613318565b610cf8565b3480156104a657600080fd5b506103256104b536600461339e565b610d1a565b3480156104c657600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fa57600080fd5b506103256105093660046133dc565b610e3a565b34801561051a57600080fd5b506103a56105293660046133dc565b6001600160a01b031660009081526001602052604090205490565b34801561055057600080fd5b50610325610f19565b34801561056557600080fd5b5061032561057436600461339e565b610f8d565b34801561058557600080fd5b50600f5461035c906001600160a01b031681565b3480156105a557600080fd5b506103256105b43660046133dc565b61104f565b3480156105c557600080fd5b506103256105d4366004613400565b6111ba565b3480156105e557600080fd5b506103256105f436600461339e565b611640565b34801561060557600080fd5b506103a560085481565b34801561061b57600080fd5b506000546001600160a01b031661035c565b34801561063957600080fd5b506102d8611702565b34801561064e57600080fd5b5061032561065d366004613487565b611711565b34801561066e57600080fd5b506102ae61067d366004613318565b6117c8565b34801561068e57600080fd5b506102ae61069d366004613318565b611843565b3480156106ae57600080fd5b506103a560095481565b3480156106c457600080fd5b506103256106d3366004613344565b611851565b3480156106e457600080fd5b506103256106f3366004613487565b611925565b34801561070457600080fd5b506102ae6107133660046133dc565b601d6020526000908152604090205460ff1681565b34801561073457600080fd5b506103256107433660046133dc565b61197c565b34801561075457600080fd5b5061032561076336600461339e565b611a74565b34801561077457600080fd5b5060135460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102ba565b3480156107e557600080fd5b506103a5600b5481565b3480156107fb57600080fd5b5061032561080a36600461339e565b611b36565b34801561081b57600080fd5b50600c5461035c906001600160a01b031681565b34801561083b57600080fd5b506103a561084a3660046134ec565b611bb8565b34801561085b57600080fd5b5061032561086a3660046133dc565b611be3565b34801561087b57600080fd5b50600d5461035c906001600160a01b031681565b34801561089b57600080fd5b5060135460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107a5565b6060600480546108e49061351a565b80601f01602080910402602001604051908101604052809291908181526020018280546109109061351a565b801561095d5780601f106109325761010080835404028352916020019161095d565b820191906000526020600020905b81548152906001019060200180831161094057829003601f168201915b5050505050905090565b600033610975818585611ccd565b60019150505b92915050565b6000546001600160a01b031633146109b45760405162461bcd60e51b81526004016109ab90613554565b60405180910390fd5b47811115610a1a5760405162461bcd60e51b815260206004820152602d60248201527f42616c746f3a2043616e6e6f742073656e64206d6f7265207468616e20636f6e60448201526c74726163742062616c616e636560981b60648201526084016109ab565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a67576040519150601f19603f3d011682016040523d82523d6000602084013e610a6c565b606091505b505090508015610aaa576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6000546001600160a01b03163314610ad85760405162461bcd60e51b81526004016109ab90613554565b6006805460ff60a01b1916600160a01b179055601654600003610b0b5743601655426015556014805460ff191660011790555b565b6000546001600160a01b03163314610b375760405162461bcd60e51b81526004016109ab90613554565b6008548103610b9f5760405162461bcd60e51b815260206004820152602e60248201527f42616c746f3a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b60648201526084016109ab565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610be0858285611df1565b610beb858585611e6b565b506001949350505050565b6000546001600160a01b03163314610c205760405162461bcd60e51b81526004016109ab90613554565b6009548103610c8c5760405162461bcd60e51b815260206004820152603260248201527f42616c746f3a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b60648201526084016109ab565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610ce95760405162461bcd60e51b81526004016109ab90613554565b6006805460ff60a01b19169055565b600033610975818585610d0b8383611bb8565b610d15919061359f565b611ccd565b6000546001600160a01b03163314610d445760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503610dda5760405162461bcd60e51b815260206004820152603760248201527f42616c746f3a205468652073656c65637465642077616c6c657420697320616c60448201527f72656164792073657420746f207468652076616c75652000000000000000000060648201526084016109ab565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b03163314610e645760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b03811660009081526017602052604090205460ff16610ecc5760405162461bcd60e51b815260206004820152601d60248201527f42616c746f3a204163636f756e74206973206e6f7420626c636f6b656400000060448201526064016109ab565b6001600160a01b038116600081815260176020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b03163314610f435760405162461bcd60e51b81526004016109ab90613554565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610fb75760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b0382166000908152601c602052604090205481151560ff909116151503610ff75760405162461bcd60e51b81526004016109ab906135b2565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610e2e565b6000546001600160a01b031633146110795760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b03811660009081526017602052604090205460ff16156110ec5760405162461bcd60e51b815260206004820152602160248201527f42616c746f3a204163636f756e7420697320616c726561647920626c6f636b656044820152601960fa1b60648201526084016109ab565b60145460ff1615611168576202a300601554426111099190613603565b106111685760405162461bcd60e51b815260206004820152602960248201527f42616c746f3a2054696d6520746f20626c6f636b206163636f756e74732068616044820152681cc8195e1c1a5c995960ba1b60648201526084016109ab565b6001600160a01b038116600081815260176020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146111e45760405162461bcd60e51b81526004016109ab90613554565b600c546001600160a01b038681169116146112c5576001600160a01b03851661125e5760405162461bcd60e51b815260206004820152602660248201527f42616c746f3a20546865206c697175696469747957616c6c65742063616e6e6f60448201526507420626520360d41b60648201526084016109ab565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691871690600f016040519081900381209060008051602061381d83398151915290600090a4600c80546001600160a01b0319166001600160a01b0387161790555b600d546001600160a01b038581169116146113a8576001600160a01b0384166113405760405162461bcd60e51b815260206004820152602760248201527f42616c746f3a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b60648201526084016109ab565b600d546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b03918216918616906010016040519081900381209060008051602061381d83398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b03848116911614611484576001600160a01b03831661141f5760405162461bcd60e51b8152602060048201526024808201527f42616c746f3a20546865206275794261636b57616c6c65742063616e6e6f74206044820152630626520360e41b60648201526084016109ab565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691851690600d016040519081900381209060008051602061381d83398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b600f546001600160a01b03838116911614611560576001600160a01b0382166114fb5760405162461bcd60e51b8152602060048201526024808201527f42616c746f3a20546865206368617269747957616c6c65742063616e6e6f74206044820152630626520360e41b60648201526084016109ab565b600f546040516c18da185c9a5d1e55d85b1b195d609a1b81526001600160a01b0391821691841690600d016040519081900381209060008051602061381d83398151915290600090a4600f80546001600160a01b0319166001600160a01b0384161790555b6010546001600160a01b03828116911614611639576001600160a01b0381166115d65760405162461bcd60e51b815260206004820152602260248201527f42616c746f3a20546865206f7468657257616c6c65742063616e6e6f74206265604482015261020360f41b60648201526084016109ab565b6010546040516a1bdd1a195c95d85b1b195d60aa1b81526001600160a01b0391821691831690600b016040519081900381209060008051602061381d83398151915290600090a4601080546001600160a01b0319166001600160a01b0383161790555b5050505050565b6000546001600160a01b0316331461166a5760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036116aa5760405162461bcd60e51b81526004016109ab906135b2565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610e2e565b6060600580546108e49061351a565b6000546001600160a01b0316331461173b5760405162461bcd60e51b81526004016109ab90613554565b61174a6011868686868661235d565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b600033816117d68286611bb8565b9050838110156118365760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109ab565b610beb8286868403611ccd565b600033610975818585611e6b565b6000546001600160a01b0316331461187b5760405162461bcd60e51b81526004016109ab90613554565b600b5481036118f25760405162461bcd60e51b815260206004820152603a60248201527f42616c746f3a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c756500000000000060648201526084016109ab565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b0316331461194f5760405162461bcd60e51b81526004016109ab90613554565b61195e60118686868686612644565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611763565b6000546001600160a01b031633146119a65760405162461bcd60e51b81526004016109ab90613554565b6006546001600160a01b0390811690821603611a175760405162461bcd60e51b815260206004820152602a60248201527f42616c746f3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b60648201526084016109ab565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a9e5760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503611ade5760405162461bcd60e51b81526004016109ab906135b2565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610e2e565b6000546001600160a01b03163314611b605760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610e2e565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611c0d5760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b038116611c725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ab565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d2f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ab565b6001600160a01b038216611d905760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ab565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611dfd8484611bb8565b90506000198114611e655781811015611e585760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109ab565b611e658484848403611ccd565b50505050565b6001600160a01b038316611e915760405162461bcd60e51b81526004016109ab90613616565b6001600160a01b038216611eb75760405162461bcd60e51b81526004016109ab9061365b565b80600003611ed057611ecb83836000612947565b505050565b6001600160a01b03831660009081526018602052604090205460ff16158015611f1257506001600160a01b03821660009081526018602052604090205460ff16155b156121b857600654600160a01b900460ff16611f7e5760405162461bcd60e51b815260206004820152602560248201527f42616c746f3a2054726164696e672069732063757272656e746c792064697361604482015264313632b21760d91b60648201526084016109ab565b6001600160a01b03821660009081526017602052604090205460ff1615611fe35760405162461bcd60e51b815260206004820152601960248201527810985b1d1bce881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b60448201526064016109ab565b6001600160a01b03831660009081526017602052604090205460ff16156120485760405162461bcd60e51b815260206004820152601960248201527810985b1d1bce881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b60448201526064016109ab565b6001600160a01b0382166000908152601b602052604090205460ff1615801561208a57506001600160a01b0383166000908152601b602052604090205460ff16155b156120f7576008548111156120f75760405162461bcd60e51b815260206004820152602d60248201527f42616c746f3a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b60648201526084016109ab565b6001600160a01b0382166000908152601c602052604090205460ff166121b8576009548161213a846001600160a01b031660009081526001602052604090205490565b612144919061359f565b11156121b85760405162461bcd60e51b815260206004820152603a60248201527f42616c746f3a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e00000000000060648201526084016109ab565b6001600160a01b038084166000908152601d60205260408082205492851682529020546121ed9160ff90811691168585612a78565b600b543060009081526001602052604090205460065491111590600160a01b900460ff16801561221a5750805b80156122295750600a5460ff16155b80156122405750601e54600160281b900460ff1615155b801561226457506001600160a01b0383166000908152601d602052604090205460ff165b1561228957600a805460ff1916600117905561227e612d70565b600a805460ff191690555b600a5460009060ff161580156122a85750600654600160a01b900460ff165b6001600160a01b0386166000908152601a602052604090205490915060ff16806122ea57506001600160a01b0384166000908152601a602052604090205460ff165b156122f3575060005b80801561230b5750601e54600160281b900460ff1615155b1561235257601e5460009060649061232d90600160281b900460ff168661369e565b61233791906136cb565b90506123438185613603565b9350612350863083612947565b505b611639858585612947565b600286015460ff8681169116146123de57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff918216929189169160008051602061383d833981519152916123c49160481b906136df565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461247357604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028801548854919260ff620100009092048216929188169160008051602061383d833981519152916124529160481b906136df565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461250a576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b9092048216929187169160008051602061383d833981519152916124e69160481b906136df565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146125a3576040516e636861726974794665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b9092048216929186169160008051602061383d8339815191529161257d9160481b906136df565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b909204161461263c576040516c6f746865724665654f6e42757960981b8152600d0160405190819003812060028801548854919260ff600160401b9092048216929185169160008051602061383d833981519152916126149160481b906136df565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff86811661010090920416146126d557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6101009092048216929189169160008051602061383d833981519152916126b69160481b906136df565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff8581166301000000909204161461276f57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028801548854919260ff63010000009092048216929188169160008051602061383d8339815191529161274c9160481b906136df565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612808576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b9092048216929187169160008051602061383d833981519152916127e39160481b906136df565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b90920416146128a3576040516f18da185c9a5d1e51995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b9092048216929186169160008051602061383d8339815191529161287c9160481b906136df565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b909204161461263c576040516d1bdd1a195c91995953db94d95b1b60921b8152600e0160405190819003812060028801548854919260ff600160481b9092048216929185169160008051602061383d833981519152916129159160481b906136df565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b03831661296d5760405162461bcd60e51b81526004016109ab90613616565b6001600160a01b0382166129935760405162461bcd60e51b81526004016109ab9061365b565b6001600160a01b03831660009081526001602052604090205481811015612a0b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109ab565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a6b9086815260200190565b60405180910390a3611e65565b601e805464ffffffffff191690558315612b375760145460ff168015612aac5750600560165443612aa99190613603565b11155b15612ac357601e805460ff19166064179055612b37565b601354601e805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8215612bb257601354601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b82158015612bbe575083155b8015612c0457506001600160a01b03821660009081526019602052604090205460ff1680612c0457506001600160a01b03811660009081526019602052604090205460ff165b15612c7d57601354601e805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b601e5460ff600160201b820481169163010000008104821691620100008204811691612cb1916101008204811691166136f6565b612cbb91906136f6565b612cc591906136f6565b612ccf91906136f6565b601e805460ff928316600160281b90810265ff0000000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401526301000000840485166060820152600160201b840485166080820152920490921660a082015290517f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29181900360c00190a150505050565b30600090815260016020526040812054601e549091479160029060ff600160281b8204811691612da191168661369e565b612dab91906136cb565b612db591906136cb565b90506000612dc38285613603565b9050612dce81612f9a565b6000612dda8447613603565b601e54909150600090612df29060029060ff1661370f565b601e54612e099190600160281b900460ff16613731565b601e5460ff91821692506000916002918491612e2691168661369e565b612e3091906136cb565b612e3a91906136cb565b601e549091506000908390612e5790610100900460ff168661369e565b612e6191906136cb565b601e549091506000908490612e7f9062010000900460ff168761369e565b612e8991906136cb565b601e549091506000908590612ea8906301000000900460ff168861369e565b612eb291906136cb565b905060008184612ec2858861359f565b612ecc919061359f565b612ed6919061359f565b612ee09088613603565b600d54909150612ef9906001600160a01b0316856130ec565b600e54612f0f906001600160a01b0316846130ec565b600f54612f25906001600160a01b0316836130ec565b601054612f3b906001600160a01b0316826130ec565b8815612f8d57612f4b8986613205565b60408051898152602081018790529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fcf57612fcf61374a565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304c9190613760565b8160018151811061305f5761305f61374a565b6001600160a01b0392831660209182029290920101526006546130859130911684611ccd565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906130be90859060019086903090429060040161377d565b600060405180830381600087803b1580156130d857600080fd5b505af115801561263c573d6000803e3d6000fd5b8047101561313c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109ab565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613189576040519150601f19603f3d011682016040523d82523d6000602084013e61318e565b606091505b5050905080611ecb5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109ab565b60065461321d9030906001600160a01b031684611ccd565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561328d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061163991906137ee565b600060208083528351808285015260005b818110156132df578581018301518582016040015282016132c3565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461331557600080fd5b50565b6000806040838503121561332b57600080fd5b823561333681613300565b946020939093013593505050565b60006020828403121561335657600080fd5b5035919050565b60008060006060848603121561337257600080fd5b833561337d81613300565b9250602084013561338d81613300565b929592945050506040919091013590565b600080604083850312156133b157600080fd5b82356133bc81613300565b9150602083013580151581146133d157600080fd5b809150509250929050565b6000602082840312156133ee57600080fd5b81356133f981613300565b9392505050565b600080600080600060a0868803121561341857600080fd5b853561342381613300565b9450602086013561343381613300565b9350604086013561344381613300565b9250606086013561345381613300565b9150608086013561346381613300565b809150509295509295909350565b803560ff8116811461348257600080fd5b919050565b600080600080600060a0868803121561349f57600080fd5b6134a886613471565b94506134b660208701613471565b93506134c460408701613471565b92506134d260608701613471565b91506134e060808701613471565b90509295509295909350565b600080604083850312156134ff57600080fd5b823561350a81613300565b915060208301356133d181613300565b600181811c9082168061352e57607f821691505b60208210810361354e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561097b5761097b613589565b60208082526031908201527f42616c746f3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b8181038181111561097b5761097b613589565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761097b5761097b613589565b634e487b7160e01b600052601260045260246000fd5b6000826136da576136da6136b5565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff818116838216019081111561097b5761097b613589565b600060ff831680613722576137226136b5565b8060ff84160491505092915050565b60ff828116828216039081111561097b5761097b613589565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561377257600080fd5b81516133f981613300565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137cd5784516001600160a01b0316835293830193918301916001016137a8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561380357600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5200edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea26469706673582212203726124765f84fde975c225d047aaf52de68eb948d982d904cc8a650828d26c764736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80637c0a893d1161014f578063b1ba39ea116100c1578063d32215761161007a578063d3221576146107ef578063d46980161461080f578063dd62ed3e1461082f578063f2fde38b1461084f578063fd72e22a1461086f578063fe0175351461088f57600080fd5b8063b1ba39ea146106d8578063b62496f5146106f8578063bea9849e14610728578063c024666814610748578063cd43e22814610768578063d2d7ad83146107d957600080fd5b806395d89b411161011357806395d89b411461062d5780639fad968314610642578063a457c2d714610662578063a9059cbb14610682578063aa4bde28146106a2578063aee50b1e146106b857600080fd5b80637c0a893d1461059957806382528791146105b9578063880bcbc1146105d95780638c0b5e22146105f95780638da5cb5b1461060f57600080fd5b806327a14fc2116101f357806349bd5a5e116101ac57806349bd5a5e146104ba5780634d78fdc6146104ee57806370a082311461050e578063715018a614610544578063781edb3c146105595780637b2087691461057957600080fd5b806327a14fc214610413578063313ce5671461043357806334cf1fea1461044f578063378dc3dc14610464578063395093511461047a57806345a423291461049a57600080fd5b80630d36f564116102455780630d36f5641461033c5780631694505e1461037457806318160ddd146103945780631cd348c0146103b35780631e293c10146103d357806323b872dd146103f357600080fd5b8063064a59d01461028d57806306fdde03146102c3578063095ea7b3146102e5578063098df585146103055780630bd05b691461032757600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506006546102ae90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102cf57600080fd5b506102d86108d5565b6040516102ba91906132b2565b3480156102f157600080fd5b506102ae610300366004613318565b610967565b34801561031157600080fd5b50610325610320366004613344565b610981565b005b34801561033357600080fd5b50610325610aae565b34801561034857600080fd5b5060105461035c906001600160a01b031681565b6040516001600160a01b0390911681526020016102ba565b34801561038057600080fd5b5060065461035c906001600160a01b031681565b3480156103a057600080fd5b506003545b6040519081526020016102ba565b3480156103bf57600080fd5b50600e5461035c906001600160a01b031681565b3480156103df57600080fd5b506103256103ee366004613344565b610b0d565b3480156103ff57600080fd5b506102ae61040e36600461335d565b610bd2565b34801561041f57600080fd5b5061032561042e366004613344565b610bf6565b34801561043f57600080fd5b50604051601281526020016102ba565b34801561045b57600080fd5b50610325610cbf565b34801561047057600080fd5b506103a560075481565b34801561048657600080fd5b506102ae610495366004613318565b610cf8565b3480156104a657600080fd5b506103256104b536600461339e565b610d1a565b3480156104c657600080fd5b5061035c7f0000000000000000000000002c835f1c68d7f91c5e110ea93cc2d0f7afb3d86b81565b3480156104fa57600080fd5b506103256105093660046133dc565b610e3a565b34801561051a57600080fd5b506103a56105293660046133dc565b6001600160a01b031660009081526001602052604090205490565b34801561055057600080fd5b50610325610f19565b34801561056557600080fd5b5061032561057436600461339e565b610f8d565b34801561058557600080fd5b50600f5461035c906001600160a01b031681565b3480156105a557600080fd5b506103256105b43660046133dc565b61104f565b3480156105c557600080fd5b506103256105d4366004613400565b6111ba565b3480156105e557600080fd5b506103256105f436600461339e565b611640565b34801561060557600080fd5b506103a560085481565b34801561061b57600080fd5b506000546001600160a01b031661035c565b34801561063957600080fd5b506102d8611702565b34801561064e57600080fd5b5061032561065d366004613487565b611711565b34801561066e57600080fd5b506102ae61067d366004613318565b6117c8565b34801561068e57600080fd5b506102ae61069d366004613318565b611843565b3480156106ae57600080fd5b506103a560095481565b3480156106c457600080fd5b506103256106d3366004613344565b611851565b3480156106e457600080fd5b506103256106f3366004613487565b611925565b34801561070457600080fd5b506102ae6107133660046133dc565b601d6020526000908152604090205460ff1681565b34801561073457600080fd5b506103256107433660046133dc565b61197c565b34801561075457600080fd5b5061032561076336600461339e565b611a74565b34801561077457600080fd5b5060135460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102ba565b3480156107e557600080fd5b506103a5600b5481565b3480156107fb57600080fd5b5061032561080a36600461339e565b611b36565b34801561081b57600080fd5b50600c5461035c906001600160a01b031681565b34801561083b57600080fd5b506103a561084a3660046134ec565b611bb8565b34801561085b57600080fd5b5061032561086a3660046133dc565b611be3565b34801561087b57600080fd5b50600d5461035c906001600160a01b031681565b34801561089b57600080fd5b5060135460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107a5565b6060600480546108e49061351a565b80601f01602080910402602001604051908101604052809291908181526020018280546109109061351a565b801561095d5780601f106109325761010080835404028352916020019161095d565b820191906000526020600020905b81548152906001019060200180831161094057829003601f168201915b5050505050905090565b600033610975818585611ccd565b60019150505b92915050565b6000546001600160a01b031633146109b45760405162461bcd60e51b81526004016109ab90613554565b60405180910390fd5b47811115610a1a5760405162461bcd60e51b815260206004820152602d60248201527f42616c746f3a2043616e6e6f742073656e64206d6f7265207468616e20636f6e60448201526c74726163742062616c616e636560981b60648201526084016109ab565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a67576040519150601f19603f3d011682016040523d82523d6000602084013e610a6c565b606091505b505090508015610aaa576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6000546001600160a01b03163314610ad85760405162461bcd60e51b81526004016109ab90613554565b6006805460ff60a01b1916600160a01b179055601654600003610b0b5743601655426015556014805460ff191660011790555b565b6000546001600160a01b03163314610b375760405162461bcd60e51b81526004016109ab90613554565b6008548103610b9f5760405162461bcd60e51b815260206004820152602e60248201527f42616c746f3a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b60648201526084016109ab565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610be0858285611df1565b610beb858585611e6b565b506001949350505050565b6000546001600160a01b03163314610c205760405162461bcd60e51b81526004016109ab90613554565b6009548103610c8c5760405162461bcd60e51b815260206004820152603260248201527f42616c746f3a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b60648201526084016109ab565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610ce95760405162461bcd60e51b81526004016109ab90613554565b6006805460ff60a01b19169055565b600033610975818585610d0b8383611bb8565b610d15919061359f565b611ccd565b6000546001600160a01b03163314610d445760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503610dda5760405162461bcd60e51b815260206004820152603760248201527f42616c746f3a205468652073656c65637465642077616c6c657420697320616c60448201527f72656164792073657420746f207468652076616c75652000000000000000000060648201526084016109ab565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b03163314610e645760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b03811660009081526017602052604090205460ff16610ecc5760405162461bcd60e51b815260206004820152601d60248201527f42616c746f3a204163636f756e74206973206e6f7420626c636f6b656400000060448201526064016109ab565b6001600160a01b038116600081815260176020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b03163314610f435760405162461bcd60e51b81526004016109ab90613554565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610fb75760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b0382166000908152601c602052604090205481151560ff909116151503610ff75760405162461bcd60e51b81526004016109ab906135b2565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610e2e565b6000546001600160a01b031633146110795760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b03811660009081526017602052604090205460ff16156110ec5760405162461bcd60e51b815260206004820152602160248201527f42616c746f3a204163636f756e7420697320616c726561647920626c6f636b656044820152601960fa1b60648201526084016109ab565b60145460ff1615611168576202a300601554426111099190613603565b106111685760405162461bcd60e51b815260206004820152602960248201527f42616c746f3a2054696d6520746f20626c6f636b206163636f756e74732068616044820152681cc8195e1c1a5c995960ba1b60648201526084016109ab565b6001600160a01b038116600081815260176020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146111e45760405162461bcd60e51b81526004016109ab90613554565b600c546001600160a01b038681169116146112c5576001600160a01b03851661125e5760405162461bcd60e51b815260206004820152602660248201527f42616c746f3a20546865206c697175696469747957616c6c65742063616e6e6f60448201526507420626520360d41b60648201526084016109ab565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691871690600f016040519081900381209060008051602061381d83398151915290600090a4600c80546001600160a01b0319166001600160a01b0387161790555b600d546001600160a01b038581169116146113a8576001600160a01b0384166113405760405162461bcd60e51b815260206004820152602760248201527f42616c746f3a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b60648201526084016109ab565b600d546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b03918216918616906010016040519081900381209060008051602061381d83398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b03848116911614611484576001600160a01b03831661141f5760405162461bcd60e51b8152602060048201526024808201527f42616c746f3a20546865206275794261636b57616c6c65742063616e6e6f74206044820152630626520360e41b60648201526084016109ab565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691851690600d016040519081900381209060008051602061381d83398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b600f546001600160a01b03838116911614611560576001600160a01b0382166114fb5760405162461bcd60e51b8152602060048201526024808201527f42616c746f3a20546865206368617269747957616c6c65742063616e6e6f74206044820152630626520360e41b60648201526084016109ab565b600f546040516c18da185c9a5d1e55d85b1b195d609a1b81526001600160a01b0391821691841690600d016040519081900381209060008051602061381d83398151915290600090a4600f80546001600160a01b0319166001600160a01b0384161790555b6010546001600160a01b03828116911614611639576001600160a01b0381166115d65760405162461bcd60e51b815260206004820152602260248201527f42616c746f3a20546865206f7468657257616c6c65742063616e6e6f74206265604482015261020360f41b60648201526084016109ab565b6010546040516a1bdd1a195c95d85b1b195d60aa1b81526001600160a01b0391821691831690600b016040519081900381209060008051602061381d83398151915290600090a4601080546001600160a01b0319166001600160a01b0383161790555b5050505050565b6000546001600160a01b0316331461166a5760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036116aa5760405162461bcd60e51b81526004016109ab906135b2565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610e2e565b6060600580546108e49061351a565b6000546001600160a01b0316331461173b5760405162461bcd60e51b81526004016109ab90613554565b61174a6011868686868661235d565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b600033816117d68286611bb8565b9050838110156118365760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109ab565b610beb8286868403611ccd565b600033610975818585611e6b565b6000546001600160a01b0316331461187b5760405162461bcd60e51b81526004016109ab90613554565b600b5481036118f25760405162461bcd60e51b815260206004820152603a60248201527f42616c746f3a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c756500000000000060648201526084016109ab565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b0316331461194f5760405162461bcd60e51b81526004016109ab90613554565b61195e60118686868686612644565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611763565b6000546001600160a01b031633146119a65760405162461bcd60e51b81526004016109ab90613554565b6006546001600160a01b0390811690821603611a175760405162461bcd60e51b815260206004820152602a60248201527f42616c746f3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b60648201526084016109ab565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a9e5760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503611ade5760405162461bcd60e51b81526004016109ab906135b2565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610e2e565b6000546001600160a01b03163314611b605760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610e2e565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611c0d5760405162461bcd60e51b81526004016109ab90613554565b6001600160a01b038116611c725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ab565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d2f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ab565b6001600160a01b038216611d905760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ab565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611dfd8484611bb8565b90506000198114611e655781811015611e585760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109ab565b611e658484848403611ccd565b50505050565b6001600160a01b038316611e915760405162461bcd60e51b81526004016109ab90613616565b6001600160a01b038216611eb75760405162461bcd60e51b81526004016109ab9061365b565b80600003611ed057611ecb83836000612947565b505050565b6001600160a01b03831660009081526018602052604090205460ff16158015611f1257506001600160a01b03821660009081526018602052604090205460ff16155b156121b857600654600160a01b900460ff16611f7e5760405162461bcd60e51b815260206004820152602560248201527f42616c746f3a2054726164696e672069732063757272656e746c792064697361604482015264313632b21760d91b60648201526084016109ab565b6001600160a01b03821660009081526017602052604090205460ff1615611fe35760405162461bcd60e51b815260206004820152601960248201527810985b1d1bce881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b60448201526064016109ab565b6001600160a01b03831660009081526017602052604090205460ff16156120485760405162461bcd60e51b815260206004820152601960248201527810985b1d1bce881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b60448201526064016109ab565b6001600160a01b0382166000908152601b602052604090205460ff1615801561208a57506001600160a01b0383166000908152601b602052604090205460ff16155b156120f7576008548111156120f75760405162461bcd60e51b815260206004820152602d60248201527f42616c746f3a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b60648201526084016109ab565b6001600160a01b0382166000908152601c602052604090205460ff166121b8576009548161213a846001600160a01b031660009081526001602052604090205490565b612144919061359f565b11156121b85760405162461bcd60e51b815260206004820152603a60248201527f42616c746f3a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e00000000000060648201526084016109ab565b6001600160a01b038084166000908152601d60205260408082205492851682529020546121ed9160ff90811691168585612a78565b600b543060009081526001602052604090205460065491111590600160a01b900460ff16801561221a5750805b80156122295750600a5460ff16155b80156122405750601e54600160281b900460ff1615155b801561226457506001600160a01b0383166000908152601d602052604090205460ff165b1561228957600a805460ff1916600117905561227e612d70565b600a805460ff191690555b600a5460009060ff161580156122a85750600654600160a01b900460ff165b6001600160a01b0386166000908152601a602052604090205490915060ff16806122ea57506001600160a01b0384166000908152601a602052604090205460ff165b156122f3575060005b80801561230b5750601e54600160281b900460ff1615155b1561235257601e5460009060649061232d90600160281b900460ff168661369e565b61233791906136cb565b90506123438185613603565b9350612350863083612947565b505b611639858585612947565b600286015460ff8681169116146123de57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff918216929189169160008051602061383d833981519152916123c49160481b906136df565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461247357604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028801548854919260ff620100009092048216929188169160008051602061383d833981519152916124529160481b906136df565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461250a576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b9092048216929187169160008051602061383d833981519152916124e69160481b906136df565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146125a3576040516e636861726974794665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b9092048216929186169160008051602061383d8339815191529161257d9160481b906136df565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b909204161461263c576040516c6f746865724665654f6e42757960981b8152600d0160405190819003812060028801548854919260ff600160401b9092048216929185169160008051602061383d833981519152916126149160481b906136df565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff86811661010090920416146126d557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6101009092048216929189169160008051602061383d833981519152916126b69160481b906136df565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff8581166301000000909204161461276f57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028801548854919260ff63010000009092048216929188169160008051602061383d8339815191529161274c9160481b906136df565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612808576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b9092048216929187169160008051602061383d833981519152916127e39160481b906136df565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b90920416146128a3576040516f18da185c9a5d1e51995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b9092048216929186169160008051602061383d8339815191529161287c9160481b906136df565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b909204161461263c576040516d1bdd1a195c91995953db94d95b1b60921b8152600e0160405190819003812060028801548854919260ff600160481b9092048216929185169160008051602061383d833981519152916129159160481b906136df565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b03831661296d5760405162461bcd60e51b81526004016109ab90613616565b6001600160a01b0382166129935760405162461bcd60e51b81526004016109ab9061365b565b6001600160a01b03831660009081526001602052604090205481811015612a0b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109ab565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a6b9086815260200190565b60405180910390a3611e65565b601e805464ffffffffff191690558315612b375760145460ff168015612aac5750600560165443612aa99190613603565b11155b15612ac357601e805460ff19166064179055612b37565b601354601e805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8215612bb257601354601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b82158015612bbe575083155b8015612c0457506001600160a01b03821660009081526019602052604090205460ff1680612c0457506001600160a01b03811660009081526019602052604090205460ff165b15612c7d57601354601e805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b601e5460ff600160201b820481169163010000008104821691620100008204811691612cb1916101008204811691166136f6565b612cbb91906136f6565b612cc591906136f6565b612ccf91906136f6565b601e805460ff928316600160281b90810265ff0000000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401526301000000840485166060820152600160201b840485166080820152920490921660a082015290517f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29181900360c00190a150505050565b30600090815260016020526040812054601e549091479160029060ff600160281b8204811691612da191168661369e565b612dab91906136cb565b612db591906136cb565b90506000612dc38285613603565b9050612dce81612f9a565b6000612dda8447613603565b601e54909150600090612df29060029060ff1661370f565b601e54612e099190600160281b900460ff16613731565b601e5460ff91821692506000916002918491612e2691168661369e565b612e3091906136cb565b612e3a91906136cb565b601e549091506000908390612e5790610100900460ff168661369e565b612e6191906136cb565b601e549091506000908490612e7f9062010000900460ff168761369e565b612e8991906136cb565b601e549091506000908590612ea8906301000000900460ff168861369e565b612eb291906136cb565b905060008184612ec2858861359f565b612ecc919061359f565b612ed6919061359f565b612ee09088613603565b600d54909150612ef9906001600160a01b0316856130ec565b600e54612f0f906001600160a01b0316846130ec565b600f54612f25906001600160a01b0316836130ec565b601054612f3b906001600160a01b0316826130ec565b8815612f8d57612f4b8986613205565b60408051898152602081018790529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fcf57612fcf61374a565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304c9190613760565b8160018151811061305f5761305f61374a565b6001600160a01b0392831660209182029290920101526006546130859130911684611ccd565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906130be90859060019086903090429060040161377d565b600060405180830381600087803b1580156130d857600080fd5b505af115801561263c573d6000803e3d6000fd5b8047101561313c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109ab565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613189576040519150601f19603f3d011682016040523d82523d6000602084013e61318e565b606091505b5050905080611ecb5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109ab565b60065461321d9030906001600160a01b031684611ccd565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561328d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061163991906137ee565b600060208083528351808285015260005b818110156132df578581018301518582016040015282016132c3565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461331557600080fd5b50565b6000806040838503121561332b57600080fd5b823561333681613300565b946020939093013593505050565b60006020828403121561335657600080fd5b5035919050565b60008060006060848603121561337257600080fd5b833561337d81613300565b9250602084013561338d81613300565b929592945050506040919091013590565b600080604083850312156133b157600080fd5b82356133bc81613300565b9150602083013580151581146133d157600080fd5b809150509250929050565b6000602082840312156133ee57600080fd5b81356133f981613300565b9392505050565b600080600080600060a0868803121561341857600080fd5b853561342381613300565b9450602086013561343381613300565b9350604086013561344381613300565b9250606086013561345381613300565b9150608086013561346381613300565b809150509295509295909350565b803560ff8116811461348257600080fd5b919050565b600080600080600060a0868803121561349f57600080fd5b6134a886613471565b94506134b660208701613471565b93506134c460408701613471565b92506134d260608701613471565b91506134e060808701613471565b90509295509295909350565b600080604083850312156134ff57600080fd5b823561350a81613300565b915060208301356133d181613300565b600181811c9082168061352e57607f821691505b60208210810361354e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561097b5761097b613589565b60208082526031908201527f42616c746f3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b8181038181111561097b5761097b613589565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761097b5761097b613589565b634e487b7160e01b600052601260045260246000fd5b6000826136da576136da6136b5565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff818116838216019081111561097b5761097b613589565b600060ff831680613722576137226136b5565b8060ff84160491505092915050565b60ff828116828216039081111561097b5761097b613589565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561377257600080fd5b81516133f981613300565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137cd5784516001600160a01b0316835293830193918301916001016137a8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561380357600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5200edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea26469706673582212203726124765f84fde975c225d047aaf52de68eb948d982d904cc8a650828d26c764736f6c63430008110033

Deployed Bytecode Sourcemap

12438:21302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12703:28;;;;;;;;;;-1:-1:-1;12703:28:0;;;;-1:-1:-1;;;12703:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;12703:28:0;;;;;;;;7103:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8034:201::-;;;;;;;;;;-1:-1:-1;8034:201:0;;;;;:::i;:::-;;:::i;24083:320::-;;;;;;;;;;-1:-1:-1;24083:320:0;;;;;:::i;:::-;;:::i;:::-;;17432:273;;;;;;;;;;;;;:::i;13281:26::-;;;;;;;;;;-1:-1:-1;13281:26:0;;;;-1:-1:-1;;;;;13281:26:0;;;;;;-1:-1:-1;;;;;1564:32:1;;;1546:51;;1534:2;1519:18;13281:26:0;1400:203:1;12517:30:0;;;;;;;;;;-1:-1:-1;12517:30:0;;;;-1:-1:-1;;;;;12517:30:0;;;7423:108;;;;;;;;;;-1:-1:-1;7511:12:0;;7423:108;;;1977:25:1;;;1965:2;1950:18;7423:108:0;1831:177:1;13211:28:0;;;;;;;;;;-1:-1:-1;13211:28:0;;;;-1:-1:-1;;;;;13211:28:0;;;23199:269;;;;;;;;;;-1:-1:-1;23199:269:0;;;;;:::i;:::-;;:::i;8245:295::-;;;;;;;;;;-1:-1:-1;8245:295:0;;;;;:::i;:::-;;:::i;23474:274::-;;;;;;;;;;-1:-1:-1;23474:274:0;;;;;:::i;:::-;;:::i;7322:93::-;;;;;;;;;;-1:-1:-1;7322:93:0;;7405:2;2616:36:1;;2604:2;2589:18;7322:93:0;2474:184:1;17711:91:0;;;;;;;;;;;;;:::i;12740:51::-;;;;;;;;;;;;;;;;8548:238;;;;;;;;;;-1:-1:-1;8548:238:0;;;;;:::i;:::-;;:::i;18983:345::-;;;;;;;;;;-1:-1:-1;18983:345:0;;;;;:::i;:::-;;:::i;12554:38::-;;;;;;;;;;;;;;;18747:230;;;;;;;;;;-1:-1:-1;18747:230:0;;;;;:::i;:::-;;:::i;7539:127::-;;;;;;;;;;-1:-1:-1;7539:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7640:18:0;7613:7;7640:18;;;:9;:18;;;;;;;7539:127;6290:148;;;;;;;;;;;;;:::i;20000:337::-;;;;;;;;;;-1:-1:-1;20000:337:0;;;;;:::i;:::-;;:::i;13246:28::-;;;;;;;;;;-1:-1:-1;13246:28:0;;;;-1:-1:-1;;;;;13246:28:0;;;18352:389;;;;;;;;;;-1:-1:-1;18352:389:0;;;;;:::i;:::-;;:::i;20343:1639::-;;;;;;;;;;-1:-1:-1;20343:1639:0;;;;;:::i;:::-;;:::i;19640:354::-;;;;;;;;;;-1:-1:-1;19640:354:0;;;;;:::i;:::-;;:::i;12854:56::-;;;;;;;;;;;;;;;;6076:79;;;;;;;;;;-1:-1:-1;6114:7:0;6141:6;-1:-1:-1;;;;;6141:6:0;6076:79;;7211:104;;;;;;;;;;;;;:::i;22006:429::-;;;;;;;;;;-1:-1:-1;22006:429:0;;;;;:::i;:::-;;:::i;8794:436::-;;;;;;;;;;-1:-1:-1;8794:436:0;;;;;:::i;:::-;;:::i;7674:193::-;;;;;;;;;;-1:-1:-1;7674:193:0;;;;;:::i;:::-;;:::i;12961:60::-;;;;;;;;;;;;;;;;23754:323;;;;;;;;;;-1:-1:-1;23754:323:0;;;;;:::i;:::-;;:::i;22441:447::-;;;;;;;;;;-1:-1:-1;22441:447:0;;;;;:::i;:::-;;:::i;14404:57::-;;;;;;;;;;-1:-1:-1;14404:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22894:299;;;;;;;;;;-1:-1:-1;22894:299:0;;;;;:::i;:::-;;:::i;19334:300::-;;;;;;;;;;-1:-1:-1;19334:300:0;;;;;:::i;:::-;;:::i;24427:220::-;;;;;;;;;;-1:-1:-1;24526:23:0;;;;;;;24550:24;;;;;;-1:-1:-1;;;24575:21:0;;;;;-1:-1:-1;;;24597:21:0;;;;;-1:-1:-1;;;24619:19:0;;;;24427:220;;;;5053:4:1;5041:17;;;5023:36;;5095:17;;;5090:2;5075:18;;5068:45;5149:17;;;5129:18;;;5122:45;;;;5203:17;;5198:2;5183:18;;5176:45;5258:17;;;5252:3;5237:19;;5230:46;5010:3;4995:19;24427:220:0;4784:498:1;13059:68:0;;;;;;;;;;;;;;;;18129:217;;;;;;;;;;-1:-1:-1;18129:217:0;;;;;:::i;:::-;;:::i;13136:30::-;;;;;;;;;;-1:-1:-1;13136:30:0;;;;-1:-1:-1;;;;;13136:30:0;;;7875:151;;;;;;;;;;-1:-1:-1;7875:151:0;;;;;:::i;:::-;;:::i;6446:244::-;;;;;;;;;;-1:-1:-1;6446:244:0;;;;;:::i;:::-;;:::i;13173:31::-;;;;;;;;;;-1:-1:-1;13173:31:0;;;;-1:-1:-1;;;;;13173:31:0;;;24653:226;;;;;;;;;;-1:-1:-1;24753:24:0;;;;;;;;;24778:25;;;;;;-1:-1:-1;;;24804:22:0;;;;;-1:-1:-1;;;24827:22:0;;;;;-1:-1:-1;;;24850:20:0;;;;24653:226;;7103:100;7157:13;7190:5;7183:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7103:100;:::o;8034:201::-;8117:4;5489:10;8173:32;5489:10;8189:7;8198:6;8173:8;:32::i;:::-;8223:4;8216:11;;;8034:201;;;;;:::o;24083:320::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;;;;;;;;;24173:21:::1;24163:6;:31;;24155:89;;;::::0;-1:-1:-1;;;24155:89:0;;6628:2:1;24155:89:0::1;::::0;::::1;6610:21:1::0;6667:2;6647:18;;;6640:30;6706:34;6686:18;;;6679:62;-1:-1:-1;;;6757:18:1;;;6750:43;6810:19;;24155:89:0::1;6426:409:1::0;24155:89:0::1;24256:12;6141:6:::0;;24274:42:::1;::::0;-1:-1:-1;;;;;6141:6:0;;;;24304;;24256:12;24274:42;24256:12;24274:42;24304:6;6141;24274:42:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24255:61;;;24331:7;24327:69;;;24360:24;::::0;1977:25:1;;;24360:24:0::1;::::0;1965:2:1;1950:18;24360:24:0::1;;;;;;;24327:69;24144:259;24083:320:::0;:::o;17432:273::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;17489:16:::1;:23:::0;;-1:-1:-1;;;;17489:23:0::1;-1:-1:-1::0;;;17489:23:0::1;::::0;;17526:18:::1;::::0;17489:23;17526;17523:175:::1;;17587:12;17566:18;:33:::0;17638:15:::1;17614:21;:39:::0;17668:11:::1;:18:::0;;-1:-1:-1;;17668:18:0::1;-1:-1:-1::0;17668:18:0::1;::::0;;17523:175:::1;17432:273::o:0;23199:269::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;23300:11:::1;;23288:8;:23:::0;23280:82:::1;;;::::0;-1:-1:-1;;;23280:82:0;;7252:2:1;23280:82:0::1;::::0;::::1;7234:21:1::0;7291:2;7271:18;;;7264:30;7330:34;7310:18;;;7303:62;-1:-1:-1;;;7381:18:1;;;7374:44;7435:19;;23280:82:0::1;7050:410:1::0;23280:82:0::1;23415:11;::::0;23378:49:::1;::::0;23405:8;;23378:49:::1;::::0;;;::::1;23438:11;:22:::0;23199:269::o;8245:295::-;8376:4;5489:10;8434:38;8450:4;5489:10;8465:6;8434:15;:38::i;:::-;8483:27;8493:4;8499:2;8503:6;8483:9;:27::i;:::-;-1:-1:-1;8528:4:0;;8245:295;-1:-1:-1;;;;8245:295:0:o;23474:274::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;23570:15:::1;;23558:8;:27:::0;23550:89:::1;;;::::0;-1:-1:-1;;;23550:89:0;;7667:2:1;23550:89:0::1;::::0;::::1;7649:21:1::0;7706:2;7686:18;;;7679:30;7745:34;7725:18;;;7718:62;-1:-1:-1;;;7796:18:1;;;7789:48;7854:19;;23550:89:0::1;7465:414:1::0;23550:89:0::1;23687:15;::::0;23655:48:::1;::::0;23677:8;;23655:48:::1;::::0;;;::::1;23714:15;:26:::0;23474:274::o;17711:91::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;17770:16:::1;:24:::0;;-1:-1:-1;;;;17770:24:0::1;::::0;;17711:91::o;8548:238::-;8636:4;5489:10;8692:64;5489:10;8708:7;8745:10;8717:25;5489:10;8708:7;8717:9;:25::i;:::-;:38;;;;:::i;:::-;8692:8;:64::i;18983:345::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19091:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;19083:114:::1;;;::::0;-1:-1:-1;;;19083:114:0;;8348:2:1;19083:114:0::1;::::0;::::1;8330:21:1::0;8387:2;8367:18;;;8360:30;8426:34;8406:18;;;8399:62;8497:25;8477:18;;;8470:53;8540:19;;19083:114:0::1;8146:419:1::0;19083:114:0::1;-1:-1:-1::0;;;;;19208:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;19208:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19270:50;;154:41:1;;;19270:50:0::1;::::0;127:18:1;19270:50:0::1;;;;;;;;18983:345:::0;;:::o;18747:230::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18826:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18818:61;;;::::0;-1:-1:-1;;;18818:61:0;;8772:2:1;18818:61:0::1;::::0;::::1;8754:21:1::0;8811:2;8791:18;;;8784:30;8850:31;8830:18;;;8823:59;8899:18;;18818:61:0::1;8570:353:1::0;18818:61:0::1;-1:-1:-1::0;;;;;18890:19:0;::::1;18912:5;18890:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;18890:27:0::1;::::0;;18933:36;18912:5;;18890:19;18933:36:::1;::::0;18912:5;;18933:36:::1;18747:230:::0;:::o;6290:148::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;6397:1:::1;6381:6:::0;;6360:40:::1;::::0;-1:-1:-1;;;;;6381:6:0;;::::1;::::0;6360:40:::1;::::0;6397:1;;6360:40:::1;6428:1;6411:19:::0;;-1:-1:-1;;;;;;6411:19:0::1;::::0;;6290:148::o;20000:337::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20105:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;20097:111:::1;;;;-1:-1:-1::0;;;20097:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20219:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;20219:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20284:45;;154:41:1;;;20284:45:0::1;::::0;127:18:1;20284:45:0::1;14:187:1::0;18352:389:0;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18430:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18429:20;18421:66;;;::::0;-1:-1:-1;;;18421:66:0;;9548:2:1;18421:66:0::1;::::0;::::1;9530:21:1::0;9587:2;9567:18;;;9560:30;9626:34;9606:18;;;9599:62;-1:-1:-1;;;9677:18:1;;;9670:31;9718:19;;18421:66:0::1;9346:397:1::0;18421:66:0::1;18502:11;::::0;::::1;;18498:148;;;18582:6;18557:21;;18539:15;:39;;;;:::i;:::-;18538:50;18530:104;;;::::0;-1:-1:-1;;;18530:104:0;;10083:2:1;18530:104:0::1;::::0;::::1;10065:21:1::0;10122:2;10102:18;;;10095:30;10161:34;10141:18;;;10134:62;-1:-1:-1;;;10212:18:1;;;10205:39;10261:19;;18530:104:0::1;9881:405:1::0;18530:104:0::1;-1:-1:-1::0;;;;;18656:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;18656:26:0::1;18678:4;18656:26:::0;;::::1;::::0;;;18698:35;;18678:4;;18656:19;18698:35:::1;::::0;::::1;18352:389:::0;:::o;20343:1639::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;20542:15:::1;::::0;-1:-1:-1;;;;;20542:37:0;;::::1;:15:::0;::::1;:37;20538:292;;-1:-1:-1::0;;;;;20604:32:0;::::1;20596:83;;;::::0;-1:-1:-1;;;20596:83:0;;10493:2:1;20596:83:0::1;::::0;::::1;10475:21:1::0;10532:2;10512:18;;;10505:30;10571:34;10551:18;;;10544:62;-1:-1:-1;;;10622:18:1;;;10615:36;10668:19;;20596:83:0::1;10291:402:1::0;20596:83:0::1;20751:15;::::0;20699:68:::1;::::0;-1:-1:-1;;;10900:30:1;;-1:-1:-1;;;;;20751:15:0;;::::1;::::0;20699:68;::::1;::::0;10955:2:1;10946:12;20699:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;20699:68:0;;;::::1;20782:15;:36:::0;;-1:-1:-1;;;;;;20782:36:0::1;-1:-1:-1::0;;;;;20782:36:0;::::1;;::::0;;20538:292:::1;20844:16;::::0;-1:-1:-1;;;;;20844:39:0;;::::1;:16:::0;::::1;:39;20840:301;;-1:-1:-1::0;;;;;20908:33:0;::::1;20900:85;;;::::0;-1:-1:-1;;;20900:85:0;;11171:2:1;20900:85:0::1;::::0;::::1;11153:21:1::0;11210:2;11190:18;;;11183:30;11249:34;11229:18;;;11222:62;-1:-1:-1;;;11300:18:1;;;11293:37;11347:19;;20900:85:0::1;10969:403:1::0;20900:85:0::1;21059:16;::::0;21005:71:::1;::::0;-1:-1:-1;;;11579:31:1;;-1:-1:-1;;;;;21059:16:0;;::::1;::::0;21005:71;::::1;::::0;11635:2:1;11626:12;21005:71:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;21005:71:0;;;::::1;21091:16;:38:::0;;-1:-1:-1;;;;;;21091:38:0::1;-1:-1:-1::0;;;;;21091:38:0;::::1;;::::0;;20840:301:::1;21155:13;::::0;-1:-1:-1;;;;;21155:33:0;;::::1;:13:::0;::::1;:33;21151:274;;-1:-1:-1::0;;;;;21213:30:0;::::1;21205:79;;;::::0;-1:-1:-1;;;21205:79:0;;11851:2:1;21205:79:0::1;::::0;::::1;11833:21:1::0;11890:2;11870:18;;;11863:30;11929:34;11909:18;;;11902:62;-1:-1:-1;;;11980:18:1;;;11973:34;12024:19;;21205:79:0::1;11649:400:1::0;21205:79:0::1;21352:13;::::0;21304:62:::1;::::0;-1:-1:-1;;;12256:28:1;;-1:-1:-1;;;;;21352:13:0;;::::1;::::0;21304:62;::::1;::::0;12309:2:1;12300:12;21304:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;21304:62:0;;;::::1;21381:13;:32:::0;;-1:-1:-1;;;;;;21381:32:0::1;-1:-1:-1::0;;;;;21381:32:0;::::1;;::::0;;21151:274:::1;21439:13;::::0;-1:-1:-1;;;;;21439:33:0;;::::1;:13:::0;::::1;:33;21435:274;;-1:-1:-1::0;;;;;21497:30:0;::::1;21489:79;;;::::0;-1:-1:-1;;;21489:79:0;;12525:2:1;21489:79:0::1;::::0;::::1;12507:21:1::0;12564:2;12544:18;;;12537:30;12603:34;12583:18;;;12576:62;-1:-1:-1;;;12654:18:1;;;12647:34;12698:19;;21489:79:0::1;12323:400:1::0;21489:79:0::1;21636:13;::::0;21588:62:::1;::::0;-1:-1:-1;;;12930:28:1;;-1:-1:-1;;;;;21636:13:0;;::::1;::::0;21588:62;::::1;::::0;12983:2:1;12974:12;21588:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;21588:62:0;;;::::1;21665:13;:32:::0;;-1:-1:-1;;;;;;21665:32:0::1;-1:-1:-1::0;;;;;21665:32:0;::::1;;::::0;;21435:274:::1;21723:11;::::0;-1:-1:-1;;;;;21723:29:0;;::::1;:11:::0;::::1;:29;21719:256;;-1:-1:-1::0;;;;;21777:28:0;::::1;21769:75;;;::::0;-1:-1:-1;;;21769:75:0;;13199:2:1;21769:75:0::1;::::0;::::1;13181:21:1::0;13238:2;13218:18;;;13211:30;13277:34;13257:18;;;13250:62;-1:-1:-1;;;13328:18:1;;;13321:32;13370:19;;21769:75:0::1;12997:398:1::0;21769:75:0::1;21908:11;::::0;21864:56:::1;::::0;-1:-1:-1;;;13602:26:1;;-1:-1:-1;;;;;21908:11:0;;::::1;::::0;21864:56;::::1;::::0;13653:2:1;13644:12;21864:56:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;21864:56:0;;;::::1;21935:11;:28:::0;;-1:-1:-1;;;;;;21935:28:0::1;-1:-1:-1::0;;;;;21935:28:0;::::1;;::::0;;21719:256:::1;20343:1639:::0;;;;;:::o;19640:354::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19750:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;19742:116:::1;;;;-1:-1:-1::0;;;19742:116:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19869:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;19869:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19939:47;;154:41:1;;;19939:47:0::1;::::0;127:18:1;19939:47:0::1;14:187:1::0;7211:104:0;7267:13;7300:7;7293:14;;;;;:::i;22006:429::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;22181:117:::1;22204:5;22210:18;22229:19;22249:16;22266;22283:14;22181:22;:117::i;:::-;22314:113;::::0;-1:-1:-1;;;13869:27:1;;13921:2;13912:12;22314:113:0::1;;::::0;;;;;::::1;::::0;;5053:4:1;5041:17;;;5023:36;;5095:17;;;5090:2;5075:18;;5068:45;5149:17;;;5129:18;;;5122:45;5203:17;;;5198:2;5183:18;;5176:45;5258:17;;5252:3;5237:19;;5230:46;22314:113:0;;;;::::1;::::0;;;;;5010:3:1;22314:113:0;;::::1;22006:429:::0;;;;;:::o;8794:436::-;8887:4;5489:10;8887:4;8970:25;5489:10;8987:7;8970:9;:25::i;:::-;8943:52;;9034:15;9014:16;:35;;9006:85;;;;-1:-1:-1;;;9006:85:0;;14137:2:1;9006:85:0;;;14119:21:1;14176:2;14156:18;;;14149:30;14215:34;14195:18;;;14188:62;-1:-1:-1;;;14266:18:1;;;14259:35;14311:19;;9006:85:0;13935:401:1;9006:85:0;9127:60;9136:5;9143:7;9171:15;9152:16;:34;9127:8;:60::i;7674:193::-;7753:4;5489:10;7809:28;5489:10;7826:2;7830:6;7809:9;:28::i;23754:323::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;23858:23:::1;;23846:8;:35:::0;23838:105:::1;;;::::0;-1:-1:-1;;;23838:105:0;;14543:2:1;23838:105:0::1;::::0;::::1;14525:21:1::0;14582:2;14562:18;;;14555:30;14621:34;14601:18;;;14594:62;14692:28;14672:18;;;14665:56;14738:19;;23838:105:0::1;14341:422:1::0;23838:105:0::1;24000:23;::::0;23959:65:::1;::::0;23990:8;;23959:65:::1;::::0;;;::::1;24035:23;:34:::0;23754:323::o;22441:447::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;22622:123:::1;22646:5;22652:19;22672:20;22693:17;22711;22729:15;22622:23;:123::i;:::-;22761:119;::::0;-1:-1:-1;;;14970:28:1;;15023:2;15014:12;22761:119:0::1;14768:264:1::0;22894:299:0;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;23000:15:::1;::::0;-1:-1:-1;;;;;23000:15:0;;::::1;22978:38:::0;;::::1;::::0;22970:92:::1;;;::::0;-1:-1:-1;;;22970:92:0;;15239:2:1;22970:92:0::1;::::0;::::1;15221:21:1::0;15278:2;15258:18;;;15251:30;15317:34;15297:18;;;15290:62;-1:-1:-1;;;15368:18:1;;;15361:40;15418:19;;22970:92:0::1;15037:406:1::0;22970:92:0::1;23120:15;::::0;23078:59:::1;::::0;-1:-1:-1;;;;;23120:15:0;;::::1;::::0;23078:59;::::1;::::0;::::1;::::0;23120:15:::1;::::0;23078:59:::1;23148:15;:37:::0;;-1:-1:-1;;;;;;23148:37:0::1;-1:-1:-1::0;;;;;23148:37:0;;;::::1;::::0;;;::::1;::::0;;22894:299::o;19334:300::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19429:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19421:100:::1;;;;-1:-1:-1::0;;;19421:100:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19532:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19532:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19586:40;;154:41:1;;;19586:40:0::1;::::0;127:18:1;19586:40:0::1;14:187:1::0;18129:217:0;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18224:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;18224:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18288:50;;154:41:1;;;18288:50:0::1;::::0;127:18:1;18288:50:0::1;14:187:1::0;7875:151:0;-1:-1:-1;;;;;7991:18:0;;;7964:7;7991:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7875:151::o;6446:244::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6535:22:0;::::1;6527:73;;;::::0;-1:-1:-1;;;6527:73:0;;15650:2:1;6527:73:0::1;::::0;::::1;15632:21:1::0;15689:2;15669:18;;;15662:30;15728:34;15708:18;;;15701:62;-1:-1:-1;;;15779:18:1;;;15772:36;15825:19;;6527:73:0::1;15448:402:1::0;6527:73:0::1;6637:6;::::0;;6616:38:::1;::::0;-1:-1:-1;;;;;6616:38:0;;::::1;::::0;6637:6;::::1;::::0;6616:38:::1;::::0;::::1;6665:6;:17:::0;;-1:-1:-1;;;;;;6665:17:0::1;-1:-1:-1::0;;;;;6665:17:0;;;::::1;::::0;;;::::1;::::0;;6446:244::o;11325:380::-;-1:-1:-1;;;;;11461:19:0;;11453:68;;;;-1:-1:-1;;;11453:68:0;;16057:2:1;11453:68:0;;;16039:21:1;16096:2;16076:18;;;16069:30;16135:34;16115:18;;;16108:62;-1:-1:-1;;;16186:18:1;;;16179:34;16230:19;;11453:68:0;15855:400:1;11453:68:0;-1:-1:-1;;;;;11540:21:0;;11532:68;;;;-1:-1:-1;;;11532:68:0;;16462:2:1;11532:68:0;;;16444:21:1;16501:2;16481:18;;;16474:30;16540:34;16520:18;;;16513:62;-1:-1:-1;;;16591:18:1;;;16584:32;16633:19;;11532:68:0;16260:398:1;11532:68:0;-1:-1:-1;;;;;11613:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11665:32;;1977:25:1;;;11665:32:0;;1950:18:1;11665:32:0;;;;;;;11325:380;;;:::o;11713:453::-;11848:24;11875:25;11885:5;11892:7;11875:9;:25::i;:::-;11848:52;;-1:-1:-1;;11915:16:0;:37;11911:248;;11997:6;11977:16;:26;;11969:68;;;;-1:-1:-1;;;11969:68:0;;16865:2:1;11969:68:0;;;16847:21:1;16904:2;16884:18;;;16877:30;16943:31;16923:18;;;16916:59;16992:18;;11969:68:0;16663:353:1;11969:68:0;12081:51;12090:5;12097:7;12125:6;12106:16;:25;12081:8;:51::i;:::-;11837:329;11713:453;;;:::o;24898:2003::-;-1:-1:-1;;;;;25030:18:0;;25022:68;;;;-1:-1:-1;;;25022:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25109:16:0;;25101:64;;;;-1:-1:-1;;;25101:64:0;;;;;;;:::i;:::-;25182:6;25192:1;25182:11;25178:93;;25210:28;25226:4;25232:2;25236:1;25210:15;:28::i;:::-;24898:2003;;;:::o;25178:93::-;-1:-1:-1;;;;;25288:35:0;;;;;;:29;:35;;;;;;;;25287:36;:74;;;;-1:-1:-1;;;;;;25328:33:0;;;;;;:29;:33;;;;;;;;25327:34;25287:74;25283:732;;;25386:16;;-1:-1:-1;;;25386:16:0;;;;25378:66;;;;-1:-1:-1;;;25378:66:0;;18033:2:1;25378:66:0;;;18015:21:1;18072:2;18052:18;;;18045:30;18111:34;18091:18;;;18084:62;-1:-1:-1;;;18162:18:1;;;18155:35;18207:19;;25378:66:0;17831:401:1;25378:66:0;-1:-1:-1;;;;;25468:14:0;;;;;;:10;:14;;;;;;;;25467:15;25459:53;;;;-1:-1:-1;;;25459:53:0;;18439:2:1;25459:53:0;;;18421:21:1;18478:2;18458:18;;;18451:30;-1:-1:-1;;;18497:18:1;;;18490:55;18562:18;;25459:53:0;18237:349:1;25459:53:0;-1:-1:-1;;;;;25536:16:0;;;;;;:10;:16;;;;;;;;25535:17;25527:55;;;;-1:-1:-1;;;25527:55:0;;18439:2:1;25527:55:0;;;18421:21:1;18478:2;18458:18;;;18451:30;-1:-1:-1;;;18497:18:1;;;18490:55;18562:18;;25527:55:0;18237:349:1;25527:55:0;-1:-1:-1;;;;;25602:38:0;;;;;;:34;:38;;;;;;;;25601:39;:84;;;;-1:-1:-1;;;;;;25645:40:0;;;;;;:34;:40;;;;;;;;25644:41;25601:84;25597:204;;;25724:11;;25714:6;:21;;25706:79;;;;-1:-1:-1;;;25706:79:0;;18793:2:1;25706:79:0;;;18775:21:1;18832:2;18812:18;;;18805:30;18871:34;18851:18;;;18844:62;-1:-1:-1;;;18922:18:1;;;18915:43;18975:19;;25706:79:0;18591:409:1;25706:79:0;-1:-1:-1;;;;;25820:33:0;;;;;;:29;:33;;;;;;;;25815:189;;25910:15;;25899:6;25883:13;25893:2;-1:-1:-1;;;;;7640:18:0;7613:7;7640:18;;;:9;:18;;;;;;;7539:127;25883:13;:22;;;;:::i;:::-;25882:43;;25874:114;;;;-1:-1:-1;;;25874:114:0;;19207:2:1;25874:114:0;;;19189:21:1;19246:2;19226:18;;;19219:30;19285:34;19265:18;;;19258:62;19356:28;19336:18;;;19329:56;19402:19;;25874:114:0;19005:422:1;25874:114:0;-1:-1:-1;;;;;26040:31:0;;;;;;;:25;:31;;;;;;;26073:29;;;;;;;;26027:86;;26040:31;;;;;26073:29;26066:4;26099:2;26027:12;:86::i;:::-;26167:23;;26157:4;26124:12;7640:18;;;:9;:18;;;;;;26221:16;;-1:-1:-1;;26139:51:0;;-1:-1:-1;;;26221:16:0;;;;:40;;;;;26254:7;26221:40;:67;;;;-1:-1:-1;26279:9:0;;;;26278:10;26221:67;:97;;;;-1:-1:-1;26305:9:0;;-1:-1:-1;;;26305:9:0;;;;:13;;26221:97;:143;;;;-1:-1:-1;;;;;;26335:29:0;;;;;;:25;:29;;;;;;;;26221:143;26203:280;;;26391:9;:16;;-1:-1:-1;;26391:16:0;26403:4;26391:16;;;26422:17;:15;:17::i;:::-;26454:9;:17;;-1:-1:-1;;26454:17:0;;;26203:280;26511:9;;26495:12;;26511:9;;26510:10;:30;;;;-1:-1:-1;26524:16:0;;-1:-1:-1;;;26524:16:0;;;;26510:30;-1:-1:-1;;;;;26557:24:0;;;;;;:18;:24;;;;;;26495:45;;-1:-1:-1;26557:24:0;;;:50;;-1:-1:-1;;;;;;26585:22:0;;;;;;:18;:22;;;;;;;;26557:50;26553:98;;;-1:-1:-1;26634:5:0;26553:98;26665:7;:24;;;;-1:-1:-1;26676:9:0;;-1:-1:-1;;;26676:9:0;;;;:13;;26665:24;26661:189;;;26730:9;;26706:11;;26743:3;;26721:18;;-1:-1:-1;;;26730:9:0;;;;26721:6;:18;:::i;:::-;26720:26;;;;:::i;:::-;26706:40;-1:-1:-1;26770:12:0;26706:40;26770:6;:12;:::i;:::-;26761:21;;26797:41;26813:4;26827;26834:3;26797:15;:41::i;:::-;26691:159;26661:189;26860:33;26876:4;26882:2;26886:6;26860:15;:33::i;29922:1376::-;30124:21;;;;:43;;;;:21;;:43;30120:236;;30189:98;;-1:-1:-1;;;20064:32:1;;20121:2;20112:12;30189:98:0;;;;;;;;30230:21;;;;30272:14;;30189:98;;30230:21;;;;;30189:98;;;;-1:-1:-1;;;;;;;;;;;30189:98:0;;;30272:14;;;30189:98;:::i;:::-;;;;;;;;30302:21;;;:42;;-1:-1:-1;;30302:42:0;;;;;;;30120:236;30370:22;;;;:45;;;;:22;;;;;:45;30366:243;;30437:101;;-1:-1:-1;;;20551:33:1;;20609:2;20600:12;30437:101:0;;;;;;;;30479:22;;;;30523:14;;30437:101;;30479:22;;;;;;;;30437:101;;;;-1:-1:-1;;;;;;;;;;;30437:101:0;;;30523:14;;;30437:101;:::i;:::-;;;;;;;;30553:22;;;:44;;-1:-1:-1;;30553:44:0;;;;;;;;;30366:243;30623:19;;;;:39;;;;-1:-1:-1;;;30623:19:0;;;;:39;30619:222;;30684:92;;-1:-1:-1;;;20825:30:1;;20880:2;20871:12;30684:92:0;;;;;;;;30723:19;;;;30761:14;;30684:92;;30723:19;-1:-1:-1;;;30723:19:0;;;;;;30684:92;;;;-1:-1:-1;;;;;;;;;;;30684:92:0;;;30761:14;;;30684:92;:::i;:::-;;;;;;;;30791:19;;;:38;;-1:-1:-1;;30791:38:0;-1:-1:-1;;;30791:38:0;;;;;;;30619:222;30855:19;;;;:39;;;;-1:-1:-1;;;30855:19:0;;;;:39;30851:222;;30916:92;;-1:-1:-1;;;21096:30:1;;21151:2;21142:12;30916:92:0;;;;;;;;30955:19;;;;30993:14;;30916:92;;30955:19;-1:-1:-1;;;30955:19:0;;;;;;30916:92;;;;-1:-1:-1;;;;;;;;;;;30916:92:0;;;30993:14;;;30916:92;:::i;:::-;;;;;;;;31023:19;;;:38;;-1:-1:-1;;31023:38:0;-1:-1:-1;;;31023:38:0;;;;;;;30851:222;31087:17;;;;:35;;;;-1:-1:-1;;;31087:17:0;;;;:35;31083:208;;31144:86;;-1:-1:-1;;;21367:28:1;;21420:2;21411:12;31144:86:0;;;;;;;;31181:17;;;;31215:14;;31144:86;;31181:17;-1:-1:-1;;;31181:17:0;;;;;;31144:86;;;;-1:-1:-1;;;;;;;;;;;31144:86:0;;;31215:14;;;31144:86;:::i;:::-;;;;;;;;31245:17;;;:34;;-1:-1:-1;;31245:34:0;-1:-1:-1;;;31245:34:0;;;;;;;31083:208;29922:1376;;;;;;:::o;28499:1417::-;28707:22;;;;:45;;;;:22;;;;;:45;28703:243;;28774:101;;-1:-1:-1;;;21636:33:1;;21694:2;21685:12;28774:101:0;;;;;;;;28816:22;;;;28860:14;;28774:101;;28816:22;;;;;;;;28774:101;;;;-1:-1:-1;;;;;;;;;;;28774:101:0;;;28860:14;;;28774:101;:::i;:::-;;;;;;;;28890:22;;;:44;;-1:-1:-1;;28890:44:0;;;;;;;;;28703:243;28960:23;;;;:47;;;;:23;;;;;:47;28956:250;;29029:104;;-1:-1:-1;;;21910:34:1;;21969:2;21960:12;29029:104:0;;;;;;;;29072:23;;;;29118:14;;29029:104;;29072:23;;;;;;;;29029:104;;;;-1:-1:-1;;;;;;;;;;;29029:104:0;;;29118:14;;;29029:104;:::i;:::-;;;;;;;;29148:23;;;:46;;-1:-1:-1;;29148:46:0;;;;;;;;;28956:250;29220:20;;;;:41;;;;-1:-1:-1;;;29220:20:0;;;;:41;29216:229;;29283:95;;-1:-1:-1;;;22185:31:1;;22241:2;22232:12;29283:95:0;;;;;;;;29323:20;;;;29363:14;;29283:95;;29323:20;-1:-1:-1;;;29323:20:0;;;;;;29283:95;;;;-1:-1:-1;;;;;;;;;;;29283:95:0;;;29363:14;;;29283:95;:::i;:::-;;;;;;;;29393:20;;;:40;;-1:-1:-1;;29393:40:0;-1:-1:-1;;;29393:40:0;;;;;;;29216:229;29459:20;;;;:41;;;;-1:-1:-1;;;29459:20:0;;;;:41;29455:229;;29522:95;;-1:-1:-1;;;22457:31:1;;22513:2;22504:12;29522:95:0;;;;;;;;29562:20;;;;29602:14;;29522:95;;29562:20;-1:-1:-1;;;29562:20:0;;;;;;29522:95;;;;-1:-1:-1;;;;;;;;;;;29522:95:0;;;29602:14;;;29522:95;:::i;:::-;;;;;;;;29632:20;;;:40;;-1:-1:-1;;29632:40:0;-1:-1:-1;;;29632:40:0;;;;;;;29455:229;29698:18;;;;:37;;;;-1:-1:-1;;;29698:18:0;;;;:37;29694:215;;29757:89;;-1:-1:-1;;;22729:29:1;;22783:2;22774:12;29757:89:0;;;;;;;;29795:18;;;;29831:14;;29757:89;;29795:18;-1:-1:-1;;;29795:18:0;;;;;;29757:89;;;;-1:-1:-1;;;;;;;;;;;29757:89:0;;;29831:14;;;29757:89;:::i;:::-;;;;;;;;29861:18;;;:36;;;;;-1:-1:-1;;;29861:36:0;-1:-1:-1;;29861:36:0;;;;;;28499:1417;;;;;;:::o;9238:840::-;-1:-1:-1;;;;;9369:18:0;;9361:68;;;;-1:-1:-1;;;9361:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9448:16:0;;9440:64;;;;-1:-1:-1;;;9440:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9590:15:0;;9568:19;9590:15;;;:9;:15;;;;;;9624:21;;;;9616:72;;;;-1:-1:-1;;;9616:72:0;;22999:2:1;9616:72:0;;;22981:21:1;23038:2;23018:18;;;23011:30;23077:34;23057:18;;;23050:62;-1:-1:-1;;;23128:18:1;;;23121:36;23174:19;;9616:72:0;22797:402:1;9616:72:0;-1:-1:-1;;;;;9724:15:0;;;;;;;:9;:15;;;;;;9742:20;;;9724:38;;9942:13;;;;;;;;;;:23;;;;;;9994:26;;;;;;9756:6;1977:25:1;;1965:2;1950:18;;1831:177;9994:26:0;;;;;;;;10033:37;24898:2003;26909:1582;27008:13;:17;;-1:-1:-1;;27117:13:0;;;27143:454;;;;27179:11;;;;:53;;;;;27231:1;27209:18;;27194:12;:33;;;;:::i;:::-;:38;;27179:53;27175:411;;;27253:13;:19;;-1:-1:-1;;27253:19:0;27269:3;27253:19;;;27175:411;;;27329:23;;27313:13;:39;;27329:23;;;;-1:-1:-1;;27371:41:0;;;;;;;27329:23;27388:24;;;;;;27371:41;;;;;;;;-1:-1:-1;;27485:35:0;-1:-1:-1;;;27445:21:0;;;;;27431:35;;;;-1:-1:-1;;27485:35:0;;-1:-1:-1;;;27499:21:0;;;;27485:35;;;-1:-1:-1;;27539:31:0;-1:-1:-1;;;27551:19:0;;;;;;;27539:31;;;;;;;27175:411;27611:10;27607:289;;;27654:24;;27638:13;:40;;27654:24;;;;;;;;-1:-1:-1;;27693:42:0;;;;;;;27710:25;;;;;;27693:42;;;;;-1:-1:-1;;27801:36:0;-1:-1:-1;;;27764:22:0;;;;27750:36;;-1:-1:-1;;27801:36:0;;-1:-1:-1;;;27815:22:0;;;;27801:36;;;;;-1:-1:-1;;27852:32:0;-1:-1:-1;;;27864:20:0;;;;-1:-1:-1;;;27852:32:0;;;;;;;27607:289;27911:10;27910:11;:27;;;;;27926:11;27925:12;27910:27;:105;;;;-1:-1:-1;;;;;;27942:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;27981:33:0;;;;;;:29;:33;;;;;;;;27942:72;27906:379;;;28048:23;;28032:13;:39;;28048:23;;;;-1:-1:-1;;28086:41:0;;;;;;;28048:23;28103:24;;;;;;28086:41;;;;;;;;-1:-1:-1;;28192:35:0;-1:-1:-1;;;28156:21:0;;;;;28142:35;;;;-1:-1:-1;;28192:35:0;;-1:-1:-1;;;28206:21:0;;;;28192:35;;;-1:-1:-1;;28242:31:0;-1:-1:-1;;;28254:19:0;;;;;;;28242:31;;;;;;;27906:379;28368:9;;;-1:-1:-1;;;28368:9:0;;;;;28354:11;;;;;;28340;;;;;;28307:30;;28368:9;28323:14;;;;;28307:13;:30;:::i;:::-;:44;;;;:::i;:::-;:58;;;;:::i;:::-;:70;;;;:::i;:::-;28295:9;:82;;;;;;-1:-1:-1;;;28295:82:0;;;-1:-1:-1;;28295:82:0;;;;;;;;28393:90;;;28405:13;;;;;;;;;;23643:34:1;;28295:82:0;28420:14;;;;23708:2:1;23693:18;;23686:43;28436:11:0;;;;;23745:18:1;;;23738:43;28449:11:0;;;;;23812:2:1;23797:18;;23790:43;-1:-1:-1;;;28462:9:0;;;;23864:3:1;23849:19;;23842:44;28473:9:0;;;;;23917:3:1;23902:19;;23895:44;28393:90:0;;;;;;;23607:3:1;28393:90:0;;;26909:1582;;;;:::o;31306:1490::-;31396:4;31352:23;7640:18;;;:9;:18;;;;;;31537:9;;7640:18;;31441:21;;31549:1;;31537:9;-1:-1:-1;;;31537:9:0;;;;;31502:31;;31520:13;7640:18;31502:31;:::i;:::-;31501:45;;;;:::i;:::-;:49;;;;:::i;:::-;31475:75;-1:-1:-1;31561:20:0;31584:33;31475:75;31584:15;:33;:::i;:::-;31561:56;;31630:31;31648:12;31630:17;:31::i;:::-;31674:27;31704:41;31728:17;31704:21;:41;:::i;:::-;31791:13;;31674:71;;-1:-1:-1;31756:19:0;;31791:17;;31807:1;;31791:13;;:17;:::i;:::-;31778:9;;:31;;;-1:-1:-1;;;31778:9:0;;;;:31;:::i;:::-;31872:13;;31756:53;;;;;-1:-1:-1;31820:26:0;;31903:1;;31756:53;;31850:35;;31872:13;31850:19;:35;:::i;:::-;31849:51;;;;:::i;:::-;:55;;;;:::i;:::-;31968:14;;31820:84;;-1:-1:-1;31915:27:0;;31986:11;;31946:36;;31968:14;;;;;31946:19;:36;:::i;:::-;31945:52;;;;:::i;:::-;32058:11;;31915:82;;-1:-1:-1;32008:24:0;;32073:11;;32036:33;;32058:11;;;;;32036:19;:33;:::i;:::-;32035:49;;;;:::i;:::-;32145:11;;32008:76;;-1:-1:-1;32095:24:0;;32160:11;;32123:33;;32145:11;;;;;32123:19;:33;:::i;:::-;32122:49;;;;:::i;:::-;32095:76;-1:-1:-1;32182:22:0;32095:76;32270:19;32230:37;32251:16;32230:18;:37;:::i;:::-;:59;;;;:::i;:::-;:78;;;;:::i;:::-;32207:102;;:19;:102;:::i;:::-;32348:16;;32182:127;;-1:-1:-1;32322:64:0;;-1:-1:-1;;;;;32348:16:0;32366:19;32322:17;:64::i;:::-;32423:13;;32397:58;;-1:-1:-1;;;;;32423:13:0;32438:16;32397:17;:58::i;:::-;32492:13;;32466:58;;-1:-1:-1;;;;;32492:13:0;32507:16;32466:17;:58::i;:::-;32561:11;;32535:54;;-1:-1:-1;;;;;32561:11:0;32574:14;32535:17;:54::i;:::-;32606:19;;32602:187;;32642:50;32656:15;32673:18;32642:13;:50::i;:::-;32712:65;;;24478:25:1;;;24534:2;24519:18;;24512:34;;;24562:18;;;24555:34;;;32712:65:0;;24466:2:1;24451:18;32712:65:0;;;;;;;32602:187;31341:1455;;;;;;;;;;;31306:1490::o;32804:500::-;32895:16;;;32909:1;32895:16;;;;;;;;32871:21;;32895:16;;;;;;;;;;-1:-1:-1;32895:16:0;32871:40;;32940:4;32922;32927:1;32922:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32922:23:0;;;:7;;;;;;;;;;:23;;;;32966:15;;:22;;;-1:-1:-1;;;32966:22:0;;;;:15;;;;;:20;;:22;;;;;32922:7;;32966:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32956:4;32961:1;32956:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32956:32:0;;;:7;;;;;;;;;:32;33031:15;;32999:62;;33016:4;;33031:15;33049:11;32999:8;:62::i;:::-;33072:15;;:224;;-1:-1:-1;;;33072:224:0;;-1:-1:-1;;;;;33072:15:0;;;;:66;;:224;;33153:11;;33072:15;;33223:4;;33250;;33270:15;;33072:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:322;2463:6;2438:21;:31;;2425:86;;;;-1:-1:-1;;;2425:86:0;;26307:2:1;2425:86:0;;;26289:21:1;26346:2;26326:18;;;26319:30;26385:31;26365:18;;;26358:59;26434:18;;2425:86:0;26105:353:1;2425:86:0;2519:12;2537:9;-1:-1:-1;;;;;2537:14:0;2559:6;2537:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2518:52;;;2588:7;2575:91;;;;-1:-1:-1;;;2575:91:0;;26665:2:1;2575:91:0;;;26647:21:1;26704:2;26684:18;;;26677:30;26743:34;26723:18;;;26716:62;26814:28;26794:18;;;26787:56;26860:19;;2575:91:0;26463:422:1;33312:425:0;33426:15;;33394:62;;33411:4;;-1:-1:-1;;;;;33426:15:0;33444:11;33394:8;:62::i;:::-;33467:15;;33673;;33467:262;;-1:-1:-1;;;33467:262:0;;33541:4;33467:262;;;27231:34:1;27281:18;;;27274:34;;;33467:15:0;27324:18:1;;;27317:34;;;27367:18;;;27360:34;-1:-1:-1;;;;;33673:15:0;;;27410:19:1;;;27403:44;33703:15:0;27463:19:1;;;27456:35;33467:15:0;;;:31;;33507:9;;27165:19:1;;33467:262: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;2013:456::-;2090:6;2098;2106;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;:::-;2283:5;-1:-1:-1;2340:2:1;2325:18;;2312:32;2353:33;2312:32;2353:33;:::i;:::-;2013:456;;2405:7;;-1:-1:-1;;;2459:2:1;2444:18;;;;2431:32;;2013:456::o;2663:416::-;2728:6;2736;2789:2;2777:9;2768:7;2764:23;2760:32;2757:52;;;2805:1;2802;2795:12;2757:52;2844:9;2831:23;2863:31;2888:5;2863:31;:::i;:::-;2913:5;-1:-1:-1;2970:2:1;2955:18;;2942:32;3012:15;;3005:23;2993:36;;2983:64;;3043:1;3040;3033:12;2983:64;3066:7;3056:17;;;2663:416;;;;;:::o;3084:247::-;3143:6;3196:2;3184:9;3175:7;3171:23;3167:32;3164:52;;;3212:1;3209;3202:12;3164:52;3251:9;3238:23;3270:31;3295:5;3270:31;:::i;:::-;3320:5;3084:247;-1:-1:-1;;;3084:247:1:o;3336:813::-;3431:6;3439;3447;3455;3463;3516:3;3504:9;3495:7;3491:23;3487:33;3484:53;;;3533:1;3530;3523:12;3484:53;3572:9;3559:23;3591:31;3616:5;3591:31;:::i;:::-;3641:5;-1:-1:-1;3698:2:1;3683:18;;3670:32;3711:33;3670:32;3711:33;:::i;:::-;3763:7;-1:-1:-1;3822:2:1;3807:18;;3794:32;3835:33;3794:32;3835:33;:::i;:::-;3887:7;-1:-1:-1;3946:2:1;3931:18;;3918:32;3959:33;3918:32;3959:33;:::i;:::-;4011:7;-1:-1:-1;4070:3:1;4055:19;;4042:33;4084;4042;4084;:::i;:::-;4136:7;4126:17;;;3336:813;;;;;;;;:::o;4154:156::-;4220:20;;4280:4;4269:16;;4259:27;;4249:55;;4300:1;4297;4290:12;4249:55;4154:156;;;:::o;4315:464::-;4400:6;4408;4416;4424;4432;4485:3;4473:9;4464:7;4460:23;4456:33;4453:53;;;4502:1;4499;4492:12;4453:53;4525:27;4542:9;4525:27;:::i;:::-;4515:37;;4571:36;4603:2;4592:9;4588:18;4571:36;:::i;:::-;4561:46;;4626:36;4658:2;4647:9;4643:18;4626:36;:::i;:::-;4616:46;;4681:36;4713:2;4702:9;4698:18;4681:36;:::i;:::-;4671:46;;4736:37;4768:3;4757:9;4753:19;4736:37;:::i;:::-;4726:47;;4315:464;;;;;;;;:::o;5287:388::-;5355:6;5363;5416:2;5404:9;5395:7;5391:23;5387:32;5384:52;;;5432:1;5429;5422:12;5384:52;5471:9;5458:23;5490:31;5515:5;5490:31;:::i;:::-;5540:5;-1:-1:-1;5597:2:1;5582:18;;5569:32;5610:33;5569:32;5610:33;:::i;5680:380::-;5759:1;5755:12;;;;5802;;;5823:61;;5877:4;5869:6;5865:17;5855:27;;5823:61;5930:2;5922:6;5919:14;5899:18;5896:38;5893:161;;5976:10;5971:3;5967:20;5964:1;5957:31;6011:4;6008:1;6001:15;6039:4;6036:1;6029:15;5893:161;;5680:380;;;:::o;6065:356::-;6267:2;6249:21;;;6286:18;;;6279:30;6345:34;6340:2;6325:18;;6318:62;6412:2;6397:18;;6065:356::o;7884:127::-;7945:10;7940:3;7936:20;7933:1;7926:31;7976:4;7973:1;7966:15;8000:4;7997:1;7990:15;8016:125;8081:9;;;8102:10;;;8099:36;;;8115:18;;:::i;8928:413::-;9130:2;9112:21;;;9169:2;9149:18;;;9142:30;9208:34;9203:2;9188:18;;9181:62;-1:-1:-1;;;9274:2:1;9259:18;;9252:47;9331:3;9316:19;;8928:413::o;9748:128::-;9815:9;;;9836:11;;;9833:37;;;9850:18;;:::i;17021:401::-;17223:2;17205:21;;;17262:2;17242:18;;;17235:30;17301:34;17296:2;17281:18;;17274:62;-1:-1:-1;;;17367:2:1;17352:18;;17345:35;17412:3;17397:19;;17021:401::o;17427:399::-;17629:2;17611:21;;;17668:2;17648:18;;;17641:30;17707:34;17702:2;17687:18;;17680:62;-1:-1:-1;;;17773:2:1;17758:18;;17751:33;17816:3;17801:19;;17427:399::o;19432:168::-;19505:9;;;19536;;19553:15;;;19547:22;;19533:37;19523:71;;19574:18;;:::i;19605:127::-;19666:10;19661:3;19657:20;19654:1;19647:31;19697:4;19694:1;19687:15;19721:4;19718:1;19711:15;19737:120;19777:1;19803;19793:35;;19808:18;;:::i;:::-;-1:-1:-1;19842:9:1;;19737:120::o;20135:209::-;-1:-1:-1;;20299:38:1;;;;20281:57;;20269:2;20254:18;;20135:209::o;23204:148::-;23292:4;23271:12;;;23285;;;23267:31;;23310:13;;23307:39;;;23326:18;;:::i;23950:165::-;23988:1;24022:4;24019:1;24015:12;24046:3;24036:37;;24053:18;;:::i;:::-;24105:3;24098:4;24095:1;24091:12;24087:22;24082:27;;;23950:165;;;;:::o;24120:151::-;24210:4;24203:12;;;24189;;;24185:31;;24228:14;;24225:40;;;24245:18;;:::i;24732:127::-;24793:10;24788:3;24784:20;24781:1;24774:31;24824:4;24821:1;24814:15;24848:4;24845:1;24838:15;24864:251;24934:6;24987:2;24975:9;24966:7;24962:23;24958:32;24955:52;;;25003:1;25000;24993:12;24955:52;25035:9;25029:16;25054:31;25079:5;25054:31;:::i;25120:980::-;25382:4;25430:3;25419:9;25415:19;25461:6;25450:9;25443:25;25487:2;25525:6;25520:2;25509:9;25505:18;25498:34;25568:3;25563:2;25552:9;25548:18;25541:31;25592:6;25627;25621:13;25658:6;25650;25643:22;25696:3;25685:9;25681:19;25674:26;;25735:2;25727:6;25723:15;25709:29;;25756:1;25766:195;25780:6;25777:1;25774:13;25766:195;;;25845:13;;-1:-1:-1;;;;;25841:39:1;25829:52;;25936:15;;;;25901:12;;;;25877:1;25795:9;25766:195;;;-1:-1:-1;;;;;;;26017:32:1;;;;26012:2;25997:18;;25990:60;-1:-1:-1;;;26081:3:1;26066:19;26059:35;25978:3;25120:980;-1:-1:-1;;;25120:980:1:o;27502:306::-;27590:6;27598;27606;27659:2;27647:9;27638:7;27634:23;27630:32;27627:52;;;27675:1;27672;27665:12;27627:52;27704:9;27698:16;27688:26;;27754:2;27743:9;27739:18;27733:25;27723:35;;27798:2;27787:9;27783:18;27777:25;27767:35;;27502:306;;;;;:::o

Swarm Source

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