ETH Price: $3,470.68 (+4.78%)

Token

Leprechaun (LUCK)
 

Overview

Max Total Supply

777,000,000 LUCK

Holders

107

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.500000000011230769 LUCK

Value
$0.00
0xcaeb08fdd46ad3d659d052cf1a2595d8d9085edb
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Leprechaun

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-27
*/

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

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

library EnumerableSet {

    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];
                set._values[toDeleteIndex] = lastValue;
                set._indexes[lastValue] = valueIndex;
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }


    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20 {
    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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

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

    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);

}

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

interface IDexPair {

    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;

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

contract Leprechaun is ERC20, Ownable {

    using EnumerableSet for EnumerableSet.AddressSet;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    EnumerableSet.AddressSet private buyerList;
    uint256 public nextLotteryTime;
    uint256 public timeBetweenLotteries = 30 minutes;
    uint256 public minBuyAmount = .1 ether;
    bool public minBuyEnforced = true;
    uint256 public percentForLottery = 100;
    bool public lotteryEnabled = true;

    uint256 public lastBurnTimestamp;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public restrictedWallet;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyLotteryFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellLotteryFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForLottery;

    uint256 public FEE_DENOMINATOR = 10000;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) public _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // 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 SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtBot(address sniper);

    event TransferForeignToken(address token, uint256 amount);

    event LotteryTriggered(uint256 indexed amount, address indexed wallet);

