ETH Price: $3,173.96 (-7.65%)
Gas: 9 Gwei

Token

Slake (SLAKE)
 

Overview

Max Total Supply

500,000,000 SLAKE

Holders

377 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
265.574052588989164013 SLAKE

Value
$0.00
0x6d8fc390502e8e028ffd5659940c69a21d6430d7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The decentralized Slake token and future blockchain will provide a unique and unified ecosystem for businesses and applications in the food service tech industry, such as payments, orders, delivery, reservations, loyalty rewards, and more.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SlakeToken

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-24
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.15;

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;

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IERC20 {
	function totalSupply() external view returns (uint256);
	function balanceOf(address account) external view returns (uint256);
	function transfer(address recipient, uint256 amount) external returns (bool);
	function allowance(address owner, address spender) external view returns (uint256);
	function approve(address spender, uint256 amount) external returns (bool);

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

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

interface IERC20Metadata is IERC20 {
	function name() external view returns (string memory);
	function symbol() external view returns (string memory);
	function decimals() external view returns (uint8);
}

library SafeMath {

	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		require(c >= a, "SafeMath: addition overflow");

		return c;
	}

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		return sub(a, b, "SafeMath: subtraction overflow");
	}

	function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b <= a, errorMessage);
		uint256 c = a - b;

		return c;
	}

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
		// benefit is lost if 'b' is also tested.
		// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
		if (a == 0) {
			return 0;
		}

		uint256 c = a * b;
		require(c / a == b, "SafeMath: multiplication overflow");

		return c;
	}

	function div(uint256 a, uint256 b) internal pure returns (uint256) {
		return div(a, b, "SafeMath: division by zero");
	}

	function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b > 0, errorMessage);
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold

		return c;
	}

	function mod(uint256 a, uint256 b) internal pure returns (uint256) {
		return mod(a, b, "SafeMath: modulo by zero");
	}

	function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b != 0, errorMessage);
		return a % b;
	}
}

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 {
	using SafeMath for uint256;

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

	uint256 private _totalSupply;
	string private _name;
	string private _symbol;

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

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

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

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

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

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

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

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

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

	function transferFrom(
		address sender,
		address recipient,
		uint256 amount
	) public virtual override returns (bool) {
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
		return true;
	}

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

	function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
		return true;
	}

	function _transfer(
		address sender,
		address recipient,
		uint256 amount
	) internal virtual {
		require(sender != address(0), "ERC20: transfer from the zero address");
		require(recipient != address(0), "ERC20: transfer to the zero address");
		_beforeTokenTransfer(sender, recipient, amount);
		_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
		_balances[recipient] = _balances[recipient].add(amount);
		emit Transfer(sender, recipient, 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 = _totalSupply.add(amount);
		_balances[account] = _balances[account].add(amount);
		emit Transfer(address(0), account, amount);
	}

	function _burn(address account, uint256 amount) internal virtual {
		require(account != address(0), "ERC20: burn from the zero address");
		_beforeTokenTransfer(account, address(0), amount);
		_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
		_totalSupply = _totalSupply.sub(amount);
		emit Transfer(account, address(0), amount);
	}

	function _approve(
		address owner,
		address spender,
		uint256 amount
	) internal virtual {
		require(owner != address(0), "ERC20: approve from the zero address");
		require(spender != address(0), "ERC20: approve to the zero address");
		_allowances[owner][spender] = amount;
		emit Approval(owner, spender, amount);
	}

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

contract SlakeToken is ERC20, Ownable {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Slake";
    string private constant _symbol = "SLAKE";
    uint8 private constant _decimals = 18;

    bool public isTradingEnabled;

    // initialSupply
    uint256 constant initialSupply = 500000000 * (10**18);

    address public USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

    // max wallet is 2.0% of initialSupply
    uint256 public maxWalletAmount = initialSupply * 200 / 10000;
    // max buy and sell tx is 1.0 % of initialSupply
    uint256 public maxTxAmount = initialSupply * 100 / 10000;

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

    address public liquidityWallet;
    address public operationsWallet;
    address public buyBackWallet;

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

    // Launch taxes
    bool private _isLaunched;
    uint256 private _launchStartTimestamp;
    uint256 private _launchBlockNumber;

    // Base taxes
    CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,1,1,7,7,2,2);
    CustomTaxPeriod private _launch = CustomTaxPeriod('base',0,0,1,2,7,7,2,3);

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

    uint8 private _liquidityFee;
    uint8 private _operationsFee;
    uint8 private _buyBackFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
    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);
    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 AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxWalletChange(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, uint256 totalFee);

    constructor() ERC20(_name, _symbol) {
        liquidityWallet = owner();
        operationsWallet = owner();
        buyBackWallet = owner();

        IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Mainnet
        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;

        _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 allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "SLAKE: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit AutomatedMarketMakerPairChange(pair, value);
    }
    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFee[account] != excluded, "SLAKE: 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, "SLAKE: 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, "SLAKE: Account is already the value of 'excluded'");
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }
    function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner {
		require(_feeOnSelectedWalletTransfers[account] != value, "SLAKE: The selected wallet is already set to the value ");
		_feeOnSelectedWalletTransfers[account] = value;
		emit FeeOnSelectedWalletTransfersChange(account, value);
	}
    function setWallets(address newLiquidityWallet, address newOperationsWallet, address newBuyBackWallet) external onlyOwner {
        if(liquidityWallet != newLiquidityWallet) {
            require(newLiquidityWallet != address(0), "SLAKE: The liquidityWallet cannot be 0");
            emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet);
            liquidityWallet = newLiquidityWallet;
        }
        if(operationsWallet != newOperationsWallet) {
            require(newOperationsWallet != address(0), "SLAKE: The operationsWallet cannot be 0");
            emit WalletChange('operationsWallet', newOperationsWallet, operationsWallet);
            operationsWallet = newOperationsWallet;
        }
        if(buyBackWallet != newBuyBackWallet) {
            require(newBuyBackWallet != address(0), "SLAKE: The buyBackWallet cannot be 0");
            emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet);
            buyBackWallet = newBuyBackWallet;
        }
    }
    // Base fees
    function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _operationsFeeOnBuy, uint8 _buyBackFeeOnBuy) external onlyOwner {
        _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _operationsFeeOnBuy, _buyBackFeeOnBuy);
        emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _operationsFeeOnBuy, _buyBackFeeOnBuy);
    }
    function setBaseFeesOnSell(uint8 _liquidityFeeOnSell,uint8 _operationsFeeOnSell , uint8 _buyBackFeeOnSell) external onlyOwner {
        _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _operationsFeeOnSell, _buyBackFeeOnSell);
        emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _operationsFeeOnSell, _buyBackFeeOnSell);
    }
    function setUniswapRouter(address newAddress) external onlyOwner {
        require(newAddress != address(uniswapV2Router), "SLAKE: The router already has that address");
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
    }
    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxTxAmount, "SLAKE: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }
    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxWalletAmount, "SLAKE: Cannot update maxWalletAmount to same value");
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }
    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(newValue != minimumTokensBeforeSwap, "SLAKE: Cannot update minimumTokensBeforeSwap to same value");
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }
    function claimETHOverflow() external onlyOwner {
        uint256 amount = address(this).balance;
        (bool success,) = address(owner()).call{value : amount}("");
        if (success){
            emit ClaimETHOverflow(amount);
        }
    }

    // Getters
    function getBaseBuyFees() external view returns (uint8, uint8, uint8) {
        return (_base.liquidityFeeOnBuy, _base.operationsFeeOnBuy, _base.buyBackFeeOnBuy);
    }
    function getBaseSellFees() external view returns (uint8, uint8, uint8) {
        return (_base.liquidityFeeOnSell, _base.operationsFeeOnSell, _base.buyBackFeeOnSell);
    }

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

        bool isBuyFromLp = automatedMarketMakerPairs[from];
        bool isSelltoLp = automatedMarketMakerPairs[to];

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

        _adjustTaxes(isBuyFromLp, isSelltoLp, 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;

        if (isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _operationsFee = _base.operationsFeeOnBuy;
            _buyBackFee = _base.buyBackFeeOnBuy;

        }
        if (isSelltoLp) {
			if ((block.timestamp - _launchStartTimestamp) <= 86400*30) {
				_liquidityFee = _launch.liquidityFeeOnSell;
				_operationsFee = _launch.operationsFeeOnSell;
				_buyBackFee = _launch.buyBackFeeOnSell;
			}
			else {
				_liquidityFee = _base.liquidityFeeOnSell;
				_operationsFee = _base.operationsFeeOnSell;
				_buyBackFee = _base.buyBackFeeOnSell;
			}
        }
        if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) {
			_liquidityFee = _base.liquidityFeeOnSell;
            _operationsFee = _base.operationsFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
		}
        _totalFee = _liquidityFee + _operationsFee + _buyBackFee;
        emit FeesApplied(_liquidityFee, _operationsFee, _buyBackFee, _totalFee);
    }
    function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _operationsFeeOnSell,
        uint8 _buyBackFeeOnSell
        ) 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;
        }
    }
    function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _operationsFeeOnBuy,
        uint8 _buyBackFeeOnBuy
        ) 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;
        }
    }
    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        uint8 _totalFeePrior = _totalFee;

        uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFeePrior / 2;
        uint256 amountToSwap = contractBalance - amountToLiquify;

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFeePrior - (_liquidityFee / 2);
        uint256 amountETHLiquidity = ETHBalanceAfterSwap * _liquidityFee / totalETHFee / 2;
        uint256 amountETHOperations = ETHBalanceAfterSwap * _operationsFee / totalETHFee;
        uint256 amountETHBuyBack = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHOperations);

        payable(buyBackWallet).transfer(amountETHBuyBack);

        _swapETHForCustomToken(amountETHOperations, USDC, operationsWallet);

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

        _totalFee = _totalFeePrior;
    }
    function _swapETHForCustomToken(uint256 ethAmount, address token, address wallet) private {
        address[] memory path = new address[](2);
		path[0] = uniswapV2Router.WETH();
		path[1] = token;
		uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}(
			0, // accept any amount of ETH
			path,
			wallet,
			block.timestamp
		);
    }
    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,
            0, // 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,
            0, // slippage is unavoidable
            0, // 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":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"}],"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":"uint256","name":"totalFee","type":"uint256"}],"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":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"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"}],"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"}],"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"}],"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600780546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179055612710620000466b019d971e4fe8401e7400000060c862000a2f565b62000052919062000a51565b600855612710620000716b019d971e4fe8401e74000000606462000a2f565b6200007d919062000a51565b600955620186a06200009d6b019d971e4fe8401e74000000601962000a2f565b620000a9919062000a51565b600b55604051806101200160405280636261736560e01b6001600160481b0319168152602001600060ff16815260200160008152602001600160ff168152602001600160ff168152602001600760ff168152602001600760ff168152602001600260ff168152602001600260ff16815250601160008201518160000160006101000a8154816001600160b81b03021916908360481c021790555060208201518160000160176101000a81548160ff021916908360ff1602179055506040820151816001015560608201518160020160006101000a81548160ff021916908360ff16021790555060808201518160020160016101000a81548160ff021916908360ff16021790555060a08201518160020160026101000a81548160ff021916908360ff16021790555060c08201518160020160036101000a81548160ff021916908360ff16021790555060e08201518160020160046101000a81548160ff021916908360ff1602179055506101008201518160020160056101000a81548160ff021916908360ff1602179055505050604051806101200160405280636261736560e01b6001600160481b0319168152602001600060ff16815260200160008152602001600160ff168152602001600260ff168152602001600760ff168152602001600760ff168152602001600260ff168152602001600360ff16815250601460008201518160000160006101000a8154816001600160b81b03021916908360481c021790555060208201518160000160176101000a81548160ff021916908360ff1602179055506040820151816001015560608201518160020160006101000a81548160ff021916908360ff16021790555060808201518160020160016101000a81548160ff021916908360ff16021790555060a08201518160020160026101000a81548160ff021916908360ff16021790555060c08201518160020160036101000a81548160ff021916908360ff16021790555060e08201518160020160046101000a81548160ff021916908360ff1602179055506101008201518160020160056101000a81548160ff021916908360ff1602179055505050348015620003cf57600080fd5b5060405180604001604052806005815260200164536c616b6560d81b81525060405180604001604052806005815260200164534c414b4560d81b81525081600390816200041d919062000b18565b5060046200042c828262000b18565b505050600062000441620007ba60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600554600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa1580156200051c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000542919062000be4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000590573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b6919062000be4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062a919062000be4565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200065e816001620007be565b600160176000620006776005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526017909252812080549092166001908117909255601a90620006d06005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601885528382208054871660019081179091558784168352601995869052848320805488168217905560065490931682528382208054871684179055815291822080549094168117909355620007606005546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620007b26200079f6005546001600160a01b031690565b6b019d971e4fe8401e74000000620008ae565b505062000c2a565b3390565b6001600160a01b0382166000908152601c602052604090205481151560ff9091161515036200085a5760405162461bcd60e51b815260206004820152603f60248201527f534c414b453a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084015b60405180910390fd5b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620009065760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000851565b6200092281600254620009af60201b620017de1790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000955918390620017de620009af821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b600080620009be838562000c0f565b90508381101562000a125760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000851565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000a4c5762000a4c62000a19565b500290565b60008262000a6f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a9f57607f821691505b60208210810362000ac057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009aa57600081815260208120601f850160051c8101602086101562000aef5750805b601f850160051c820191505b8181101562000b105782815560010162000afb565b505050505050565b81516001600160401b0381111562000b345762000b3462000a74565b62000b4c8162000b45845462000a8a565b8462000ac6565b602080601f83116001811462000b84576000841562000b6b5750858301515b600019600386901b1c1916600185901b17855562000b10565b600085815260208120601f198616915b8281101562000bb55788860151825594840194600190910190840162000b94565b508582101562000bd45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000bf757600080fd5b81516001600160a01b038116811462000a1257600080fd5b6000821982111562000c255762000c2562000a19565b500190565b60805161302962000c46600039600061044a01526130296000f3fe6080604052600436106102555760003560e01c8063880bcbc111610139578063bea9849e116100b6578063d46980161161007a578063d46980161461071f578063dd62ed3e1461073f578063e625724614610785578063f2fde38b146107a5578063fd72e22a146107c5578063fe017535146107e557600080fd5b8063bea9849e1461065b578063c02466681461067b578063cd43e2281461069b578063d2d7ad83146106e9578063d3221576146106ff57600080fd5b8063a457c2d7116100fd578063a457c2d7146105b5578063a9059cbb146105d5578063aa4bde28146105f5578063aee50b1e1461060b578063b62496f51461062b57600080fd5b8063880bcbc11461052c57806389a302711461054c5780638c0b5e221461056c5780638da5cb5b1461058257806395d89b41146105a057600080fd5b8063313ce567116101d257806366164f6f1161019657806366164f6f1461046c57806370a0823114610481578063715018a6146104b757806375cb1bd1146104cc57806376dca835146104ec578063781edb3c1461050c57600080fd5b8063313ce567146103c757806334cf1fea146103e357806339509351146103f857806345a423291461041857806349bd5a5e1461043857600080fd5b806318160ddd1161021957806318160ddd146103285780631cd348c0146103475780631e293c101461036757806323b872dd1461038757806327a14fc2146103a757600080fd5b8063064a59d01461026157806306fdde0314610297578063095ea7b3146102b95780630bd05b69146102d95780631694505e146102f057600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5060065461028290600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102a357600080fd5b506102ac610817565b60405161028e91906129d3565b3480156102c557600080fd5b506102826102d4366004612a40565b6108a9565b3480156102e557600080fd5b506102ee6108bf565b005b3480156102fc57600080fd5b50600654610310906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561033457600080fd5b506002545b60405190815260200161028e565b34801561035357600080fd5b50600e54610310906001600160a01b031681565b34801561037357600080fd5b506102ee610382366004612a6c565b61092d565b34801561039357600080fd5b506102826103a2366004612a85565b6109f2565b3480156103b357600080fd5b506102ee6103c2366004612a6c565b610a5b565b3480156103d357600080fd5b506040516012815260200161028e565b3480156103ef57600080fd5b506102ee610b24565b34801561040457600080fd5b50610282610413366004612a40565b610b5d565b34801561042457600080fd5b506102ee610433366004612ac6565b610b93565b34801561044457600080fd5b506103107f000000000000000000000000000000000000000000000000000000000000000081565b34801561047857600080fd5b506102ee610cb3565b34801561048d57600080fd5b5061033961049c366004612b04565b6001600160a01b031660009081526020819052604090205490565b3480156104c357600080fd5b506102ee610d83565b3480156104d857600080fd5b506102ee6104e7366004612b21565b610df7565b3480156104f857600080fd5b506102ee610507366004612b82565b6110fc565b34801561051857600080fd5b506102ee610527366004612ac6565b6111a0565b34801561053857600080fd5b506102ee610547366004612ac6565b611262565b34801561055857600080fd5b50600754610310906001600160a01b031681565b34801561057857600080fd5b5061033960095481565b34801561058e57600080fd5b506005546001600160a01b0316610310565b3480156105ac57600080fd5b506102ac611324565b3480156105c157600080fd5b506102826105d0366004612a40565b611333565b3480156105e157600080fd5b506102826105f0366004612a40565b611382565b34801561060157600080fd5b5061033960085481565b34801561061757600080fd5b506102ee610626366004612a6c565b61138f565b34801561063757600080fd5b50610282610646366004612b04565b601c6020526000908152604090205460ff1681565b34801561066757600080fd5b506102ee610676366004612b04565b611463565b34801561068757600080fd5b506102ee610696366004612ac6565b61155b565b3480156106a757600080fd5b5060135460ff80821691620100008104821691640100000000909104165b6040805160ff9485168152928416602084015292169181019190915260600161028e565b3480156106f557600080fd5b50610339600b5481565b34801561070b57600080fd5b506102ee61071a366004612ac6565b61161d565b34801561072b57600080fd5b50600c54610310906001600160a01b031681565b34801561074b57600080fd5b5061033961075a366004612bc5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561079157600080fd5b506102ee6107a0366004612b82565b61169f565b3480156107b157600080fd5b506102ee6107c0366004612b04565b6116f3565b3480156107d157600080fd5b50600d54610310906001600160a01b031681565b3480156107f157600080fd5b5060135460ff610100820481169163010000008104821691600160281b909104166106c5565b60606003805461082690612bf3565b80601f016020809104026020016040519081016040528092919081815260200182805461085290612bf3565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b60006108b6338484611844565b50600192915050565b6005546001600160a01b031633146108f25760405162461bcd60e51b81526004016108e990612c2d565b60405180910390fd5b6006805460ff60a01b1916600160a01b17905560105460000361092b574360105542600f55600e805460ff60a01b1916600160a01b1790555b565b6005546001600160a01b031633146109575760405162461bcd60e51b81526004016108e990612c2d565b60095481036109bf5760405162461bcd60e51b815260206004820152602e60248201527f534c414b453a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b60648201526084016108e9565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b60006109ff848484611969565b610a518433610a4c85604051806060016040528060288152602001612f87602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611d8c565b611844565b5060019392505050565b6005546001600160a01b03163314610a855760405162461bcd60e51b81526004016108e990612c2d565b6008548103610af15760405162461bcd60e51b815260206004820152603260248201527f534c414b453a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b60648201526084016108e9565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6005546001600160a01b03163314610b4e5760405162461bcd60e51b81526004016108e990612c2d565b6006805460ff60a01b19169055565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108b6918590610a4c90866117de565b6005546001600160a01b03163314610bbd5760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503610c535760405162461bcd60e51b815260206004820152603760248201527f534c414b453a205468652073656c65637465642077616c6c657420697320616c60448201527f72656164792073657420746f207468652076616c75652000000000000000000060648201526084016108e9565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6005546001600160a01b03163314610cdd5760405162461bcd60e51b81526004016108e990612c2d565b476000610cf26005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610d3c576040519150601f19603f3d011682016040523d82523d6000602084013e610d41565b606091505b505090508015610d7f576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6005546001600160a01b03163314610dad5760405162461bcd60e51b81526004016108e990612c2d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e215760405162461bcd60e51b81526004016108e990612c2d565b600c546001600160a01b03848116911614610f14576001600160a01b038316610e9b5760405162461bcd60e51b815260206004820152602660248201527f534c414b453a20546865206c697175696469747957616c6c65742063616e6e6f60448201526507420626520360d41b60648201526084016108e9565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611009576001600160a01b038216610f8f5760405162461bcd60e51b815260206004820152602760248201527f534c414b453a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b60648201526084016108e9565b600d546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b038281169116146110f7576001600160a01b0381166110805760405162461bcd60e51b8152602060048201526024808201527f534c414b453a20546865206275794261636b57616c6c65742063616e6e6f74206044820152630626520360e41b60648201526084016108e9565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6005546001600160a01b031633146111265760405162461bcd60e51b81526004016108e990612c2d565b6111336011848484611dc6565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6005546001600160a01b031633146111ca5760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361120a5760405162461bcd60e51b81526004016108e990612c62565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610ca7565b6005546001600160a01b0316331461128c5760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036112cc5760405162461bcd60e51b81526004016108e990612c62565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ca7565b60606004805461082690612bf3565b60006108b63384610a4c85604051806060016040528060258152602001612fcf602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611d8c565b60006108b6338484611969565b6005546001600160a01b031633146113b95760405162461bcd60e51b81526004016108e990612c2d565b600b5481036114305760405162461bcd60e51b815260206004820152603a60248201527f534c414b453a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c756500000000000060648201526084016108e9565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6005546001600160a01b0316331461148d5760405162461bcd60e51b81526004016108e990612c2d565b6006546001600160a01b03908116908216036114fe5760405162461bcd60e51b815260206004820152602a60248201527f534c414b453a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b60648201526084016108e9565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115855760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036115c55760405162461bcd60e51b81526004016108e990612c62565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610ca7565b6005546001600160a01b031633146116475760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610ca7565b6005546001600160a01b031633146116c95760405162461bcd60e51b81526004016108e990612c2d565b6116d66011848484611f90565b6040516b62617365466565732d42757960a01b8152600c0161114d565b6005546001600160a01b0316331461171d5760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b0381166117825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e9565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000806117eb8385612cc9565b90508381101561183d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108e9565b9392505050565b6001600160a01b0383166118a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e9565b6001600160a01b0382166119075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661198f5760405162461bcd60e51b81526004016108e990612ce1565b6001600160a01b0382166119b55760405162461bcd60e51b81526004016108e990612d26565b806000036119c9576110f783836000612147565b6001600160a01b038084166000818152601c6020908152604080832054948716835280832054938352601a90915290205460ff928316929182169116158015611a2b57506001600160a01b0384166000908152601a602052604090205460ff16155b15611c0757600654600160a01b900460ff16611a975760405162461bcd60e51b815260206004820152602560248201527f534c414b453a2054726164696e672069732063757272656e746c792064697361604482015264313632b21760d91b60648201526084016108e9565b6001600160a01b03841660009081526018602052604090205460ff16158015611ad957506001600160a01b03851660009081526018602052604090205460ff16155b15611b4657600954831115611b465760405162461bcd60e51b815260206004820152602d60248201527f534c414b453a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b60648201526084016108e9565b6001600160a01b03841660009081526019602052604090205460ff16611c075760085483611b89866001600160a01b031660009081526020819052604090205490565b611b939190612cc9565b1115611c075760405162461bcd60e51b815260206004820152603a60248201527f534c414b453a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e00000000000060648201526084016108e9565b611c1382828787612250565b600b543060009081526020819052604090205460065491111590600160a01b900460ff168015611c405750805b8015611c4f5750600a5460ff16155b8015611c665750601d546301000000900460ff1615155b8015611c8a57506001600160a01b0385166000908152601c602052604090205460ff165b15611caf57600a805460ff19166001179055611ca461249d565b600a805460ff191690555b600a5460009060ff16158015611cce5750600654600160a01b900460ff165b6001600160a01b03881660009081526017602052604090205490915060ff1680611d1057506001600160a01b03861660009081526017602052604090205460ff165b15611d19575060005b808015611d315750601d546301000000900460ff1615155b15611d7857601d54600090606490611d53906301000000900460ff1688612d69565b611d5d9190612d9e565b9050611d698187612db2565b9550611d76883083612147565b505b611d83878787612147565b50505050505050565b60008184841115611db05760405162461bcd60e51b81526004016108e991906129d3565b506000611dbd8486612db2565b95945050505050565b600284015460ff8481166101009092041614611e5757604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028601548654919260ff61010090920482169291871691600080516020612faf83398151915291611e389160481b90612dc9565b60405180910390a460028401805461ff00191661010060ff8616021790555b600284015460ff83811663010000009092041614611ef157604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028601548654919260ff630100000090920482169291861691600080516020612faf83398151915291611ece9160481b90612dc9565b60405180910390a460028401805463ff0000001916630100000060ff8516021790555b600284015460ff828116600160281b9092041614611f8a576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028601548654919260ff600160281b90920482169291851691600080516020612faf83398151915291611f659160481b90612dc9565b60405180910390a460028401805465ff00000000001916600160281b60ff8416021790555b50505050565b600284015460ff84811691161461201157604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028601548654919260ff9182169291871691600080516020612faf83398151915291611ff79160481b90612dc9565b60405180910390a460028401805460ff191660ff85161790555b600284015460ff8381166201000090920416146120a657604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028601548654919260ff6201000090920482169291861691600080516020612faf833981519152916120859160481b90612dc9565b60405180910390a460028401805462ff000019166201000060ff8516021790555b600284015460ff8281166401000000009092041614611f8a576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028601548654919260ff64010000000090920482169291851691600080516020612faf8339815191529161211b9160481b90612dc9565b60405180910390a460028401805460ff83166401000000000264ff000000001990911617905550505050565b6001600160a01b03831661216d5760405162461bcd60e51b81526004016108e990612ce1565b6001600160a01b0382166121935760405162461bcd60e51b81526004016108e990612d26565b6121d081604051806060016040528060268152602001612f61602691396001600160a01b0386166000908152602081905260409020549190611d8c565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546121ff90826117de565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161195c565b601d805462ffffff1916905583156122a657601354601d8054640100000000830460ff9081166201000090810262ff00001991860483166101000261ffff19909416929095169190911791909117169190911790555b82156123535762278d00600f54426122be9190612db2565b1161230d57601654601d805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b909304166201000002919091179055612353565b601354601d805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b8215801561235f575083155b80156123a557506001600160a01b0382166000908152601b602052604090205460ff16806123a557506001600160a01b0381166000908152601b602052604090205460ff165b156123f057601354601d805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b601d5460ff62010000820481169161241091610100820481169116612de0565b61241a9190612de0565b601d805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517f37450b5aa77beb1eaf790fc3e8b1fb6582e8a18bd51394b4a74b86d02ac7b4009181900360800190a150505050565b30600090815260208190526040812054601d549091479160ff630100000082048116929160029184916124d1911687612d69565b6124db9190612d9e565b6124e59190612d9e565b905060006124f38286612db2565b90506124fe81612672565b600061250a8547612db2565b601d549091506000906125229060029060ff16612e05565b61252c9086612e27565b601d5460ff91821692506000916002918491612549911686612d69565b6125539190612d9e565b61255d9190612d9e565b601d54909150600090839061257a90610100900460ff1686612d69565b6125849190612d9e565b905060006125928284612cc9565b61259c9086612db2565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156125d7573d6000803e3d6000fd5b50600754600d546125f69184916001600160a01b0391821691166127cc565b861561264857612606878461291f565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601d805460ff90971663010000000263ff000000199097169690961790955550505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a7576126a7612e4a565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127249190612e60565b8160018151811061273757612737612e4a565b6001600160a01b03928316602091820292909201015260065461275d9130911684611844565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612796908590600090869030904290600401612ec1565b600060405180830381600087803b1580156127b057600080fd5b505af11580156127c4573d6000803e3d6000fd5b505050505050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285a9190612e60565b8160008151811061286d5761286d612e4a565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106128a1576128a1612e4a565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959086906128e790600090869088904290600401612efd565b6000604051808303818588803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050505050505050565b6006546129379030906001600160a01b031684611844565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156129a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129cc9190612f32565b5050505050565b600060208083528351808285015260005b81811015612a00578581018301518582016040015282016129e4565b81811115612a12576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612a3d57600080fd5b50565b60008060408385031215612a5357600080fd5b8235612a5e81612a28565b946020939093013593505050565b600060208284031215612a7e57600080fd5b5035919050565b600080600060608486031215612a9a57600080fd5b8335612aa581612a28565b92506020840135612ab581612a28565b929592945050506040919091013590565b60008060408385031215612ad957600080fd5b8235612ae481612a28565b915060208301358015158114612af957600080fd5b809150509250929050565b600060208284031215612b1657600080fd5b813561183d81612a28565b600080600060608486031215612b3657600080fd5b8335612b4181612a28565b92506020840135612b5181612a28565b91506040840135612b6181612a28565b809150509250925092565b803560ff81168114612b7d57600080fd5b919050565b600080600060608486031215612b9757600080fd5b612ba084612b6c565b9250612bae60208501612b6c565b9150612bbc60408501612b6c565b90509250925092565b60008060408385031215612bd857600080fd5b8235612be381612a28565b91506020830135612af981612a28565b600181811c90821680612c0757607f821691505b602082108103612c2757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f534c414b453a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612cdc57612cdc612cb3565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615612d8357612d83612cb3565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612dad57612dad612d88565b500490565b600082821015612dc457612dc4612cb3565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115612dfd57612dfd612cb3565b019392505050565b600060ff831680612e1857612e18612d88565b8060ff84160491505092915050565b600060ff821660ff841680821015612e4157612e41612cb3565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e7257600080fd5b815161183d81612a28565b600081518084526020808501945080840160005b83811015612eb65781516001600160a01b031687529582019590820190600101612e91565b509495945050505050565b85815284602082015260a060408201526000612ee060a0830186612e7d565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201526000612f166080830186612e7d565b6001600160a01b03949094166040830152506060015292915050565b600080600060608486031215612f4757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205148e2911fec81f099ca20ac18a720137328c5258aa749b99b34924b52f7190e64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102555760003560e01c8063880bcbc111610139578063bea9849e116100b6578063d46980161161007a578063d46980161461071f578063dd62ed3e1461073f578063e625724614610785578063f2fde38b146107a5578063fd72e22a146107c5578063fe017535146107e557600080fd5b8063bea9849e1461065b578063c02466681461067b578063cd43e2281461069b578063d2d7ad83146106e9578063d3221576146106ff57600080fd5b8063a457c2d7116100fd578063a457c2d7146105b5578063a9059cbb146105d5578063aa4bde28146105f5578063aee50b1e1461060b578063b62496f51461062b57600080fd5b8063880bcbc11461052c57806389a302711461054c5780638c0b5e221461056c5780638da5cb5b1461058257806395d89b41146105a057600080fd5b8063313ce567116101d257806366164f6f1161019657806366164f6f1461046c57806370a0823114610481578063715018a6146104b757806375cb1bd1146104cc57806376dca835146104ec578063781edb3c1461050c57600080fd5b8063313ce567146103c757806334cf1fea146103e357806339509351146103f857806345a423291461041857806349bd5a5e1461043857600080fd5b806318160ddd1161021957806318160ddd146103285780631cd348c0146103475780631e293c101461036757806323b872dd1461038757806327a14fc2146103a757600080fd5b8063064a59d01461026157806306fdde0314610297578063095ea7b3146102b95780630bd05b69146102d95780631694505e146102f057600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5060065461028290600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102a357600080fd5b506102ac610817565b60405161028e91906129d3565b3480156102c557600080fd5b506102826102d4366004612a40565b6108a9565b3480156102e557600080fd5b506102ee6108bf565b005b3480156102fc57600080fd5b50600654610310906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561033457600080fd5b506002545b60405190815260200161028e565b34801561035357600080fd5b50600e54610310906001600160a01b031681565b34801561037357600080fd5b506102ee610382366004612a6c565b61092d565b34801561039357600080fd5b506102826103a2366004612a85565b6109f2565b3480156103b357600080fd5b506102ee6103c2366004612a6c565b610a5b565b3480156103d357600080fd5b506040516012815260200161028e565b3480156103ef57600080fd5b506102ee610b24565b34801561040457600080fd5b50610282610413366004612a40565b610b5d565b34801561042457600080fd5b506102ee610433366004612ac6565b610b93565b34801561044457600080fd5b506103107f00000000000000000000000002d9ea26c35b584dd4393c984d1611003be3898481565b34801561047857600080fd5b506102ee610cb3565b34801561048d57600080fd5b5061033961049c366004612b04565b6001600160a01b031660009081526020819052604090205490565b3480156104c357600080fd5b506102ee610d83565b3480156104d857600080fd5b506102ee6104e7366004612b21565b610df7565b3480156104f857600080fd5b506102ee610507366004612b82565b6110fc565b34801561051857600080fd5b506102ee610527366004612ac6565b6111a0565b34801561053857600080fd5b506102ee610547366004612ac6565b611262565b34801561055857600080fd5b50600754610310906001600160a01b031681565b34801561057857600080fd5b5061033960095481565b34801561058e57600080fd5b506005546001600160a01b0316610310565b3480156105ac57600080fd5b506102ac611324565b3480156105c157600080fd5b506102826105d0366004612a40565b611333565b3480156105e157600080fd5b506102826105f0366004612a40565b611382565b34801561060157600080fd5b5061033960085481565b34801561061757600080fd5b506102ee610626366004612a6c565b61138f565b34801561063757600080fd5b50610282610646366004612b04565b601c6020526000908152604090205460ff1681565b34801561066757600080fd5b506102ee610676366004612b04565b611463565b34801561068757600080fd5b506102ee610696366004612ac6565b61155b565b3480156106a757600080fd5b5060135460ff80821691620100008104821691640100000000909104165b6040805160ff9485168152928416602084015292169181019190915260600161028e565b3480156106f557600080fd5b50610339600b5481565b34801561070b57600080fd5b506102ee61071a366004612ac6565b61161d565b34801561072b57600080fd5b50600c54610310906001600160a01b031681565b34801561074b57600080fd5b5061033961075a366004612bc5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561079157600080fd5b506102ee6107a0366004612b82565b61169f565b3480156107b157600080fd5b506102ee6107c0366004612b04565b6116f3565b3480156107d157600080fd5b50600d54610310906001600160a01b031681565b3480156107f157600080fd5b5060135460ff610100820481169163010000008104821691600160281b909104166106c5565b60606003805461082690612bf3565b80601f016020809104026020016040519081016040528092919081815260200182805461085290612bf3565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b60006108b6338484611844565b50600192915050565b6005546001600160a01b031633146108f25760405162461bcd60e51b81526004016108e990612c2d565b60405180910390fd5b6006805460ff60a01b1916600160a01b17905560105460000361092b574360105542600f55600e805460ff60a01b1916600160a01b1790555b565b6005546001600160a01b031633146109575760405162461bcd60e51b81526004016108e990612c2d565b60095481036109bf5760405162461bcd60e51b815260206004820152602e60248201527f534c414b453a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b60648201526084016108e9565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b60006109ff848484611969565b610a518433610a4c85604051806060016040528060288152602001612f87602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611d8c565b611844565b5060019392505050565b6005546001600160a01b03163314610a855760405162461bcd60e51b81526004016108e990612c2d565b6008548103610af15760405162461bcd60e51b815260206004820152603260248201527f534c414b453a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b60648201526084016108e9565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6005546001600160a01b03163314610b4e5760405162461bcd60e51b81526004016108e990612c2d565b6006805460ff60a01b19169055565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108b6918590610a4c90866117de565b6005546001600160a01b03163314610bbd5760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503610c535760405162461bcd60e51b815260206004820152603760248201527f534c414b453a205468652073656c65637465642077616c6c657420697320616c60448201527f72656164792073657420746f207468652076616c75652000000000000000000060648201526084016108e9565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6005546001600160a01b03163314610cdd5760405162461bcd60e51b81526004016108e990612c2d565b476000610cf26005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610d3c576040519150601f19603f3d011682016040523d82523d6000602084013e610d41565b606091505b505090508015610d7f576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6005546001600160a01b03163314610dad5760405162461bcd60e51b81526004016108e990612c2d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e215760405162461bcd60e51b81526004016108e990612c2d565b600c546001600160a01b03848116911614610f14576001600160a01b038316610e9b5760405162461bcd60e51b815260206004820152602660248201527f534c414b453a20546865206c697175696469747957616c6c65742063616e6e6f60448201526507420626520360d41b60648201526084016108e9565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611009576001600160a01b038216610f8f5760405162461bcd60e51b815260206004820152602760248201527f534c414b453a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b60648201526084016108e9565b600d546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b038281169116146110f7576001600160a01b0381166110805760405162461bcd60e51b8152602060048201526024808201527f534c414b453a20546865206275794261636b57616c6c65742063616e6e6f74206044820152630626520360e41b60648201526084016108e9565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6005546001600160a01b031633146111265760405162461bcd60e51b81526004016108e990612c2d565b6111336011848484611dc6565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6005546001600160a01b031633146111ca5760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361120a5760405162461bcd60e51b81526004016108e990612c62565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610ca7565b6005546001600160a01b0316331461128c5760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036112cc5760405162461bcd60e51b81526004016108e990612c62565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ca7565b60606004805461082690612bf3565b60006108b63384610a4c85604051806060016040528060258152602001612fcf602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611d8c565b60006108b6338484611969565b6005546001600160a01b031633146113b95760405162461bcd60e51b81526004016108e990612c2d565b600b5481036114305760405162461bcd60e51b815260206004820152603a60248201527f534c414b453a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c756500000000000060648201526084016108e9565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6005546001600160a01b0316331461148d5760405162461bcd60e51b81526004016108e990612c2d565b6006546001600160a01b03908116908216036114fe5760405162461bcd60e51b815260206004820152602a60248201527f534c414b453a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b60648201526084016108e9565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115855760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036115c55760405162461bcd60e51b81526004016108e990612c62565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610ca7565b6005546001600160a01b031633146116475760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610ca7565b6005546001600160a01b031633146116c95760405162461bcd60e51b81526004016108e990612c2d565b6116d66011848484611f90565b6040516b62617365466565732d42757960a01b8152600c0161114d565b6005546001600160a01b0316331461171d5760405162461bcd60e51b81526004016108e990612c2d565b6001600160a01b0381166117825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e9565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000806117eb8385612cc9565b90508381101561183d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108e9565b9392505050565b6001600160a01b0383166118a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e9565b6001600160a01b0382166119075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661198f5760405162461bcd60e51b81526004016108e990612ce1565b6001600160a01b0382166119b55760405162461bcd60e51b81526004016108e990612d26565b806000036119c9576110f783836000612147565b6001600160a01b038084166000818152601c6020908152604080832054948716835280832054938352601a90915290205460ff928316929182169116158015611a2b57506001600160a01b0384166000908152601a602052604090205460ff16155b15611c0757600654600160a01b900460ff16611a975760405162461bcd60e51b815260206004820152602560248201527f534c414b453a2054726164696e672069732063757272656e746c792064697361604482015264313632b21760d91b60648201526084016108e9565b6001600160a01b03841660009081526018602052604090205460ff16158015611ad957506001600160a01b03851660009081526018602052604090205460ff16155b15611b4657600954831115611b465760405162461bcd60e51b815260206004820152602d60248201527f534c414b453a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b60648201526084016108e9565b6001600160a01b03841660009081526019602052604090205460ff16611c075760085483611b89866001600160a01b031660009081526020819052604090205490565b611b939190612cc9565b1115611c075760405162461bcd60e51b815260206004820152603a60248201527f534c414b453a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e00000000000060648201526084016108e9565b611c1382828787612250565b600b543060009081526020819052604090205460065491111590600160a01b900460ff168015611c405750805b8015611c4f5750600a5460ff16155b8015611c665750601d546301000000900460ff1615155b8015611c8a57506001600160a01b0385166000908152601c602052604090205460ff165b15611caf57600a805460ff19166001179055611ca461249d565b600a805460ff191690555b600a5460009060ff16158015611cce5750600654600160a01b900460ff165b6001600160a01b03881660009081526017602052604090205490915060ff1680611d1057506001600160a01b03861660009081526017602052604090205460ff165b15611d19575060005b808015611d315750601d546301000000900460ff1615155b15611d7857601d54600090606490611d53906301000000900460ff1688612d69565b611d5d9190612d9e565b9050611d698187612db2565b9550611d76883083612147565b505b611d83878787612147565b50505050505050565b60008184841115611db05760405162461bcd60e51b81526004016108e991906129d3565b506000611dbd8486612db2565b95945050505050565b600284015460ff8481166101009092041614611e5757604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028601548654919260ff61010090920482169291871691600080516020612faf83398151915291611e389160481b90612dc9565b60405180910390a460028401805461ff00191661010060ff8616021790555b600284015460ff83811663010000009092041614611ef157604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028601548654919260ff630100000090920482169291861691600080516020612faf83398151915291611ece9160481b90612dc9565b60405180910390a460028401805463ff0000001916630100000060ff8516021790555b600284015460ff828116600160281b9092041614611f8a576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028601548654919260ff600160281b90920482169291851691600080516020612faf83398151915291611f659160481b90612dc9565b60405180910390a460028401805465ff00000000001916600160281b60ff8416021790555b50505050565b600284015460ff84811691161461201157604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028601548654919260ff9182169291871691600080516020612faf83398151915291611ff79160481b90612dc9565b60405180910390a460028401805460ff191660ff85161790555b600284015460ff8381166201000090920416146120a657604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028601548654919260ff6201000090920482169291861691600080516020612faf833981519152916120859160481b90612dc9565b60405180910390a460028401805462ff000019166201000060ff8516021790555b600284015460ff8281166401000000009092041614611f8a576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028601548654919260ff64010000000090920482169291851691600080516020612faf8339815191529161211b9160481b90612dc9565b60405180910390a460028401805460ff83166401000000000264ff000000001990911617905550505050565b6001600160a01b03831661216d5760405162461bcd60e51b81526004016108e990612ce1565b6001600160a01b0382166121935760405162461bcd60e51b81526004016108e990612d26565b6121d081604051806060016040528060268152602001612f61602691396001600160a01b0386166000908152602081905260409020549190611d8c565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546121ff90826117de565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161195c565b601d805462ffffff1916905583156122a657601354601d8054640100000000830460ff9081166201000090810262ff00001991860483166101000261ffff19909416929095169190911791909117169190911790555b82156123535762278d00600f54426122be9190612db2565b1161230d57601654601d805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b909304166201000002919091179055612353565b601354601d805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b8215801561235f575083155b80156123a557506001600160a01b0382166000908152601b602052604090205460ff16806123a557506001600160a01b0381166000908152601b602052604090205460ff165b156123f057601354601d805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b601d5460ff62010000820481169161241091610100820481169116612de0565b61241a9190612de0565b601d805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517f37450b5aa77beb1eaf790fc3e8b1fb6582e8a18bd51394b4a74b86d02ac7b4009181900360800190a150505050565b30600090815260208190526040812054601d549091479160ff630100000082048116929160029184916124d1911687612d69565b6124db9190612d9e565b6124e59190612d9e565b905060006124f38286612db2565b90506124fe81612672565b600061250a8547612db2565b601d549091506000906125229060029060ff16612e05565b61252c9086612e27565b601d5460ff91821692506000916002918491612549911686612d69565b6125539190612d9e565b61255d9190612d9e565b601d54909150600090839061257a90610100900460ff1686612d69565b6125849190612d9e565b905060006125928284612cc9565b61259c9086612db2565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156125d7573d6000803e3d6000fd5b50600754600d546125f69184916001600160a01b0391821691166127cc565b861561264857612606878461291f565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601d805460ff90971663010000000263ff000000199097169690961790955550505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a7576126a7612e4a565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127249190612e60565b8160018151811061273757612737612e4a565b6001600160a01b03928316602091820292909201015260065461275d9130911684611844565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612796908590600090869030904290600401612ec1565b600060405180830381600087803b1580156127b057600080fd5b505af11580156127c4573d6000803e3d6000fd5b505050505050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285a9190612e60565b8160008151811061286d5761286d612e4a565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106128a1576128a1612e4a565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959086906128e790600090869088904290600401612efd565b6000604051808303818588803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050505050505050565b6006546129379030906001600160a01b031684611844565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156129a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129cc9190612f32565b5050505050565b600060208083528351808285015260005b81811015612a00578581018301518582016040015282016129e4565b81811115612a12576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612a3d57600080fd5b50565b60008060408385031215612a5357600080fd5b8235612a5e81612a28565b946020939093013593505050565b600060208284031215612a7e57600080fd5b5035919050565b600080600060608486031215612a9a57600080fd5b8335612aa581612a28565b92506020840135612ab581612a28565b929592945050506040919091013590565b60008060408385031215612ad957600080fd5b8235612ae481612a28565b915060208301358015158114612af957600080fd5b809150509250929050565b600060208284031215612b1657600080fd5b813561183d81612a28565b600080600060608486031215612b3657600080fd5b8335612b4181612a28565b92506020840135612b5181612a28565b91506040840135612b6181612a28565b809150509250925092565b803560ff81168114612b7d57600080fd5b919050565b600080600060608486031215612b9757600080fd5b612ba084612b6c565b9250612bae60208501612b6c565b9150612bbc60408501612b6c565b90509250925092565b60008060408385031215612bd857600080fd5b8235612be381612a28565b91506020830135612af981612a28565b600181811c90821680612c0757607f821691505b602082108103612c2757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f534c414b453a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612cdc57612cdc612cb3565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615612d8357612d83612cb3565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612dad57612dad612d88565b500490565b600082821015612dc457612dc4612cb3565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115612dfd57612dfd612cb3565b019392505050565b600060ff831680612e1857612e18612d88565b8060ff84160491505092915050565b600060ff821660ff841680821015612e4157612e41612cb3565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e7257600080fd5b815161183d81612a28565b600081518084526020808501945080840160005b83811015612eb65781516001600160a01b031687529582019590820190600101612e91565b509495945050505050565b85815284602082015260a060408201526000612ee060a0830186612e7d565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201526000612f166080830186612e7d565b6001600160a01b03949094166040830152506060015292915050565b600080600060608486031215612f4757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205148e2911fec81f099ca20ac18a720137328c5258aa749b99b34924b52f7190e64736f6c634300080f0033

