ETH Price: $3,473.16 (+4.18%)

Token

Together As One (TAO)
 

Overview

Max Total Supply

1,000,000,000,000 TAO

Holders

357

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
136,623.14982679740918834 TAO

Value
$0.00
0xa65661b2ca9bf4cd8af4e268a6e9bab6863d58e0
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:
TogetherAsOne

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT


pragma solidity 0.8.11;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}


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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

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

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

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

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

contract TogetherAsOne is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress;
      
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool public limitsInEffect = true;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e12 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Together As One";
    string private constant _symbol = "TAO";
    uint8 private constant _decimals = 18;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 public _buyTaxFee = 200;
    uint256 public _buyLiquidityFee = 400;
    uint256 public _buyMarketingFee = 500;

    uint256 public _sellTaxFee = 200;
    uint256 public _sellLiquidityFee = 900;
    uint256 public _sellMarketingFee = 500;
    
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public lastLPWithdrawalTimestamp = 0;
    
    uint256 public _liquidityTokensToSwap;
    uint256 public _marketingTokensToSwap;
    
    uint256 public maxTransactionAmount;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    uint256 public maxWallet;
    
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit = 435 * 1 gwei; // do not allow over x gwei for launch
    
    // 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;

    uint256 private minimumTokensBeforeSwap;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    event ExcludeFromReward(address excludedAddress);
    
    event IncludeInReward(address includedAddress);
    
    event ExcludeFromFee(address excludedAddress);
    
    event IncludeInFee(address includedAddress);
    
    event SetBuyFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee);
    
    event SetSellFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedMarketingAddress(address marketing);

    event AutoNukeLP(uint256 indexed tokensNuked);
    
    event ManualNukeLP(uint256 indexed tokensNuked);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        address newOwner = address(msg.sender);
        _rOwned[newOwner] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        // lowered due to lower initial liquidity amount.
        maxTransactionAmount = _tTotal * 25 / 10000; // 0.25% maxTransactionAmountTxn
        minimumTokensBeforeSwap = _tTotal * 5 / 10000; // 0.05% swap tokens amount
        maxWallet = _tTotal * 1 / 100; // 1% max wallet
        
        marketingAddress = payable(0x65B0a7E43AcBd7457D65298197C64e5dbD6a8F86); // Marketing Address
        
        lastLPWithdrawalTimestamp = 0; // replace with block.timestamp

        _isExcludedFromFee[newOwner] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        
        excludeFromMaxTransaction(newOwner, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        excludeFromReward(address(this));
        
        emit Transfer(address(0), newOwner, _tTotal);
        transferOwnership(newOwner);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

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

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

    function isExcludedFromReward(address account)
        external
        view
        returns (bool)
    {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        transferDelayEnabled = false;
        return true;
    }

    // only use if conducting a presale
    function addPresaleAddressForExclusions(address _presaleAddress) external onlyOwner {
        excludeFromFee(_presaleAddress);
        excludeFromMaxTransaction(_presaleAddress, true);
    }
    
    // disable Transfer delay
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }

    function withdrawLP(uint256 percToWithdraw) external onlyOwner {
        require(block.timestamp >= nextAvailableLpWithdrawDate(), "May only withdraw every 7 days");
        require(percToWithdraw <= 20, "May only withdraw 20% every 7 days");
        lastLPWithdrawalTimestamp = block.timestamp;

        // get balance of pair tokens on the contract and allow 20% to be withdrawn.
        uint256 amtToWithdraw = IERC20(address(uniswapV2Pair)).balanceOf(address(this)) * percToWithdraw / 100;

        IERC20(uniswapV2Pair).transfer(msg.sender, amtToWithdraw);
    }

    function nextAvailableLpWithdrawDate() public view returns (uint256){
        return lastLPWithdrawalTimestamp + 7 days;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
    }
        
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

     // change the minimum amount of tokens to sell from fees
    function updateMinimumTokensBeforeSwap(uint256 newAmount) external onlyOwner{
  	    require(newAmount >= _tTotal * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= _tTotal * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    minimumTokensBeforeSwap = newAmount;
  	}

    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (_tTotal * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (_tTotal * 1 / 100)/1e18, "Cannot set Max Wallet lower than 1%");
        maxWallet = newNum * (10**18);
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
    }
    
    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 400);
        gasPriceLimit = gas * 1 gwei;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 20, "Cannot exclude more than 20 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
 
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify && 
                !_isExcludedFromFee[to] &&
                !_isExcludedFromFee[from]
            ){                
                // only use to prevent sniper buys in the first blocks.
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
                }
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed Max Wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed Max Wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        if(!inSwapAndLiquify && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFee[from]){
            autoBurnLiquidityPairTokens();
        }

        removeAllFee();
        
        buyOrSellSwitch = TRANSFER;
        
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            if(tradingActiveBlock + 1 >= block.number && (automatedMarketMakerPairs[to] || automatedMarketMakerPairs[from])){
                _taxFee = 600;
                _liquidityFee = 9300;
                buyOrSellSwitch = SELL;
            }
            // Buy
            else if (automatedMarketMakerPairs[from]) {
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyMarketingFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellMarketingFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = SELL;
                }
            }
        }
        
        _tokenTransfer(from, to, amount);
        
        restoreAllFee();
        
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap;
        bool success;

        // prevent overly large contract sells.
        if(contractBalance >= minimumTokensBeforeSwap * 10){
            contractBalance = minimumTokensBeforeSwap * 10;
        }

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = contractBalance * _liquidityTokensToSwap / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap - (_liquidityTokensToSwap/2));
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;
                
        if(tokensForLiquidity > 0 && ethForLiquidity > 0){
            addLiquidity(tokensForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

        // send remainder to marketing
        (success,) = address(marketingAddress).call{value: address(this).balance}("");
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _buyMarketingFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _sellMarketingFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10000);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10000);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyMarketingFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyMarketingFee = buyMarketingFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyMarketingFee <= 2000, "Must keep buy taxes below 20%");
        emit SetBuyFee(buyMarketingFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellMarketingFee = sellMarketingFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellMarketingFee <= 3200, "Must keep sell taxes below 32%");
        emit SetSellFee(sellMarketingFee, sellLiquidityFee, sellTaxFee);
    }
    
    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        _isExcludedFromFee[marketingAddress] = false;
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        require(_token != address(uniswapV2Pair), "Can't withdraw Native LP tokens with this method");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
    
    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            removeAllFee();
            _transfer(uniswapV2Pair, address(0xdead), amountToBurn);
            restoreAllFee();
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP(amountToBurn);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1500, "May not nuke more than 15% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            removeAllFee();
            _transfer(uniswapV2Pair, address(0xdead), amountToBurn);
            restoreAllFee();
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP(amountToBurn);
    }

    // for one-time airdrop feature after contract launch
    function airdropToWallets(address[] memory airdropWallets, uint256[] memory amount) external onlyOwner() {
        require(airdropWallets.length == amount.length, "airdropToWallets:: Arrays must be the same length");
        removeAllFee();
        buyOrSellSwitch = TRANSFER;
        for(uint256 i = 0; i < airdropWallets.length; i++){
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i]*1e18;
            _tokenTransfer(msg.sender, wallet, airdropAmount);
        }
        restoreAllFee();
    }
}

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":true,"internalType":"uint256","name":"tokensNuked","type":"uint256"}],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensNuked","type":"uint256"}],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"}],"name":"addPresaleAddressForExclusions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLPWithdrawalTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","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":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nextAvailableLpWithdrawDate","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percToWithdraw","type":"uint256"}],"name":"withdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526008805461ffff19166101011790556019600955600a805460ff19166001179055610e10600b55610708600d556200004c6c0c9f2c9cd04674edea4000000060001962000e19565b6200005a9060001962000e46565b60125560145460155560165460175560c86019819055610190601a556101f4601b819055601c91909155610384601d55601e556000601f8190556020556026805460ff19166001179055646548053e00602755602b805461ffff60a81b19169055348015620000c857600080fd5b50600080546001600160a01b03191633908117825560405190918291600080516020620057c2833981519152908290a35060125433600081815260046020526040902091909155737a250d5630b4cf539739df2c5dacb4c659f2488d620001318160016200046c565b602a80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200018b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b1919062000e60565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000225919062000e60565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000299919062000e60565b602b80546001600160a01b0319166001600160a01b03929092169182179055620002c59060016200046c565b602b54620002de906001600160a01b03166001620004e6565b612710620002fb6c0c9f2c9cd04674edea40000000601962000e8b565b62000307919062000ead565b602355612710620003276c0c9f2c9cd04674edea40000000600562000e8b565b62000333919062000ead565b6029556064620003526c0c9f2c9cd04674edea40000000600162000e8b565b6200035e919062000ead565b602555600380546001600160a01b0319167365b0a7e43acbd7457d65298197c64e5dbd6a8f86178155600060208181556001600160a01b038581168352600f9091526040808320805460ff19908116600190811790925530855282852080548216831790559454909216835290912080549092168117909155620003e49083906200046c565b620003f13060016200046c565b6200040061dead60016200046c565b6200040b306200054b565b6040516c0c9f2c9cd04674edea4000000081526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3620004648262000763565b505062000f81565b6000546001600160a01b03163314620004bb5760405162461bcd60e51b81526020600482018190526024820152600080516020620057a283398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6001600160a01b038216600090815260286020908152604080832080548515801560ff1992831681179093556024909452919093208054909116909217909155620005365762000536826200054b565b80620005475762000547826200085f565b5050565b6000546001600160a01b03163314620005965760405162461bcd60e51b81526020600482018190526024820152600080516020620057a28339815191526044820152606401620004b2565b6001600160a01b03811660009081526010602052604090205460ff1615620006015760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620004b2565b6011546014906200061490600162000ec4565b1115620006a05760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203230206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401620004b2565b6001600160a01b03811660009081526004602052604090205415620006fd576001600160a01b038116600090815260046020526040902054620006e39062000a48565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152601060205260408120805460ff191660019081179091556011805491820181559091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319169091179055565b6000546001600160a01b03163314620007ae5760405162461bcd60e51b81526020600482018190526024820152600080516020620057a28339815191526044820152606401620004b2565b6001600160a01b038116620008155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620004b2565b600080546040516001600160a01b0380851693921691600080516020620057c283398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314620008aa5760405162461bcd60e51b81526020600482018190526024820152600080516020620057a28339815191526044820152606401620004b2565b6001600160a01b03811660009081526010602052604090205460ff16620009145760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401620004b2565b60005b6011548110156200054757816001600160a01b03166011828154811062000942576200094262000edf565b6000918252602090912001546001600160a01b0316141562000a335760118054620009709060019062000e46565b8154811062000983576200098362000edf565b600091825260209091200154601180546001600160a01b039092169183908110620009b257620009b262000edf565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055601090925220805460ff19169055601180548062000a0d5762000a0d62000ef5565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8062000a3f8162000f0b565b91505062000917565b600060125482111562000ab15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620004b2565b600062000abd62000ae0565b905062000ad9818462000b1360201b620028091790919060201c565b9392505050565b6000808062000aee62000b5d565b9150915062000b0c818362000b1360201b620028091790919060201c565b9250505090565b600062000ad983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d4760201b60201c565b60125460009081906c0c9f2c9cd04674edea40000000825b60115481101562000cf25782600460006011848154811062000b9b5762000b9b62000edf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000c0a575081600560006011848154811062000be35762000be362000edf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000c2b575050601254936c0c9f2c9cd04674edea400000009350915050565b62000c82600460006011848154811062000c495762000c4962000edf565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205485916200284b62000d83821b17901c565b925062000cdb600560006011848154811062000ca25762000ca262000edf565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205484916200284b62000d83821b17901c565b91508062000ce98162000f0b565b91505062000b75565b5062000d1c6c0c9f2c9cd04674edea4000000060125462000b1360201b620028091790919060201c565b82101562000d3e575050601254926c0c9f2c9cd04674edea4000000092509050565b90939092509050565b6000818362000d6b5760405162461bcd60e51b8152600401620004b2919062000f29565b50600062000d7a848662000ead565b95945050505050565b600062000ad983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000dcd60201b60201c565b6000818484111562000df45760405162461bcd60e51b8152600401620004b2919062000f29565b50600062000d7a848662000e46565b634e487b7160e01b600052601260045260246000fd5b60008262000e2b5762000e2b62000e03565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000e5b5762000e5b62000e30565b500390565b60006020828403121562000e7357600080fd5b81516001600160a01b038116811462000ad957600080fd5b600081600019048311821515161562000ea85762000ea862000e30565b500290565b60008262000ebf5762000ebf62000e03565b500490565b6000821982111562000eda5762000eda62000e30565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000f225762000f2262000e30565b5060010190565b600060208083528351808285015260005b8181101562000f585785810183015185820160400152820162000f3a565b8181111562000f6b576000604083870101525b50601f01601f1916929092016040019392505050565b6148118062000f916000396000f3fe6080604052600436106104355760003560e01c8063715018a611610229578063a9059cbb1161012e578063dd62ed3e116100b6578063efcc52de1161007a578063efcc52de14610cb6578063f2fde38b14610ccc578063f5648a4f14610cec578063f8b45b0514610d01578063fe72b27a14610d1757600080fd5b8063dd62ed3e14610c05578063e4456ecb14610c4b578063e884f26014610c6b578063ea2f0b3714610c80578063ee40166e14610ca057600080fd5b8063c5d24189116100fd578063c5d2418914610b93578063c860795214610ba9578063c876d0b914610bbf578063c8c8ebe414610bd9578063dc44b6a014610bef57600080fd5b8063a9059cbb14610b02578063b62496f514610b22578063bbc0c74214610b52578063c49b9a8014610b7357600080fd5b8063906e9dd0116101b1578063a073d37f11610180578063a073d37f14610a77578063a457c2d714610a8c578063a4c82a0014610aac578063a5ece94114610ac2578063a716b77314610ae257600080fd5b8063906e9dd0146109f557806395d89b4114610a155780639a7a23d614610a415780639ec22c0e14610a6157600080fd5b80638366e79a116101f85780638366e79a1461095357806388790a681461097357806388f82020146109895780638a8c523c146109c25780638da5cb5b146109d757600080fd5b8063715018a6146108e9578063730c1888146108fe578063751039fc1461091e5780637571336a1461093357600080fd5b80632c3e486c1161033a57806349a84232116102c25780635342acb4116102865780635342acb414610853578063557ed1ba1461088c578063602bc62b1461089f57806370a08231146108b4578063712c2985146108d457600080fd5b806349a84232146107bd57806349bd5a5e146107d35780634a62bb65146107f35780634a74bb021461081257806352390c021461083357600080fd5b80633685d419116103095780633685d4191461072757806339509351146107475780634047ea3e14610767578063437823ec1461077d5780634549b0391461079d57600080fd5b80632c3e486c146106bb5780632d838119146106d15780632e82f1a0146106f1578063313ce5671461070b57600080fd5b8063184c16c5116103bd578063200a692d1161038c578063200a692d1461062f5780632307b4411461064557806323b872dd1461066557806324171f321461068557806325519cf21461069b57600080fd5b8063184c16c5146105c3578063199ffc72146105d95780631c499ab0146105ef5780631d865c301461060f57600080fd5b8063106b5da111610404578063106b5da1146104fd57806310d5de531461051d57806313114a9d1461054d5780631694505e1461056c57806318160ddd146105a457600080fd5b806306fdde0314610441578063080437511461048b57806309231602146104ad578063095ea7b3146104cd57600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5060408051808201909152600f81526e546f676574686572204173204f6e6560881b60208201525b60405161048291906141d9565b60405180910390f35b34801561049757600080fd5b506104ab6104a636600461422e565b610d37565b005b3480156104b957600080fd5b506104ab6104c836600461422e565b610e91565b3480156104d957600080fd5b506104ed6104e836600461425c565b610ede565b6040519015158152602001610482565b34801561050957600080fd5b506104ab61051836600461422e565b610ef5565b34801561052957600080fd5b506104ed610538366004614288565b60246020526000908152604090205460ff1681565b34801561055957600080fd5b506013545b604051908152602001610482565b34801561057857600080fd5b50602a5461058c906001600160a01b031681565b6040516001600160a01b039091168152602001610482565b3480156105b057600080fd5b5068327cb2734119d3b7a9601e1b61055e565b3480156105cf57600080fd5b5061055e600d5481565b3480156105e557600080fd5b5061055e60095481565b3480156105fb57600080fd5b506104ab61060a36600461422e565b610fd5565b34801561061b57600080fd5b506104ab61062a3660046142a5565b6110a8565b34801561063b57600080fd5b5061055e601c5481565b34801561065157600080fd5b506104ab6106603660046143a7565b61118e565b34801561067157600080fd5b506104ed610680366004614469565b6112c1565b34801561069157600080fd5b5061055e60225481565b3480156106a757600080fd5b506104ab6106b63660046142a5565b61132a565b3480156106c757600080fd5b5061055e600b5481565b3480156106dd57600080fd5b5061055e6106ec36600461422e565b611407565b3480156106fd57600080fd5b50600a546104ed9060ff1681565b34801561071757600080fd5b5060405160128152602001610482565b34801561073357600080fd5b506104ab610742366004614288565b61148b565b34801561075357600080fd5b506104ed61076236600461425c565b61163e565b34801561077357600080fd5b5061055e60215481565b34801561078957600080fd5b506104ab610798366004614288565b611674565b3480156107a957600080fd5b5061055e6107b83660046144b8565b6116f9565b3480156107c957600080fd5b5061055e60205481565b3480156107df57600080fd5b50602b5461058c906001600160a01b031681565b3480156107ff57600080fd5b506008546104ed90610100900460ff1681565b34801561081e57600080fd5b50602b546104ed90600160a81b900460ff1681565b34801561083f57600080fd5b506104ab61084e366004614288565b611790565b34801561085f57600080fd5b506104ed61086e366004614288565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561089857600080fd5b504261055e565b3480156108ab57600080fd5b5060025461055e565b3480156108c057600080fd5b5061055e6108cf366004614288565b61197e565b3480156108e057600080fd5b5061055e6119dd565b3480156108f557600080fd5b506104ab6119f5565b34801561090a57600080fd5b506104ab6109193660046144e8565b611a69565b34801561092a57600080fd5b506104ed611b92565b34801561093f57600080fd5b506104ab61094e366004614521565b611bd8565b34801561095f57600080fd5b506104ed61096e36600461454f565b611c2d565b34801561097f57600080fd5b5061055e601d5481565b34801561099557600080fd5b506104ed6109a4366004614288565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156109ce57600080fd5b506104ab611eac565b3480156109e357600080fd5b506000546001600160a01b031661058c565b348015610a0157600080fd5b506104ab610a10366004614288565b611ef1565b348015610a2157600080fd5b5060408051808201909152600381526254414f60e81b6020820152610475565b348015610a4d57600080fd5b506104ab610a5c366004614521565b611ffd565b348015610a6d57600080fd5b5061055e600e5481565b348015610a8357600080fd5b5060295461055e565b348015610a9857600080fd5b506104ed610aa736600461425c565b6120b5565b348015610ab857600080fd5b5061055e600c5481565b348015610ace57600080fd5b5060035461058c906001600160a01b031681565b348015610aee57600080fd5b506104ab610afd366004614288565b612104565b348015610b0e57600080fd5b506104ed610b1d36600461425c565b612145565b348015610b2e57600080fd5b506104ed610b3d366004614288565b60286020526000908152604090205460ff1681565b348015610b5e57600080fd5b50602b546104ed90600160b01b900460ff1681565b348015610b7f57600080fd5b506104ab610b8e36600461457d565b612152565b348015610b9f57600080fd5b5061055e601b5481565b348015610bb557600080fd5b5061055e601e5481565b348015610bcb57600080fd5b506008546104ed9060ff1681565b348015610be557600080fd5b5061055e60235481565b348015610bfb57600080fd5b5061055e601a5481565b348015610c1157600080fd5b5061055e610c2036600461454f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c5757600080fd5b506104ab610c6636600461422e565b6121c9565b348015610c7757600080fd5b506104ed6123ab565b348015610c8c57600080fd5b506104ab610c9b366004614288565b6123e6565b348015610cac57600080fd5b5061055e601f5481565b348015610cc257600080fd5b5061055e60195481565b348015610cd857600080fd5b506104ab610ce7366004614288565b612461565b348015610cf857600080fd5b506104ab61254b565b348015610d0d57600080fd5b5061055e60255481565b348015610d2357600080fd5b506104ab610d3236600461422e565b6125c2565b6000546001600160a01b03163314610d6a5760405162461bcd60e51b8152600401610d619061459a565b60405180910390fd5b620186a0610d8568327cb2734119d3b7a9601e1b60016145e5565b610d8f9190614604565b811015610dfc5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d61565b6103e8610e1668327cb2734119d3b7a9601e1b60056145e5565b610e209190614604565b811115610e8c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d61565b602955565b6000546001600160a01b03163314610ebb5760405162461bcd60e51b8152600401610d619061459a565b610190811015610eca57600080fd5b610ed881633b9aca006145e5565b60275550565b6000610eeb33848461288d565b5060015b92915050565b6000546001600160a01b03163314610f1f5760405162461bcd60e51b8152600401610d619061459a565b670de0b6b3a76400006103e8610f4268327cb2734119d3b7a9601e1b60016145e5565b610f4c9190614604565b610f569190614604565b811015610fbd5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610d61565b610fcf81670de0b6b3a76400006145e5565b60235550565b6000546001600160a01b03163314610fff5760405162461bcd60e51b8152600401610d619061459a565b670de0b6b3a7640000606461102168327cb2734119d3b7a9601e1b60016145e5565b61102b9190614604565b6110359190614604565b8110156110905760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420736574204d61782057616c6c6574206c6f776572207468616e60448201526220312560e81b6064820152608401610d61565b6110a281670de0b6b3a76400006145e5565b60255550565b6000546001600160a01b031633146110d25760405162461bcd60e51b8152600401610d619061459a565b601c839055601d829055601e819055610c80816110ef8486614626565b6110f99190614626565b11156111475760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772033322500006044820152606401610d61565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000546001600160a01b031633146111b85760405162461bcd60e51b8152600401610d619061459a565b80518251146112235760405162461bcd60e51b815260206004820152603160248201527f61697264726f70546f57616c6c6574733a3a20417272617973206d75737420626044820152700ca40e8d0ca40e6c2daca40d8cadccee8d607b1b6064820152608401610d61565b61122b6129b1565b600360185560005b82518110156112ab5760008382815181106112505761125061463e565b60200260200101519050600083838151811061126e5761126e61463e565b6020026020010151670de0b6b3a764000061128991906145e5565b90506112963383836129df565b505080806112a390614654565b915050611233565b506112bd601554601455601754601655565b5050565b60006112ce848484612adc565b611320843361131b8560405180606001604052806028815260200161478f602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190613409565b61288d565b5060019392505050565b6000546001600160a01b031633146113545760405162461bcd60e51b8152600401610d619061459a565b6019839055601a829055601b8190556107d0816113718486614626565b61137b9190614626565b11156113c95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203230250000006044820152606401610d61565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001611181565b600060125482111561146e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d61565b6000611478613443565b90506114848382612809565b9392505050565b6000546001600160a01b031633146114b55760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b03811660009081526010602052604090205460ff1661151d5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d61565b60005b6011548110156112bd57816001600160a01b0316601182815481106115475761154761463e565b6000918252602090912001546001600160a01b0316141561162c57601180546115729060019061466f565b815481106115825761158261463e565b600091825260209091200154601180546001600160a01b0390921691839081106115ae576115ae61463e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055601090925220805460ff19169055601180548061160657611606614686565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061163681614654565b915050611520565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610eeb91859061131b9086613466565b6000546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b0381166000818152600f6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600068327cb2734119d3b7a9601e1b8311156117575760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d61565b81611776576000611767846134c5565b50939550610eef945050505050565b6000611781846134c5565b50929550610eef945050505050565b6000546001600160a01b031633146117ba5760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b03811660009081526010602052604090205460ff16156118235760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d61565b601154601490611834906001614626565b11156118be5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203230206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d61565b6001600160a01b03811660009081526004602052604090205415611918576001600160a01b0381166000908152600460205260409020546118fe90611407565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152601060205260408120805460ff191660019081179091556011805491820181559091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319169091179055565b6001600160a01b03811660009081526010602052604081205460ff16156119bb57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610eef90611407565b600060205462093a806119f09190614626565b905090565b6000546001600160a01b03163314611a1f5760405162461bcd60e51b8152600401610d619061459a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611a935760405162461bcd60e51b8152600401610d619061459a565b610258831015611b015760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610d61565b6103e88211158015611b11575060015b611b765760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610d61565b600b92909255600955600a805460ff1916911515919091179055565b600080546001600160a01b03163314611bbd5760405162461bcd60e51b8152600401610d619061459a565b50600880546026805460ff1916905561ffff19169055600190565b6000546001600160a01b03163314611c025760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c585760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b038316611cae5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d61565b6001600160a01b038316301415611d075760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d61565b602b546001600160a01b0384811691161415611d7e5760405162461bcd60e51b815260206004820152603060248201527f43616e2774207769746864726177204e6174697665204c5020746f6b656e732060448201526f1dda5d1a081d1a1a5cc81b595d1a1bd960821b6064820152608401610d61565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de9919061469c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6091906146b5565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611ed65760405162461bcd60e51b8152600401610d619061459a565b602b805461ffff60a81b191661010160a81b17905543601f55565b6000546001600160a01b03163314611f1b5760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b038116611f7f5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d61565b600380546001600160a01b039081166000908152600f60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016116ee565b6000546001600160a01b031633146120275760405162461bcd60e51b8152600401610d619061459a565b602b546001600160a01b03838116911614156120ab5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d61565b6112bd8282613514565b6000610eeb338461131b856040518060600160405280602581526020016147b7602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190613409565b6000546001600160a01b0316331461212e5760405162461bcd60e51b8152600401610d619061459a565b61213781611674565b612142816001611bd8565b50565b6000610eeb338484612adc565b6000546001600160a01b0316331461217c5760405162461bcd60e51b8152600401610d619061459a565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906116ee90831515815260200190565b6000546001600160a01b031633146121f35760405162461bcd60e51b8152600401610d619061459a565b6121fb6119dd565b42101561224a5760405162461bcd60e51b815260206004820152601e60248201527f4d6179206f6e6c792077697468647261772065766572792037206461797300006044820152606401610d61565b60148111156122a65760405162461bcd60e51b815260206004820152602260248201527f4d6179206f6e6c79207769746864726177203230252065766572792037206461604482015261797360f01b6064820152608401610d61565b42602055602b546040516370a0823160e01b815230600482015260009160649184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c919061469c565b61232691906145e5565b6123309190614604565b602b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a691906146b5565b505050565b600080546001600160a01b031633146123d65760405162461bcd60e51b8152600401610d619061459a565b506008805460ff19169055600190565b6000546001600160a01b031633146124105760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b0381166000818152600f6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016116ee565b6000546001600160a01b0316331461248b5760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b0381166124f05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125755760405162461bcd60e51b8152600401610d619061459a565b604051600090339047908381818185875af1925050503d80600081146125b7576040519150601f19603f3d011682016040523d82523d6000602084013e6125bc565b606091505b50505050565b6000546001600160a01b031633146125ec5760405162461bcd60e51b8152600401610d619061459a565b600d54600e546125fc9190614626565b421161264a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610d61565b6105dc8111156126af5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313525206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610d61565b42600e55602b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156126fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612722919061469c565b9050600061273c612710612736848661356f565b90612809565b905080156127765761274c6129b1565b602b54612765906001600160a01b031661dead83612adc565b612776601554601455601754601655565b602b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156127c057600080fd5b505af11580156127d4573d6000803e3d6000fd5b50506040518492507f01dfa9a7a5ffd5f2630a016e754405184a66ca529745e85abd52e47e76ec70d69150600090a250505050565b600061148483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135ee565b600061148483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613409565b6001600160a01b0383166128ef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d61565b6001600160a01b0382166129505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d61565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6014541580156129c15750601654155b156129c857565b601480546015556016805460175560009182905555565b6001600160a01b03831660009081526010602052604090205460ff168015612a2057506001600160a01b03821660009081526010602052604090205460ff16155b15612a30576123a683838361361c565b6001600160a01b03831660009081526010602052604090205460ff16158015612a7157506001600160a01b03821660009081526010602052604090205460ff165b15612a81576123a6838383613742565b6001600160a01b03831660009081526010602052604090205460ff168015612ac157506001600160a01b03821660009081526010602052604090205460ff165b15612ad1576123a68383836137eb565b6123a683838361385e565b6001600160a01b038316612b405760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d61565b6001600160a01b038216612ba25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d61565b60008111612c045760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d61565b602b54600160b01b900460ff16612ca0576001600160a01b0383166000908152600f602052604090205460ff1680612c5457506001600160a01b0382166000908152600f602052604090205460ff165b612ca05760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d61565b600854610100900460ff1615613122576000546001600160a01b03848116911614801590612cdc57506000546001600160a01b03838116911614155b8015612cf057506001600160a01b03821615155b8015612d0757506001600160a01b03821661dead14155b8015612d1d5750602b54600160a01b900460ff16155b8015612d4257506001600160a01b0382166000908152600f602052604090205460ff16155b8015612d6757506001600160a01b0383166000908152600f602052604090205460ff16155b156131225760265460ff168015612d9657506001600160a01b03831660009081526028602052604090205460ff165b15612ded576027543a1115612ded5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d61565b60085460ff1615612ed257602a546001600160a01b03838116911614801590612e245750602b546001600160a01b03838116911614155b15612ed257326000908152600760205260409020544311612ebf5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d61565b3260009081526007602052604090204390555b6001600160a01b03831660009081526028602052604090205460ff168015612f1357506001600160a01b03821660009081526024602052604090205460ff16155b15612fec57602354811115612f885760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d61565b602554612f948361197e565b612f9e9083614626565b1115612fe75760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d959590813585e0815d85b1b195d60421b6044820152606401610d61565b613122565b6001600160a01b03821660009081526028602052604090205460ff16801561302d57506001600160a01b03831660009081526024602052604090205460ff16155b156130a357602354811115612fe75760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d61565b6001600160a01b03821660009081526024602052604090205460ff16613122576025546130cf8361197e565b6130d99083614626565b11156131225760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d959590813585e0815d85b1b195d60421b6044820152606401610d61565b600061312d3061197e565b602954602b5491925082101590600160a01b900460ff1615801561315a5750602b54600160a81b900460ff165b801561317b5750602b54600090613179906001600160a01b031661197e565b115b80156131a057506001600160a01b0384166000908152600f602052604090205460ff16155b80156131c557506001600160a01b0385166000908152600f602052604090205460ff16155b80156131e957506001600160a01b03841660009081526028602052604090205460ff165b80156131f25750805b156131ff576131ff6138a2565b602b54600160a01b900460ff1615801561323157506001600160a01b03841660009081526028602052604090205460ff165b801561323f5750600a5460ff165b801561325a5750600b54600c546132569190614626565b4210155b801561327f57506001600160a01b0385166000908152600f602052604090205460ff16155b1561328c5761328c613a79565b6132946129b1565b60036018556001600160a01b0385166000908152600f602052604090205460ff161580156132db57506001600160a01b0384166000908152600f602052604090205460ff16155b156133e65743601f5460016132f09190614626565b1015801561333857506001600160a01b03841660009081526028602052604090205460ff168061333857506001600160a01b03851660009081526028602052604090205460ff165b156133535761025860145561245460165560026018556133e6565b6001600160a01b03851660009081526028602052604090205460ff161561339f57601954601455601b54601a5461338a9190614626565b60168190551561339a5760016018555b6133e6565b6001600160a01b03841660009081526028602052604090205460ff16156133e657601c54601455601e54601d546133d69190614626565b6016819055156133e65760026018555b6133f18585856129df565b613402601554601455601754601655565b5050505050565b6000818484111561342d5760405162461bcd60e51b8152600401610d6191906141d9565b50600061343a848661466f565b95945050505050565b6000806000613450613bd7565b909250905061345f8282612809565b9250505090565b6000806134738385614626565b9050838110156114845760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d61565b60008060008060008060008060006134dc8a613d7f565b92509250925060008060006134fa8d86866134f5613443565b613dc1565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b038216600090815260286020908152604080832080548515801560ff19928316811790935560249094529190932080549091169092179091556135615761356182611790565b806112bd576112bd8261148b565b60008261357e57506000610eef565b600061358a83856145e5565b9050826135978583614604565b146114845760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d61565b6000818361360f5760405162461bcd60e51b8152600401610d6191906141d9565b50600061343a8486614604565b60008060008060008061362e876134c5565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613660908861284b565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461368f908761284b565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546136be9086613466565b6001600160a01b0389166000908152600460205260409020556136e081613e11565b6136ea8483613f76565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161372f91815260200190565b60405180910390a3505050505050505050565b600080600080600080613754876134c5565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613786908761284b565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546137bc9084613466565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546136be9086613466565b6000806000806000806137fd876134c5565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061382f908861284b565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613786908761284b565b600080600080600080613870876134c5565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061368f908761284b565b602b805460ff60a01b1916600160a01b17905560006138c03061197e565b905060006022546021546138d49190614626565b90506000602954600a6138e791906145e5565b83106138fe576029546138fb90600a6145e5565b92505b821580613909575081155b1561391657505050613a6a565b60006002836021548661392991906145e5565b6139339190614604565b61393d9190614604565b9050600061394b858361284b565b90504761395782613f9a565b6000613963478361284b565b9050600061399160026021546139799190614604565b613983908961466f565b60225461273690859061356f565b9050600061399f828461466f565b60006021819055602255905085158015906139ba5750600081115b15613a0b576139c986826140f4565b60408051868152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613a58576040519150601f19603f3d011682016040523d82523d6000602084013e613a5d565b606091505b5050505050505050505050505b602b805460ff60a01b19169055565b42600c55602b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aec919061469c565b90506000613b0b6127106127366009548561356f90919063ffffffff16565b90508015613b4557613b1b6129b1565b602b54613b34906001600160a01b031661dead83612adc565b613b45601554601455601754601655565b602b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015613b8f57600080fd5b505af1158015613ba3573d6000803e3d6000fd5b50506040518492507f6f57447c7d0d492231a83fb5442fa4aab5203af719a9a9ebf5f93ff4dfaa16869150600090a2505050565b601254600090819068327cb2734119d3b7a9601e1b825b601154811015613d3c57826004600060118481548110613c1057613c1061463e565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c7b5750816005600060118481548110613c5457613c5461463e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c9a5750506012549368327cb2734119d3b7a9601e1b9350915050565b613ce06004600060118481548110613cb457613cb461463e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061284b565b9250613d286005600060118481548110613cfc57613cfc61463e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061284b565b915080613d3481614654565b915050613bee565b50601254613d569068327cb2734119d3b7a9601e1b612809565b821015613d765750506012549268327cb2734119d3b7a9601e1b92509050565b90939092509050565b600080600080613d8e8561419f565b90506000613d9b866141bc565b90506000613db382613dad898661284b565b9061284b565b979296509094509092505050565b6000808080613dd0888661356f565b90506000613dde888761356f565b90506000613dec888861356f565b90506000613dfe82613dad868661284b565b939b939a50919850919650505050505050565b60016018541415613e8257601654601a54613e2c90836145e5565b613e369190614604565b60216000828254613e479190614626565b9091555050601654601b54613e5c90836145e5565b613e669190614604565b60226000828254613e779190614626565b90915550613eee9050565b60026018541415613eee57601654601d54613e9d90836145e5565b613ea79190614604565b60216000828254613eb89190614626565b9091555050601654601e54613ecd90836145e5565b613ed79190614604565b60226000828254613ee89190614626565b90915550505b6000613ef8613443565b90506000613f06838361356f565b30600090815260046020526040902054909150613f239082613466565b3060009081526004602090815260408083209390935560109052205460ff16156123a65730600090815260056020526040902054613f619084613466565b30600090815260056020526040902055505050565b601254613f83908361284b565b601255601354613f939082613466565b6013555050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613fcf57613fcf61463e565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061404c91906146d2565b8160018151811061405f5761405f61463e565b6001600160a01b039283166020918202929092010152602a54614085913091168461288d565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906140be9085906000908690309042906004016146ef565b600060405180830381600087803b1580156140d857600080fd5b505af11580156140ec573d6000803e3d6000fd5b505050505050565b602a5461410c9030906001600160a01b03168461288d565b602a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561417a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134029190614760565b6000610eef6127106127366014548561356f90919063ffffffff16565b6000610eef6127106127366016548561356f90919063ffffffff16565b600060208083528351808285015260005b81811015614206578581018301518582016040015282016141ea565b81811115614218576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561424057600080fd5b5035919050565b6001600160a01b038116811461214257600080fd5b6000806040838503121561426f57600080fd5b823561427a81614247565b946020939093013593505050565b60006020828403121561429a57600080fd5b813561148481614247565b6000806000606084860312156142ba57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614310576143106142d1565b604052919050565b600067ffffffffffffffff821115614332576143326142d1565b5060051b60200190565b600082601f83011261434d57600080fd5b8135602061436261435d83614318565b6142e7565b82815260059290921b8401810191818101908684111561438157600080fd5b8286015b8481101561439c5780358352918301918301614385565b509695505050505050565b600080604083850312156143ba57600080fd5b823567ffffffffffffffff808211156143d257600080fd5b818501915085601f8301126143e657600080fd5b813560206143f661435d83614318565b82815260059290921b8401810191818101908984111561441557600080fd5b948201945b8386101561443c57853561442d81614247565b8252948201949082019061441a565b9650508601359250508082111561445257600080fd5b5061445f8582860161433c565b9150509250929050565b60008060006060848603121561447e57600080fd5b833561448981614247565b9250602084013561449981614247565b929592945050506040919091013590565b801515811461214257600080fd5b600080604083850312156144cb57600080fd5b8235915060208301356144dd816144aa565b809150509250929050565b6000806000606084860312156144fd57600080fd5b83359250602084013591506040840135614516816144aa565b809150509250925092565b6000806040838503121561453457600080fd5b823561453f81614247565b915060208301356144dd816144aa565b6000806040838503121561456257600080fd5b823561456d81614247565b915060208301356144dd81614247565b60006020828403121561458f57600080fd5b8135611484816144aa565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156145ff576145ff6145cf565b500290565b60008261462157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115614639576146396145cf565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614668576146686145cf565b5060010190565b600082821015614681576146816145cf565b500390565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156146ae57600080fd5b5051919050565b6000602082840312156146c757600080fd5b8151611484816144aa565b6000602082840312156146e457600080fd5b815161148481614247565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561473f5784516001600160a01b03168352938301939183019160010161471a565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561477557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ac9c7476df9f46fab09e7ec253c5f1b46fab08a1f50ada15a88c356f879e445664736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104355760003560e01c8063715018a611610229578063a9059cbb1161012e578063dd62ed3e116100b6578063efcc52de1161007a578063efcc52de14610cb6578063f2fde38b14610ccc578063f5648a4f14610cec578063f8b45b0514610d01578063fe72b27a14610d1757600080fd5b8063dd62ed3e14610c05578063e4456ecb14610c4b578063e884f26014610c6b578063ea2f0b3714610c80578063ee40166e14610ca057600080fd5b8063c5d24189116100fd578063c5d2418914610b93578063c860795214610ba9578063c876d0b914610bbf578063c8c8ebe414610bd9578063dc44b6a014610bef57600080fd5b8063a9059cbb14610b02578063b62496f514610b22578063bbc0c74214610b52578063c49b9a8014610b7357600080fd5b8063906e9dd0116101b1578063a073d37f11610180578063a073d37f14610a77578063a457c2d714610a8c578063a4c82a0014610aac578063a5ece94114610ac2578063a716b77314610ae257600080fd5b8063906e9dd0146109f557806395d89b4114610a155780639a7a23d614610a415780639ec22c0e14610a6157600080fd5b80638366e79a116101f85780638366e79a1461095357806388790a681461097357806388f82020146109895780638a8c523c146109c25780638da5cb5b146109d757600080fd5b8063715018a6146108e9578063730c1888146108fe578063751039fc1461091e5780637571336a1461093357600080fd5b80632c3e486c1161033a57806349a84232116102c25780635342acb4116102865780635342acb414610853578063557ed1ba1461088c578063602bc62b1461089f57806370a08231146108b4578063712c2985146108d457600080fd5b806349a84232146107bd57806349bd5a5e146107d35780634a62bb65146107f35780634a74bb021461081257806352390c021461083357600080fd5b80633685d419116103095780633685d4191461072757806339509351146107475780634047ea3e14610767578063437823ec1461077d5780634549b0391461079d57600080fd5b80632c3e486c146106bb5780632d838119146106d15780632e82f1a0146106f1578063313ce5671461070b57600080fd5b8063184c16c5116103bd578063200a692d1161038c578063200a692d1461062f5780632307b4411461064557806323b872dd1461066557806324171f321461068557806325519cf21461069b57600080fd5b8063184c16c5146105c3578063199ffc72146105d95780631c499ab0146105ef5780631d865c301461060f57600080fd5b8063106b5da111610404578063106b5da1146104fd57806310d5de531461051d57806313114a9d1461054d5780631694505e1461056c57806318160ddd146105a457600080fd5b806306fdde0314610441578063080437511461048b57806309231602146104ad578063095ea7b3146104cd57600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5060408051808201909152600f81526e546f676574686572204173204f6e6560881b60208201525b60405161048291906141d9565b60405180910390f35b34801561049757600080fd5b506104ab6104a636600461422e565b610d37565b005b3480156104b957600080fd5b506104ab6104c836600461422e565b610e91565b3480156104d957600080fd5b506104ed6104e836600461425c565b610ede565b6040519015158152602001610482565b34801561050957600080fd5b506104ab61051836600461422e565b610ef5565b34801561052957600080fd5b506104ed610538366004614288565b60246020526000908152604090205460ff1681565b34801561055957600080fd5b506013545b604051908152602001610482565b34801561057857600080fd5b50602a5461058c906001600160a01b031681565b6040516001600160a01b039091168152602001610482565b3480156105b057600080fd5b5068327cb2734119d3b7a9601e1b61055e565b3480156105cf57600080fd5b5061055e600d5481565b3480156105e557600080fd5b5061055e60095481565b3480156105fb57600080fd5b506104ab61060a36600461422e565b610fd5565b34801561061b57600080fd5b506104ab61062a3660046142a5565b6110a8565b34801561063b57600080fd5b5061055e601c5481565b34801561065157600080fd5b506104ab6106603660046143a7565b61118e565b34801561067157600080fd5b506104ed610680366004614469565b6112c1565b34801561069157600080fd5b5061055e60225481565b3480156106a757600080fd5b506104ab6106b63660046142a5565b61132a565b3480156106c757600080fd5b5061055e600b5481565b3480156106dd57600080fd5b5061055e6106ec36600461422e565b611407565b3480156106fd57600080fd5b50600a546104ed9060ff1681565b34801561071757600080fd5b5060405160128152602001610482565b34801561073357600080fd5b506104ab610742366004614288565b61148b565b34801561075357600080fd5b506104ed61076236600461425c565b61163e565b34801561077357600080fd5b5061055e60215481565b34801561078957600080fd5b506104ab610798366004614288565b611674565b3480156107a957600080fd5b5061055e6107b83660046144b8565b6116f9565b3480156107c957600080fd5b5061055e60205481565b3480156107df57600080fd5b50602b5461058c906001600160a01b031681565b3480156107ff57600080fd5b506008546104ed90610100900460ff1681565b34801561081e57600080fd5b50602b546104ed90600160a81b900460ff1681565b34801561083f57600080fd5b506104ab61084e366004614288565b611790565b34801561085f57600080fd5b506104ed61086e366004614288565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561089857600080fd5b504261055e565b3480156108ab57600080fd5b5060025461055e565b3480156108c057600080fd5b5061055e6108cf366004614288565b61197e565b3480156108e057600080fd5b5061055e6119dd565b3480156108f557600080fd5b506104ab6119f5565b34801561090a57600080fd5b506104ab6109193660046144e8565b611a69565b34801561092a57600080fd5b506104ed611b92565b34801561093f57600080fd5b506104ab61094e366004614521565b611bd8565b34801561095f57600080fd5b506104ed61096e36600461454f565b611c2d565b34801561097f57600080fd5b5061055e601d5481565b34801561099557600080fd5b506104ed6109a4366004614288565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156109ce57600080fd5b506104ab611eac565b3480156109e357600080fd5b506000546001600160a01b031661058c565b348015610a0157600080fd5b506104ab610a10366004614288565b611ef1565b348015610a2157600080fd5b5060408051808201909152600381526254414f60e81b6020820152610475565b348015610a4d57600080fd5b506104ab610a5c366004614521565b611ffd565b348015610a6d57600080fd5b5061055e600e5481565b348015610a8357600080fd5b5060295461055e565b348015610a9857600080fd5b506104ed610aa736600461425c565b6120b5565b348015610ab857600080fd5b5061055e600c5481565b348015610ace57600080fd5b5060035461058c906001600160a01b031681565b348015610aee57600080fd5b506104ab610afd366004614288565b612104565b348015610b0e57600080fd5b506104ed610b1d36600461425c565b612145565b348015610b2e57600080fd5b506104ed610b3d366004614288565b60286020526000908152604090205460ff1681565b348015610b5e57600080fd5b50602b546104ed90600160b01b900460ff1681565b348015610b7f57600080fd5b506104ab610b8e36600461457d565b612152565b348015610b9f57600080fd5b5061055e601b5481565b348015610bb557600080fd5b5061055e601e5481565b348015610bcb57600080fd5b506008546104ed9060ff1681565b348015610be557600080fd5b5061055e60235481565b348015610bfb57600080fd5b5061055e601a5481565b348015610c1157600080fd5b5061055e610c2036600461454f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c5757600080fd5b506104ab610c6636600461422e565b6121c9565b348015610c7757600080fd5b506104ed6123ab565b348015610c8c57600080fd5b506104ab610c9b366004614288565b6123e6565b348015610cac57600080fd5b5061055e601f5481565b348015610cc257600080fd5b5061055e60195481565b348015610cd857600080fd5b506104ab610ce7366004614288565b612461565b348015610cf857600080fd5b506104ab61254b565b348015610d0d57600080fd5b5061055e60255481565b348015610d2357600080fd5b506104ab610d3236600461422e565b6125c2565b6000546001600160a01b03163314610d6a5760405162461bcd60e51b8152600401610d619061459a565b60405180910390fd5b620186a0610d8568327cb2734119d3b7a9601e1b60016145e5565b610d8f9190614604565b811015610dfc5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d61565b6103e8610e1668327cb2734119d3b7a9601e1b60056145e5565b610e209190614604565b811115610e8c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d61565b602955565b6000546001600160a01b03163314610ebb5760405162461bcd60e51b8152600401610d619061459a565b610190811015610eca57600080fd5b610ed881633b9aca006145e5565b60275550565b6000610eeb33848461288d565b5060015b92915050565b6000546001600160a01b03163314610f1f5760405162461bcd60e51b8152600401610d619061459a565b670de0b6b3a76400006103e8610f4268327cb2734119d3b7a9601e1b60016145e5565b610f4c9190614604565b610f569190614604565b811015610fbd5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610d61565b610fcf81670de0b6b3a76400006145e5565b60235550565b6000546001600160a01b03163314610fff5760405162461bcd60e51b8152600401610d619061459a565b670de0b6b3a7640000606461102168327cb2734119d3b7a9601e1b60016145e5565b61102b9190614604565b6110359190614604565b8110156110905760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420736574204d61782057616c6c6574206c6f776572207468616e60448201526220312560e81b6064820152608401610d61565b6110a281670de0b6b3a76400006145e5565b60255550565b6000546001600160a01b031633146110d25760405162461bcd60e51b8152600401610d619061459a565b601c839055601d829055601e819055610c80816110ef8486614626565b6110f99190614626565b11156111475760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772033322500006044820152606401610d61565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000546001600160a01b031633146111b85760405162461bcd60e51b8152600401610d619061459a565b80518251146112235760405162461bcd60e51b815260206004820152603160248201527f61697264726f70546f57616c6c6574733a3a20417272617973206d75737420626044820152700ca40e8d0ca40e6c2daca40d8cadccee8d607b1b6064820152608401610d61565b61122b6129b1565b600360185560005b82518110156112ab5760008382815181106112505761125061463e565b60200260200101519050600083838151811061126e5761126e61463e565b6020026020010151670de0b6b3a764000061128991906145e5565b90506112963383836129df565b505080806112a390614654565b915050611233565b506112bd601554601455601754601655565b5050565b60006112ce848484612adc565b611320843361131b8560405180606001604052806028815260200161478f602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190613409565b61288d565b5060019392505050565b6000546001600160a01b031633146113545760405162461bcd60e51b8152600401610d619061459a565b6019839055601a829055601b8190556107d0816113718486614626565b61137b9190614626565b11156113c95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203230250000006044820152606401610d61565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001611181565b600060125482111561146e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d61565b6000611478613443565b90506114848382612809565b9392505050565b6000546001600160a01b031633146114b55760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b03811660009081526010602052604090205460ff1661151d5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d61565b60005b6011548110156112bd57816001600160a01b0316601182815481106115475761154761463e565b6000918252602090912001546001600160a01b0316141561162c57601180546115729060019061466f565b815481106115825761158261463e565b600091825260209091200154601180546001600160a01b0390921691839081106115ae576115ae61463e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055601090925220805460ff19169055601180548061160657611606614686565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061163681614654565b915050611520565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610eeb91859061131b9086613466565b6000546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b0381166000818152600f6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600068327cb2734119d3b7a9601e1b8311156117575760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d61565b81611776576000611767846134c5565b50939550610eef945050505050565b6000611781846134c5565b50929550610eef945050505050565b6000546001600160a01b031633146117ba5760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b03811660009081526010602052604090205460ff16156118235760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d61565b601154601490611834906001614626565b11156118be5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203230206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d61565b6001600160a01b03811660009081526004602052604090205415611918576001600160a01b0381166000908152600460205260409020546118fe90611407565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152601060205260408120805460ff191660019081179091556011805491820181559091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319169091179055565b6001600160a01b03811660009081526010602052604081205460ff16156119bb57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610eef90611407565b600060205462093a806119f09190614626565b905090565b6000546001600160a01b03163314611a1f5760405162461bcd60e51b8152600401610d619061459a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611a935760405162461bcd60e51b8152600401610d619061459a565b610258831015611b015760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610d61565b6103e88211158015611b11575060015b611b765760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610d61565b600b92909255600955600a805460ff1916911515919091179055565b600080546001600160a01b03163314611bbd5760405162461bcd60e51b8152600401610d619061459a565b50600880546026805460ff1916905561ffff19169055600190565b6000546001600160a01b03163314611c025760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c585760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b038316611cae5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d61565b6001600160a01b038316301415611d075760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d61565b602b546001600160a01b0384811691161415611d7e5760405162461bcd60e51b815260206004820152603060248201527f43616e2774207769746864726177204e6174697665204c5020746f6b656e732060448201526f1dda5d1a081d1a1a5cc81b595d1a1bd960821b6064820152608401610d61565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de9919061469c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6091906146b5565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611ed65760405162461bcd60e51b8152600401610d619061459a565b602b805461ffff60a81b191661010160a81b17905543601f55565b6000546001600160a01b03163314611f1b5760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b038116611f7f5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d61565b600380546001600160a01b039081166000908152600f60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016116ee565b6000546001600160a01b031633146120275760405162461bcd60e51b8152600401610d619061459a565b602b546001600160a01b03838116911614156120ab5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d61565b6112bd8282613514565b6000610eeb338461131b856040518060600160405280602581526020016147b7602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190613409565b6000546001600160a01b0316331461212e5760405162461bcd60e51b8152600401610d619061459a565b61213781611674565b612142816001611bd8565b50565b6000610eeb338484612adc565b6000546001600160a01b0316331461217c5760405162461bcd60e51b8152600401610d619061459a565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906116ee90831515815260200190565b6000546001600160a01b031633146121f35760405162461bcd60e51b8152600401610d619061459a565b6121fb6119dd565b42101561224a5760405162461bcd60e51b815260206004820152601e60248201527f4d6179206f6e6c792077697468647261772065766572792037206461797300006044820152606401610d61565b60148111156122a65760405162461bcd60e51b815260206004820152602260248201527f4d6179206f6e6c79207769746864726177203230252065766572792037206461604482015261797360f01b6064820152608401610d61565b42602055602b546040516370a0823160e01b815230600482015260009160649184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c919061469c565b61232691906145e5565b6123309190614604565b602b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a691906146b5565b505050565b600080546001600160a01b031633146123d65760405162461bcd60e51b8152600401610d619061459a565b506008805460ff19169055600190565b6000546001600160a01b031633146124105760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b0381166000818152600f6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016116ee565b6000546001600160a01b0316331461248b5760405162461bcd60e51b8152600401610d619061459a565b6001600160a01b0381166124f05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125755760405162461bcd60e51b8152600401610d619061459a565b604051600090339047908381818185875af1925050503d80600081146125b7576040519150601f19603f3d011682016040523d82523d6000602084013e6125bc565b606091505b50505050565b6000546001600160a01b031633146125ec5760405162461bcd60e51b8152600401610d619061459a565b600d54600e546125fc9190614626565b421161264a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610d61565b6105dc8111156126af5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313525206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610d61565b42600e55602b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156126fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612722919061469c565b9050600061273c612710612736848661356f565b90612809565b905080156127765761274c6129b1565b602b54612765906001600160a01b031661dead83612adc565b612776601554601455601754601655565b602b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156127c057600080fd5b505af11580156127d4573d6000803e3d6000fd5b50506040518492507f01dfa9a7a5ffd5f2630a016e754405184a66ca529745e85abd52e47e76ec70d69150600090a250505050565b600061148483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135ee565b600061148483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613409565b6001600160a01b0383166128ef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d61565b6001600160a01b0382166129505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d61565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6014541580156129c15750601654155b156129c857565b601480546015556016805460175560009182905555565b6001600160a01b03831660009081526010602052604090205460ff168015612a2057506001600160a01b03821660009081526010602052604090205460ff16155b15612a30576123a683838361361c565b6001600160a01b03831660009081526010602052604090205460ff16158015612a7157506001600160a01b03821660009081526010602052604090205460ff165b15612a81576123a6838383613742565b6001600160a01b03831660009081526010602052604090205460ff168015612ac157506001600160a01b03821660009081526010602052604090205460ff165b15612ad1576123a68383836137eb565b6123a683838361385e565b6001600160a01b038316612b405760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d61565b6001600160a01b038216612ba25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d61565b60008111612c045760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d61565b602b54600160b01b900460ff16612ca0576001600160a01b0383166000908152600f602052604090205460ff1680612c5457506001600160a01b0382166000908152600f602052604090205460ff165b612ca05760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d61565b600854610100900460ff1615613122576000546001600160a01b03848116911614801590612cdc57506000546001600160a01b03838116911614155b8015612cf057506001600160a01b03821615155b8015612d0757506001600160a01b03821661dead14155b8015612d1d5750602b54600160a01b900460ff16155b8015612d4257506001600160a01b0382166000908152600f602052604090205460ff16155b8015612d6757506001600160a01b0383166000908152600f602052604090205460ff16155b156131225760265460ff168015612d9657506001600160a01b03831660009081526028602052604090205460ff165b15612ded576027543a1115612ded5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d61565b60085460ff1615612ed257602a546001600160a01b03838116911614801590612e245750602b546001600160a01b03838116911614155b15612ed257326000908152600760205260409020544311612ebf5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d61565b3260009081526007602052604090204390555b6001600160a01b03831660009081526028602052604090205460ff168015612f1357506001600160a01b03821660009081526024602052604090205460ff16155b15612fec57602354811115612f885760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d61565b602554612f948361197e565b612f9e9083614626565b1115612fe75760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d959590813585e0815d85b1b195d60421b6044820152606401610d61565b613122565b6001600160a01b03821660009081526028602052604090205460ff16801561302d57506001600160a01b03831660009081526024602052604090205460ff16155b156130a357602354811115612fe75760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d61565b6001600160a01b03821660009081526024602052604090205460ff16613122576025546130cf8361197e565b6130d99083614626565b11156131225760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d959590813585e0815d85b1b195d60421b6044820152606401610d61565b600061312d3061197e565b602954602b5491925082101590600160a01b900460ff1615801561315a5750602b54600160a81b900460ff165b801561317b5750602b54600090613179906001600160a01b031661197e565b115b80156131a057506001600160a01b0384166000908152600f602052604090205460ff16155b80156131c557506001600160a01b0385166000908152600f602052604090205460ff16155b80156131e957506001600160a01b03841660009081526028602052604090205460ff165b80156131f25750805b156131ff576131ff6138a2565b602b54600160a01b900460ff1615801561323157506001600160a01b03841660009081526028602052604090205460ff165b801561323f5750600a5460ff165b801561325a5750600b54600c546132569190614626565b4210155b801561327f57506001600160a01b0385166000908152600f602052604090205460ff16155b1561328c5761328c613a79565b6132946129b1565b60036018556001600160a01b0385166000908152600f602052604090205460ff161580156132db57506001600160a01b0384166000908152600f602052604090205460ff16155b156133e65743601f5460016132f09190614626565b1015801561333857506001600160a01b03841660009081526028602052604090205460ff168061333857506001600160a01b03851660009081526028602052604090205460ff165b156133535761025860145561245460165560026018556133e6565b6001600160a01b03851660009081526028602052604090205460ff161561339f57601954601455601b54601a5461338a9190614626565b60168190551561339a5760016018555b6133e6565b6001600160a01b03841660009081526028602052604090205460ff16156133e657601c54601455601e54601d546133d69190614626565b6016819055156133e65760026018555b6133f18585856129df565b613402601554601455601754601655565b5050505050565b6000818484111561342d5760405162461bcd60e51b8152600401610d6191906141d9565b50600061343a848661466f565b95945050505050565b6000806000613450613bd7565b909250905061345f8282612809565b9250505090565b6000806134738385614626565b9050838110156114845760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d61565b60008060008060008060008060006134dc8a613d7f565b92509250925060008060006134fa8d86866134f5613443565b613dc1565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b038216600090815260286020908152604080832080548515801560ff19928316811790935560249094529190932080549091169092179091556135615761356182611790565b806112bd576112bd8261148b565b60008261357e57506000610eef565b600061358a83856145e5565b9050826135978583614604565b146114845760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d61565b6000818361360f5760405162461bcd60e51b8152600401610d6191906141d9565b50600061343a8486614604565b60008060008060008061362e876134c5565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613660908861284b565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461368f908761284b565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546136be9086613466565b6001600160a01b0389166000908152600460205260409020556136e081613e11565b6136ea8483613f76565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161372f91815260200190565b60405180910390a3505050505050505050565b600080600080600080613754876134c5565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613786908761284b565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546137bc9084613466565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546136be9086613466565b6000806000806000806137fd876134c5565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061382f908861284b565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613786908761284b565b600080600080600080613870876134c5565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061368f908761284b565b602b805460ff60a01b1916600160a01b17905560006138c03061197e565b905060006022546021546138d49190614626565b90506000602954600a6138e791906145e5565b83106138fe576029546138fb90600a6145e5565b92505b821580613909575081155b1561391657505050613a6a565b60006002836021548661392991906145e5565b6139339190614604565b61393d9190614604565b9050600061394b858361284b565b90504761395782613f9a565b6000613963478361284b565b9050600061399160026021546139799190614604565b613983908961466f565b60225461273690859061356f565b9050600061399f828461466f565b60006021819055602255905085158015906139ba5750600081115b15613a0b576139c986826140f4565b60408051868152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613a58576040519150601f19603f3d011682016040523d82523d6000602084013e613a5d565b606091505b5050505050505050505050505b602b805460ff60a01b19169055565b42600c55602b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aec919061469c565b90506000613b0b6127106127366009548561356f90919063ffffffff16565b90508015613b4557613b1b6129b1565b602b54613b34906001600160a01b031661dead83612adc565b613b45601554601455601754601655565b602b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015613b8f57600080fd5b505af1158015613ba3573d6000803e3d6000fd5b50506040518492507f6f57447c7d0d492231a83fb5442fa4aab5203af719a9a9ebf5f93ff4dfaa16869150600090a2505050565b601254600090819068327cb2734119d3b7a9601e1b825b601154811015613d3c57826004600060118481548110613c1057613c1061463e565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c7b5750816005600060118481548110613c5457613c5461463e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c9a5750506012549368327cb2734119d3b7a9601e1b9350915050565b613ce06004600060118481548110613cb457613cb461463e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061284b565b9250613d286005600060118481548110613cfc57613cfc61463e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061284b565b915080613d3481614654565b915050613bee565b50601254613d569068327cb2734119d3b7a9601e1b612809565b821015613d765750506012549268327cb2734119d3b7a9601e1b92509050565b90939092509050565b600080600080613d8e8561419f565b90506000613d9b866141bc565b90506000613db382613dad898661284b565b9061284b565b979296509094509092505050565b6000808080613dd0888661356f565b90506000613dde888761356f565b90506000613dec888861356f565b90506000613dfe82613dad868661284b565b939b939a50919850919650505050505050565b60016018541415613e8257601654601a54613e2c90836145e5565b613e369190614604565b60216000828254613e479190614626565b9091555050601654601b54613e5c90836145e5565b613e669190614604565b60226000828254613e779190614626565b90915550613eee9050565b60026018541415613eee57601654601d54613e9d90836145e5565b613ea79190614604565b60216000828254613eb89190614626565b9091555050601654601e54613ecd90836145e5565b613ed79190614604565b60226000828254613ee89190614626565b90915550505b6000613ef8613443565b90506000613f06838361356f565b30600090815260046020526040902054909150613f239082613466565b3060009081526004602090815260408083209390935560109052205460ff16156123a65730600090815260056020526040902054613f619084613466565b30600090815260056020526040902055505050565b601254613f83908361284b565b601255601354613f939082613466565b6013555050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613fcf57613fcf61463e565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061404c91906146d2565b8160018151811061405f5761405f61463e565b6001600160a01b039283166020918202929092010152602a54614085913091168461288d565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906140be9085906000908690309042906004016146ef565b600060405180830381600087803b1580156140d857600080fd5b505af11580156140ec573d6000803e3d6000fd5b505050505050565b602a5461410c9030906001600160a01b03168461288d565b602a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561417a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134029190614760565b6000610eef6127106127366014548561356f90919063ffffffff16565b6000610eef6127106127366016548561356f90919063ffffffff16565b600060208083528351808285015260005b81811015614206578581018301518582016040015282016141ea565b81811115614218576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561424057600080fd5b5035919050565b6001600160a01b038116811461214257600080fd5b6000806040838503121561426f57600080fd5b823561427a81614247565b946020939093013593505050565b60006020828403121561429a57600080fd5b813561148481614247565b6000806000606084860312156142ba57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614310576143106142d1565b604052919050565b600067ffffffffffffffff821115614332576143326142d1565b5060051b60200190565b600082601f83011261434d57600080fd5b8135602061436261435d83614318565b6142e7565b82815260059290921b8401810191818101908684111561438157600080fd5b8286015b8481101561439c5780358352918301918301614385565b509695505050505050565b600080604083850312156143ba57600080fd5b823567ffffffffffffffff808211156143d257600080fd5b818501915085601f8301126143e657600080fd5b813560206143f661435d83614318565b82815260059290921b8401810191818101908984111561441557600080fd5b948201945b8386101561443c57853561442d81614247565b8252948201949082019061441a565b9650508601359250508082111561445257600080fd5b5061445f8582860161433c565b9150509250929050565b60008060006060848603121561447e57600080fd5b833561448981614247565b9250602084013561449981614247565b929592945050506040919091013590565b801515811461214257600080fd5b600080604083850312156144cb57600080fd5b8235915060208301356144dd816144aa565b809150509250929050565b6000806000606084860312156144fd57600080fd5b83359250602084013591506040840135614516816144aa565b809150509250925092565b6000806040838503121561453457600080fd5b823561453f81614247565b915060208301356144dd816144aa565b6000806040838503121561456257600080fd5b823561456d81614247565b915060208301356144dd81614247565b60006020828403121561458f57600080fd5b8135611484816144aa565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156145ff576145ff6145cf565b500290565b60008261462157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115614639576146396145cf565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614668576146686145cf565b5060010190565b600082821015614681576146816145cf565b500390565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156146ae57600080fd5b5051919050565b6000602082840312156146c757600080fd5b8151611484816144aa565b6000602082840312156146e457600080fd5b815161148481614247565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561473f5784516001600160a01b03168352938301939183019160010161471a565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561477557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ac9c7476df9f46fab09e7ec253c5f1b46fab08a1f50ada15a88c356f879e445664736f6c634300080b0033