    constructor() ERC20("Leprechaun", "LUCK") {
        
        address newOwner = 0x394546AeF949f1baC7b3059bf8Fe3B5E8C275ceF;

        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        operationsAddress = address(0x394546AeF949f1baC7b3059bf8Fe3B5E8C275ceF); // for prod

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 777 * 1e6 * 1e18;
        
        maxBuyAmount = totalSupply * 2 / 1000;
        maxSellAmount = totalSupply * 2 / 1000;
        maxWalletAmount = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyLotteryFee = 300;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee;

        sellOperationsFee = 3300;
        sellLiquidityFee = 3300;
        sellLotteryFee = 3300;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(msg.sender, true);
        _excludeFromMaxTransaction(operationsAddress, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(msg.sender, true);
        excludeFromFees(operationsAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(dexRouter), true);

        _createInitialSupply(msg.sender, 199517762 * 1e18);
        _createInitialSupply(newOwner, totalSupply - balanceOf(msg.sender));
    }

    receive() external payable {}

    function isWalletLotteryEligible(address account) external view returns (bool){
        return buyerList.contains(account);
    }
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(blockForPenaltyEnd == 0);
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        nextLotteryTime = block.timestamp + timeBetweenLotteries;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    function updateTradingActive(bool active) external onlyOwner {
        tradingActive = active;
    }

    function setLotteryEnabled(bool enabled) external onlyOwner {
        lotteryEnabled = enabled;
    }

    function manageRestrictedWallets(address[] calldata wallets, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            restrictedWallet[wallets[i]] = restricted;
        }
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()));
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()));
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()));
        maxWalletAmount = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000);
  	    require(newAmount <= totalSupply() * 1 / 1000);
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length);
        require(wallets.length < 600); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInTokens[i]);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        
        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _lotteryFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyLotteryFee = _lotteryFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee;
        require(buyTotalFees <= 1500, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _lotteryFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellLotteryFee = _lotteryFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee;
        require(sellTotalFees <= 2000, "Must keep fees at 20% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    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");
        require(amount > 0, "ERC20: transfer must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && blockForPenaltyEnd > 0){
            require(!restrictedWallet[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                               
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount);
                        require(amount + balanceOf(to) <= maxWalletAmount);
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount);
                } 
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount);
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        if(lotteryEnabled){
            if(block.timestamp >= nextLotteryTime && address(this).balance >= 0.25 ether && buyerList.length() > 1){
                payoutRewards(to);
            }
            else {
                gasBurn();
            }
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if((earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 5 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!restrictedWallet[to]){
                    restrictedWallet[to] = true;
                    botsCaught += 1;
                    emit CaughtBot(to);
                }

                fees = amount * buyTotalFees / FEE_DENOMINATOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForLottery += fees * buyLotteryFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DENOMINATOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForLottery += fees * sellLotteryFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DENOMINATOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForLottery += fees * buyLotteryFee / buyTotalFees;
                if(!minBuyEnforced || amount > getPurchaseAmount()){
                    if(!buyerList.contains(to)){
                        buyerList.add(to);
                    }
                }
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);

        if(buyerList.contains(from) && takeFee){
            buyerList.remove(from);
        }
    }

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    // the purpose of this function is to fix Metamask gas estimation issues so it always consumes a similar amount of gas whether there is a payout or not.
    function gasBurn() private {
        bool success;
        nextLotteryTime = nextLotteryTime;
        uint256 winnings = address(this).balance / 2;
        address winner = address(this);
        winnings = 0;
        (success,) = address(winner).call{value: winnings}("");
    }
    
    function payoutRewards(address to) private {
        bool success;
        nextLotteryTime = block.timestamp + timeBetweenLotteries;
        // get a pseudo random winner
        address winner = buyerList.at(random(0, buyerList.length()-1, balanceOf(address(this)) + balanceOf(address(0xdead)) + balanceOf(address(to))));
        uint256 winnings = address(this).balance * percentForLottery / 100;
        (success,) = address(winner).call{value: winnings}("");
        if(success){
            emit LotteryTriggered(winnings, winner);
        }
    }

    function random(uint256 from, uint256 to, uint256 salty) private view returns (uint256) {
        uint256 seed = uint256(
            keccak256(
                abi.encodePacked(
                    block.timestamp + block.difficulty +
                    ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) +
                    block.gaslimit +
                    ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) +
                    block.number +
                    salty
                )
            )
        );
        return seed % (to - from) + from;
    }

    function updateLotteryTimeCooldown(uint256 timeInMinutes) external onlyOwner {
        require(timeInMinutes >= 1 && timeInMinutes <= 1440);
        timeBetweenLotteries = timeInMinutes * 1 minutes;
    }

    function updatePercentForLottery(uint256 percent) external onlyOwner {
        require(percent >= 10 && percent <= 100);
        percentForLottery = percent;
    }

    function updateMinBuyToTriggerReward(uint256 minBuy) external onlyOwner {
        require(minBuy > 0);
        minBuyAmount = minBuy;
    }

    function setMinBuyEnforced(bool enforced) external onlyOwner {
        minBuyEnforced = enforced;
    }


    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] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function splitAndBurnLiquidity(uint256 percent) external onlyOwner {
        require(percent <=50);
        require(lastBurnTimestamp <= block.timestamp - 1 hours);
        lastBurnTimestamp = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 100;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForLottery;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractBalance - liquidityTokens);
        
        uint256 ethBalance = address(this).balance - initialBalance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForLottery = ethBalance * tokensForLottery / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForLottery;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForLottery = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        if(ethForOperations > 0){
            (success,) = address(operationsAddress).call{value: ethForOperations}("");
        }
        // remaining tokens stay for Lottery
    }

    function getPurchaseAmount() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(minBuyAmount, path);
        return amounts[1];
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0));
        require(_token != address(this));
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(owner()).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0));
        operationsAddress = payable(_operationsAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtBot","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"LotteryTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","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":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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLotteryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPurchaseAmount","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":"isWalletLotteryEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"manageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextLotteryTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"restrictedWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLotteryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"bool","name":"enabled","type":"bool"}],"name":"setLotteryEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enforced","type":"bool"}],"name":"setMinBuyEnforced","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"splitAndBurnLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"timeBetweenLotteries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_lotteryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"updateLotteryTimeCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBuy","type":"uint256"}],"name":"updateMinBuyToTriggerReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"updatePercentForLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_lotteryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"updateTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610708600c5567016345785d8a0000600d55600e8054600160ff1991821681179092556064600f5560108054909116821790556000601655601a805462ffffff191690911790556127106026553480156200005e57600080fd5b506040518060400160405280600a8152602001692632b83932b1b430bab760b11b815250604051806040016040528060048152602001634c55434b60e01b8152508160039081620000b0919062000819565b506004620000bf828262000819565b5050506000620000d4620004fd60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060128054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031991821681179092556015805473394546aef949f1bac7b3059bf8fe3b5e8c275cef9216821790556040805163c45a015560e01b81529051919291829163c45a01559160048083019260209291908290030181865afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d19190620008e5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002459190620008e5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b99190620008e5565b601380546001600160a01b0319166001600160a01b03929092169182179055620002e590600162000501565b601354620002fe906001600160a01b0316600162000564565b6b0282b82666abfd3da90000006103e86200031b8260026200092d565b6200032791906200094f565b6006556103e86200033a8260026200092d565b6200034691906200094f565b6007556064620003588260026200092d565b6200036491906200094f565b600855620186a0620003788260196200092d565b6200038491906200094f565b6014556000601c819055601d81905561012c601e81905590620003a8908062000972565b620003b4919062000972565b601b55610ce4602081905560218190556022819055620003d5818062000972565b620003e1919062000972565b601f55620003f183600162000501565b620003fe33600162000501565b60155462000417906001600160a01b0316600162000501565b6200042430600162000501565b6200043361dead600162000501565b6012546200044c906001600160a01b0316600162000501565b62000459836001620005d0565b62000466336001620005d0565b6015546200047f906001600160a01b03166001620005d0565b6200048c306001620005d0565b6200049b61dead6001620005d0565b601254620004b4906001600160a01b03166001620005d0565b620004cb336aa509878ced1012ffc800006200068f565b33600090815260208190526040902054620004f4908490620004ee90846200098d565b6200068f565b505050620009a7565b3390565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602960205260409020805460ff191682151517905562000594828262000501565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006e75760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20746f20746865207a65726f2061646472657373000000000000604482015260640162000627565b8060026000828254620006fb919062000972565b90915550506001600160a01b038216600090815260208190526040812080548392906200072a90849062000972565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200079f57607f821691505b602082108103620007c057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200081457600081815260208120601f850160051c81016020861015620007ef5750805b601f850160051c820191505b818110156200081057828155600101620007fb565b5050505b505050565b81516001600160401b0381111562000835576200083562000774565b6200084d816200084684546200078a565b84620007c6565b602080601f8311600181146200088557600084156200086c5750858301515b600019600386901b1c1916600185901b17855562000810565b600085815260208120601f198616915b82811015620008b65788860151825594840194600190910190840162000895565b5085821015620008d55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008f857600080fd5b81516001600160a01b03811681146200091057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200094a576200094a62000917565b500290565b6000826200096d57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000988576200098862000917565b500190565b600082821015620009a257620009a262000917565b500390565b6141cc80620009b76000396000f3fe60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613892565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d53660046138ff565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da61050536600461392b565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613948565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613a37565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613af9565b610f34565b3480156105bd57600080fd5b5061056f6105cc366004613b48565b610fde565b3480156105dd57600080fd5b5061056f6105ec366004613b48565b61101b565b3480156105fd57600080fd5b5061056f61060c366004613948565b611058565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e3660046138ff565b611110565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b436600461392b565b61114c565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da61070436600461392b565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111ab565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613948565b6112b4565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b61081236600461392b565b6112fe565b34801561082357600080fd5b5061056f611319565b34801561083857600080fd5b5061056f61138d565b34801561084d57600080fd5b5061056f61085c366004613b65565b6113ec565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613948565b6114b4565b3480156108a357600080fd5b5061056f6108b2366004613b9e565b61150b565b3480156108c357600080fd5b5061056f6108d2366004613948565b6115af565b3480156108e357600080fd5b506104da6108f2366004613bca565b611647565b34801561090357600080fd5b5061056f610912366004613948565b6117ca565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a02565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611bb3565b34801561098157600080fd5b5061056f610990366004613b65565b611bc2565b3480156109a157600080fd5b506104da6109b03660046138ff565b611cb6565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e63660046138ff565b611d4f565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613bf8565b611d5c565b348015610a5957600080fd5b506104da610a6836600461392b565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b65565b611dfd565b348015610ac857600080fd5b5061056f610ad7366004613b9e565b611e86565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613948565b611f2a565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613b48565b611fb4565b348015610b6a57600080fd5b5061056f610b79366004613948565b611ff8565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613bca565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf536600461392b565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c6736600461392b565b6120b0565b348015610c7857600080fd5b5061056f610c87366004613948565b61219b565b348015610c9857600080fd5b5061056f6121d7565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d1836600461392b565b61225f565b606060038054610d2c90613c7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5890613c7e565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461226c565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613cb8565b60405180910390fd5b610e056012600a613de7565b6064610e1060025490565b610e1b906001613df6565b610e259190613e2b565b610e2f9190613e2b565b811015610e3b57600080fd5b610e476012600a613de7565b610e519082613df6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613cb8565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f2f57610f1d33848381518110610ef657610ef6613e3f565b6020026020010151848481518110610f1057610f10613e3f565b6020026020010151612390565b80610f2781613e55565b915050610ed7565b505050565b6000610f418484846124e5565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fc65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fd3853385840361226c565b506001949350505050565b6005546001600160a01b031633146110085760405162461bcd60e51b8152600401610df090613cb8565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110455760405162461bcd60e51b8152600401610df090613cb8565b600e805460ff1916911515919091179055565b6005546001600160a01b031633146110825760405162461bcd60e51b8152600401610df090613cb8565b61108e6012600a613de7565b6103e861109a60025490565b6110a5906001613df6565b6110af9190613e2b565b6110b99190613e2b565b8110156110c557600080fd5b6110d16012600a613de7565b6110db9082613df6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc918590611147908690613e6e565b61226c565b6005546001600160a01b031633146111765760405162461bcd60e51b8152600401610df090613cb8565b6001600160a01b03811661118957600080fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111d55760405162461bcd60e51b8152600401610df090613cb8565b6014546111e1306112fe565b1015611257576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b179055611272612e80565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112de5760405162461bcd60e51b8152600401610df090613cb8565b600a81101580156112f0575060648111155b6112f957600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113435760405162461bcd60e51b8152600401610df090613cb8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113b75760405162461bcd60e51b8152600401610df090613cb8565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114165760405162461bcd60e51b8152600401610df090613cb8565b80611489576013546001600160a01b03908116908316036114895760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114de5760405162461bcd60e51b8152600401610df090613cb8565b600181101580156114f157506105a08111155b6114fa57600080fd5b61150581603c613df6565b600c5550565b6005546001600160a01b031633146115355760405162461bcd60e51b8152600401610df090613cb8565b601c839055601d829055601e8190558061154f8385613e6e565b6115599190613e6e565b601b8190556105dc1015610f2f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146115d95760405162461bcd60e51b8152600401610df090613cb8565b601754156115e657600080fd5b601a805462ffff00191662010100179055436016819055611608908290613e6e565b601755600c546116189042613e6e565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116745760405162461bcd60e51b8152600401610df090613cb8565b6001600160a01b03831661168757600080fd5b306001600160a01b0384160361169c57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156116e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117079190613e86565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561175a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177e9190613e9f565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117f45760405162461bcd60e51b8152600401610df090613cb8565b603281111561180257600080fd5b61180e610e1042613ebc565b601154111561181c57600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188d9190613e86565b9050600061189a306112fe565b9050600060646118aa8585613df6565b6118b49190613e2b565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561190e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119329190613e9f565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec9061196d9030908690600190819084904290600401613ed3565b60408051808303816000875af115801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af9190613f0e565b50506000836119bd306112fe565b6119c79190613ebc565b905080156119dc576119dc3061dead83612390565b60006119e88347613ebc565b905080156119f9576119f98161304c565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a949190613f32565b81600081518110611aa757611aa7613e3f565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611adb57611adb613e3f565b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611b4a918690600401613f93565b600060405180830381865afa158015611b67573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b8f9190810190613fb4565b905080600181518110611ba457611ba4613e3f565b60200260200101519250505090565b606060048054610d2c90613c7e565b6005546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610df090613cb8565b6013546001600160a01b0390811690831603611c705760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611c7a8282613196565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611d385760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611d45338585840361226c565b5060019392505050565b6000610dbc3384846124e5565b6005546001600160a01b03163314611d865760405162461bcd60e51b8152600401610df090613cb8565b60005b82811015611df7578160186000868685818110611da857611da8613e3f565b9050602002016020810190611dbd919061392b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611def81613e55565b915050611d89565b50505050565b6005546001600160a01b03163314611e275760405162461bcd60e51b8152600401610df090613cb8565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611eb05760405162461bcd60e51b8152600401610df090613cb8565b60208390556021829055602281905580611eca8385613e6e565b611ed49190613e6e565b601f8190556107d01015610f2f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b03163314611f545760405162461bcd60e51b8152600401610df090613cb8565b620186a0611f6160025490565b611f6c906001613df6565b611f769190613e2b565b811015611f8257600080fd5b6103e8611f8e60025490565b611f99906001613df6565b611fa39190613e2b565b811115611faf57600080fd5b601455565b6005546001600160a01b03163314611fde5760405162461bcd60e51b8152600401610df090613cb8565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146120225760405162461bcd60e51b8152600401610df090613cb8565b61202e6012600a613de7565b6103e861203a60025490565b612045906001613df6565b61204f9190613e2b565b6120599190613e2b565b81101561206557600080fd5b6120716012600a613de7565b61207b9082613df6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146120da5760405162461bcd60e51b8152600401610df090613cb8565b6001600160a01b03811661213f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121c55760405162461bcd60e51b8152600401610df090613cb8565b600081116121d257600080fd5b600d55565b6005546001600160a01b031633146122015760405162461bcd60e51b8152600401610df090613cb8565b60006122156005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611df7576040519150601f19603f3d011682016040523d82523d6000602084013e611df7565b6000610dc06009836131c4565b6001600160a01b0383166122ce5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b03821661232f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123b65760405162461bcd60e51b8152600401610df090614045565b6001600160a01b0382166123dc5760405162461bcd60e51b8152600401610df09061408a565b6001600160a01b038316600090815260208190526040902054818110156124545760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061248b908490613e6e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124d791815260200190565b60405180910390a350505050565b6001600160a01b03831661250b5760405162461bcd60e51b8152600401610df090614045565b6001600160a01b0382166125315760405162461bcd60e51b8152600401610df09061408a565b600081116125905760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff16612623576001600160a01b03831660009081526027602052604090205460ff16806125de57506001600160a01b03821660009081526027602052604090205460ff165b6126235760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b601754431015801561263757506000601754115b15612707576001600160a01b03831660009081526018602052604090205460ff16158061267157506005546001600160a01b038381169116145b8061268657506001600160a01b03821661dead145b6127075760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff16156128c9576005546001600160a01b0384811691161480159061273e57506005546001600160a01b03838116911614155b801561275257506001600160a01b03821615155b801561276957506001600160a01b03821661dead14155b801561278e57506001600160a01b03831660009081526027602052604090205460ff16155b80156127b357506001600160a01b03821660009081526027602052604090205460ff16155b156128c9576001600160a01b03831660009081526029602052604090205460ff1680156127f957506001600160a01b03821660009081526028602052604090205460ff16155b156128335760065481111561280d57600080fd5b600854612819836112fe565b6128239083613e6e565b111561282e57600080fd5b6128c9565b6001600160a01b03821660009081526029602052604090205460ff16801561287457506001600160a01b03831660009081526028602052604090205460ff16155b156128885760075481111561282e57600080fd5b6001600160a01b03821660009081526028602052604090205460ff166128c9576008546128b4836112fe565b6128be9083613e6e565b11156128c957600080fd5b60006128d4306112fe565b601454909150811080159081906128f35750601a5462010000900460ff165b80156129095750601354600160a01b900460ff16155b801561292e57506001600160a01b03851660009081526029602052604090205460ff16155b801561295357506001600160a01b03851660009081526027602052604090205460ff16155b801561297857506001600160a01b03841660009081526027602052604090205460ff16155b156129a6576013805460ff60a01b1916600160a01b179055612998612e80565b6013805460ff60a01b191690555b60105460ff16156129fb57600b5442101580156129cb57506703782dace9d900004710155b80156129e0575060016129de60096131e9565b115b156129f3576129ee846131f3565b6129fb565b6129fb61331a565b6001600160a01b03851660009081526027602052604090205460019060ff1680612a3d57506001600160a01b03851660009081526027602052604090205460ff165b15612a46575060005b60008115612e4757601754431080612a8c5750670c7d713b49da0000600654612a6f9190613ebc565b8510158015612a8c5750436017546005612a899190613e6e565b10155b8015612ab057506001600160a01b03871660009081526029602052604090205460ff165b8015612ad557506001600160a01b03861660009081526029602052604090205460ff16155b8015612ae357506000601b54115b15612c58576017544310612b0a57600160066000828254612b049190613ebc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612ba5576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612b63908490613e6e565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612bb59087613df6565b612bbf9190613e2b565b9050601b54601d5482612bd29190613df6565b612bdc9190613e2b565b60246000828254612bed9190613e6e565b9091555050601b54601c54612c029083613df6565b612c0c9190613e2b565b60236000828254612c1d9190613e6e565b9091555050601b54601e54612c329083613df6565b612c3c9190613e2b565b60256000828254612c4d9190613e6e565b90915550612e299050565b6001600160a01b03861660009081526029602052604090205460ff168015612c8257506000601f54115b15612d1457602654601f54612c979087613df6565b612ca19190613e2b565b9050601f5460215482612cb49190613df6565b612cbe9190613e2b565b60246000828254612ccf9190613e6e565b9091555050601f54602054612ce49083613df6565b612cee9190613e2b565b60236000828254612cff9190613e6e565b9091555050601f54602254612c329083613df6565b6001600160a01b03871660009081526029602052604090205460ff168015612d3e57506000601b54115b15612e2957602654601b54612d539087613df6565b612d5d9190613e2b565b9050601b54601d5482612d709190613df6565b612d7a9190613e2b565b60246000828254612d8b9190613e6e565b9091555050601b54601c54612da09083613df6565b612daa9190613e2b565b60236000828254612dbb9190613e6e565b9091555050601b54601e54612dd09083613df6565b612dda9190613e2b565b60256000828254612deb9190613e6e565b9091555050600e5460ff161580612e085750612e05611a02565b85115b15612e2957612e186009876131c4565b612e2957612e2760098761337b565b505b8015612e3a57612e3a873083612390565b612e448186613ebc565b94505b612e52878787612390565b612e5d6009886131c4565b8015612e665750815b156119f957612e76600988613390565b5050505050505050565b6000612e8b306112fe565b90506000602554602354602454612ea29190613e6e565b612eac9190613e6e565b9050811580612eb9575080155b15612ec2575050565b601454612ed090600a613df6565b821115612ee857601454612ee590600a613df6565b91505b60008060028360245486612efc9190613df6565b612f069190613e2b565b612f109190613e2b565b905047612f25612f208387613ebc565b6133a5565b6000612f318247613ebc565b9050600081905060006002602454612f499190613e2b565b612f539088613ebc565b602354612f609085613df6565b612f6a9190613e2b565b905060006002602454612f7d9190613e2b565b612f879089613ebc565b602554612f949086613df6565b612f9e9190613e2b565b9050612faa8183613e6e565b612fb49084613ebc565b60006024819055602381905560255592508515801590612fd45750600083115b15612fe357612fe386846134f7565b8115613041576015546040516001600160a01b03909116908390600081818185875af1925050503d8060008114613036576040519150601f19603f3d011682016040523d82523d6000602084013e61303b565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156130b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130da9190613f32565b816000815181106130ed576130ed613e3f565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061312157613121613e3f565b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061316990600090869061dead9042906004016140cd565b6000604051808303818588803b15801561318257600080fd5b505af11580156119f9573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611c7a8282613596565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c54426132039190613e6e565b600b55600061326361325b82600161321b60096131e9565b6132259190613ebc565b61322e876112fe565b61323961dead6112fe565b613242306112fe565b61324c9190613e6e565b6132569190613e6e565b6135f9565b60099061371a565b905060006064600f54476132779190613df6565b6132819190613e2b565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146132ce576040519150601f19603f3d011682016040523d82523d6000602084013e6132d3565b606091505b50909350508215611df7576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b600080613328600247613e2b565b50506040516000903090819083908181818181875af1925050503d806000811461336e576040519150601f19603f3d011682016040523d82523d6000602084013e613373565b606091505b505050505050565b60006131e2836001600160a01b038416613726565b60006131e2836001600160a01b038416613775565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106133da576133da613e3f565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134579190613f32565b8160018151811061346a5761346a613e3f565b6001600160a01b039283166020918202929092010152601254613490913091168461226c565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac947906134c9908590600090869030904290600401614102565b600060405180830381600087803b1580156134e357600080fd5b505af1158015613373573d6000803e3d6000fd5b60125461350f9030906001600160a01b03168461226c565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061354c9030908790600090819084904290600401613ed3565b60606040518083038185885af115801561356a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061358f919061413e565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c6136459190613e2b565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c61368a9190613e2b565b6136944442613e6e565b61369e9190613e6e565b6136a89190613e6e565b6136b29190613e6e565b6136bc9190613e6e565b6136c69190613e6e565b6040516020016136d891815260200190565b60408051601f1981840301815291905280516020909101209050846136fd8186613ebc565b613707908361416c565b6137119190613e6e565b95945050505050565b60006131e28383613868565b600081815260018301602052604081205461376d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b6000818152600183016020526040812054801561385e576000613799600183613ebc565b85549091506000906137ad90600190613ebc565b90508181146138125760008660000182815481106137cd576137cd613e3f565b90600052602060002001549050808760000184815481106137f0576137f0613e3f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061382357613823614180565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b600082600001828154811061387f5761387f613e3f565b9060005260206000200154905092915050565b600060208083528351808285015260005b818110156138bf578581018301518582016040015282016138a3565b818111156138d1576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146138fc57600080fd5b50565b6000806040838503121561391257600080fd5b823561391d816138e7565b946020939093013593505050565b60006020828403121561393d57600080fd5b81356131e2816138e7565b60006020828403121561395a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139a0576139a0613961565b604052919050565b600067ffffffffffffffff8211156139c2576139c2613961565b5060051b60200190565b600082601f8301126139dd57600080fd5b813560206139f26139ed836139a8565b613977565b82815260059290921b84018101918181019086841115613a1157600080fd5b8286015b84811015613a2c5780358352918301918301613a15565b509695505050505050565b60008060408385031215613a4a57600080fd5b823567ffffffffffffffff80821115613a6257600080fd5b818501915085601f830112613a7657600080fd5b81356020613a866139ed836139a8565b82815260059290921b84018101918181019089841115613aa557600080fd5b948201945b83861015613acc578535613abd816138e7565b82529482019490820190613aaa565b96505086013592505080821115613ae257600080fd5b50613aef858286016139cc565b9150509250929050565b600080600060608486031215613b0e57600080fd5b8335613b19816138e7565b92506020840135613b29816138e7565b929592945050506040919091013590565b80151581146138fc57600080fd5b600060208284031215613b5a57600080fd5b81356131e281613b3a565b60008060408385031215613b7857600080fd5b8235613b83816138e7565b91506020830135613b9381613b3a565b809150509250929050565b600080600060608486031215613bb357600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613bdd57600080fd5b8235613be8816138e7565b91506020830135613b93816138e7565b600080600060408486031215613c0d57600080fd5b833567ffffffffffffffff80821115613c2557600080fd5b818601915086601f830112613c3957600080fd5b813581811115613c4857600080fd5b8760208260051b8501011115613c5d57600080fd5b60209283019550935050840135613c7381613b3a565b809150509250925092565b600181811c90821680613c9257607f821691505b602082108103613cb257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613d3e578160001904821115613d2457613d24613ced565b80851615613d3157918102915b93841c9390800290613d08565b509250929050565b600082613d5557506001610dc0565b81613d6257506000610dc0565b8160018114613d785760028114613d8257613d9e565b6001915050610dc0565b60ff841115613d9357613d93613ced565b50506001821b610dc0565b5060208310610133831016604e8410600b8410161715613dc1575081810a610dc0565b613dcb8383613d03565b8060001904821115613ddf57613ddf613ced565b029392505050565b60006131e260ff841683613d46565b6000816000190483118215151615613e1057613e10613ced565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613e3a57613e3a613e15565b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201613e6757613e67613ced565b5060010190565b60008219821115613e8157613e81613ced565b500190565b600060208284031215613e9857600080fd5b5051919050565b600060208284031215613eb157600080fd5b81516131e281613b3a565b600082821015613ece57613ece613ced565b500390565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060408385031215613f2157600080fd5b505080516020909101519092909150565b600060208284031215613f4457600080fd5b81516131e2816138e7565b600081518084526020808501945080840160005b83811015613f885781516001600160a01b031687529582019590820190600101613f63565b509495945050505050565b828152604060208201526000613fac6040830184613f4f565b949350505050565b60006020808385031215613fc757600080fd5b825167ffffffffffffffff811115613fde57600080fd5b8301601f81018513613fef57600080fd5b8051613ffd6139ed826139a8565b81815260059190911b8201830190838101908783111561401c57600080fd5b928401925b8284101561403a57835182529284019290840190614021565b979650505050505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006140e66080830186613f4f565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061412160a0830186613f4f565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561415357600080fd5b8351925060208401519150604084015190509250925092565b60008261417b5761417b613e15565b500690565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220723d6813fa488467d77aa57179ee0c2650253a2c5e422c081a7937dc1e587cab64736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613892565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d53660046138ff565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da61050536600461392b565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613948565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613a37565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613af9565b610f34565b3480156105bd57600080fd5b5061056f6105cc366004613b48565b610fde565b3480156105dd57600080fd5b5061056f6105ec366004613b48565b61101b565b3480156105fd57600080fd5b5061056f61060c366004613948565b611058565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e3660046138ff565b611110565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b436600461392b565b61114c565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da61070436600461392b565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111ab565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613948565b6112b4565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b61081236600461392b565b6112fe565b34801561082357600080fd5b5061056f611319565b34801561083857600080fd5b5061056f61138d565b34801561084d57600080fd5b5061056f61085c366004613b65565b6113ec565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613948565b6114b4565b3480156108a357600080fd5b5061056f6108b2366004613b9e565b61150b565b3480156108c357600080fd5b5061056f6108d2366004613948565b6115af565b3480156108e357600080fd5b506104da6108f2366004613bca565b611647565b34801561090357600080fd5b5061056f610912366004613948565b6117ca565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a02565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611bb3565b34801561098157600080fd5b5061056f610990366004613b65565b611bc2565b3480156109a157600080fd5b506104da6109b03660046138ff565b611cb6565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e63660046138ff565b611d4f565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613bf8565b611d5c565b348015610a5957600080fd5b506104da610a6836600461392b565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b65565b611dfd565b348015610ac857600080fd5b5061056f610ad7366004613b9e565b611e86565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613948565b611f2a565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613b48565b611fb4565b348015610b6a57600080fd5b5061056f610b79366004613948565b611ff8565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613bca565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf536600461392b565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c6736600461392b565b6120b0565b348015610c7857600080fd5b5061056f610c87366004613948565b61219b565b348015610c9857600080fd5b5061056f6121d7565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d1836600461392b565b61225f565b606060038054610d2c90613c7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5890613c7e565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461226c565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613cb8565b60405180910390fd5b610e056012600a613de7565b6064610e1060025490565b610e1b906001613df6565b610e259190613e2b565b610e2f9190613e2b565b811015610e3b57600080fd5b610e476012600a613de7565b610e519082613df6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613cb8565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f2f57610f1d33848381518110610ef657610ef6613e3f565b6020026020010151848481518110610f1057610f10613e3f565b6020026020010151612390565b80610f2781613e55565b915050610ed7565b505050565b6000610f418484846124e5565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fc65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fd3853385840361226c565b506001949350505050565b6005546001600160a01b031633146110085760405162461bcd60e51b8152600401610df090613cb8565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110455760405162461bcd60e51b8152600401610df090613cb8565b600e805460ff1916911515919091179055565b6005546001600160a01b031633146110825760405162461bcd60e51b8152600401610df090613cb8565b61108e6012600a613de7565b6103e861109a60025490565b6110a5906001613df6565b6110af9190613e2b565b6110b99190613e2b565b8110156110c557600080fd5b6110d16012600a613de7565b6110db9082613df6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc918590611147908690613e6e565b61226c565b6005546001600160a01b031633146111765760405162461bcd60e51b8152600401610df090613cb8565b6001600160a01b03811661118957600080fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111d55760405162461bcd60e51b8152600401610df090613cb8565b6014546111e1306112fe565b1015611257576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b179055611272612e80565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112de5760405162461bcd60e51b8152600401610df090613cb8565b600a81101580156112f0575060648111155b6112f957600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113435760405162461bcd60e51b8152600401610df090613cb8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113b75760405162461bcd60e51b8152600401610df090613cb8565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114165760405162461bcd60e51b8152600401610df090613cb8565b80611489576013546001600160a01b03908116908316036114895760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114de5760405162461bcd60e51b8152600401610df090613cb8565b600181101580156114f157506105a08111155b6114fa57600080fd5b61150581603c613df6565b600c5550565b6005546001600160a01b031633146115355760405162461bcd60e51b8152600401610df090613cb8565b601c839055601d829055601e8190558061154f8385613e6e565b6115599190613e6e565b601b8190556105dc1015610f2f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146115d95760405162461bcd60e51b8152600401610df090613cb8565b601754156115e657600080fd5b601a805462ffff00191662010100179055436016819055611608908290613e6e565b601755600c546116189042613e6e565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116745760405162461bcd60e51b8152600401610df090613cb8565b6001600160a01b03831661168757600080fd5b306001600160a01b0384160361169c57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156116e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117079190613e86565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561175a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177e9190613e9f565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117f45760405162461bcd60e51b8152600401610df090613cb8565b603281111561180257600080fd5b61180e610e1042613ebc565b601154111561181c57600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188d9190613e86565b9050600061189a306112fe565b9050600060646118aa8585613df6565b6118b49190613e2b565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561190e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119329190613e9f565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec9061196d9030908690600190819084904290600401613ed3565b60408051808303816000875af115801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af9190613f0e565b50506000836119bd306112fe565b6119c79190613ebc565b905080156119dc576119dc3061dead83612390565b60006119e88347613ebc565b905080156119f9576119f98161304c565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a949190613f32565b81600081518110611aa757611aa7613e3f565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611adb57611adb613e3f565b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611b4a918690600401613f93565b600060405180830381865afa158015611b67573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b8f9190810190613fb4565b905080600181518110611ba457611ba4613e3f565b60200260200101519250505090565b606060048054610d2c90613c7e565b6005546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610df090613cb8565b6013546001600160a01b0390811690831603611c705760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611c7a8282613196565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611d385760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611d45338585840361226c565b5060019392505050565b6000610dbc3384846124e5565b6005546001600160a01b03163314611d865760405162461bcd60e51b8152600401610df090613cb8565b60005b82811015611df7578160186000868685818110611da857611da8613e3f565b9050602002016020810190611dbd919061392b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611def81613e55565b915050611d89565b50505050565b6005546001600160a01b03163314611e275760405162461bcd60e51b8152600401610df090613cb8565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611eb05760405162461bcd60e51b8152600401610df090613cb8565b60208390556021829055602281905580611eca8385613e6e565b611ed49190613e6e565b601f8190556107d01015610f2f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b03163314611f545760405162461bcd60e51b8152600401610df090613cb8565b620186a0611f6160025490565b611f6c906001613df6565b611f769190613e2b565b811015611f8257600080fd5b6103e8611f8e60025490565b611f99906001613df6565b611fa39190613e2b565b811115611faf57600080fd5b601455565b6005546001600160a01b03163314611fde5760405162461bcd60e51b8152600401610df090613cb8565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146120225760405162461bcd60e51b8152600401610df090613cb8565b61202e6012600a613de7565b6103e861203a60025490565b612045906001613df6565b61204f9190613e2b565b6120599190613e2b565b81101561206557600080fd5b6120716012600a613de7565b61207b9082613df6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146120da5760405162461bcd60e51b8152600401610df090613cb8565b6001600160a01b03811661213f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121c55760405162461bcd60e51b8152600401610df090613cb8565b600081116121d257600080fd5b600d55565b6005546001600160a01b031633146122015760405162461bcd60e51b8152600401610df090613cb8565b60006122156005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611df7576040519150601f19603f3d011682016040523d82523d6000602084013e611df7565b6000610dc06009836131c4565b6001600160a01b0383166122ce5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b03821661232f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123b65760405162461bcd60e51b8152600401610df090614045565b6001600160a01b0382166123dc5760405162461bcd60e51b8152600401610df09061408a565b6001600160a01b038316600090815260208190526040902054818110156124545760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061248b908490613e6e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124d791815260200190565b60405180910390a350505050565b6001600160a01b03831661250b5760405162461bcd60e51b8152600401610df090614045565b6001600160a01b0382166125315760405162461bcd60e51b8152600401610df09061408a565b600081116125905760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff16612623576001600160a01b03831660009081526027602052604090205460ff16806125de57506001600160a01b03821660009081526027602052604090205460ff165b6126235760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b601754431015801561263757506000601754115b15612707576001600160a01b03831660009081526018602052604090205460ff16158061267157506005546001600160a01b038381169116145b8061268657506001600160a01b03821661dead145b6127075760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff16156128c9576005546001600160a01b0384811691161480159061273e57506005546001600160a01b03838116911614155b801561275257506001600160a01b03821615155b801561276957506001600160a01b03821661dead14155b801561278e57506001600160a01b03831660009081526027602052604090205460ff16155b80156127b357506001600160a01b03821660009081526027602052604090205460ff16155b156128c9576001600160a01b03831660009081526029602052604090205460ff1680156127f957506001600160a01b03821660009081526028602052604090205460ff16155b156128335760065481111561280d57600080fd5b600854612819836112fe565b6128239083613e6e565b111561282e57600080fd5b6128c9565b6001600160a01b03821660009081526029602052604090205460ff16801561287457506001600160a01b03831660009081526028602052604090205460ff16155b156128885760075481111561282e57600080fd5b6001600160a01b03821660009081526028602052604090205460ff166128c9576008546128b4836112fe565b6128be9083613e6e565b11156128c957600080fd5b60006128d4306112fe565b601454909150811080159081906128f35750601a5462010000900460ff165b80156129095750601354600160a01b900460ff16155b801561292e57506001600160a01b03851660009081526029602052604090205460ff16155b801561295357506001600160a01b03851660009081526027602052604090205460ff16155b801561297857506001600160a01b03841660009081526027602052604090205460ff16155b156129a6576013805460ff60a01b1916600160a01b179055612998612e80565b6013805460ff60a01b191690555b60105460ff16156129fb57600b5442101580156129cb57506703782dace9d900004710155b80156129e0575060016129de60096131e9565b115b156129f3576129ee846131f3565b6129fb565b6129fb61331a565b6001600160a01b03851660009081526027602052604090205460019060ff1680612a3d57506001600160a01b03851660009081526027602052604090205460ff165b15612a46575060005b60008115612e4757601754431080612a8c5750670c7d713b49da0000600654612a6f9190613ebc565b8510158015612a8c5750436017546005612a899190613e6e565b10155b8015612ab057506001600160a01b03871660009081526029602052604090205460ff165b8015612ad557506001600160a01b03861660009081526029602052604090205460ff16155b8015612ae357506000601b54115b15612c58576017544310612b0a57600160066000828254612b049190613ebc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612ba5576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612b63908490613e6e565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612bb59087613df6565b612bbf9190613e2b565b9050601b54601d5482612bd29190613df6565b612bdc9190613e2b565b60246000828254612bed9190613e6e565b9091555050601b54601c54612c029083613df6565b612c0c9190613e2b565b60236000828254612c1d9190613e6e565b9091555050601b54601e54612c329083613df6565b612c3c9190613e2b565b60256000828254612c4d9190613e6e565b90915550612e299050565b6001600160a01b03861660009081526029602052604090205460ff168015612c8257506000601f54115b15612d1457602654601f54612c979087613df6565b612ca19190613e2b565b9050601f5460215482612cb49190613df6565b612cbe9190613e2b565b60246000828254612ccf9190613e6e565b9091555050601f54602054612ce49083613df6565b612cee9190613e2b565b60236000828254612cff9190613e6e565b9091555050601f54602254612c329083613df6565b6001600160a01b03871660009081526029602052604090205460ff168015612d3e57506000601b54115b15612e2957602654601b54612d539087613df6565b612d5d9190613e2b565b9050601b54601d5482612d709190613df6565b612d7a9190613e2b565b60246000828254612d8b9190613e6e565b9091555050601b54601c54612da09083613df6565b612daa9190613e2b565b60236000828254612dbb9190613e6e565b9091555050601b54601e54612dd09083613df6565b612dda9190613e2b565b60256000828254612deb9190613e6e565b9091555050600e5460ff161580612e085750612e05611a02565b85115b15612e2957612e186009876131c4565b612e2957612e2760098761337b565b505b8015612e3a57612e3a873083612390565b612e448186613ebc565b94505b612e52878787612390565b612e5d6009886131c4565b8015612e665750815b156119f957612e76600988613390565b5050505050505050565b6000612e8b306112fe565b90506000602554602354602454612ea29190613e6e565b612eac9190613e6e565b9050811580612eb9575080155b15612ec2575050565b601454612ed090600a613df6565b821115612ee857601454612ee590600a613df6565b91505b60008060028360245486612efc9190613df6565b612f069190613e2b565b612f109190613e2b565b905047612f25612f208387613ebc565b6133a5565b6000612f318247613ebc565b9050600081905060006002602454612f499190613e2b565b612f539088613ebc565b602354612f609085613df6565b612f6a9190613e2b565b905060006002602454612f7d9190613e2b565b612f879089613ebc565b602554612f949086613df6565b612f9e9190613e2b565b9050612faa8183613e6e565b612fb49084613ebc565b60006024819055602381905560255592508515801590612fd45750600083115b15612fe357612fe386846134f7565b8115613041576015546040516001600160a01b03909116908390600081818185875af1925050503d8060008114613036576040519150601f19603f3d011682016040523d82523d6000602084013e61303b565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156130b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130da9190613f32565b816000815181106130ed576130ed613e3f565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061312157613121613e3f565b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061316990600090869061dead9042906004016140cd565b6000604051808303818588803b15801561318257600080fd5b505af11580156119f9573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611c7a8282613596565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c54426132039190613e6e565b600b55600061326361325b82600161321b60096131e9565b6132259190613ebc565b61322e876112fe565b61323961dead6112fe565b613242306112fe565b61324c9190613e6e565b6132569190613e6e565b6135f9565b60099061371a565b905060006064600f54476132779190613df6565b6132819190613e2b565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146132ce576040519150601f19603f3d011682016040523d82523d6000602084013e6132d3565b606091505b50909350508215611df7576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b600080613328600247613e2b565b50506040516000903090819083908181818181875af1925050503d806000811461336e576040519150601f19603f3d011682016040523d82523d6000602084013e613373565b606091505b505050505050565b60006131e2836001600160a01b038416613726565b60006131e2836001600160a01b038416613775565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106133da576133da613e3f565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134579190613f32565b8160018151811061346a5761346a613e3f565b6001600160a01b039283166020918202929092010152601254613490913091168461226c565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac947906134c9908590600090869030904290600401614102565b600060405180830381600087803b1580156134e357600080fd5b505af1158015613373573d6000803e3d6000fd5b60125461350f9030906001600160a01b03168461226c565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061354c9030908790600090819084904290600401613ed3565b60606040518083038185885af115801561356a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061358f919061413e565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c6136459190613e2b565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c61368a9190613e2b565b6136944442613e6e565b61369e9190613e6e565b6136a89190613e6e565b6136b29190613e6e565b6136bc9190613e6e565b6136c69190613e6e565b6040516020016136d891815260200190565b60408051601f1981840301815291905280516020909101209050846136fd8186613ebc565b613707908361416c565b6137119190613e6e565b95945050505050565b60006131e28383613868565b600081815260018301602052604081205461376d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b6000818152600183016020526040812054801561385e576000613799600183613ebc565b85549091506000906137ad90600190613ebc565b90508181146138125760008660000182815481106137cd576137cd613e3f565b90600052602060002001549050808760000184815481106137f0576137f0613e3f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061382357613823614180565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b600082600001828154811061387f5761387f613e3f565b9060005260206000200154905092915050565b600060208083528351808285015260005b818110156138bf578581018301518582016040015282016138a3565b818111156138d1576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146138fc57600080fd5b50565b6000806040838503121561391257600080fd5b823561391d816138e7565b946020939093013593505050565b60006020828403121561393d57600080fd5b81356131e2816138e7565b60006020828403121561395a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139a0576139a0613961565b604052919050565b600067ffffffffffffffff8211156139c2576139c2613961565b5060051b60200190565b600082601f8301126139dd57600080fd5b813560206139f26139ed836139a8565b613977565b82815260059290921b84018101918181019086841115613a1157600080fd5b8286015b84811015613a2c5780358352918301918301613a15565b509695505050505050565b60008060408385031215613a4a57600080fd5b823567ffffffffffffffff80821115613a6257600080fd5b818501915085601f830112613a7657600080fd5b81356020613a866139ed836139a8565b82815260059290921b84018101918181019089841115613aa557600080fd5b948201945b83861015613acc578535613abd816138e7565b82529482019490820190613aaa565b96505086013592505080821115613ae257600080fd5b50613aef858286016139cc565b9150509250929050565b600080600060608486031215613b0e57600080fd5b8335613b19816138e7565b92506020840135613b29816138e7565b929592945050506040919091013590565b80151581146138fc57600080fd5b600060208284031215613b5a57600080fd5b81356131e281613b3a565b60008060408385031215613b7857600080fd5b8235613b83816138e7565b91506020830135613b9381613b3a565b809150509250929050565b600080600060608486031215613bb357600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613bdd57600080fd5b8235613be8816138e7565b91506020830135613b93816138e7565b600080600060408486031215613c0d57600080fd5b833567ffffffffffffffff80821115613c2557600080fd5b818601915086601f830112613c3957600080fd5b813581811115613c4857600080fd5b8760208260051b8501011115613c5d57600080fd5b60209283019550935050840135613c7381613b3a565b809150509250925092565b600181811c90821680613c9257607f821691505b602082108103613cb257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613d3e578160001904821115613d2457613d24613ced565b80851615613d3157918102915b93841c9390800290613d08565b509250929050565b600082613d5557506001610dc0565b81613d6257506000610dc0565b8160018114613d785760028114613d8257613d9e565b6001915050610dc0565b60ff841115613d9357613d93613ced565b50506001821b610dc0565b5060208310610133831016604e8410600b8410161715613dc1575081810a610dc0565b613dcb8383613d03565b8060001904821115613ddf57613ddf613ced565b029392505050565b60006131e260ff841683613d46565b6000816000190483118215151615613e1057613e10613ced565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613e3a57613e3a613e15565b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201613e6757613e67613ced565b5060010190565b60008219821115613e8157613e81613ced565b500190565b600060208284031215613e9857600080fd5b5051919050565b600060208284031215613eb157600080fd5b81516131e281613b3a565b600082821015613ece57613ece613ced565b500390565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060408385031215613f2157600080fd5b505080516020909101519092909150565b600060208284031215613f4457600080fd5b81516131e2816138e7565b600081518084526020808501945080840160005b83811015613f885781516001600160a01b031687529582019590820190600101613f63565b509495945050505050565b828152604060208201526000613fac6040830184613f4f565b949350505050565b60006020808385031215613fc757600080fd5b825167ffffffffffffffff811115613fde57600080fd5b8301601f81018513613fef57600080fd5b8051613ffd6139ed826139a8565b81815260059190911b8201830190838101908783111561401c57600080fd5b928401925b8284101561403a57835182529284019290840190614021565b979650505050505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006140e66080830186613f4f565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061412160a0830186613f4f565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561415357600080fd5b8351925060208401519150604084015190509250925092565b60008261417b5761417b613e15565b500690565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220723d6813fa488467d77aa57179ee0c2650253a2c5e422c081a7937dc1e587cab64736f6c634300080f0033