Deployed Bytecode Sourcemap

8675:18118:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8944:28;;;;;;;;;;-1:-1:-1;8944:28:0;;;;-1:-1:-1;;;8944:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;8944:28:0;;;;;;;;5215:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6039:154::-;;;;;;;;;;-1:-1:-1;6039:154:0;;;;;:::i;:::-;;:::i;13338:273::-;;;;;;;;;;;;;:::i;:::-;;8720:30;;;;;;;;;;-1:-1:-1;8720:30:0;;;;-1:-1:-1;;;;;8720:30:0;;;;;;-1:-1:-1;;;;;1442:32:1;;;1424:51;;1412:2;1397:18;8720:30:0;1264:217:1;5500:99:0;;;;;;;;;;-1:-1:-1;5582:12:0;;5500:99;;;1632:25:1;;;1620:2;1605:18;5500:99:0;1486:177:1;9549:28:0;;;;;;;;;;-1:-1:-1;9549:28:0;;;;-1:-1:-1;;;;;9549:28:0;;;17623:269;;;;;;;;;;-1:-1:-1;17623:269:0;;;;;:::i;:::-;;:::i;6198:313::-;;;;;;;;;;-1:-1:-1;6198:313:0;;;;;:::i;:::-;;:::i;17898:275::-;;;;;;;;;;-1:-1:-1;17898:275:0;;;;;:::i;:::-;;:::i;5411:84::-;;;;;;;;;;-1:-1:-1;5411:84:0;;5488:2;2664:36:1;;2652:2;2637:18;5411:84:0;2522:184:1;13617:91:0;;;;;;;;;;;;;:::i;6516:203::-;;;;;;;;;;-1:-1:-1;6516:203:0;;;;;:::i;:::-;;:::i;15256:325::-;;;;;;;;;;-1:-1:-1;15256:325:0;;;;;:::i;:::-;;:::i;8757:38::-;;;;;;;;;;;;;;;18509:252;;;;;;;;;;;;;:::i;5604:118::-;;;;;;;;;;-1:-1:-1;5604:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;5699:18:0;5678:7;5699:18;;;;;;;;;;;;5604:118;4449:133;;;;;;;;;;;;;:::i;15587:1024::-;;;;;;;;;;-1:-1:-1;15587:1024:0;;;;;:::i;:::-;;:::i;16970:341::-;;;;;;;;;;-1:-1:-1;16970:341:0;;;;;:::i;:::-;;:::i;14912:338::-;;;;;;;;;;-1:-1:-1;14912:338:0;;;;;:::i;:::-;;:::i;14551:355::-;;;;;;;;;;-1:-1:-1;14551:355:0;;;;;:::i;:::-;;:::i;9065:64::-;;;;;;;;;;-1:-1:-1;9065:64:0;;;;-1:-1:-1;;;;;9065:64:0;;;9303:56;;;;;;;;;;;;;;;;4265:70;;;;;;;;;;-1:-1:-1;4324:6:0;;-1:-1:-1;;;;;4324:6:0;4265:70;;5311:95;;;;;;;;;;;;;:::i;6724:254::-;;;;;;;;;;-1:-1:-1;6724:254:0;;;;;:::i;:::-;;:::i;5727:160::-;;;;;;;;;;-1:-1:-1;5727:160:0;;;;;:::i;:::-;;:::i;9182:60::-;;;;;;;;;;;;;;;;18179:324;;;;;;;;;;-1:-1:-1;18179:324:0;;;;;:::i;:::-;;:::i;10583:58::-;;;;;;;;;;-1:-1:-1;10583:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17317:300;;;;;;;;;;-1:-1:-1;17317:300:0;;;;;:::i;:::-;;:::i;14244:301::-;;;;;;;;;;-1:-1:-1;14244:301:0;;;;;:::i;:::-;;:::i;18785:170::-;;;;;;;;;;-1:-1:-1;18874:23:0;;;;;;;18899:24;;;;;;18925:21;;;;;18785:170;;;;4626:4:1;4614:17;;;4596:36;;4668:17;;;4663:2;4648:18;;4641:45;4722:17;;4702:18;;;4695:45;;;;4584:2;4569:18;18785:170:0;4406:340:1;9397:68:0;;;;;;;;;;;;;;;;13714:202;;;;;;;;;;-1:-1:-1;13714:202:0;;;;;:::i;:::-;;:::i;9474:30::-;;;;;;;;;;-1:-1:-1;9474:30:0;;;;-1:-1:-1;;;;;9474:30:0;;;5892:142;;;;;;;;;;-1:-1:-1;5892:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;6002:18:0;;;5981:7;6002:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5892:142;16635:329;;;;;;;;;;-1:-1:-1;16635:329:0;;;;;:::i;:::-;;:::i;4587:223::-;;;;;;;;;;-1:-1:-1;4587:223:0;;;;;:::i;:::-;;:::i;9511:31::-;;;;;;;;;;-1:-1:-1;9511:31:0;;;;-1:-1:-1;;;;;9511:31:0;;;18961:174;;;;;;;;;;-1:-1:-1;19051:24:0;;;;;;;;;19077:25;;;;;;-1:-1:-1;;;19104:22:0;;;;18961:174;;5215:91;5269:13;5296:5;5289:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5215:91;:::o;6039:154::-;6122:4;6133:39;3731:10;6156:7;6165:6;6133:8;:39::i;:::-;-1:-1:-1;6184:4:0;6039:154;;;;:::o;13338:273::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;;;;;;;;;13395:16:::1;:23:::0;;-1:-1:-1;;;;13395:23:0::1;-1:-1:-1::0;;;13395:23:0::1;::::0;;13432:18:::1;::::0;13395:23;13432;13429:175:::1;;13493:12;13472:18;:33:::0;13544:15:::1;13520:21;:39:::0;13574:11:::1;:18:::0;;-1:-1:-1;;;;13574:18:0::1;-1:-1:-1::0;;;13574:18:0::1;::::0;;13429:175:::1;13338:273::o:0;17623:269::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;17724:11:::1;;17712:8;:23:::0;17704:82:::1;;;::::0;-1:-1:-1;;;17704:82:0;;6092:2:1;17704:82:0::1;::::0;::::1;6074:21:1::0;6131:2;6111:18;;;6104:30;6170:34;6150:18;;;6143:62;-1:-1:-1;;;6221:18:1;;;6214:44;6275:19;;17704:82:0::1;5890:410:1::0;17704:82:0::1;17839:11;::::0;17802:49:::1;::::0;17829:8;;17802:49:::1;::::0;;;::::1;17862:11;:22:::0;17623:269::o;6198:313::-;6317:4;6328:36;6338:6;6346:9;6357:6;6328:9;:36::i;:::-;6369:121;6378:6;3731:10;6400:89;6438:6;6400:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6400:19:0;;;;;;:11;:19;;;;;;;;3731:10;6400:33;;;;;;;;;;:37;:89::i;:::-;6369:8;:121::i;:::-;-1:-1:-1;6502:4:0;6198:313;;;;;:::o;17898:275::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;17994:15:::1;;17982:8;:27:::0;17974:90:::1;;;::::0;-1:-1:-1;;;17974:90:0;;6507:2:1;17974:90:0::1;::::0;::::1;6489:21:1::0;6546:2;6526:18;;;6519:30;6585:34;6565:18;;;6558:62;-1:-1:-1;;;6636:18:1;;;6629:48;6694:19;;17974:90:0::1;6305:414:1::0;17974:90:0::1;18112:15;::::0;18080:48:::1;::::0;18102:8;;18080:48:::1;::::0;;;::::1;18139:15;:26:::0;17898:275::o;13617:91::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;13676:16:::1;:24:::0;;-1:-1:-1;;;;13676:24:0::1;::::0;;13617:91::o;6516:203::-;3731:10;6604:4;6647:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6647:34:0;;;;;;;;;;6604:4;;6615:83;;6638:7;;6647:50;;6686:10;6647:38;:50::i;15256:325::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15358:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;15350:115:::1;;;::::0;-1:-1:-1;;;15350:115:0;;6926:2:1;15350:115:0::1;::::0;::::1;6908:21:1::0;6965:2;6945:18;;;6938:30;7004:34;6984:18;;;6977:62;7075:25;7055:18;;;7048:53;7118:19;;15350:115:0::1;6724:419:1::0;15350:115:0::1;-1:-1:-1::0;;;;;15470:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;15470:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15526:50;;154:41:1;;;15526:50:0::1;::::0;127:18:1;15526:50:0::1;;;;;;;;15256:325:::0;;:::o;18509:252::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;18584:21:::1;18567:14;18642:7;4324:6:::0;;-1:-1:-1;;;;;4324:6:0;;4265:70;18642:7:::1;-1:-1:-1::0;;;;;18634:21:0::1;18664:6;18634:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18616:59;;;18690:7;18686:68;;;18718:24;::::0;1632:25:1;;;18718:24:0::1;::::0;1620:2:1;1605:18;18718:24:0::1;;;;;;;18686:68;18556:205;;18509:252::o:0;4449:133::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;4534:6:::1;::::0;4513:40:::1;::::0;4550:1:::1;::::0;-1:-1:-1;;;;;4534:6:0::1;::::0;4513:40:::1;::::0;4550:1;;4513:40:::1;4558:6;:19:::0;;-1:-1:-1;;;;;;4558:19:0::1;::::0;;4449:133::o;15587:1024::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;15723:15:::1;::::0;-1:-1:-1;;;;;15723:37:0;;::::1;:15:::0;::::1;:37;15720:291;;-1:-1:-1::0;;;;;15785:32:0;::::1;15777:83;;;::::0;-1:-1:-1;;;15777:83:0;;7560:2:1;15777:83:0::1;::::0;::::1;7542:21:1::0;7599:2;7579:18;;;7572:30;7638:34;7618:18;;;7611:62;-1:-1:-1;;;7689:18:1;;;7682:36;7735:19;;15777:83:0::1;7358:402:1::0;15777:83:0::1;15932:15;::::0;15880:68:::1;::::0;-1:-1:-1;;;7967:30:1;;-1:-1:-1;;;;;15932:15:0;;::::1;::::0;15880:68;::::1;::::0;8022:2:1;8013:12;15880:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;15963:15;:36:::0;;-1:-1:-1;;;;;;15963:36:0::1;-1:-1:-1::0;;;;;15963:36:0;::::1;;::::0;;15720:291:::1;16024:16;::::0;-1:-1:-1;;;;;16024:39:0;;::::1;:16:::0;::::1;:39;16021:300;;-1:-1:-1::0;;;;;16088:33:0;::::1;16080:85;;;::::0;-1:-1:-1;;;16080:85:0;;8238:2:1;16080:85:0::1;::::0;::::1;8220:21:1::0;8277:2;8257:18;;;8250:30;8316:34;8296:18;;;8289:62;-1:-1:-1;;;8367:18:1;;;8360:37;8414:19;;16080:85:0::1;8036:403:1::0;16080:85:0::1;16239:16;::::0;16185:71:::1;::::0;-1:-1:-1;;;8646:31:1;;-1:-1:-1;;;;;16239:16:0;;::::1;::::0;16185:71;::::1;::::0;8702:2:1;8693:12;16185:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;16271:16;:38:::0;;-1:-1:-1;;;;;;16271:38:0::1;-1:-1:-1::0;;;;;16271:38:0;::::1;;::::0;;16021:300:::1;16334:13;::::0;-1:-1:-1;;;;;16334:33:0;;::::1;:13:::0;::::1;:33;16331:273;;-1:-1:-1::0;;;;;16392:30:0;::::1;16384:79;;;::::0;-1:-1:-1;;;16384:79:0;;8918:2:1;16384:79:0::1;::::0;::::1;8900:21:1::0;8957:2;8937:18;;;8930:30;8996:34;8976:18;;;8969:62;-1:-1:-1;;;9047:18:1;;;9040:34;9091:19;;16384:79:0::1;8716:400:1::0;16384:79:0::1;16531:13;::::0;16483:62:::1;::::0;-1:-1:-1;;;9323:28:1;;-1:-1:-1;;;;;16531:13:0;;::::1;::::0;16483:62;::::1;::::0;9376:2:1;9367:12;16483:62:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;16560:13;:32:::0;;-1:-1:-1;;;;;;16560:32:0::1;-1:-1:-1::0;;;;;16560:32:0;::::1;;::::0;;16331:273:::1;15587:1024:::0;;;:::o;16970:341::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;17107:92:::1;17131:5;17138:19;17159:20;17181:17;17107:23;:92::i;:::-;17215:88;::::0;-1:-1:-1;;;9592:28:1;;9645:2;9636:12;17215:88:0::1;;::::0;;;;;::::1;::::0;;4626:4:1;4614:17;;;4596:36;;4668:17;;;4663:2;4648:18;;4641:45;4722:17;;4702:18;;;4695:45;17215:88:0;;;;::::1;::::0;;;;;4584:2:1;17215:88:0;;::::1;16970:341:::0;;;:::o;14912:338::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15017:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;15009:112:::1;;;;-1:-1:-1::0;;;15009:112:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15132:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;15132:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15197:45;;154:41:1;;;15197:45:0::1;::::0;127:18:1;15197:45:0::1;14:187:1::0;14551:355:0;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14661:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;14653:117:::1;;;;-1:-1:-1::0;;;14653:117:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14781:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;14781:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14851:47;;154:41:1;;;14851:47:0::1;::::0;127:18:1;14851:47:0::1;14:187:1::0;5311:95:0;5367:13;5394:7;5387:14;;;;;:::i;6724:254::-;6817:4;6828:129;3731:10;6851:7;6860:96;6899:15;6860:96;;;;;;;;;;;;;;;;;3731:10;6860:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6860:34:0;;;;;;;;;;;;:38;:96::i;5727:160::-;5813:4;5824:42;3731:10;5848:9;5859:6;5824:9;:42::i;18179:324::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;18283:23:::1;;18271:8;:35:::0;18263:106:::1;;;::::0;-1:-1:-1;;;18263:106:0;;10279:2:1;18263:106:0::1;::::0;::::1;10261:21:1::0;10318:2;10298:18;;;10291:30;10357:34;10337:18;;;10330:62;10428:28;10408:18;;;10401:56;10474:19;;18263:106:0::1;10077:422:1::0;18263:106:0::1;18426:23;::::0;18385:65:::1;::::0;18416:8;;18385:65:::1;::::0;;;::::1;18461:23;:34:::0;18179:324::o;17317:300::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;17423:15:::1;::::0;-1:-1:-1;;;;;17423:15:0;;::::1;17401:38:::0;;::::1;::::0;17393:93:::1;;;::::0;-1:-1:-1;;;17393:93:0;;10706:2:1;17393:93:0::1;::::0;::::1;10688:21:1::0;10745:2;10725:18;;;10718:30;10784:34;10764:18;;;10757:62;-1:-1:-1;;;10835:18:1;;;10828:40;10885:19;;17393:93:0::1;10504:406:1::0;17393:93:0::1;17544:15;::::0;17502:59:::1;::::0;-1:-1:-1;;;;;17544:15:0;;::::1;::::0;17502:59;::::1;::::0;::::1;::::0;17544:15:::1;::::0;17502:59:::1;17572:15;:37:::0;;-1:-1:-1;;;;;;17572:37:0::1;-1:-1:-1::0;;;;;17572:37:0;;;::::1;::::0;;;::::1;::::0;;17317:300::o;14244:301::-;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14339:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;14331:101:::1;;;;-1:-1:-1::0;;;14331:101:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14443:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;14443:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14497:40;;154:41:1;;;14497:40:0::1;::::0;127:18:1;14497:40:0::1;14:187:1::0;13714:202:0;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13803:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;13803:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;13861:50;;154:41:1;;;13861:50:0::1;::::0;127:18:1;13861:50:0::1;14:187:1::0;16635:329:0;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;16768:88:::1;16791:5;16798:18;16818:19;16839:16;16768:22;:88::i;:::-;16872:84;::::0;-1:-1:-1;;;11117:27:1;;11169:2;11160:12;16872:84:0::1;10915:263:1::0;4587:223:0;4374:6;;-1:-1:-1;;;;;4374:6:0;3731:10;4374:22;4366:67;;;;-1:-1:-1;;;4366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4670:22:0;::::1;4662:73;;;::::0;-1:-1:-1;;;4662:73:0;;11385:2:1;4662:73:0::1;::::0;::::1;11367:21:1::0;11424:2;11404:18;;;11397:30;11463:34;11443:18;;;11436:62;-1:-1:-1;;;11514:18:1;;;11507:36;11560:19;;4662:73:0::1;11183:402:1::0;4662:73:0::1;4766:6;::::0;4745:38:::1;::::0;-1:-1:-1;;;;;4745:38:0;;::::1;::::0;4766:6:::1;::::0;4745:38:::1;::::0;4766:6:::1;::::0;4745:38:::1;4788:6;:17:::0;;-1:-1:-1;;;;;;4788:17:0::1;-1:-1:-1::0;;;;;4788:17:0;;;::::1;::::0;;;::::1;::::0;;4587:223::o;2070:160::-;2128:7;;2154:5;2158:1;2154;:5;:::i;:::-;2142:17;;2177:1;2172;:6;;2164:46;;;;-1:-1:-1;;;2164:46:0;;12057:2:1;2164:46:0;;;12039:21:1;12096:2;12076:18;;;12069:30;12135:29;12115:18;;;12108:57;12182:18;;2164:46:0;11855:351:1;2164:46:0;2224:1;2070:160;-1:-1:-1;;;2070:160:0:o;8229:330::-;-1:-1:-1;;;;;8338:19:0;;8330:68;;;;-1:-1:-1;;;8330:68:0;;12413:2:1;8330:68:0;;;12395:21:1;12452:2;12432:18;;;12425:30;12491:34;12471:18;;;12464:62;-1:-1:-1;;;12542:18:1;;;12535:34;12586:19;;8330:68:0;12211:400:1;8330:68:0;-1:-1:-1;;;;;8411:21:0;;8403:68;;;;-1:-1:-1;;;8403:68:0;;12818:2:1;8403:68:0;;;12800:21:1;12857:2;12837:18;;;12830:30;12896:34;12876:18;;;12869:62;-1:-1:-1;;;12947:18:1;;;12940:32;12989:19;;8403:68:0;12616:398:1;8403:68:0;-1:-1:-1;;;;;8476:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8522:32;;1632:25:1;;;8522:32:0;;1605:18:1;8522:32:0;;;;;;;;8229:330;;;:::o;19156:1950::-;-1:-1:-1;;;;;19292:18:0;;19284:68;;;;-1:-1:-1;;;19284:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19371:16:0;;19363:64;;;;-1:-1:-1;;;19363:64:0;;;;;;;:::i;:::-;19443:6;19453:1;19443:11;19440:92;;19471:28;19487:4;19493:2;19497:1;19471:15;:28::i;19440:92::-;-1:-1:-1;;;;;19563:31:0;;;19544:16;19563:31;;;:25;:31;;;;;;;;;19623:29;;;;;;;;;19669:35;;;:29;:35;;;;;;19563:31;;;;;19623:29;;;;19669:35;19668:36;:74;;;;-1:-1:-1;;;;;;19709:33:0;;;;;;:29;:33;;;;;;;;19708:34;19668:74;19665:593;;;19767:16;;-1:-1:-1;;;19767:16:0;;;;19759:66;;;;-1:-1:-1;;;19759:66:0;;14031:2:1;19759:66:0;;;14013:21:1;14070:2;14050:18;;;14043:30;14109:34;14089:18;;;14082:62;-1:-1:-1;;;14160:18:1;;;14153:35;14205:19;;19759:66:0;13829:401:1;19759:66:0;-1:-1:-1;;;;;19845:38:0;;;;;;:34;:38;;;;;;;;19844:39;:84;;;;-1:-1:-1;;;;;;19888:40:0;;;;;;:34;:40;;;;;;;;19887:41;19844:84;19840:204;;;19967:11;;19957:6;:21;;19949:79;;;;-1:-1:-1;;;19949:79:0;;14437:2:1;19949:79:0;;;14419:21:1;14476:2;14456:18;;;14449:30;14515:34;14495:18;;;14488:62;-1:-1:-1;;;14566:18:1;;;14559:43;14619:19;;19949:79:0;14235:409:1;19949:79:0;-1:-1:-1;;;;;20063:33:0;;;;;;:29;:33;;;;;;;;20058:189;;20153:15;;20142:6;20126:13;20136:2;-1:-1:-1;;;;;5699:18:0;5678:7;5699:18;;;;;;;;;;;;5604:118;20126:13;:22;;;;:::i;:::-;20125:43;;20117:114;;;;-1:-1:-1;;;20117:114:0;;14851:2:1;20117:114:0;;;14833:21:1;14890:2;14870:18;;;14863:30;14929:34;14909:18;;;14902:62;15000:28;14980:18;;;14973:56;15046:19;;20117:114:0;14649:422:1;20117:114:0;20270:48;20283:11;20296:10;20308:4;20315:2;20270:12;:48::i;:::-;20372:23;;20362:4;20329:12;5699:18;;;;;;;;;;;20426:16;;-1:-1:-1;;20344:51:0;;-1:-1:-1;;;20426:16:0;;;;:40;;;;;20459:7;20426:40;:67;;;;-1:-1:-1;20484:9:0;;;;20483:10;20426:67;:97;;;;-1:-1:-1;20510:9:0;;;;;;;:13;;20426:97;:143;;;;-1:-1:-1;;;;;;20540:29:0;;;;;;:25;:29;;;;;;;;20426:143;20408:280;;;20596:9;:16;;-1:-1:-1;;20596:16:0;20608:4;20596:16;;;20627:17;:15;:17::i;:::-;20659:9;:17;;-1:-1:-1;;20659:17:0;;;20408:280;20716:9;;20700:12;;20716:9;;20715:10;:30;;;;-1:-1:-1;20729:16:0;;-1:-1:-1;;;20729:16:0;;;;20715:30;-1:-1:-1;;;;;20761:24:0;;;;;;:18;:24;;;;;;20700:45;;-1:-1:-1;20761:24:0;;;:50;;-1:-1:-1;;;;;;20789:22:0;;;;;;:18;:22;;;;;;;;20761:50;20758:96;;;-1:-1:-1;20837:5:0;20758:96;20870:7;:24;;;;-1:-1:-1;20881:9:0;;;;;;;:13;;20870:24;20866:187;;;20934:9;;20911:11;;20946:3;;20925:18;;20934:9;;;;;20925:6;:18;:::i;:::-;:24;;;;:::i;:::-;20911:38;-1:-1:-1;20973:12:0;20911:38;20973:6;:12;:::i;:::-;20964:21;;21000:41;21016:4;21030;21037:3;21000:15;:41::i;:::-;20896:157;20866:187;21065:33;21081:4;21087:2;21091:6;21065:15;:33::i;:::-;19273:1833;;;;19156:1950;;;:::o;2367:171::-;2453:7;2483:12;2475:6;;;;2467:29;;;;-1:-1:-1;;;2467:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2501:9:0;2513:5;2517:1;2513;:5;:::i;:::-;2501:17;2367:171;-1:-1:-1;;;;;2367:171:0:o;22343:956::-;22545:22;;;;:45;;;;:22;;;;;:45;22541:246;;22612:104;;-1:-1:-1;;;15838:33:1;;15896:2;15887:12;22612:104:0;;;;;;;;22655:22;;;;22701:14;;22612:104;;22655:22;;;;;;;;22612:104;;;;-1:-1:-1;;;;;;;;;;;22612:104:0;;;22701:14;;;22612:104;:::i;:::-;;;;;;;;22731:22;;;:44;;-1:-1:-1;;22731:44:0;;;;;;;;;22541:246;22801:23;;;;:47;;;;:23;;;;;:47;22797:253;;22870:107;;-1:-1:-1;;;16326:34:1;;16385:2;16376:12;22870:107:0;;;;;;;;22914:23;;;;22962:14;;22870:107;;22914:23;;;;;;;;22870:107;;;;-1:-1:-1;;;;;;;;;;;22870:107:0;;;22962:14;;;22870:107;:::i;:::-;;;;;;;;22992:23;;;:46;;-1:-1:-1;;22992:46:0;;;;;;;;;22797:253;23064:20;;;;:41;;;;-1:-1:-1;;;23064:20:0;;;;:41;23060:232;;23127:98;;-1:-1:-1;;;16601:31:1;;16657:2;16648:12;23127:98:0;;;;;;;;23168:20;;;;23210:14;;23127:98;;23168:20;-1:-1:-1;;;23168:20:0;;;;;;23127:98;;;;-1:-1:-1;;;;;;;;;;;23127:98:0;;;23210:14;;;23127:98;:::i;:::-;;;;;;;;23240:20;;;:40;;-1:-1:-1;;23240:40:0;-1:-1:-1;;;23240:40:0;;;;;;;23060:232;22343:956;;;;:::o;23305:931::-;23503:21;;;;:43;;;;:21;;:43;23499:239;;23568:101;;-1:-1:-1;;;16873:32:1;;16930:2;16921:12;23568:101:0;;;;;;;;23610:21;;;;23654:14;;23568:101;;23610:21;;;;;23568:101;;;;-1:-1:-1;;;;;;;;;;;23568:101:0;;;23654:14;;;23568:101;:::i;:::-;;;;;;;;23684:21;;;:42;;-1:-1:-1;;23684:42:0;;;;;;;23499:239;23752:22;;;;:45;;;;:22;;;;;:45;23748:246;;23819:104;;-1:-1:-1;;;17146:33:1;;17204:2;17195:12;23819:104:0;;;;;;;;23862:22;;;;23908:14;;23819:104;;23862:22;;;;;;;;23819:104;;;;-1:-1:-1;;;;;;;;;;;23819:104:0;;;23908:14;;;23819:104;:::i;:::-;;;;;;;;23938:22;;;:44;;-1:-1:-1;;23938:44:0;;;;;;;;;23748:246;24008:19;;;;:39;;;;:19;;;;;:39;24004:225;;24069:95;;-1:-1:-1;;;17420:30:1;;17475:2;17466:12;24069:95:0;;;;;;;;24109:19;;;;24149:14;;24069:95;;24109:19;;;;;;;;24069:95;;;;-1:-1:-1;;;;;;;;;;;24069:95:0;;;24149:14;;;24069:95;:::i;:::-;;;;;;;;24179:19;;;:38;;;;;;;-1:-1:-1;;24179:38:0;;;;;;23305:931;;;;:::o;6983:509::-;-1:-1:-1;;;;;7096:20:0;;7088:70;;;;-1:-1:-1;;;7088:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7171:23:0;;7163:71;;;;-1:-1:-1;;;7163:71:0;;;;;;;:::i;:::-;7311;7333:6;7311:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7311:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7291:17:0;;;:9;:17;;;;;;;;;;;:91;;;;7410:20;;;;;;;:32;;7435:6;7410:24;:32::i;:::-;-1:-1:-1;;;;;7387:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;7452:35;1632:25:1;;;7387:20:0;;7452:35;;;;;;1605:18:1;7452:35:0;1486:177:1;21112:1225:0;21214:13;:17;;-1:-1:-1;;21271:15:0;;;21299:191;;;;21347:23;;21331:13;:39;;21455:21;;;21347:23;21455:21;;;21402:24;21441:35;;;-1:-1:-1;;21402:24:0;;;;;21347:23;21385:41;-1:-1:-1;;21385:41:0;;;21347:23;;;;21385:41;;;;;;;;21441:35;;;;;;;21299:191;21504:10;21500:400;;;21571:8;21545:21;;21527:15;:39;;;;:::i;:::-;21526:53;21522:367;;21604:26;;21588:13;:42;;21604:26;;;;;;;;-1:-1:-1;;21637:44:0;;;;;;;21654:27;;;;;21637:44;;;;;-1:-1:-1;;21688:38:0;-1:-1:-1;;;21702:24:0;;;;21688:38;;;;;;;;21522:367;;;21766:24;;21750:13;:40;;21766:24;;;;;;;;-1:-1:-1;;21797:42:0;;;;;;;21814:25;;;;;21797:42;;;;;-1:-1:-1;;21846:36:0;-1:-1:-1;;;21860:22:0;;;;21846:36;;;;;;;;21522:367;21915:10;21914:11;:27;;;;;21930:11;21929:12;21914:27;:105;;;;-1:-1:-1;;;;;;21946:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;21985:33:0;;;;;;:29;:33;;;;;;;;21946:72;21910:271;;;22043:24;;22027:13;:40;;22043:24;;;;;;;;-1:-1:-1;;22082:42:0;;;;;;;22099:25;;;;;22082:42;;;;;-1:-1:-1;;22139:36:0;-1:-1:-1;;;22153:22:0;;;;22139:36;;;;;;;;21910:271;22236:11;;;;;;;;;22203:30;;22236:11;22219:14;;;;;22203:13;:30;:::i;:::-;:44;;;;:::i;:::-;22191:9;:56;;;;;;;;;;-1:-1:-1;;22191:56:0;;;;;;;;22263:66;;;22275:13;;;;;;;;;;17915:36:1;;22191:56:0;22290:14;;;;17982:2:1;17967:18;;17960:45;22306:11:0;;;;;18021:18:1;;;18014:45;22319:9:0;;;;;18090:2:1;18075:18;;18068:45;22263:66:0;;;;;;;17902:3:1;22263:66:0;;;21112:1225;;;;:::o;24242:1228::-;24332:4;24288:23;5699:18;;;;;;;;;;;24432:9;;5699:18;;24377:21;;24432:9;;;;;;;24288:23;24531:1;;24432:9;;24480:31;;24498:13;5699:18;24480:31;:::i;:::-;:48;;;;:::i;:::-;:52;;;;:::i;:::-;24454:78;-1:-1:-1;24543:20:0;24566:33;24454:78;24566:15;:33;:::i;:::-;24543:56;;24612:31;24630:12;24612:17;:31::i;:::-;24656:27;24686:41;24710:17;24686:21;:41;:::i;:::-;24778:13;;24656:71;;-1:-1:-1;24738:19:0;;24778:17;;24794:1;;24778:13;;:17;:::i;:::-;24760:36;;:14;:36;:::i;:::-;24858:13;;24738:58;;;;;-1:-1:-1;24807:26:0;;24888:1;;24738:58;;24836:35;;24858:13;24836:19;:35;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;24952:14;;24807:82;;-1:-1:-1;24900:27:0;;24969:11;;24930:36;;24952:14;;;;;24930:19;:36;:::i;:::-;:50;;;;:::i;:::-;24900:80;-1:-1:-1;24991:24:0;25041:40;24900:80;25041:18;:40;:::i;:::-;25018:64;;:19;:64;:::i;:::-;25103:13;;25095:49;;24991:91;;-1:-1:-1;;;;;;25103:13:0;;25095:49;;;;;24991:91;;25103:13;25095:49;25103:13;25095:49;24991:91;25103:13;25095:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25201:4:0;;25207:16;;25157:67;;25180:19;;-1:-1:-1;;;;;25201:4:0;;;;25207:16;25157:22;:67::i;:::-;25241:19;;25237:187;;25277:50;25291:15;25308:18;25277:13;:50::i;:::-;25347:65;;;18696:25:1;;;18752:2;18737:18;;18730:34;;;18780:18;;;18773:34;;;25347:65:0;;18684:2:1;18669:18;25347:65:0;;;;;;;25237:187;-1:-1:-1;;25436:9:0;:26;;;;;;;;-1:-1:-1;;25436:26:0;;;;;;;;;;-1:-1:-1;;;;;;;24242:1228:0:o;25861:500::-;25952:16;;;25966:1;25952:16;;;;;;;;25928:21;;25952:16;;;;;;;;;;-1:-1:-1;25952:16:0;25928:40;;25997:4;25979;25984:1;25979:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25979:23:0;;;:7;;;;;;;;;;:23;;;;26023:15;;:22;;;-1:-1:-1;;;26023:22:0;;;;:15;;;;;:20;;:22;;;;;25979:7;;26023:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26013:4;26018:1;26013:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26013:32:0;;;:7;;;;;;;;;:32;26088:15;;26056:62;;26073:4;;26088:15;26106:11;26056:8;:62::i;:::-;26129:15;;:224;;-1:-1:-1;;;26129:224:0;;-1:-1:-1;;;;;26129:15:0;;;;:66;;:224;;26210:11;;26129:15;;26280:4;;26307;;26327:15;;26129:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25917:444;25861:500;:::o;25476:379::-;25601:16;;;25615:1;25601:16;;;;;;;;25577:21;;25601:16;;;;;;;;-1:-1:-1;;25632:15:0;;:22;;;-1:-1:-1;;;25632:22:0;;;;25577:40;;-1:-1:-1;;;;;;25632:15:0;;;;:20;;-1:-1:-1;25632:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25622:4;25627:1;25622:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;25622:32:0;;;-1:-1:-1;;;;;25622:32:0;;;;;25669:5;25659:4;25664:1;25659:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25659:15:0;;;:7;;;;;;;;;:15;25679;;:168;;-1:-1:-1;;;25679:168:0;;:15;;;:66;;25754:9;;25679:168;;:15;;25805:4;;25815:6;;25827:15;;25679:168;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25566:289;25476:379;;;:::o;26367:423::-;26481:15;;26449:62;;26466:4;;-1:-1:-1;;;;;26481:15:0;26499:11;26449:8;:62::i;:::-;26522:15;;26726;;26522:260;;-1:-1:-1;;;26522:260:0;;26594:4;26522:260;;;21247:34:1;21297:18;;;21290:34;;;26522:15:0;21340:18:1;;;21333:34;;;21383:18;;;21376:34;-1:-1:-1;;;;;26726:15:0;;;21426:19:1;;;21419:44;26756:15:0;21479:19:1;;;21472:35;26522:15:0;;;:31;;26561:9;;21181:19:1;;26522:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26367:423;;:::o;206:597: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;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;863:70;808:131;:::o;944:315::-;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1876:180::-;1935:6;1988:2;1976:9;1967:7;1963:23;1959:32;1956:52;;;2004:1;2001;1994:12;1956:52;-1:-1:-1;2027:23:1;;1876:180;-1:-1:-1;1876:180:1:o;2061:456::-;2138:6;2146;2154;2207:2;2195:9;2186:7;2182:23;2178:32;2175:52;;;2223:1;2220;2213:12;2175:52;2262:9;2249:23;2281:31;2306:5;2281:31;:::i;:::-;2331:5;-1:-1:-1;2388:2:1;2373:18;;2360:32;2401:33;2360:32;2401:33;:::i;:::-;2061:456;;2453:7;;-1:-1:-1;;;2507:2:1;2492:18;;;;2479:32;;2061:456::o;2711:416::-;2776:6;2784;2837:2;2825:9;2816:7;2812:23;2808:32;2805:52;;;2853:1;2850;2843:12;2805:52;2892:9;2879:23;2911:31;2936:5;2911:31;:::i;:::-;2961:5;-1:-1:-1;3018:2:1;3003:18;;2990:32;3060:15;;3053:23;3041:36;;3031:64;;3091:1;3088;3081:12;3031:64;3114:7;3104:17;;;2711:416;;;;;:::o;3132:247::-;3191:6;3244:2;3232:9;3223:7;3219:23;3215:32;3212:52;;;3260:1;3257;3250:12;3212:52;3299:9;3286:23;3318:31;3343:5;3318:31;:::i;3384:529::-;3461:6;3469;3477;3530:2;3518:9;3509:7;3505:23;3501:32;3498:52;;;3546:1;3543;3536:12;3498:52;3585:9;3572:23;3604:31;3629:5;3604:31;:::i;:::-;3654:5;-1:-1:-1;3711:2:1;3696:18;;3683:32;3724:33;3683:32;3724:33;:::i;:::-;3776:7;-1:-1:-1;3835:2:1;3820:18;;3807:32;3848:33;3807:32;3848:33;:::i;:::-;3900:7;3890:17;;;3384:529;;;;;:::o;3918:156::-;3984:20;;4044:4;4033:16;;4023:27;;4013:55;;4064:1;4061;4054:12;4013:55;3918:156;;;:::o;4079:322::-;4150:6;4158;4166;4219:2;4207:9;4198:7;4194:23;4190:32;4187:52;;;4235:1;4232;4225:12;4187:52;4258:27;4275:9;4258:27;:::i;:::-;4248:37;;4304:36;4336:2;4325:9;4321:18;4304:36;:::i;:::-;4294:46;;4359:36;4391:2;4380:9;4376:18;4359:36;:::i;:::-;4349:46;;4079:322;;;;;:::o;4751:388::-;4819:6;4827;4880:2;4868:9;4859:7;4855:23;4851:32;4848:52;;;4896:1;4893;4886:12;4848:52;4935:9;4922:23;4954:31;4979:5;4954:31;:::i;:::-;5004:5;-1:-1:-1;5061:2:1;5046:18;;5033:32;5074:33;5033:32;5074:33;:::i;5144:380::-;5223:1;5219:12;;;;5266;;;5287:61;;5341:4;5333:6;5329:17;5319:27;;5287:61;5394:2;5386:6;5383:14;5363:18;5360:38;5357:161;;5440:10;5435:3;5431:20;5428:1;5421:31;5475:4;5472:1;5465:15;5503:4;5500:1;5493:15;5357:161;;5144:380;;;:::o;5529:356::-;5731:2;5713:21;;;5750:18;;;5743:30;5809:34;5804:2;5789:18;;5782:62;5876:2;5861:18;;5529:356::o;9659:413::-;9861:2;9843:21;;;9900:2;9880:18;;;9873:30;9939:34;9934:2;9919:18;;9912:62;-1:-1:-1;;;10005:2:1;9990:18;;9983:47;10062:3;10047:19;;9659:413::o;11590:127::-;11651:10;11646:3;11642:20;11639:1;11632:31;11682:4;11679:1;11672:15;11706:4;11703:1;11696:15;11722:128;11762:3;11793:1;11789:6;11786:1;11783:13;11780:39;;;11799:18;;:::i;:::-;-1:-1:-1;11835:9:1;;11722:128::o;13019:401::-;13221:2;13203:21;;;13260:2;13240:18;;;13233:30;13299:34;13294:2;13279:18;;13272:62;-1:-1:-1;;;13365:2:1;13350:18;;13343:35;13410:3;13395:19;;13019:401::o;13425:399::-;13627:2;13609:21;;;13666:2;13646:18;;;13639:30;13705:34;13700:2;13685:18;;13678:62;-1:-1:-1;;;13771:2:1;13756:18;;13749:33;13814:3;13799:19;;13425:399::o;15076:168::-;15116:7;15182:1;15178;15174:6;15170:14;15167:1;15164:21;15159:1;15152:9;15145:17;15141:45;15138:71;;;15189:18;;:::i;:::-;-1:-1:-1;15229:9:1;;15076:168::o;15249:127::-;15310:10;15305:3;15301:20;15298:1;15291:31;15341:4;15338:1;15331:15;15365:4;15362:1;15355:15;15381:120;15421:1;15447;15437:35;;15452:18;;:::i;:::-;-1:-1:-1;15486:9:1;;15381:120::o;15506:125::-;15546:4;15574:1;15571;15568:8;15565:34;;;15579:18;;:::i;:::-;-1:-1:-1;15616:9:1;;15506:125::o;15910:209::-;-1:-1:-1;;16074:38:1;;;;16056:57;;16044:2;16029:18;;15910:209::o;17489:204::-;17527:3;17563:4;17560:1;17556:12;17595:4;17592:1;17588:12;17630:3;17624:4;17620:14;17615:3;17612:23;17609:49;;;17638:18;;:::i;:::-;17674:13;;17489:204;-1:-1:-1;;;17489:204:1:o;18124:165::-;18162:1;18196:4;18193:1;18189:12;18220:3;18210:37;;18227:18;;:::i;:::-;18279:3;18272:4;18269:1;18265:12;18261:22;18256:27;;;18124:165;;;;:::o;18294:195::-;18332:4;18369;18366:1;18362:12;18401:4;18398:1;18394:12;18426:3;18421;18418:12;18415:38;;;18433:18;;:::i;:::-;18470:13;;;18294:195;-1:-1:-1;;;18294:195:1:o;18950:127::-;19011:10;19006:3;19002:20;18999:1;18992:31;19042:4;19039:1;19032:15;19066:4;19063:1;19056:15;19082:251;19152:6;19205:2;19193:9;19184:7;19180:23;19176:32;19173:52;;;19221:1;19218;19211:12;19173:52;19253:9;19247:16;19272:31;19297:5;19272:31;:::i;19338:461::-;19391:3;19429:5;19423:12;19456:6;19451:3;19444:19;19482:4;19511:2;19506:3;19502:12;19495:19;;19548:2;19541:5;19537:14;19569:1;19579:195;19593:6;19590:1;19587:13;19579:195;;;19658:13;;-1:-1:-1;;;;;19654:39:1;19642:52;;19714:12;;;;19749:15;;;;19690:1;19608:9;19579:195;;;-1:-1:-1;19790:3:1;;19338:461;-1:-1:-1;;;;;19338:461:1:o;19804:582::-;20103:6;20092:9;20085:25;20146:6;20141:2;20130:9;20126:18;20119:34;20189:3;20184:2;20173:9;20169:18;20162:31;20066:4;20210:57;20262:3;20251:9;20247:19;20239:6;20210:57;:::i;:::-;-1:-1:-1;;;;;20303:32:1;;;;20298:2;20283:18;;20276:60;-1:-1:-1;20367:3:1;20352:19;20345:35;20202:65;19804:582;-1:-1:-1;;;19804:582:1:o;20391:510::-;20662:6;20651:9;20644:25;20705:3;20700:2;20689:9;20685:18;20678:31;20625:4;20726:57;20778:3;20767:9;20763:19;20755:6;20726:57;:::i;:::-;-1:-1:-1;;;;;20819:32:1;;;;20814:2;20799:18;;20792:60;-1:-1:-1;20883:2:1;20868:18;20861:34;20718:65;20391:510;-1:-1:-1;;20391:510:1:o;21518:306::-;21606:6;21614;21622;21675:2;21663:9;21654:7;21650:23;21646:32;21643:52;;;21691:1;21688;21681:12;21643:52;21720:9;21714:16;21704:26;;21770:2;21759:9;21755:18;21749:25;21739:35;;21814:2;21803:9;21799:18;21793:25;21783:35;;21518:306;;;;;:::o

Swarm Source

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