ETH Price: $2,376.12 (-1.38%)

Token

CREEM (CREEM)
 

Overview

Max Total Supply

986,179,328.033888056262771448 CREEM

Holders

385

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,974.186252 CREEM

Value
$0.00
0xb5c46131b4d8d13e4c0e476b9a2ea5b43945891e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Peech/CREEM is a deflationary token. There will never be more peech in circulation than there is now. The token burn/redistribution happens twice per week in a fun livestream event on our YouTube channel.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CREEM

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion
File 1 of 16 : CREEM.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;
import "./DividendPayingToken.sol";
import "./SafeMath.sol";
import "./IterableMapping.sol";
import "./Ownable.sol";
import "./IUniswapV2Pair.sol";
import "./IUniswapV2Factory.sol";
import "./IUniswapV2Router.sol";
import "./CREEMDividendTracker.sol";

contract CREEM is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;

    CREEMDividendTracker public dividendTracker;
    address public peechToken;
    address public liquidityWallet;
    address public devWallet;
    address public rewardsWallet;
    address public immutable deadAddress = address(0x000000000000000000000000000000000000dEaD);
    uint256 public constant maxSellTransactionAmount = 10**7 * (10**18); // 10M
    uint256 public constant maxBuyTransactionAmount = 2 * 10**6 * (10**18); // 2M
    uint256 public constant swapTokensAtAmount = 2 * 10**6 * (10**18); //2M
    uint256 public constant devFee = 2;
    uint256 public constant rewardsFee = 4;
    uint256 public constant buybackFee = 4;
    uint256 public constant liquidityFee = 2;
    uint256 public constant burnFee = 2;
    uint256 public totalFees;

    // it can only be activated, once activated, it can't be disabled
    bool public isTradingEnabled;

    // it can only be disactivated once after the presale;
    bool public buyLimit = true;
    
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;

    // addresses that can make transfers before presale is over
    mapping (address => bool) private canTransferBeforeTradingIsEnabled;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress);

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event ExcludeFromDividends(address indexed account);

    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    
    event ExcludeMultipleAccountsFromDividends(address[7] accounts);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet);

    event DevWalletUpdated(address indexed newDevWallet, address indexed oldDevWallet);

    event RewardsWalletUpdated(address indexed newRewardsWallet, address indexed oldRewardsWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SendDividends(
    	uint256 tokensSwapped,
    	uint256 amount
    );
    
    event burnTokens(
    	uint256 tokensSwapped
    );

    event DepositEthSendDividends(
    	uint256 amount
    );

    event ProcessedDividendTracker(
    	uint256 iterations,
    	uint256 claims,
        uint256 lastProcessedIndex,
    	bool indexed automatic,
    	uint256 gas,
    	address indexed processor
    );

    constructor(address _peechToken,
                address _liquidityWallet,
                address _devWallet,
                address _rewardsWallet) ERC20("CREEM", "CREEM") {
        peechToken = _peechToken;
        liquidityWallet = _liquidityWallet;
        devWallet = _devWallet;
        rewardsWallet = _rewardsWallet;
        totalFees = rewardsFee.add(liquidityFee).add(devFee).add(burnFee).add(buybackFee);
        dividendTracker = new CREEMDividendTracker();
        _mint(owner(), 10**9 * 10**uint(decimals()));
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        //  Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        dividendTracker.setPair(_uniswapV2Pair);
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        // exclude from receiving dividends
        excludeFromDividends(address(dividendTracker));
        excludeFromDividends(address(this));
        excludeFromDividends(owner());
        excludeFromDividends(address(_uniswapV2Router));
        excludeFromDividends(devWallet);
        excludeFromDividends(rewardsWallet);
        excludeFromDividends(liquidityWallet);
        // // exclude from paying fees or having max transaction amount
        excludeFromFees(liquidityWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(rewardsWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(owner(), true);
        // // enable owner and fixed-sale wallet to send tokens before presales are over
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[0xF99baEc9220b02C6E34845259bA558E2f55576C5] = true;
    }
    receive() external payable {
  	}
    function updateDividendTracker(address newAddress) public onlyOwner {
        require(newAddress != address(dividendTracker), "CREEM: The dividend tracker already has that address");
        CREEMDividendTracker newDividendTracker = CREEMDividendTracker(payable(newAddress));
        require(newDividendTracker.owner() == address(this), "CREEM: The new dividend tracker must be owned by the CREEM token contract");
        newDividendTracker.excludeFromDividends(address(newDividendTracker));
        newDividendTracker.excludeFromDividends(address(this));
        newDividendTracker.excludeFromDividends(owner());
        newDividendTracker.excludeFromDividends(address(uniswapV2Router));
        newDividendTracker.excludeFromDividends(devWallet);
        newDividendTracker.excludeFromDividends(rewardsWallet);
        newDividendTracker.excludeFromDividends(liquidityWallet);
        emit UpdateDividendTracker(newAddress, address(dividendTracker));
        dividendTracker = newDividendTracker;
    }
    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "CREEM: The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "CREEM: Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
    function excludeFromDividends(address account) public onlyOwner {
        require(!dividendTracker.isExcludedFromDividends(account), "CREEM: Account is already excluded from dividends");
        dividendTracker.excludeFromDividends(account);
        emit ExcludeFromDividends(account);
    }
    function setPeech(address _newAddress) external onlyOwner {
        require(peechToken != _newAddress,"CREEM: peechToken has similar address!");
        peechToken = _newAddress;
    }
    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "CREEM: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "CREEM: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        if(value) {
            dividendTracker.excludeFromDividends(pair);
        }
        emit SetAutomatedMarketMakerPair(pair, value);
    }
    function updateLiquidityWallet(address newLiquidityWallet) public onlyOwner {
        require(newLiquidityWallet != liquidityWallet, "CREEM: The liquidity wallet is already this address");
        excludeFromFees(newLiquidityWallet, true);
        emit LiquidityWalletUpdated(newLiquidityWallet, liquidityWallet);
        liquidityWallet = newLiquidityWallet;
    }
    function updateDevWallet(address newDevWallet) public onlyOwner {
        require(newDevWallet != devWallet, "CREEM: The development wallet is already this address");
        excludeFromFees(newDevWallet, true);
        emit DevWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }
    function updateRewardsWallet(address newRewardsWallet) public onlyOwner {
        require(newRewardsWallet != rewardsWallet, "CREEM: The development wallet is already this address");
        excludeFromFees(newRewardsWallet, true);
        emit RewardsWalletUpdated(newRewardsWallet, rewardsWallet);
        rewardsWallet = newRewardsWallet;
    }
    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    function isExcludedFromDividends(address account) public view returns(bool) { 
        return dividendTracker.isExcludedFromDividends(account);
    }
    function withdrawnDividendOf(address account) public view returns(uint256) {
    	return dividendTracker.withdrawnDividendOf(account);
  	}
	function dividendTokenBalanceOf(address account) public view returns (uint256) {
		return dividendTracker.balanceOf(account);
	}
    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            int256,
            uint8,
            uint256) {
        return dividendTracker.getAccount(account);
    }
	function getAccountDividendsInfoAtIndex(uint256 index)
        external view returns (
            address,
            int256,
            uint8,
            uint256) {
    	return dividendTracker.getAccountAtIndex(index);
    }
    function minimumValueTier(uint8 _tier) public view returns(uint){
        return dividendTracker.minimumValueTier(_tier);
    }
    function minimumTier(uint8 _tier) public view returns(uint){
        return dividendTracker.minimumTier(_tier);
    }
    function minimumRewards(uint8 _tier) public view returns(uint){
        return dividendTracker.minimumRewards(_tier);
    }
    function getNumberOfDividendTokenHolders() external view returns(uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }
    function activateTrading() external onlyOwner {
        require(!isTradingEnabled,"CREEM: trading has already been activated");
        isTradingEnabled = true;
    }
    function disableBuyLimit() external onlyOwner{
        require(buyLimit,"CREEM: buy limit already disactivated");
        buyLimit = false;
    }
    function shuffle() external onlyOwner{
        dividendTracker.shuffle();
    }
    // make sure that values are in wei
    function setTierRewards(uint tier1, uint tier2, uint tier3, uint tier4) external onlyOwner{
        dividendTracker.setTierRewards(tier1,tier2,tier3,tier4);
    }
    // make sure that values are in wei
    function setTierThreshold(uint tier1, uint tier2, uint tier3, uint tier4) external onlyOwner{
        dividendTracker.setTierThreshold(tier1,tier2,tier3,tier4);
    }
    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(!isTradingEnabled) {
            require(canTransferBeforeTradingIsEnabled[from], "CREEM: This account cannot send tokens until trading is enabled");
        }
        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        if( 
        	!swapping &&
        	isTradingEnabled &&
            automatedMarketMakerPairs[to] && // sells only by detecting transfer to automated market maker pair
        	from != address(uniswapV2Router) && //router -> pair is removing liquidity which shouldn't have max
            !_isExcludedFromFees[to] //no max for those excluded from fees
        ) {
            require(amount <= maxSellTransactionAmount, "CREEM: Sell transfer amount exceeds the maxSellTransactionAmount.");
        }
        if( buyLimit &&
        	!swapping &&
        	isTradingEnabled &&
            automatedMarketMakerPairs[from] && // buy only by detecting transfer from automated market maker pair
        	to != address(uniswapV2Router) && //router -> pair is adding liquidity which shouldn't have max
            !_isExcludedFromFees[to] //no max for those excluded from fees
        ) {
            require(amount <= maxBuyTransactionAmount, "CREEM: Buy transfer amount exceeds the maxBuyTransactionAmount.");
        }
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if(
            isTradingEnabled && 
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != liquidityWallet &&
            to != liquidityWallet
        ) {
            swapping = true;
            uint256 swapLiquidityTokens = contractTokenBalance.mul(liquidityFee).div(totalFees);
            swapAndLiquify(swapLiquidityTokens);
            uint256 swapDevTokens = contractTokenBalance.mul(devFee).div(totalFees);
            swapAndSend(devWallet,swapDevTokens);
            uint256 swapBuybackTokens = contractTokenBalance.mul(buybackFee).div(totalFees);
            swapAndBurn(swapBuybackTokens);
            uint256 swapBurnTokens = contractTokenBalance.mul(burnFee).div(totalFees);
            _burn(address(this),swapBurnTokens);
            uint256 swapDividendTokens = balanceOf(address(this));
            swapAndSend(rewardsWallet,swapDividendTokens);
            swapping = false;
        }
        bool takeFee = isTradingEnabled && !swapping;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if(takeFee && 
           (automatedMarketMakerPairs[from] ||
           automatedMarketMakerPairs[to])) {
        	uint256 fees = amount.mul(totalFees).div(100);
        	amount = amount.sub(fees);
            super._transfer(from, address(this), fees);
        }
        super._transfer(from, to, amount);
        try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}
    }
    function swapAndLiquify(uint256 tokens) private {
        // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        
        uint256 initialBalance = address(this).balance;
        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        ); 
    }
    function swapTokensAndBurn(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = peechToken;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            deadAddress,
            block.timestamp
        ); 
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }
    function swapAndSend(address wallet, uint256 tokens) private {
        swapTokensForEth(tokens);
        uint256 dividends = address(this).balance;
        (bool success,) = wallet.call{value: dividends}("");
        if(success) {
   	 		emit SendDividends(tokens, dividends);
        }
    }
    function swapAndBurn(uint256 tokens) private {
        swapTokensAndBurn(tokens);
   	 	emit burnTokens(tokens);
    }
}