Deployed Bytecode Sourcemap

16509:34527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22412:85;;;;;;;;;;-1:-1:-1;22484:5:0;;;;;;;;;;;;-1:-1:-1;;;22484:5:0;;;;22412:85;;;;;;;:::i;:::-;;;;;;;;27029:343;;;;;;;;;;-1:-1:-1;27029:343:0;;;;;:::i;:::-;;:::i;:::-;;28365:135;;;;;;;;;;-1:-1:-1;28365:135:0;;;;;:::i;:::-;;:::i;23409:193::-;;;;;;;;;;-1:-1:-1;23409:193:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;23409:193:0;1257:187:1;27380:225:0;;;;;;;;;;-1:-1:-1;27380:225:0;;;;;:::i;:::-;;:::i;18951:64::-;;;;;;;;;;-1:-1:-1;18951:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24948:89;;;;;;;;;;-1:-1:-1;25019:10:0;;24948:89;;;1847:25:1;;;1835:2;1820:18;24948:89:0;1701:177:1;19460:41:0;;;;;;;;;;-1:-1:-1;19460:41:0;;;;-1:-1:-1;;;;;19460:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;19460:41:0;1883:230:1;22695:97:0;;;;;;;;;;-1:-1:-1;;;;22695:97:0;;17323:47;;;;;;;;;;;;;;;;17134:36;;;;;;;;;;;;;;;;27613:201;;;;;;;;;;-1:-1:-1;27613:201:0;;;;;:::i;:::-;;:::i;46099:458::-;;;;;;;;;;-1:-1:-1;46099:458:0;;;;;:::i;:::-;;:::i;18546:32::-;;;;;;;;;;;;;;;;50483:550;;;;;;;;;;-1:-1:-1;50483:550:0;;;;;:::i;:::-;;:::i;23610:448::-;;;;;;;;;;-1:-1:-1;23610:448:0;;;;;:::i;:::-;;:::i;18859:37::-;;;;;;;;;;;;;;;;45651:440;;;;;;;;;;-1:-1:-1;45651:440:0;;;;;:::i;:::-;;:::i;17229:45::-;;;;;;;;;;;;;;;;28997:322;;;;;;;;;;-1:-1:-1;28997:322:0;;;;;:::i;:::-;;:::i;17190:32::-;;;;;;;;;;-1:-1:-1;17190:32:0;;;;;;;;22602:85;;;;;;;;;;-1:-1:-1;22602:85:0;;17906:2;5529:36:1;;5517:2;5502:18;22602:85:0;5387:184:1;29794:471:0;;;;;;;;;;-1:-1:-1;29794:471:0;;;;;:::i;:::-;;:::i;24066:302::-;;;;;;;;;;-1:-1:-1;24066:302:0;;;;;:::i;:::-;;:::i;18815:37::-;;;;;;;;;;;;;;;;45336:150;;;;;;;;;;-1:-1:-1;45336:150:0;;;;;:::i;:::-;;:::i;28508:481::-;;;;;;;;;;-1:-1:-1;28508:481:0;;;;;:::i;:::-;;:::i;18758:44::-;;;;;;;;;;;;;;;;19508:28;;;;;;;;;;-1:-1:-1;19508:28:0;;;;-1:-1:-1;;;;;19508:28:0;;;17092:33;;;;;;;;;;-1:-1:-1;17092:33:0;;;;;;;;;;;19573:41;;;;;;;;;;-1:-1:-1;19573:41:0;;;;-1:-1:-1;;;19573:41:0;;;;;;29327:459;;;;;;;;;;-1:-1:-1;29327:459:0;;;;;:::i;:::-;;:::i;45202:126::-;;;;;;;;;;-1:-1:-1;45202:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;45293:27:0;45269:4;45293:27;;;:18;:27;;;;;;;;;45202:126;7211:90;;;;;;;;;;-1:-1:-1;7278:15:0;7211:90;;7113;;;;;;;;;;-1:-1:-1;7186:9:0;;7113:90;;22800:198;;;;;;;;;;-1:-1:-1;22800:198:0;;;;;:::i;:::-;;:::i;26312:128::-;;;;;;;;;;;;;:::i;6668:148::-;;;;;;;;;;;;;:::i;48069:447::-;;;;;;;;;;-1:-1:-1;48069:447:0;;;;;:::i;:::-;;:::i;25109:192::-;;;;;;;;;;;;;:::i;26452:144::-;;;;;;;;;;-1:-1:-1;26452:144:0;;;;;:::i;:::-;;:::i;47253:592::-;;;;;;;;;;-1:-1:-1;47253:592:0;;;;;:::i;:::-;;:::i;18585:38::-;;;;;;;;;;;;;;;;24786:154;;;;;;;;;;-1:-1:-1;24786:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;24912:20:0;24883:4;24912:20;;;:11;:20;;;;;;;;;24786:154;26654:166;;;;;;;;;;;;;:::i;6454:79::-;;;;;;;;;;-1:-1:-1;6492:7:0;6519:6;-1:-1:-1;;;;;6519:6:0;6454:79;;46569:398;;;;;;;;;;-1:-1:-1;46569:398:0;;;;;:::i;:::-;;:::i;22505:89::-;;;;;;;;;;-1:-1:-1;22579:7:0;;;;;;;;;;;;-1:-1:-1;;;22579:7:0;;;;22505:89;;27826:244;;;;;;;;;;-1:-1:-1;27826:244:0;;;;;:::i;:::-;;:::i;17377:35::-;;;;;;;;;;;;;;;;26836:122;;;;;;;;;;-1:-1:-1;26927:23:0;;26836:122;;24376:402;;;;;;;;;;-1:-1:-1;24376:402:0;;;;;:::i;:::-;;:::i;17281:29::-;;;;;;;;;;;;;;;;16634:39;;;;;;;;;;-1:-1:-1;16634:39:0;;;;-1:-1:-1;;;;;16634:39:0;;;25350:193;;;;;;;;;;-1:-1:-1;25350:193:0;;;;;:::i;:::-;;:::i;23006:201::-;;;;;;;;;;-1:-1:-1;23006:201:0;;;;;:::i;:::-;;:::i;19345:58::-;;;;;;;;;;-1:-1:-1;19345:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19621:33;;;;;;;;;;-1:-1:-1;19621:33:0;;;;-1:-1:-1;;;19621:33:0;;;;;;46979:171;;;;;;;;;;-1:-1:-1;46979:171:0;;;;;:::i;:::-;;:::i;18500:37::-;;;;;;;;;;;;;;;;18630:38;;;;;;;;;;;;;;;;17046:39;;;;;;;;;;-1:-1:-1;17046:39:0;;;;;;;;18909:35;;;;;;;;;;;;;;;;18456:37;;;;;;;;;;;;;;;;23215:186;;;;;;;;;;-1:-1:-1;23215:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;23366:18:0;;;23334:7;23366:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23215:186;25728:576;;;;;;;;;;-1:-1:-1;25728:576:0;;;;;:::i;:::-;;:::i;25586:134::-;;;;;;;;;;;;;:::i;45494:149::-;;;;;;;;;;-1:-1:-1;45494:149:0;;;;;:::i;:::-;;:::i;18681:37::-;;;;;;;;;;;;;;;;18418:31;;;;;;;;;;;;;;;;6824:281;;;;;;;;;;-1:-1:-1;6824:281:0;;;;;:::i;:::-;;:::i;47901:160::-;;;;;;;;;;;;;:::i;19022:24::-;;;;;;;;;;;;;;;;49369:1047;;;;;;;;;;-1:-1:-1;49369:1047:0;;;;;:::i;:::-;;:::i;27029:343::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;;;;;;;;;27150:6:::1;27136:11;-1:-1:-1::0;;;27146:1:0::1;27136:11;:::i;:::-;:20;;;;:::i;:::-;27123:9;:33;;27115:99;;;::::0;-1:-1:-1;;;27115:99:0;;8943:2:1;27115:99:0::1;::::0;::::1;8925:21:1::0;8982:2;8962:18;;;8955:30;9021:34;9001:18;;;8994:62;-1:-1:-1;;;9072:18:1;;;9065:51;9133:19;;27115:99:0::1;8741:417:1::0;27115:99:0::1;27259:4;27245:11;-1:-1:-1::0;;;27255:1:0::1;27245:11;:::i;:::-;:18;;;;:::i;:::-;27232:9;:31;;27224:96;;;::::0;-1:-1:-1;;;27224:96:0;;9365:2:1;27224:96:0::1;::::0;::::1;9347:21:1::0;9404:2;9384:18;;;9377:30;9443:34;9423:18;;;9416:62;-1:-1:-1;;;9494:18:1;;;9487:50;9554:19;;27224:96:0::1;9163:416:1::0;27224:96:0::1;27330:23;:35:::0;27029:343::o;28365:135::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;28449:3:::1;28442;:10;;28434:19;;;::::0;::::1;;28480:12;:3:::0;28486:6:::1;28480:12;:::i;:::-;28464:13;:28:::0;-1:-1:-1;28365:135:0:o;23409:193::-;23511:4;23533:39;193:10;23556:7;23565:6;23533:8;:39::i;:::-;-1:-1:-1;23590:4:0;23409:193;;;;;:::o;27380:225::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;27490:4:::1;27484;27470:11;-1:-1:-1::0;;;27480:1:0::1;27470:11;:::i;:::-;:18;;;;:::i;:::-;27469:25;;;;:::i;:::-;27459:6;:35;;27451:95;;;::::0;-1:-1:-1;;;27451:95:0;;9786:2:1;27451:95:0::1;::::0;::::1;9768:21:1::0;9825:2;9805:18;;;9798:30;9864:34;9844:18;;;9837:62;-1:-1:-1;;;9915:18:1;;;9908:45;9970:19;;27451:95:0::1;9584:411:1::0;27451:95:0::1;27580:17;:6:::0;27590::::1;27580:17;:::i;:::-;27557:20;:40:::0;-1:-1:-1;27380:225:0:o;27613:201::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;27722:4:::1;27717:3;27703:11;-1:-1:-1::0;;;27713:1:0::1;27703:11;:::i;:::-;:17;;;;:::i;:::-;27702:24;;;;:::i;:::-;27692:6;:34;;27684:82;;;::::0;-1:-1:-1;;;27684:82:0;;10202:2:1;27684:82:0::1;::::0;::::1;10184:21:1::0;10241:2;10221:18;;;10214:30;10280:34;10260:18;;;10253:62;-1:-1:-1;;;10331:18:1;;;10324:33;10374:19;;27684:82:0::1;10000:399:1::0;27684:82:0::1;27789:17;:6:::0;27799::::1;27789:17;:::i;:::-;27777:9;:29:::0;-1:-1:-1;27613:201:0:o;46099:458::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;46244:11:::1;:24:::0;;;46279:17:::1;:36:::0;;;46326:17:::1;:36:::0;;;46436:4:::1;46346:16:::0;46381:31:::1;46299:16:::0;46258:10;46381:31:::1;:::i;:::-;:51;;;;:::i;:::-;:59;;46373:102;;;::::0;-1:-1:-1;;;46373:102:0;;10739:2:1;46373:102:0::1;::::0;::::1;10721:21:1::0;10778:2;10758:18;;;10751:30;10817:32;10797:18;;;10790:60;10867:18;;46373:102:0::1;10537:354:1::0;46373:102:0::1;46491:58;::::0;;11098:25:1;;;11154:2;11139:18;;11132:34;;;11182:18;;;11175:34;;;46491:58:0::1;::::0;11086:2:1;11071:18;46491:58:0::1;;;;;;;;46099:458:::0;;;:::o;50483:550::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;50632:6:::1;:13;50607:14;:21;:38;50599:100;;;::::0;-1:-1:-1;;;50599:100:0;;11422:2:1;50599:100:0::1;::::0;::::1;11404:21:1::0;11461:2;11441:18;;;11434:30;11500:34;11480:18;;;11473:62;-1:-1:-1;;;11551:18:1;;;11544:47;11608:19;;50599:100:0::1;11220:413:1::0;50599:100:0::1;50710:14;:12;:14::i;:::-;18370:1;50735:15;:26:::0;50776:9:::1;50772:228;50795:14;:21;50791:1;:25;50772:228;;;50837:14;50854;50869:1;50854:17;;;;;;;;:::i;:::-;;;;;;;50837:34;;50886:21;50910:6;50917:1;50910:9;;;;;;;;:::i;:::-;;;;;;;50920:4;50910:14;;;;:::i;:::-;50886:38;;50939:49;50954:10;50966:6;50974:13;50939:14;:49::i;:::-;50822:178;;50818:3;;;;;:::i;:::-;;;;50772:228;;;;51010:15;45123::::0;;45113:7;:25;45165:21;;45149:13;:37;45069:125;51010:15:::1;50483:550:::0;;:::o;23610:448::-;23744:4;23761:36;23771:6;23779:9;23790:6;23761:9;:36::i;:::-;23808:220;23831:6;193:10;23879:138;23935:6;23879:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23879:19:0;;;;;;:11;:19;;;;;;;;193:10;23879:33;;;;;;;;;;:37;:138::i;:::-;23808:8;:220::i;:::-;-1:-1:-1;24046:4:0;23610:448;;;;;:::o;45651:440::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;45792:10:::1;:22:::0;;;45825:16:::1;:34:::0;;;45870:16:::1;:34:::0;;;45975:4:::1;45889:15:::0;45923:29:::1;45844:15:::0;45805:9;45923:29:::1;:::i;:::-;:48;;;;:::i;:::-;:56;;45915:98;;;::::0;-1:-1:-1;;;45915:98:0;;12112:2:1;45915:98:0::1;::::0;::::1;12094:21:1::0;12151:2;12131:18;;;12124:30;12190:31;12170:18;;;12163:59;12239:18;;45915:98:0::1;11910:353:1::0;45915:98:0::1;46029:54;::::0;;11098:25:1;;;11154:2;11139:18;;11132:34;;;11182:18;;;11175:34;;;46029:54:0::1;::::0;11086:2:1;11071:18;46029:54:0::1;10896:319:1::0;28997:322:0;29091:7;29149;;29138;:18;;29116:110;;;;-1:-1:-1;;;29116:110:0;;12470:2:1;29116:110:0;;;12452:21:1;12509:2;12489:18;;;12482:30;12548:34;12528:18;;;12521:62;-1:-1:-1;;;12599:18:1;;;12592:40;12649:19;;29116:110:0;12268:406:1;29116:110:0;29237:19;29259:10;:8;:10::i;:::-;29237:32;-1:-1:-1;29287:24:0;:7;29237:32;29287:11;:24::i;:::-;29280:31;28997:322;-1:-1:-1;;;28997:322:0:o;29794:471::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29872:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29864:56;;;::::0;-1:-1:-1;;;29864:56:0;;12881:2:1;29864:56:0::1;::::0;::::1;12863:21:1::0;12920:2;12900:18;;;12893:30;12959:25;12939:18;;;12932:53;13002:18;;29864:56:0::1;12679:347:1::0;29864:56:0::1;29936:9;29931:327;29955:9;:16:::0;29951:20;::::1;29931:327;;;30013:7;-1:-1:-1::0;;;;;29997:23:0::1;:9;30007:1;29997:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29997:12:0::1;:23;29993:254;;;30056:9;30066:16:::0;;:20:::1;::::0;30085:1:::1;::::0;30066:20:::1;:::i;:::-;30056:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;30041:9:::1;:12:::0;;-1:-1:-1;;;;;30056:31:0;;::::1;::::0;30051:1;;30041:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;30041:46:0::1;-1:-1:-1::0;;;;;30041:46:0;;::::1;;::::0;;30106:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30145:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30145:28:0::1;::::0;;30192:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30192:15:0;;;;;-1:-1:-1;;;;;;30192:15:0::1;::::0;;;;;50483:550;;:::o;29993:254::-:1;29973:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29931:327;;24066:302:::0;193:10;24183:4;24277:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24277:34:0;;;;;;;;;;24183:4;;24205:133;;24255:7;;24277:50;;24316:10;24277:38;:50::i;45336:150::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45405:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;45405:34:0::1;45435:4;45405:34;::::0;;45455:23;;2056:51:1;;;45455:23:0::1;::::0;2029:18:1;45455:23:0::1;;;;;;;;45336:150:::0;:::o;28508:481::-;28628:7;-1:-1:-1;;;28661:7:0;:18;;28653:62;;;;-1:-1:-1;;;28653:62:0;;13495:2:1;28653:62:0;;;13477:21:1;13534:2;13514:18;;;13507:30;13573:33;13553:18;;;13546:61;13624:18;;28653:62:0;13293:355:1;28653:62:0;28731:17;28726:256;;28766:15;28795:19;28806:7;28795:10;:19::i;:::-;-1:-1:-1;28765:49:0;;-1:-1:-1;28829:14:0;;-1:-1:-1;;;;;28829:14:0;28726:256;28879:23;28914:19;28925:7;28914:10;:19::i;:::-;-1:-1:-1;28876:57:0;;-1:-1:-1;28948:22:0;;-1:-1:-1;;;;;28948:22:0;29327:459;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29408:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29407:21;29399:61;;;::::0;-1:-1:-1;;;29399:61:0;;13855:2:1;29399:61:0::1;::::0;::::1;13837:21:1::0;13894:2;13874:18;;;13867:30;13933:29;13913:18;;;13906:57;13980:18;;29399:61:0::1;13653:351:1::0;29399:61:0::1;29479:9;:16:::0;29503:2:::1;::::0;29479:20:::1;::::0;29498:1:::1;29479:20;:::i;:::-;:26;;29471:116;;;::::0;-1:-1:-1;;;29471:116:0;;14211:2:1;29471:116:0::1;::::0;::::1;14193:21:1::0;14250:2;14230:18;;;14223:30;14289:34;14269:18;;;14262:62;14360:34;14340:18;;;14333:62;-1:-1:-1;;;14411:19:1;;;14404:44;14465:19;;29471:116:0::1;14009:481:1::0;29471:116:0::1;-1:-1:-1::0;;;;;29602:16:0;::::1;29621:1;29602:16:::0;;;:7:::1;:16;::::0;;;;;:20;29598:109:::1;;-1:-1:-1::0;;;;;29678:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29658:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29639:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29598:109:::1;-1:-1:-1::0;;;;;29717:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29717:27:0::1;29740:4;29717:27:::0;;::::1;::::0;;;29755:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29755:23:0::1;::::0;;::::1;::::0;;29327:459::o;22800:198::-;-1:-1:-1;;;;;22890:20:0;;22866:7;22890:20;;;:11;:20;;;;;;;;22886:49;;;-1:-1:-1;;;;;;22919:16:0;;;;;:7;:16;;;;;;;22800:198::o;22886:49::-;-1:-1:-1;;;;;22973:16:0;;;;;;:7;:16;;;;;;22953:37;;:19;:37::i;26312:128::-;26372:7;26398:25;;26426:6;26398:34;;;;:::i;:::-;26391:41;;26312:128;:::o;6668:148::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;6775:1:::1;6759:6:::0;;6738:40:::1;::::0;-1:-1:-1;;;;;6759:6:0;;::::1;::::0;6738:40:::1;::::0;6775:1;;6738:40:::1;6806:1;6789:19:::0;;-1:-1:-1;;;;;;6789:19:0::1;::::0;;6668:148::o;48069:447::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;48223:3:::1;48200:19;:26;;48192:90;;;::::0;-1:-1:-1;;;48192:90:0;;14697:2:1;48192:90:0::1;::::0;::::1;14679:21:1::0;14736:2;14716:18;;;14709:30;14775:34;14755:18;;;14748:62;-1:-1:-1;;;14826:18:1;;;14819:49;14885:19;;48192:90:0::1;14495:415:1::0;48192:90:0::1;48313:4;48301:8;:16;;:33;;;;-1:-1:-1::0;48321:13:0;48301:33:::1;48293:94;;;::::0;-1:-1:-1;;;48293:94:0;;15117:2:1;48293:94:0::1;::::0;::::1;15099:21:1::0;15156:2;15136:18;;;15129:30;15195:34;15175:18;;;15168:62;-1:-1:-1;;;15246:18:1;;;15239:46;15302:19;;48293:94:0::1;14915:412:1::0;48293:94:0::1;48398:15;:37:::0;;;;48446:16:::1;:27:::0;48484:13:::1;:24:::0;;-1:-1:-1;;48484:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48069:447::o;25109:192::-;25161:4;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;25177:14:0::1;:22:::0;;25210:14:::1;:22:::0;;-1:-1:-1;;25210:22:0::1;::::0;;-1:-1:-1;;25243:28:0;;;25177:14:::1;25109:192:::0;:::o;26452:144::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26542:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;26542:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26452:144::o;47253:592::-;47367:10;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47403:20:0;::::1;47395:59;;;::::0;-1:-1:-1;;;47395:59:0;;15534:2:1;47395:59:0::1;::::0;::::1;15516:21:1::0;15573:2;15553:18;;;15546:30;15612:28;15592:18;;;15585:56;15658:18;;47395:59:0::1;15332:350:1::0;47395:59:0::1;-1:-1:-1::0;;;;;47473:23:0;::::1;47491:4;47473:23;;47465:64;;;::::0;-1:-1:-1;;;47465:64:0;;15889:2:1;47465:64:0::1;::::0;::::1;15871:21:1::0;15928:2;15908:18;;;15901:30;15967;15947:18;;;15940:58;16015:18;;47465:64:0::1;15687:352:1::0;47465:64:0::1;47566:13;::::0;-1:-1:-1;;;;;47548:32:0;;::::1;47566:13:::0;::::1;47548:32;;47540:93;;;::::0;-1:-1:-1;;;47540:93:0;;16246:2:1;47540:93:0::1;::::0;::::1;16228:21:1::0;16285:2;16265:18;;;16258:30;16324:34;16304:18;;;16297:62;-1:-1:-1;;;16375:18:1;;;16368:46;16431:19;;47540:93:0::1;16044:412:1::0;47540:93:0::1;47671:39;::::0;-1:-1:-1;;;47671:39:0;;47704:4:::1;47671:39;::::0;::::1;2056:51:1::0;47644:24:0::1;::::0;-1:-1:-1;;;;;47671:24:0;::::1;::::0;::::1;::::0;2029:18:1;;47671:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47729:46;::::0;-1:-1:-1;;;47729:46:0;;-1:-1:-1;;;;;16842:32:1;;;47729:46:0::1;::::0;::::1;16824:51:1::0;16891:18;;;16884:34;;;47644:66:0;;-1:-1:-1;47729:23:0;;::::1;::::0;::::1;::::0;16797:18:1;;47729:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47791;::::0;;-1:-1:-1;;;;;16842:32:1;;16824:51;;16906:2;16891:18;;16884:34;;;47721:54:0;;-1:-1:-1;47791:46:0::1;::::0;16797:18:1;47791:46:0::1;;;;;;;47384:461;47253:592:::0;;;;:::o;26654:166::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;26709:13:::1;:20:::0;;-1:-1:-1;;;;26740:28:0;-1:-1:-1;;;26740:28:0;;;26800:12:::1;26779:18;:33:::0;26654:166::o;46569:398::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46663:31:0;::::1;46655:81;;;::::0;-1:-1:-1;;;46655:81:0;;17381:2:1;46655:81:0::1;::::0;::::1;17363:21:1::0;17420:2;17400:18;;;17393:30;17459:34;17439:18;;;17432:62;-1:-1:-1;;;17510:18:1;;;17503:35;17555:19;;46655:81:0::1;17179:401:1::0;46655:81:0::1;46766:16;::::0;;-1:-1:-1;;;;;46766:16:0;;::::1;46786:5;46747:36:::0;;;:18:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;46747:44:0;;::::1;::::0;;;46802:45;;-1:-1:-1;;;;;;46802:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;;46858:36;;;;;;;:43;;;;::::1;-1:-1:-1::0;46858:43:0::1;::::0;;;46917:42;2056:51:1;;;46917:42:0::1;::::0;2029:18:1;46917:42:0::1;1883:230:1::0;27826:244:0;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;27933:13:::1;::::0;-1:-1:-1;;;;;27925:21:0;;::::1;27933:13:::0;::::1;27925:21;;27917:91;;;::::0;-1:-1:-1;;;27917:91:0;;17787:2:1;27917:91:0::1;::::0;::::1;17769:21:1::0;17826:2;17806:18;;;17799:30;17865:34;17845:18;;;17838:62;17936:27;17916:18;;;17909:55;17981:19;;27917:91:0::1;17585:421:1::0;27917:91:0::1;28021:41;28050:4;28056:5;28021:28;:41::i;24376:402::-:0;24498:4;24520:228;193:10;24570:7;24592:145;24649:15;24592:145;;;;;;;;;;;;;;;;;193:10;24592:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24592:34:0;;;;;;;;;;;;:38;:145::i;25350:193::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;25445:31:::1;25460:15;25445:14;:31::i;:::-;25487:48;25513:15;25530:4;25487:25;:48::i;:::-;25350:193:::0;:::o;23006:201::-;23113:4;23135:42;193:10;23159:9;23170:6;23135:9;:42::i;46979:171::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;47056:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;47056:32:0::1;-1:-1:-1::0;;;;47056:32:0;;::::1;;::::0;;47104:38:::1;::::0;::::1;::::0;::::1;::::0;47080:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;25728:576:0;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;25829:29:::1;:27;:29::i;:::-;25810:15;:48;;25802:91;;;::::0;-1:-1:-1;;;25802:91:0;;18213:2:1;25802:91:0::1;::::0;::::1;18195:21:1::0;18252:2;18232:18;;;18225:30;18291:32;18271:18;;;18264:60;18341:18;;25802:91:0::1;18011:354:1::0;25802:91:0::1;25930:2;25912:14;:20;;25904:67;;;::::0;-1:-1:-1;;;25904:67:0;;18572:2:1;25904:67:0::1;::::0;::::1;18554:21:1::0;18611:2;18591:18;;;18584:30;18650:34;18630:18;;;18623:62;-1:-1:-1;;;18701:18:1;;;18694:32;18743:19;;25904:67:0::1;18370:398:1::0;25904:67:0::1;26010:15;25982:25;:43:::0;26163:13:::1;::::0;26148:55:::1;::::0;-1:-1:-1;;;26148:55:0;;26197:4:::1;26148:55;::::0;::::1;2056:51:1::0;26124:21:0::1;::::0;26223:3:::1;::::0;26206:14;;-1:-1:-1;;;;;26163:13:0::1;::::0;26148:40:::1;::::0;2029:18:1;;26148:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;;;:::i;:::-;:78;;;;:::i;:::-;26246:13;::::0;26239:57:::1;::::0;-1:-1:-1;;;26239:57:0;;26270:10:::1;26239:57;::::0;::::1;16824:51:1::0;16891:18;;;16884:34;;;26124:102:0;;-1:-1:-1;;;;;;26246:13:0::1;::::0;26239:30:::1;::::0;16797:18:1;;26239:57:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25791:513;25728:576:::0;:::o;25586:134::-;25646:4;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;25662:20:0::1;:28:::0;;-1:-1:-1;;25662:28:0::1;::::0;;;25586:134;:::o;45494:149::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45563:27:0;::::1;45593:5;45563:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;45563:35:0::1;::::0;;45614:21;;2056:51:1;;;45614:21:0::1;::::0;2029:18:1;45614:21:0::1;1883:230:1::0;6824:281:0;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6927:22:0;::::1;6905:110;;;::::0;-1:-1:-1;;;6905:110:0;;18975:2:1;6905:110:0::1;::::0;::::1;18957:21:1::0;19014:2;18994:18;;;18987:30;19053:34;19033:18;;;19026:62;-1:-1:-1;;;19104:18:1;;;19097:36;19150:19;;6905:110:0::1;18773:402:1::0;6905:110:0::1;7052:6;::::0;;7031:38:::1;::::0;-1:-1:-1;;;;;7031:38:0;;::::1;::::0;7052:6;::::1;::::0;7031:38:::1;::::0;::::1;7080:6;:17:::0;;-1:-1:-1;;;;;;7080:17:0::1;-1:-1:-1::0;;;;;7080:17:0;;;::::1;::::0;;;::::1;::::0;;6824:281::o;47901:160::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;47995:58:::1;::::0;47959:12:::1;::::0;48003:10:::1;::::0;48027:21:::1;::::0;47959:12;47995:58;47959:12;47995:58;48027:21;48003:10;47995:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;47901:160:0:o;49369:1047::-;6581:6;;-1:-1:-1;;;;;6581:6:0;193:10;6581:22;6573:67;;;;-1:-1:-1;;;6573:67:0;;;;;;;:::i;:::-;49504:19:::1;;49481:20;;:42;;;;:::i;:::-;49463:15;:60;49455:106;;;::::0;-1:-1:-1;;;49455:106:0;;19592:2:1;49455:106:0::1;::::0;::::1;19574:21:1::0;;;19611:18;;;19604:30;19670:34;19650:18;;;19643:62;19722:18;;49455:106:0::1;19390:356:1::0;49455:106:0::1;49591:4;49580:7;:15;;49572:70;;;::::0;-1:-1:-1;;;49572:70:0;;19953:2:1;49572:70:0::1;::::0;::::1;19935:21:1::0;19992:2;19972:18;;;19965:30;20031:34;20011:18;;;20004:62;-1:-1:-1;;;20082:18:1;;;20075:40;20132:19;;49572:70:0::1;19751:406:1::0;49572:70:0::1;49676:15;49653:20;:38:::0;49800:13:::1;::::0;49785:29:::1;::::0;-1:-1:-1;;;49785:29:0;;-1:-1:-1;;;;;49800:13:0;;::::1;49785:29;::::0;::::1;2056:51:1::0;49754:28:0::1;::::0;49785:4:::1;::::0;:14:::1;::::0;2029:18:1;;49785:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49754:60:::0;-1:-1:-1;49872:20:0::1;49895:44;49933:5;49895:33;49754:60:::0;49920:7;49895:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;49872:67:::0;-1:-1:-1;50052:16:0;;50048:162:::1;;50084:14;:12;:14::i;:::-;50123:13;::::0;50113:55:::1;::::0;-1:-1:-1;;;;;50123:13:0::1;50146:6;50155:12:::0;50113:9:::1;:55::i;:::-;50183:15;45123::::0;;45113:7;:25;45165:21;;45149:13;:37;45069:125;50183:15:::1;50330:13;::::0;50355:11:::1;::::0;;-1:-1:-1;;;;;;50355:11:0;;;;-1:-1:-1;;;;;50330:13:0;;::::1;::::0;;;50355:9:::1;::::0;:11:::1;::::0;;::::1;::::0;50293:19:::1;::::0;50355:11;;;;;;;50293:19;50330:13;50355:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;50382:26:0::1;::::0;50395:12;;-1:-1:-1;50382:26:0::1;::::0;-1:-1:-1;50382:26:0;;::::1;49444:972;;;49369:1047:::0;:::o;2111:132::-;2169:7;2196:39;2200:1;2203;2196:39;;;;;;;;;;;;;;;;;:3;:39::i;1475:136::-;1533:7;1560:43;1564:1;1567;1560:43;;;;;;;;;;;;;;;;;:3;:43::i;30274:371::-;-1:-1:-1;;;;;30401:19:0;;30393:68;;;;-1:-1:-1;;;30393:68:0;;20364:2:1;30393:68:0;;;20346:21:1;20403:2;20383:18;;;20376:30;20442:34;20422:18;;;20415:62;-1:-1:-1;;;20493:18:1;;;20486:34;20537:19;;30393:68:0;20162:400:1;30393:68:0;-1:-1:-1;;;;;30480:21:0;;30472:68;;;;-1:-1:-1;;;30472:68:0;;20769:2:1;30472:68:0;;;20751:21:1;20808:2;20788:18;;;20781:30;20847:34;20827:18;;;20820:62;-1:-1:-1;;;20898:18:1;;;20891:32;20940:19;;30472:68:0;20567:398:1;30472:68:0;-1:-1:-1;;;;;30553:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30605:32;;1847:25:1;;;30605:32:0;;1820:18:1;30605:32:0;;;;;;;30274:371;;;:::o;44826:235::-;44873:7;;:12;:34;;;;-1:-1:-1;44889:13:0;;:18;44873:34;44869:47;;;44826:235::o;44869:47::-;44946:7;;;44928:15;:25;44988:13;;;44964:21;:37;-1:-1:-1;45014:11:0;;;;45036:17;44826:235::o;37622:604::-;-1:-1:-1;;;;;37756:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;37780:22:0;;;;;;:11;:22;;;;;;;;37779:23;37756:46;37752:467;;;37819:48;37841:6;37849:9;37860:6;37819:21;:48::i;37752:467::-;-1:-1:-1;;;;;37890:19:0;;;;;;:11;:19;;;;;;;;37889:20;:46;;;;-1:-1:-1;;;;;;37913:22:0;;;;;;:11;:22;;;;;;;;37889:46;37885:334;;;37952:46;37972:6;37980:9;37991:6;37952:19;:46::i;37885:334::-;-1:-1:-1;;;;;38020:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;38043:22:0;;;;;;:11;:22;;;;;;;;38020:45;38016:203;;;38082:48;38104:6;38112:9;38123:6;38082:21;:48::i;38016:203::-;38163:44;38181:6;38189:9;38200:6;38163:17;:44::i;30653:4415::-;-1:-1:-1;;;;;30775:18:0;;30767:68;;;;-1:-1:-1;;;30767:68:0;;21172:2:1;30767:68:0;;;21154:21:1;21211:2;21191:18;;;21184:30;21250:34;21230:18;;;21223:62;-1:-1:-1;;;21301:18:1;;;21294:35;21346:19;;30767:68:0;20970:401:1;30767:68:0;-1:-1:-1;;;;;30854:16:0;;30846:64;;;;-1:-1:-1;;;30846:64:0;;21578:2:1;30846:64:0;;;21560:21:1;21617:2;21597:18;;;21590:30;21656:34;21636:18;;;21629:62;-1:-1:-1;;;21707:18:1;;;21700:33;21750:19;;30846:64:0;21376:399:1;30846:64:0;30938:1;30929:6;:10;30921:64;;;;-1:-1:-1;;;30921:64:0;;21982:2:1;30921:64:0;;;21964:21:1;22021:2;22001:18;;;21994:30;22060:34;22040:18;;;22033:62;-1:-1:-1;;;22111:18:1;;;22104:39;22160:19;;30921:64:0;21780:405:1;30921:64:0;31010:13;;-1:-1:-1;;;31010:13:0;;;;31006:134;;-1:-1:-1;;;;;31047:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;31075:22:0;;;;;;:18;:22;;;;;;;;31047:50;31039:89;;;;-1:-1:-1;;;31039:89:0;;22392:2:1;31039:89:0;;;22374:21:1;22431:2;22411:18;;;22404:30;22470:28;22450:18;;;22443:56;22516:18;;31039:89:0;22190:350:1;31039:89:0;31156:14;;;;;;;31153:2023;;;6492:7;6519:6;-1:-1:-1;;;;;31208:15:0;;;6519:6;;31208:15;;;;:49;;-1:-1:-1;6492:7:0;6519:6;-1:-1:-1;;;;;31244:13:0;;;6519:6;;31244:13;;31208:49;:86;;;;-1:-1:-1;;;;;;31278:16:0;;;;31208:86;:128;;;;-1:-1:-1;;;;;;31315:21:0;;31329:6;31315:21;;31208:128;:166;;;;-1:-1:-1;31358:16:0;;-1:-1:-1;;;31358:16:0;;;;31357:17;31208:166;:211;;;;-1:-1:-1;;;;;;31397:22:0;;;;;;:18;:22;;;;;;;;31396:23;31208:211;:257;;;;-1:-1:-1;;;;;;31441:24:0;;;;;;:18;:24;;;;;;;;31440:25;31208:257;31186:1979;;;31592:14;;;;:49;;;;-1:-1:-1;;;;;;31610:31:0;;;;;;:25;:31;;;;;;;;31592:49;31588:163;;;31689:13;;31674:11;:28;;31666:65;;;;-1:-1:-1;;;31666:65:0;;22747:2:1;31666:65:0;;;22729:21:1;22786:2;22766:18;;;22759:30;22825:26;22805:18;;;22798:54;22869:18;;31666:65:0;22545:348:1;31666:65:0;31925:20;;;;31921:406;;;31987:15;;-1:-1:-1;;;;;31973:30:0;;;31987:15;;31973:30;;;;:62;;-1:-1:-1;32021:13:0;;-1:-1:-1;;;;;32007:28:0;;;32021:13;;32007:28;;31973:62;31969:339;;;32100:9;32071:39;;;;:28;:39;;;;;;32113:12;-1:-1:-1;32063:140:0;;;;-1:-1:-1;;;32063:140:0;;23100:2:1;32063:140:0;;;23082:21:1;23139:2;23119:18;;;23112:30;23178:34;23158:18;;;23151:62;23249:34;23229:18;;;23222:62;-1:-1:-1;;;23300:19:1;;;23293:40;23350:19;;32063:140:0;22898:477:1;32063:140:0;32259:9;32230:39;;;;:28;:39;;;;;32272:12;32230:54;;31969:339;-1:-1:-1;;;;;32395:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;32431:35:0;;;;;;:31;:35;;;;;;;;32430:36;32395:71;32391:759;;;32509:20;;32499:6;:30;;32491:96;;;;-1:-1:-1;;;32491:96:0;;23582:2:1;32491:96:0;;;23564:21:1;23621:2;23601:18;;;23594:30;23660:34;23640:18;;;23633:62;-1:-1:-1;;;23711:18:1;;;23704:51;23772:19;;32491:96:0;23380:417:1;32491:96:0;32644:9;;32627:13;32637:2;32627:9;:13::i;:::-;32618:22;;:6;:22;:::i;:::-;:35;;32610:72;;;;-1:-1:-1;;;32610:72:0;;24004:2:1;32610:72:0;;;23986:21:1;24043:2;24023:18;;;24016:30;-1:-1:-1;;;24062:18:1;;;24055:54;24126:18;;32610:72:0;23802:348:1;32610:72:0;32391:759;;;-1:-1:-1;;;;;32759:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;32793:37:0;;;;;;:31;:37;;;;;;;;32792:38;32759:71;32755:395;;;32873:20;;32863:6;:30;;32855:97;;;;-1:-1:-1;;;32855:97:0;;24357:2:1;32855:97:0;;;24339:21:1;24396:2;24376:18;;;24369:30;24435:34;24415:18;;;24408:62;-1:-1:-1;;;24486:18:1;;;24479:52;24548:19;;32855:97:0;24155:418:1;32755:395:0;-1:-1:-1;;;;;32999:35:0;;;;;;:31;:35;;;;;;;;32995:155;;33092:9;;33075:13;33085:2;33075:9;:13::i;:::-;33066:22;;:6;:22;:::i;:::-;:35;;33058:72;;;;-1:-1:-1;;;33058:72:0;;24004:2:1;33058:72:0;;;23986:21:1;24043:2;24023:18;;;24016:30;-1:-1:-1;;;24062:18:1;;;24055:54;24126:18;;33058:72:0;23802:348:1;33058:72:0;33188:28;33219:24;33237:4;33219:9;:24::i;:::-;33309:23;;33393:16;;33188:55;;-1:-1:-1;33285:47:0;;;;-1:-1:-1;;;33393:16:0;;;;33392:17;:55;;;;-1:-1:-1;33426:21:0;;-1:-1:-1;;;33426:21:0;;;;33392:55;:100;;;;-1:-1:-1;33474:13:0;;33491:1;;33464:24;;-1:-1:-1;;;;;33474:13:0;33464:9;:24::i;:::-;:28;33392:100;:140;;;;-1:-1:-1;;;;;;33510:22:0;;;;;;:18;:22;;;;;;;;33509:23;33392:140;:182;;;;-1:-1:-1;;;;;;33550:24:0;;;;;;:18;:24;;;;;;;;33549:25;33392:182;:228;;;;-1:-1:-1;;;;;;33591:29:0;;;;;;:25;:29;;;;;;;;33392:228;:268;;;;;33637:23;33392:268;33374:335;;;33687:10;:8;:10::i;:::-;33725:16;;-1:-1:-1;;;33725:16:0;;;;33724:17;:50;;;;-1:-1:-1;;;;;;33745:29:0;;;;;;:25;:29;;;;;;;;33724:50;:67;;;;-1:-1:-1;33778:13:0;;;;33724:67;:122;;;;;33831:15;;33814:14;;:32;;;;:::i;:::-;33795:15;:51;;33724:122;:151;;;;-1:-1:-1;;;;;;33851:24:0;;;;;;:18;:24;;;;;;;;33850:25;33724:151;33721:211;;;33891:29;:27;:29::i;:::-;33944:14;:12;:14::i;:::-;18370:1;33979:15;:26;-1:-1:-1;;;;;34031:24:0;;;;;;:18;:24;;;;;;;;34030:25;:52;;;;-1:-1:-1;;;;;;34060:22:0;;;;;;:18;:22;;;;;;;;34059:23;34030:52;34026:936;;;34128:12;34102:18;;34123:1;34102:22;;;;:::i;:::-;:38;;:108;;;;-1:-1:-1;;;;;;34145:29:0;;;;;;:25;:29;;;;;;;;;:64;;-1:-1:-1;;;;;;34178:31:0;;;;;;:25;:31;;;;;;;;34145:64;34099:852;;;34240:3;34230:7;:13;34278:4;34262:13;:20;18326:1;34301:15;:22;34099:852;;;-1:-1:-1;;;;;34382:31:0;;;;;;:25;:31;;;;;;;;34378:573;;;34444:10;;34434:7;:20;34508:16;;34489;;:35;;34508:16;34489:35;:::i;:::-;34473:13;:51;;;34546:17;34543:85;;18286:1;34587:15;:21;34543:85;34378:573;;;-1:-1:-1;;;;;34688:29:0;;;;;;:25;:29;;;;;;;;34684:267;;;34748:11;;34738:7;:21;34814:17;;34794;;:37;;34814:17;34794:37;:::i;:::-;34778:13;:53;;;34853:17;34850:86;;18326:1;34894:15;:22;34850:86;34982:32;34997:4;35003:2;35007:6;34982:14;:32::i;:::-;35035:15;45123;;45113:7;:25;45165:21;;45149:13;:37;45069:125;35035:15;30756:4312;;30653:4415;;;:::o;1619:226::-;1739:7;1775:12;1767:6;;;;1759:29;;;;-1:-1:-1;;;1759:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1799:9:0;1811:5;1815:1;1811;:5;:::i;:::-;1799:17;1619:226;-1:-1:-1;;;;;1619:226:0:o;42919:164::-;42961:7;42982:15;42999;43018:19;:17;:19::i;:::-;42981:56;;-1:-1:-1;42981:56:0;-1:-1:-1;43055:20:0;42981:56;;43055:11;:20::i;:::-;43048:27;;;;42919:164;:::o;1286:181::-;1344:7;;1376:5;1380:1;1376;:5;:::i;:::-;1364:17;;1405:1;1400;:6;;1392:46;;;;-1:-1:-1;;;1392:46:0;;24780:2:1;1392:46:0;;;24762:21:1;24819:2;24799:18;;;24792:30;24858:29;24838:18;;;24831:57;24905:18;;1392:46:0;24578:351:1;41187:742:0;41287:7;41309;41331;41353;41375;41397;41447:23;41485:12;41512:18;41544:20;41556:7;41544:11;:20::i;:::-;41432:132;;;;;;41576:15;41593:23;41618:12;41634:113;41660:7;41682:4;41701:10;41726;:8;:10::i;:::-;41634:11;:113::i;:::-;41575:172;;;;-1:-1:-1;41575:172:0;;-1:-1:-1;41851:15:0;;-1:-1:-1;41881:4:0;;-1:-1:-1;41900:10:0;;-1:-1:-1;41187:742:0;;-1:-1:-1;;;;;41187:742:0:o;28078:275::-;-1:-1:-1;;;;;28161:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;28161:39:0;;;;;;;;28211:31;:37;;;;;;;:45;;;;;;;;;;;28267:35;;28277:23;28295:4;28277:17;:23::i;:::-;28316:5;28312:34;;28323:21;28339:4;28323:15;:21::i;1853:250::-;1911:7;1935:6;1931:47;;-1:-1:-1;1965:1:0;1958:8;;1931:47;1990:9;2002:5;2006:1;2002;:5;:::i;:::-;1990:17;-1:-1:-1;2035:1:0;2026:5;2030:1;1990:17;2026:5;:::i;:::-;:10;2018:56;;;;-1:-1:-1;;;2018:56:0;;25136:2:1;2018:56:0;;;25118:21:1;25175:2;25155:18;;;25148:30;25214:34;25194:18;;;25187:62;-1:-1:-1;;;25265:18:1;;;25258:31;25306:19;;2018:56:0;24934:397:1;2251:312:0;2371:7;2406:12;2399:5;2391:28;;;;-1:-1:-1;;;2391:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2430:9:0;2442:5;2446:1;2442;:5;:::i;39573:686::-;39724:15;39754:23;39792:12;39819:23;39857:12;39884:18;39916:19;39927:7;39916:10;:19::i;:::-;-1:-1:-1;;;;;39964:15:0;;;;;;:7;:15;;;;;;39709:226;;-1:-1:-1;39709:226:0;;-1:-1:-1;39709:226:0;;-1:-1:-1;39709:226:0;-1:-1:-1;39709:226:0;-1:-1:-1;39709:226:0;-1:-1:-1;39964:28:0;;39984:7;39964:19;:28::i;:::-;-1:-1:-1;;;;;39946:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40021:7;:15;;;;:28;;40041:7;40021:19;:28::i;:::-;-1:-1:-1;;;;;40003:15:0;;;;;;;:7;:15;;;;;;:46;;;;40081:18;;;;;;;:39;;40104:15;40081:22;:39::i;:::-;-1:-1:-1;;;;;40060:18:0;;;;;;:7;:18;;;;;:60;40131:26;40146:10;40131:14;:26::i;:::-;40168:23;40180:4;40186;40168:11;:23::i;:::-;40224:9;-1:-1:-1;;;;;40207:44:0;40216:6;-1:-1:-1;;;;;40207:44:0;;40235:15;40207:44;;;;1847:25:1;;1835:2;1820:18;;1701:177;40207:44:0;;;;;;;;39698:561;;;;;;39573:686;;;:::o;38867:698::-;39016:15;39046:23;39084:12;39111:23;39149:12;39176:18;39208:19;39219:7;39208:10;:19::i;:::-;-1:-1:-1;;;;;39256:15:0;;;;;;:7;:15;;;;;;39001:226;;-1:-1:-1;39001:226:0;;-1:-1:-1;39001:226:0;;-1:-1:-1;39001:226:0;-1:-1:-1;39001:226:0;-1:-1:-1;39001:226:0;-1:-1:-1;39256:28:0;;39001:226;39256:19;:28::i;:::-;-1:-1:-1;;;;;39238:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;39316:18;;;;;:7;:18;;;;;:39;;39339:15;39316:22;:39::i;:::-;-1:-1:-1;;;;;39295:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39387:7;:18;;;;:39;;39410:15;39387:22;:39::i;40267:757::-;40418:15;40448:23;40486:12;40513:23;40551:12;40578:18;40610:19;40621:7;40610:10;:19::i;:::-;-1:-1:-1;;;;;40658:15:0;;;;;;:7;:15;;;;;;40403:226;;-1:-1:-1;40403:226:0;;-1:-1:-1;40403:226:0;;-1:-1:-1;40403:226:0;-1:-1:-1;40403:226:0;-1:-1:-1;40403:226:0;-1:-1:-1;40658:28:0;;40678:7;40658:19;:28::i;:::-;-1:-1:-1;;;;;40640:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40715:7;:15;;;;:28;;40735:7;40715:19;:28::i;38234:625::-;38381:15;38411:23;38449:12;38476:23;38514:12;38541:18;38573:19;38584:7;38573:10;:19::i;:::-;-1:-1:-1;;;;;38621:15:0;;;;;;:7;:15;;;;;;38366:226;;-1:-1:-1;38366:226:0;;-1:-1:-1;38366:226:0;;-1:-1:-1;38366:226:0;-1:-1:-1;38366:226:0;-1:-1:-1;38366:226:0;-1:-1:-1;38621:28:0;;38366:226;38621:19;:28::i;35076:1593::-;20754:16;:23;;-1:-1:-1;;;;20754:23:0;-1:-1:-1;;;20754:23:0;;;;35153:24:::1;35171:4;35153:9;:24::i;:::-;35127:50;;35188:25;35241:22;;35216;;:47;;;;:::i;:::-;35188:75;;35274:12;35370:23;;35396:2;35370:28;;;;:::i;:::-;35351:15;:47;35348:124;;35432:23;::::0;:28:::1;::::0;35458:2:::1;35432:28;:::i;:::-;35414:46;;35348:124;35487:20:::0;;;:46:::1;;-1:-1:-1::0;35511:22:0;;35487:46:::1;35484:60;;;35536:7;;;;;35484:60;35613:26;35705:1;35685:17;35660:22;;35642:15;:40;;;;:::i;:::-;:60;;;;:::i;:::-;:64;;;;:::i;:::-;35613:93:::0;-1:-1:-1;35717:26:0::1;35746:39;:15:::0;35613:93;35746:19:::1;:39::i;:::-;35717:68:::0;-1:-1:-1;35834:21:0::1;35868:36;35717:68:::0;35868:16:::1;:36::i;:::-;35926:18;35947:44;:21;35973:17:::0;35947:25:::1;:44::i;:::-;35926:65;;36012:23;36038:90;36125:1;36102:22;;:24;;;;:::i;:::-;36081:46;::::0;:17;:46:::1;:::i;:::-;36053:22;::::0;36038:38:::1;::::0;:10;;:14:::1;:38::i;:90::-;36012:116:::0;-1:-1:-1;36149:23:0::1;36175:28;36012:116:::0;36175:10;:28:::1;:::i;:::-;36249:1;36224:22;:26:::0;;;36261:22:::1;:26:::0;36149:54;-1:-1:-1;36319:22:0;;;;;:45:::1;;;36363:1;36345:15;:19;36319:45;36316:216;;;36380:49;36393:18;36413:15;36380:12;:49::i;:::-;36449:71;::::0;;11098:25:1;;;11154:2;11139:18;;11132:34;;;11182:18;;;11175:34;;;36449:71:0::1;::::0;11086:2:1;11071:18;36449:71:0::1;;;;;;;36316:216;36605:16;::::0;36597:64:::1;::::0;-1:-1:-1;;;;;36605:16:0;;::::1;::::0;36635:21:::1;::::0;36597:64:::1;::::0;;;36635:21;36605:16;36597:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;20788:1:0::1;20800:16:::0;:24;;-1:-1:-1;;;;20800:24:0;;;35076:1593::o;48528:833::-;48614:15;48597:14;:32;48738:13;;48723:29;;-1:-1:-1;;;48723:29:0;;-1:-1:-1;;;;;48738:13:0;;;48723:29;;;2056:51:1;48692:28:0;;48723:4;;:14;;2029:18:1;;48723:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48692:60;;48810:20;48833:53;48880:5;48833:42;48858:16;;48833:20;:24;;:42;;;;:::i;:53::-;48810:76;-1:-1:-1;48999:16:0;;48995:162;;49031:14;:12;:14::i;:::-;49070:13;;49060:55;;-1:-1:-1;;;;;49070:13:0;49093:6;49102:12;49060:9;:55::i;:::-;49130:15;45123;;45113:7;:25;45165:21;;45149:13;:37;45069:125;49130:15;49277:13;;49302:11;;;-1:-1:-1;;;;;;49302:11:0;;;;-1:-1:-1;;;;;49277:13:0;;;;;;49302:9;;:11;;;;;49240:19;;49302:11;;;;;;;49240:19;49277:13;49302:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49329:24:0;;49340:12;;-1:-1:-1;49329:24:0;;-1:-1:-1;49329:24:0;;;48576:785;;;48528:833::o;43091:605::-;43189:7;;43142;;;;-1:-1:-1;;;43142:7:0;43243:338;43267:9;:16;43263:20;;43243:338;;;43351:7;43327;:21;43335:9;43345:1;43335:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43335:12:0;43327:21;;;;;;;;;;;;;:31;;:83;;;43403:7;43379;:21;43387:9;43397:1;43387:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43387:12:0;43379:21;;;;;;;;;;;;;:31;43327:83;43305:146;;;-1:-1:-1;;43434:7:0;;;-1:-1:-1;;;17656:15:0;-1:-1:-1;43091:605:0;-1:-1:-1;;43091:605:0:o;43305:146::-;43476:34;43488:7;:21;43496:9;43506:1;43496:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43496:12:0;43488:21;;;;;;;;;;;;;43476:7;;:11;:34::i;:::-;43466:44;;43535:34;43547:7;:21;43555:9;43565:1;43555:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43555:12:0;43547:21;;;;;;;;;;;;;43535:7;;:11;:34::i;:::-;43525:44;-1:-1:-1;43285:3:0;;;;:::i;:::-;;;;43243:338;;;-1:-1:-1;43605:7:0;;:20;;-1:-1:-1;;;43605:11:0;:20::i;:::-;43595:7;:30;43591:61;;;-1:-1:-1;;43635:7:0;;;-1:-1:-1;;;17656:15:0;-1:-1:-1;43091:605:0;-1:-1:-1;43091:605:0:o;43591:61::-;43671:7;;43680;;-1:-1:-1;43091:605:0;-1:-1:-1;43091:605:0:o;41937:412::-;42038:7;42060;42082;42117:12;42132:24;42148:7;42132:15;:24::i;:::-;42117:39;;42167:18;42188:30;42210:7;42188:21;:30::i;:::-;42167:51;-1:-1:-1;42229:23:0;42255:33;42167:51;42255:17;:7;42267:4;42255:11;:17::i;:::-;:21;;:33::i;:::-;42229:59;42324:4;;-1:-1:-1;42330:10:0;;-1:-1:-1;41937:412:0;;-1:-1:-1;;;41937:412:0:o;42357:554::-;42556:7;;;;42653:24;:7;42665:11;42653;:24::i;:::-;42635:42;-1:-1:-1;42688:12:0;42703:21;:4;42712:11;42703:8;:21::i;:::-;42688:36;-1:-1:-1;42735:18:0;42756:27;:10;42771:11;42756:14;:27::i;:::-;42735:48;-1:-1:-1;42794:23:0;42820:33;42735:48;42820:17;:7;42832:4;42820:11;:17::i;:33::-;42872:7;;;;-1:-1:-1;42898:4:0;;-1:-1:-1;42357:554:0;;-1:-1:-1;;;;;;;42357:554:0:o;43704:794::-;18286:1;43770:15;;:22;43767:429;;;43866:13;;43847:16;;43834:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;43808:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;43952:13:0;;43933:16;;43920:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;43894:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;43767:429:0;;-1:-1:-1;43767:429:0;;18326:1;43986:15;;:23;43983:213;;;44084:13;;44064:17;;44051:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44025:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44171:13:0;;44151:17;;44138:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44112:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;43983:213:0;44206:19;44228:10;:8;:10::i;:::-;44206:32;-1:-1:-1;44249:18:0;44270:27;:10;44206:32;44270:14;:27::i;:::-;44349:4;44333:22;;;;:7;:22;;;;;;44249:48;;-1:-1:-1;44333:38:0;;44249:48;44333:26;:38::i;:::-;44324:4;44308:22;;;;:7;:22;;;;;;;;:63;;;;44386:11;:26;;;;;;44382:108;;;44468:4;44452:22;;;;:7;:22;;;;;;:38;;44479:10;44452:26;:38::i;:::-;44443:4;44427:22;;;;:7;:22;;;;;:63;43756:742;;43704:794;:::o;41032:147::-;41110:7;;:17;;41122:4;41110:11;:17::i;:::-;41100:7;:27;41151:10;;:20;;41166:4;41151:14;:20::i;:::-;41138:10;:33;-1:-1:-1;;41032:147:0:o;36681:499::-;36771:16;;;36785:1;36771:16;;;;;;;;36747:21;;36771:16;;;;;;;;;;-1:-1:-1;36771:16:0;36747:40;;36816:4;36798;36803:1;36798:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36798:23:0;;;:7;;;;;;;;;;:23;;;;36842:15;;:22;;;-1:-1:-1;;;36842:22:0;;;;:15;;;;;:20;;:22;;;;;36798:7;;36842:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36832:4;36837:1;36832:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36832:32:0;;;:7;;;;;;;;;:32;36907:15;;36875:62;;36892:4;;36907:15;36925:11;36875:8;:62::i;:::-;36948:15;;:224;;-1:-1:-1;;;36948:224:0;;-1:-1:-1;;;;;36948:15:0;;;;:66;;:224;;37029:11;;36948:15;;37099:4;;37126;;37146:15;;36948:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36736:444;36681:499;:::o;37192:422::-;37305:15;;37273:62;;37290:4;;-1:-1:-1;;;;;37305:15:0;37323:11;37273:8;:62::i;:::-;37346:15;;:260;;-1:-1:-1;;;37346:260:0;;37418:4;37346:260;;;26918:34:1;26968:18;;;26961:34;;;37346:15:0;27011:18:1;;;27004:34;;;27054:18;;;27047:34;37558:6:0;27097:19:1;;;27090:44;37580:15:0;27150:19:1;;;27143:35;-1:-1:-1;;;;;37346:15:0;;;;:31;;37385:9;;26852:19:1;;37346:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44506:130::-;44570:7;44597:31;44622:5;44597:20;44609:7;;44597;:11;;:20;;;;:::i;44644:174::-;44741:7;44773:37;44804:5;44773:26;44785:13;;44773:7;:11;;:26;;;;:::i;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;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1449:247::-;1508:6;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1616:9;1603:23;1635:31;1660:5;1635:31;:::i;2118:316::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;-1:-1:-1;;2303:23:1;;;2373:2;2358:18;;2345:32;;-1:-1:-1;2424:2:1;2409:18;;;2396:32;;2118:316;-1:-1:-1;2118:316:1:o;2439:127::-;2500:10;2495:3;2491:20;2488:1;2481:31;2531:4;2528:1;2521:15;2555:4;2552:1;2545:15;2571:275;2642:2;2636:9;2707:2;2688:13;;-1:-1:-1;;2684:27:1;2672:40;;2742:18;2727:34;;2763:22;;;2724:62;2721:88;;;2789:18;;:::i;:::-;2825:2;2818:22;2571:275;;-1:-1:-1;2571:275:1:o;2851:183::-;2911:4;2944:18;2936:6;2933:30;2930:56;;;2966:18;;:::i;:::-;-1:-1:-1;3011:1:1;3007:14;3023:4;3003:25;;2851:183::o;3039:662::-;3093:5;3146:3;3139:4;3131:6;3127:17;3123:27;3113:55;;3164:1;3161;3154:12;3113:55;3200:6;3187:20;3226:4;3250:60;3266:43;3306:2;3266:43;:::i;:::-;3250:60;:::i;:::-;3344:15;;;3430:1;3426:10;;;;3414:23;;3410:32;;;3375:12;;;;3454:15;;;3451:35;;;3482:1;3479;3472:12;3451:35;3518:2;3510:6;3506:15;3530:142;3546:6;3541:3;3538:15;3530:142;;;3612:17;;3600:30;;3650:12;;;;3563;;3530:142;;;-1:-1:-1;3690:5:1;3039:662;-1:-1:-1;;;;;;3039:662:1:o;3706:1215::-;3824:6;3832;3885:2;3873:9;3864:7;3860:23;3856:32;3853:52;;;3901:1;3898;3891:12;3853:52;3941:9;3928:23;3970:18;4011:2;4003:6;4000:14;3997:34;;;4027:1;4024;4017:12;3997:34;4065:6;4054:9;4050:22;4040:32;;4110:7;4103:4;4099:2;4095:13;4091:27;4081:55;;4132:1;4129;4122:12;4081:55;4168:2;4155:16;4190:4;4214:60;4230:43;4270:2;4230:43;:::i;4214:60::-;4308:15;;;4390:1;4386:10;;;;4378:19;;4374:28;;;4339:12;;;;4414:19;;;4411:39;;;4446:1;4443;4436:12;4411:39;4470:11;;;;4490:217;4506:6;4501:3;4498:15;4490:217;;;4586:3;4573:17;4603:31;4628:5;4603:31;:::i;:::-;4647:18;;4523:12;;;;4685;;;;4490:217;;;4726:5;-1:-1:-1;;4769:18:1;;4756:32;;-1:-1:-1;;4800:16:1;;;4797:36;;;4829:1;4826;4819:12;4797:36;;4852:63;4907:7;4896:8;4885:9;4881:24;4852:63;:::i;:::-;4842:73;;;3706:1215;;;;;:::o;4926:456::-;5003:6;5011;5019;5072:2;5060:9;5051:7;5047:23;5043:32;5040:52;;;5088:1;5085;5078:12;5040:52;5127:9;5114:23;5146:31;5171:5;5146:31;:::i;:::-;5196:5;-1:-1:-1;5253:2:1;5238:18;;5225:32;5266:33;5225:32;5266:33;:::i;:::-;4926:456;;5318:7;;-1:-1:-1;;;5372:2:1;5357:18;;;;5344:32;;4926:456::o;5576:118::-;5662:5;5655:13;5648:21;5641:5;5638:32;5628:60;;5684:1;5681;5674:12;5699:309;5764:6;5772;5825:2;5813:9;5804:7;5800:23;5796:32;5793:52;;;5841:1;5838;5831:12;5793:52;5877:9;5864:23;5854:33;;5937:2;5926:9;5922:18;5909:32;5950:28;5972:5;5950:28;:::i;:::-;5997:5;5987:15;;;5699:309;;;;;:::o;6221:377::-;6295:6;6303;6311;6364:2;6352:9;6343:7;6339:23;6335:32;6332:52;;;6380:1;6377;6370:12;6332:52;6416:9;6403:23;6393:33;;6473:2;6462:9;6458:18;6445:32;6435:42;;6527:2;6516:9;6512:18;6499:32;6540:28;6562:5;6540:28;:::i;:::-;6587:5;6577:15;;;6221:377;;;;;:::o;6603:382::-;6668:6;6676;6729:2;6717:9;6708:7;6704:23;6700:32;6697:52;;;6745:1;6742;6735:12;6697:52;6784:9;6771:23;6803:31;6828:5;6803:31;:::i;:::-;6853:5;-1:-1:-1;6910:2:1;6895:18;;6882:32;6923:30;6882:32;6923:30;:::i;6990:388::-;7058:6;7066;7119:2;7107:9;7098:7;7094:23;7090:32;7087:52;;;7135:1;7132;7125:12;7087:52;7174:9;7161:23;7193:31;7218:5;7193:31;:::i;:::-;7243:5;-1:-1:-1;7300:2:1;7285:18;;7272:32;7313:33;7272:32;7313:33;:::i;7607:241::-;7663:6;7716:2;7704:9;7695:7;7691:23;7687:32;7684:52;;;7732:1;7729;7722:12;7684:52;7771:9;7758:23;7790:28;7812:5;7790:28;:::i;7853:356::-;8055:2;8037:21;;;8074:18;;;8067:30;8133:34;8128:2;8113:18;;8106:62;8200:2;8185:18;;7853:356::o;8214:127::-;8275:10;8270:3;8266:20;8263:1;8256:31;8306:4;8303:1;8296:15;8330:4;8327:1;8320:15;8346:168;8386:7;8452:1;8448;8444:6;8440:14;8437:1;8434:21;8429:1;8422:9;8415:17;8411:45;8408:71;;;8459:18;;:::i;:::-;-1:-1:-1;8499:9:1;;8346:168::o;8519:217::-;8559:1;8585;8575:132;;8629:10;8624:3;8620:20;8617:1;8610:31;8664:4;8661:1;8654:15;8692:4;8689:1;8682:15;8575:132;-1:-1:-1;8721:9:1;;8519:217::o;10404:128::-;10444:3;10475:1;10471:6;10468:1;10465:13;10462:39;;;10481:18;;:::i;:::-;-1:-1:-1;10517:9:1;;10404:128::o;11638:127::-;11699:10;11694:3;11690:20;11687:1;11680:31;11730:4;11727:1;11720:15;11754:4;11751:1;11744:15;11770:135;11809:3;-1:-1:-1;;11830:17:1;;11827:43;;;11850:18;;:::i;:::-;-1:-1:-1;11897:1:1;11886:13;;11770:135::o;13031:125::-;13071:4;13099:1;13096;13093:8;13090:34;;;13104:18;;:::i;:::-;-1:-1:-1;13141:9:1;;13031:125::o;13161:127::-;13222:10;13217:3;13213:20;13210:1;13203:31;13253:4;13250:1;13243:15;13277:4;13274:1;13267:15;16461:184;16531:6;16584:2;16572:9;16563:7;16559:23;16555:32;16552:52;;;16600:1;16597;16590:12;16552:52;-1:-1:-1;16623:16:1;;16461:184;-1:-1:-1;16461:184:1:o;16929:245::-;16996:6;17049:2;17037:9;17028:7;17024:23;17020:32;17017:52;;;17065:1;17062;17055:12;17017:52;17097:9;17091:16;17116:28;17138:5;17116:28;:::i;25336:251::-;25406:6;25459:2;25447:9;25438:7;25434:23;25430:32;25427:52;;;25475:1;25472;25465:12;25427:52;25507:9;25501:16;25526:31;25551:5;25526:31;:::i;25592:980::-;25854:4;25902:3;25891:9;25887:19;25933:6;25922:9;25915:25;25959:2;25997:6;25992:2;25981:9;25977:18;25970:34;26040:3;26035:2;26024:9;26020:18;26013:31;26064:6;26099;26093:13;26130:6;26122;26115:22;26168:3;26157:9;26153:19;26146:26;;26207:2;26199:6;26195:15;26181:29;;26228:1;26238:195;26252:6;26249:1;26246:13;26238:195;;;26317:13;;-1:-1:-1;;;;;26313:39:1;26301:52;;26408:15;;;;26373:12;;;;26349:1;26267:9;26238:195;;;-1:-1:-1;;;;;;;26489:32:1;;;;26484:2;26469:18;;26462:60;-1:-1:-1;;;26553:3:1;26538:19;26531:35;26450:3;25592:980;-1:-1:-1;;;25592:980:1:o;27189:306::-;27277:6;27285;27293;27346:2;27334:9;27325:7;27321:23;27317:32;27314:52;;;27362:1;27359;27352:12;27314:52;27391:9;27385:16;27375:26;;27441:2;27430:9;27426:18;27420:25;27410:35;;27485:2;27474:9;27470:18;27464:25;27454:35;;27189:306;;;;;:::o

Swarm Source

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