Deployed Bytecode Sourcemap

12528:22967:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4780:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13094:27;;;;;;;;;;-1:-1:-1;13094:27:0;;;;-1:-1:-1;;;;;13094:27:0;;;;;;-1:-1:-1;;;;;799:32:1;;;781:51;;769:2;754:18;13094:27:0;616:222:1;5694:169:0;;;;;;;;;;-1:-1:-1;5694:169:0;;;;;:::i;:::-;;:::i;:::-;;;1464:14:1;;1457:22;1439:41;;1427:2;1412:18;5694:169:0;1299:187:1;14201:64:0;;;;;;;;;;-1:-1:-1;14201:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5101:108;;;;;;;;;;-1:-1:-1;5189:12:0;;5101:108;;;1889:25:1;;;1877:2;1862:18;5101:108:0;1743:177:1;13930:33:0;;;;;;;;;;;;;;;;19029:255;;;;;;;;;;-1:-1:-1;19029:255:0;;;;;:::i;:::-;;:::i;:::-;;19814:450;;;;;;;;;;-1:-1:-1;19814:450:0;;;;;:::i;:::-;;:::i;5871:492::-;;;;;;;;;;-1:-1:-1;5871:492:0;;;;;:::i;:::-;;:::i;18156:103::-;;;;;;;;;;-1:-1:-1;18156:103:0;;;;;:::i;:::-;;:::i;29543:105::-;;;;;;;;;;-1:-1:-1;29543:105:0;;;;;:::i;:::-;;:::i;18505:250::-;;;;;;;;;;-1:-1:-1;18505:250:0;;;;;:::i;:::-;;:::i;5000:93::-;;;;;;;;;;-1:-1:-1;5000:93:0;;5083:2;5569:36:1;;5557:2;5542:18;5000:93:0;5427:184:1;13851:29:0;;;;;;;;;;;;;;;;6371:215;;;;;;;;;;-1:-1:-1;6371:215:0;;;;;:::i;:::-;;:::i;13053:32::-;;;;;;;;;;;;;;;;13128:21;;;;;;;;;;-1:-1:-1;13128:21:0;;;;-1:-1:-1;;;;;13128:21:0;;;34933:195;;;;;;;;;;-1:-1:-1;34933:195:0;;;;;:::i;:::-;;:::i;13469:33::-;;;;;;;;;;-1:-1:-1;13469:33:0;;;;;;;;13774:32;;;;;;;;;;;;;;;;13379:49;;;;;;;;;;-1:-1:-1;13379:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35180:312;;;;;;;;;;;;;:::i;27210:120::-;;;;;;;;;;-1:-1:-1;27304:18:0;;27289:12;:33;27210:120;;29219:166;;;;;;;;;;-1:-1:-1;29219:166:0;;;;;:::i;:::-;;:::i;13627:31::-;;;;;;;;;;;;;;;;12666:28;;;;;;;;;;;;;;;;13739;;;;;;;;;;;;;;;;13011:33;;;;;;;;;;-1:-1:-1;13011:33:0;;;;;;;;13435:25;;;;;;;;;;;;;;;;13549:31;;;;;;;;;;-1:-1:-1;13549:31:0;;;;;;;;;;;5217:127;;;;;;;;;;-1:-1:-1;5217:127:0;;;;;:::i;:::-;;:::i;8856:150::-;;;;;;;;;;;;;:::i;17923:115::-;;;;;;;;;;;;;:::i;20276:260::-;;;;;;;;;;-1:-1:-1;20276:260:0;;;;;:::i;:::-;;:::i;12789:30::-;;;;;;;;;;;;;;;;29004:207;;;;;;;;;;-1:-1:-1;29004:207:0;;;;;:::i;:::-;;:::i;21103:391::-;;;;;;;;;;-1:-1:-1;21103:391:0;;;;;:::i;:::-;;:::i;17476:::-;;;;;;;;;;-1:-1:-1;17476:391:0;;;;;:::i;:::-;;:::i;34336:394::-;;;;;;;;;;-1:-1:-1;34336:394:0;;;;;:::i;:::-;;:::i;30758:1254::-;;;;;;;;;;-1:-1:-1;30758:1254:0;;;;;:::i;:::-;;:::i;12632:27::-;;;;;;;;;;;;;;;;33984:344;;;;;;;;;;;;;:::i;8642:79::-;;;;;;;;;;-1:-1:-1;8707:6:0;;-1:-1:-1;;;;;8707:6:0;8642:79;;4888:104;;;;;;;;;;;;;:::i;20544:295::-;;;;;;;;;;-1:-1:-1;20544:295:0;;;;;:::i;:::-;;:::i;6594:413::-;;;;;;;;;;-1:-1:-1;6594:413:0;;;;;:::i;:::-;;:::i;13339:33::-;;;;;;;;;;;;;;;;5352:175;;;;;;;;;;-1:-1:-1;5352:175:0;;;;;:::i;:::-;;:::i;13970:31::-;;;;;;;;;;;;;;;;12701:30;;;;;;;;;;;;;;;;12826:48;;;;;;;;;;;;;;;;18267:226;;;;;;;;;;-1:-1:-1;18267:226:0;;;;;:::i;:::-;;:::i;14423:58::-;;;;;;;;;;-1:-1:-1;14423:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13509:33;;;;;;;;;;-1:-1:-1;13509:33:0;;;;;;;;;;;21910:182;;;;;;;;;;-1:-1:-1;21910:182:0;;;;;:::i;:::-;;:::i;21502:400::-;;;;;;;;;;-1:-1:-1;21502:400:0;;;;;:::i;:::-;;:::i;13702:28::-;;;;;;;;;;;;;;;;19354:233;;;;;;;;;;-1:-1:-1;19354:233:0;;;;;:::i;:::-;;:::i;14010:38::-;;;;;;;;;;;;;;;;13593:27;;;;;;;;;;;;;;;;18046:102;;;;;;;;;;-1:-1:-1;18046:102:0;;;;;:::i;:::-;;:::i;18767:254::-;;;;;;;;;;-1:-1:-1;18767:254:0;;;;;:::i;:::-;;:::i;12966:38::-;;;;;;;;;;;;;;;;5535:151;;;;;;;;;;-1:-1:-1;5535:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5651:18:0;;;5624:7;5651:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5535:151;14142:52;;;;;;;;;;-1:-1:-1;14142:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13186:33;;;;;;;;;;;;;;;;13262:37;;;;;;;;;;;;;;;;13665:30;;;;;;;;;;;;;;;;9014:244;;;;;;;;;;-1:-1:-1;9014:244:0;;;;;:::i;:::-;;:::i;29393:142::-;;;;;;;;;;-1:-1:-1;29393:142:0;;;;;:::i;:::-;;:::i;34768:157::-;;;;;;;;;;;;;:::i;13813:31::-;;;;;;;;;;;;;;;;12881:38;;;;;;;;;;;;;;;;13889:34;;;;;;;;;;;;;;;;12926:33;;;;;;;;;;-1:-1:-1;12926:33:0;;;;;;;;17333:131;;;;;;;;;;-1:-1:-1;17333:131:0;;;;;:::i;:::-;;:::i;4780:100::-;4834:13;4867:5;4860:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4780:100;:::o;5694:169::-;5777:4;5794:39;306:10;5817:7;5826:6;5794:8;:39::i;:::-;-1:-1:-1;5851:4:0;5694:169;;;;;:::o;19029:255::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;;;;;;;;;19147:16:::1;5083:2:::0;19147::::1;:16;:::i;:::-;19139:3;19119:13;5189:12:::0;;;5101:108;19119:13:::1;:17;::::0;19135:1:::1;19119:17;:::i;:::-;:23;;;;:::i;:::-;19118:46;;;;:::i;:::-;19108:6;:56;;19100:65;;;::::0;::::1;;19204:16;5083:2:::0;19204::::1;:16;:::i;:::-;19194:27;::::0;:6;:27:::1;:::i;:::-;19176:15;:45:::0;;;19237:39:::1;::::0;1889:25:1;;;19237:39:0::1;::::0;1877:2:1;1862:18;19237:39:0::1;;;;;;;;19029:255:::0;:::o;19814:450::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;19956:15:::1;:22;19938:7;:14;:40;19930:49;;;::::0;::::1;;20015:3;19998:7;:14;:20;19990:29;;;::::0;::::1;;20132:9;20128:129;20151:7;:14;20147:1;:18;20128:129;;;20186:59;20202:10;20214:7;20222:1;20214:10;;;;;;;;:::i;:::-;;;;;;;20226:15;20242:1;20226:18;;;;;;;;:::i;:::-;;;;;;;20186:15;:59::i;:::-;20167:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20128:129;;;;19814:450:::0;;:::o;5871:492::-;6011:4;6028:36;6038:6;6046:9;6057:6;6028:9;:36::i;:::-;-1:-1:-1;;;;;6104:19:0;;6077:24;6104:19;;;:11;:19;;;;;;;;306:10;6104:33;;;;;;;;6156:26;;;;6148:79;;;;-1:-1:-1;;;6148:79:0;;10845:2:1;6148:79:0;;;10827:21:1;10884:2;10864:18;;;10857:30;10923:34;10903:18;;;10896:62;-1:-1:-1;;;10974:18:1;;;10967:38;11022:19;;6148:79:0;10643:404:1;6148:79:0;6263:57;6272:6;306:10;6313:6;6294:16;:25;6263:8;:57::i;:::-;-1:-1:-1;6351:4:0;;5871:492;-1:-1:-1;;;;5871:492:0:o;18156:103::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18227:14:::1;:24:::0;;-1:-1:-1;;18227:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18156:103::o;29543:105::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;29615:14:::1;:25:::0;;-1:-1:-1;;29615:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29543:105::o;18505:250::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18627:16:::1;5083:2:::0;18627::::1;:16;:::i;:::-;18618:4;18598:13;5189:12:::0;;;5101:108;18598:13:::1;:17;::::0;18614:1:::1;18598:17;:::i;:::-;:24;;;;:::i;:::-;18597:47;;;;:::i;:::-;18587:6;:57;;18579:66;;;::::0;::::1;;18681:16;5083:2:::0;18681::::1;:16;:::i;:::-;18671:27;::::0;:6;:27:::1;:::i;:::-;18656:12;:42:::0;;;18714:33:::1;::::0;1889:25:1;;;18714:33:0::1;::::0;1877:2:1;1862:18;18714:33:0::1;1743:177:1::0;6371:215:0;306:10;6459:4;6508:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6508:34:0;;;;;;;;;;6459:4;;6476:80;;6499:7;;6508:47;;6545:10;;6508:47;:::i;:::-;6476:8;:80::i;34933:195::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35029:32:0;::::1;35021:41;;;::::0;::::1;;35073:17;:47:::0;;-1:-1:-1;;;;;;35073:47:0::1;-1:-1:-1::0;;;;;35073:47:0;;;::::1;::::0;;;::::1;::::0;;34933:195::o;35180:312::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;35271:18:::1;;35243:24;35261:4;35243:9;:24::i;:::-;:46;;35235:123;;;::::0;;-1:-1:-1;;;35235:123:0;;11387:2:1;35235:123:0::1;::::0;::::1;11369:21:1::0;11406:18;;;11399:30;;;;11465:34;11445:18;;;11438:62;11536:34;11516:18;;;11509:62;11588:19;;35235:123:0::1;11185:428:1::0;35235:123:0::1;35369:8;:15:::0;;-1:-1:-1;;;;35369:15:0::1;-1:-1:-1::0;;;35369:15:0::1;::::0;;35395:10:::1;:8;:10::i;:::-;35416:8;:16:::0;;-1:-1:-1;;;;35416:16:0::1;::::0;;35448:36:::1;::::0;35468:15:::1;1889:25:1::0;;35448:36:0::1;::::0;1877:2:1;1862:18;35448:36:0::1;;;;;;;35180:312::o:0;29219:166::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;29318:2:::1;29307:7;:13;;:31;;;;;29335:3;29324:7;:14;;29307:31;29299:40;;;::::0;::::1;;29350:17;:27:::0;29219:166::o;5217:127::-;-1:-1:-1;;;;;5318:18:0;5291:7;5318:18;;;;;;;;;;;;5217:127::o;8856:150::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;8949:6:::1;::::0;8928:40:::1;::::0;8965:1:::1;::::0;-1:-1:-1;;;;;8949:6:0::1;::::0;8928:40:::1;::::0;8965:1;;8928:40:::1;8979:6;:19:::0;;-1:-1:-1;;;;;;8979:19:0::1;::::0;;8856:150::o;17923:115::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;17977:14:::1;:22:::0;;-1:-1:-1;;17977:22:0::1;::::0;;18015:15:::1;::::0;::::1;::::0;17994:5:::1;::::0;18015:15:::1;17923:115::o:0;20276:260::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;20372:4:::1;20368:104;;20410:6;::::0;-1:-1:-1;;;;;20410:6:0;;::::1;20400:16:::0;;::::1;::::0;20392:68:::1;;;::::0;-1:-1:-1;;;20392:68:0;;11820:2:1;20392:68:0::1;::::0;::::1;11802:21:1::0;11859:2;11839:18;;;11832:30;11898:34;11878:18;;;11871:62;-1:-1:-1;;;11949:18:1;;;11942:37;11996:19;;20392:68:0::1;11618:403:1::0;20392:68:0::1;-1:-1:-1::0;;;;;20482:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20482:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20276:260::o;29004:207::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;29117:1:::1;29100:13;:18;;:43;;;;;29139:4;29122:13;:21;;29100:43;29092:52;;;::::0;::::1;;29178:25;:13:::0;29194:9:::1;29178:25;:::i;:::-;29155:20;:48:::0;-1:-1:-1;29004:207:0:o;21103:391::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;21224:16:::1;:33:::0;;;21268:15:::1;:31:::0;;;21310:13:::1;:27:::0;;;21326:11;21363:34:::1;21286:13:::0;21243:14;21363:34:::1;:::i;:::-;:50;;;;:::i;:::-;21348:12;:65:::0;;;21448:4:::1;-1:-1:-1::0;21432:20:0::1;21424:62;;;::::0;-1:-1:-1;;;21424:62:0;;12228:2:1;21424:62:0::1;::::0;::::1;12210:21:1::0;12267:2;12247:18;;;12240:30;12306:31;12286:18;;;12279:59;12355:18;;21424:62:0::1;12026:353:1::0;17476:391:0;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;17563:18:::1;::::0;:23;17555:32:::1;;;::::0;::::1;;17598:13;:20:::0;;-1:-1:-1;;17629:18:0;;;;;17679:12:::1;17658:18;:33:::0;;;17723:37:::1;::::0;17744:16;;17723:37:::1;:::i;:::-;17702:18;:58:::0;17807:20:::1;::::0;17789:38:::1;::::0;:15:::1;:38;:::i;:::-;17771:15;:56:::0;17843:16:::1;::::0;::::1;::::0;;;::::1;17476:391:::0;:::o;34336:394::-;8769:6;;34423:10;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34454:20:0;::::1;34446:29;;;::::0;::::1;;34512:4;-1:-1:-1::0;;;;;34494:23:0;::::1;::::0;34486:32:::1;;;::::0;::::1;;34556:39;::::0;-1:-1:-1;;;34556:39:0;;34589:4:::1;34556:39;::::0;::::1;781:51:1::0;34529:24:0::1;::::0;-1:-1:-1;;;;;34556:24:0;::::1;::::0;::::1;::::0;754:18:1;;34556:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34614:46;::::0;-1:-1:-1;;;34614:46:0;;-1:-1:-1;;;;;12765:32:1;;;34614:46:0::1;::::0;::::1;12747:51:1::0;12814:18;;;12807:34;;;34529:66:0;;-1:-1:-1;34614:23:0;;::::1;::::0;::::1;::::0;12720:18:1;;34614:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34676;::::0;;-1:-1:-1;;;;;12765:32:1;;12747:51;;12829:2;12814:18;;12807:34;;;34606:54:0;;-1:-1:-1;34676:46:0::1;::::0;12720:18:1;34676:46:0::1;;;;;;;34435:295;34336:394:::0;;;;:::o;30758:1254::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;30854:2:::1;30844:7;:12;;30836:21;;;::::0;::::1;;30897:25;30915:7;30897:15;:25;:::i;:::-;30876:17;;:46;;30868:55;;;::::0;::::1;;30954:15;30934:17;:35:::0;31007:6:::1;::::0;31000:39:::1;::::0;-1:-1:-1;;;31000:39:0;;31033:4:::1;31000:39;::::0;::::1;781:51:1::0;30980:17:0::1;::::0;-1:-1:-1;;;;;31007:6:0::1;::::0;31000:24:::1;::::0;754:18:1;;31000:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30980:59;;31050:20;31073:24;31091:4;31073:9;:24::i;:::-;31050:47:::0;-1:-1:-1;31108:16:0::1;31149:3;31127:19;31139:7:::0;31127:9;:19:::1;:::i;:::-;:25;;;;:::i;:::-;31299:6;::::0;31323:9:::1;::::0;31292:52:::1;::::0;-1:-1:-1;;;31292:52:0;;-1:-1:-1;;;;;31323:9:0;;::::1;31292:52;::::0;::::1;12747:51:1::0;12814:18;;;12807:34;;;31108:44:0;;-1:-1:-1;31191:21:0::1;::::0;31299:6;::::1;::::0;31292:22:::1;::::0;12720:18:1;;31292:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31390:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;31390:234:0;;-1:-1:-1;;;;;31390:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;31441:4:::1;::::0;31461:8;;31390:9;;;;31441:4;;31598:15:::1;::::0;31390:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31637:25;31692:12;31665:24;31683:4;31665:9;:24::i;:::-;:39;;;;:::i;:::-;31637:67:::0;-1:-1:-1;31718:21:0;;31715:118:::1;;31755:66;31779:4;31794:6;31803:17;31755:15;:66::i;:::-;31845:23;31871:41;31895:17:::0;31871:21:::1;:41;:::i;:::-;31845:67:::0;-1:-1:-1;31928:19:0;;31925:80:::1;;31963:30;31977:15;31963:13;:30::i;:::-;30825:1187;;;;;;30758:1254:::0;:::o;33984:344::-;34077:16;;;34091:1;34077:16;;;;;;;;34034:7;;;;34077:16;34091:1;34077:16;;;;;;;;-1:-1:-1;;34114:9:0;;:16;;;-1:-1:-1;;;34114:16:0;;;;34053:40;;-1:-1:-1;;;;;;34114:9:0;;;;:14;;-1:-1:-1;34114:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34104:4;34109:1;34104:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;34104:26:0;;;-1:-1:-1;;;;;34104:26:0;;;;;34159:4;34141;34146:1;34141:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34141:23:0;;;;:7;;;;;;;;;;:23;34212:16;;;34226:1;34212:16;;;;;;;;34185:24;;34212:16;;34226:1;;34212:16;;;;;;;;;-1:-1:-1;;34249:9:0;;34273:12;;34249:43;;-1:-1:-1;;;34249:43:0;;34185;;-1:-1:-1;;;;;;34249:9:0;;;;:23;;:43;;34287:4;;34249:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34249:43:0;;;;;;;;;;;;:::i;:::-;34239:53;;34310:7;34318:1;34310:10;;;;;;;;:::i;:::-;;;;;;;34303:17;;;;33984:344;:::o;4888:104::-;4944:13;4977:7;4970:14;;;;;:::i;20544:295::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;20653:6:::1;::::0;-1:-1:-1;;;;;20653:6:0;;::::1;20645:14:::0;;::::1;::::0;20637:84:::1;;;::::0;-1:-1:-1;;;20637:84:0;;16241:2:1;20637:84:0::1;::::0;::::1;16223:21:1::0;16280:2;16260:18;;;16253:30;16319:34;16299:18;;;16292:62;16390:27;16370:18;;;16363:55;16435:19;;20637:84:0::1;16039:421:1::0;20637:84:0::1;20734:41;20763:4;20769:5;20734:28;:41::i;:::-;20791:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20791:40:0;::::1;::::0;::::1;::::0;;;::::1;20544:295:::0;;:::o;6594:413::-;306:10;6687:4;6731:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6731:34:0;;;;;;;;;;6784:35;;;;6776:85;;;;-1:-1:-1;;;6776:85:0;;16667:2:1;6776:85:0;;;16649:21:1;16706:2;16686:18;;;16679:30;16745:34;16725:18;;;16718:62;-1:-1:-1;;;16796:18:1;;;16789:35;16841:19;;6776:85:0;16465:401:1;6776:85:0;6897:67;306:10;6920:7;6948:15;6929:16;:34;6897:8;:67::i;:::-;-1:-1:-1;6995:4:0;;6594:413;-1:-1:-1;;;6594:413:0:o;5352:175::-;5438:4;5455:42;306:10;5479:9;5490:6;5455:9;:42::i;18267:226::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18379:9:::1;18375:111;18394:18:::0;;::::1;18375:111;;;18464:10;18433:16;:28;18450:7;;18458:1;18450:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18433:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18433:28:0;:41;;-1:-1:-1;;18433:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18414:3;::::1;::::0;::::1;:::i;:::-;;;;18375:111;;;;18267:226:::0;;;:::o;21910:182::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21995:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21995:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22050:34;;1439:41:1;;;22050:34:0::1;::::0;1412:18:1;22050:34:0::1;;;;;;;21910:182:::0;;:::o;21502:400::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;21624:17:::1;:34:::0;;;21669:16:::1;:32:::0;;;21712:14:::1;:28:::0;;;21729:11;21767:36:::1;21688:13:::0;21644:14;21767:36:::1;:::i;:::-;:53;;;;:::i;:::-;21751:13;:69:::0;;;21856:4:::1;-1:-1:-1::0;21839:21:0::1;21831:63;;;::::0;-1:-1:-1;;;21831:63:0;;17073:2:1;21831:63:0::1;::::0;::::1;17055:21:1::0;17112:2;17092:18;;;17085:30;17151:31;17131:18;;;17124:59;17200:18;;21831:63:0::1;16871:353:1::0;19354:233:0;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;19477:6:::1;19457:13;5189:12:::0;;;5101:108;19457:13:::1;:17;::::0;19473:1:::1;19457:17;:::i;:::-;:26;;;;:::i;:::-;19444:9;:39;;19436:48;;;::::0;::::1;;19535:4;19515:13;5189:12:::0;;;5101:108;19515:13:::1;:17;::::0;19531:1:::1;19515:17;:::i;:::-;:24;;;;:::i;:::-;19502:9;:37;;19494:46;;;::::0;::::1;;19550:18;:30:::0;19354:233::o;18046:102::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18118:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;18118:22:0;;::::1;::::0;;;::::1;::::0;;18046:102::o;18767:254::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18890:16:::1;5083:2:::0;18890::::1;:16;:::i;:::-;18881:4;18861:13;5189:12:::0;;;5101:108;18861:13:::1;:17;::::0;18877:1:::1;18861:17;:::i;:::-;:24;;;;:::i;:::-;18860:47;;;;:::i;:::-;18850:6;:57;;18842:66;;;::::0;::::1;;18945:16;5083:2:::0;18945::::1;:16;:::i;:::-;18935:27;::::0;:6;:27:::1;:::i;:::-;18919:13;:43:::0;;;18978:35:::1;::::0;1889:25:1;;;18978:35:0::1;::::0;1877:2:1;1862:18;18978:35:0::1;1743:177:1::0;9014:244:0;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9103:22:0;::::1;9095:73;;;::::0;-1:-1:-1;;;9095:73:0;;17431:2:1;9095:73:0::1;::::0;::::1;17413:21:1::0;17470:2;17450:18;;;17443:30;17509:34;17489:18;;;17482:62;-1:-1:-1;;;17560:18:1;;;17553:36;17606:19;;9095:73:0::1;17229:402:1::0;9095:73:0::1;9205:6;::::0;9184:38:::1;::::0;-1:-1:-1;;;;;9184:38:0;;::::1;::::0;9205:6:::1;::::0;9184:38:::1;::::0;9205:6:::1;::::0;9184:38:::1;9233:6;:17:::0;;-1:-1:-1;;;;;;9233:17:0::1;-1:-1:-1::0;;;;;9233:17:0;;;::::1;::::0;;;::::1;::::0;;9014:244::o;29393:142::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;29493:1:::1;29484:6;:10;29476:19;;;::::0;::::1;;29506:12;:21:::0;29393:142::o;34768:157::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;34826:12:::1;34870:7;8707:6:::0;;-1:-1:-1;;;;;8707:6:0;;8642:79;34870:7:::1;-1:-1:-1::0;;;;;34862:21:0::1;34891;34862:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17333:131:::0;17406:4;17429:27;:9;17448:7;17429:18;:27::i;7931:380::-;-1:-1:-1;;;;;8067:19:0;;8059:68;;;;-1:-1:-1;;;8059:68:0;;18048:2:1;8059:68:0;;;18030:21:1;18087:2;18067:18;;;18060:30;18126:34;18106:18;;;18099:62;-1:-1:-1;;;18177:18:1;;;18170:34;18221:19;;8059:68:0;17846:400:1;8059:68:0;-1:-1:-1;;;;;8146:21:0;;8138:68;;;;-1:-1:-1;;;8138:68:0;;18453:2:1;8138:68:0;;;18435:21:1;18492:2;18472:18;;;18465:30;18531:34;18511:18;;;18504:62;-1:-1:-1;;;18582:18:1;;;18575:32;18624:19;;8138:68:0;18251:398:1;8138:68:0;-1:-1:-1;;;;;8219:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8271:32;;1889:25:1;;;8271:32:0;;1862:18:1;8271:32:0;;;;;;;7931:380;;;:::o;7015:614::-;-1:-1:-1;;;;;7155:20:0;;7147:70;;;;-1:-1:-1;;;7147:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7236:23:0;;7228:71;;;;-1:-1:-1;;;7228:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7336:17:0;;7312:21;7336:17;;;;;;;;;;;7372:23;;;;7364:74;;;;-1:-1:-1;;;7364:74:0;;19666:2:1;7364:74:0;;;19648:21:1;19705:2;19685:18;;;19678:30;19744:34;19724:18;;;19717:62;-1:-1:-1;;;19795:18:1;;;19788:36;19841:19;;7364:74:0;19464:402:1;7364:74:0;-1:-1:-1;;;;;7474:17:0;;;:9;:17;;;;;;;;;;;7494:22;;;7474:42;;7538:20;;;;;;;;:30;;7510:6;;7474:9;7538:30;;7510:6;;7538:30;:::i;:::-;;;;;;;;7603:9;-1:-1:-1;;;;;7586:35:0;7595:6;-1:-1:-1;;;;;7586:35:0;;7614:6;7586:35;;;;1889:25:1;;1877:2;1862:18;;1743:177;7586:35:0;;;;;;;;7136:493;7015:614;;;:::o;22100:5102::-;-1:-1:-1;;;;;22200:18:0;;22192:68;;;;-1:-1:-1;;;22192:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22279:16:0;;22271:64;;;;-1:-1:-1;;;22271:64:0;;;;;;;:::i;:::-;22363:1;22354:6;:10;22346:61;;;;-1:-1:-1;;;22346:61:0;;20073:2:1;22346:61:0;;;20055:21:1;20112:2;20092:18;;;20085:30;20151:34;20131:18;;;20124:62;-1:-1:-1;;;20202:18:1;;;20195:36;20248:19;;22346:61:0;19871:402:1;22346:61:0;22432:13;;;;;;;22428:132;;-1:-1:-1;;;;;22469:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22498:23:0;;;;;;:19;:23;;;;;;;;22469:52;22461:87;;;;-1:-1:-1;;;22461:87:0;;20480:2:1;22461:87:0;;;20462:21:1;20519:2;20499:18;;;20492:30;-1:-1:-1;;;20538:18:1;;;20531:52;20600:18;;22461:87:0;20278:346:1;22461:87:0;27304:18;;27289:12;:33;22575:26;:52;;;;;22626:1;22605:18;;:22;22575:52;22572:231;;;-1:-1:-1;;;;;22652:22:0;;;;;;:16;:22;;;;;;;;22651:23;;:40;;-1:-1:-1;8707:6:0;;-1:-1:-1;;;;;22678:13:0;;;8707:6;;22678:13;22651:40;:65;;;-1:-1:-1;;;;;;22695:21:0;;22709:6;22695:21;22651:65;22643:148;;;;-1:-1:-1;;;22643:148:0;;20831:2:1;22643:148:0;;;20813:21:1;20870:2;20850:18;;;20843:30;20909:34;20889:18;;;20882:62;20980:34;20960:18;;;20953:62;-1:-1:-1;;;21031:19:1;;;21024:37;21078:19;;22643:148:0;20629:474:1;22643:148:0;22826:14;;;;22823:878;;;8707:6;;-1:-1:-1;;;;;22860:15:0;;;8707:6;;22860:15;;;;:32;;-1:-1:-1;8707:6:0;;-1:-1:-1;;;;;22879:13:0;;;8707:6;;22879:13;;22860:32;:52;;;;-1:-1:-1;;;;;;22896:16:0;;;;22860:52;:77;;;;-1:-1:-1;;;;;;22916:21:0;;22930:6;22916:21;;22860:77;:107;;;;-1:-1:-1;;;;;;22942:25:0;;;;;;:19;:25;;;;;;;;22941:26;22860:107;:135;;;;-1:-1:-1;;;;;;22972:23:0;;;;;;:19;:23;;;;;;;;22971:24;22860:135;22856:834;;;-1:-1:-1;;;;;23080:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;23116:35:0;;;;;;:31;:35;;;;;;;;23115:36;23080:71;23076:599;;;23198:12;;23188:6;:22;;23180:31;;;;;;23272:15;;23255:13;23265:2;23255:9;:13::i;:::-;23246:22;;:6;:22;:::i;:::-;:41;;23238:50;;;;;;23076:599;;;-1:-1:-1;;;;;23365:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23399:37:0;;;;;;:31;:37;;;;;;;;23398:38;23365:71;23361:314;;;23483:13;;23473:6;:23;;23465:32;;;;;23361:314;-1:-1:-1;;;;;23546:35:0;;;;;;:31;:35;;;;;;;;23541:134;;23639:15;;23622:13;23632:2;23622:9;:13::i;:::-;23613:22;;:6;:22;:::i;:::-;:41;;23605:50;;;;;;23713:28;23744:24;23762:4;23744:9;:24::i;:::-;23828:18;;23713:55;;-1:-1:-1;23804:42:0;;;;;;;23862:22;;-1:-1:-1;23873:11:0;;;;;;;23862:22;:35;;;;-1:-1:-1;23889:8:0;;-1:-1:-1;;;23889:8:0;;;;23888:9;23862:35;:71;;;;-1:-1:-1;;;;;;23902:31:0;;;;;;:25;:31;;;;;;;;23901:32;23862:71;:101;;;;-1:-1:-1;;;;;;23938:25:0;;;;;;:19;:25;;;;;;;;23937:26;23862:101;:129;;;;-1:-1:-1;;;;;;23968:23:0;;;;;;:19;:23;;;;;;;;23967:24;23862:129;23859:232;;;24008:8;:15;;-1:-1:-1;;;;24008:15:0;-1:-1:-1;;;24008:15:0;;;24038:10;:8;:10::i;:::-;24063:8;:16;;-1:-1:-1;;;;24063:16:0;;;23859:232;24106:14;;;;24103:262;;;24158:15;;24139;:34;;:73;;;;;24202:10;24177:21;:35;;24139:73;:99;;;;;24237:1;24216:18;:9;:16;:18::i;:::-;:22;24139:99;24136:218;;;24258:17;24272:2;24258:13;:17::i;:::-;24136:218;;;24329:9;:7;:9::i;:::-;-1:-1:-1;;;;;24495:25:0;;24377:12;24495:25;;;:19;:25;;;;;;24392:4;;24495:25;;;:52;;-1:-1:-1;;;;;;24524:23:0;;;;;;:19;:23;;;;;;;;24495:52;24492:99;;;-1:-1:-1;24574:5:0;24492:99;24611:12;24715:7;24712:2337;;;27304:18;;27289:12;:33;24778:106;;;;24833:8;24818:12;;:23;;;;:::i;:::-;24808:6;:33;;:75;;;;;24871:12;24845:18;;24866:1;24845:22;;;;:::i;:::-;:38;;24808:75;24777:143;;;;-1:-1:-1;;;;;;24889:31:0;;;;;;:25;:31;;;;;;;;24777:143;:177;;;;-1:-1:-1;;;;;;24925:29:0;;;;;;:25;:29;;;;;;;;24924:30;24777:177;:197;;;;;24973:1;24958:12;;:16;24777:197;24774:2106;;;27304:18;;27289:12;:33;25012:330;;25321:1;25305:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;25012:330:0;-1:-1:-1;;;;;25366:20:0;;;;;;:16;:20;;;;;;;;25362:174;;-1:-1:-1;;;;;25410:20:0;;;;;;:16;:20;;;;;:27;;-1:-1:-1;;25410:27:0;25433:4;25410:27;;;;;;25460:10;:15;;25433:4;;25460:10;;:15;;25433:4;;25460:15;:::i;:::-;;;;-1:-1:-1;;25503:13:0;;-1:-1:-1;;;;;799:32:1;;781:51;;25503:13:0;;769:2:1;754:18;25503:13:0;;;;;;;25362:174;25587:15;;25572:12;;25563:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;25556:46;;25665:12;;25647:15;;25640:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25618:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25745:12:0;;25726:16;;25719:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;25696:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25819:12:0;;25803:13;;25796:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;25776:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;24774:2106:0;;-1:-1:-1;24774:2106:0;;-1:-1:-1;;;;;25896:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25945:1;25929:13;;:17;25896:50;25892:988;;;25998:15;;25982:13;;25973:22;;:6;:22;:::i;:::-;:40;;;;:::i;:::-;25966:47;;26080:13;;26061:16;;26054:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26032:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26162:13:0;;26142:17;;26135:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;26112:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26238:13:0;;26221:14;;26214:21;;:4;:21;:::i;25892:988::-;-1:-1:-1;;;;;26314:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26364:1;26349:12;;:16;26314:51;26311:569;;;26414:15;;26399:12;;26390:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;26383:46;;26492:12;;26474:15;;26467:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26445:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26572:12:0;;26553:16;;26546:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;26523:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26646:12:0;;26630:13;;26623:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;26603:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;26681:14:0;;;;26680:15;;:47;;;26708:19;:17;:19::i;:::-;26699:6;:28;26680:47;26677:188;;;26755:22;:9;26774:2;26755:18;:22::i;:::-;26751:95;;26805:17;:9;26819:2;26805:13;:17::i;:::-;;26751:95;26911:8;;26908:93;;26943:42;26959:4;26973;26980;26943:15;:42::i;:::-;27023:14;27033:4;27023:14;;:::i;:::-;;;24712:2337;27061:33;27077:4;27083:2;27087:6;27061:15;:33::i;:::-;27110:24;:9;27129:4;27110:18;:24::i;:::-;:35;;;;;27138:7;27110:35;27107:88;;;27161:22;:9;27178:4;27161:16;:22::i;:::-;;22179:5023;;;;22100:5102;;;:::o;32410:1566::-;32451:23;32477:24;32495:4;32477:9;:24::i;:::-;32451:50;;32512:25;32583:16;;32561:19;;32540:18;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;32512:87;-1:-1:-1;32623:20:0;;;:46;;-1:-1:-1;32647:22:0;;32623:46;32620:60;;;32672:7;;32410:1566::o;32620:60::-;32713:18;;:23;;32734:2;32713:23;:::i;:::-;32695:15;:41;32692:113;;;32770:18;;:23;;32791:2;32770:23;:::i;:::-;32752:41;;32692:113;32817:12;32899:23;32984:1;32964:17;32943:18;;32925:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;32899:86;-1:-1:-1;33031:21:0;33063:51;33080:33;32899:86;33080:15;:33;:::i;:::-;33063:16;:51::i;:::-;33135:18;33156:38;33180:14;33156:21;:38;:::i;:::-;33135:59;;33205:23;33231:10;33205:36;;33254:24;33357:1;33338:18;;:20;;;;:::i;:::-;33317:42;;:17;:42;:::i;:::-;33294:19;;33281:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;33254:106;;33371:21;33468:1;33449:18;;:20;;;;:::i;:::-;33428:42;;:17;:42;:::i;:::-;33408:16;;33395:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;33371:100;-1:-1:-1;33503:32:0;33371:100;33503:16;:32;:::i;:::-;33484:51;;;;:::i;:::-;33581:1;33560:18;:22;;;33593:19;:23;;;33627:16;:20;33484:51;-1:-1:-1;33671:19:0;;;;;:42;;;33712:1;33694:15;:19;33671:42;33668:119;;;33729:46;33742:15;33759;33729:12;:46::i;:::-;33802:20;;33799:124;;33859:17;;33851:60;;-1:-1:-1;;;;;33859:17:0;;;;33890:16;;33851:60;;;;33890:16;33859:17;33851:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33838:73:0;;-1:-1:-1;;33799:124:0;32438:1538;;;;;;;;;32410:1566::o;32020:382::-;32108:16;;;32122:1;32108:16;;;;;;;;32084:21;;32108:16;;;;;;;;-1:-1:-1;;32145:9:0;;:16;;;-1:-1:-1;;;32145:16:0;;;;32084:40;;-1:-1:-1;;;;;;32145:9:0;;;;:14;;-1:-1:-1;32145:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32135:4;32140:1;32135:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;32135:26:0;;;-1:-1:-1;;;;;32135:26:0;;;;;32190:4;32172;32177:1;32172:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32172:23:0;;;:7;;;;;;;;;:23;32208:9;;:186;;-1:-1:-1;;;32208:186:0;;:9;;;:60;;32276:11;;32208:186;;:9;;32319:4;;32346:6;;32368:15;;32208:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20847:248;-1:-1:-1;;;;;20930:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20930:39:0;;;;;;;20990;20930:31;:39;20990:26;:39::i;2670:167::-;-1:-1:-1;;;;;2804:23:0;;2750:4;1784:19;;;:12;;;:19;;;;;;:24;;2774:55;2767:62;2670:167;-1:-1:-1;;;2670:167:0:o;2923:117::-;2986:7;3013:19;3021:3;1907:18;;1824:109;27794:562;27848:12;27907:20;;27889:15;:38;;;;:::i;:::-;27871:15;:56;27977:14;27994:125;28007:111;27977:14;28036:1;28017:18;:9;:16;:18::i;:::-;:20;;;;:::i;:::-;28095:22;28113:2;28095:9;:22::i;:::-;28066:26;28084:6;28066:9;:26::i;:::-;28039:24;28057:4;28039:9;:24::i;:::-;:53;;;;:::i;:::-;:78;;;;:::i;:::-;28007:6;:111::i;:::-;27994:9;;:12;:125::i;:::-;27977:142;;28130:16;28193:3;28173:17;;28149:21;:41;;;;:::i;:::-;:47;;;;:::i;:::-;28130:66;;28228:6;-1:-1:-1;;;;;28220:20:0;28248:8;28220:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28207:54:0;;-1:-1:-1;;28272:77:0;;;;28303:34;;-1:-1:-1;;;;;28303:34:0;;;28320:8;;28303:34;;;;;27837:519;;;27794:562;:::o;27496:286::-;27534:12;;27620:25;27644:1;27620:21;:25;:::i;:::-;-1:-1:-1;;27733:41:0;;27656:14;;27681:4;;;;27656:14;;;27733:41;27656:14;27733:41;27656:14;27681:4;27733:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27496:286:0:o;2266:152::-;2336:4;2360:50;2365:3;-1:-1:-1;;;;;2385:23:0;;2360:4;:50::i;2426:158::-;2499:4;2523:53;2531:3;-1:-1:-1;;;;;2551:23:0;;2523:7;:53::i;29658:573::-;29810:16;;;29824:1;29810:16;;;;;;;;29786:21;;29810:16;;;;;;;;;;-1:-1:-1;29810:16:0;29786:40;;29855:4;29837;29842:1;29837:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29837:23:0;;;:7;;;;;;;;;;:23;;;;29881:9;;:16;;;-1:-1:-1;;;29881:16:0;;;;:9;;;;;:14;;:16;;;;;29837:7;;29881:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29871:4;29876:1;29871:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29871:26:0;;;:7;;;;;;;;;:26;29942:9;;29910:56;;29927:4;;29942:9;29954:11;29910:8;:56::i;:::-;30005:9;;:218;;-1:-1:-1;;;30005:218:0;;-1:-1:-1;;;;;30005:9:0;;;;:60;;:218;;30080:11;;30005:9;;30150:4;;30177;;30197:15;;30005:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30243:507;30423:9;;30391:56;;30408:4;;-1:-1:-1;;;;;30423:9:0;30435:11;30391:8;:56::i;:::-;30490:9;;:252;;-1:-1:-1;;;30490:252:0;;-1:-1:-1;;;;;30490:9:0;;;;:25;;30523:9;;30490:252;;30556:4;;30576:11;;30490:9;;;;30556:4;;30716:15;;30490:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30243:507;;:::o;19599:207::-;-1:-1:-1;;;;;19687:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19687:52:0;;;;;;;;;;19755:43;;23301:51:1;;;23368:18;;;23361:50;19755:43:0;;23274:18:1;19755:43:0;;;;;;;19599:207;;:::o;28364:632::-;28783:28;;-1:-1:-1;;28800:10:0;23571:2:1;23567:15;23563:53;28783:28:0;;;23551:66:1;28443:7:0;;;;28895:5;;28859:12;;28818:15;;23633:12:1;;28783:28:0;;;;;;;;;;;;28773:39;;;;;;28765:48;;28764:70;;;;:::i;:::-;28645:32;;-1:-1:-1;;28662:14:0;23571:2:1;23567:15;23563:53;28645:32:0;;;23551:66:1;28725:14:0;;28684:15;;23633:12:1;;28645:32:0;;;;;;;;;;;;28635:43;;;;;;28627:52;;28626:74;;;;:::i;:::-;28567:34;28585:16;28567:15;:34;:::i;:::-;:134;;;;:::i;:::-;:172;;;;:::i;:::-;:268;;;;:::i;:::-;:304;;;;:::i;:::-;:333;;;;:::i;:::-;28528:391;;;;;;24035:19:1;;24079:2;24070:12;;23906:182;28528:391:0;;;;-1:-1:-1;;28528:391:0;;;;;;;;;28500:434;;28528:391;28500:434;;;;;-1:-1:-1;28984:4:0;28971:9;28984:4;28971:2;:9;:::i;:::-;28963:18;;:4;:18;:::i;:::-;:25;;;;:::i;:::-;28956:32;28364:632;-1:-1:-1;;;;;28364:632:0:o;3048:158::-;3122:7;3173:22;3177:3;3189:5;3173:3;:22::i;707:291::-;770:4;1784:19;;;:12;;;:19;;;;;;787:204;;-1:-1:-1;830:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;890:18;;868:19;;;:12;;;:19;;;;;;:40;;;;923:11;;787:204;-1:-1:-1;974:5:0;967:12;;1006:673;1072:4;1110:19;;;:12;;;:19;;;;;;1146:15;;1142:530;;1178:21;1202:14;1215:1;1202:10;:14;:::i;:::-;1251:18;;1178:38;;-1:-1:-1;1231:17:0;;1251:22;;1272:1;;1251:22;:::i;:::-;1231:42;;1307:13;1294:9;:26;1290:221;;1341:17;1361:3;:11;;1373:9;1361:22;;;;;;;;:::i;:::-;;;;;;;;;1341:42;;1431:9;1402:3;:11;;1414:13;1402:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;1459:23;;;:12;;;:23;;;;;:36;;;1290:221;1527:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1568:3;:12;;:19;1581:5;1568:19;;;;;;;;;;;1561:26;;;1611:4;1604:11;;;;;;;1142:530;1655:5;1648:12;;;;;1941:120;2008:7;2035:3;:11;;2047:5;2035:18;;;;;;;;:::i;:::-;;;;;;;;;2028:25;;1941:120;;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;843:131::-;-1:-1:-1;;;;;918:31:1;;908:42;;898:70;;964:1;961;954:12;898:70;843:131;:::o;979:315::-;1047:6;1055;1108:2;1096:9;1087:7;1083:23;1079:32;1076:52;;;1124:1;1121;1114:12;1076:52;1163:9;1150:23;1182:31;1207:5;1182:31;:::i;:::-;1232:5;1284:2;1269:18;;;;1256:32;;-1:-1:-1;;;979:315:1:o;1491:247::-;1550:6;1603:2;1591:9;1582:7;1578:23;1574:32;1571:52;;;1619:1;1616;1609:12;1571:52;1658:9;1645:23;1677:31;1702:5;1677:31;:::i;1925:180::-;1984:6;2037:2;2025:9;2016:7;2012:23;2008:32;2005:52;;;2053:1;2050;2043:12;2005:52;-1:-1:-1;2076:23:1;;1925:180;-1:-1:-1;1925:180:1:o;2110:127::-;2171:10;2166:3;2162:20;2159:1;2152:31;2202:4;2199:1;2192:15;2226:4;2223:1;2216:15;2242:275;2313:2;2307:9;2378:2;2359:13;;-1:-1:-1;;2355:27:1;2343:40;;2413:18;2398:34;;2434:22;;;2395:62;2392:88;;;2460:18;;:::i;:::-;2496:2;2489:22;2242:275;;-1:-1:-1;2242:275:1:o;2522:183::-;2582:4;2615:18;2607:6;2604:30;2601:56;;;2637:18;;:::i;:::-;-1:-1:-1;2682:1:1;2678:14;2694:4;2674:25;;2522:183::o;2710:662::-;2764:5;2817:3;2810:4;2802:6;2798:17;2794:27;2784:55;;2835:1;2832;2825:12;2784:55;2871:6;2858:20;2897:4;2921:60;2937:43;2977:2;2937:43;:::i;:::-;2921:60;:::i;:::-;3015:15;;;3101:1;3097:10;;;;3085:23;;3081:32;;;3046:12;;;;3125:15;;;3122:35;;;3153:1;3150;3143:12;3122:35;3189:2;3181:6;3177:15;3201:142;3217:6;3212:3;3209:15;3201:142;;;3283:17;;3271:30;;3321:12;;;;3234;;3201:142;;;-1:-1:-1;3361:5:1;2710:662;-1:-1:-1;;;;;;2710:662:1:o;3377:1215::-;3495:6;3503;3556:2;3544:9;3535:7;3531:23;3527:32;3524:52;;;3572:1;3569;3562:12;3524:52;3612:9;3599:23;3641:18;3682:2;3674:6;3671:14;3668:34;;;3698:1;3695;3688:12;3668:34;3736:6;3725:9;3721:22;3711:32;;3781:7;3774:4;3770:2;3766:13;3762:27;3752:55;;3803:1;3800;3793:12;3752:55;3839:2;3826:16;3861:4;3885:60;3901:43;3941:2;3901:43;:::i;3885:60::-;3979:15;;;4061:1;4057:10;;;;4049:19;;4045:28;;;4010:12;;;;4085:19;;;4082:39;;;4117:1;4114;4107:12;4082:39;4141:11;;;;4161:217;4177:6;4172:3;4169:15;4161:217;;;4257:3;4244:17;4274:31;4299:5;4274:31;:::i;:::-;4318:18;;4194:12;;;;4356;;;;4161:217;;;4397:5;-1:-1:-1;;4440:18:1;;4427:32;;-1:-1:-1;;4471:16:1;;;4468:36;;;4500:1;4497;4490:12;4468:36;;4523:63;4578:7;4567:8;4556:9;4552:24;4523:63;:::i;:::-;4513:73;;;3377:1215;;;;;:::o;4597:456::-;4674:6;4682;4690;4743:2;4731:9;4722:7;4718:23;4714:32;4711:52;;;4759:1;4756;4749:12;4711:52;4798:9;4785:23;4817:31;4842:5;4817:31;:::i;:::-;4867:5;-1:-1:-1;4924:2:1;4909:18;;4896:32;4937:33;4896:32;4937:33;:::i;:::-;4597:456;;4989:7;;-1:-1:-1;;;5043:2:1;5028:18;;;;5015:32;;4597:456::o;5058:118::-;5144:5;5137:13;5130:21;5123:5;5120:32;5110:60;;5166:1;5163;5156:12;5181:241;5237:6;5290:2;5278:9;5269:7;5265:23;5261:32;5258:52;;;5306:1;5303;5296:12;5258:52;5345:9;5332:23;5364:28;5386:5;5364:28;:::i;5824:382::-;5889:6;5897;5950:2;5938:9;5929:7;5925:23;5921:32;5918:52;;;5966:1;5963;5956:12;5918:52;6005:9;5992:23;6024:31;6049:5;6024:31;:::i;:::-;6074:5;-1:-1:-1;6131:2:1;6116:18;;6103:32;6144:30;6103:32;6144:30;:::i;:::-;6193:7;6183:17;;;5824:382;;;;;:::o;6211:316::-;6288:6;6296;6304;6357:2;6345:9;6336:7;6332:23;6328:32;6325:52;;;6373:1;6370;6363:12;6325:52;-1:-1:-1;;6396:23:1;;;6466:2;6451:18;;6438:32;;-1:-1:-1;6517:2:1;6502:18;;;6489:32;;6211:316;-1:-1:-1;6211:316:1:o;6532:388::-;6600:6;6608;6661:2;6649:9;6640:7;6636:23;6632:32;6629:52;;;6677:1;6674;6667:12;6629:52;6716:9;6703:23;6735:31;6760:5;6735:31;:::i;:::-;6785:5;-1:-1:-1;6842:2:1;6827:18;;6814:32;6855:33;6814:32;6855:33;:::i;6925:750::-;7017:6;7025;7033;7086:2;7074:9;7065:7;7061:23;7057:32;7054:52;;;7102:1;7099;7092:12;7054:52;7142:9;7129:23;7171:18;7212:2;7204:6;7201:14;7198:34;;;7228:1;7225;7218:12;7198:34;7266:6;7255:9;7251:22;7241:32;;7311:7;7304:4;7300:2;7296:13;7292:27;7282:55;;7333:1;7330;7323:12;7282:55;7373:2;7360:16;7399:2;7391:6;7388:14;7385:34;;;7415:1;7412;7405:12;7385:34;7470:7;7463:4;7453:6;7450:1;7446:14;7442:2;7438:23;7434:34;7431:47;7428:67;;;7491:1;7488;7481:12;7428:67;7522:4;7514:13;;;;-1:-1:-1;7546:6:1;-1:-1:-1;;7587:20:1;;7574:34;7617:28;7574:34;7617:28;:::i;:::-;7664:5;7654:15;;;6925:750;;;;;:::o;7680:380::-;7759:1;7755:12;;;;7802;;;7823:61;;7877:4;7869:6;7865:17;7855:27;;7823:61;7930:2;7922:6;7919:14;7899:18;7896:38;7893:161;;7976:10;7971:3;7967:20;7964:1;7957:31;8011:4;8008:1;8001:15;8039:4;8036:1;8029:15;7893:161;;7680:380;;;:::o;8065:356::-;8267:2;8249:21;;;8286:18;;;8279:30;8345:34;8340:2;8325:18;;8318:62;8412:2;8397:18;;8065:356::o;8426:127::-;8487:10;8482:3;8478:20;8475:1;8468:31;8518:4;8515:1;8508:15;8542:4;8539:1;8532:15;8558:422;8647:1;8690:5;8647:1;8704:270;8725:7;8715:8;8712:21;8704:270;;;8784:4;8780:1;8776:6;8772:17;8766:4;8763:27;8760:53;;;8793:18;;:::i;:::-;8843:7;8833:8;8829:22;8826:55;;;8863:16;;;;8826:55;8942:22;;;;8902:15;;;;8704:270;;;8708:3;8558:422;;;;;:::o;8985:806::-;9034:5;9064:8;9054:80;;-1:-1:-1;9105:1:1;9119:5;;9054:80;9153:4;9143:76;;-1:-1:-1;9190:1:1;9204:5;;9143:76;9235:4;9253:1;9248:59;;;;9321:1;9316:130;;;;9228:218;;9248:59;9278:1;9269:10;;9292:5;;;9316:130;9353:3;9343:8;9340:17;9337:43;;;9360:18;;:::i;:::-;-1:-1:-1;;9416:1:1;9402:16;;9431:5;;9228:218;;9530:2;9520:8;9517:16;9511:3;9505:4;9502:13;9498:36;9492:2;9482:8;9479:16;9474:2;9468:4;9465:12;9461:35;9458:77;9455:159;;;-1:-1:-1;9567:19:1;;;9599:5;;9455:159;9646:34;9671:8;9665:4;9646:34;:::i;:::-;9716:6;9712:1;9708:6;9704:19;9695:7;9692:32;9689:58;;;9727:18;;:::i;:::-;9765:20;;8985:806;-1:-1:-1;;;8985:806:1:o;9796:140::-;9854:5;9883:47;9924:4;9914:8;9910:19;9904:4;9883:47;:::i;9941:168::-;9981:7;10047:1;10043;10039:6;10035:14;10032:1;10029:21;10024:1;10017:9;10010:17;10006:45;10003:71;;;10054:18;;:::i;:::-;-1:-1:-1;10094:9:1;;9941:168::o;10114:127::-;10175:10;10170:3;10166:20;10163:1;10156:31;10206:4;10203:1;10196:15;10230:4;10227:1;10220:15;10246:120;10286:1;10312;10302:35;;10317:18;;:::i;:::-;-1:-1:-1;10351:9:1;;10246:120::o;10371:127::-;10432:10;10427:3;10423:20;10420:1;10413:31;10463:4;10460:1;10453:15;10487:4;10484:1;10477:15;10503:135;10542:3;10563:17;;;10560:43;;10583:18;;:::i;:::-;-1:-1:-1;10630:1:1;10619:13;;10503:135::o;11052:128::-;11092:3;11123:1;11119:6;11116:1;11113:13;11110:39;;;11129:18;;:::i;:::-;-1:-1:-1;11165:9:1;;11052:128::o;12384:184::-;12454:6;12507:2;12495:9;12486:7;12482:23;12478:32;12475:52;;;12523:1;12520;12513:12;12475:52;-1:-1:-1;12546:16:1;;12384:184;-1:-1:-1;12384:184:1:o;12852:245::-;12919:6;12972:2;12960:9;12951:7;12947:23;12943:32;12940:52;;;12988:1;12985;12978:12;12940:52;13020:9;13014:16;13039:28;13061:5;13039:28;:::i;13102:125::-;13142:4;13170:1;13167;13164:8;13161:34;;;13175:18;;:::i;:::-;-1:-1:-1;13212:9:1;;13102:125::o;13232:607::-;-1:-1:-1;;;;;13591:15:1;;;13573:34;;13638:2;13623:18;;13616:34;;;;13681:2;13666:18;;13659:34;;;;13724:2;13709:18;;13702:34;;;;13773:15;;;13767:3;13752:19;;13745:44;13553:3;13805:19;;13798:35;;;;13522:3;13507:19;;13232:607::o;13844:245::-;13923:6;13931;13984:2;13972:9;13963:7;13959:23;13955:32;13952:52;;;14000:1;13997;13990:12;13952:52;-1:-1:-1;;14023:16:1;;14079:2;14064:18;;;14058:25;14023:16;;14058:25;;-1:-1:-1;13844:245:1:o;14094:251::-;14164:6;14217:2;14205:9;14196:7;14192:23;14188:32;14185:52;;;14233:1;14230;14223:12;14185:52;14265:9;14259:16;14284:31;14309:5;14284:31;:::i;14350:461::-;14403:3;14441:5;14435:12;14468:6;14463:3;14456:19;14494:4;14523:2;14518:3;14514:12;14507:19;;14560:2;14553:5;14549:14;14581:1;14591:195;14605:6;14602:1;14599:13;14591:195;;;14670:13;;-1:-1:-1;;;;;14666:39:1;14654:52;;14726:12;;;;14761:15;;;;14702:1;14620:9;14591:195;;;-1:-1:-1;14802:3:1;;14350:461;-1:-1:-1;;;;;14350:461:1:o;14816:332::-;15023:6;15012:9;15005:25;15066:2;15061;15050:9;15046:18;15039:30;14986:4;15086:56;15138:2;15127:9;15123:18;15115:6;15086:56;:::i;:::-;15078:64;14816:332;-1:-1:-1;;;;14816:332:1:o;15153:881::-;15248:6;15279:2;15322;15310:9;15301:7;15297:23;15293:32;15290:52;;;15338:1;15335;15328:12;15290:52;15371:9;15365:16;15404:18;15396:6;15393:30;15390:50;;;15436:1;15433;15426:12;15390:50;15459:22;;15512:4;15504:13;;15500:27;-1:-1:-1;15490:55:1;;15541:1;15538;15531:12;15490:55;15570:2;15564:9;15593:60;15609:43;15649:2;15609:43;:::i;15593:60::-;15687:15;;;15769:1;15765:10;;;;15757:19;;15753:28;;;15718:12;;;;15793:19;;;15790:39;;;15825:1;15822;15815:12;15790:39;15849:11;;;;15869:135;15885:6;15880:3;15877:15;15869:135;;;15951:10;;15939:23;;15902:12;;;;15982;;;;15869:135;;;16023:5;15153:881;-1:-1:-1;;;;;;;15153:881:1:o;18654:401::-;18856:2;18838:21;;;18895:2;18875:18;;;18868:30;18934:34;18929:2;18914:18;;18907:62;-1:-1:-1;;;19000:2:1;18985:18;;18978:35;19045:3;19030:19;;18654:401::o;19060:399::-;19262:2;19244:21;;;19301:2;19281:18;;;19274:30;19340:34;19335:2;19320:18;;19313:62;-1:-1:-1;;;19406:2:1;19391:18;;19384:33;19449:3;19434:19;;19060:399::o;21108:510::-;21379:6;21368:9;21361:25;21422:3;21417:2;21406:9;21402:18;21395:31;21342:4;21443:57;21495:3;21484:9;21480:19;21472:6;21443:57;:::i;:::-;-1:-1:-1;;;;;21536:32:1;;;;21531:2;21516:18;;21509:60;-1:-1:-1;21600:2:1;21585:18;21578:34;21435:65;21108:510;-1:-1:-1;;21108:510:1:o;21623:582::-;21922:6;21911:9;21904:25;21965:6;21960:2;21949:9;21945:18;21938:34;22008:3;22003:2;21992:9;21988:18;21981:31;21885:4;22029:57;22081:3;22070:9;22066:19;22058:6;22029:57;:::i;:::-;-1:-1:-1;;;;;22122:32:1;;;;22117:2;22102:18;;22095:60;-1:-1:-1;22186:3:1;22171:19;22164:35;22021:65;21623:582;-1:-1:-1;;;21623:582:1:o;22822:306::-;22910:6;22918;22926;22979:2;22967:9;22958:7;22954:23;22950:32;22947:52;;;22995:1;22992;22985:12;22947:52;23024:9;23018:16;23008:26;;23074:2;23063:9;23059:18;23053:25;23043:35;;23118:2;23107:9;23103:18;23097:25;23087:35;;22822:306;;;;;:::o;24093:112::-;24125:1;24151;24141:35;;24156:18;;:::i;:::-;-1:-1:-1;24190:9:1;;24093:112::o;24210:127::-;24271:10;24266:3;24262:20;24259:1;24252:31;24302:4;24299:1;24292:15;24326:4;24323:1;24316:15

Swarm Source

ipfs://723d6813fa488467d77aa57179ee0c2650253a2c5e422c081a7937dc1e587cab
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.