File 2 of 16 : CREEMDividendTracker.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./DividendPayingToken.sol";
import "./Ownable.sol";
import "./SafeMathUint8.sol";
import "./IterableMapping.sol";
import "./IUniswapV2Pair.sol";
import "./IERC20Metadata.sol";
contract CREEMDividendTracker is DividendPayingToken, Ownable {
    using SafeMath for uint256;
    using SafeMathUint8 for uint8;
    using IterableMapping for IterableMapping.Map;
    
    event ExcludeFromDividends(address indexed account);

    uint[] public minTiers = [100,500,1000,2000];
    uint[] public tiersRewards = [0.1 ether, 0.5 ether, 1 ether, 2 ether];
    IterableMapping.Map private tokenHoldersMap;
    // to be edited
    IUniswapV2Pair USDTPair = IUniswapV2Pair(0x0d4a11d5EEaaC28EC3F61d100daF4d40471f1852);
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IUniswapV2Pair public CreemPair;
    mapping (address => bool) public excludedFromDividends;

    constructor() DividendPayingToken("CREEM Dividends", "CREEM_D") {
    }
    function setPair(address _pair) external onlyOwner {
        CreemPair = IUniswapV2Pair(_pair);
    }
    // make sure that values are in wei
    function setTierRewards(uint tier1, uint tier2, uint tier3, uint tier4) external onlyOwner{
        require(tier1>0 && tier2>tier1 && tier3>tier2 && tier4>tier3, "CREEM_D: tiers are not in order");
        tiersRewards[0] = tier1;
        tiersRewards[1] = tier2;
        tiersRewards[2] = tier3;
        tiersRewards[3] = tier4;
    }
    // make sure that values are natural numbers which represent the dollar value needed
    function setTierThreshold(uint tier1, uint tier2, uint tier3, uint tier4) external onlyOwner{
        require(tier1>0 && tier2>tier1 && tier3>tier2 && tier4>tier3, "CREEM_D: tiers are not in order");
        minTiers[0] = tier1;
        minTiers[1] = tier2;
        minTiers[2] = tier3;
        minTiers[3] = tier4;
    }
    function excludeFromDividends(address account) external onlyOwner {
    	require(!excludedFromDividends[account],"CREEM_D: Address already excluded from dividends");
    	excludedFromDividends[account] = true;
    	_setBalance(account, 0);
    	tokenHoldersMap.remove(account);
    	tokenHoldersMap.setTier(account, IterableMapping.Tier.DEFAULT);
    	emit ExcludeFromDividends(account);
    }
    function setBalance(address payable account, uint256 newBalance) public onlyOwner {
    	if(excludedFromDividends[account]) return;
    	
        if(newBalance > minimumForDividends(minTiers[0])) {
            
            _setBalance(account, newBalance);
    		tokenHoldersMap.set(account, newBalance);
    		
    		if(newBalance > minimumForDividends(minTiers[3])){
    		    tokenHoldersMap.setTier(account,IterableMapping.Tier.TIER4);
    		}else if(newBalance > minimumForDividends(minTiers[2])){
    		    tokenHoldersMap.setTier(account,IterableMapping.Tier.TIER3);
    		}else if(newBalance > minimumForDividends(minTiers[1])){
    		    tokenHoldersMap.setTier(account,IterableMapping.Tier.TIER2);
    		}else{
    		    tokenHoldersMap.setTier(account,IterableMapping.Tier.TIER1);
    		}
    	} else {
            _setBalance(account, 0);
            tokenHoldersMap.setTier(account,IterableMapping.Tier.DEFAULT);
    	    tokenHoldersMap.remove(account);
    	}
    }
    
    function shuffle() public onlyOwner{
        uint len = tokenHoldersMap.keys.length;
        require(len > 0,"CREEM_D: there must be a minimum of 1 dividneds holders");
        uint256 amount = getBalance();
        require(amount > 0, "CREEM_D: insufficient balance!");
        uint size = sizeCalc(amount,tiersRewards[0]);
        address[] memory addr = new address[](size);
        uint i = randomIndex(len);
        for(uint j = 0;j<size;j++){
            if(i==len) i = 0;
            (address account,,,) = getAccountAtIndex(i);
            uint reward = getTierReward(account);
            if(amount > reward){
                amount.sub(reward);
                addr[j] = account;
            }else{
                amount = 0;
                addr[j] = account;
                break;
            }
            i++;
        }
        address[] memory addrs = sort(addr);
        amount = getBalance();
        for(uint j = 0 ; j < addrs.length; j++){
            address account = addrs[j];
            uint reward = getTierReward(account);
            if(amount > reward){
                amount = amount.sub(reward);
                processAccount(payable(account),reward);
            }else{
                processAccount(payable(account),amount);
                break;
            }
        }
    }
    function processAccount(address payable account,uint amount) internal returns (bool) {
        uint256 _amount = _withdrawDividendOfUser(account,amount);
        return _amount > 0;
    }
    function getBalance() internal view returns(uint){
        return address(this).balance;
    }
    function getTierReward(address addr) internal view returns(uint){
        return tiersRewards[uint(tokenHoldersMap.getTier(addr)).sub(1)];
    }
    function _transfer(address, address, uint256) internal pure override {
        require(false, "CREEM_D: No transfers allowed");
    }
    function sort(address[] memory arr) internal view returns(address[] memory addr){
        uint size = arr.length;
        addr = new address[](size);
        uint i = 0;
        while(size > i){
            uint higher = greatest(arr);
            addr[i] = arr[higher];
            delete arr[higher];
            i++;
        }
    }
    function greatest(address[] memory arr) internal view returns(uint){
        uint num = 0;
        for(uint i=1;i<arr.length;i++){
            if(balanceOf(arr[i]) > balanceOf(arr[num])){
                num = i;
            }
        }
        return num;
    }
    function isExcludedFromDividends(address account) public view returns(bool) {
        return excludedFromDividends[account];
    }

    function getNumberOfTokenHolders() public view returns(uint256) {
        return tokenHoldersMap.keys.length;
    }
    function getAccount(address _account)
        public view returns (
            address account,
            int256 index,
            uint8 tier,
            uint256 totalDividends) {
        account = _account;

        index = tokenHoldersMap.getIndexOfKey(account);
        
        tier = uint8(tokenHoldersMap.getTier(_account));
        
        totalDividends = withdrawnDividendOf(account);
    }

    function getAccountAtIndex(uint256 index)
        public view returns (
            address,
            int256,
            uint8,
            uint256) {
    	if(index >= tokenHoldersMap.size()) return (0x0000000000000000000000000000000000000000, -1, 0, 0);
        address account = tokenHoldersMap.getKeyAtIndex(index);
        return getAccount(account);
    }
    function getReservesOnOrder(IUniswapV2Pair pairAddress) internal view returns(uint, uint){
        address addr1 = pairAddress.token1();
        (uint Res0, uint Res1,) = pairAddress.getReserves();
        return (addr1 == WETH) ? (Res0,Res1) : (Res1,Res0);
    }
    function getTokenPrice(IUniswapV2Pair pairAddress, uint amount, bool isEth) internal view returns(uint){
        // isEth check is the amount in is Eth or not
        (uint Res0, uint Res1) = getReservesOnOrder(pairAddress);
        return isEth ? ((amount*Res0)/Res1) : ((amount*Res1)/Res0);
    }
    function minimumForDividends(uint min) internal view returns(uint){
        address token1 = USDTPair.token0(); 
        uint ethAmount = getTokenPrice(USDTPair,min * 10** IERC20Metadata(token1).decimals(),false);
        return getTokenPrice(CreemPair,ethAmount,true);
    }
    function randomIndex(uint len) internal view returns (uint256) {
        return uint(keccak256(abi.encodePacked(msg.sender, block.difficulty, block.timestamp))) % len;
    }
    function minimumValueTier(uint8 _tier) public view returns(uint){
        require(_tier >= 1 && _tier <= 4,"CREEM_D: invalid tier");
        return minimumForDividends(minTiers[_tier.sub(1)]).mul(80).div(100 * 1 ether);
    }
    function minimumTier(uint8 _tier) public view returns(uint){
        require(_tier >= 1 && _tier <= 4,"CREEM_D: invalid tier");
        return minTiers[_tier-1];
    }
    function minimumRewards(uint8 _tier) public view returns(uint){
        require(_tier >= 1 && _tier <= 4,"CREEM_D: invalid tier");
        return tiersRewards[_tier-1];
    }
    function sizeCalc(uint256 amount, uint256 parameter) internal pure returns(uint){
      if(amount < parameter){
        return 1;
      }else{
        uint256 remainder = amount.mod(parameter) == 0 ? 0 : 1;
        return amount.div(parameter).add(remainder);
      }
    }
}

File 3 of 16 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 4 of 16 : DividendPayingToken.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./SafeMath.sol";
import "./DividendPayingTokenInterface.sol";
import "./DividendPayingTokenOptionalInterface.sol";

contract DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
  using SafeMath for uint256;
  mapping(address => uint256) internal withdrawnDividends;

  uint256 public totalDividendsDistributed;

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

  /// @dev Distributes dividends whenever ether is paid to this contract.
  receive() external payable {
    distributeDividends();
  }

  /// @notice Distributes ether to token holders as dividends.
  function distributeDividends() public override payable {
    require(totalSupply() > 0,"dividened totalsupply error");
    if (msg.value > 0) {
      emit DividendsDistributed(msg.sender, msg.value);
      totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
    }
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
  function _withdrawDividendOfUser(address payable user, uint256 amount) internal returns (uint256) {
    if (amount > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(amount);
      (bool success,) = user.call{value: amount}("");
      if(!success) {
        withdrawnDividends[user] = withdrawnDividends[user].sub(amount);
        return 0;
      }
      return amount;
    }
    return 0;
  }

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) public view override returns(uint256) {
    return withdrawnDividends[_owner];
  }

  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);
  }

  function _burn(address account, uint256 value) internal override {
    super._burn(account, value);
  }

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

File 5 of 16 : DividendPayingTokenInterface.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


/// @title Dividend-Paying Token Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev An interface for a dividend-paying token contract.
interface DividendPayingTokenInterface {

