ETH Price: $3,392.49 (+1.73%)

Token

Grow Crop Corp (GCC)
 

Overview

Max Total Supply

100,000,000 GCC

Holders

127

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: GCC 6
Balance
12,830,848.941959571436021407 GCC

Value
$0.00
0x0d7e8623a2dcb50a4f24a1dd11bee8394065e204
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
GrowCropCorp

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-07
*/

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

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

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

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

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

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

interface DividendPayingTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);

    function distributeDividends() external payable;

    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);
}

interface DividendPayingTokenOptionalInterface {
    function withdrawableDividendOf(address _owner) external view returns (uint256);

    function withdrawnDividendOf(address _owner) external view returns (uint256);

    function accumulativeDividendOf(address _owner) external view returns (uint256);
}

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint256) values;
        mapping(address => uint256) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint256) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key) public view returns (int256) {
        if (!map.inserted[key]) {
            return -1;
        }
        return int256(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint256 index) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint256) {
        return map.keys.length;
    }

    function set(
        Map storage map,
        address key,
        uint256 val
    ) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint256 index = map.indexOf[key];
        uint256 lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

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 DividendPayingToken is
    ERC20,
    Ownable,
    DividendPayingTokenInterface,
    DividendPayingTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant magnitude = 2**128;
    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividendsDistributed;
    address public rewardToken;
    IRouter public uniswapV2Router;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {}

    receive() external payable {
        distributeDividends();
    }

    function distributeDividends() public payable override onlyOwner {
        require(totalSupply() > 0);
        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);
            totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
        }
    }

    function withdrawDividend() public virtual override onlyOwner {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            (bool success,) = user.call{value: _withdrawableDividend, gas: 3000}("");
            if(!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }
    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view override returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view override returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view override returns (uint256) {
        return
            magnifiedDividendPerShare
                .mul(balanceOf(_owner))
                .toInt256Safe()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256Safe() / magnitude;
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual override {
        require(false);
        int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account].sub(
            (magnifiedDividendPerShare.mul(value)).toInt256Safe()
        );
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account].add(
            (magnifiedDividendPerShare.mul(value)).toInt256Safe()
        );
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }
}

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

    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Grow Crop Corp";
    string private constant _symbol = "GCC";

    GrowCropCorpDividendTracker public dividendTracker;

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

    bool public isTradingEnabled;

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

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

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

    address public liquidityWallet;
    address public operationsWallet;
    address public buyBackWallet;
    address public treasuryWallet;
    address public porkchopWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 operationsFeeOnBuy;
        uint8 operationsFeeOnSell;
        uint8 buyBackFeeOnBuy;
        uint8 buyBackFeeOnSell;
        uint8 treasuryFeeOnBuy;
        uint8 treasuryFeeOnSell;
        uint8 porkchopFeeOnBuy;
        uint8 porkchopFeeOnSell;
        uint8 holdersFeeOnBuy;
        uint8 holdersFeeOnSell;
    }

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

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

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

    uint8 private _liquidityFee;
    uint8 private _operationsFee;
    uint8 private _buyBackFee;
    uint8 private _treasuryFee;
    uint8 private _porkchopFee;
    uint8 private _holdersFee;
    uint8 private _totalFee;

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

    constructor() ERC20(_name, _symbol) {
        dividendTracker = new GrowCropCorpDividendTracker();

        liquidityWallet = owner();
        operationsWallet = owner();
        buyBackWallet = owner();
		treasuryWallet = owner();
        porkchopWallet = owner();

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

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

        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(address(0x000000000000000000000000000000000000dEaD));
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));

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

        _isExcludedFromMaxTransactionLimit[address(dividendTracker)] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;

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

        _mint(owner(), initialSupply);
    }

    receive() external payable {}

    // Setters
    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
        if(_launchBlockNumber == 0) {
            _launchBlockNumber = block.number;
            _launchStartTimestamp = block.timestamp;
            _isLaunched = true;
        }
    }
    function deactivateTrading() external onlyOwner {
        isTradingEnabled = false;
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value,"GrowCropCorp: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        if (value) {
            dividendTracker.excludeFromDividends(pair);
        }
        emit AutomatedMarketMakerPairChange(pair, value);
    }
    function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }
    function blockAccount(address account) external onlyOwner {
        require(!_isBlocked[account], "GrowCropCorp: Account is already blocked");
        if (_isLaunched) {
            require((block.timestamp - _launchStartTimestamp) < 172800, "GrowCropCorp: Time to block accounts has expired");
        }
        _isBlocked[account] = true;
        emit BlockedAccountChange(account, true);
    }
    function unblockAccount(address account) external onlyOwner {
        require(_isBlocked[account], "GrowCropCorp: Account is not blcoked");
        _isBlocked[account] = false;
        emit BlockedAccountChange(account, false);
    }
    function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner {
        require(_feeOnSelectedWalletTransfers[account] != value,"GrowCropCorp: The selected wallet is already set to the value ");
        _feeOnSelectedWalletTransfers[account] = value;
        emit FeeOnSelectedWalletTransfersChange(account, value);
    }
    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFee[account] != excluded,"GrowCropCorp: Account is already the value of 'excluded'");
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }
    function excludeFromDividends(address account) external onlyOwner {
        dividendTracker.excludeFromDividends(account);
    }
    function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxTransactionLimit[account] != excluded,"GrowCropCorp: 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,"GrowCropCorp: Account is already the value of 'excluded'");
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }
    function setWallets(address newLiquidityWallet,address newOperationsWallet,address newBuyBackWallet,address newTreasuryWallet, address newPorkchopWallet) external onlyOwner {
        if (liquidityWallet != newLiquidityWallet) {
            require(newLiquidityWallet != address(0), "GrowCropCorp: The liquidityWallet cannot be 0");
            emit WalletChange("liquidityWallet", newLiquidityWallet, liquidityWallet);
            liquidityWallet = newLiquidityWallet;
        }
        if (operationsWallet != newOperationsWallet) {
            require(newOperationsWallet != address(0), "GrowCropCorp: The operationsWallet cannot be 0");
            emit WalletChange("operationsWallet", newOperationsWallet, operationsWallet);
            operationsWallet = newOperationsWallet;
        }
        if (buyBackWallet != newBuyBackWallet) {
            require(newBuyBackWallet != address(0), "GrowCropCorp: The buyBackWallet cannot be 0");
            emit WalletChange("buyBackWallet", newBuyBackWallet, buyBackWallet);
            buyBackWallet = newBuyBackWallet;
        }
        if (treasuryWallet != newTreasuryWallet) {
            require(newTreasuryWallet != address(0), "GrowCropCorp: The treasuryWallet cannot be 0");
            emit WalletChange("treasuryWallet", newTreasuryWallet, treasuryWallet);
            treasuryWallet = newTreasuryWallet;
        }
        if (porkchopWallet != newPorkchopWallet) {
            require(newPorkchopWallet != address(0), "GrowCropCorp: The porkchopWallet cannot be 0");
            emit WalletChange("porkchopWallet", newPorkchopWallet, porkchopWallet);
            porkchopWallet = newPorkchopWallet;
        }
    }
    // Base fees
    function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy,uint8 _operationsFeeOnBuy,uint8 _buyBackFeeOnBuy,uint8 _treasuryFeeOnBuy, uint8 _porkchopFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner {
        _setCustomBuyTaxPeriod(_base,_liquidityFeeOnBuy,_operationsFeeOnBuy,_buyBackFeeOnBuy,_treasuryFeeOnBuy, _porkchopFeeOnBuy, _holdersFeeOnBuy);
        emit FeeChange("baseFees-Buy",_liquidityFeeOnBuy,_operationsFeeOnBuy,_buyBackFeeOnBuy,_treasuryFeeOnBuy, _porkchopFeeOnBuy, _holdersFeeOnBuy);
    }
    function setBaseFeesOnSell(uint8 _liquidityFeeOnSell,uint8 _operationsFeeOnSell,uint8 _buyBackFeeOnSell,uint8 _treasuryFeeOnSell, uint8 _porkchopFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner {
        _setCustomSellTaxPeriod(_base,_liquidityFeeOnSell,_operationsFeeOnSell,_buyBackFeeOnSell,_treasuryFeeOnSell,_porkchopFeeOnSell, _holdersFeeOnSell);
        emit FeeChange("baseFees-Sell",_liquidityFeeOnSell,_operationsFeeOnSell,_buyBackFeeOnSell,_treasuryFeeOnSell,_porkchopFeeOnSell, _holdersFeeOnSell);
    }
    function setUniswapRouter(address newAddress) external onlyOwner {
        require(newAddress != address(uniswapV2Router),"GrowCropCorp: The router already has that address");
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
    }
    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxTxAmount, "GrowCropCorp: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }
    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxWalletAmount,"GrowCropCorp: Cannot update maxWalletAmount to same value");
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }
    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(newValue != minimumTokensBeforeSwap,"GrowCropCorp: Cannot update minimumTokensBeforeSwap to same value");
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }
    function setMinimumTokenBalanceForDividends(uint256 newValue) external onlyOwner {
        dividendTracker.setTokenBalanceForDividends(newValue);
    }
    function claim() external {
        dividendTracker.processAccount(payable(msg.sender), false);
    }
    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(amount < address(this).balance, "GrowCropCorp: Cannot send more than contract balance");
        (bool success, ) = address(owner()).call{ value: amount }("");
        if (success) {
            emit ClaimETHOverflow(amount);
        }
    }
    // Getters
    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }
    function withdrawableDividendOf(address account) external view returns (uint256) {
        return dividendTracker.withdrawableDividendOf(account);
    }
    function dividendTokenBalanceOf(address account) external view returns (uint256) {
        return dividendTracker.balanceOf(account);
    }
    function getNumberOfDividendTokenHolders() external view returns (uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }
    function getBaseBuyFees() external view returns (uint8,uint8,uint8,uint8,uint8,uint8) {
        return (_base.liquidityFeeOnBuy,_base.operationsFeeOnBuy,_base.buyBackFeeOnBuy,_base.treasuryFeeOnBuy,_base.porkchopFeeOnBuy, _base.holdersFeeOnBuy);
    }
    function getBaseSellFees() external view returns (uint8,uint8,uint8,uint8,uint8,uint8) {
        return (_base.liquidityFeeOnSell,_base.operationsFeeOnSell,_base.buyBackFeeOnSell,_base.treasuryFeeOnSell,_base.porkchopFeeOnSell, _base.holdersFeeOnSell);
    }
    // Main
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

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

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

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

        bool takeFee = !_swapping && isTradingEnabled;

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

        try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}
    }
    function _adjustTaxes(bool isBuyFromLp,bool isSelltoLp,address from,address to) private {
        _liquidityFee = 0;
        _operationsFee = 0;
        _buyBackFee = 0;
        _treasuryFee = 0;
        _porkchopFee = 0;
        _holdersFee = 0;

        if (isBuyFromLp) {
            if (_isLaunched && block.number - _launchBlockNumber <= 5) {
                _liquidityFee = 100;
            } else {
                _liquidityFee = _base.liquidityFeeOnBuy;
                _operationsFee = _base.operationsFeeOnBuy;
                _buyBackFee = _base.buyBackFeeOnBuy;
                _treasuryFee = _base.treasuryFeeOnBuy;
                _porkchopFee = _base.porkchopFeeOnBuy;
                _holdersFee = _base.holdersFeeOnBuy;
            }
        }
        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _operationsFee = _base.operationsFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _treasuryFee = _base.treasuryFeeOnSell;
            _porkchopFee = _base.porkchopFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _operationsFee = _base.operationsFeeOnBuy;
            _buyBackFee = _base.buyBackFeeOnBuy;
            _treasuryFee = _base.treasuryFeeOnBuy;
            _porkchopFee = _base.porkchopFeeOnSell;
            _holdersFee = _base.holdersFeeOnBuy;
        }
        _totalFee = _liquidityFee + _operationsFee + _buyBackFee + _treasuryFee + _porkchopFee + _holdersFee;
        emit FeesApplied(_liquidityFee, _operationsFee, _buyBackFee, _treasuryFee, _porkchopFee, _holdersFee, _totalFee);
    }
    function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidityFeeOnSell,uint8 _operationsFeeOnSell,uint8 _buyBackFeeOnSell,uint8 _treasuryFeeOnSell,uint8 _porkchopFeeOnSell, uint8 _holdersFeeOnSell) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(_liquidityFeeOnSell,map.liquidityFeeOnSell,"liquidityFeeOnSell",map.periodName);
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.operationsFeeOnSell != _operationsFeeOnSell) {
            emit CustomTaxPeriodChange(_operationsFeeOnSell,map.operationsFeeOnSell,"operationsFeeOnSell",map.periodName);
            map.operationsFeeOnSell = _operationsFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit CustomTaxPeriodChange(_buyBackFeeOnSell,map.buyBackFeeOnSell,"buyBackFeeOnSell",map.periodName);
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.treasuryFeeOnSell != _treasuryFeeOnSell) {
            emit CustomTaxPeriodChange(_treasuryFeeOnSell,map.treasuryFeeOnSell,"treasuryFeeOnSell",map.periodName);
            map.treasuryFeeOnSell = _treasuryFeeOnSell;
        }
        if (map.porkchopFeeOnSell != _porkchopFeeOnSell) {
            emit CustomTaxPeriodChange(_porkchopFeeOnSell,map.porkchopFeeOnSell,"porkchopFeeOnSell",map.periodName);
            map.porkchopFeeOnSell = _porkchopFeeOnSell;
        }
        if (map.holdersFeeOnSell != _holdersFeeOnSell) {
            emit CustomTaxPeriodChange(_holdersFeeOnSell,map.holdersFeeOnSell,"holdersFeeOnSell",map.periodName);
            map.holdersFeeOnSell = _holdersFeeOnSell;
        }
    }
    function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidityFeeOnBuy,uint8 _operationsFeeOnBuy,uint8 _buyBackFeeOnBuy,uint8 _treasuryFeeOnBuy, uint8 _porkchopFeeOnBuy, uint8 _holdersFeeOnBuy) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(_liquidityFeeOnBuy,map.liquidityFeeOnBuy,"liquidityFeeOnBuy",map.periodName);
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.operationsFeeOnBuy != _operationsFeeOnBuy) {
            emit CustomTaxPeriodChange(_operationsFeeOnBuy,map.operationsFeeOnBuy,"operationsFeeOnBuy",map.periodName);
            map.operationsFeeOnBuy = _operationsFeeOnBuy;
        }
        if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
            emit CustomTaxPeriodChange(_buyBackFeeOnBuy,map.buyBackFeeOnBuy,"buyBackFeeOnBuy",map.periodName);
            map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
        }
        if (map.treasuryFeeOnBuy != _treasuryFeeOnBuy) {
            emit CustomTaxPeriodChange(_treasuryFeeOnBuy,map.treasuryFeeOnBuy,"treasuryFeeOnBuy",map.periodName);
            map.treasuryFeeOnBuy = _treasuryFeeOnBuy;
        }
        if (map.porkchopFeeOnBuy != _porkchopFeeOnBuy) {
            emit CustomTaxPeriodChange(_porkchopFeeOnBuy,map.porkchopFeeOnBuy,"porkchopFeeOnBuy",map.periodName);
            map.porkchopFeeOnBuy = _porkchopFeeOnBuy;
        }
        if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
            emit CustomTaxPeriodChange(_holdersFeeOnBuy,map.holdersFeeOnBuy,"holdersFeeOnBuy",map.periodName);
            map.holdersFeeOnBuy = _holdersFeeOnBuy;
        }
    }

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

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

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee - (_liquidityFee / 2);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) / totalETHFee / 2;
        uint256 amountETHOperations = (ETHBalanceAfterSwap * _operationsFee) / totalETHFee;
        uint256 amountETHBuyBack = (ETHBalanceAfterSwap * _buyBackFee) / totalETHFee;
        uint256 amountETHTreasury = (ETHBalanceAfterSwap * _treasuryFee) / totalETHFee;
        uint256 amountETHPorkchop = (ETHBalanceAfterSwap * _porkchopFee) / totalETHFee;
        uint256 amountETHHolders = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHBuyBack + amountETHOperations + amountETHTreasury + amountETHPorkchop);

        Address.sendValue(payable(operationsWallet),amountETHOperations);
        Address.sendValue(payable(buyBackWallet),amountETHBuyBack);
        Address.sendValue(payable(treasuryWallet),amountETHTreasury);
        Address.sendValue(payable(porkchopWallet), amountETHPorkchop);

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

        (bool success, ) = address(dividendTracker).call{ value: amountETHHolders }("");
        if (success) {
            emit DividendsSent(amountETHHolders);
        }
    }

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

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