  function distributeDividends() external payable;

  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

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

File 6 of 16 : DividendPayingTokenOptionalInterface.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


/// @title Dividend-Paying Token Optional Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev OPTIONAL functions for a dividend-paying token contract.
interface DividendPayingTokenOptionalInterface {

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

File 7 of 16 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";
import "./SafeMath.sol";

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(uint256 amount) external {
        _burn(msg.sender,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 {}
}

File 8 of 16 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

File 9 of 16 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {

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

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

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

File 10 of 16 : IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 11 of 16 : IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 12 of 16 : IUniswapV2Router.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 13 of 16 : IterableMapping.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

library IterableMapping {
    // Iterable mapping from address to uint;
    enum Tier{
        DEFAULT,TIER1,TIER2,TIER3,TIER4
    }
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
        mapping(address => Tier) tier;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }
    function getTier(Map storage map, address key) public view returns (Tier) {
        return map.tier[key];
    }
    function setTier(Map storage map, address key, Tier val) public {
        map.tier[key] = val;
    }
    function getIndexOfKey(Map storage map, address key) public view returns (int) {
        if(!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

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



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

    function set(Map storage map, address key, uint 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];

        uint index = map.indexOf[key];
        uint 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();
    }
}

File 14 of 16 : Ownable.sol
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT License

import "./Context.sol";

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 transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 15 of 16 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 16 of 16 : SafeMathUint8.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

        return c;
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "evmVersion": "istanbul",
  "libraries": {
    "/C/Users/Public/CREEM/contracts/IterableMapping.sol": {
      "IterableMapping": "0x64e324E4e48af3281b961dA1e514eCf196319bb9"
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_peechToken","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_rewardsWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositEthSendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newDevWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDevWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[7]","name":"accounts","type":"address[7]"}],"name":"ExcludeMultipleAccountsFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","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":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newRewardsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldRewardsWallet","type":"address"}],"name":"RewardsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"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":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"burnTokens","type":"event"},{"inputs":[],"name":"activateTrading","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableBuyLimit","outputs":[],"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 CREEMDividendTracker","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":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tier","type":"uint8"}],"name":"minimumRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tier","type":"uint8"}],"name":"minimumTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tier","type":"uint8"}],"name":"minimumValueTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peechToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setPeech","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier1","type":"uint256"},{"internalType":"uint256","name":"tier2","type":"uint256"},{"internalType":"uint256","name":"tier3","type":"uint256"},{"internalType":"uint256","name":"tier4","type":"uint256"}],"name":"setTierRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier1","type":"uint256"},{"internalType":"uint256","name":"tier2","type":"uint256"},{"internalType":"uint256","name":"tier3","type":"uint256"},{"internalType":"uint256","name":"tier4","type":"uint256"}],"name":"setTierThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shuffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardsWallet","type":"address"}],"name":"updateRewardsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526ddead000000000000000000000000608052600e805461ff0019166101001790553480156200003257600080fd5b5060405162007e0c38038062007e0c833981016040819052620000559162000b66565b604080518082018252600580825264435245454d60d81b602080840182815285518087019096529285528401528151919291620000959160039162000a78565b508051620000ab90600490602084019062000a78565b5050506000620000c0620005c660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600980546001600160a01b03199081166001600160a01b0387811691909117909255600a80548216868416179055600b80548216858416179055600c80549091169183169190911790556200018f60046200017b60028181818582620005ca602090811b62001e7717901c565b620005ca60201b62001e771790919060201c565b600d55604051620001a09062000b07565b604051809103906000f080158015620001bd573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03929092169190911790556200021c620001ec6200060e565b620001f66200061d565b620002069060ff16600a62000e30565b6200021690633b9aca0062000f18565b62000622565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027157600080fd5b505afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac919062000b49565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f557600080fd5b505afa1580156200030a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000330919062000b49565b6040518363ffffffff1660e01b81526004016200034f92919062000bf8565b602060405180830381600087803b1580156200036a57600080fd5b505af11580156200037f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a5919062000b49565b600680546001600160a01b038086166001600160a01b0319928316179092556007805483851692169190911790556008546040516340c3fa8b60e11b81529293501690638187f51690620003fe90849060040162000be4565b600060405180830381600087803b1580156200041957600080fd5b505af11580156200042e573d6000803e3d6000fd5b50505050620004458160016200070560201b60201c565b6008546200045c906001600160a01b031662000818565b620004673062000818565b6200047b620004756200060e565b62000818565b620004868262000818565b600b546200049d906001600160a01b031662000818565b600c54620004b4906001600160a01b031662000818565b600a54620004cb906001600160a01b031662000818565b600a54620004e4906001600160a01b0316600162000995565b600b54620004fd906001600160a01b0316600162000995565b600c5462000516906001600160a01b0316600162000995565b6200052330600162000995565b62000539620005316200060e565b600162000995565b600160106000620005496200060e565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905573f99baec9220b02c6e34845259ba558e2f55576c59052601090527fa83ec88e855b90efd3d53321424b6a2706f82c599b4d4f5da76727c809cb9ec6805490911660011790555062000f8d945050505050565b3390565b600080620005d9838562000dc8565b905083811015620006075760405162461bcd60e51b8152600401620005fe9062000c6e565b60405180910390fd5b9392505050565b6005546001600160a01b031690565b601290565b6001600160a01b0382166200064b5760405162461bcd60e51b8152600401620005fe9062000d88565b620006596000838362000a73565b6200067581600254620005ca60201b62001e771790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620006a891839062001e77620005ca821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620006f990859062000dbf565b60405180910390a35050565b6001600160a01b03821660009081526011602052604090205460ff1615158115151415620007475760405162461bcd60e51b8152600401620005fe9062000d2b565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155620007dc5760085460405163031e79db60e41b81526001600160a01b03909116906331e79db090620007a790859060040162000be4565b600060405180830381600087803b158015620007c257600080fd5b505af1158015620007d7573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b62000822620005c6565b6005546001600160a01b03908116911614620008525760405162461bcd60e51b8152600401620005fe9062000ca5565b60085460405163c705c56960e01b81526001600160a01b039091169063c705c569906200088490849060040162000be4565b60206040518083038186803b1580156200089d57600080fd5b505afa158015620008b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008d8919062000bc2565b15620008f85760405162461bcd60e51b8152600401620005fe9062000c1d565b60085460405163031e79db60e41b81526001600160a01b03909116906331e79db0906200092a90849060040162000be4565b600060405180830381600087803b1580156200094557600080fd5b505af11580156200095a573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b6200099f620005c6565b6005546001600160a01b03908116911614620009cf5760405162461bcd60e51b8152600401620005fe9062000ca5565b6001600160a01b0382166000908152600f602052604090205460ff161515811515141562000a115760405162461bcd60e51b8152600401620005fe9062000cda565b6001600160a01b0382166000818152600f602052604090819020805460ff1916841515179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79062000a6790849062000c12565b60405180910390a25050565b505050565b82805462000a869062000f3a565b90600052602060002090601f01602090048101928262000aaa576000855562000af5565b82601f1062000ac557805160ff191683800117855562000af5565b8280016001018555821562000af5579182015b8281111562000af557825182559160200191906001019062000ad8565b5062000b0392915062000b15565b5090565b61323f8062004bcd83390190565b5b8082111562000b03576000815560010162000b16565b80516001600160a01b038116811462000b4457600080fd5b919050565b60006020828403121562000b5b578081fd5b620006078262000b2c565b6000806000806080858703121562000b7c578283fd5b62000b878562000b2c565b935062000b976020860162000b2c565b925062000ba76040860162000b2c565b915062000bb76060860162000b2c565b905092959194509250565b60006020828403121562000bd4578081fd5b8151801515811462000607578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479206578636c756460408201527065642066726f6d206469766964656e647360781b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b6020808252603f908201527f435245454d3a204175746f6d61746564206d61726b6574206d616b657220706160408201527f697220697320616c72656164792073657420746f20746861742076616c756500606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6000821982111562000dde5762000dde62000f77565b500190565b80825b600180861162000df7575062000e27565b81870482111562000e0c5762000e0c62000f77565b8086161562000e1a57918102915b9490941c93800262000de6565b94509492505050565b600062000607600019848460008262000e4c5750600162000607565b8162000e5b5750600062000607565b816001811462000e74576002811462000e7f5762000eb3565b600191505062000607565b60ff84111562000e935762000e9362000f77565b6001841b91508482111562000eac5762000eac62000f77565b5062000607565b5060208310610133831016604e8410600b841016171562000eeb575081810a8381111562000ee55762000ee562000f77565b62000607565b62000efa848484600162000de3565b80860482111562000f0f5762000f0f62000f77565b02949350505050565b600081600019048311821515161562000f355762000f3562000f77565b500290565b60028104600182168062000f4f57607f821691505b6020821081141562000f7157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c613c1a62000fb360003960008181610cd50152612df80152613c1a6000f3fe6080604052600436106102aa5760003560e01c8062b61a57146102b657806302259e9e146102e1578063064a59d01461030357806306fdde0314610325578063095ea7b3146103475780630bd05b691461036757806313114a9d1461037e5780631694505e1461039357806318160ddd146103a85780631816467f146103bd5780631a377e4f146103dd57806323b872dd146103fd5780632520bf041461041d57806327c8f835146104325780632bb14e1d146104475780632c1f52161461045c57806330bb4cff14610471578063313ce5671461048657806331e79db0146104a857806339509351146104c85780633b2d081c1461044757806342966c68146104e857806343658c6c1461050857806349bd5a5e146105285780634fbee1931461053d578063548ba67a1461055d578063589210d91461057d5780635aa821a9146105925780635b35f9c9146105a75780635d54e86a146105bc57806364b0f653146105dc57806365b8dbc0146105f15780636827e764146106115780636843cd841461062657806370a082311461064657806388bdd9be146106665780638da5cb5b146106865780638ea5220f1461069b57806395d89b41146106b057806398118cb4146106115780639a7a23d6146106c5578063a31dc2cd146106e5578063a457c2d714610705578063a9059cbb14610725578063aafd847a14610745578063ad56c13c14610765578063b62496f514610795578063c0246668146107b5578063c492f046146107d5578063c705c569146107f5578063cfc0d02414610815578063d469801614610835578063dd62ed3e1461084a578063df47c9de1461086a578063e2f4560514610592578063e37ba8f91461088a578063f27fd254146108aa578063f2fde38b146108ca578063f4cb7a57146108ea578063fce589d814610611576102b1565b366102b157005b600080fd5b3480156102c257600080fd5b506102cb6108ff565b6040516102d891906130ba565b60405180910390f35b3480156102ed57600080fd5b506102f661090e565b6040516102d8919061395d565b34801561030f57600080fd5b5061031861091d565b6040516102d891906131a4565b34801561033157600080fd5b5061033a610926565b6040516102d891906131af565b34801561035357600080fd5b50610318610362366004612f47565b6109b8565b34801561037357600080fd5b5061037c6109d6565b005b34801561038a57600080fd5b506102f6610a46565b34801561039f57600080fd5b506102cb610a4c565b3480156103b457600080fd5b506102f6610a5b565b3480156103c957600080fd5b5061037c6103d8366004612e22565b610a61565b3480156103e957600080fd5b506102f66103f836600461309b565b610b2c565b34801561040957600080fd5b50610318610418366004612e92565b610bad565b34801561042957600080fd5b5061037c610c34565b34801561043e57600080fd5b506102cb610cd3565b34801561045357600080fd5b506102f6610cf7565b34801561046857600080fd5b506102cb610cfc565b34801561047d57600080fd5b506102f6610d0b565b34801561049257600080fd5b5061049b610d8d565b6040516102d89190613a15565b3480156104b457600080fd5b5061037c6104c3366004612e22565b610d92565b3480156104d457600080fd5b506103186104e3366004612f47565b610efd565b3480156104f457600080fd5b5061037c61050336600461300d565b610f4b565b34801561051457600080fd5b5061037c61052336600461306a565b610f58565b34801561053457600080fd5b506102cb610ffb565b34801561054957600080fd5b50610318610558366004612e22565b61100a565b34801561056957600080fd5b5061037c610578366004612e22565b611028565b34801561058957600080fd5b506103186110ad565b34801561059e57600080fd5b506102f66110bb565b3480156105b357600080fd5b506102cb6110c9565b3480156105c857600080fd5b506102f66105d736600461309b565b6110d8565b3480156105e857600080fd5b506102f6611109565b3480156105fd57600080fd5b5061037c61060c366004612e22565b61114e565b34801561061d57600080fd5b506102f661120e565b34801561063257600080fd5b506102f6610641366004612e22565b611213565b34801561065257600080fd5b506102f6610661366004612e22565b611244565b34801561067257600080fd5b5061037c610681366004612e22565b61125f565b34801561069257600080fd5b506102cb611670565b3480156106a757600080fd5b506102cb61167f565b3480156106bc57600080fd5b5061033a61168e565b3480156106d157600080fd5b5061037c6106e0366004612ed2565b61169d565b3480156106f157600080fd5b506102f661070036600461309b565b61170e565b34801561071157600080fd5b50610318610720366004612f47565b61173f565b34801561073157600080fd5b50610318610740366004612f47565b6117a7565b34801561075157600080fd5b506102f6610760366004612e22565b6117bb565b34801561077157600080fd5b50610785610780366004612e22565b6117ec565b6040516102d894939291906130e7565b3480156107a157600080fd5b506103186107b0366004612e22565b611884565b3480156107c157600080fd5b5061037c6107d0366004612ed2565b611899565b3480156107e157600080fd5b5061037c6107f0366004612f72565b61196d565b34801561080157600080fd5b50610318610810366004612e22565b611a62565b34801561082157600080fd5b5061037c610830366004612e22565b611ae3565b34801561084157600080fd5b506102cb611bae565b34801561085657600080fd5b506102f6610865366004612e5a565b611bbd565b34801561087657600080fd5b5061037c61088536600461306a565b611be8565b34801561089657600080fd5b5061037c6108a5366004612e22565b611c53565b3480156108b657600080fd5b506107856108c536600461300d565b611d1e565b3480156108d657600080fd5b5061037c6108e5366004612e22565b611d57565b3480156108f657600080fd5b5061037c611e0e565b6009546001600160a01b031681565b6a084595161401484a00000081565b600e5460ff1681565b60606003805461093590613a91565b80601f016020809104026020016040519081016040528092919081815260200182805461096190613a91565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611ead565b8484611eb1565b5060015b92915050565b6109de611ead565b6005546001600160a01b03908116911614610a145760405162461bcd60e51b8152600401610a0b90613663565b60405180910390fd5b600e5460ff1615610a375760405162461bcd60e51b8152600401610a0b90613914565b600e805460ff19166001179055565b600d5481565b6006546001600160a01b031681565b60025490565b610a69611ead565b6005546001600160a01b03908116911614610a965760405162461bcd60e51b8152600401610a0b90613663565b600b546001600160a01b0382811691161415610ac45760405162461bcd60e51b8152600401610a0b9061342c565b610acf816001611899565b600b546040516001600160a01b03918216918316907f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87190600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600854604051631a377e4f60e01b81526000916001600160a01b031690631a377e4f90610b5d908590600401613a15565b60206040518083038186803b158015610b7557600080fd5b505afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190613025565b6000610bba848484611f65565b610c2a84610bc6611ead565b610c2585604051806060016040528060288152602001613b78602891396001600160a01b038a16600090815260016020526040812090610c04611ead565b6001600160a01b0316815260208101919091526040016000205491906124c2565b611eb1565b5060019392505050565b610c3c611ead565b6005546001600160a01b03908116911614610c695760405162461bcd60e51b8152600401610a0b90613663565b600860009054906101000a90046001600160a01b03166001600160a01b0316632520bf046040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cb957600080fd5b505af1158015610ccd573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600481565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015610d5057600080fd5b505afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190613025565b905090565b601290565b610d9a611ead565b6005546001600160a01b03908116911614610dc75760405162461bcd60e51b8152600401610a0b90613663565b60085460405163c705c56960e01b81526001600160a01b039091169063c705c56990610df79084906004016130ba565b60206040518083038186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e479190612ff1565b15610e645760405162461bcd60e51b8152600401610a0b90613245565b60085460405163031e79db60e41b81526001600160a01b03909116906331e79db090610e949084906004016130ba565b600060405180830381600087803b158015610eae57600080fd5b505af1158015610ec2573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b60006109cc610f0a611ead565b84610c258560016000610f1b611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611e77565b610f5533826124fc565b50565b610f60611ead565b6005546001600160a01b03908116911614610f8d5760405162461bcd60e51b8152600401610a0b90613663565b6008546040516310d9631b60e21b81526001600160a01b03909116906343658c6c90610fc39087908790879087906004016139fa565b600060405180830381600087803b158015610fdd57600080fd5b505af1158015610ff1573d6000803e3d6000fd5b5050505050505050565b6007546001600160a01b031681565b6001600160a01b03166000908152600f602052604090205460ff1690565b611030611ead565b6005546001600160a01b0390811691161461105d5760405162461bcd60e51b8152600401610a0b90613663565b6009546001600160a01b038281169116141561108b5760405162461bcd60e51b8152600401610a0b9061353a565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600e54610100900460ff1681565b66d3c21bcecceda160191b81565b600c546001600160a01b031681565b600854604051632eaa743560e11b81526000916001600160a01b031690635d54e86a90610b5d908590600401613a15565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015610d5057600080fd5b611156611ead565b6005546001600160a01b039081169116146111835760405162461bcd60e51b8152600401610a0b90613663565b6006546001600160a01b03828116911614156111b15760405162461bcd60e51b8152600401610a0b906134f0565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600281565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610b5d9085906004016130ba565b6001600160a01b031660009081526020819052604090205490565b611267611ead565b6005546001600160a01b039081169116146112945760405162461bcd60e51b8152600401610a0b90613663565b6008546001600160a01b03828116911614156112c25760405162461bcd60e51b8152600401610a0b9061376f565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130a57600080fd5b505afa15801561131e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113429190612e3e565b6001600160a01b0316146113685760405162461bcd60e51b8152600401610a0b90613481565b60405163031e79db60e41b81526001600160a01b038216906331e79db0906113949084906004016130ba565b600060405180830381600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b03841692506331e79db091506113f29030906004016130ba565b600060405180830381600087803b15801561140c57600080fd5b505af1158015611420573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db061143b611670565b6040518263ffffffff1660e01b815260040161145791906130ba565b600060405180830381600087803b15801561147157600080fd5b505af1158015611485573d6000803e3d6000fd5b505060065460405163031e79db60e41b81526001600160a01b0380861694506331e79db093506114b99216906004016130ba565b600060405180830381600087803b1580156114d357600080fd5b505af11580156114e7573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81526001600160a01b0380861694506331e79db0935061151b9216906004016130ba565b600060405180830381600087803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81526001600160a01b0380861694506331e79db0935061157d9216906004016130ba565b600060405180830381600087803b15801561159757600080fd5b505af11580156115ab573d6000803e3d6000fd5b5050600a5460405163031e79db60e41b81526001600160a01b0380861694506331e79db093506115df9216906004016130ba565b600060405180830381600087803b1580156115f957600080fd5b505af115801561160d573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b031690565b600b546001600160a01b031681565b60606004805461093590613a91565b6116a5611ead565b6005546001600160a01b039081169116146116d25760405162461bcd60e51b8152600401610a0b90613663565b6007546001600160a01b03838116911614156117005760405162461bcd60e51b8152600401610a0b90613385565b61170a82826125cc565b5050565b60085460405163a31dc2cd60e01b81526000916001600160a01b03169063a31dc2cd90610b5d908590600401613a15565b60006109cc61174c611ead565b84610c2585604051806060016040528060258152602001613bc06025913960016000611776611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906124c2565b60006109cc6117b4611ead565b8484611f65565b60085460405163557ec23d60e11b81526000916001600160a01b03169063aafd847a90610b5d9085906004016130ba565b60085460405163fbcbc0f160e01b81526000918291829182916001600160a01b039091169063fbcbc0f1906118259088906004016130ba565b60806040518083038186803b15801561183d57600080fd5b505afa158015611851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118759190612eff565b93509350935093509193509193565b60116020526000908152604090205460ff1681565b6118a1611ead565b6005546001600160a01b039081169116146118ce5760405162461bcd60e51b8152600401610a0b90613663565b6001600160a01b0382166000908152600f602052604090205460ff161515811515141561190d5760405162461bcd60e51b8152600401610a0b906136d9565b6001600160a01b0382166000818152600f602052604090819020805460ff1916841515179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7906119619084906131a4565b60405180910390a25050565b611975611ead565b6005546001600160a01b039081169116146119a25760405162461bcd60e51b8152600401610a0b90613663565b60005b82811015611a215781600f60008686858181106119d257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119e79190612e22565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611a1981613acc565b9150506119a5565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611a559392919061314b565b60405180910390a1505050565b60085460405163c705c56960e01b81526000916001600160a01b03169063c705c56990611a939085906004016130ba565b60206040518083038186803b158015611aab57600080fd5b505afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190612ff1565b611aeb611ead565b6005546001600160a01b03908116911614611b185760405162461bcd60e51b8152600401610a0b90613663565b600c546001600160a01b0382811691161415611b465760405162461bcd60e51b8152600401610a0b9061342c565b611b51816001611899565b600c546040516001600160a01b03918216918316907f85710b1053f40e0d492d81001a623cd191d251fed32881e7bb80fc1b66a6e46390600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611bf0611ead565b6005546001600160a01b03908116911614611c1d5760405162461bcd60e51b8152600401610a0b90613663565b600854604051636fa3e4ef60e11b81526001600160a01b039091169063df47c9de90610fc39087908790879087906004016139fa565b611c5b611ead565b6005546001600160a01b03908116911614611c885760405162461bcd60e51b8152600401610a0b90613663565b600a546001600160a01b0382811691161415611cb65760405162461bcd60e51b8152600401610a0b906138c1565b611cc1816001611899565b600a546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600854604051635183d6fd60e01b81526000918291829182916001600160a01b0390911690635183d6fd9061182590889060040161395d565b611d5f611ead565b6005546001600160a01b03908116911614611d8c5760405162461bcd60e51b8152600401610a0b90613663565b6001600160a01b038116611db25760405162461bcd60e51b8152600401610a0b906132fd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b611e16611ead565b6005546001600160a01b03908116911614611e435760405162461bcd60e51b8152600401610a0b90613663565b600e54610100900460ff16611e6a5760405162461bcd60e51b8152600401610a0b90613580565b600e805461ff0019169055565b600080611e848385613a23565b905083811015611ea65760405162461bcd60e51b8152600401610a0b906133f7565b9392505050565b3390565b6001600160a01b038316611ed75760405162461bcd60e51b8152600401610a0b90613820565b6001600160a01b038216611efd5760405162461bcd60e51b8152600401610a0b90613343565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f5890859061395d565b60405180910390a3505050565b6001600160a01b038316611f8b5760405162461bcd60e51b8152600401610a0b9061372a565b6001600160a01b038216611fb15760405162461bcd60e51b8152600401610a0b90613202565b600e5460ff16611ff3576001600160a01b03831660009081526010602052604090205460ff16611ff35760405162461bcd60e51b8152600401610a0b906135c5565b8061200957612004838360006126d7565b6124bd565b600754600160a01b900460ff161580156120255750600e5460ff165b801561204957506001600160a01b03821660009081526011602052604090205460ff165b801561206357506006546001600160a01b03848116911614155b801561208857506001600160a01b0382166000908152600f602052604090205460ff16155b156120b8576a084595161401484a0000008111156120b85760405162461bcd60e51b8152600401610a0b90613296565b600e54610100900460ff1680156120d95750600754600160a01b900460ff16155b80156120e75750600e5460ff165b801561210b57506001600160a01b03831660009081526011602052604090205460ff165b801561212557506006546001600160a01b03838116911614155b801561214a57506001600160a01b0382166000908152600f602052604090205460ff16155b156121795766d3c21bcecceda160191b8111156121795760405162461bcd60e51b8152600401610a0b906137c3565b600061218430611244565b600e5490915066d3c21bcecceda160191b8210159060ff1680156121a55750805b80156121bb5750600754600160a01b900460ff16155b80156121e057506001600160a01b03851660009081526011602052604090205460ff16155b80156121fa5750600a546001600160a01b03868116911614155b80156122145750600a546001600160a01b03858116911614155b156122f8576007805460ff60a01b1916600160a01b179055600d54600090612247906122418560026127da565b9061281f565b90506122528161285e565b600d54600090612267906122418660026127da565b600b54909150612280906001600160a01b0316826128df565b600d54600090612295906122418760046127da565b90506122a081612991565b600d546000906122b5906122418860026127da565b90506122c130826124fc565b60006122cc30611244565b600c549091506122e5906001600160a01b0316826128df565b50506007805460ff60a01b191690555050505b600e5460009060ff1680156123175750600754600160a01b900460ff16155b6001600160a01b0387166000908152600f602052604090205490915060ff168061235957506001600160a01b0385166000908152600f602052604090205460ff165b15612362575060005b8080156123a957506001600160a01b03861660009081526011602052604090205460ff16806123a957506001600160a01b03851660009081526011602052604090205460ff165b156123e55760006123ca6064612241600d54886127da90919063ffffffff16565b90506123d685826129d4565b94506123e38730836126d7565b505b6123f08686866126d7565b6008546001600160a01b031663e30443bc8761240b81611244565b6040518363ffffffff1660e01b81526004016124289291906130ce565b600060405180830381600087803b15801561244257600080fd5b505af1925050508015612453575060015b506008546001600160a01b031663e30443bc8661246f81611244565b6040518363ffffffff1660e01b815260040161248c9291906130ce565b600060405180830381600087803b1580156124a657600080fd5b505af19250505080156124b7575060015b505b5050505b505050565b600081848411156124e65760405162461bcd60e51b8152600401610a0b91906131af565b5060006124f38486613a7a565b95945050505050565b6001600160a01b0382166125225760405162461bcd60e51b8152600401610a0b90613698565b61252e826000836124bd565b61256b81604051806060016040528060228152602001613b30602291396001600160a01b03851660009081526020819052604090205491906124c2565b6001600160a01b03831660009081526020819052604090205560025461259190826129d4565b6002556040516000906001600160a01b03841690600080516020613ba0833981519152906125c090859061395d565b60405180910390a35050565b6001600160a01b03821660009081526011602052604090205460ff161515811515141561260b5760405162461bcd60e51b8152600401610a0b90613864565b6001600160a01b0382166000908152601160205260409020805460ff1916821580159190911790915561269b5760085460405163031e79db60e41b81526001600160a01b03909116906331e79db0906126689085906004016130ba565b600060405180830381600087803b15801561268257600080fd5b505af1158015612696573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166126fd5760405162461bcd60e51b8152600401610a0b9061372a565b6001600160a01b0382166127235760405162461bcd60e51b8152600401610a0b90613202565b61272e8383836124bd565b61276b81604051806060016040528060268152602001613b52602691396001600160a01b03861660009081526020819052604090205491906124c2565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461279a9082611e77565b6001600160a01b038084166000818152602081905260409081902093909355915190851690600080516020613ba083398151915290611f5890859061395d565b6000826127e9575060006109d0565b60006127f58385613a5b565b9050826128028583613a3b565b14611ea65760405162461bcd60e51b8152600401610a0b90613622565b6000611ea683836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612a16565b600061286b82600261281f565b9050600061287983836129d4565b90504761288583612a44565b600061289147836129d4565b905061289d8382612bc1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516128d0939291906139e4565b60405180910390a15050505050565b6128e881612a44565b60004790506000836001600160a01b031682604051612906906130b7565b60006040518083038185875af1925050503d8060008114612943576040519150601f19603f3d011682016040523d82523d6000602084013e612948565b606091505b505090508015610ccd577f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc383836040516129839291906139d6565b60405180910390a150505050565b61299a81612c72565b7f6d1b229dafadcd720d5a60a73409508ab97a09a020cffe742460e5a58f790b61816040516129c9919061395d565b60405180910390a150565b6000611ea683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124c2565b60008183612a375760405162461bcd60e51b8152600401610a0b91906131af565b5060006124f38486613a3b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a8757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612adb57600080fd5b505afa158015612aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b139190612e3e565b81600181518110612b3457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612b5a9130911684611eb1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b93908590600090869030904290600401613966565b600060405180830381600087803b158015612bad57600080fd5b505af11580156124b9573d6000803e3d6000fd5b600654612bd99030906001600160a01b031684611eb1565b600654600a5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612c199230928992600092839216904290600401613110565b6060604051808303818588803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c6b919061303d565b5050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612cb757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d0b57600080fd5b505afa158015612d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d439190612e3e565b81600181518110612d6457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600954825191169082906002908110612da357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612dc99130911684611eb1565b600654604051635c11d79560e01b81526001600160a01b0390911690635c11d79590612b9390859060009086907f0000000000000000000000000000000000000000000000000000000000000000904290600401613966565b600060208284031215612e33578081fd5b8135611ea681613afd565b600060208284031215612e4f578081fd5b8151611ea681613afd565b60008060408385031215612e6c578081fd5b8235612e7781613afd565b91506020830135612e8781613afd565b809150509250929050565b600080600060608486031215612ea6578081fd5b8335612eb181613afd565b92506020840135612ec181613afd565b929592945050506040919091013590565b60008060408385031215612ee4578182fd5b8235612eef81613afd565b91506020830135612e8781613b12565b60008060008060808587031215612f14578081fd5b8451612f1f81613afd565b602086015160408701519195509350612f3781613b20565b6060959095015193969295505050565b60008060408385031215612f59578182fd5b8235612f6481613afd565b946020939093013593505050565b600080600060408486031215612f86578283fd5b83356001600160401b0380821115612f9c578485fd5b818601915086601f830112612faf578485fd5b813581811115612fbd578586fd5b8760208083028501011115612fd0578586fd5b60209283019550935050840135612fe681613b12565b809150509250925092565b600060208284031215613002578081fd5b8151611ea681613b12565b60006020828403121561301e578081fd5b5035919050565b600060208284031215613036578081fd5b5051919050565b600080600060608486031215613051578283fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561307f578384fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156130ac578081fd5b8135611ea681613b20565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03949094168452602084019290925260ff166040830152606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6040808252810183905260008460608301825b8681101561318e57823561317181613afd565b6001600160a01b031682526020928301929091019060010161315e565b5080925050508215156020830152949350505050565b901515815260200190565b6000602080835283518082850152825b818110156131db578581018301518582016040015282016131bf565b818111156131ec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479206578636c756460408201527065642066726f6d206469766964656e647360781b606082015260800190565b60208082526041908201527f435245454d3a2053656c6c207472616e7366657220616d6f756e74206578636560408201527f65647320746865206d617853656c6c5472616e73616374696f6e416d6f756e746060820152601760f91b608082015260a00190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252604c908201527f435245454d3a205468652050616e63616b655377617020706169722063616e6e60408201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60608201526b65744d616b6572506169727360a01b608082015260a00190565b6020808252601b908201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604082015260600190565b60208082526035908201527f435245454d3a2054686520646576656c6f706d656e742077616c6c657420697360408201527420616c72656164792074686973206164647265737360581b606082015260800190565b60208082526049908201527f435245454d3a20546865206e6577206469766964656e6420747261636b65722060408201527f6d757374206265206f776e65642062792074686520435245454d20746f6b656e6060820152680818dbdb9d1c9858dd60ba1b608082015260a00190565b6020808252602a908201527f435245454d3a2054686520726f7574657220616c7265616479206861732074686040820152696174206164647265737360b01b606082015260800190565b60208082526026908201527f435245454d3a207065656368546f6b656e206861732073696d696c617220616460408201526564726573732160d01b606082015260800190565b60208082526025908201527f435245454d3a20627579206c696d697420616c726561647920646973616374696040820152641d985d195960da1b606082015260800190565b6020808252603f908201527f435245454d3a2054686973206163636f756e742063616e6e6f742073656e642060408201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526034908201527f435245454d3a20546865206469766964656e6420747261636b657220616c7265604082015273616479206861732074686174206164647265737360601b606082015260800190565b6020808252603f908201527f435245454d3a20427579207472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61784275795472616e73616374696f6e416d6f756e742e00606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252603f908201527f435245454d3a204175746f6d61746564206d61726b6574206d616b657220706160408201527f697220697320616c72656164792073657420746f20746861742076616c756500606082015260800190565b60208082526033908201527f435245454d3a20546865206c69717569646974792077616c6c657420697320616040820152726c72656164792074686973206164647265737360681b606082015260800190565b60208082526029908201527f435245454d3a2074726164696e672068617320616c7265616479206265656e206040820152681858dd1a5d985d195960ba1b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156139b55784516001600160a01b031683529383019391830191600101613990565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60008219821115613a3657613a36613ae7565b500190565b600082613a5657634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613a7557613a75613ae7565b500290565b600082821015613a8c57613a8c613ae7565b500390565b600281046001821680613aa557607f821691505b60208210811415613ac657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613ae057613ae0613ae7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610f5557600080fd5b8015158114610f5557600080fd5b60ff81168114610f5557600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207071881857866ada73695c7033cf2730d15c4d551b0042ec44bfd4f820c6d5dd64736f6c63430008000033610100604052606460809081526101f460a0526103e860c0526107d060e0526200002e906008906004620001b6565b506040805160808101825267016345785d8a000081526706f05b59d3b200006020820152670de0b6b3a764000091810191909152671bc16d674ec800006060820152620000809060099060046200020c565b50600f80546001600160a01b0319908116730d4a11d5eeaac28ec3f61d100daf4d40471f1852179091556010805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055348015620000d657600080fd5b50604080518082018252600f81526e435245454d204469766964656e647360881b60208083019182528351808501909452600784526610d491515357d160ca1b90840152815191929183918391620001319160039162000255565b5080516200014790600490602084019062000255565b505050505060006200015e620001b260201b60201c565b600780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000326565b3390565b828054828255906000526020600020908101928215620001fa579160200282015b82811115620001fa578251829061ffff16905591602001919060010190620001d7565b5062000208929150620002d2565b5090565b828054828255906000526020600020908101928215620001fa579160200282015b82811115620001fa57825182906001600160401b03169055916020019190600101906200022d565b8280546200026390620002e9565b90600052602060002090601f016020900481019282620002875760008555620001fa565b82601f10620002a257805160ff1916838001178555620001fa565b82800160010185558215620001fa579182015b82811115620001fa578251825591602001919060010190620002b5565b5b80821115620002085760008155600101620002d3565b600281046001821680620002fe57607f821691505b602082108114156200032057634e487b7160e01b600052602260045260246000fd5b50919050565b612f0980620003366000396000f3fe60806040526004361061018d5760003560e01c806303c83302146101a157806306fdde03146101a9578063095ea7b3146101d457806309bbedde1461020157806318160ddd146102235780631a377e4f1461023857806323b872dd146102585780632520bf0414610278578063313ce5671461028d57806331e79db0146102af57806339509351146102cf57806342966c68146102ef57806343658c6c1461030f5780634e7b827f1461032f57806350228f581461034f5780635183d6fd146103715780635d54e86a146103a157806370a08231146103c15780637e7a64c4146103e15780638187f5161461040157806385a6b3ae146104215780638da5cb5b1461043657806395d89b411461044b578063a31dc2cd14610460578063a457c2d714610480578063a9059cbb146104a0578063aafd847a146104c0578063c705c569146104e0578063dd62ed3e14610500578063df47c9de14610520578063e30443bc14610540578063e96a851b14610560578063f2fde38b14610580578063fbcbc0f1146105a05761019c565b3661019c5761019a6105c0565b005b600080fd5b61019a6105c0565b3480156101b557600080fd5b506101be61064a565b6040516101cb919061275e565b60405180910390f35b3480156101e057600080fd5b506101f46101ef3660046125b4565b6106dc565b6040516101cb9190612753565b34801561020d57600080fd5b506102166106fa565b6040516101cb9190612b50565b34801561022f57600080fd5b50610216610700565b34801561024457600080fd5b50610216610253366004612694565b610706565b34801561026457600080fd5b506101f4610273366004612574565b61077d565b34801561028457600080fd5b5061019a610805565b34801561029957600080fd5b506102a2610ace565b6040516101cb9190612bc0565b3480156102bb57600080fd5b5061019a6102ca3660046124d9565b610ad3565b3480156102db57600080fd5b506101f46102ea3660046125b4565b610c7d565b3480156102fb57600080fd5b5061019a61030a36600461264b565b610ccb565b34801561031b57600080fd5b5061019a61032a366004612663565b610cd8565b34801561033b57600080fd5b506101f461034a3660046124d9565b610e16565b34801561035b57600080fd5b50610364610e2b565b6040516101cb9190612716565b34801561037d57600080fd5b5061039161038c36600461264b565b610e3a565b6040516101cb949392919061272a565b3480156103ad57600080fd5b506102166103bc366004612694565b610f8c565b3480156103cd57600080fd5b506102166103dc3660046124d9565b611024565b3480156103ed57600080fd5b506102166103fc36600461264b565b61103f565b34801561040d57600080fd5b5061019a61041c3660046124d9565b611060565b34801561042d57600080fd5b506102166110b7565b34801561044257600080fd5b506103646110bd565b34801561045757600080fd5b506101be6110cc565b34801561046c57600080fd5b5061021661047b366004612694565b6110db565b34801561048c57600080fd5b506101f461049b3660046125b4565b61111e565b3480156104ac57600080fd5b506101f46104bb3660046125b4565b611186565b3480156104cc57600080fd5b506102166104db3660046124d9565b61119a565b3480156104ec57600080fd5b506101f46104fb3660046124d9565b6111b5565b34801561050c57600080fd5b5061021661051b36600461253c565b6111d3565b34801561052c57600080fd5b5061019a61053b366004612663565b6111fe565b34801561054c57600080fd5b5061019a61055b366004612511565b61132a565b34801561056c57600080fd5b5061021661057b36600461264b565b6116f0565b34801561058c57600080fd5b5061019a61059b3660046124d9565b611700565b3480156105ac57600080fd5b506103916105bb3660046124d9565b6117b7565b60006105ca610700565b116105f05760405162461bcd60e51b81526004016105e7906128fc565b60405180910390fd5b341561064857336001600160a01b03167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165113460405161062f9190612b50565b60405180910390a2600654610644903461190a565b6006555b565b60606003805461065990612d6a565b80601f016020809104026020016040519081016040528092919081815260200182805461068590612d6a565b80156106d25780601f106106a7576101008083540402835291602001916106d2565b820191906000526020600020905b8154815290600101906020018083116106b557829003601f168201915b5050505050905090565b60006106f06106e9611939565b848461193d565b5060015b92915050565b600a5490565b60025490565b600060018260ff1610158015610720575060048260ff1611155b61073c5760405162461bcd60e51b81526004016105e7906129a7565b6009610749600184612d47565b60ff168154811061076a57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490505b919050565b600061078a8484846119f1565b6107fa84610796611939565b6107f585604051806060016040528060288152602001612e47602891396001600160a01b038a166000908152600160205260408120906107d4611939565b6001600160a01b031681526020810191909152604001600020549190611a0e565b61193d565b5060015b9392505050565b61080d611939565b6007546001600160a01b0390811691161461083a5760405162461bcd60e51b81526004016105e790612972565b600a548061085a5760405162461bcd60e51b81526004016105e7906127b1565b6000610864611a48565b9050600081116108865760405162461bcd60e51b81526004016105e790612a17565b60006108be8260096000815481106108ae57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154611a4c565b90506000816001600160401b038111156108e857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610911578160200160208202803683370190505b509050600061091f85611a9a565b905060005b83811015610a1d578582141561093957600091505b600061094483610e3a565b5050509050600061095482611ad5565b9050808711156109af576109688782611bad565b508185848151811061098a57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506109fb565b60009650818584815181106109d457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250505050610a1d565b83610a0581612da5565b94505050508080610a1590612da5565b915050610924565b506000610a2983611bdd565b9050610a33611a48565b945060005b8151811015610ac5576000828281518110610a6357634e487b7160e01b600052603260045260246000fd5b602002602001015190506000610a7882611ad5565b905080881115610a9e57610a8c8882611bad565b9750610a988282611cfb565b50610ab0565b610aa88289611cfb565b505050610ac5565b50508080610abd90612da5565b915050610a38565b50505050505050565b601290565b610adb611939565b6007546001600160a01b03908116911614610b085760405162461bcd60e51b81526004016105e790612972565b6001600160a01b03811660009081526012602052604090205460ff1615610b415760405162461bcd60e51b81526004016105e790612a92565b6001600160a01b0381166000908152601260205260408120805460ff19166001179055610b6f908290611d12565b60405163131836e760e21b81527364e324e4e48af3281b961da1e514ecf196319bb990634c60db9c90610ba990600a908590600401612b59565b60006040518083038186803b158015610bc157600080fd5b505af4158015610bd5573d6000803e3d6000fd5b5050604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb99250632510da739150610c1690600a908590600090600401612b70565b60006040518083038186803b158015610c2e57600080fd5b505af4158015610c42573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b60006106f0610c8a611939565b846107f58560016000610c9b611939565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061190a565b610cd53382611d6b565b50565b610ce0611939565b6007546001600160a01b03908116911614610d0d5760405162461bcd60e51b81526004016105e790612972565b600084118015610d1c57508383115b8015610d2757508282115b8015610d3257508181115b610d4e5760405162461bcd60e51b81526004016105e790612ae2565b836009600081548110610d7157634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550826009600181548110610da257634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550816009600281548110610dd357634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550806009600381548110610e0457634e487b7160e01b600052603260045260246000fd5b60009182526020909120015550505050565b60126020526000908152604090205460ff1681565b6011546001600160a01b031681565b600080600080600a7364e324e4e48af3281b961da1e514ecf196319bb963deb3d89690916040518263ffffffff1660e01b8152600401610e7a9190612b50565b60206040518083038186803b158015610e9257600080fd5b505af4158015610ea6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eca91906125e5565b8510610ee3575060009250600019915082905080610f85565b6040516368d54f3f60e11b81526000907364e324e4e48af3281b961da1e514ecf196319bb99063d1aa9e7e90610f2090600a908a90600401612bb2565b60206040518083038186803b158015610f3857600080fd5b505af4158015610f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7091906124f5565b9050610f7b816117b7565b9450945094509450505b9193509193565b600060018260ff1610158015610fa6575060048260ff1611155b610fc25760405162461bcd60e51b81526004016105e7906129a7565b6106f468056bc75e2d6310000061101e60506110186008610fe760ff89166001611d75565b60ff168154811061100857634e487b7160e01b600052603260045260246000fd5b9060005260206000200154611da5565b90611efb565b90611f40565b6001600160a01b031660009081526020819052604090205490565b6008818154811061104f57600080fd5b600091825260209091200154905081565b611068611939565b6007546001600160a01b039081169116146110955760405162461bcd60e51b81526004016105e790612972565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b60065481565b6007546001600160a01b031690565b60606004805461065990612d6a565b600060018260ff16101580156110f5575060048260ff1611155b6111115760405162461bcd60e51b81526004016105e7906129a7565b6008610749600184612d47565b60006106f061112b611939565b846107f585604051806060016040528060258152602001612eaf6025913960016000611155611939565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a0e565b60006106f0611193611939565b84846119f1565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b031660009081526012602052604090205460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611206611939565b6007546001600160a01b039081169116146112335760405162461bcd60e51b81526004016105e790612972565b60008411801561124257508383115b801561124d57508282115b801561125857508181115b6112745760405162461bcd60e51b81526004016105e790612ae2565b83600860008154811061129757634e487b7160e01b600052603260045260246000fd5b90600052602060002001819055508260086001815481106112c857634e487b7160e01b600052603260045260246000fd5b90600052602060002001819055508160086002815481106112f957634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550806008600381548110610e0457634e487b7160e01b600052603260045260246000fd5b611332611939565b6007546001600160a01b0390811691161461135f5760405162461bcd60e51b81526004016105e790612972565b6001600160a01b03821660009081526012602052604090205460ff1615611385576116ec565b6113aa600860008154811061100857634e487b7160e01b600052603260045260246000fd5b811115611609576113bb8282611d12565b604051632f0ad01760e21b81527364e324e4e48af3281b961da1e514ecf196319bb99063bc2b405c906113f790600a9086908690600401612b93565b60006040518083038186803b15801561140f57600080fd5b505af4158015611423573d6000803e3d6000fd5b5050505061144c600860038154811061100857634e487b7160e01b600052603260045260246000fd5b8111156114c457604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da739061148f90600a9086906004908101612b70565b60006040518083038186803b1580156114a757600080fd5b505af41580156114bb573d6000803e3d6000fd5b50505050611604565b6114e9600860028154811061100857634e487b7160e01b600052603260045260246000fd5b81111561152d57604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da739061148f90600a908690600390600401612b70565b611552600860018154811061100857634e487b7160e01b600052603260045260246000fd5b81111561159657604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da739061148f90600a908690600290600401612b70565b604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da73906115d390600a908690600190600401612b70565b60006040518083038186803b1580156115eb57600080fd5b505af41580156115ff573d6000803e3d6000fd5b505050505b6116ec565b611614826000611d12565b604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da739061165190600a908690600090600401612b70565b60006040518083038186803b15801561166957600080fd5b505af415801561167d573d6000803e3d6000fd5b505060405163131836e760e21b81527364e324e4e48af3281b961da1e514ecf196319bb99250634c60db9c91506116bb90600a908690600401612b59565b60006040518083038186803b1580156116d357600080fd5b505af41580156116e7573d6000803e3d6000fd5b505050505b5050565b6009818154811061104f57600080fd5b611708611939565b6007546001600160a01b039081169116146117355760405162461bcd60e51b81526004016105e790612972565b6001600160a01b03811661175b5760405162461bcd60e51b81526004016105e79061283f565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6040516317e142d160e01b81528190600090819081907364e324e4e48af3281b961da1e514ecf196319bb9906317e142d1906117fa90600a908890600401612b59565b60206040518083038186803b15801561181257600080fd5b505af4158015611826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184a91906125e5565b60405163a753cb6360e01b81529093507364e324e4e48af3281b961da1e514ecf196319bb99063a753cb639061188790600a908990600401612b59565b60206040518083038186803b15801561189f57600080fd5b505af41580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d791906125c6565b60048111156118f657634e487b7160e01b600052602160045260246000fd5b91506119018461119a565b90509193509193565b6000806119178385612bce565b9050838110156107fe5760405162461bcd60e51b81526004016105e7906128c7565b3390565b6001600160a01b0383166119635760405162461bcd60e51b81526004016105e790612a4e565b6001600160a01b0382166119895760405162461bcd60e51b81526004016105e790612885565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906119e4908590612b50565b60405180910390a3505050565b60405162461bcd60e51b81526004016105e790612808565b505050565b60008184841115611a325760405162461bcd60e51b81526004016105e7919061275e565b506000611a3f8486612d30565b95945050505050565b4790565b600081831015611a5e575060016106f4565b6000611a6a8484611f7f565b15611a76576001611a79565b60005b60ff169050611a9281611a8c8686611f40565b9061190a565b9150506106f4565b600081334442604051602001611ab2939291906126ee565b6040516020818303038152906040528051906020012060001c6106f49190612dc0565b60006009611b8f6001600a7364e324e4e48af3281b961da1e514ecf196319bb963a753cb639091876040518363ffffffff1660e01b8152600401611b1a929190612b59565b60206040518083038186803b158015611b3257600080fd5b505af4158015611b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6a91906125c6565b6004811115611b8957634e487b7160e01b600052602160045260246000fd5b90611bad565b8154811061076a57634e487b7160e01b600052603260045260246000fd5b60006107fe83836040518060400160405280601e8152602001600080516020612e8f833981519152815250611a0e565b8051606090806001600160401b03811115611c0857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c31578160200160208202803683370190505b50915060005b80821115611cf4576000611c4a85611fbc565b9050848181518110611c6c57634e487b7160e01b600052603260045260246000fd5b6020026020010151848381518110611c9457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611cd457634e487b7160e01b600052603260045260246000fd5b6000602091820292909201015281611ceb81612da5565b92505050611c37565b5050919050565b600080611d088484612041565b1515949350505050565b6000611d1d83611024565b905080821115611d45576000611d338383611bad565b9050611d3f848261213b565b50611a09565b80821015611a09576000611d598284611bad565b9050611d658482611d6b565b50505050565b6116ec8282612145565b60006107fe83836040518060400160405280601e8152602001600080516020612e8f833981519152815250612215565b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611df657600080fd5b505afa158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e91906124f5565b90506000611ed8600f60009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8457600080fd5b505afa158015611e98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebc91906126b0565b611ec790600a612c40565b611ed19087612d11565b600061224d565b601154909150611ef3906001600160a01b031682600161224d565b949350505050565b600082611f0a575060006106f4565b6000611f168385612d11565b905082611f238583612be6565b146107fe5760405162461bcd60e51b81526004016105e790612931565b60006107fe83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061229d565b60006107fe838360405180604001604052806018815260200177536166654d6174683a206d6f64756c6f206279207a65726f60401b8152506122cb565b60008060015b835181101561203a57611ffb848381518110611fee57634e487b7160e01b600052603260045260246000fd5b6020026020010151611024565b61201e858381518110611fee57634e487b7160e01b600052603260045260246000fd5b1115612028578091505b8061203281612da5565b915050611fc2565b5092915050565b60008115612132576001600160a01b03831660009081526005602052604090205461206c908361190a565b6001600160a01b038416600081815260056020526040808220939093559151849061209690612713565b60006040518083038185875af1925050503d80600081146120d3576040519150601f19603f3d011682016040523d82523d6000602084013e6120d8565b606091505b5050905080612129576001600160a01b0384166000908152600560205260409020546121049084611bad565b6001600160a01b03851660009081526005602052604081209190915591506106f49050565b829150506106f4565b50600092915050565b6116ec82826122f7565b6001600160a01b03821661216b5760405162461bcd60e51b81526004016105e7906129d6565b61217782600083611a09565b6121b481604051806060016040528060228152602001612e25602291396001600160a01b0385166000908152602081905260409020549190611a0e565b6001600160a01b0383166000908152602081905260409020556002546121da9082611bad565b6002556040516000906001600160a01b03841690600080516020612e6f83398151915290612209908590612b50565b60405180910390a35050565b60008360ff168360ff16111582906122405760405162461bcd60e51b81526004016105e7919061275e565b506000611a3f8486612d47565b600080600061225b86612399565b915091508361227e578161226f8287612d11565b6122799190612be6565b612293565b806122898387612d11565b6122939190612be6565b9695505050505050565b600081836122be5760405162461bcd60e51b81526004016105e7919061275e565b506000611a3f8486612be6565b600081836122ec5760405162461bcd60e51b81526004016105e7919061275e565b50611ef38385612dc0565b6001600160a01b03821661231d5760405162461bcd60e51b81526004016105e790612b19565b61232960008383611a09565b600254612336908261190a565b6002556001600160a01b03821660009081526020819052604090205461235c908261190a565b6001600160a01b038316600081815260208190526040808220939093559151909190600080516020612e6f83398151915290612209908590612b50565b6000806000836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156123d757600080fd5b505afa1580156123eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240f91906124f5565b9050600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561244d57600080fd5b505afa158015612461573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248591906125fd565b506010546001600160701b039283169450911691506001600160a01b038481169116146124b35780826124b6565b81815b94509450505050915091565b80516001600160701b038116811461077857600080fd5b6000602082840312156124ea578081fd5b81356107fe81612e00565b600060208284031215612506578081fd5b81516107fe81612e00565b60008060408385031215612523578081fd5b823561252e81612e00565b946020939093013593505050565b6000806040838503121561254e578182fd5b823561255981612e00565b9150602083013561256981612e00565b809150509250929050565b600080600060608486031215612588578081fd5b833561259381612e00565b925060208401356125a381612e00565b929592945050506040919091013590565b60008060408385031215612523578182fd5b6000602082840312156125d7578081fd5b8151600581106107fe578182fd5b6000602082840312156125f6578081fd5b5051919050565b600080600060608486031215612611578283fd5b61261a846124c2565b9250612628602085016124c2565b9150604084015163ffffffff81168114612640578182fd5b809150509250925092565b60006020828403121561265c578081fd5b5035919050565b60008060008060808587031215612678578081fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156126a5578081fd5b81356107fe81612e15565b6000602082840312156126c1578081fd5b81516107fe81612e15565b600581106126ea57634e487b7160e01b600052602160045260246000fd5b9052565b60609390931b6001600160601b03191683526014830191909152603482015260540190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03949094168452602084019290925260ff166040830152606082015260800190565b901515815260200190565b6000602080835283518082850152825b8181101561278a5785810183015185820160400152820161276e565b8181111561279b5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526037908201527f435245454d5f443a207468657265206d7573742062652061206d696e696d756d604082015276206f6620312064697669646e65647320686f6c6465727360481b606082015260800190565b6020808252601d908201527f435245454d5f443a204e6f207472616e736665727320616c6c6f776564000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604082015260600190565b6020808252601b908201527a3234bb34b232b732b2103a37ba30b639bab838363c9032b93937b960291b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526015908201527421a922a2a6afa21d1034b73b30b634b2103a34b2b960591b604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252601e908201527f435245454d5f443a20696e73756666696369656e742062616c616e6365210000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526030908201527f435245454d5f443a204164647265737320616c7265616479206578636c75646560408201526f642066726f6d206469766964656e647360801b606082015260800190565b6020808252601f908201527f435245454d5f443a20746965727320617265206e6f7420696e206f7264657200604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b9182526001600160a01b0316602082015260400190565b8381526001600160a01b038316602082015260608101611ef360408301846126cc565b9283526001600160a01b03919091166020830152604082015260600190565b918252602082015260400190565b60ff91909116815260200190565b60008219821115612be157612be1612dd4565b500190565b600082612bf557612bf5612dea565b500490565b80825b6001808611612c0c5750612c37565b818704821115612c1e57612c1e612dd4565b80861615612c2b57918102915b9490941c938002612bfd565b94509492505050565b60006107fe60001960ff851684600082612c5c575060016107fe565b81612c69575060006107fe565b8160018114612c7f5760028114612c8957612cb6565b60019150506107fe565b60ff841115612c9a57612c9a612dd4565b6001841b915084821115612cb057612cb0612dd4565b506107fe565b5060208310610133831016604e8410600b8410161715612ce9575081810a83811115612ce457612ce4612dd4565b6107fe565b612cf68484846001612bfa565b808604821115612d0857612d08612dd4565b02949350505050565b6000816000190483118215151615612d2b57612d2b612dd4565b500290565b600082821015612d4257612d42612dd4565b500390565b600060ff821660ff841680821015612d6157612d61612dd4565b90039392505050565b600281046001821680612d7e57607f821691505b60208210811415612d9f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612db957612db9612dd4565b5060010190565b600082612dcf57612dcf612dea565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b0381168114610cd557600080fd5b60ff81168114610cd557600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef536166654d6174683a207375627472616374696f6e206f766572666c6f77000045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064277f8dde258ed1f712e34ceb1e292d0a2e92bea69c5d01864dc0d96c94c7f664736f6c6343000800003300000000000000000000000031d939dc09a6bb55642fcbf9d56166ebc0bdec9a00000000000000000000000066f6d7958049bfded399cd68aff49e0f2a9dcd4f000000000000000000000000240c42b59185ca2b1de9bf2fd54043b00fd774040000000000000000000000003beaae2f6972521f7d3e627ec4448d27207c7a47

Deployed Bytecode

0x6080604052600436106102aa5760003560e01c8062b61a57146102b657806302259e9e146102e1578063064a59d01461030357806306fdde0314610325578063095ea7b3146103475780630bd05b691461036757806313114a9d1461037e5780631694505e1461039357806318160ddd146103a85780631816467f146103bd5780631a377e4f146103dd57806323b872dd146103fd5780632520bf041461041d57806327c8f835146104325780632bb14e1d146104475780632c1f52161461045c57806330bb4cff14610471578063313ce5671461048657806331e79db0146104a857806339509351146104c85780633b2d081c1461044757806342966c68146104e857806343658c6c1461050857806349bd5a5e146105285780634fbee1931461053d578063548ba67a1461055d578063589210d91461057d5780635aa821a9146105925780635b35f9c9146105a75780635d54e86a146105bc57806364b0f653146105dc57806365b8dbc0146105f15780636827e764146106115780636843cd841461062657806370a082311461064657806388bdd9be146106665780638da5cb5b146106865780638ea5220f1461069b57806395d89b41146106b057806398118cb4146106115780639a7a23d6146106c5578063a31dc2cd146106e5578063a457c2d714610705578063a9059cbb14610725578063aafd847a14610745578063ad56c13c14610765578063b62496f514610795578063c0246668146107b5578063c492f046146107d5578063c705c569146107f5578063cfc0d02414610815578063d469801614610835578063dd62ed3e1461084a578063df47c9de1461086a578063e2f4560514610592578063e37ba8f91461088a578063f27fd254146108aa578063f2fde38b146108ca578063f4cb7a57146108ea578063fce589d814610611576102b1565b366102b157005b600080fd5b3480156102c257600080fd5b506102cb6108ff565b6040516102d891906130ba565b60405180910390f35b3480156102ed57600080fd5b506102f661090e565b6040516102d8919061395d565b34801561030f57600080fd5b5061031861091d565b6040516102d891906131a4565b34801561033157600080fd5b5061033a610926565b6040516102d891906131af565b34801561035357600080fd5b50610318610362366004612f47565b6109b8565b34801561037357600080fd5b5061037c6109d6565b005b34801561038a57600080fd5b506102f6610a46565b34801561039f57600080fd5b506102cb610a4c565b3480156103b457600080fd5b506102f6610a5b565b3480156103c957600080fd5b5061037c6103d8366004612e22565b610a61565b3480156103e957600080fd5b506102f66103f836600461309b565b610b2c565b34801561040957600080fd5b50610318610418366004612e92565b610bad565b34801561042957600080fd5b5061037c610c34565b34801561043e57600080fd5b506102cb610cd3565b34801561045357600080fd5b506102f6610cf7565b34801561046857600080fd5b506102cb610cfc565b34801561047d57600080fd5b506102f6610d0b565b34801561049257600080fd5b5061049b610d8d565b6040516102d89190613a15565b3480156104b457600080fd5b5061037c6104c3366004612e22565b610d92565b3480156104d457600080fd5b506103186104e3366004612f47565b610efd565b3480156104f457600080fd5b5061037c61050336600461300d565b610f4b565b34801561051457600080fd5b5061037c61052336600461306a565b610f58565b34801561053457600080fd5b506102cb610ffb565b34801561054957600080fd5b50610318610558366004612e22565b61100a565b34801561056957600080fd5b5061037c610578366004612e22565b611028565b34801561058957600080fd5b506103186110ad565b34801561059e57600080fd5b506102f66110bb565b3480156105b357600080fd5b506102cb6110c9565b3480156105c857600080fd5b506102f66105d736600461309b565b6110d8565b3480156105e857600080fd5b506102f6611109565b3480156105fd57600080fd5b5061037c61060c366004612e22565b61114e565b34801561061d57600080fd5b506102f661120e565b34801561063257600080fd5b506102f6610641366004612e22565b611213565b34801561065257600080fd5b506102f6610661366004612e22565b611244565b34801561067257600080fd5b5061037c610681366004612e22565b61125f565b34801561069257600080fd5b506102cb611670565b3480156106a757600080fd5b506102cb61167f565b3480156106bc57600080fd5b5061033a61168e565b3480156106d157600080fd5b5061037c6106e0366004612ed2565b61169d565b3480156106f157600080fd5b506102f661070036600461309b565b61170e565b34801561071157600080fd5b50610318610720366004612f47565b61173f565b34801561073157600080fd5b50610318610740366004612f47565b6117a7565b34801561075157600080fd5b506102f6610760366004612e22565b6117bb565b34801561077157600080fd5b50610785610780366004612e22565b6117ec565b6040516102d894939291906130e7565b3480156107a157600080fd5b506103186107b0366004612e22565b611884565b3480156107c157600080fd5b5061037c6107d0366004612ed2565b611899565b3480156107e157600080fd5b5061037c6107f0366004612f72565b61196d565b34801561080157600080fd5b50610318610810366004612e22565b611a62565b34801561082157600080fd5b5061037c610830366004612e22565b611ae3565b34801561084157600080fd5b506102cb611bae565b34801561085657600080fd5b506102f6610865366004612e5a565b611bbd565b34801561087657600080fd5b5061037c61088536600461306a565b611be8565b34801561089657600080fd5b5061037c6108a5366004612e22565b611c53565b3480156108b657600080fd5b506107856108c536600461300d565b611d1e565b3480156108d657600080fd5b5061037c6108e5366004612e22565b611d57565b3480156108f657600080fd5b5061037c611e0e565b6009546001600160a01b031681565b6a084595161401484a00000081565b600e5460ff1681565b60606003805461093590613a91565b80601f016020809104026020016040519081016040528092919081815260200182805461096190613a91565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611ead565b8484611eb1565b5060015b92915050565b6109de611ead565b6005546001600160a01b03908116911614610a145760405162461bcd60e51b8152600401610a0b90613663565b60405180910390fd5b600e5460ff1615610a375760405162461bcd60e51b8152600401610a0b90613914565b600e805460ff19166001179055565b600d5481565b6006546001600160a01b031681565b60025490565b610a69611ead565b6005546001600160a01b03908116911614610a965760405162461bcd60e51b8152600401610a0b90613663565b600b546001600160a01b0382811691161415610ac45760405162461bcd60e51b8152600401610a0b9061342c565b610acf816001611899565b600b546040516001600160a01b03918216918316907f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87190600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600854604051631a377e4f60e01b81526000916001600160a01b031690631a377e4f90610b5d908590600401613a15565b60206040518083038186803b158015610b7557600080fd5b505afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190613025565b6000610bba848484611f65565b610c2a84610bc6611ead565b610c2585604051806060016040528060288152602001613b78602891396001600160a01b038a16600090815260016020526040812090610c04611ead565b6001600160a01b0316815260208101919091526040016000205491906124c2565b611eb1565b5060019392505050565b610c3c611ead565b6005546001600160a01b03908116911614610c695760405162461bcd60e51b8152600401610a0b90613663565b600860009054906101000a90046001600160a01b03166001600160a01b0316632520bf046040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cb957600080fd5b505af1158015610ccd573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b600481565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015610d5057600080fd5b505afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190613025565b905090565b601290565b610d9a611ead565b6005546001600160a01b03908116911614610dc75760405162461bcd60e51b8152600401610a0b90613663565b60085460405163c705c56960e01b81526001600160a01b039091169063c705c56990610df79084906004016130ba565b60206040518083038186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e479190612ff1565b15610e645760405162461bcd60e51b8152600401610a0b90613245565b60085460405163031e79db60e41b81526001600160a01b03909116906331e79db090610e949084906004016130ba565b600060405180830381600087803b158015610eae57600080fd5b505af1158015610ec2573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b60006109cc610f0a611ead565b84610c258560016000610f1b611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611e77565b610f5533826124fc565b50565b610f60611ead565b6005546001600160a01b03908116911614610f8d5760405162461bcd60e51b8152600401610a0b90613663565b6008546040516310d9631b60e21b81526001600160a01b03909116906343658c6c90610fc39087908790879087906004016139fa565b600060405180830381600087803b158015610fdd57600080fd5b505af1158015610ff1573d6000803e3d6000fd5b5050505050505050565b6007546001600160a01b031681565b6001600160a01b03166000908152600f602052604090205460ff1690565b611030611ead565b6005546001600160a01b0390811691161461105d5760405162461bcd60e51b8152600401610a0b90613663565b6009546001600160a01b038281169116141561108b5760405162461bcd60e51b8152600401610a0b9061353a565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600e54610100900460ff1681565b66d3c21bcecceda160191b81565b600c546001600160a01b031681565b600854604051632eaa743560e11b81526000916001600160a01b031690635d54e86a90610b5d908590600401613a15565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015610d5057600080fd5b611156611ead565b6005546001600160a01b039081169116146111835760405162461bcd60e51b8152600401610a0b90613663565b6006546001600160a01b03828116911614156111b15760405162461bcd60e51b8152600401610a0b906134f0565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600281565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610b5d9085906004016130ba565b6001600160a01b031660009081526020819052604090205490565b611267611ead565b6005546001600160a01b039081169116146112945760405162461bcd60e51b8152600401610a0b90613663565b6008546001600160a01b03828116911614156112c25760405162461bcd60e51b8152600401610a0b9061376f565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130a57600080fd5b505afa15801561131e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113429190612e3e565b6001600160a01b0316146113685760405162461bcd60e51b8152600401610a0b90613481565b60405163031e79db60e41b81526001600160a01b038216906331e79db0906113949084906004016130ba565b600060405180830381600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b03841692506331e79db091506113f29030906004016130ba565b600060405180830381600087803b15801561140c57600080fd5b505af1158015611420573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db061143b611670565b6040518263ffffffff1660e01b815260040161145791906130ba565b600060405180830381600087803b15801561147157600080fd5b505af1158015611485573d6000803e3d6000fd5b505060065460405163031e79db60e41b81526001600160a01b0380861694506331e79db093506114b99216906004016130ba565b600060405180830381600087803b1580156114d357600080fd5b505af11580156114e7573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81526001600160a01b0380861694506331e79db0935061151b9216906004016130ba565b600060405180830381600087803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81526001600160a01b0380861694506331e79db0935061157d9216906004016130ba565b600060405180830381600087803b15801561159757600080fd5b505af11580156115ab573d6000803e3d6000fd5b5050600a5460405163031e79db60e41b81526001600160a01b0380861694506331e79db093506115df9216906004016130ba565b600060405180830381600087803b1580156115f957600080fd5b505af115801561160d573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b031690565b600b546001600160a01b031681565b60606004805461093590613a91565b6116a5611ead565b6005546001600160a01b039081169116146116d25760405162461bcd60e51b8152600401610a0b90613663565b6007546001600160a01b03838116911614156117005760405162461bcd60e51b8152600401610a0b90613385565b61170a82826125cc565b5050565b60085460405163a31dc2cd60e01b81526000916001600160a01b03169063a31dc2cd90610b5d908590600401613a15565b60006109cc61174c611ead565b84610c2585604051806060016040528060258152602001613bc06025913960016000611776611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906124c2565b60006109cc6117b4611ead565b8484611f65565b60085460405163557ec23d60e11b81526000916001600160a01b03169063aafd847a90610b5d9085906004016130ba565b60085460405163fbcbc0f160e01b81526000918291829182916001600160a01b039091169063fbcbc0f1906118259088906004016130ba565b60806040518083038186803b15801561183d57600080fd5b505afa158015611851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118759190612eff565b93509350935093509193509193565b60116020526000908152604090205460ff1681565b6118a1611ead565b6005546001600160a01b039081169116146118ce5760405162461bcd60e51b8152600401610a0b90613663565b6001600160a01b0382166000908152600f602052604090205460ff161515811515141561190d5760405162461bcd60e51b8152600401610a0b906136d9565b6001600160a01b0382166000818152600f602052604090819020805460ff1916841515179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7906119619084906131a4565b60405180910390a25050565b611975611ead565b6005546001600160a01b039081169116146119a25760405162461bcd60e51b8152600401610a0b90613663565b60005b82811015611a215781600f60008686858181106119d257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119e79190612e22565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611a1981613acc565b9150506119a5565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611a559392919061314b565b60405180910390a1505050565b60085460405163c705c56960e01b81526000916001600160a01b03169063c705c56990611a939085906004016130ba565b60206040518083038186803b158015611aab57600080fd5b505afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190612ff1565b611aeb611ead565b6005546001600160a01b03908116911614611b185760405162461bcd60e51b8152600401610a0b90613663565b600c546001600160a01b0382811691161415611b465760405162461bcd60e51b8152600401610a0b9061342c565b611b51816001611899565b600c546040516001600160a01b03918216918316907f85710b1053f40e0d492d81001a623cd191d251fed32881e7bb80fc1b66a6e46390600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611bf0611ead565b6005546001600160a01b03908116911614611c1d5760405162461bcd60e51b8152600401610a0b90613663565b600854604051636fa3e4ef60e11b81526001600160a01b039091169063df47c9de90610fc39087908790879087906004016139fa565b611c5b611ead565b6005546001600160a01b03908116911614611c885760405162461bcd60e51b8152600401610a0b90613663565b600a546001600160a01b0382811691161415611cb65760405162461bcd60e51b8152600401610a0b906138c1565b611cc1816001611899565b600a546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600854604051635183d6fd60e01b81526000918291829182916001600160a01b0390911690635183d6fd9061182590889060040161395d565b611d5f611ead565b6005546001600160a01b03908116911614611d8c5760405162461bcd60e51b8152600401610a0b90613663565b6001600160a01b038116611db25760405162461bcd60e51b8152600401610a0b906132fd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b611e16611ead565b6005546001600160a01b03908116911614611e435760405162461bcd60e51b8152600401610a0b90613663565b600e54610100900460ff16611e6a5760405162461bcd60e51b8152600401610a0b90613580565b600e805461ff0019169055565b600080611e848385613a23565b905083811015611ea65760405162461bcd60e51b8152600401610a0b906133f7565b9392505050565b3390565b6001600160a01b038316611ed75760405162461bcd60e51b8152600401610a0b90613820565b6001600160a01b038216611efd5760405162461bcd60e51b8152600401610a0b90613343565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f5890859061395d565b60405180910390a3505050565b6001600160a01b038316611f8b5760405162461bcd60e51b8152600401610a0b9061372a565b6001600160a01b038216611fb15760405162461bcd60e51b8152600401610a0b90613202565b600e5460ff16611ff3576001600160a01b03831660009081526010602052604090205460ff16611ff35760405162461bcd60e51b8152600401610a0b906135c5565b8061200957612004838360006126d7565b6124bd565b600754600160a01b900460ff161580156120255750600e5460ff165b801561204957506001600160a01b03821660009081526011602052604090205460ff165b801561206357506006546001600160a01b03848116911614155b801561208857506001600160a01b0382166000908152600f602052604090205460ff16155b156120b8576a084595161401484a0000008111156120b85760405162461bcd60e51b8152600401610a0b90613296565b600e54610100900460ff1680156120d95750600754600160a01b900460ff16155b80156120e75750600e5460ff165b801561210b57506001600160a01b03831660009081526011602052604090205460ff165b801561212557506006546001600160a01b03838116911614155b801561214a57506001600160a01b0382166000908152600f602052604090205460ff16155b156121795766d3c21bcecceda160191b8111156121795760405162461bcd60e51b8152600401610a0b906137c3565b600061218430611244565b600e5490915066d3c21bcecceda160191b8210159060ff1680156121a55750805b80156121bb5750600754600160a01b900460ff16155b80156121e057506001600160a01b03851660009081526011602052604090205460ff16155b80156121fa5750600a546001600160a01b03868116911614155b80156122145750600a546001600160a01b03858116911614155b156122f8576007805460ff60a01b1916600160a01b179055600d54600090612247906122418560026127da565b9061281f565b90506122528161285e565b600d54600090612267906122418660026127da565b600b54909150612280906001600160a01b0316826128df565b600d54600090612295906122418760046127da565b90506122a081612991565b600d546000906122b5906122418860026127da565b90506122c130826124fc565b60006122cc30611244565b600c549091506122e5906001600160a01b0316826128df565b50506007805460ff60a01b191690555050505b600e5460009060ff1680156123175750600754600160a01b900460ff16155b6001600160a01b0387166000908152600f602052604090205490915060ff168061235957506001600160a01b0385166000908152600f602052604090205460ff165b15612362575060005b8080156123a957506001600160a01b03861660009081526011602052604090205460ff16806123a957506001600160a01b03851660009081526011602052604090205460ff165b156123e55760006123ca6064612241600d54886127da90919063ffffffff16565b90506123d685826129d4565b94506123e38730836126d7565b505b6123f08686866126d7565b6008546001600160a01b031663e30443bc8761240b81611244565b6040518363ffffffff1660e01b81526004016124289291906130ce565b600060405180830381600087803b15801561244257600080fd5b505af1925050508015612453575060015b506008546001600160a01b031663e30443bc8661246f81611244565b6040518363ffffffff1660e01b815260040161248c9291906130ce565b600060405180830381600087803b1580156124a657600080fd5b505af19250505080156124b7575060015b505b5050505b505050565b600081848411156124e65760405162461bcd60e51b8152600401610a0b91906131af565b5060006124f38486613a7a565b95945050505050565b6001600160a01b0382166125225760405162461bcd60e51b8152600401610a0b90613698565b61252e826000836124bd565b61256b81604051806060016040528060228152602001613b30602291396001600160a01b03851660009081526020819052604090205491906124c2565b6001600160a01b03831660009081526020819052604090205560025461259190826129d4565b6002556040516000906001600160a01b03841690600080516020613ba0833981519152906125c090859061395d565b60405180910390a35050565b6001600160a01b03821660009081526011602052604090205460ff161515811515141561260b5760405162461bcd60e51b8152600401610a0b90613864565b6001600160a01b0382166000908152601160205260409020805460ff1916821580159190911790915561269b5760085460405163031e79db60e41b81526001600160a01b03909116906331e79db0906126689085906004016130ba565b600060405180830381600087803b15801561268257600080fd5b505af1158015612696573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166126fd5760405162461bcd60e51b8152600401610a0b9061372a565b6001600160a01b0382166127235760405162461bcd60e51b8152600401610a0b90613202565b61272e8383836124bd565b61276b81604051806060016040528060268152602001613b52602691396001600160a01b03861660009081526020819052604090205491906124c2565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461279a9082611e77565b6001600160a01b038084166000818152602081905260409081902093909355915190851690600080516020613ba083398151915290611f5890859061395d565b6000826127e9575060006109d0565b60006127f58385613a5b565b9050826128028583613a3b565b14611ea65760405162461bcd60e51b8152600401610a0b90613622565b6000611ea683836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612a16565b600061286b82600261281f565b9050600061287983836129d4565b90504761288583612a44565b600061289147836129d4565b905061289d8382612bc1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516128d0939291906139e4565b60405180910390a15050505050565b6128e881612a44565b60004790506000836001600160a01b031682604051612906906130b7565b60006040518083038185875af1925050503d8060008114612943576040519150601f19603f3d011682016040523d82523d6000602084013e612948565b606091505b505090508015610ccd577f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc383836040516129839291906139d6565b60405180910390a150505050565b61299a81612c72565b7f6d1b229dafadcd720d5a60a73409508ab97a09a020cffe742460e5a58f790b61816040516129c9919061395d565b60405180910390a150565b6000611ea683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124c2565b60008183612a375760405162461bcd60e51b8152600401610a0b91906131af565b5060006124f38486613a3b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a8757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612adb57600080fd5b505afa158015612aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b139190612e3e565b81600181518110612b3457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612b5a9130911684611eb1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b93908590600090869030904290600401613966565b600060405180830381600087803b158015612bad57600080fd5b505af11580156124b9573d6000803e3d6000fd5b600654612bd99030906001600160a01b031684611eb1565b600654600a5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612c199230928992600092839216904290600401613110565b6060604051808303818588803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c6b919061303d565b5050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612cb757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d0b57600080fd5b505afa158015612d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d439190612e3e565b81600181518110612d6457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600954825191169082906002908110612da357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612dc99130911684611eb1565b600654604051635c11d79560e01b81526001600160a01b0390911690635c11d79590612b9390859060009086907f000000000000000000000000000000000000000000000000000000000000dead904290600401613966565b600060208284031215612e33578081fd5b8135611ea681613afd565b600060208284031215612e4f578081fd5b8151611ea681613afd565b60008060408385031215612e6c578081fd5b8235612e7781613afd565b91506020830135612e8781613afd565b809150509250929050565b600080600060608486031215612ea6578081fd5b8335612eb181613afd565b92506020840135612ec181613afd565b929592945050506040919091013590565b60008060408385031215612ee4578182fd5b8235612eef81613afd565b91506020830135612e8781613b12565b60008060008060808587031215612f14578081fd5b8451612f1f81613afd565b602086015160408701519195509350612f3781613b20565b6060959095015193969295505050565b60008060408385031215612f59578182fd5b8235612f6481613afd565b946020939093013593505050565b600080600060408486031215612f86578283fd5b83356001600160401b0380821115612f9c578485fd5b818601915086601f830112612faf578485fd5b813581811115612fbd578586fd5b8760208083028501011115612fd0578586fd5b60209283019550935050840135612fe681613b12565b809150509250925092565b600060208284031215613002578081fd5b8151611ea681613b12565b60006020828403121561301e578081fd5b5035919050565b600060208284031215613036578081fd5b5051919050565b600080600060608486031215613051578283fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561307f578384fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156130ac578081fd5b8135611ea681613b20565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03949094168452602084019290925260ff166040830152606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6040808252810183905260008460608301825b8681101561318e57823561317181613afd565b6001600160a01b031682526020928301929091019060010161315e565b5080925050508215156020830152949350505050565b901515815260200190565b6000602080835283518082850152825b818110156131db578581018301518582016040015282016131bf565b818111156131ec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479206578636c756460408201527065642066726f6d206469766964656e647360781b606082015260800190565b60208082526041908201527f435245454d3a2053656c6c207472616e7366657220616d6f756e74206578636560408201527f65647320746865206d617853656c6c5472616e73616374696f6e416d6f756e746060820152601760f91b608082015260a00190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252604c908201527f435245454d3a205468652050616e63616b655377617020706169722063616e6e60408201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60608201526b65744d616b6572506169727360a01b608082015260a00190565b6020808252601b908201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604082015260600190565b60208082526035908201527f435245454d3a2054686520646576656c6f706d656e742077616c6c657420697360408201527420616c72656164792074686973206164647265737360581b606082015260800190565b60208082526049908201527f435245454d3a20546865206e6577206469766964656e6420747261636b65722060408201527f6d757374206265206f776e65642062792074686520435245454d20746f6b656e6060820152680818dbdb9d1c9858dd60ba1b608082015260a00190565b6020808252602a908201527f435245454d3a2054686520726f7574657220616c7265616479206861732074686040820152696174206164647265737360b01b606082015260800190565b60208082526026908201527f435245454d3a207065656368546f6b656e206861732073696d696c617220616460408201526564726573732160d01b606082015260800190565b60208082526025908201527f435245454d3a20627579206c696d697420616c726561647920646973616374696040820152641d985d195960da1b606082015260800190565b6020808252603f908201527f435245454d3a2054686973206163636f756e742063616e6e6f742073656e642060408201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526034908201527f435245454d3a20546865206469766964656e6420747261636b657220616c7265604082015273616479206861732074686174206164647265737360601b606082015260800190565b6020808252603f908201527f435245454d3a20427579207472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61784275795472616e73616374696f6e416d6f756e742e00606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252603f908201527f435245454d3a204175746f6d61746564206d61726b6574206d616b657220706160408201527f697220697320616c72656164792073657420746f20746861742076616c756500606082015260800190565b60208082526033908201527f435245454d3a20546865206c69717569646974792077616c6c657420697320616040820152726c72656164792074686973206164647265737360681b606082015260800190565b60208082526029908201527f435245454d3a2074726164696e672068617320616c7265616479206265656e206040820152681858dd1a5d985d195960ba1b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156139b55784516001600160a01b031683529383019391830191600101613990565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60008219821115613a3657613a36613ae7565b500190565b600082613a5657634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613a7557613a75613ae7565b500290565b600082821015613a8c57613a8c613ae7565b500390565b600281046001821680613aa557607f821691505b60208210811415613ac657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613ae057613ae0613ae7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610f5557600080fd5b8015158114610f5557600080fd5b60ff81168114610f5557600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207071881857866ada73695c7033cf2730d15c4d551b0042ec44bfd4f820c6d5dd64736f6c63430008000033

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