contract GrowCropCorpDividendTracker is DividendPayingToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;

    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() DividendPayingToken("GrowCropCorp_Dividend_Tracker", "GrowCropCorp_Dividend_Tracker") {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 0 * (10**18);
    }
    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "GrowCropCorp_Dividend_Tracker: No transfers allowed");
    }
    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }
    function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
        require(
            minimumTokenBalanceForDividends != newValue,
            "GrowCropCorp_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'."
        );
        minimumTokenBalanceForDividends = newValue;
    }
    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.keys.length;
    }
    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
        if (excludedFromDividends[account]) {
            return;
        }
        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        } else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }
        processAccount(account, true);
    }
    function processAccount(address payable account, bool automatic)
        public
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"treasuryFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"porkchopFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"treasuryFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"porkchopFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract GrowCropCorpDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"porkchopWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_treasuryFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_porkchopFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_treasuryFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_porkchopFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","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":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newOperationsWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"},{"internalType":"address","name":"newTreasuryWallet","type":"address"},{"internalType":"address","name":"newPorkchopWallet","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":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526a52b7d2dcc80cd2e4000000600855612710600854606462000027919062000ae4565b62000033919062000afe565b600a5561271060085460c86200004a919062000ae4565b62000056919062000afe565b600b55620186a060085460196200006e919062000ae4565b6200007a919062000afe565b600d55604080516101e081018252636261736560e01b8152600060208201819052918101829052600260608201819052600460808301819052600160a0840181905260c0840182905260e084018390526003610100850152610120840181905261014084019190915261016083018190526101808301526101a082015260056101c090910152601380546001600160c01b031916636261736560981b179055601455601580546b0502010104010302040104026001600160601b03199091161790553480156200014957600080fd5b506040518060400160405280600e81526020016d047726f772043726f7020436f72760941b8152506040518060400160405280600381526020016247434360e81b81525060006200019f620007be60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001f7838262000bc5565b50600562000206828262000bc5565b505050604051620002179062000ac0565b604051809103906000f08015801562000234573d6000803e3d6000fd5b50600780546001600160a01b039283166001600160a01b03199182161790915560008054600e8054841691909416908117909355600f805483168417905560108054831684179055601180548316841790556012805490921690921790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620002e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030d919062000c91565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000381919062000c91565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f5919062000c91565b600680546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000429816001620007d1565b6001601c6000620004426000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601c9093528183208054851660019081179091556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620004d857600080fd5b505af1158015620004ed573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200053757600080fd5b505af11580156200054c573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200059857600080fd5b505af1158015620005ad573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db09050620005d76000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200061957600080fd5b505af11580156200062e573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200067a57600080fd5b505af11580156200068f573d6000803e3d6000fd5b505050506001601a6000620006a9620007c260201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601a85528382208054871660019081179091556007805485168452601d8752858420805489168317905582845285842080548916831790558885168452601e96879052858420805489168317905554841683528483208054881682179055600654909316825283822080548716841790558152918220805490941681179093556200076e6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620007b6620007ad6000546001600160a01b031690565b60085462000948565b505062000cd2565b3390565b6000546001600160a01b031690565b6001600160a01b0382166000908152601f602052604090205481151560ff9091161515036200087c5760405162461bcd60e51b815260206004820152604660248201527f47726f7743726f70436f72703a204175746f6d61746564206d61726b6574206d60448201527f616b6572207061697220697320616c72656164792073657420746f20746861746064820152652076616c756560d01b608482015260a4015b60405180910390fd5b6001600160a01b0382166000908152601f60205260409020805460ff191682158015919091179091556200090c5760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015620008f257600080fd5b505af115801562000907573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b038216620009a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000873565b620009bc8160035462000a5460201b620021ce1790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620009f1918390620021ce62000a54821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000a439085815260200190565b60405180910390a35050565b505050565b60008062000a63838562000cbc565b90508381101562000ab75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000873565b90505b92915050565b611c6e8062004ee783390190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000aba5762000aba62000ace565b60008262000b1c57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000b4c57607f821691505b60208210810362000b6d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a4f57600081815260208120601f850160051c8101602086101562000b9c5750805b601f850160051c820191505b8181101562000bbd5782815560010162000ba8565b505050505050565b81516001600160401b0381111562000be15762000be162000b21565b62000bf98162000bf2845462000b37565b8462000b73565b602080601f83116001811462000c31576000841562000c185750858301515b600019600386901b1c1916600185901b17855562000bbd565b600085815260208120601f198616915b8281101562000c625788860151825594840194600190910190840162000c41565b508582101562000c815787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000ca457600080fd5b81516001600160a01b038116811462000ab757600080fd5b8082018082111562000aba5762000aba62000ace565b6080516141f962000cee60003960006105f201526141f96000f3fe6080604052600436106103395760003560e01c80636b6d37c5116101ab578063a9059cbb116100f7578063d2d7ad8311610095578063dd62ed3e1161006f578063dd62ed3e146109d0578063f2fde38b14610a16578063fd72e22a14610a36578063fe01753514610a5657600080fd5b8063d2d7ad831461097a578063d322157614610990578063d4698016146109b057600080fd5b8063b62496f5116100d1578063b62496f514610888578063bea9849e146108b8578063c0246668146108d8578063cd43e228146108f857600080fd5b8063a9059cbb14610832578063aa4bde2814610852578063aee50b1e1461086857600080fd5b8063880bcbc111610164578063908f6ba61161013e578063908f6ba6146107bd57806395d89b41146107dd578063a457c2d7146107f2578063a8b9d2401461081257600080fd5b8063880bcbc1146107695780638c0b5e22146107895780638da5cb5b1461079f57600080fd5b80636b6d37c51461069e57806370a08231146106be578063715018a6146106f4578063781edb3c146107095780637c0a893d14610729578063825287911461074957600080fd5b8063313ce567116102855780634626402b116102235780634e71d92d116101fd5780634e71d92d146106345780635ebf4db91461064957806364b0f653146106695780636843cd841461067e57600080fd5b80634626402b146105c057806349bd5a5e146105e05780634d78fdc61461061457600080fd5b8063378dc3dc1161025f578063378dc3dc1461054a578063395093511461056057806345a423291461058057806345ea4ed2146105a057600080fd5b8063313ce567146104f957806331e79db01461051557806334cf1fea1461053557600080fd5b806318160ddd116102f257806323b872dd116102cc57806323b872dd1461048457806327a14fc2146104a45780632c1f5216146104c457806330bb4cff146104e457600080fd5b806318160ddd146104255780631cd348c0146104445780631e293c101461046457600080fd5b8063064a59d01461034557806306fdde0314610374578063095ea7b314610396578063098df585146103b65780630bd05b69146103d85780631694505e146103ed57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5060095461035f9060ff1681565b60405190151581526020015b60405180910390f35b34801561038057600080fd5b50610389610aa5565b60405161036b9190613b56565b3480156103a257600080fd5b5061035f6103b1366004613bb9565b610b37565b3480156103c257600080fd5b506103d66103d1366004613be5565b610b4e565b005b3480156103e457600080fd5b506103d6610c81565b3480156103f957600080fd5b5060065461040d906001600160a01b031681565b6040516001600160a01b03909116815260200161036b565b34801561043157600080fd5b506003545b60405190815260200161036b565b34801561045057600080fd5b5060105461040d906001600160a01b031681565b34801561047057600080fd5b506103d661047f366004613be5565b610cda565b34801561049057600080fd5b5061035f61049f366004613bfe565b610da6565b3480156104b057600080fd5b506103d66104bf366004613be5565b610e0f565b3480156104d057600080fd5b5060075461040d906001600160a01b031681565b3480156104f057600080fd5b50610436610ee3565b34801561050557600080fd5b506040516012815260200161036b565b34801561052157600080fd5b506103d6610530366004613c3f565b610f56565b34801561054157600080fd5b506103d6610fe3565b34801561055657600080fd5b5061043660085481565b34801561056c57600080fd5b5061035f61057b366004613bb9565b611019565b34801561058c57600080fd5b506103d661059b366004613c6a565b61104f565b3480156105ac57600080fd5b506103d66105bb366004613cb9565b61116f565b3480156105cc57600080fd5b5060115461040d906001600160a01b031681565b3480156105ec57600080fd5b5061040d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561062057600080fd5b506103d661062f366004613c3f565b611231565b34801561064057600080fd5b506103d661131c565b34801561065557600080fd5b506103d6610664366004613be5565b611394565b34801561067557600080fd5b506104366113ef565b34801561068a57600080fd5b50610436610699366004613c3f565b611439565b3480156106aa57600080fd5b506103d66106b9366004613cb9565b6114a9565b3480156106ca57600080fd5b506104366106d9366004613c3f565b6001600160a01b031660009081526001602052604090205490565b34801561070057600080fd5b506103d6611500565b34801561071557600080fd5b506103d6610724366004613c6a565b611574565b34801561073557600080fd5b506103d6610744366004613c3f565b611636565b34801561075557600080fd5b506103d6610764366004613d2d565b6117af565b34801561077557600080fd5b506103d6610784366004613c6a565b611c63565b34801561079557600080fd5b50610436600b5481565b3480156107ab57600080fd5b506000546001600160a01b031661040d565b3480156107c957600080fd5b5060125461040d906001600160a01b031681565b3480156107e957600080fd5b50610389611d25565b3480156107fe57600080fd5b5061035f61080d366004613bb9565b611d34565b34801561081e57600080fd5b5061043661082d366004613c3f565b611d83565b34801561083e57600080fd5b5061035f61084d366004613bb9565b611db6565b34801561085e57600080fd5b50610436600a5481565b34801561087457600080fd5b506103d6610883366004613be5565b611dc3565b34801561089457600080fd5b5061035f6108a3366004613c3f565b601f6020526000908152604090205460ff1681565b3480156108c457600080fd5b506103d66108d3366004613c3f565b611ea1565b3480156108e457600080fd5b506103d66108f3366004613c6a565b611fa0565b34801561090457600080fd5b5060155460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b9004165b6040805160ff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c00161036b565b34801561098657600080fd5b50610436600d5481565b34801561099c57600080fd5b506103d66109ab366004613c6a565b612062565b3480156109bc57600080fd5b50600e5461040d906001600160a01b031681565b3480156109dc57600080fd5b506104366109eb366004613d9e565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a2257600080fd5b506103d6610a31366004613c3f565b6120e4565b348015610a4257600080fd5b50600f5461040d906001600160a01b031681565b348015610a6257600080fd5b5060155460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b8204811691600160581b90041661093e565b606060048054610ab490613dcc565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613dcc565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000610b44338484612234565b5060015b92915050565b6000546001600160a01b03163314610b815760405162461bcd60e51b8152600401610b7890613e06565b60405180910390fd5b478110610bed5760405162461bcd60e51b815260206004820152603460248201527f47726f7743726f70436f72703a2043616e6e6f742073656e64206d6f7265207460448201527368616e20636f6e74726163742062616c616e636560601b6064820152608401610b78565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610c3a576040519150601f19603f3d011682016040523d82523d6000602084013e610c3f565b606091505b505090508015610c7d576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6000546001600160a01b03163314610cab5760405162461bcd60e51b8152600401610b7890613e06565b6009805460ff19166001179055601854600003610cd85743601855426017556016805460ff191660011790555b565b6000546001600160a01b03163314610d045760405162461bcd60e51b8152600401610b7890613e06565b600b548103610d735760405162461bcd60e51b815260206004820152603560248201527f47726f7743726f70436f72703a2043616e6e6f7420757064617465206d61785460448201527478416d6f756e7420746f2073616d652076616c756560581b6064820152608401610b78565b600b5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600b55565b6000610db3848484612359565b610e058433610e0085604051806060016040528060288152602001614157602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612973565b612234565b5060019392505050565b6000546001600160a01b03163314610e395760405162461bcd60e51b8152600401610b7890613e06565b600a548103610eb05760405162461bcd60e51b815260206004820152603960248201527f47726f7743726f70436f72703a2043616e6e6f7420757064617465206d61785760448201527f616c6c6574416d6f756e7420746f2073616d652076616c7565000000000000006064820152608401610b78565b600a5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600a55565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f519190613e3b565b905090565b6000546001600160a01b03163314610f805760405162461bcd60e51b8152600401610b7890613e06565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610fc857600080fd5b505af1158015610fdc573d6000803e3d6000fd5b5050505050565b6000546001600160a01b0316331461100d5760405162461bcd60e51b8152600401610b7890613e06565b6009805460ff19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610b44918590610e0090866121ce565b6000546001600160a01b031633146110795760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000908152601b602052604090205481151560ff90911615150361110f5760405162461bcd60e51b815260206004820152603e60248201527f47726f7743726f70436f72703a205468652073656c65637465642077616c6c6560448201527f7420697320616c72656164792073657420746f207468652076616c75652000006064820152608401610b78565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146111995760405162461bcd60e51b8152600401610b7890613e06565b6111a960138787878787876129ad565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff898116845288811660208501528781168484015286811660608501528581166080850152841660a0840152905190917fc5b0189242ee94396fea9d585d7b5ec493a5a69180d0793c05f7525862878af3919081900360c00190a2505050505050565b6000546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b03811660009081526019602052604090205460ff166112cf5760405162461bcd60e51b8152602060048201526024808201527f47726f7743726f70436f72703a204163636f756e74206973206e6f7420626c636044820152631bdad95960e21b6064820152608401610b78565b6001600160a01b038116600081815260196020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af115801561136d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113919190613e54565b50565b6000546001600160a01b031633146113be5760405162461bcd60e51b8152600401610b7890613e06565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610fae565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610f2d573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611485573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b489190613e3b565b6000546001600160a01b031633146114d35760405162461bcd60e51b8152600401610b7890613e06565b6114e36013878787878787612d49565b6040516b62617365466565732d42757960a01b8152600c016111c3565b6000546001600160a01b0316331461152a5760405162461bcd60e51b8152600401610b7890613e06565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461159e5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000908152601e602052604090205481151560ff9091161515036115de5760405162461bcd60e51b8152600401610b7890613e71565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611163565b6000546001600160a01b031633146116605760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b03811660009081526019602052604090205460ff16156116da5760405162461bcd60e51b815260206004820152602860248201527f47726f7743726f70436f72703a204163636f756e7420697320616c726561647960448201526708189b1bd8dad95960c21b6064820152608401610b78565b60165460ff161561175d576202a300601754426116f79190613ee4565b1061175d5760405162461bcd60e51b815260206004820152603060248201527f47726f7743726f70436f72703a2054696d6520746f20626c6f636b206163636f60448201526f1d5b9d1cc81a185cc8195e1c1a5c995960821b6064820152608401610b78565b6001600160a01b038116600081815260196020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146117d95760405162461bcd60e51b8152600401610b7890613e06565b600e546001600160a01b038681169116146118c1576001600160a01b03851661185a5760405162461bcd60e51b815260206004820152602d60248201527f47726f7743726f70436f72703a20546865206c697175696469747957616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610b78565b600e546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691871690600f016040519081900381209060008051602061413783398151915290600090a4600e80546001600160a01b0319166001600160a01b0387161790555b600f546001600160a01b038581169116146119ab576001600160a01b0384166119435760405162461bcd60e51b815260206004820152602e60248201527f47726f7743726f70436f72703a20546865206f7065726174696f6e7357616c6c60448201526d065742063616e6e6f7420626520360941b6064820152608401610b78565b600f546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b03918216918616906010016040519081900381209060008051602061413783398151915290600090a4600f80546001600160a01b0319166001600160a01b0386161790555b6010546001600160a01b03848116911614611a8f576001600160a01b038316611a2a5760405162461bcd60e51b815260206004820152602b60248201527f47726f7743726f70436f72703a20546865206275794261636b57616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610b78565b6010546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691851690600d016040519081900381209060008051602061413783398151915290600090a4601080546001600160a01b0319166001600160a01b0385161790555b6011546001600160a01b03838116911614611b75576001600160a01b038216611b0f5760405162461bcd60e51b815260206004820152602c60248201527f47726f7743726f70436f72703a2054686520747265617375727957616c6c657460448201526b02063616e6e6f7420626520360a41b6064820152608401610b78565b6011546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b0391821691841690600e016040519081900381209060008051602061413783398151915290600090a4601180546001600160a01b0319166001600160a01b0384161790555b6012546001600160a01b03828116911614610fdc576001600160a01b038116611bf55760405162461bcd60e51b815260206004820152602c60248201527f47726f7743726f70436f72703a2054686520706f726b63686f7057616c6c657460448201526b02063616e6e6f7420626520360a41b6064820152608401610b78565b6012546040516d1c1bdc9ad8da1bdc15d85b1b195d60921b81526001600160a01b0391821691831690600e016040519081900381209060008051602061413783398151915290600090a4601280546001600160a01b0383166001600160a01b03199091161790555050505050565b6000546001600160a01b03163314611c8d5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000908152601d602052604090205481151560ff909116151503611ccd5760405162461bcd60e51b8152600401610b7890613e71565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611163565b606060058054610ab490613dcc565b6000610b443384610e008560405180606001604052806025815260200161419f602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612973565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611468565b6000610b44338484612359565b6000546001600160a01b03163314611ded5760405162461bcd60e51b8152600401610b7890613e06565b600d548103611e6e5760405162461bcd60e51b815260206004820152604160248201527f47726f7743726f70436f72703a2043616e6e6f7420757064617465206d696e6960448201527f6d756d546f6b656e734265666f72655377617020746f2073616d652076616c756064820152606560f81b608482015260a401610b78565b600d5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600d55565b6000546001600160a01b03163314611ecb5760405162461bcd60e51b8152600401610b7890613e06565b6006546001600160a01b0390811690821603611f435760405162461bcd60e51b815260206004820152603160248201527f47726f7743726f70436f72703a2054686520726f7574657220616c7265616479604482015270206861732074686174206164647265737360781b6064820152608401610b78565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fca5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000908152601c602052604090205481151560ff90911615150361200a5760405162461bcd60e51b8152600401610b7890613e71565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611163565b6000546001600160a01b0316331461208c5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611163565b6000546001600160a01b0316331461210e5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0381166121735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b78565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806121db8385613ef7565b90508381101561222d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b78565b9392505050565b6001600160a01b0383166122965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b78565b6001600160a01b0382166122f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b78565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661237f5760405162461bcd60e51b8152600401610b7890613f0a565b6001600160a01b0382166123a55760405162461bcd60e51b8152600401610b7890613f4f565b806000036123be576123b9838360006130cc565b505050565b6001600160a01b0383166000908152601a602052604090205460ff1615801561240057506001600160a01b0382166000908152601a602052604090205460ff16155b156126bf5760095460ff1661246c5760405162461bcd60e51b815260206004820152602c60248201527f47726f7743726f70436f72703a2054726164696e672069732063757272656e7460448201526b363c903234b9b0b13632b21760a11b6064820152608401610b78565b6001600160a01b03821660009081526019602052604090205460ff16156124d55760405162461bcd60e51b815260206004820181905260248201527f47726f7743726f70436f72703a204163636f756e7420697320626c6f636b65646044820152606401610b78565b6001600160a01b03831660009081526019602052604090205460ff161561253e5760405162461bcd60e51b815260206004820181905260248201527f47726f7743726f70436f72703a204163636f756e7420697320626c6f636b65646044820152606401610b78565b6001600160a01b0382166000908152601d602052604090205460ff1615801561258057506001600160a01b0383166000908152601d602052604090205460ff16155b156125f457600b548111156125f45760405162461bcd60e51b815260206004820152603460248201527f47726f7743726f70436f72703a2042757920616d6f756e742065786365656473604482015273103a34329036b0bc2a3c213abca0b6b7bab73a1760611b6064820152608401610b78565b6001600160a01b0382166000908152601e602052604090205460ff166126bf57600a5481612637846001600160a01b031660009081526001602052604090205490565b6126419190613ef7565b11156126bf5760405162461bcd60e51b815260206004820152604160248201527f47726f7743726f70436f72703a2045787065637465642077616c6c657420616d60448201527f6f756e74206578636565647320746865206d617857616c6c6574416d6f756e746064820152601760f91b608482015260a401610b78565b6001600160a01b038084166000908152601f60205260408082205492851682529020546126f49160ff908116911685856131d8565b600d54306000908152600160205260409020546009549111159060ff16801561271a5750805b80156127295750600c5460ff16155b80156127405750602054600160301b900460ff1615155b801561276457506001600160a01b0383166000908152601f602052604090205460ff165b1561278957600c805460ff1916600117905561277e613542565b600c805460ff191690555b600c5460009060ff161580156127a1575060095460ff165b6001600160a01b0386166000908152601c602052604090205490915060ff16806127e357506001600160a01b0384166000908152601c602052604090205460ff165b156127ec575060005b8080156128045750602054600160301b900460ff1615155b1561284b5760205460009060649061282690600160301b900460ff1686613f92565b6128309190613fbf565b905061283c8185613ee4565b93506128498630836130cc565b505b6128568585856130cc565b6007546001600160a01b031663e30443bc86612887816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156128cd57600080fd5b505af19250505080156128de575060015b506007546001600160a01b031663e30443bc85612910816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561295657600080fd5b505af1925050508015612967575060015b15610fdc575050505050565b600081848411156129975760405162461bcd60e51b8152600401610b789190613b56565b5060006129a48486613ee4565b95945050505050565b600287015460ff8781166101009092041614612a3e57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028901548954919260ff610100909204821692918a169160008051602061417f83398151915291612a1f9160481b90613fd3565b60405180910390a460028701805461ff00191661010060ff8916021790555b600287015460ff86811663010000009092041614612ad857604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028901548954919260ff63010000009092048216929189169160008051602061417f83398151915291612ab59160481b90613fd3565b60405180910390a460028701805463ff0000001916630100000060ff8816021790555b600287015460ff858116600160281b9092041614612b6f576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028901548954919260ff600160281b9092048216929188169160008051602061417f83398151915291612b4c9160481b90613fd3565b60405180910390a460028701805460ff60281b1916600160281b60ff8716021790555b600287015460ff848116600160381b9092041614612c0b57604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028901548954919260ff600160381b9092048216929187169160008051602061417f83398151915291612be49160481b90613fd3565b60405180910390a460028701805467ff000000000000001916600160381b60ff8616021790555b600287015460ff838116600160481b9092041614612ca957604051701c1bdc9ad8da1bdc11995953db94d95b1b607a1b815260110160405190819003812060028901548954919260ff600160481b9092048216929186169160008051602061417f83398151915291612c809160481b90613fd3565b60405180910390a460028701805469ff0000000000000000001916600160481b60ff8516021790555b600287015460ff828116600160581b9092041614612d40576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028901548954919260ff600160581b9092048216929185169160008051602061417f83398151915291612d1d9160481b90613fd3565b60405180910390a460028701805460ff60581b1916600160581b60ff8416021790555b50505050505050565b600287015460ff878116911614612dca57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028901548954919260ff91821692918a169160008051602061417f83398151915291612db09160481b90613fd3565b60405180910390a460028701805460ff191660ff88161790555b600287015460ff868116620100009092041614612e5f57604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028901548954919260ff620100009092048216929189169160008051602061417f83398151915291612e3e9160481b90613fd3565b60405180910390a460028701805462ff000019166201000060ff8816021790555b600287015460ff858116600160201b9092041614612ef6576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028901548954919260ff600160201b9092048216929188169160008051602061417f83398151915291612ed29160481b90613fd3565b60405180910390a460028701805464ff000000001916600160201b60ff8716021790555b600287015460ff848116600160301b9092041614612f90576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028901548954919260ff600160301b9092048216929187169160008051602061417f83398151915291612f6a9160481b90613fd3565b60405180910390a460028701805466ff0000000000001916600160301b60ff8616021790555b600287015460ff838116600160401b909204161461302c576040516f706f726b63686f704665654f6e42757960801b815260100160405190819003812060028901548954919260ff600160401b9092048216929186169160008051602061417f833981519152916130049160481b90613fd3565b60405180910390a460028701805468ff00000000000000001916600160401b60ff8516021790555b600287015460ff828116600160501b9092041614612d40576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028901548954919260ff600160501b9092048216929185169160008051602061417f8339815191529161309f9160481b90613fd3565b60405180910390a460028701805460ff8316600160501b0260ff60501b1990911617905550505050505050565b6001600160a01b0383166130f25760405162461bcd60e51b8152600401610b7890613f0a565b6001600160a01b0382166131185760405162461bcd60e51b8152600401610b7890613f4f565b61315581604051806060016040528060268152602001614111602691396001600160a01b0386166000908152600160205260409020549190612973565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461318490826121ce565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061234c9085815260200190565b6020805465ffffffffffff1916905583156132b05760165460ff16801561320d575060056018544361320a9190613ee4565b11155b15613224576020805460ff191660641790556132b0565b6015546020805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021765ffff000000001916600160401b850483169190910260ff60281b191617600160501b90930416600160281b029190911790555b8215613348576015546020805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b8086048416620100000263ff000000191691909117600160381b86048416929092029190911765ffff000000001916600160481b85048316600160201b0260ff60281b191617600160581b90940491909116029190911790555b82158015613354575083155b801561339a57506001600160a01b0382166000908152601b602052604090205460ff168061339a57506001600160a01b0381166000908152601b602052604090205460ff165b1561342b576015546020805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021765ffff000000001916600160481b850483169190910260ff60281b191617600160501b90930416600160281b029190911790555b60205460ff600160281b8204811691600160201b81048216916301000000820481169162010000810482169161346991610100810482169116613fea565b6134739190613fea565b61347d9190613fea565b6134879190613fea565b6134919190613fea565b6020805460ff928316600160301b90810266ff00000000000019831681178085556040805192871694871694909417825261010081048616948201949094526201000084048516818401526301000000840485166060820152600160201b840485166080820152600160281b8404851660a0820152920490921660c082015290517f2a4a4430d0dfe3335da17f31f84e9395eaad8f0cad29e482d8315db5856243f79181900360e00190a150505050565b30600090815260016020526040812054602054909150479060009060029060ff600160301b8204811691613577911686613f92565b6135819190613fbf565b61358b9190613fbf565b905060006135998285613ee4565b90506135a481613836565b60006135b08447613ee4565b6020549091506000906135c89060029060ff16614003565b6020546135df9190600160301b900460ff16614025565b60205460ff918216925060009160029184916135fc911686613f92565b6136069190613fbf565b6136109190613fbf565b602054909150600090839061362d90610100900460ff1686613f92565b6136379190613fbf565b60205490915060009084906136559062010000900460ff1687613f92565b61365f9190613fbf565b602054909150600090859061367e906301000000900460ff1688613f92565b6136889190613fbf565b60205490915060009086906136a790600160201b900460ff1689613f92565b6136b19190613fbf565b905060008183866136c2878a613ef7565b6136cc9190613ef7565b6136d69190613ef7565b6136e09190613ef7565b6136ea9089613ee4565b600f54909150613703906001600160a01b031686613990565b601054613719906001600160a01b031685613990565b60115461372f906001600160a01b031684613990565b601254613745906001600160a01b031683613990565b8915613797576137558a87613aa9565b604080518a8152602081018890529081018b90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6007546040516000916001600160a01b03169083908381818185875af1925050503d80600081146137e4576040519150601f19603f3d011682016040523d82523d6000602084013e6137e9565b606091505b505090508015613827576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b50505050505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061386b5761386b61403e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156138c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e89190614054565b816001815181106138fb576138fb61403e565b6001600160a01b0392831660209182029290920101526006546139219130911684612234565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061395a908590600190869030904290600401614071565b600060405180830381600087803b15801561397457600080fd5b505af1158015613988573d6000803e3d6000fd5b505050505050565b804710156139e05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b78565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613a2d576040519150601f19603f3d011682016040523d82523d6000602084013e613a32565b606091505b50509050806123b95760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b78565b600654613ac19030906001600160a01b031684612234565b600654600e5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613b31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fdc91906140e2565b600060208083528351808285015260005b81811015613b8357858101830151858201604001528201613b67565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461139157600080fd5b60008060408385031215613bcc57600080fd5b8235613bd781613ba4565b946020939093013593505050565b600060208284031215613bf757600080fd5b5035919050565b600080600060608486031215613c1357600080fd5b8335613c1e81613ba4565b92506020840135613c2e81613ba4565b929592945050506040919091013590565b600060208284031215613c5157600080fd5b813561222d81613ba4565b801515811461139157600080fd5b60008060408385031215613c7d57600080fd5b8235613c8881613ba4565b91506020830135613c9881613c5c565b809150509250929050565b803560ff81168114613cb457600080fd5b919050565b60008060008060008060c08789031215613cd257600080fd5b613cdb87613ca3565b9550613ce960208801613ca3565b9450613cf760408801613ca3565b9350613d0560608801613ca3565b9250613d1360808801613ca3565b9150613d2160a08801613ca3565b90509295509295509295565b600080600080600060a08688031215613d4557600080fd5b8535613d5081613ba4565b94506020860135613d6081613ba4565b93506040860135613d7081613ba4565b92506060860135613d8081613ba4565b91506080860135613d9081613ba4565b809150509295509295909350565b60008060408385031215613db157600080fd5b8235613dbc81613ba4565b91506020830135613c9881613ba4565b600181811c90821680613de057607f821691505b602082108103613e0057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613e4d57600080fd5b5051919050565b600060208284031215613e6657600080fd5b815161222d81613c5c565b60208082526038908201527f47726f7743726f70436f72703a204163636f756e7420697320616c726561647960408201527f207468652076616c7565206f6620276578636c75646564270000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b4857610b48613ece565b80820180821115610b4857610b48613ece565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610b4857610b48613ece565b634e487b7160e01b600052601260045260246000fd5b600082613fce57613fce613fa9565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff8181168382160190811115610b4857610b48613ece565b600060ff83168061401657614016613fa9565b8060ff84160491505092915050565b60ff8281168282160390811115610b4857610b48613ece565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561406657600080fd5b815161222d81613ba4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140c15784516001600160a01b03168352938301939183019160010161409c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156140f757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122036a28caa941b210de4e763ad4b70ca5303a5cc54f95b1e548b18c95e9db1ea9464736f6c6343000811003360806040523480156200001157600080fd5b50604080518082018252601d8082527f47726f7743726f70436f72705f4469766964656e645f547261636b65720000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6119fb80620002736000396000f3fe6080604052600436106101e75760003560e01c806370a0823111610102578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e1461058e578063e30443bc146105d4578063f2fde38b146105f4578063f7c618c11461061457600080fd5b8063a9059cbb14610502578063aafd847a14610522578063bc4c4b3714610558578063be10b6141461057857600080fd5b806391b89fba116100d157806391b89fba1461048d57806395d89b41146104ad578063a457c2d7146104c2578063a8b9d240146104e257600080fd5b806370a082311461040e578063715018a61461044457806385a6b3ae146104595780638da5cb5b1461046f57600080fd5b806323b872dd1161017a578063395093511161014957806339509351146103935780634e7b827f146103b35780636a474002146103e35780636f2789ec146103f857600080fd5b806323b872dd1461031757806327ce014714610337578063313ce5671461035757806331e79db01461037357600080fd5b8063163c7cef116101b6578063163c7cef1461027d5780631694505e1461029d57806318160ddd146102d5578063226cfa3d146102ea57600080fd5b806303c83302146101fb57806306fdde0314610203578063095ea7b31461022e57806309bbedde1461025e57600080fd5b366101f6576101f4610634565b005b600080fd5b6101f4610634565b34801561020f57600080fd5b506102186106fa565b60405161022591906116b8565b60405180910390f35b34801561023a57600080fd5b5061024e61024936600461171b565b61078c565b6040519015158152602001610225565b34801561026a57600080fd5b50600c545b604051908152602001610225565b34801561028957600080fd5b506101f4610298366004611747565b6107a3565b3480156102a957600080fd5b506009546102bd906001600160a01b031681565b6040516001600160a01b039091168152602001610225565b3480156102e157600080fd5b5060025461026f565b3480156102f657600080fd5b5061026f610305366004611760565b60116020526000908152604090205481565b34801561032357600080fd5b5061024e61033236600461177d565b61086f565b34801561034357600080fd5b5061026f610352366004611760565b6108d8565b34801561036357600080fd5b5060405160128152602001610225565b34801561037f57600080fd5b506101f461038e366004611760565b610934565b34801561039f57600080fd5b5061024e6103ae36600461171b565b610a5b565b3480156103bf57600080fd5b5061024e6103ce366004611760565b60106020526000908152604090205460ff1681565b3480156103ef57600080fd5b506101f4610a91565b34801561040457600080fd5b5061026f60125481565b34801561041a57600080fd5b5061026f610429366004611760565b6001600160a01b031660009081526020819052604090205490565b34801561045057600080fd5b506101f4610ac7565b34801561046557600080fd5b5061026f60075481565b34801561047b57600080fd5b506005546001600160a01b03166102bd565b34801561049957600080fd5b5061026f6104a8366004611760565b610b3b565b3480156104b957600080fd5b50610218610b46565b3480156104ce57600080fd5b5061024e6104dd36600461171b565b610b55565b3480156104ee57600080fd5b5061026f6104fd366004611760565b610ba4565b34801561050e57600080fd5b5061024e61051d36600461171b565b610bd0565b34801561052e57600080fd5b5061026f61053d366004611760565b6001600160a01b03166000908152600b602052604090205490565b34801561056457600080fd5b5061024e6105733660046117be565b610bdd565b34801561058457600080fd5b5061026f60135481565b34801561059a57600080fd5b5061026f6105a93660046117fc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105e057600080fd5b506101f46105ef36600461171b565b610c8b565b34801561060057600080fd5b506101f461060f366004611760565b610df5565b34801561062057600080fd5b506008546102bd906001600160a01b031681565b6005546001600160a01b031633146106675760405162461bcd60e51b815260040161065e9061182a565b60405180910390fd5b600061067260025490565b1161067c57600080fd5b34156106f8576106af61068e60025490565b61069c34600160801b610ee0565b6106a69190611875565b60065490610f69565b60065560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26007546106f49034610f69565b6007555b565b60606003805461070990611897565b80601f016020809104026020016040519081016040528092919081815260200182805461073590611897565b80156107825780601f1061075757610100808354040283529160200191610782565b820191906000526020600020905b81548152906001019060200180831161076557829003601f168201915b5050505050905090565b6000610799338484610fc8565b5060015b92915050565b6005546001600160a01b031633146107cd5760405162461bcd60e51b815260040161065e9061182a565b806013540361086a5760405162461bcd60e51b815260206004820152605f60248201527f47726f7743726f70436f72705f4469766964656e645f547261636b65723a206d60448201527f696e696d756d546f6b656e42616c616e6365466f724469766964656e6473206160648201527f6c7265616479207468652076616c7565206f6620276e657756616c7565272e00608482015260a40161065e565b601355565b600061087c8484846110ec565b6108ce84336108c985604051806060016040528060288152602001611979602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611150565b610fc8565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b9261092a926109259261091f9161091a9190610ee0565b61118a565b9061119a565b6111d8565b61079d9190611875565b6005546001600160a01b0316331461095e5760405162461bcd60e51b815260040161065e9061182a565b6001600160a01b03811660009081526010602052604090205460ff161561098457600080fd5b6001600160a01b0381166000908152601060205260408120805460ff191660011790556109b29082906111eb565b60405163131836e760e21b8152600c60048201526001600160a01b0382166024820152735091e135210c96622a92d81a382d111b22838d0290634c60db9c9060440160006040518083038186803b158015610a0c57600080fd5b505af4158015610a20573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107999185906108c99086610f69565b6005546001600160a01b03163314610abb5760405162461bcd60e51b815260040161065e9061182a565b610ac433611250565b50565b6005546001600160a01b03163314610af15760405162461bcd60e51b815260040161065e9061182a565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061079d82610ba4565b60606004805461070990611897565b600061079933846108c9856040518060600160405280602581526020016119a1602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611150565b6001600160a01b0381166000908152600b602052604081205461079d90610bca846108d8565b90611396565b60006107993384846110ec565b6005546000906001600160a01b03163314610c0a5760405162461bcd60e51b815260040161065e9061182a565b6000610c1584611250565b90508015610c81576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610c6f9085815260200190565b60405180910390a3600191505061079d565b5060009392505050565b6005546001600160a01b03163314610cb55760405162461bcd60e51b815260040161065e9061182a565b6001600160a01b03821660009081526010602052604090205460ff16610df1576013548110610d6657610ce882826111eb565b604051632f0ad01760e21b8152600c60048201526001600160a01b038316602482015260448101829052735091e135210c96622a92d81a382d111b22838d029063bc2b405c9060640160006040518083038186803b158015610d4957600080fd5b505af4158015610d5d573d6000803e3d6000fd5b50505050610de4565b610d718260006111eb565b60405163131836e760e21b8152600c60048201526001600160a01b0383166024820152735091e135210c96622a92d81a382d111b22838d0290634c60db9c9060440160006040518083038186803b158015610dcb57600080fd5b505af4158015610ddf573d6000803e3d6000fd5b505050505b610def826001610bdd565b505b5050565b6005546001600160a01b03163314610e1f5760405162461bcd60e51b815260040161065e9061182a565b6001600160a01b038116610e845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003610ef25750600061079d565b6000610efe83856118d1565b905082610f0b8583611875565b14610f625760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161065e565b9392505050565b600080610f7683856118e8565b905083811015610f625760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161065e565b6001600160a01b03831661102a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161065e565b6001600160a01b03821661108b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161065e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152603360248201527f47726f7743726f70436f72705f4469766964656e645f547261636b65723a204e6044820152721bc81d1c985b9cd9995c9cc8185b1b1bddd959606a1b606482015260840161065e565b600081848411156111745760405162461bcd60e51b815260040161065e91906116b8565b50600061118184866118fb565b95945050505050565b6000818181121561079d57600080fd5b6000806111a7838561190e565b9050600083121580156111ba5750838112155b806111cf57506000831280156111cf57508381125b610f6257600080fd5b6000808212156111e757600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561122a5760006112188383611396565b905061122484826113d8565b50610def565b80821015610def57600061123e8284611396565b905061124a848261143c565b50505050565b60008061125c83610ba4565b9050801561138d576001600160a01b0383166000908152600b60205260409020546112879082610f69565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906112d69084815260200190565b60405180910390a26000836001600160a01b031682610bb890604051600060405180830381858888f193505050503d8060008114611330576040519150601f19603f3d011682016040523d82523d6000602084013e611335565b606091505b5050905080611386576001600160a01b0384166000908152600b60205260409020546113619083611396565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6000610f6283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611150565b6113e28282611480565b61141c6113fd61091a83600654610ee090919063ffffffff16565b6001600160a01b0384166000908152600a60205260409020549061156b565b6001600160a01b039092166000908152600a602052604090209190915550565b61144682826115a8565b61141c61146161091a83600654610ee090919063ffffffff16565b6001600160a01b0384166000908152600a60205260409020549061119a565b6001600160a01b0382166114d65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065e565b6114e260008383610def565b6002546114ef9082610f69565b6002556001600160a01b0382166000908152602081905260409020546115159082610f69565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806115788385611936565b90506000831215801561158b5750838113155b806111cf57506000831280156111cf5750838113610f6257600080fd5b6001600160a01b0382166116085760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161065e565b61161482600083610def565b61165181604051806060016040528060228152602001611957602291396001600160a01b0385166000908152602081905260409020549190611150565b6001600160a01b0383166000908152602081905260409020556002546116779082611396565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161155f565b600060208083528351808285015260005b818110156116e5578581018301518582016040015282016116c9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ac457600080fd5b6000806040838503121561172e57600080fd5b823561173981611706565b946020939093013593505050565b60006020828403121561175957600080fd5b5035919050565b60006020828403121561177257600080fd5b8135610f6281611706565b60008060006060848603121561179257600080fd5b833561179d81611706565b925060208401356117ad81611706565b929592945050506040919091013590565b600080604083850312156117d157600080fd5b82356117dc81611706565b9150602083013580151581146117f157600080fd5b809150509250929050565b6000806040838503121561180f57600080fd5b823561181a81611706565b915060208301356117f181611706565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261189257634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806118ab57607f821691505b6020821081036118cb57634e487b7160e01b600052602260045260246000fd5b50919050565b808202811582820484141761079d5761079d61185f565b8082018082111561079d5761079d61185f565b8181038181111561079d5761079d61185f565b808201828112600083128015821682158216171561192e5761192e61185f565b505092915050565b81810360008312801583831316838312821617156113865761138661185f56fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201977687c80a18e2773d17ef1f0760b8e35093230df2951fc8fdf0f3a47e3a2cc64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80636b6d37c5116101ab578063a9059cbb116100f7578063d2d7ad8311610095578063dd62ed3e1161006f578063dd62ed3e146109d0578063f2fde38b14610a16578063fd72e22a14610a36578063fe01753514610a5657600080fd5b8063d2d7ad831461097a578063d322157614610990578063d4698016146109b057600080fd5b8063b62496f5116100d1578063b62496f514610888578063bea9849e146108b8578063c0246668146108d8578063cd43e228146108f857600080fd5b8063a9059cbb14610832578063aa4bde2814610852578063aee50b1e1461086857600080fd5b8063880bcbc111610164578063908f6ba61161013e578063908f6ba6146107bd57806395d89b41146107dd578063a457c2d7146107f2578063a8b9d2401461081257600080fd5b8063880bcbc1146107695780638c0b5e22146107895780638da5cb5b1461079f57600080fd5b80636b6d37c51461069e57806370a08231146106be578063715018a6146106f4578063781edb3c146107095780637c0a893d14610729578063825287911461074957600080fd5b8063313ce567116102855780634626402b116102235780634e71d92d116101fd5780634e71d92d146106345780635ebf4db91461064957806364b0f653146106695780636843cd841461067e57600080fd5b80634626402b146105c057806349bd5a5e146105e05780634d78fdc61461061457600080fd5b8063378dc3dc1161025f578063378dc3dc1461054a578063395093511461056057806345a423291461058057806345ea4ed2146105a057600080fd5b8063313ce567146104f957806331e79db01461051557806334cf1fea1461053557600080fd5b806318160ddd116102f257806323b872dd116102cc57806323b872dd1461048457806327a14fc2146104a45780632c1f5216146104c457806330bb4cff146104e457600080fd5b806318160ddd146104255780631cd348c0146104445780631e293c101461046457600080fd5b8063064a59d01461034557806306fdde0314610374578063095ea7b314610396578063098df585146103b65780630bd05b69146103d85780631694505e146103ed57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5060095461035f9060ff1681565b60405190151581526020015b60405180910390f35b34801561038057600080fd5b50610389610aa5565b60405161036b9190613b56565b3480156103a257600080fd5b5061035f6103b1366004613bb9565b610b37565b3480156103c257600080fd5b506103d66103d1366004613be5565b610b4e565b005b3480156103e457600080fd5b506103d6610c81565b3480156103f957600080fd5b5060065461040d906001600160a01b031681565b6040516001600160a01b03909116815260200161036b565b34801561043157600080fd5b506003545b60405190815260200161036b565b34801561045057600080fd5b5060105461040d906001600160a01b031681565b34801561047057600080fd5b506103d661047f366004613be5565b610cda565b34801561049057600080fd5b5061035f61049f366004613bfe565b610da6565b3480156104b057600080fd5b506103d66104bf366004613be5565b610e0f565b3480156104d057600080fd5b5060075461040d906001600160a01b031681565b3480156104f057600080fd5b50610436610ee3565b34801561050557600080fd5b506040516012815260200161036b565b34801561052157600080fd5b506103d6610530366004613c3f565b610f56565b34801561054157600080fd5b506103d6610fe3565b34801561055657600080fd5b5061043660085481565b34801561056c57600080fd5b5061035f61057b366004613bb9565b611019565b34801561058c57600080fd5b506103d661059b366004613c6a565b61104f565b3480156105ac57600080fd5b506103d66105bb366004613cb9565b61116f565b3480156105cc57600080fd5b5060115461040d906001600160a01b031681565b3480156105ec57600080fd5b5061040d7f0000000000000000000000000d7e8623a2dcb50a4f24a1dd11bee8394065e20481565b34801561062057600080fd5b506103d661062f366004613c3f565b611231565b34801561064057600080fd5b506103d661131c565b34801561065557600080fd5b506103d6610664366004613be5565b611394565b34801561067557600080fd5b506104366113ef565b34801561068a57600080fd5b50610436610699366004613c3f565b611439565b3480156106aa57600080fd5b506103d66106b9366004613cb9565b6114a9565b3480156106ca57600080fd5b506104366106d9366004613c3f565b6001600160a01b031660009081526001602052604090205490565b34801561070057600080fd5b506103d6611500565b34801561071557600080fd5b506103d6610724366004613c6a565b611574565b34801561073557600080fd5b506103d6610744366004613c3f565b611636565b34801561075557600080fd5b506103d6610764366004613d2d565b6117af565b34801561077557600080fd5b506103d6610784366004613c6a565b611c63565b34801561079557600080fd5b50610436600b5481565b3480156107ab57600080fd5b506000546001600160a01b031661040d565b3480156107c957600080fd5b5060125461040d906001600160a01b031681565b3480156107e957600080fd5b50610389611d25565b3480156107fe57600080fd5b5061035f61080d366004613bb9565b611d34565b34801561081e57600080fd5b5061043661082d366004613c3f565b611d83565b34801561083e57600080fd5b5061035f61084d366004613bb9565b611db6565b34801561085e57600080fd5b50610436600a5481565b34801561087457600080fd5b506103d6610883366004613be5565b611dc3565b34801561089457600080fd5b5061035f6108a3366004613c3f565b601f6020526000908152604090205460ff1681565b3480156108c457600080fd5b506103d66108d3366004613c3f565b611ea1565b3480156108e457600080fd5b506103d66108f3366004613c6a565b611fa0565b34801561090457600080fd5b5060155460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b9004165b6040805160ff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c00161036b565b34801561098657600080fd5b50610436600d5481565b34801561099c57600080fd5b506103d66109ab366004613c6a565b612062565b3480156109bc57600080fd5b50600e5461040d906001600160a01b031681565b3480156109dc57600080fd5b506104366109eb366004613d9e565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a2257600080fd5b506103d6610a31366004613c3f565b6120e4565b348015610a4257600080fd5b50600f5461040d906001600160a01b031681565b348015610a6257600080fd5b5060155460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b8204811691600160581b90041661093e565b606060048054610ab490613dcc565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613dcc565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000610b44338484612234565b5060015b92915050565b6000546001600160a01b03163314610b815760405162461bcd60e51b8152600401610b7890613e06565b60405180910390fd5b478110610bed5760405162461bcd60e51b815260206004820152603460248201527f47726f7743726f70436f72703a2043616e6e6f742073656e64206d6f7265207460448201527368616e20636f6e74726163742062616c616e636560601b6064820152608401610b78565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610c3a576040519150601f19603f3d011682016040523d82523d6000602084013e610c3f565b606091505b505090508015610c7d576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6000546001600160a01b03163314610cab5760405162461bcd60e51b8152600401610b7890613e06565b6009805460ff19166001179055601854600003610cd85743601855426017556016805460ff191660011790555b565b6000546001600160a01b03163314610d045760405162461bcd60e51b8152600401610b7890613e06565b600b548103610d735760405162461bcd60e51b815260206004820152603560248201527f47726f7743726f70436f72703a2043616e6e6f7420757064617465206d61785460448201527478416d6f756e7420746f2073616d652076616c756560581b6064820152608401610b78565b600b5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600b55565b6000610db3848484612359565b610e058433610e0085604051806060016040528060288152602001614157602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612973565b612234565b5060019392505050565b6000546001600160a01b03163314610e395760405162461bcd60e51b8152600401610b7890613e06565b600a548103610eb05760405162461bcd60e51b815260206004820152603960248201527f47726f7743726f70436f72703a2043616e6e6f7420757064617465206d61785760448201527f616c6c6574416d6f756e7420746f2073616d652076616c7565000000000000006064820152608401610b78565b600a5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600a55565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f519190613e3b565b905090565b6000546001600160a01b03163314610f805760405162461bcd60e51b8152600401610b7890613e06565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610fc857600080fd5b505af1158015610fdc573d6000803e3d6000fd5b5050505050565b6000546001600160a01b0316331461100d5760405162461bcd60e51b8152600401610b7890613e06565b6009805460ff19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610b44918590610e0090866121ce565b6000546001600160a01b031633146110795760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000908152601b602052604090205481151560ff90911615150361110f5760405162461bcd60e51b815260206004820152603e60248201527f47726f7743726f70436f72703a205468652073656c65637465642077616c6c6560448201527f7420697320616c72656164792073657420746f207468652076616c75652000006064820152608401610b78565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146111995760405162461bcd60e51b8152600401610b7890613e06565b6111a960138787878787876129ad565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff898116845288811660208501528781168484015286811660608501528581166080850152841660a0840152905190917fc5b0189242ee94396fea9d585d7b5ec493a5a69180d0793c05f7525862878af3919081900360c00190a2505050505050565b6000546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b03811660009081526019602052604090205460ff166112cf5760405162461bcd60e51b8152602060048201526024808201527f47726f7743726f70436f72703a204163636f756e74206973206e6f7420626c636044820152631bdad95960e21b6064820152608401610b78565b6001600160a01b038116600081815260196020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af115801561136d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113919190613e54565b50565b6000546001600160a01b031633146113be5760405162461bcd60e51b8152600401610b7890613e06565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610fae565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610f2d573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611485573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b489190613e3b565b6000546001600160a01b031633146114d35760405162461bcd60e51b8152600401610b7890613e06565b6114e36013878787878787612d49565b6040516b62617365466565732d42757960a01b8152600c016111c3565b6000546001600160a01b0316331461152a5760405162461bcd60e51b8152600401610b7890613e06565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461159e5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000908152601e602052604090205481151560ff9091161515036115de5760405162461bcd60e51b8152600401610b7890613e71565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611163565b6000546001600160a01b031633146116605760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b03811660009081526019602052604090205460ff16156116da5760405162461bcd60e51b815260206004820152602860248201527f47726f7743726f70436f72703a204163636f756e7420697320616c726561647960448201526708189b1bd8dad95960c21b6064820152608401610b78565b60165460ff161561175d576202a300601754426116f79190613ee4565b1061175d5760405162461bcd60e51b815260206004820152603060248201527f47726f7743726f70436f72703a2054696d6520746f20626c6f636b206163636f60448201526f1d5b9d1cc81a185cc8195e1c1a5c995960821b6064820152608401610b78565b6001600160a01b038116600081815260196020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146117d95760405162461bcd60e51b8152600401610b7890613e06565b600e546001600160a01b038681169116146118c1576001600160a01b03851661185a5760405162461bcd60e51b815260206004820152602d60248201527f47726f7743726f70436f72703a20546865206c697175696469747957616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610b78565b600e546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691871690600f016040519081900381209060008051602061413783398151915290600090a4600e80546001600160a01b0319166001600160a01b0387161790555b600f546001600160a01b038581169116146119ab576001600160a01b0384166119435760405162461bcd60e51b815260206004820152602e60248201527f47726f7743726f70436f72703a20546865206f7065726174696f6e7357616c6c60448201526d065742063616e6e6f7420626520360941b6064820152608401610b78565b600f546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b03918216918616906010016040519081900381209060008051602061413783398151915290600090a4600f80546001600160a01b0319166001600160a01b0386161790555b6010546001600160a01b03848116911614611a8f576001600160a01b038316611a2a5760405162461bcd60e51b815260206004820152602b60248201527f47726f7743726f70436f72703a20546865206275794261636b57616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610b78565b6010546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691851690600d016040519081900381209060008051602061413783398151915290600090a4601080546001600160a01b0319166001600160a01b0385161790555b6011546001600160a01b03838116911614611b75576001600160a01b038216611b0f5760405162461bcd60e51b815260206004820152602c60248201527f47726f7743726f70436f72703a2054686520747265617375727957616c6c657460448201526b02063616e6e6f7420626520360a41b6064820152608401610b78565b6011546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b0391821691841690600e016040519081900381209060008051602061413783398151915290600090a4601180546001600160a01b0319166001600160a01b0384161790555b6012546001600160a01b03828116911614610fdc576001600160a01b038116611bf55760405162461bcd60e51b815260206004820152602c60248201527f47726f7743726f70436f72703a2054686520706f726b63686f7057616c6c657460448201526b02063616e6e6f7420626520360a41b6064820152608401610b78565b6012546040516d1c1bdc9ad8da1bdc15d85b1b195d60921b81526001600160a01b0391821691831690600e016040519081900381209060008051602061413783398151915290600090a4601280546001600160a01b0383166001600160a01b03199091161790555050505050565b6000546001600160a01b03163314611c8d5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000908152601d602052604090205481151560ff909116151503611ccd5760405162461bcd60e51b8152600401610b7890613e71565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611163565b606060058054610ab490613dcc565b6000610b443384610e008560405180606001604052806025815260200161419f602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612973565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611468565b6000610b44338484612359565b6000546001600160a01b03163314611ded5760405162461bcd60e51b8152600401610b7890613e06565b600d548103611e6e5760405162461bcd60e51b815260206004820152604160248201527f47726f7743726f70436f72703a2043616e6e6f7420757064617465206d696e6960448201527f6d756d546f6b656e734265666f72655377617020746f2073616d652076616c756064820152606560f81b608482015260a401610b78565b600d5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600d55565b6000546001600160a01b03163314611ecb5760405162461bcd60e51b8152600401610b7890613e06565b6006546001600160a01b0390811690821603611f435760405162461bcd60e51b815260206004820152603160248201527f47726f7743726f70436f72703a2054686520726f7574657220616c7265616479604482015270206861732074686174206164647265737360781b6064820152608401610b78565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fca5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000908152601c602052604090205481151560ff90911615150361200a5760405162461bcd60e51b8152600401610b7890613e71565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611163565b6000546001600160a01b0316331461208c5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611163565b6000546001600160a01b0316331461210e5760405162461bcd60e51b8152600401610b7890613e06565b6001600160a01b0381166121735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b78565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806121db8385613ef7565b90508381101561222d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b78565b9392505050565b6001600160a01b0383166122965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b78565b6001600160a01b0382166122f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b78565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661237f5760405162461bcd60e51b8152600401610b7890613f0a565b6001600160a01b0382166123a55760405162461bcd60e51b8152600401610b7890613f4f565b806000036123be576123b9838360006130cc565b505050565b6001600160a01b0383166000908152601a602052604090205460ff1615801561240057506001600160a01b0382166000908152601a602052604090205460ff16155b156126bf5760095460ff1661246c5760405162461bcd60e51b815260206004820152602c60248201527f47726f7743726f70436f72703a2054726164696e672069732063757272656e7460448201526b363c903234b9b0b13632b21760a11b6064820152608401610b78565b6001600160a01b03821660009081526019602052604090205460ff16156124d55760405162461bcd60e51b815260206004820181905260248201527f47726f7743726f70436f72703a204163636f756e7420697320626c6f636b65646044820152606401610b78565b6001600160a01b03831660009081526019602052604090205460ff161561253e5760405162461bcd60e51b815260206004820181905260248201527f47726f7743726f70436f72703a204163636f756e7420697320626c6f636b65646044820152606401610b78565b6001600160a01b0382166000908152601d602052604090205460ff1615801561258057506001600160a01b0383166000908152601d602052604090205460ff16155b156125f457600b548111156125f45760405162461bcd60e51b815260206004820152603460248201527f47726f7743726f70436f72703a2042757920616d6f756e742065786365656473604482015273103a34329036b0bc2a3c213abca0b6b7bab73a1760611b6064820152608401610b78565b6001600160a01b0382166000908152601e602052604090205460ff166126bf57600a5481612637846001600160a01b031660009081526001602052604090205490565b6126419190613ef7565b11156126bf5760405162461bcd60e51b815260206004820152604160248201527f47726f7743726f70436f72703a2045787065637465642077616c6c657420616d60448201527f6f756e74206578636565647320746865206d617857616c6c6574416d6f756e746064820152601760f91b608482015260a401610b78565b6001600160a01b038084166000908152601f60205260408082205492851682529020546126f49160ff908116911685856131d8565b600d54306000908152600160205260409020546009549111159060ff16801561271a5750805b80156127295750600c5460ff16155b80156127405750602054600160301b900460ff1615155b801561276457506001600160a01b0383166000908152601f602052604090205460ff165b1561278957600c805460ff1916600117905561277e613542565b600c805460ff191690555b600c5460009060ff161580156127a1575060095460ff165b6001600160a01b0386166000908152601c602052604090205490915060ff16806127e357506001600160a01b0384166000908152601c602052604090205460ff165b156127ec575060005b8080156128045750602054600160301b900460ff1615155b1561284b5760205460009060649061282690600160301b900460ff1686613f92565b6128309190613fbf565b905061283c8185613ee4565b93506128498630836130cc565b505b6128568585856130cc565b6007546001600160a01b031663e30443bc86612887816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156128cd57600080fd5b505af19250505080156128de575060015b506007546001600160a01b031663e30443bc85612910816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561295657600080fd5b505af1925050508015612967575060015b15610fdc575050505050565b600081848411156129975760405162461bcd60e51b8152600401610b789190613b56565b5060006129a48486613ee4565b95945050505050565b600287015460ff8781166101009092041614612a3e57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028901548954919260ff610100909204821692918a169160008051602061417f83398151915291612a1f9160481b90613fd3565b60405180910390a460028701805461ff00191661010060ff8916021790555b600287015460ff86811663010000009092041614612ad857604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028901548954919260ff63010000009092048216929189169160008051602061417f83398151915291612ab59160481b90613fd3565b60405180910390a460028701805463ff0000001916630100000060ff8816021790555b600287015460ff858116600160281b9092041614612b6f576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028901548954919260ff600160281b9092048216929188169160008051602061417f83398151915291612b4c9160481b90613fd3565b60405180910390a460028701805460ff60281b1916600160281b60ff8716021790555b600287015460ff848116600160381b9092041614612c0b57604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028901548954919260ff600160381b9092048216929187169160008051602061417f83398151915291612be49160481b90613fd3565b60405180910390a460028701805467ff000000000000001916600160381b60ff8616021790555b600287015460ff838116600160481b9092041614612ca957604051701c1bdc9ad8da1bdc11995953db94d95b1b607a1b815260110160405190819003812060028901548954919260ff600160481b9092048216929186169160008051602061417f83398151915291612c809160481b90613fd3565b60405180910390a460028701805469ff0000000000000000001916600160481b60ff8516021790555b600287015460ff828116600160581b9092041614612d40576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028901548954919260ff600160581b9092048216929185169160008051602061417f83398151915291612d1d9160481b90613fd3565b60405180910390a460028701805460ff60581b1916600160581b60ff8416021790555b50505050505050565b600287015460ff878116911614612dca57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028901548954919260ff91821692918a169160008051602061417f83398151915291612db09160481b90613fd3565b60405180910390a460028701805460ff191660ff88161790555b600287015460ff868116620100009092041614612e5f57604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028901548954919260ff620100009092048216929189169160008051602061417f83398151915291612e3e9160481b90613fd3565b60405180910390a460028701805462ff000019166201000060ff8816021790555b600287015460ff858116600160201b9092041614612ef6576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028901548954919260ff600160201b9092048216929188169160008051602061417f83398151915291612ed29160481b90613fd3565b60405180910390a460028701805464ff000000001916600160201b60ff8716021790555b600287015460ff848116600160301b9092041614612f90576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028901548954919260ff600160301b9092048216929187169160008051602061417f83398151915291612f6a9160481b90613fd3565b60405180910390a460028701805466ff0000000000001916600160301b60ff8616021790555b600287015460ff838116600160401b909204161461302c576040516f706f726b63686f704665654f6e42757960801b815260100160405190819003812060028901548954919260ff600160401b9092048216929186169160008051602061417f833981519152916130049160481b90613fd3565b60405180910390a460028701805468ff00000000000000001916600160401b60ff8516021790555b600287015460ff828116600160501b9092041614612d40576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028901548954919260ff600160501b9092048216929185169160008051602061417f8339815191529161309f9160481b90613fd3565b60405180910390a460028701805460ff8316600160501b0260ff60501b1990911617905550505050505050565b6001600160a01b0383166130f25760405162461bcd60e51b8152600401610b7890613f0a565b6001600160a01b0382166131185760405162461bcd60e51b8152600401610b7890613f4f565b61315581604051806060016040528060268152602001614111602691396001600160a01b0386166000908152600160205260409020549190612973565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461318490826121ce565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061234c9085815260200190565b6020805465ffffffffffff1916905583156132b05760165460ff16801561320d575060056018544361320a9190613ee4565b11155b15613224576020805460ff191660641790556132b0565b6015546020805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021765ffff000000001916600160401b850483169190910260ff60281b191617600160501b90930416600160281b029190911790555b8215613348576015546020805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b8086048416620100000263ff000000191691909117600160381b86048416929092029190911765ffff000000001916600160481b85048316600160201b0260ff60281b191617600160581b90940491909116029190911790555b82158015613354575083155b801561339a57506001600160a01b0382166000908152601b602052604090205460ff168061339a57506001600160a01b0381166000908152601b602052604090205460ff165b1561342b576015546020805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021765ffff000000001916600160481b850483169190910260ff60281b191617600160501b90930416600160281b029190911790555b60205460ff600160281b8204811691600160201b81048216916301000000820481169162010000810482169161346991610100810482169116613fea565b6134739190613fea565b61347d9190613fea565b6134879190613fea565b6134919190613fea565b6020805460ff928316600160301b90810266ff00000000000019831681178085556040805192871694871694909417825261010081048616948201949094526201000084048516818401526301000000840485166060820152600160201b840485166080820152600160281b8404851660a0820152920490921660c082015290517f2a4a4430d0dfe3335da17f31f84e9395eaad8f0cad29e482d8315db5856243f79181900360e00190a150505050565b30600090815260016020526040812054602054909150479060009060029060ff600160301b8204811691613577911686613f92565b6135819190613fbf565b61358b9190613fbf565b905060006135998285613ee4565b90506135a481613836565b60006135b08447613ee4565b6020549091506000906135c89060029060ff16614003565b6020546135df9190600160301b900460ff16614025565b60205460ff918216925060009160029184916135fc911686613f92565b6136069190613fbf565b6136109190613fbf565b602054909150600090839061362d90610100900460ff1686613f92565b6136379190613fbf565b60205490915060009084906136559062010000900460ff1687613f92565b61365f9190613fbf565b602054909150600090859061367e906301000000900460ff1688613f92565b6136889190613fbf565b60205490915060009086906136a790600160201b900460ff1689613f92565b6136b19190613fbf565b905060008183866136c2878a613ef7565b6136cc9190613ef7565b6136d69190613ef7565b6136e09190613ef7565b6136ea9089613ee4565b600f54909150613703906001600160a01b031686613990565b601054613719906001600160a01b031685613990565b60115461372f906001600160a01b031684613990565b601254613745906001600160a01b031683613990565b8915613797576137558a87613aa9565b604080518a8152602081018890529081018b90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6007546040516000916001600160a01b03169083908381818185875af1925050503d80600081146137e4576040519150601f19603f3d011682016040523d82523d6000602084013e6137e9565b606091505b505090508015613827576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b50505050505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061386b5761386b61403e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156138c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e89190614054565b816001815181106138fb576138fb61403e565b6001600160a01b0392831660209182029290920101526006546139219130911684612234565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061395a908590600190869030904290600401614071565b600060405180830381600087803b15801561397457600080fd5b505af1158015613988573d6000803e3d6000fd5b505050505050565b804710156139e05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b78565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613a2d576040519150601f19603f3d011682016040523d82523d6000602084013e613a32565b606091505b50509050806123b95760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b78565b600654613ac19030906001600160a01b031684612234565b600654600e5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613b31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fdc91906140e2565b600060208083528351808285015260005b81811015613b8357858101830151858201604001528201613b67565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461139157600080fd5b60008060408385031215613bcc57600080fd5b8235613bd781613ba4565b946020939093013593505050565b600060208284031215613bf757600080fd5b5035919050565b600080600060608486031215613c1357600080fd5b8335613c1e81613ba4565b92506020840135613c2e81613ba4565b929592945050506040919091013590565b600060208284031215613c5157600080fd5b813561222d81613ba4565b801515811461139157600080fd5b60008060408385031215613c7d57600080fd5b8235613c8881613ba4565b91506020830135613c9881613c5c565b809150509250929050565b803560ff81168114613cb457600080fd5b919050565b60008060008060008060c08789031215613cd257600080fd5b613cdb87613ca3565b9550613ce960208801613ca3565b9450613cf760408801613ca3565b9350613d0560608801613ca3565b9250613d1360808801613ca3565b9150613d2160a08801613ca3565b90509295509295509295565b600080600080600060a08688031215613d4557600080fd5b8535613d5081613ba4565b94506020860135613d6081613ba4565b93506040860135613d7081613ba4565b92506060860135613d8081613ba4565b91506080860135613d9081613ba4565b809150509295509295909350565b60008060408385031215613db157600080fd5b8235613dbc81613ba4565b91506020830135613c9881613ba4565b600181811c90821680613de057607f821691505b602082108103613e0057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613e4d57600080fd5b5051919050565b600060208284031215613e6657600080fd5b815161222d81613c5c565b60208082526038908201527f47726f7743726f70436f72703a204163636f756e7420697320616c726561647960408201527f207468652076616c7565206f6620276578636c75646564270000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b4857610b48613ece565b80820180821115610b4857610b48613ece565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610b4857610b48613ece565b634e487b7160e01b600052601260045260246000fd5b600082613fce57613fce613fa9565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff8181168382160190811115610b4857610b48613ece565b600060ff83168061401657614016613fa9565b8060ff84160491505092915050565b60ff8281168282160390811115610b4857610b48613ece565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561406657600080fd5b815161222d81613ba4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140c15784516001600160a01b03168352938301939183019160010161409c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156140f757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122036a28caa941b210de4e763ad4b70ca5303a5cc54f95b1e548b18c95e9db1ea9464736f6c63430008110033