00000000000000000000000031d939dc09a6bb55642fcbf9d56166ebc0bdec9a00000000000000000000000066f6d7958049bfded399cd68aff49e0f2a9dcd4f000000000000000000000000240c42b59185ca2b1de9bf2fd54043b00fd774040000000000000000000000003beaae2f6972521f7d3e627ec4448d27207c7a47

-----Decoded View---------------
Arg [0] : _peechToken (address): 0x31d939dC09A6bB55642fCBF9d56166EbC0BDeC9a
Arg [1] : _liquidityWallet (address): 0x66F6d7958049bfDEd399CD68aff49E0F2a9DCd4F
Arg [2] : _devWallet (address): 0x240c42B59185cA2B1DE9BF2Fd54043B00Fd77404
Arg [3] : _rewardsWallet (address): 0x3beaAe2F6972521F7d3E627Ec4448D27207c7A47

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000031d939dc09a6bb55642fcbf9d56166ebc0bdec9a
Arg [1] : 00000000000000000000000066f6d7958049bfded399cd68aff49e0f2a9dcd4f
Arg [2] : 000000000000000000000000240c42b59185ca2b1de9bf2fd54043b00fd77404
Arg [3] : 0000000000000000000000003beaae2f6972521f7d3e627ec4448d27207c7a47


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.