Libraries Used


Deployed Bytecode Sourcemap

21363:25041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21750:28;;;;;;;;;;-1:-1:-1;21750:28:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;21750:28:0;;;;;;;;12891:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13855:169::-;;;;;;;;;;-1:-1:-1;13855:169:0;;;;;:::i;:::-;;:::i;34746:326::-;;;;;;;;;;-1:-1:-1;34746:326:0;;;;;:::i;:::-;;:::i;:::-;;27306:273;;;;;;;;;;;;;:::i;21444:30::-;;;;;;;;;;-1:-1:-1;21444:30:0;;;;-1:-1:-1;;;;;21444:30:0;;;;;;-1:-1:-1;;;;;1579:32:1;;;1561:51;;1549:2;1534:18;21444:30:0;1400:218:1;13212:108:0;;;;;;;;;;-1:-1:-1;13300:12:0;;13212:108;;;1769:25:1;;;1757:2;1742:18;13212:108:0;1623:177:1;22195:28:0;;;;;;;;;;-1:-1:-1;22195:28:0;;;;-1:-1:-1;;;;;22195:28:0;;;33573:276;;;;;;;;;;-1:-1:-1;33573:276:0;;;;;:::i;:::-;;:::i;14032:454::-;;;;;;;;;;-1:-1:-1;14032:454:0;;;;;:::i;:::-;;:::i;33855:281::-;;;;;;;;;;-1:-1:-1;33855:281:0;;;;;:::i;:::-;;:::i;21631:50::-;;;;;;;;;;-1:-1:-1;21631:50:0;;;;-1:-1:-1;;;;;21631:50:0;;;35094:141;;;;;;;;;;;;;:::i;13111:93::-;;;;;;;;;;-1:-1:-1;13111:93:0;;13194:2;2868:36:1;;2856:2;2841:18;13111:93:0;2726:184:1;29646:130:0;;;;;;;;;;-1:-1:-1;29646:130:0;;;;;:::i;:::-;;:::i;27585:91::-;;;;;;;;;;;;;:::i;21690:51::-;;;;;;;;;;;;;;;;14494:218;;;;;;;;;;-1:-1:-1;14494:218:0;;;;;:::i;:::-;;:::i;28975:352::-;;;;;;;;;;-1:-1:-1;28975:352:0;;;;;:::i;:::-;;:::i;32732:523::-;;;;;;;;;;-1:-1:-1;32732:523:0;;;;;:::i;:::-;;:::i;22230:29::-;;;;;;;;;;-1:-1:-1;22230:29:0;;;;-1:-1:-1;;;;;22230:29:0;;;21481:38;;;;;;;;;;;;;;;28732:237;;;;;;;;;;-1:-1:-1;28732:237:0;;;;;:::i;:::-;;:::i;34637:103::-;;;;;;;;;;;;;:::i;34478:153::-;;;;;;;;;;-1:-1:-1;34478:153:0;;;;;:::i;:::-;;:::i;35548:142::-;;;;;;;;;;;;;:::i;35401:141::-;;;;;;;;;;-1:-1:-1;35401:141:0;;;;;:::i;:::-;;:::i;32222:504::-;;;;;;;;;;-1:-1:-1;32222:504:0;;;;;:::i;:::-;;:::i;13328:127::-;;;;;;;;;;-1:-1:-1;13328:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;13429:18:0;13402:7;13429:18;;;:9;:18;;;;;;;13328:127;12047:148;;;;;;;;;;;;;:::i;30149:344::-;;;;;;;;;;-1:-1:-1;30149:344:0;;;;;:::i;:::-;;:::i;28323:403::-;;;;;;;;;;-1:-1:-1;28323:403:0;;;;;:::i;:::-;;:::i;30499:1699::-;;;;;;;;;;-1:-1:-1;30499:1699:0;;;;;:::i;:::-;;:::i;29782:361::-;;;;;;;;;;-1:-1:-1;29782:361:0;;;;;:::i;:::-;;:::i;21949:56::-;;;;;;;;;;;;;;;;11833:79;;;;;;;;;;-1:-1:-1;11871:7:0;11898:6;-1:-1:-1;;;;;11898:6:0;11833:79;;22266:29;;;;;;;;;;-1:-1:-1;22266:29:0;;;;-1:-1:-1;;;;;22266:29:0;;;12999:104;;;;;;;;;;;;;:::i;14720:400::-;;;;;;;;;;-1:-1:-1;14720:400:0;;;;;:::i;:::-;;:::i;35241:154::-;;;;;;;;;;-1:-1:-1;35241:154:0;;;;;:::i;:::-;;:::i;13463:175::-;;;;;;;;;;-1:-1:-1;13463:175:0;;;;;:::i;:::-;;:::i;21829:60::-;;;;;;;;;;;;;;;;34142:330;;;;;;;;;;-1:-1:-1;34142:330:0;;;;;:::i;:::-;;:::i;23471:57::-;;;;;;;;;;-1:-1:-1;23471:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33261:306;;;;;;;;;;-1:-1:-1;33261:306:0;;;;;:::i;:::-;;:::i;29333:307::-;;;;;;;;;;-1:-1:-1;29333:307:0;;;;;:::i;:::-;;:::i;35696:253::-;;;;;;;;;;-1:-1:-1;35801:23:0;;;;;;;35825:24;;;;;;-1:-1:-1;;;35850:21:0;;;;;-1:-1:-1;;;35872:22:0;;;;;-1:-1:-1;;;35895:22:0;;;;;-1:-1:-1;;;35919:21:0;;;35696:253;;;;5469:4:1;5500:15;;;5482:34;;5552:15;;;5547:2;5532:18;;5525:43;5604:15;;;5584:18;;;5577:43;;;;5656:15;;;5651:2;5636:18;;5629:43;5709:15;;5703:3;5688:19;;5681:44;5762:15;;;5756:3;5741:19;;5734:44;5446:3;5431:19;35696:253:0;5196:588:1;22043:68:0;;;;;;;;;;;;;;;;28100:217;;;;;;;;;;-1:-1:-1;28100:217:0;;;;;:::i;:::-;;:::i;22120:30::-;;;;;;;;;;-1:-1:-1;22120:30:0;;;;-1:-1:-1;;;;;22120:30:0;;;13646:201;;;;;;;;;;-1:-1:-1;13646:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;13812:18:0;;;13780:7;13812:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13646:201;12203:244;;;;;;;;;;-1:-1:-1;12203:244:0;;;;;:::i;:::-;;:::i;22157:31::-;;;;;;;;;;-1:-1:-1;22157:31:0;;;;-1:-1:-1;;;;;22157:31:0;;;35955:260;;;;;;;;;;-1:-1:-1;36061:24:0;;;;;;;;;36086:25;;;;;;-1:-1:-1;;;36112:22:0;;;;;-1:-1:-1;;;36135:23:0;;;;;-1:-1:-1;;;36159:23:0;;;;;-1:-1:-1;;;36184:22:0;;;35955:260;;12891:100;12945:13;12978:5;12971:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12891:100;:::o;13855:169::-;13938:4;13955:39;11246:10;13978:7;13987:6;13955:8;:39::i;:::-;-1:-1:-1;14012:4:0;13855:169;;;;;:::o;34746:326::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;;;;;;;;;34835:21:::1;34826:6;:30;34818:95;;;::::0;-1:-1:-1;;;34818:95:0;;7130:2:1;34818:95:0::1;::::0;::::1;7112:21:1::0;7169:2;7149:18;;;7142:30;7208:34;7188:18;;;7181:62;-1:-1:-1;;;7259:18:1;;;7252:50;7319:19;;34818:95:0::1;6928:416:1::0;34818:95:0::1;34925:12;11898:6:::0;;34943:42:::1;::::0;-1:-1:-1;;;;;11898:6:0;;;;34973;;34925:12;34943:42;34925:12;34943:42;34973:6;11898;34943:42:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34924:61;;;35000:7;34996:69;;;35029:24;::::0;1769:25:1;;;35029:24:0::1;::::0;1757:2:1;1742:18;35029:24:0::1;;;;;;;34996:69;34807:265;34746:326:::0;:::o;27306:273::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;27363:16:::1;:23:::0;;-1:-1:-1;;27363:23:0::1;27382:4;27363:23;::::0;;27400:18:::1;::::0;27363:16:::1;27400:23:::0;27397:175:::1;;27461:12;27440:18;:33:::0;27512:15:::1;27488:21;:39:::0;27542:11:::1;:18:::0;;-1:-1:-1;;27542:18:0::1;-1:-1:-1::0;27542:18:0::1;::::0;;27397:175:::1;27306:273::o:0;33573:276::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;33674:11:::1;;33662:8;:23:::0;33654:89:::1;;;::::0;-1:-1:-1;;;33654:89:0;;7761:2:1;33654:89:0::1;::::0;::::1;7743:21:1::0;7800:2;7780:18;;;7773:30;7839:34;7819:18;;;7812:62;-1:-1:-1;;;7890:18:1;;;7883:51;7951:19;;33654:89:0::1;7559:417:1::0;33654:89:0::1;33796:11;::::0;33759:49:::1;::::0;33786:8;;33759:49:::1;::::0;;;::::1;33819:11;:22:::0;33573:276::o;14032:454::-;14172:4;14189:36;14199:6;14207:9;14218:6;14189:9;:36::i;:::-;14236:220;14259:6;11246:10;14307:138;14363:6;14307:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14307:19:0;;;;;;:11;:19;;;;;;;;11246:10;14307:33;;;;;;;;;;:37;:138::i;:::-;14236:8;:220::i;:::-;-1:-1:-1;14474:4:0;14032:454;;;;;:::o;33855:281::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;33951:15:::1;;33939:8;:27:::0;33931:96:::1;;;::::0;-1:-1:-1;;;33931:96:0;;8183:2:1;33931:96:0::1;::::0;::::1;8165:21:1::0;8222:2;8202:18;;;8195:30;8261:34;8241:18;;;8234:62;8332:27;8312:18;;;8305:55;8377:19;;33931:96:0::1;7981:421:1::0;33931:96:0::1;34075:15;::::0;34043:48:::1;::::0;34065:8;;34043:48:::1;::::0;;;::::1;34102:15;:26:::0;33855:281::o;35094:141::-;35184:15;;:43;;;-1:-1:-1;;;35184:43:0;;;;35157:7;;-1:-1:-1;;;;;35184:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35177:50;;35094:141;:::o;29646:130::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;29723:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;29723:45:0;;-1:-1:-1;;;;;1579:32:1;;;29723:45:0::1;::::0;::::1;1561:51:1::0;29723:15:0;;::::1;::::0;:36:::1;::::0;1534:18:1;;29723:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29646:130:::0;:::o;27585:91::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;27644:16:::1;:24:::0;;-1:-1:-1;;27644:24:0::1;::::0;;27585:91::o;14494:218::-;11246:10;14582:4;14631:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14631:34:0;;;;;;;;;;14582:4;;14599:83;;14622:7;;14631:50;;14670:10;14631:38;:50::i;28975:352::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29083:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;29075:121:::1;;;::::0;-1:-1:-1;;;29075:121:0;;8798:2:1;29075:121:0::1;::::0;::::1;8780:21:1::0;8837:2;8817:18;;;8810:30;8876:34;8856:18;;;8849:62;8947:32;8927:18;;;8920:60;8997:19;;29075:121:0::1;8596:426:1::0;29075:121:0::1;-1:-1:-1::0;;;;;29207:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;29207:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29269:50;;154:41:1;;;29269:50:0::1;::::0;127:18:1;29269:50:0::1;;;;;;;;28975:352:::0;;:::o;32732:523::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;32943:146:::1;32967:5;32973:19;32993:20;33014:17;33032:18;33051;33071:17;32943:23;:146::i;:::-;33105:142;::::0;-1:-1:-1;;;9229:28:1;;9282:2;9273:12;33105:142:0::1;;::::0;;;;;::::1;::::0;;5469:4:1;5500:15;;;5482:34;;5552:15;;;5547:2;5532:18;;5525:43;5604:15;;;5584:18;;;5577:43;5656:15;;;5651:2;5636:18;;5629:43;5709:15;;;5703:3;5688:19;;5681:44;5762:15;;5756:3;5741:19;;5734:44;33105:142:0;;;;::::1;::::0;;;;;5446:3:1;33105:142:0;;::::1;32732:523:::0;;;;;;:::o;28732:237::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28811:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;28803:68;;;::::0;-1:-1:-1;;;28803:68:0;;9498:2:1;28803:68:0::1;::::0;::::1;9480:21:1::0;9537:2;9517:18;;;9510:30;9576:34;9556:18;;;9549:62;-1:-1:-1;;;9627:18:1;;;9620:34;9671:19;;28803:68:0::1;9296:400:1::0;28803:68:0::1;-1:-1:-1::0;;;;;28882:19:0;::::1;28904:5;28882:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;28882:27:0::1;::::0;;28925:36;28904:5;;28882:19;28925:36:::1;::::0;28904:5;;28925:36:::1;28732:237:::0;:::o;34637:103::-;34674:15;;:58;;-1:-1:-1;;;34674:58:0;;34713:10;34674:58;;;9885:51:1;34674:15:0;9952:18:1;;;9945:50;-1:-1:-1;;;;;34674:15:0;;;;:30;;9858:18:1;;34674:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34637:103::o;34478:153::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;34570:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;34570:53:0;;::::1;::::0;::::1;1769:25:1::0;;;-1:-1:-1;;;;;34570:15:0;;::::1;::::0;:43:::1;::::0;1742:18:1;;34570:53:0::1;1623:177:1::0;35548:142:0;35641:15;;:41;;;-1:-1:-1;;;35641:41:0;;;;35614:7;;-1:-1:-1;;;;;35641:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;35401:141;35500:15;;:34;;-1:-1:-1;;;35500:34:0;;-1:-1:-1;;;;;1579:32:1;;;35500:34:0;;;1561:51:1;35473:7:0;;35500:15;;:25;;1534:18:1;;35500:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32222:504::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;32426:140:::1;32449:5;32455:18;32474:19;32494:16;32511:17;32530;32549:16;32426:22;:140::i;:::-;32582:136;::::0;-1:-1:-1;;;10458:27:1;;10510:2;10501:12;32582:136:0::1;10256:263:1::0;12047:148:0;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;12154:1:::1;12138:6:::0;;12117:40:::1;::::0;-1:-1:-1;;;;;12138:6:0;;::::1;::::0;12117:40:::1;::::0;12154:1;;12117:40:::1;12185:1;12168:19:::0;;-1:-1:-1;;;;;;12168:19:0::1;::::0;;12047:148::o;30149:344::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30254:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;30246:118:::1;;;;-1:-1:-1::0;;;30246:118:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30375:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;30375:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30440:45;;154:41:1;;;30440:45:0::1;::::0;127:18:1;30440:45:0::1;14:187:1::0;28323:403:0;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28401:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;28400:20;28392:73;;;::::0;-1:-1:-1;;;28392:73:0;;11151:2:1;28392:73:0::1;::::0;::::1;11133:21:1::0;11190:2;11170:18;;;11163:30;11229:34;11209:18;;;11202:62;-1:-1:-1;;;11280:18:1;;;11273:38;11328:19;;28392:73:0::1;10949:404:1::0;28392:73:0::1;28480:11;::::0;::::1;;28476:155;;;28560:6;28535:21;;28517:15;:39;;;;:::i;:::-;28516:50;28508:111;;;::::0;-1:-1:-1;;;28508:111:0;;11825:2:1;28508:111:0::1;::::0;::::1;11807:21:1::0;11864:2;11844:18;;;11837:30;11903:34;11883:18;;;11876:62;-1:-1:-1;;;11954:18:1;;;11947:46;12010:19;;28508:111:0::1;11623:412:1::0;28508:111:0::1;-1:-1:-1::0;;;;;28641:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;28641:26:0::1;28663:4;28641:26:::0;;::::1;::::0;;;28683:35;;28663:4;;28641:19;28683:35:::1;::::0;::::1;28323:403:::0;:::o;30499:1699::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;30687:15:::1;::::0;-1:-1:-1;;;;;30687:37:0;;::::1;:15:::0;::::1;:37;30683:299;;-1:-1:-1::0;;;;;30749:32:0;::::1;30741:90;;;::::0;-1:-1:-1;;;30741:90:0;;12242:2:1;30741:90:0::1;::::0;::::1;12224:21:1::0;12281:2;12261:18;;;12254:30;12320:34;12300:18;;;12293:62;-1:-1:-1;;;12371:18:1;;;12364:43;12424:19;;30741:90:0::1;12040:409:1::0;30741:90:0::1;30903:15;::::0;30851:68:::1;::::0;-1:-1:-1;;;12656:30:1;;-1:-1:-1;;;;;30903:15:0;;::::1;::::0;30851:68;::::1;::::0;12711:2:1;12702:12;30851:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;30851:68:0;;;::::1;30934:15;:36:::0;;-1:-1:-1;;;;;;30934:36:0::1;-1:-1:-1::0;;;;;30934:36:0;::::1;;::::0;;30683:299:::1;30996:16;::::0;-1:-1:-1;;;;;30996:39:0;;::::1;:16:::0;::::1;:39;30992:308;;-1:-1:-1::0;;;;;31060:33:0;::::1;31052:92;;;::::0;-1:-1:-1;;;31052:92:0;;12927:2:1;31052:92:0::1;::::0;::::1;12909:21:1::0;12966:2;12946:18;;;12939:30;13005:34;12985:18;;;12978:62;-1:-1:-1;;;13056:18:1;;;13049:44;13110:19;;31052:92:0::1;12725:410:1::0;31052:92:0::1;31218:16;::::0;31164:71:::1;::::0;-1:-1:-1;;;13342:31:1;;-1:-1:-1;;;;;31218:16:0;;::::1;::::0;31164:71;::::1;::::0;13398:2:1;13389:12;31164:71:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;31164:71:0;;;::::1;31250:16;:38:::0;;-1:-1:-1;;;;;;31250:38:0::1;-1:-1:-1::0;;;;;31250:38:0;::::1;;::::0;;30992:308:::1;31314:13;::::0;-1:-1:-1;;;;;31314:33:0;;::::1;:13:::0;::::1;:33;31310:281;;-1:-1:-1::0;;;;;31372:30:0;::::1;31364:86;;;::::0;-1:-1:-1;;;31364:86:0;;13614:2:1;31364:86:0::1;::::0;::::1;13596:21:1::0;13653:2;13633:18;;;13626:30;13692:34;13672:18;;;13665:62;-1:-1:-1;;;13743:18:1;;;13736:41;13794:19;;31364:86:0::1;13412:407:1::0;31364:86:0::1;31518:13;::::0;31470:62:::1;::::0;-1:-1:-1;;;14026:28:1;;-1:-1:-1;;;;;31518:13:0;;::::1;::::0;31470:62;::::1;::::0;14079:2:1;14070:12;31470:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;31470:62:0;;;::::1;31547:13;:32:::0;;-1:-1:-1;;;;;;31547:32:0::1;-1:-1:-1::0;;;;;31547:32:0;::::1;;::::0;;31310:281:::1;31605:14;::::0;-1:-1:-1;;;;;31605:35:0;;::::1;:14:::0;::::1;:35;31601:290;;-1:-1:-1::0;;;;;31665:31:0;::::1;31657:88;;;::::0;-1:-1:-1;;;31657:88:0;;14295:2:1;31657:88:0::1;::::0;::::1;14277:21:1::0;14334:2;14314:18;;;14307:30;14373:34;14353:18;;;14346:62;-1:-1:-1;;;14424:18:1;;;14417:42;14476:19;;31657:88:0::1;14093:408:1::0;31657:88:0::1;31815:14;::::0;31765:65:::1;::::0;-1:-1:-1;;;14708:29:1;;-1:-1:-1;;;;;31815:14:0;;::::1;::::0;31765:65;::::1;::::0;14762:2:1;14753:12;31765:65:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;31765:65:0;;;::::1;31845:14;:34:::0;;-1:-1:-1;;;;;;31845:34:0::1;-1:-1:-1::0;;;;;31845:34:0;::::1;;::::0;;31601:290:::1;31905:14;::::0;-1:-1:-1;;;;;31905:35:0;;::::1;:14:::0;::::1;:35;31901:290;;-1:-1:-1::0;;;;;31965:31:0;::::1;31957:88;;;::::0;-1:-1:-1;;;31957:88:0;;14978:2:1;31957:88:0::1;::::0;::::1;14960:21:1::0;15017:2;14997:18;;;14990:30;15056:34;15036:18;;;15029:62;-1:-1:-1;;;15107:18:1;;;15100:42;15159:19;;31957:88:0::1;14776:408:1::0;31957:88:0::1;32115:14;::::0;32065:65:::1;::::0;-1:-1:-1;;;15391:29:1;;-1:-1:-1;;;;;32115:14:0;;::::1;::::0;32065:65;::::1;::::0;15445:2:1;15436:12;32065:65:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;32065:65:0;;;::::1;32145:14;:34:::0;;-1:-1:-1;;;;;32145:34:0;::::1;-1:-1:-1::0;;;;;;32145:34:0;;::::1;;::::0;;30499:1699;;;;;:::o;29782:361::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29892:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;29884:123:::1;;;;-1:-1:-1::0;;;29884:123:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30018:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;30018:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30088:47;;154:41:1;;;30088:47:0::1;::::0;127:18:1;30088:47:0::1;14:187:1::0;12999:104:0;13055:13;13088:7;13081:14;;;;;:::i;14720:400::-;14840:4;14862:228;11246:10;14912:7;14934:145;14991:15;14934:145;;;;;;;;;;;;;;;;;11246:10;14934:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14934:34:0;;;;;;;;;;;;:38;:145::i;35241:154::-;35340:15;;:47;;-1:-1:-1;;;35340:47:0;;-1:-1:-1;;;;;1579:32:1;;;35340:47:0;;;1561:51:1;35313:7:0;;35340:15;;:38;;1534:18:1;;35340:47:0;1400:218:1;13463:175:0;13549:4;13566:42;11246:10;13590:9;13601:6;13566:9;:42::i;34142:330::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;34246:23:::1;;34234:8;:35:::0;34226:112:::1;;;::::0;-1:-1:-1;;;34226:112:0;;15661:2:1;34226:112:0::1;::::0;::::1;15643:21:1::0;15700:2;15680:18;;;15673:30;15739:34;15719:18;;;15712:62;15810:34;15790:18;;;15783:62;-1:-1:-1;;;15861:19:1;;;15854:32;15903:19;;34226:112:0::1;15459:469:1::0;34226:112:0::1;34395:23;::::0;34354:65:::1;::::0;34385:8;;34354:65:::1;::::0;;;::::1;34430:23;:34:::0;34142:330::o;33261:306::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;33367:15:::1;::::0;-1:-1:-1;;;;;33367:15:0;;::::1;33345:38:::0;;::::1;::::0;33337:99:::1;;;::::0;-1:-1:-1;;;33337:99:0;;16135:2:1;33337:99:0::1;::::0;::::1;16117:21:1::0;16174:2;16154:18;;;16147:30;16213:34;16193:18;;;16186:62;-1:-1:-1;;;16264:18:1;;;16257:47;16321:19;;33337:99:0::1;15933:413:1::0;33337:99:0::1;33494:15;::::0;33452:59:::1;::::0;-1:-1:-1;;;;;33494:15:0;;::::1;::::0;33452:59;::::1;::::0;::::1;::::0;33494:15:::1;::::0;33452:59:::1;33522:15;:37:::0;;-1:-1:-1;;;;;;33522:37:0::1;-1:-1:-1::0;;;;;33522:37:0;;;::::1;::::0;;;::::1;::::0;;33261:306::o;29333:307::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29428:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;29420:107:::1;;;;-1:-1:-1::0;;;29420:107:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29538:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;29538:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29592:40;;154:41:1;;;29592:40:0::1;::::0;127:18:1;29592:40:0::1;14:187:1::0;28100:217:0;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28195:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;28195:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28259:50;;154:41:1;;;28259:50:0::1;::::0;127:18:1;28259:50:0::1;14:187:1::0;12203:244:0;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12292:22:0;::::1;12284:73;;;::::0;-1:-1:-1;;;12284:73:0;;16553:2:1;12284:73:0::1;::::0;::::1;16535:21:1::0;16592:2;16572:18;;;16565:30;16631:34;16611:18;;;16604:62;-1:-1:-1;;;16682:18:1;;;16675:36;16728:19;;12284:73:0::1;16351:402:1::0;12284:73:0::1;12394:6;::::0;;12373:38:::1;::::0;-1:-1:-1;;;;;12373:38:0;;::::1;::::0;12394:6;::::1;::::0;12373:38:::1;::::0;::::1;12422:6;:17:::0;;-1:-1:-1;;;;;;12422:17:0::1;-1:-1:-1::0;;;;;12422:17:0;;;::::1;::::0;;;::::1;::::0;;12203:244::o;2869:181::-;2927:7;;2959:5;2963:1;2959;:5;:::i;:::-;2947:17;;2988:1;2983;:6;;2975:46;;;;-1:-1:-1;;;2975:46:0;;17090:2:1;2975:46:0;;;17072:21:1;17129:2;17109:18;;;17102:30;17168:29;17148:18;;;17141:57;17215:18;;2975:46:0;16888:351:1;2975:46:0;3041:1;2869:181;-1:-1:-1;;;2869:181:0:o;16509:378::-;-1:-1:-1;;;;;16645:19:0;;16637:68;;;;-1:-1:-1;;;16637:68:0;;17446:2:1;16637:68:0;;;17428:21:1;17485:2;17465:18;;;17458:30;17524:34;17504:18;;;17497:62;-1:-1:-1;;;17575:18:1;;;17568:34;17619:19;;16637:68:0;17244:400:1;16637:68:0;-1:-1:-1;;;;;16724:21:0;;16716:68;;;;-1:-1:-1;;;16716:68:0;;17851:2:1;16716:68:0;;;17833:21:1;17890:2;17870:18;;;17863:30;17929:34;17909:18;;;17902:62;-1:-1:-1;;;17980:18:1;;;17973:32;18022:19;;16716:68:0;17649:398:1;16716:68:0;-1:-1:-1;;;;;16795:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16847:32;;1769:25:1;;;16847:32:0;;1742:18:1;16847:32:0;;;;;;;;16509:378;;;:::o;36234:2204::-;-1:-1:-1;;;;;36366:18:0;;36358:68;;;;-1:-1:-1;;;36358:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36445:16:0;;36437:64;;;;-1:-1:-1;;;36437:64:0;;;;;;;:::i;:::-;36518:6;36528:1;36518:11;36514:93;;36546:28;36562:4;36568:2;36572:1;36546:15;:28::i;:::-;36234:2204;;;:::o;36514:93::-;-1:-1:-1;;;;;36624:35:0;;;;;;:29;:35;;;;;;;;36623:36;:74;;;;-1:-1:-1;;;;;;36664:33:0;;;;;;:29;:33;;;;;;;;36663:34;36623:74;36619:767;;;36722:16;;;;36714:73;;;;-1:-1:-1;;;36714:73:0;;19064:2:1;36714:73:0;;;19046:21:1;19103:2;19083:18;;;19076:30;19142:34;19122:18;;;19115:62;-1:-1:-1;;;19193:18:1;;;19186:42;19245:19;;36714:73:0;18862:408:1;36714:73:0;-1:-1:-1;;;;;36811:14:0;;;;;;:10;:14;;;;;;;;36810:15;36802:60;;;;-1:-1:-1;;;36802:60:0;;19477:2:1;36802:60:0;;;19459:21:1;;;19496:18;;;19489:30;19555:34;19535:18;;;19528:62;19607:18;;36802:60:0;19275:356:1;36802:60:0;-1:-1:-1;;;;;36886:16:0;;;;;;:10;:16;;;;;;;;36885:17;36877:62;;;;-1:-1:-1;;;36877:62:0;;19477:2:1;36877:62:0;;;19459:21:1;;;19496:18;;;19489:30;19555:34;19535:18;;;19528:62;19607:18;;36877:62:0;19275:356:1;36877:62:0;-1:-1:-1;;;;;36959:38:0;;;;;;:34;:38;;;;;;;;36958:39;:84;;;;-1:-1:-1;;;;;;37002:40:0;;;;;;:34;:40;;;;;;;;37001:41;36958:84;36954:211;;;37081:11;;37071:6;:21;;37063:86;;;;-1:-1:-1;;;37063:86:0;;19838:2:1;37063:86:0;;;19820:21:1;19877:2;19857:18;;;19850:30;19916:34;19896:18;;;19889:62;-1:-1:-1;;;19967:18:1;;;19960:50;20027:19;;37063:86:0;19636:416:1;37063:86:0;-1:-1:-1;;;;;37184:33:0;;;;;;:29;:33;;;;;;;;37179:196;;37274:15;;37263:6;37247:13;37257:2;-1:-1:-1;;;;;13429:18:0;13402:7;13429:18;;;:9;:18;;;;;;;13328:127;37247:13;:22;;;;:::i;:::-;37246:43;;37238:121;;;;-1:-1:-1;;;37238:121:0;;20259:2:1;37238:121:0;;;20241:21:1;20298:2;20278:18;;;20271:30;20337:34;20317:18;;;20310:62;20408:34;20388:18;;;20381:62;-1:-1:-1;;;20459:19:1;;;20452:32;20501:19;;37238:121:0;20057:469:1;37238:121:0;-1:-1:-1;;;;;37411:31:0;;;;;;;:25;:31;;;;;;;37444:29;;;;;;;;37398:86;;37411:31;;;;;37444:29;37437:4;37470:2;37398:12;:86::i;:::-;37538:23;;37528:4;37495:12;13429:18;;;:9;:18;;;;;;37592:16;;-1:-1:-1;;37510:51:0;;37592:16;;:40;;;;;37625:7;37592:40;:67;;;;-1:-1:-1;37650:9:0;;;;37649:10;37592:67;:97;;;;-1:-1:-1;37676:9:0;;-1:-1:-1;;;37676:9:0;;;;:13;;37592:97;:143;;;;-1:-1:-1;;;;;;37706:29:0;;;;;;:25;:29;;;;;;;;37592:143;37574:280;;;37762:9;:16;;-1:-1:-1;;37762:16:0;37774:4;37762:16;;;37793:17;:15;:17::i;:::-;37825:9;:17;;-1:-1:-1;;37825:17:0;;;37574:280;37882:9;;37866:12;;37882:9;;37881:10;:30;;;;-1:-1:-1;37895:16:0;;;;37881:30;-1:-1:-1;;;;;37928:24:0;;;;;;:18;:24;;;;;;37866:45;;-1:-1:-1;37928:24:0;;;:50;;-1:-1:-1;;;;;;37956:22:0;;;;;;:18;:22;;;;;;;;37928:50;37924:98;;;-1:-1:-1;38005:5:0;37924:98;38036:7;:24;;;;-1:-1:-1;38047:9:0;;-1:-1:-1;;;38047:9:0;;;;:13;;38036:24;38032:189;;;38101:9;;38077:11;;38114:3;;38092:18;;-1:-1:-1;;;38101:9:0;;;;38092:6;:18;:::i;:::-;38091:26;;;;:::i;:::-;38077:40;-1:-1:-1;38141:12:0;38077:40;38141:6;:12;:::i;:::-;38132:21;;38168:41;38184:4;38198;38205:3;38168:15;:41::i;:::-;38062:159;38032:189;38231:33;38247:4;38253:2;38257:6;38231:15;:33::i;:::-;38281:15;;-1:-1:-1;;;;;38281:15:0;:26;38316:4;38323:15;38316:4;-1:-1:-1;;;;;13429:18:0;13402:7;13429:18;;;:9;:18;;;;;;;13328:127;38323:15;38281:58;;-1:-1:-1;;;;;;38281:58:0;;;;;;;-1:-1:-1;;;;;21169:32:1;;;38281:58:0;;;21151:51:1;21218:18;;;21211:34;21124:18;;38281:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38277:74;38365:15;;-1:-1:-1;;;;;38365:15:0;:26;38400:2;38405:13;38400:2;-1:-1:-1;;;;;13429:18:0;13402:7;13429:18;;;:9;:18;;;;;;;13328:127;38405:13;38365:54;;-1:-1:-1;;;;;;38365:54:0;;;;;;;-1:-1:-1;;;;;21169:32:1;;;38365:54:0;;;21151:51:1;21218:18;;;21211:34;21124:18;;38365:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38361:70;;;36347:2091;;36234:2204;;;:::o;3202:226::-;3322:7;3358:12;3350:6;;;;3342:29;;;;-1:-1:-1;;;3342:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3382:9:0;3394:5;3398:1;3394;:5;:::i;:::-;3382:17;3202:226;-1:-1:-1;;;;;3202:226:0:o;40277:1713::-;40514:22;;;;:45;;;;:22;;;;;:45;40510:243;;40581:101;;-1:-1:-1;;;21458:33:1;;21516:2;21507:12;40581:101:0;;;;;;;;40623:22;;;;40667:14;;40581:101;;40623:22;;;;;;;;40581:101;;;;-1:-1:-1;;;;;;;;;;;40581:101:0;;;40667:14;;;40581:101;:::i;:::-;;;;;;;;40697:22;;;:44;;-1:-1:-1;;40697:44:0;;;;;;;;;40510:243;40767:23;;;;:47;;;;:23;;;;;:47;40763:250;;40836:104;;-1:-1:-1;;;21946:34:1;;22005:2;21996:12;40836:104:0;;;;;;;;40879:23;;;;40925:14;;40836:104;;40879:23;;;;;;;;40836:104;;;;-1:-1:-1;;;;;;;;;;;40836:104:0;;;40925:14;;;40836:104;:::i;:::-;;;;;;;;40955:23;;;:46;;-1:-1:-1;;40955:46:0;;;;;;;;;40763:250;41027:20;;;;:41;;;;-1:-1:-1;;;41027:20:0;;;;:41;41023:229;;41090:95;;-1:-1:-1;;;22221:31:1;;22277:2;22268:12;41090:95:0;;;;;;;;41130:20;;;;41170:14;;41090:95;;41130:20;-1:-1:-1;;;41130:20:0;;;;;;41090:95;;;;-1:-1:-1;;;;;;;;;;;41090:95:0;;;41170:14;;;41090:95;:::i;:::-;;;;;;;;41200:20;;;:40;;-1:-1:-1;;;;41200:40:0;-1:-1:-1;;;41200:40:0;;;;;;;41023:229;41266:21;;;;:43;;;;-1:-1:-1;;;41266:21:0;;;;:43;41262:236;;41331:98;;-1:-1:-1;;;22493:32:1;;22550:2;22541:12;41331:98:0;;;;;;;;41372:21;;;;41414:14;;41331:98;;41372:21;-1:-1:-1;;;41372:21:0;;;;;;41331:98;;;;-1:-1:-1;;;;;;;;;;;41331:98:0;;;41414:14;;;41331:98;:::i;:::-;;;;;;;;41444:21;;;:42;;-1:-1:-1;;41444:42:0;-1:-1:-1;;;41444:42:0;;;;;;;41262:236;41512:21;;;;:43;;;;-1:-1:-1;;;41512:21:0;;;;:43;41508:236;;41577:98;;-1:-1:-1;;;22766:32:1;;22823:2;22814:12;41577:98:0;;;;;;;;41618:21;;;;41660:14;;41577:98;;41618:21;-1:-1:-1;;;41618:21:0;;;;;;41577:98;;;;-1:-1:-1;;;;;;;;;;;41577:98:0;;;41660:14;;;41577:98;:::i;:::-;;;;;;;;41690:21;;;:42;;-1:-1:-1;;41690:42:0;-1:-1:-1;;;41690:42:0;;;;;;;41508:236;41758:20;;;;:41;;;;-1:-1:-1;;;41758:20:0;;;;:41;41754:229;;41821:95;;-1:-1:-1;;;23039:31:1;;23095:2;23086:12;41821:95:0;;;;;;;;41861:20;;;;41901:14;;41821:95;;41861:20;-1:-1:-1;;;41861:20:0;;;;;;41821:95;;;;-1:-1:-1;;;;;;;;;;;41821:95:0;;;41901:14;;;41821:95;:::i;:::-;;;;;;;;41931:20;;;:40;;-1:-1:-1;;;;41931:40:0;-1:-1:-1;;;41931:40:0;;;;;;;41754:229;40277:1713;;;;;;;:::o;41996:1665::-;42227:21;;;;:43;;;;:21;;:43;42223:236;;42292:98;;-1:-1:-1;;;23311:32:1;;23368:2;23359:12;42292:98:0;;;;;;;;42333:21;;;;42375:14;;42292:98;;42333:21;;;;;42292:98;;;;-1:-1:-1;;;;;;;;;;;42292:98:0;;;42375:14;;;42292:98;:::i;:::-;;;;;;;;42405:21;;;:42;;-1:-1:-1;;42405:42:0;;;;;;;42223:236;42473:22;;;;:45;;;;:22;;;;;:45;42469:243;;42540:101;;-1:-1:-1;;;23584:33:1;;23642:2;23633:12;42540:101:0;;;;;;;;42582:22;;;;42626:14;;42540:101;;42582:22;;;;;;;;42540:101;;;;-1:-1:-1;;;;;;;;;;;42540:101:0;;;42626:14;;;42540:101;:::i;:::-;;;;;;;;42656:22;;;:44;;-1:-1:-1;;42656:44:0;;;;;;;;;42469:243;42726:19;;;;:39;;;;-1:-1:-1;;;42726:19:0;;;;:39;42722:222;;42787:92;;-1:-1:-1;;;23858:30:1;;23913:2;23904:12;42787:92:0;;;;;;;;42826:19;;;;42864:14;;42787:92;;42826:19;-1:-1:-1;;;42826:19:0;;;;;;42787:92;;;;-1:-1:-1;;;;;;;;;;;42787:92:0;;;42864:14;;;42787:92;:::i;:::-;;;;;;;;42894:19;;;:38;;-1:-1:-1;;42894:38:0;-1:-1:-1;;;42894:38:0;;;;;;;42722:222;42958:20;;;;:41;;;;-1:-1:-1;;;42958:20:0;;;;:41;42954:229;;43021:95;;-1:-1:-1;;;24129:31:1;;24185:2;24176:12;43021:95:0;;;;;;;;43061:20;;;;43101:14;;43021:95;;43061:20;-1:-1:-1;;;43061:20:0;;;;;;43021:95;;;;-1:-1:-1;;;;;;;;;;;43021:95:0;;;43101:14;;;43021:95;:::i;:::-;;;;;;;;43131:20;;;:40;;-1:-1:-1;;43131:40:0;-1:-1:-1;;;43131:40:0;;;;;;;42954:229;43197:20;;;;:41;;;;-1:-1:-1;;;43197:20:0;;;;:41;43193:229;;43260:95;;-1:-1:-1;;;24401:31:1;;24457:2;24448:12;43260:95:0;;;;;;;;43300:20;;;;43340:14;;43260:95;;43300:20;-1:-1:-1;;;43300:20:0;;;;;;43260:95;;;;-1:-1:-1;;;;;;;;;;;43260:95:0;;;43340:14;;;43260:95;:::i;:::-;;;;;;;;43370:20;;;:40;;-1:-1:-1;;43370:40:0;-1:-1:-1;;;43370:40:0;;;;;;;43193:229;43436:19;;;;:39;;;;-1:-1:-1;;;43436:19:0;;;;:39;43432:222;;43497:92;;-1:-1:-1;;;24673:30:1;;24728:2;24719:12;43497:92:0;;;;;;;;43536:19;;;;43574:14;;43497:92;;43536:19;-1:-1:-1;;;43536:19:0;;;;;;43497:92;;;;-1:-1:-1;;;;;;;;;;;43497:92:0;;;43574:14;;;43497:92;:::i;:::-;;;;;;;;43604:19;;;:38;;;;;-1:-1:-1;;;43604:38:0;-1:-1:-1;;;;43604:38:0;;;;;;41996:1665;;;;;;;:::o;15128:569::-;-1:-1:-1;;;;;15268:20:0;;15260:70;;;;-1:-1:-1;;;15260:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15349:23:0;;15341:71;;;;-1:-1:-1;;;15341:71:0;;;;;;;:::i;:::-;15501;15523:6;15501:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15501:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;15481:17:0;;;;;;;:9;:17;;;;;;:91;;;;15606:20;;;;;;;:32;;15631:6;15606:24;:32::i;:::-;-1:-1:-1;;;;;15583:20:0;;;;;;;:9;:20;;;;;;;:55;;;;15654:35;;;;;;;;;;15682:6;1769:25:1;;1757:2;1742:18;;1623:177;38444:1827:0;38543:13;:17;;-1:-1:-1;;38680:15:0;;;38708:516;;;;38744:11;;;;:53;;;;;38796:1;38774:18;;38759:12;:33;;;;:::i;:::-;:38;;38744:53;38740:473;;;38818:13;:19;;-1:-1:-1;;38818:19:0;38834:3;38818:19;;;38740:473;;;38894:23;;38878:13;:39;;38894:23;;;;-1:-1:-1;;38936:41:0;;;;;;;38894:23;38953:24;;;;;;38936:41;;;;;;;;-1:-1:-1;;39050:37:0;-1:-1:-1;;;39010:21:0;;;;;38996:35;;;;-1:-1:-1;;39050:37:0;;-1:-1:-1;;;39065:22:0;;;;39050:37;;;-1:-1:-1;;39162:35:0;-1:-1:-1;;;39121:22:0;;;;39106:37;;;;-1:-1:-1;;;;39162:35:0;;-1:-1:-1;;;39176:21:0;;;;-1:-1:-1;;;39162:35:0;;;;;;;38740:473;39238:10;39234:348;;;39281:24;;39265:13;:40;;39281:24;;;;;;;;-1:-1:-1;;39320:42:0;;;;;;;39337:25;;;;;;39320:42;;;;;-1:-1:-1;;39428:38:0;-1:-1:-1;;;39391:22:0;;;;;39377:36;;-1:-1:-1;;39428:38:0;;;;;-1:-1:-1;;;39443:23:0;;;;39428:38;;;;;;;;-1:-1:-1;;39534:36:0;-1:-1:-1;;;39496:23:0;;;;-1:-1:-1;;;39481:38:0;-1:-1:-1;;;;39534:36:0;;-1:-1:-1;;;39548:22:0;;;;;;;39534:36;;;;;;;39234:348;39597:10;39596:11;:27;;;;;39612:11;39611:12;39596:27;:105;;;;-1:-1:-1;;;;;;39628:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;39667:33:0;;;;;;:29;:33;;;;;;;;39628:72;39592:438;;;39734:23;;39718:13;:39;;39734:23;;;;-1:-1:-1;;39772:41:0;;;;;;;39734:23;39789:24;;;;;;39772:41;;;;;;;;-1:-1:-1;;39878:37:0;-1:-1:-1;;;39842:21:0;;;;;39828:35;;;;-1:-1:-1;;39878:37:0;;-1:-1:-1;;;39893:22:0;;;;39878:37;;;-1:-1:-1;;39983:35:0;-1:-1:-1;;;39945:23:0;;;;39930:38;;;;-1:-1:-1;;;;39983:35:0;;-1:-1:-1;;;39997:21:0;;;;-1:-1:-1;;;39983:35:0;;;;;;;39592:438;40129:11;;;-1:-1:-1;;;40129:11:0;;;;;-1:-1:-1;;;40114:12:0;;;;;40099;;;;;;40085:11;;;;;;40052:30;;40129:11;40068:14;;;;;40052:13;:30;:::i;:::-;:44;;;;:::i;:::-;:59;;;;:::i;:::-;:74;;;;:::i;:::-;:88;;;;:::i;:::-;40040:9;:100;;;;;;-1:-1:-1;;;40040:100:0;;;-1:-1:-1;;40040:100:0;;;;;;;40156:107;;;40168:13;;;;;;;;;;25205:34:1;;40040:100:0;40183:14;;;;25255:18:1;;;25248:43;;;;40199:11:0;;;;;25307:18:1;;;25300:43;40212:12:0;;;;;25374:2:1;25359:18;;25352:43;-1:-1:-1;;;40226:12:0;;;;25426:3:1;25411:19;;25404:44;-1:-1:-1;;;40240:11:0;;;;25479:3:1;25464:19;;25457:44;40253:9:0;;;;;25532:3:1;25517:19;;25510:44;40156:107:0;;;;;;;25169:3:1;40156:107:0;;;38444:1827;;;;:::o;43669:1791::-;43759:4;43715:23;13429:18;;;:9;:18;;;;;;43900:9;;43715:50;;-1:-1:-1;43804:21:0;;43776:25;;43912:1;;43900:9;-1:-1:-1;;;43900:9:0;;;;;43865:31;;43883:13;43715:50;43865:31;:::i;:::-;43864:45;;;;:::i;:::-;:49;;;;:::i;:::-;43838:75;-1:-1:-1;43924:20:0;43947:33;43838:75;43947:15;:33;:::i;:::-;43924:56;;43993:31;44011:12;43993:17;:31::i;:::-;44037:27;44067:41;44091:17;44067:21;:41;:::i;:::-;44154:13;;44037:71;;-1:-1:-1;44119:19:0;;44154:17;;44170:1;;44154:13;;:17;:::i;:::-;44141:9;;:31;;;-1:-1:-1;;;44141:9:0;;;;:31;:::i;:::-;44235:13;;44119:53;;;;;-1:-1:-1;44183:26:0;;44266:1;;44119:53;;44213:35;;44235:13;44213:19;:35;:::i;:::-;44212:51;;;;:::i;:::-;:55;;;;:::i;:::-;44331:14;;44183:84;;-1:-1:-1;44278:27:0;;44349:11;;44309:36;;44331:14;;;;;44309:19;:36;:::i;:::-;44308:52;;;;:::i;:::-;44421:11;;44278:82;;-1:-1:-1;44371:24:0;;44436:11;;44399:33;;44421:11;;;;;44399:19;:33;:::i;:::-;44398:49;;;;:::i;:::-;44509:12;;44371:76;;-1:-1:-1;44458:25:0;;44525:11;;44487:34;;44509:12;;;;;44487:19;:34;:::i;:::-;44486:50;;;;:::i;:::-;44598:12;;44458:78;;-1:-1:-1;44547:25:0;;44614:11;;44576:34;;-1:-1:-1;;;44598:12:0;;;;44576:19;:34;:::i;:::-;44575:50;;;;:::i;:::-;44547:78;-1:-1:-1;44636:24:0;44547:78;44748:17;44726:19;44686:37;44707:16;44686:18;:37;:::i;:::-;:59;;;;:::i;:::-;:79;;;;:::i;:::-;:99;;;;:::i;:::-;44663:123;;:19;:123;:::i;:::-;44825:16;;44636:150;;-1:-1:-1;44799:64:0;;-1:-1:-1;;;;;44825:16:0;44843:19;44799:17;:64::i;:::-;44900:13;;44874:58;;-1:-1:-1;;;;;44900:13:0;44915:16;44874:17;:58::i;:::-;44969:14;;44943:60;;-1:-1:-1;;;;;44969:14:0;44985:17;44943;:60::i;:::-;45040:14;;45014:61;;-1:-1:-1;;;;;45040:14:0;45057:17;45014;:61::i;:::-;45092:19;;45088:187;;45128:50;45142:15;45159:18;45128:13;:50::i;:::-;45198:65;;;26093:25:1;;;26149:2;26134:18;;26127:34;;;26177:18;;;26170:34;;;45198:65:0;;26081:2:1;26066:18;45198:65:0;;;;;;;45088:187;45314:15;;45306:60;;45288:12;;-1:-1:-1;;;;;45314:15:0;;45344:16;;45288:12;45306:60;45288:12;45306:60;45344:16;45314:15;45306:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45287:79;;;45381:7;45377:76;;;45410:31;;1769:25:1;;;45410:31:0;;1757:2:1;1742:18;45410:31:0;;;;;;;45377:76;43704:1756;;;;;;;;;;;;;43669:1791::o;45468:500::-;45559:16;;;45573:1;45559:16;;;;;;;;45535:21;;45559:16;;;;;;;;;;-1:-1:-1;45559:16:0;45535:40;;45604:4;45586;45591:1;45586:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45586:23:0;;;:7;;;;;;;;;;:23;;;;45630:15;;:22;;;-1:-1:-1;;;45630:22:0;;;;:15;;;;;:20;;:22;;;;;45586:7;;45630:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45620:4;45625:1;45620:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45620:32:0;;;:7;;;;;;;;;:32;45695:15;;45663:62;;45680:4;;45695:15;45713:11;45663:8;:62::i;:::-;45736:15;;:224;;-1:-1:-1;;;45736:224:0;;-1:-1:-1;;;;;45736:15:0;;;;:66;;:224;;45817:11;;45736:15;;45887:4;;45914;;45934:15;;45736:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45524:444;45468:500;:::o;6457:322::-;6571:6;6546:21;:31;;6533:86;;;;-1:-1:-1;;;6533:86:0;;27922:2:1;6533:86:0;;;27904:21:1;27961:2;27941:18;;;27934:30;28000:31;27980:18;;;27973:59;28049:18;;6533:86:0;27720:353:1;6533:86:0;6627:12;6645:9;-1:-1:-1;;;;;6645:14:0;6667:6;6645:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6626:52;;;6696:7;6683:91;;;;-1:-1:-1;;;6683:91:0;;28280:2:1;6683:91:0;;;28262:21:1;28319:2;28299:18;;;28292:30;28358:34;28338:18;;;28331:62;28429:28;28409:18;;;28402:56;28475:19;;6683:91:0;28078:422:1;45976:425:0;46090:15;;46058:62;;46075:4;;-1:-1:-1;;;;;46090:15:0;46108:11;46058:8;:62::i;:::-;46131:15;;46337;;46131:262;;-1:-1:-1;;;46131:262:0;;46205:4;46131:262;;;28846:34:1;28896:18;;;28889:34;;;46131:15:0;28939:18:1;;;28932:34;;;28982:18;;;28975:34;-1:-1:-1;;;;;46337:15:0;;;29025:19:1;;;29018:44;46367:15:0;29078:19:1;;;29071:35;46131:15:0;;;:31;;46171:9;;28780:19:1;;46131:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;2013:456::-;2090:6;2098;2106;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;:::-;2283:5;-1:-1:-1;2340:2:1;2325:18;;2312:32;2353:33;2312:32;2353:33;:::i;:::-;2013:456;;2405:7;;-1:-1:-1;;;2459:2:1;2444:18;;;;2431:32;;2013:456::o;2915:247::-;2974:6;3027:2;3015:9;3006:7;3002:23;2998:32;2995:52;;;3043:1;3040;3033:12;2995:52;3082:9;3069:23;3101:31;3126:5;3101:31;:::i;3167:118::-;3253:5;3246:13;3239:21;3232:5;3229:32;3219:60;;3275:1;3272;3265:12;3290:382;3355:6;3363;3416:2;3404:9;3395:7;3391:23;3387:32;3384:52;;;3432:1;3429;3422:12;3384:52;3471:9;3458:23;3490:31;3515:5;3490:31;:::i;:::-;3540:5;-1:-1:-1;3597:2:1;3582:18;;3569:32;3610:30;3569:32;3610:30;:::i;:::-;3659:7;3649:17;;;3290:382;;;;;:::o;3677:156::-;3743:20;;3803:4;3792:16;;3782:27;;3772:55;;3823:1;3820;3813:12;3772:55;3677:156;;;:::o;3838:535::-;3930:6;3938;3946;3954;3962;3970;4023:3;4011:9;4002:7;3998:23;3994:33;3991:53;;;4040:1;4037;4030:12;3991:53;4063:27;4080:9;4063:27;:::i;:::-;4053:37;;4109:36;4141:2;4130:9;4126:18;4109:36;:::i;:::-;4099:46;;4164:36;4196:2;4185:9;4181:18;4164:36;:::i;:::-;4154:46;;4219:36;4251:2;4240:9;4236:18;4219:36;:::i;:::-;4209:46;;4274:37;4306:3;4295:9;4291:19;4274:37;:::i;:::-;4264:47;;4330:37;4362:3;4351:9;4347:19;4330:37;:::i;:::-;4320:47;;3838:535;;;;;;;;:::o;4378:813::-;4473:6;4481;4489;4497;4505;4558:3;4546:9;4537:7;4533:23;4529:33;4526:53;;;4575:1;4572;4565:12;4526:53;4614:9;4601:23;4633:31;4658:5;4633:31;:::i;:::-;4683:5;-1:-1:-1;4740:2:1;4725:18;;4712:32;4753:33;4712:32;4753:33;:::i;:::-;4805:7;-1:-1:-1;4864:2:1;4849:18;;4836:32;4877:33;4836:32;4877:33;:::i;:::-;4929:7;-1:-1:-1;4988:2:1;4973:18;;4960:32;5001:33;4960:32;5001:33;:::i;:::-;5053:7;-1:-1:-1;5112:3:1;5097:19;;5084:33;5126;5084;5126;:::i;:::-;5178:7;5168:17;;;4378:813;;;;;;;;:::o;5789:388::-;5857:6;5865;5918:2;5906:9;5897:7;5893:23;5889:32;5886:52;;;5934:1;5931;5924:12;5886:52;5973:9;5960:23;5992:31;6017:5;5992:31;:::i;:::-;6042:5;-1:-1:-1;6099:2:1;6084:18;;6071:32;6112:33;6071:32;6112:33;:::i;6182:380::-;6261:1;6257:12;;;;6304;;;6325:61;;6379:4;6371:6;6367:17;6357:27;;6325:61;6432:2;6424:6;6421:14;6401:18;6398:38;6395:161;;6478:10;6473:3;6469:20;6466:1;6459:31;6513:4;6510:1;6503:15;6541:4;6538:1;6531:15;6395:161;;6182:380;;;:::o;6567:356::-;6769:2;6751:21;;;6788:18;;;6781:30;6847:34;6842:2;6827:18;;6820:62;6914:2;6899:18;;6567:356::o;8407:184::-;8477:6;8530:2;8518:9;8509:7;8505:23;8501:32;8498:52;;;8546:1;8543;8536:12;8498:52;-1:-1:-1;8569:16:1;;8407:184;-1:-1:-1;8407:184:1:o;10006:245::-;10073:6;10126:2;10114:9;10105:7;10101:23;10097:32;10094:52;;;10142:1;10139;10132:12;10094:52;10174:9;10168:16;10193:28;10215:5;10193:28;:::i;10524:420::-;10726:2;10708:21;;;10765:2;10745:18;;;10738:30;10804:34;10799:2;10784:18;;10777:62;10875:26;10870:2;10855:18;;10848:54;10934:3;10919:19;;10524:420::o;11358:127::-;11419:10;11414:3;11410:20;11407:1;11400:31;11450:4;11447:1;11440:15;11474:4;11471:1;11464:15;11490:128;11557:9;;;11578:11;;;11575:37;;;11592:18;;:::i;16758:125::-;16823:9;;;16844:10;;;16841:36;;;16857:18;;:::i;18052:401::-;18254:2;18236:21;;;18293:2;18273:18;;;18266:30;18332:34;18327:2;18312:18;;18305:62;-1:-1:-1;;;18398:2:1;18383:18;;18376:35;18443:3;18428:19;;18052:401::o;18458:399::-;18660:2;18642:21;;;18699:2;18679:18;;;18672:30;18738:34;18733:2;18718:18;;18711:62;-1:-1:-1;;;18804:2:1;18789:18;;18782:33;18847:3;18832:19;;18458:399::o;20531:168::-;20604:9;;;20635;;20652:15;;;20646:22;;20632:37;20622:71;;20673:18;;:::i;20704:127::-;20765:10;20760:3;20756:20;20753:1;20746:31;20796:4;20793:1;20786:15;20820:4;20817:1;20810:15;20836:120;20876:1;20902;20892:35;;20907:18;;:::i;:::-;-1:-1:-1;20941:9:1;;20836:120::o;21530:209::-;-1:-1:-1;;21694:38:1;;;;21676:57;;21664:2;21649:18;;21530:209::o;24742:148::-;24830:4;24809:12;;;24823;;;24805:31;;24848:13;;24845:39;;;24864:18;;:::i;25565:165::-;25603:1;25637:4;25634:1;25630:12;25661:3;25651:37;;25668:18;;:::i;:::-;25720:3;25713:4;25710:1;25706:12;25702:22;25697:27;;;25565:165;;;;:::o;25735:151::-;25825:4;25818:12;;;25804;;;25800:31;;25843:14;;25840:40;;;25860:18;;:::i;26347:127::-;26408:10;26403:3;26399:20;26396:1;26389:31;26439:4;26436:1;26429:15;26463:4;26460:1;26453:15;26479:251;26549:6;26602:2;26590:9;26581:7;26577:23;26573:32;26570:52;;;26618:1;26615;26608:12;26570:52;26650:9;26644:16;26669:31;26694:5;26669:31;:::i;26735:980::-;26997:4;27045:3;27034:9;27030:19;27076:6;27065:9;27058:25;27102:2;27140:6;27135:2;27124:9;27120:18;27113:34;27183:3;27178:2;27167:9;27163:18;27156:31;27207:6;27242;27236:13;27273:6;27265;27258:22;27311:3;27300:9;27296:19;27289:26;;27350:2;27342:6;27338:15;27324:29;;27371:1;27381:195;27395:6;27392:1;27389:13;27381:195;;;27460:13;;-1:-1:-1;;;;;27456:39:1;27444:52;;27551:15;;;;27516:12;;;;27492:1;27410:9;27381:195;;;-1:-1:-1;;;;;;;27632:32:1;;;;27627:2;27612:18;;27605:60;-1:-1:-1;;;27696:3:1;27681:19;27674:35;27593:3;26735:980;-1:-1:-1;;;26735:980:1:o;29117:306::-;29205:6;29213;29221;29274:2;29262:9;29253:7;29249:23;29245:32;29242:52;;;29290:1;29287;29280:12;29242:52;29319:9;29313:16;29303:26;;29369:2;29358:9;29354:18;29348:25;29338:35;;29413:2;29402:9;29398:18;29392:25;29382:35;;29117:306;;;;;:::o

Swarm Source

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