ETH Price: $2,799.76 (-5.16%)

Token

DolanINU (DOLAN)

Overview

Max Total Supply

1,000,000,000,000 DOLAN

Holders

16

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
DolanINU

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-12-18
*/

// SPDX-License-Identifier: MIT
// https://t.me/DolanINUArb
// https://x.com/DolanINUArb

pragma solidity = 0.8.18;

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

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

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/x/sa/fe/ma/rs/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     * x_s_af_e/m_ar_s
     * Requirements:
     *
     * - The divisor cannot be 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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply = 1_000_000_000_000; //1 Trillion
   
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals = 9;
    uint256 private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "DolanINU";
    string private _symbol = "DOLAN";
    
    uint256 public _reflectFee = 0; // All taxes are divided by 100 for more accuracy.
    uint256 private _previousReflectFee = _reflectFee;
    uint256 private maxReflectFee = 10000;
    
    uint256 public _liquidityFee = 100; // All taxes are divided by 100 for more accuracy.
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 private maxLiquidityFee = 10000;

    uint256 public _marketingFee = 100; // All taxes are divided by 100 for more accuracy.
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private maxMarketingFee = 10000;

    uint256 private masterTaxDivisor = 10000; // All tax calculations are divided by this number.

    IRouter02 public dexRouter;
    address public lpPair;

    // SUSHI ROUTER
    address private _routerAddress = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;

    address public burnAddress = 0x51AC131F926677190e399C518690842235b9672E;
    address payable private _marketingWallet = payable(0x51AC131F926677190e399C518690842235b9672E);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    // Max TX amount is 1% of the total supply.
    uint256 private maxTxPercent = 100; // Less fields to edit
    uint256 private maxTxDivisor = 10000;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 private _previousMaxTxAmount = _maxTxAmount;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor; // Actual amount for UI's
    // Maximum wallet size is 1% of the total supply.
    uint256 private maxWalletPercent = 100; // Less fields to edit
    uint256 private maxWalletDivisor = 10000;   
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
    uint256 private _previousMaxWalletSize = _maxWalletSize;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor; // Actual amount for UI's
    // 0.05% of Total Supply
    uint256 private numTokensSellToAddToLiquidity = (_tTotal * 5) / 10000;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private immutable snipeBlockAmt;
    uint256 public snipersCaught = 0;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor (uint256 _snipeBlockAmt) payable {
        _tOwned[_msgSender()] = _tTotal;
        _rOwned[_msgSender()] = _rTotal;

        // Set the amount of blocks to count a sniper.
        snipeBlockAmt = _snipeBlockAmt;

        IRouter02 _dexRouter = IRouter02(_routerAddress);
        lpPair = IFactoryV2(_dexRouter.factory())
            .createPair(address(this), _dexRouter.WETH());

        dexRouter = _dexRouter;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;
        _isExcluded[address(this)] = true;
        _excluded.push(address(this));
        _isExcluded[owner()] = true;
        _excluded.push(owner());
        _isExcluded[burnAddress] = true;
        _excluded.push(burnAddress);
        _isExcluded[_marketingWallet] = true;
        _excluded.push(_marketingWallet);
        _isExcluded[lpPair] = true;
        _excluded.push(lpPair);

        // Approve the owner for PancakeSwap, timesaver.
        _approve(_msgSender(), _routerAddress, _tTotal);

        // Ever-growing sniper/tool blacklist
        _isSniper[0xE4882975f933A199C92b5A925C9A8fE65d599Aa8] = true;
        _isSniper[0x86C70C4a3BC775FB4030448c9fdb73Dc09dd8444] = true;
        _isSniper[0xa4A25AdcFCA938aa030191C297321323C57148Bd] = true;
        _isSniper[0x20C00AFf15Bb04cC631DB07ee9ce361ae91D12f8] = true;
        _isSniper[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    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) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferBatch(address[] calldata recipients, uint256[] calldata amounts) public returns (bool) {
        require(recipients.length == amounts.length, 
        "Must be matching argument lengths");
        
        uint256 length = recipients.length;
        
        for (uint i = 0; i < length; i++) {
            require(transfer(recipients[i], amounts[i]));
        }
        return true;
    }

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

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

    function setLPPair(address pair) external onlyOwner {
        lpPair = pair;
    }

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

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

    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function removeSniper(address account) external onlyOwner() {
        require(_isSniper[account], "Account is not a recorded sniper.");
        _isSniper[account] = false;
    }

    function setSniperProtectionEnabled(bool enabled) external onlyOwner() {
        require(enabled != sniperProtection, "Already set.");
        sniperProtection = enabled;
    }
    
    function setTaxFeePercent(uint256 reflectFee) external onlyOwner() {
        require(reflectFee <= maxReflectFee); // Prevents owner from abusing fees.
        _reflectFee = reflectFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee <= maxLiquidityFee); // Prevents owner from abusing fees.
        _liquidityFee = liquidityFee;
    }

    function setMarketingFeePercent(uint256 marketingFee) external onlyOwner() {
        require(marketingFee <= maxMarketingFee); // Prevents owner from abusing fees.
        _marketingFee = marketingFee;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner() {
        require(divisor <= 10000); // Cannot set lower than 0.01%
        _maxTxAmount = _tTotal.mul(percent).div(divisor);
        maxTxAmountUI = startingSupply.mul(percent).div(divisor);
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner() {
        require(divisor <= 1000); // Cannot set lower than 0.1%
        _maxWalletSize = _tTotal.mul(percent).div(divisor);
        maxWalletSizeUI = startingSupply.mul(percent).div(divisor);
    }

    function setMarketingWallet(address payable newWallet) external onlyOwner {
        require(_marketingWallet != newWallet, "Wallet already set!");
        _marketingWallet = payable(newWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != burnAddress
            && to != address(0)
            && from != address(this);
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public 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(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already 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;
            }
        }
    }
    
     //to recieve ETH from dexRouter when swaping
    receive() external payable {}

    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(_hasLimits(from, to))
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        if(_hasLimits(from, to)
            && to != _routerAddress 
            && to != lpPair
        ) {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (!inSwapAndLiquify
            && to == lpPair
            && swapAndLiquifyEnabled
        ) {
            if (overMinTokenBalance) {
                contractTokenBalance = numTokensSellToAddToLiquidity;
                swapAndLiquify(contractTokenBalance);
            }
        }
        
        bool takeFee = true;
        
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (_marketingFee + _liquidityFee == 0)
            return;
        uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 toLiquify = contractTokenBalance.sub(toMarketing);

        // split the contract balance into halves
        uint256 half = toLiquify.div(2);
        uint256 otherHalf = toLiquify.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        uint256 toSwapForEth = half.add(toMarketing);
        swapTokensForEth(toSwapForEth);

        // how much ETH did we just swap into?
        uint256 fromSwap = address(this).balance.sub(initialBalance);
        uint256 liquidityBalance = fromSwap.mul(half).div(toSwapForEth);

        addLiquidity(otherHalf, liquidityBalance);

        emit SwapAndLiquify(half, liquidityBalance, otherHalf);

        _marketingWallet.transfer(fromSwap.sub(liquidityBalance));
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap lpPair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function _tokenTransfer(address from, address to, uint256 amount,bool takeFee) private {
        // Failsafe, disable the whole system if needed.
        if (sniperProtection){
            // If sender is a sniper address, reject the transfer.
            if (isSniper(from) || isSniper(to)) {
                revert("Sniper rejected.");
            }

            // Check if this is the liquidity adding tx to startup.
            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                    if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                        revert("Only owner can transfer at this time.");
                    }
            } else {
                if (_liqAddBlock > 0 
                    && from == lpPair 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniper[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        if(!takeFee)
            removeAllFee();
        
        _finalizeTransfer(from, to, amount);
        
        if(!takeFee)
            restoreAllFee();
    }

    function _finalizeTransfer(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);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _tOwned[sender] = _tOwned[sender].sub(tAmount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);  
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _tOwned[sender] = _tOwned[sender].sub(tAmount);
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        }

        if (tLiquidity > 0)
            _takeLiquidity(sender, tLiquidity);
        if (rFee > 0 || tFee > 0)
            _takeReflect(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddBlock = block.number;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    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 _takeReflect(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) private {
        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);
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }

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

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

    function removeAllFee() private {
        if(_reflectFee == 0 && _liquidityFee == 0) return;
        
        _previousReflectFee = _reflectFee;
        _previousLiquidityFee = _liquidityFee;
        _previousMarketingFee = _marketingFee;

        _reflectFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
    }
    
    function restoreAllFee() private {
        _reflectFee = _previousReflectFee;
        _liquidityFee = _previousLiquidityFee;
        _marketingFee = _previousMarketingFee;
    }

    function withdrawETH (address payable recipient, uint256 amount) public onlyOwner {
        (bool succeed, bytes memory data) = recipient.call{value: amount}("");
        require(succeed, "Failed to withdraw ETH");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint256","name":"_snipeBlockAmt","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setLPPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSniperProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"view","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"transferBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405264e8d4a510006009908155600a805460ff191682178155600b8290556200002c919062000a0f565b6009546200003b919062000a24565b600c8190556200004e9060001962000a54565b6200005c9060001962000a6b565b600d55604080518082019091526008815267446f6c616e494e5560c01b6020820152600f906200008d908262000b26565b506040805180820190915260058152642227a620a760d91b6020820152601090620000b9908262000b26565b506000601181905560125561271060138190556064601481905560158190556016829055601781905560188190556019829055601a829055601d8054731b02da8cb0d097eb8d57a175b88c7d8b479975066001600160a01b031991821617909155601e80547351ac131f926677190e399c518690842235b9672e921682179055601f8054600161ff0160a01b031916909117905560208190556021829055600c5462000166919062000a24565b62000172919062000bf2565b60225560225460235560215460205460095462000190919062000a24565b6200019c919062000bf2565b6024556064602555612710602655602654602554600c54620001bf919062000a24565b620001cb919062000bf2565b602755602754602855602654602554600954620001e9919062000a24565b620001f5919062000bf2565b602955612710600c5460056200020c919062000a24565b62000218919062000bf2565b602a55602b805461ffff191660011790556000602c819055602d819055602e5560405162003dc7388190039081908339810160408190526200025a9162000c09565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c5433600090815260026020908152604080832093909355600d546001825291839020919091556080839052601d54825163c45a015560e01b815292516001600160a01b0390911692839263c45a0155926004808401938290030181865afa1580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000333919062000c23565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000381573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a7919062000c23565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041b919062000c23565b601c80546001600160a01b03199081166001600160a01b0393841617909155601b8054909116918316919091179055600160046000620004636000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252812080549092166001908117909255600890620004bc6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308082526005938490529181208054909416600190811790945560068054808601825590825260008051602062003da78339815191520180546001600160a01b031916909217909155620005446000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556006620005816000546001600160a01b031690565b8154600181810184556000938452602080852090920180546001600160a01b039485166001600160a01b031991821617909155601e80548516865260059093526040808620805460ff199081168517909155935460068054808601825560008051602062003da78339815191529081018054861693891693909317909255601f80548816895283892080548816871790555481548087018355830180548616918916919091179055601c80548816895292882080549096168517909555905484549384018555939095529301805490931691161790556200067b620006633390565b601d54600c546001600160a01b0390911690620007ce565b60076020527f3974655cf386dd0281d59943512b6e165571102f9cb45bb0979553e0772b39858054600160ff1991821681179092557fb877ca8b0c5fe75c56db8213368dfb62c6fb4034344b04d1504b7d5f77951d2380548216831790557fbb0a2d119ce52bb7d38f8b215dbe54a42d514050121aa352f30dcef48f9d6a1480548216831790557f102656755fc8c0116fbfdf77f8422922a98f38f25570077fe627b486ced4fa3d8054821683179055730538856b6d0383cde1709c6531b9a0437185462b6000527fc6499e842fb36db155a11e95063f7ea8c317f53f6fea0380357c187943bf739680549091169091179055620007763390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620007be91815260200190565b60405180910390a3505062000c4e565b6001600160a01b038316620008365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620008995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200082d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000951578160001904821115620009355762000935620008fa565b808516156200094357918102915b93841c939080029062000915565b509250929050565b6000826200096a5750600162000a09565b81620009795750600062000a09565b81600181146200099257600281146200099d57620009bd565b600191505062000a09565b60ff841115620009b157620009b1620008fa565b50506001821b62000a09565b5060208310610133831016604e8410600b8410161715620009e2575081810a62000a09565b620009ee838362000910565b806000190482111562000a055762000a05620008fa565b0290505b92915050565b600062000a1d838362000959565b9392505050565b808202811582820484141762000a095762000a09620008fa565b634e487b7160e01b600052601260045260246000fd5b60008262000a665762000a6662000a3e565b500690565b8181038181111562000a095762000a09620008fa565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000aac57607f821691505b60208210810362000acd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b2157600081815260208120601f850160051c8101602086101562000afc5750805b601f850160051c820191505b8181101562000b1d5782815560010162000b08565b5050505b505050565b81516001600160401b0381111562000b425762000b4262000a81565b62000b5a8162000b53845462000a97565b8462000ad3565b602080601f83116001811462000b92576000841562000b795750858301515b600019600386901b1c1916600185901b17855562000b1d565b600085815260208120601f198616915b8281101562000bc35788860151825594840194600190910190840162000ba2565b508582101562000be25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008262000c045762000c0462000a3e565b500490565b60006020828403121562000c1c57600080fd5b5051919050565b60006020828403121562000c3657600080fd5b81516001600160a01b038116811462000a1d57600080fd5b60805161313d62000c6a60003960006121e5015261313d6000f3fe6080604052600436106102b25760003560e01c80634a74bb02116101755780638da5cb5b116100dc578063d7124d9f11610095578063e79d41601161006f578063e79d41601461089a578063ea2f0b37146108b0578063f2fde38b146108d0578063f6540ec7146108f057600080fd5b8063d7124d9f14610814578063dd62ed3e14610834578063de1c24d01461087a57600080fd5b80638da5cb5b146107615780638ee88c531461077f57806395d89b411461079f578063a457c2d7146107b4578063a9059cbb146107d4578063c49b9a80146107f457600080fd5b80636bc87c3a1161012e5780636bc87c3a146106bd57806370a08231146106d357806370d5ae05146106f3578063715018a61461071357806388f8202014610728578063893d20e81461076157600080fd5b80634a74bb02146105ee57806350a8e0161461060f57806352390c021461062e5780635342acb41461064e5780635d098b381461068757806364038409146106a757600080fd5b8063313ce567116102195780633f3cf56c116101d25780633f3cf56c1461052e578063437823ec1461054e578063452ed4f11461056e5780634549b0391461058e578063457c194c146105ae5780634782f779146105ce57600080fd5b8063313ce5671461046c57806333251a0b1461048e5780633685d419146104ae57806339509351146104ce5780633b3e672f146104ee5780633bd5d1731461050e57600080fd5b806315639c1b1161026b57806315639c1b146103cb57806318160ddd146103e157806322976e0d146103f657806323b872dd1461040c578063260039571461042c5780632d8381191461044c57600080fd5b8063061c82d0146102be57806306fdde03146102e05780630758d9241461030b578063095ea7b3146103435780630f3a325f1461037357806313114a9d146103ac57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d9366004612c5d565b610906565b005b3480156102ec57600080fd5b506102f561094d565b6040516103029190612c76565b60405180910390f35b34801561031757600080fd5b50601b5461032b906001600160a01b031681565b6040516001600160a01b039091168152602001610302565b34801561034f57600080fd5b5061036361035e366004612cdc565b6109df565b6040519015158152602001610302565b34801561037f57600080fd5b5061036361038e366004612d08565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156103b857600080fd5b50600e545b604051908152602001610302565b3480156103d757600080fd5b506103bd60115481565b3480156103ed57600080fd5b50600c546103bd565b34801561040257600080fd5b506103bd60175481565b34801561041857600080fd5b50610363610427366004612d25565b6109f6565b34801561043857600080fd5b506102de610447366004612d66565b610a5f565b34801561045857600080fd5b506103bd610467366004612c5d565b610ad4565b34801561047857600080fd5b50600a5460405160ff9091168152602001610302565b34801561049a57600080fd5b506102de6104a9366004612d08565b610b58565b3480156104ba57600080fd5b506102de6104c9366004612d08565b610c15565b3480156104da57600080fd5b506103636104e9366004612cdc565b610dcb565b3480156104fa57600080fd5b50610363610509366004612dd4565b610e01565b34801561051a57600080fd5b506102de610529366004612c5d565b610ed8565b34801561053a57600080fd5b506102de610549366004612d66565b610fc2565b34801561055a57600080fd5b506102de610569366004612d08565b611031565b34801561057a57600080fd5b50601c5461032b906001600160a01b031681565b34801561059a57600080fd5b506103bd6105a9366004612e55565b61107f565b3480156105ba57600080fd5b506102de6105c9366004612c5d565b61110c565b3480156105da57600080fd5b506102de6105e9366004612cdc565b61114a565b3480156105fa57600080fd5b50601f5461036390600160a81b900460ff1681565b34801561061b57600080fd5b50602b5461036390610100900460ff1681565b34801561063a57600080fd5b506102de610649366004612d08565b611218565b34801561065a57600080fd5b50610363610669366004612d08565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561069357600080fd5b506102de6106a2366004612d08565b61136b565b3480156106b357600080fd5b506103bd60245481565b3480156106c957600080fd5b506103bd60145481565b3480156106df57600080fd5b506103bd6106ee366004612d08565b61140a565b3480156106ff57600080fd5b50601e5461032b906001600160a01b031681565b34801561071f57600080fd5b506102de611469565b34801561073457600080fd5b50610363610743366004612d08565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561076d57600080fd5b506000546001600160a01b031661032b565b34801561078b57600080fd5b506102de61079a366004612c5d565b6114dd565b3480156107ab57600080fd5b506102f561151b565b3480156107c057600080fd5b506103636107cf366004612cdc565b61152a565b3480156107e057600080fd5b506103636107ef366004612cdc565b611579565b34801561080057600080fd5b506102de61080f366004612e81565b611586565b34801561082057600080fd5b506102de61082f366004612e81565b611608565b34801561084057600080fd5b506103bd61084f366004612e9c565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561088657600080fd5b506102de610895366004612d08565b61168c565b3480156108a657600080fd5b506103bd602e5481565b3480156108bc57600080fd5b506102de6108cb366004612d08565b6116d8565b3480156108dc57600080fd5b506102de6108eb366004612d08565b611723565b3480156108fc57600080fd5b506103bd60295481565b6000546001600160a01b031633146109395760405162461bcd60e51b815260040161093090612ed5565b60405180910390fd5b60135481111561094857600080fd5b601155565b6060600f805461095c90612f0a565b80601f016020809104026020016040519081016040528092919081815260200182805461098890612f0a565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b60006109ec33848461180d565b5060015b92915050565b6000610a03848484611931565b610a558433610a50856040518060600160405280602881526020016130bb602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611c63565b61180d565b5060019392505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b815260040161093090612ed5565b6103e8811115610a9857600080fd5b610ab781610ab184600c54611c9d90919063ffffffff16565b90611d1f565b602755600954610acd908290610ab19085611c9d565b6029555050565b6000600d54821115610b3b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610930565b6000610b45611d61565b9050610b518382611d1f565b9392505050565b6000546001600160a01b03163314610b825760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03811660009081526007602052604090205460ff16610bf45760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610930565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610c3f5760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03811660009081526005602052604090205460ff16610ca75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610930565b60005b600654811015610dc757816001600160a01b031660068281548110610cd157610cd1612f44565b6000918252602090912001546001600160a01b031603610db55760068054610cfb90600190612f70565b81548110610d0b57610d0b612f44565b600091825260209091200154600680546001600160a01b039092169183908110610d3757610d37612f44565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610d8f57610d8f612f83565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dbf81612f99565b915050610caa565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916109ec918590610a509086611d84565b6000838214610e5c5760405162461bcd60e51b815260206004820152602160248201527f4d757374206265206d61746368696e6720617267756d656e74206c656e6774686044820152607360f81b6064820152608401610930565b8360005b81811015610ecb57610eb0878783818110610e7d57610e7d612f44565b9050602002016020810190610e929190612d08565b868684818110610ea457610ea4612f44565b90506020020135611579565b610eb957600080fd5b80610ec381612f99565b915050610e60565b5060019695505050505050565b3360008181526005602052604090205460ff1615610f4d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610930565b6000610f5883611de3565b505050506001600160a01b038416600090815260016020526040902054919250610f8491905082611e32565b6001600160a01b038316600090815260016020526040902055600d54610faa9082611e32565b600d55600e54610fba9084611d84565b600e55505050565b6000546001600160a01b03163314610fec5760405162461bcd60e51b815260040161093090612ed5565b612710811115610ffb57600080fd5b61101481610ab184600c54611c9d90919063ffffffff16565b60225560095461102a908290610ab19085611c9d565b6024555050565b6000546001600160a01b0316331461105b5760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c548311156110d35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610930565b816110f25760006110e384611de3565b509395506109f0945050505050565b60006110fd84611de3565b509295506109f0945050505050565b6000546001600160a01b031633146111365760405162461bcd60e51b815260040161093090612ed5565b60195481111561114557600080fd5b601755565b6000546001600160a01b031633146111745760405162461bcd60e51b815260040161093090612ed5565b600080836001600160a01b03168360405160006040518083038185875af1925050503d80600081146111c2576040519150601f19603f3d011682016040523d82523d6000602084013e6111c7565b606091505b5091509150816112125760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40eed2e8d0c8e4c2ee408aa8960531b6044820152606401610930565b50505050565b6000546001600160a01b031633146112425760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03811660009081526005602052604090205460ff16156112ab5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610930565b6001600160a01b03811660009081526001602052604090205415611305576001600160a01b0381166000908152600160205260409020546112eb90610ad4565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113955760405162461bcd60e51b815260040161093090612ed5565b601f546001600160a01b038083169116036113e85760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610930565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff161561144757506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546109f090610ad4565b6000546001600160a01b031633146114935760405162461bcd60e51b815260040161093090612ed5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115075760405162461bcd60e51b815260040161093090612ed5565b60165481111561151657600080fd5b601455565b60606010805461095c90612f0a565b60006109ec3384610a50856040518060600160405280602581526020016130e3602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611c63565b60006109ec338484611931565b6000546001600160a01b031633146115b05760405162461bcd60e51b815260040161093090612ed5565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115fd90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116325760405162461bcd60e51b815260040161093090612ed5565b602b5460ff161515811515036116795760405162461bcd60e51b815260206004820152600c60248201526b20b63932b0b23c9039b2ba1760a11b6044820152606401610930565b602b805460ff1916911515919091179055565b6000546001600160a01b031633146116b65760405162461bcd60e51b815260040161093090612ed5565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117025760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461174d5760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b0381166117b25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610930565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661186f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610930565b6001600160a01b0382166118d05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610930565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119955760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610930565b6001600160a01b0382166119f75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610930565b60008111611a595760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610930565b611a638383611e74565b15611acb57602254811115611acb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610930565b611ad58383611e74565b8015611aef5750601d546001600160a01b03838116911614155b8015611b095750601c546001600160a01b03838116911614155b15611b8c576000611b198361140a565b602754909150611b298383612fb2565b1115611b8a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610930565b505b6000611b973061140a565b90506022548110611ba757506022545b602a54601f549082101590600160a01b900460ff16158015611bd65750601c546001600160a01b038581169116145b8015611beb5750601f54600160a81b900460ff165b15611c04578015611c0457602a549150611c0482611f31565b6001600160a01b03851660009081526004602052604090205460019060ff1680611c4657506001600160a01b03851660009081526004602052604090205460ff165b15611c4f575060005b611c5b8686868461208e565b505050505050565b60008184841115611c875760405162461bcd60e51b81526004016109309190612c76565b506000611c948486612f70565b95945050505050565b600082600003611caf575060006109f0565b6000611cbb8385612fc5565b905082611cc88583612fdc565b14610b515760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610930565b6000610b5183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122bf565b6000806000611d6e6122ed565b9092509050611d7d8282611d1f565b9250505090565b600080611d918385612fb2565b905083811015610b515760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610930565b6000806000806000806000806000611dfa8a61246f565b9250925092506000806000611e188d8686611e13611d61565b6124b1565b919f909e50909c50959a5093985091965092945050505050565b6000610b5183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c63565b600080546001600160a01b03848116911614801590611ea157506000546001600160a01b03838116911614155b8015611ec657506001600160a01b03821660009081526008602052604090205460ff16155b8015611eeb57506001600160a01b03831660009081526008602052604090205460ff16155b8015611f055750601e546001600160a01b03838116911614155b8015611f1957506001600160a01b03821615155b8015610b51575050506001600160a01b031630141590565b601f805460ff60a01b1916600160a01b179055601454601754611f549190612fb2565b1561207e576000611f83611f75601454601754611d8490919063ffffffff16565b601754610ab1908590611c9d565b90506000611f918383611e32565b90506000611fa0826002611d1f565b90506000611fae8383611e32565b9050476000611fbd8487611d84565b9050611fc881612501565b6000611fd44784611e32565b90506000611fe683610ab18489611c9d565b9050611ff28582612653565b60408051878152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1601f546001600160a01b03166108fc61204c8484611e32565b6040518115909202916000818181858888f19350505050158015612074573d6000803e3d6000fd5b5050505050505050505b50601f805460ff60a01b19169055565b602b5460ff161561228b576001600160a01b03841660009081526007602052604090205460ff16806120d857506001600160a01b03831660009081526007602052604090205460ff165b156121185760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610930565b602b54610100900460ff166121ae576121318484612707565b602b54610100900460ff1615801561214e575061214e8484611e74565b156121a95760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610930565b61228b565b6000602c541180156121cd5750601c546001600160a01b038581169116145b80156121de57506121de8484611e74565b1561228b577f0000000000000000000000000000000000000000000000000000000000000000602c54436122129190612f70565b101561228b576001600160a01b0383166000908152600760205260408120805460ff19166001179055602e80549161224983612f99565b90915550506040516001600160a01b03841681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b8061229857612298612825565b6122a384848461285e565b8061121257611212601254601155601554601455601854601755565b600081836122e05760405162461bcd60e51b81526004016109309190612c76565b506000611c948486612fdc565b600d54600c546000918291825b60065481101561243f5782600160006006848154811061231c5761231c612f44565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612387575081600260006006848154811061236057612360612f44565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561239d57600d54600c54945094505050509091565b6123e360016000600684815481106123b7576123b7612f44565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e32565b925061242b60026000600684815481106123ff576123ff612f44565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e32565b91508061243781612f99565b9150506122fa565b50600c54600d5461244f91611d1f565b82101561246657600d54600c549350935050509091565b90939092509050565b60008060008061247e85612b29565b9050600061248b86612b46565b905060006124a38261249d8986611e32565b90611e32565b979296509094509092505050565b60008080806124c08886611c9d565b905060006124ce8887611c9d565b905060006124dc8888611c9d565b905060006124ee8261249d8686611e32565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061253657612536612f44565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b39190612ffe565b816001815181106125c6576125c6612f44565b6001600160a01b039283166020918202929092010152601b546125ec913091168461180d565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061262590859060009086903090429060040161301b565b600060405180830381600087803b15801561263f57600080fd5b505af1158015611c5b573d6000803e3d6000fd5b601b5461266b9030906001600160a01b03168461180d565b601b54601e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156126db573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612700919061308c565b5050505050565b602b54610100900460ff161561276b5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610930565b6127758282611e74565b15801561278f5750601c546001600160a01b038281169116145b15610dc7576001600160a01b03821660009081526008602052604090819020805460ff19166001908117909155602b805461ff00191661010017905543602c5542602d55601f805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161281991901515815260200190565b60405180910390a15050565b6011541580156128355750601454155b1561283c57565b6011805460125560148054601555601780546018556000928390559082905555565b60008060008060008061287087611de3565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506128a29087611e32565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546128d19086611d84565b6001600160a01b03808a16600090815260016020908152604080832094909455918c1681526005909152205460ff16801561292557506001600160a01b03881660009081526005602052604090205460ff16155b1561296b576001600160a01b03891660009081526002602052604090205461294d9088611e32565b6001600160a01b038a16600090815260026020526040902055612aa3565b6001600160a01b03891660009081526005602052604090205460ff161580156129ac57506001600160a01b03881660009081526005602052604090205460ff165b156129f2576001600160a01b0388166000908152600260205260409020546129d49084611d84565b6001600160a01b038916600090815260026020526040902055612aa3565b6001600160a01b03891660009081526005602052604090205460ff168015612a3257506001600160a01b03881660009081526005602052604090205460ff165b15612aa3576001600160a01b038916600090815260026020526040902054612a5a9088611e32565b6001600160a01b03808b1660009081526002602052604080822093909355908a1681522054612a899084611d84565b6001600160a01b0389166000908152600260205260409020555b8015612ab357612ab38982612b6f565b6000841180612ac25750600082115b15612ad157612ad18483612c39565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b1691815260200190565b60405180910390a3505050505050505050565b60006109f0601a54610ab160115485611c9d90919063ffffffff16565b60006109f0601a54610ab1612b68601754601454611d8490919063ffffffff16565b8590611c9d565b6000612b79611d61565b90506000612b878383611c9d565b30600090815260016020526040902054909150612ba49082611d84565b3060009081526001602090815260408083209390935560059052205460ff1615612bf35730600090815260026020526040902054612be29084611d84565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b600d54612c469083611e32565b600d55600e54612c569082611d84565b600e555050565b600060208284031215612c6f57600080fd5b5035919050565b600060208083528351808285015260005b81811015612ca357858101830151858201604001528201612c87565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612cd957600080fd5b50565b60008060408385031215612cef57600080fd5b8235612cfa81612cc4565b946020939093013593505050565b600060208284031215612d1a57600080fd5b8135610b5181612cc4565b600080600060608486031215612d3a57600080fd5b8335612d4581612cc4565b92506020840135612d5581612cc4565b929592945050506040919091013590565b60008060408385031215612d7957600080fd5b50508035926020909101359150565b60008083601f840112612d9a57600080fd5b50813567ffffffffffffffff811115612db257600080fd5b6020830191508360208260051b8501011115612dcd57600080fd5b9250929050565b60008060008060408587031215612dea57600080fd5b843567ffffffffffffffff80821115612e0257600080fd5b612e0e88838901612d88565b90965094506020870135915080821115612e2757600080fd5b50612e3487828801612d88565b95989497509550505050565b80358015158114612e5057600080fd5b919050565b60008060408385031215612e6857600080fd5b82359150612e7860208401612e40565b90509250929050565b600060208284031215612e9357600080fd5b610b5182612e40565b60008060408385031215612eaf57600080fd5b8235612eba81612cc4565b91506020830135612eca81612cc4565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612f1e57607f821691505b602082108103612f3e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156109f0576109f0612f5a565b634e487b7160e01b600052603160045260246000fd5b600060018201612fab57612fab612f5a565b5060010190565b808201808211156109f0576109f0612f5a565b80820281158282048414176109f0576109f0612f5a565b600082612ff957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561301057600080fd5b8151610b5181612cc4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561306b5784516001600160a01b031683529383019391830191600101613046565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156130a157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204c15addb8048632b99acd0a03f4a236d7d178b0d2da22f0f0542583bf36fdc9664736f6c63430008120033f652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80634a74bb02116101755780638da5cb5b116100dc578063d7124d9f11610095578063e79d41601161006f578063e79d41601461089a578063ea2f0b37146108b0578063f2fde38b146108d0578063f6540ec7146108f057600080fd5b8063d7124d9f14610814578063dd62ed3e14610834578063de1c24d01461087a57600080fd5b80638da5cb5b146107615780638ee88c531461077f57806395d89b411461079f578063a457c2d7146107b4578063a9059cbb146107d4578063c49b9a80146107f457600080fd5b80636bc87c3a1161012e5780636bc87c3a146106bd57806370a08231146106d357806370d5ae05146106f3578063715018a61461071357806388f8202014610728578063893d20e81461076157600080fd5b80634a74bb02146105ee57806350a8e0161461060f57806352390c021461062e5780635342acb41461064e5780635d098b381461068757806364038409146106a757600080fd5b8063313ce567116102195780633f3cf56c116101d25780633f3cf56c1461052e578063437823ec1461054e578063452ed4f11461056e5780634549b0391461058e578063457c194c146105ae5780634782f779146105ce57600080fd5b8063313ce5671461046c57806333251a0b1461048e5780633685d419146104ae57806339509351146104ce5780633b3e672f146104ee5780633bd5d1731461050e57600080fd5b806315639c1b1161026b57806315639c1b146103cb57806318160ddd146103e157806322976e0d146103f657806323b872dd1461040c578063260039571461042c5780632d8381191461044c57600080fd5b8063061c82d0146102be57806306fdde03146102e05780630758d9241461030b578063095ea7b3146103435780630f3a325f1461037357806313114a9d146103ac57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d9366004612c5d565b610906565b005b3480156102ec57600080fd5b506102f561094d565b6040516103029190612c76565b60405180910390f35b34801561031757600080fd5b50601b5461032b906001600160a01b031681565b6040516001600160a01b039091168152602001610302565b34801561034f57600080fd5b5061036361035e366004612cdc565b6109df565b6040519015158152602001610302565b34801561037f57600080fd5b5061036361038e366004612d08565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156103b857600080fd5b50600e545b604051908152602001610302565b3480156103d757600080fd5b506103bd60115481565b3480156103ed57600080fd5b50600c546103bd565b34801561040257600080fd5b506103bd60175481565b34801561041857600080fd5b50610363610427366004612d25565b6109f6565b34801561043857600080fd5b506102de610447366004612d66565b610a5f565b34801561045857600080fd5b506103bd610467366004612c5d565b610ad4565b34801561047857600080fd5b50600a5460405160ff9091168152602001610302565b34801561049a57600080fd5b506102de6104a9366004612d08565b610b58565b3480156104ba57600080fd5b506102de6104c9366004612d08565b610c15565b3480156104da57600080fd5b506103636104e9366004612cdc565b610dcb565b3480156104fa57600080fd5b50610363610509366004612dd4565b610e01565b34801561051a57600080fd5b506102de610529366004612c5d565b610ed8565b34801561053a57600080fd5b506102de610549366004612d66565b610fc2565b34801561055a57600080fd5b506102de610569366004612d08565b611031565b34801561057a57600080fd5b50601c5461032b906001600160a01b031681565b34801561059a57600080fd5b506103bd6105a9366004612e55565b61107f565b3480156105ba57600080fd5b506102de6105c9366004612c5d565b61110c565b3480156105da57600080fd5b506102de6105e9366004612cdc565b61114a565b3480156105fa57600080fd5b50601f5461036390600160a81b900460ff1681565b34801561061b57600080fd5b50602b5461036390610100900460ff1681565b34801561063a57600080fd5b506102de610649366004612d08565b611218565b34801561065a57600080fd5b50610363610669366004612d08565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561069357600080fd5b506102de6106a2366004612d08565b61136b565b3480156106b357600080fd5b506103bd60245481565b3480156106c957600080fd5b506103bd60145481565b3480156106df57600080fd5b506103bd6106ee366004612d08565b61140a565b3480156106ff57600080fd5b50601e5461032b906001600160a01b031681565b34801561071f57600080fd5b506102de611469565b34801561073457600080fd5b50610363610743366004612d08565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561076d57600080fd5b506000546001600160a01b031661032b565b34801561078b57600080fd5b506102de61079a366004612c5d565b6114dd565b3480156107ab57600080fd5b506102f561151b565b3480156107c057600080fd5b506103636107cf366004612cdc565b61152a565b3480156107e057600080fd5b506103636107ef366004612cdc565b611579565b34801561080057600080fd5b506102de61080f366004612e81565b611586565b34801561082057600080fd5b506102de61082f366004612e81565b611608565b34801561084057600080fd5b506103bd61084f366004612e9c565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561088657600080fd5b506102de610895366004612d08565b61168c565b3480156108a657600080fd5b506103bd602e5481565b3480156108bc57600080fd5b506102de6108cb366004612d08565b6116d8565b3480156108dc57600080fd5b506102de6108eb366004612d08565b611723565b3480156108fc57600080fd5b506103bd60295481565b6000546001600160a01b031633146109395760405162461bcd60e51b815260040161093090612ed5565b60405180910390fd5b60135481111561094857600080fd5b601155565b6060600f805461095c90612f0a565b80601f016020809104026020016040519081016040528092919081815260200182805461098890612f0a565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b60006109ec33848461180d565b5060015b92915050565b6000610a03848484611931565b610a558433610a50856040518060600160405280602881526020016130bb602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611c63565b61180d565b5060019392505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b815260040161093090612ed5565b6103e8811115610a9857600080fd5b610ab781610ab184600c54611c9d90919063ffffffff16565b90611d1f565b602755600954610acd908290610ab19085611c9d565b6029555050565b6000600d54821115610b3b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610930565b6000610b45611d61565b9050610b518382611d1f565b9392505050565b6000546001600160a01b03163314610b825760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03811660009081526007602052604090205460ff16610bf45760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610930565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610c3f5760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03811660009081526005602052604090205460ff16610ca75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610930565b60005b600654811015610dc757816001600160a01b031660068281548110610cd157610cd1612f44565b6000918252602090912001546001600160a01b031603610db55760068054610cfb90600190612f70565b81548110610d0b57610d0b612f44565b600091825260209091200154600680546001600160a01b039092169183908110610d3757610d37612f44565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610d8f57610d8f612f83565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dbf81612f99565b915050610caa565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916109ec918590610a509086611d84565b6000838214610e5c5760405162461bcd60e51b815260206004820152602160248201527f4d757374206265206d61746368696e6720617267756d656e74206c656e6774686044820152607360f81b6064820152608401610930565b8360005b81811015610ecb57610eb0878783818110610e7d57610e7d612f44565b9050602002016020810190610e929190612d08565b868684818110610ea457610ea4612f44565b90506020020135611579565b610eb957600080fd5b80610ec381612f99565b915050610e60565b5060019695505050505050565b3360008181526005602052604090205460ff1615610f4d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610930565b6000610f5883611de3565b505050506001600160a01b038416600090815260016020526040902054919250610f8491905082611e32565b6001600160a01b038316600090815260016020526040902055600d54610faa9082611e32565b600d55600e54610fba9084611d84565b600e55505050565b6000546001600160a01b03163314610fec5760405162461bcd60e51b815260040161093090612ed5565b612710811115610ffb57600080fd5b61101481610ab184600c54611c9d90919063ffffffff16565b60225560095461102a908290610ab19085611c9d565b6024555050565b6000546001600160a01b0316331461105b5760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c548311156110d35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610930565b816110f25760006110e384611de3565b509395506109f0945050505050565b60006110fd84611de3565b509295506109f0945050505050565b6000546001600160a01b031633146111365760405162461bcd60e51b815260040161093090612ed5565b60195481111561114557600080fd5b601755565b6000546001600160a01b031633146111745760405162461bcd60e51b815260040161093090612ed5565b600080836001600160a01b03168360405160006040518083038185875af1925050503d80600081146111c2576040519150601f19603f3d011682016040523d82523d6000602084013e6111c7565b606091505b5091509150816112125760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40eed2e8d0c8e4c2ee408aa8960531b6044820152606401610930565b50505050565b6000546001600160a01b031633146112425760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03811660009081526005602052604090205460ff16156112ab5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610930565b6001600160a01b03811660009081526001602052604090205415611305576001600160a01b0381166000908152600160205260409020546112eb90610ad4565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113955760405162461bcd60e51b815260040161093090612ed5565b601f546001600160a01b038083169116036113e85760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610930565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff161561144757506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546109f090610ad4565b6000546001600160a01b031633146114935760405162461bcd60e51b815260040161093090612ed5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115075760405162461bcd60e51b815260040161093090612ed5565b60165481111561151657600080fd5b601455565b60606010805461095c90612f0a565b60006109ec3384610a50856040518060600160405280602581526020016130e3602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611c63565b60006109ec338484611931565b6000546001600160a01b031633146115b05760405162461bcd60e51b815260040161093090612ed5565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115fd90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116325760405162461bcd60e51b815260040161093090612ed5565b602b5460ff161515811515036116795760405162461bcd60e51b815260206004820152600c60248201526b20b63932b0b23c9039b2ba1760a11b6044820152606401610930565b602b805460ff1916911515919091179055565b6000546001600160a01b031633146116b65760405162461bcd60e51b815260040161093090612ed5565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117025760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461174d5760405162461bcd60e51b815260040161093090612ed5565b6001600160a01b0381166117b25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610930565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661186f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610930565b6001600160a01b0382166118d05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610930565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119955760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610930565b6001600160a01b0382166119f75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610930565b60008111611a595760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610930565b611a638383611e74565b15611acb57602254811115611acb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610930565b611ad58383611e74565b8015611aef5750601d546001600160a01b03838116911614155b8015611b095750601c546001600160a01b03838116911614155b15611b8c576000611b198361140a565b602754909150611b298383612fb2565b1115611b8a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610930565b505b6000611b973061140a565b90506022548110611ba757506022545b602a54601f549082101590600160a01b900460ff16158015611bd65750601c546001600160a01b038581169116145b8015611beb5750601f54600160a81b900460ff165b15611c04578015611c0457602a549150611c0482611f31565b6001600160a01b03851660009081526004602052604090205460019060ff1680611c4657506001600160a01b03851660009081526004602052604090205460ff165b15611c4f575060005b611c5b8686868461208e565b505050505050565b60008184841115611c875760405162461bcd60e51b81526004016109309190612c76565b506000611c948486612f70565b95945050505050565b600082600003611caf575060006109f0565b6000611cbb8385612fc5565b905082611cc88583612fdc565b14610b515760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610930565b6000610b5183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122bf565b6000806000611d6e6122ed565b9092509050611d7d8282611d1f565b9250505090565b600080611d918385612fb2565b905083811015610b515760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610930565b6000806000806000806000806000611dfa8a61246f565b9250925092506000806000611e188d8686611e13611d61565b6124b1565b919f909e50909c50959a5093985091965092945050505050565b6000610b5183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c63565b600080546001600160a01b03848116911614801590611ea157506000546001600160a01b03838116911614155b8015611ec657506001600160a01b03821660009081526008602052604090205460ff16155b8015611eeb57506001600160a01b03831660009081526008602052604090205460ff16155b8015611f055750601e546001600160a01b03838116911614155b8015611f1957506001600160a01b03821615155b8015610b51575050506001600160a01b031630141590565b601f805460ff60a01b1916600160a01b179055601454601754611f549190612fb2565b1561207e576000611f83611f75601454601754611d8490919063ffffffff16565b601754610ab1908590611c9d565b90506000611f918383611e32565b90506000611fa0826002611d1f565b90506000611fae8383611e32565b9050476000611fbd8487611d84565b9050611fc881612501565b6000611fd44784611e32565b90506000611fe683610ab18489611c9d565b9050611ff28582612653565b60408051878152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1601f546001600160a01b03166108fc61204c8484611e32565b6040518115909202916000818181858888f19350505050158015612074573d6000803e3d6000fd5b5050505050505050505b50601f805460ff60a01b19169055565b602b5460ff161561228b576001600160a01b03841660009081526007602052604090205460ff16806120d857506001600160a01b03831660009081526007602052604090205460ff165b156121185760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610930565b602b54610100900460ff166121ae576121318484612707565b602b54610100900460ff1615801561214e575061214e8484611e74565b156121a95760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610930565b61228b565b6000602c541180156121cd5750601c546001600160a01b038581169116145b80156121de57506121de8484611e74565b1561228b577f0000000000000000000000000000000000000000000000000000000000000000602c54436122129190612f70565b101561228b576001600160a01b0383166000908152600760205260408120805460ff19166001179055602e80549161224983612f99565b90915550506040516001600160a01b03841681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b8061229857612298612825565b6122a384848461285e565b8061121257611212601254601155601554601455601854601755565b600081836122e05760405162461bcd60e51b81526004016109309190612c76565b506000611c948486612fdc565b600d54600c546000918291825b60065481101561243f5782600160006006848154811061231c5761231c612f44565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612387575081600260006006848154811061236057612360612f44565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561239d57600d54600c54945094505050509091565b6123e360016000600684815481106123b7576123b7612f44565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e32565b925061242b60026000600684815481106123ff576123ff612f44565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e32565b91508061243781612f99565b9150506122fa565b50600c54600d5461244f91611d1f565b82101561246657600d54600c549350935050509091565b90939092509050565b60008060008061247e85612b29565b9050600061248b86612b46565b905060006124a38261249d8986611e32565b90611e32565b979296509094509092505050565b60008080806124c08886611c9d565b905060006124ce8887611c9d565b905060006124dc8888611c9d565b905060006124ee8261249d8686611e32565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061253657612536612f44565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b39190612ffe565b816001815181106125c6576125c6612f44565b6001600160a01b039283166020918202929092010152601b546125ec913091168461180d565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061262590859060009086903090429060040161301b565b600060405180830381600087803b15801561263f57600080fd5b505af1158015611c5b573d6000803e3d6000fd5b601b5461266b9030906001600160a01b03168461180d565b601b54601e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156126db573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612700919061308c565b5050505050565b602b54610100900460ff161561276b5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610930565b6127758282611e74565b15801561278f5750601c546001600160a01b038281169116145b15610dc7576001600160a01b03821660009081526008602052604090819020805460ff19166001908117909155602b805461ff00191661010017905543602c5542602d55601f805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161281991901515815260200190565b60405180910390a15050565b6011541580156128355750601454155b1561283c57565b6011805460125560148054601555601780546018556000928390559082905555565b60008060008060008061287087611de3565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506128a29087611e32565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546128d19086611d84565b6001600160a01b03808a16600090815260016020908152604080832094909455918c1681526005909152205460ff16801561292557506001600160a01b03881660009081526005602052604090205460ff16155b1561296b576001600160a01b03891660009081526002602052604090205461294d9088611e32565b6001600160a01b038a16600090815260026020526040902055612aa3565b6001600160a01b03891660009081526005602052604090205460ff161580156129ac57506001600160a01b03881660009081526005602052604090205460ff165b156129f2576001600160a01b0388166000908152600260205260409020546129d49084611d84565b6001600160a01b038916600090815260026020526040902055612aa3565b6001600160a01b03891660009081526005602052604090205460ff168015612a3257506001600160a01b03881660009081526005602052604090205460ff165b15612aa3576001600160a01b038916600090815260026020526040902054612a5a9088611e32565b6001600160a01b03808b1660009081526002602052604080822093909355908a1681522054612a899084611d84565b6001600160a01b0389166000908152600260205260409020555b8015612ab357612ab38982612b6f565b6000841180612ac25750600082115b15612ad157612ad18483612c39565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b1691815260200190565b60405180910390a3505050505050505050565b60006109f0601a54610ab160115485611c9d90919063ffffffff16565b60006109f0601a54610ab1612b68601754601454611d8490919063ffffffff16565b8590611c9d565b6000612b79611d61565b90506000612b878383611c9d565b30600090815260016020526040902054909150612ba49082611d84565b3060009081526001602090815260408083209390935560059052205460ff1615612bf35730600090815260026020526040902054612be29084611d84565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b600d54612c469083611e32565b600d55600e54612c569082611d84565b600e555050565b600060208284031215612c6f57600080fd5b5035919050565b600060208083528351808285015260005b81811015612ca357858101830151858201604001528201612c87565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612cd957600080fd5b50565b60008060408385031215612cef57600080fd5b8235612cfa81612cc4565b946020939093013593505050565b600060208284031215612d1a57600080fd5b8135610b5181612cc4565b600080600060608486031215612d3a57600080fd5b8335612d4581612cc4565b92506020840135612d5581612cc4565b929592945050506040919091013590565b60008060408385031215612d7957600080fd5b50508035926020909101359150565b60008083601f840112612d9a57600080fd5b50813567ffffffffffffffff811115612db257600080fd5b6020830191508360208260051b8501011115612dcd57600080fd5b9250929050565b60008060008060408587031215612dea57600080fd5b843567ffffffffffffffff80821115612e0257600080fd5b612e0e88838901612d88565b90965094506020870135915080821115612e2757600080fd5b50612e3487828801612d88565b95989497509550505050565b80358015158114612e5057600080fd5b919050565b60008060408385031215612e6857600080fd5b82359150612e7860208401612e40565b90509250929050565b600060208284031215612e9357600080fd5b610b5182612e40565b60008060408385031215612eaf57600080fd5b8235612eba81612cc4565b91506020830135612eca81612cc4565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612f1e57607f821691505b602082108103612f3e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156109f0576109f0612f5a565b634e487b7160e01b600052603160045260246000fd5b600060018201612fab57612fab612f5a565b5060010190565b808201808211156109f0576109f0612f5a565b80820281158282048414176109f0576109f0612f5a565b600082612ff957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561301057600080fd5b8151610b5181612cc4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561306b5784516001600160a01b031683529383019391830191600101613046565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156130a157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204c15addb8048632b99acd0a03f4a236d7d178b0d2da22f0f0542583bf36fdc9664736f6c63430008120033

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

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _snipeBlockAmt (uint256): 0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

15290:23908:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23865:194;;;;;;;;;;-1:-1:-1;23865:194:0;;;;;:::i;:::-;;:::i;:::-;;20910:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16992:26;;;;;;;;;;-1:-1:-1;16992:26:0;;;;-1:-1:-1;;;;;16992:26:0;;;;;;-1:-1:-1;;;;;933:32:1;;;915:51;;903:2;888:18;16992:26:0;752:220:1;21604:161:0;;;;;;;;;;-1:-1:-1;21604:161:0;;;;;:::i;:::-;;:::i;:::-;;;1598:14:1;;1591:22;1573:41;;1561:2;1546:18;21604:161:0;1433:187:1;23372:106:0;;;;;;;;;;-1:-1:-1;23372:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;23452:18:0;23428:4;23452:18;;;:9;:18;;;;;;;;;23372:106;25720:87;;;;;;;;;;-1:-1:-1;25789:10:0;;25720:87;;;2023:25:1;;;2011:2;1996:18;25720:87:0;1877:177:1;16297:30:0;;;;;;;;;;;;;;;;20645:83;;;;;;;;;;-1:-1:-1;20718:7:0;;20645:83;;16691:34;;;;;;;;;;;;;;;;21773:313;;;;;;;;;;-1:-1:-1;21773:313:0;;;;;:::i;:::-;;:::i;24796:284::-;;;;;;;;;;-1:-1:-1;24796:284:0;;;;;:::i;:::-;;:::i;26982:253::-;;;;;;;;;;-1:-1:-1;26982:253:0;;;;;:::i;:::-;;:::i;20734:80::-;;;;;;;;;;-1:-1:-1;20802:9:0;;20734:80;;20802:9;;;;2915:36:1;;2903:2;2888:18;20734:80:0;2773:184:1;23486:180:0;;;;;;;;;;-1:-1:-1;23486:180:0;;;;;:::i;:::-;;:::i;27698:479::-;;;;;;;;;;-1:-1:-1;27698:479:0;;;;;:::i;:::-;;:::i;22518:218::-;;;;;;;;;;-1:-1:-1;22518:218:0;;;;;:::i;:::-;;:::i;22094:416::-;;;;;;;;;;-1:-1:-1;22094:416:0;;;;;:::i;:::-;;:::i;26153:377::-;;;;;;;;;;-1:-1:-1;26153:377:0;;;;;:::i;:::-;;:::i;24507:281::-;;;;;;;;;;-1:-1:-1;24507:281:0;;;;;:::i;:::-;;:::i;25477:111::-;;;;;;;;;;-1:-1:-1;25477:111:0;;;;;:::i;:::-;;:::i;17025:21::-;;;;;;;;;;-1:-1:-1;17025:21:0;;;;-1:-1:-1;;;;;17025:21:0;;;26538:436;;;;;;;;;;-1:-1:-1;26538:436:0;;;;;:::i;:::-;;:::i;24289:210::-;;;;;;;;;;-1:-1:-1;24289:210:0;;;;;:::i;:::-;;:::i;38972:223::-;;;;;;;;;;-1:-1:-1;38972:223:0;;;;;:::i;:::-;;:::i;17373:41::-;;;;;;;;;;-1:-1:-1;17373:41:0;;;;-1:-1:-1;;;17373:41:0;;;;;;18421:36;;;;;;;;;;-1:-1:-1;18421:36:0;;;;;;;;;;;27243:447;;;;;;;;;;-1:-1:-1;27243:447:0;;;;;:::i;:::-;;:::i;23241:123::-;;;;;;;;;;-1:-1:-1;23241:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23329:27:0;23305:4;23329:27;;;:18;:27;;;;;;;;;23241:123;25088:202;;;;;;;;;;-1:-1:-1;25088:202:0;;;;;:::i;:::-;;:::i;17718:77::-;;;;;;;;;;;;;;;;16491:34;;;;;;;;;;;;;;;;21223:198;;;;;;;;;;-1:-1:-1;21223:198:0;;;;;:::i;:::-;;:::i;17160:71::-;;;;;;;;;;-1:-1:-1;17160:71:0;;;;-1:-1:-1;;;;;17160:71:0;;;14867:148;;;;;;;;;;;;;:::i;23113:120::-;;;;;;;;;;-1:-1:-1;23113:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23205:20:0;23181:4;23205:20;;;:11;:20;;;;;;;;;23113:120;20996:80;;;;;;;;;;-1:-1:-1;21048:7:0;14718:6;-1:-1:-1;;;;;14718:6:0;20996:80;;24071:210;;;;;;;;;;-1:-1:-1;24071:210:0;;;;;:::i;:::-;;:::i;20820:84::-;;;;;;;;;;;;;:::i;22744:269::-;;;;;;;;;;-1:-1:-1;22744:269:0;;;;;:::i;:::-;;:::i;21429:167::-;;;;;;;;;;-1:-1:-1;21429:167:0;;;;;:::i;:::-;;:::i;25298:171::-;;;;;;;;;;-1:-1:-1;25298:171:0;;;;;:::i;:::-;;:::i;23674:179::-;;;;;;;;;;-1:-1:-1;23674:179:0;;;;;:::i;:::-;;:::i;21082:133::-;;;;;;;;;;-1:-1:-1;21082:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;21184:19:0;;;21166:7;21184:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;21082:133;23021:84;;;;;;;;;;-1:-1:-1;23021:84:0;;;;;:::i;:::-;;:::i;18588:32::-;;;;;;;;;;;;;;;;25600:112;;;;;;;;;;-1:-1:-1;25600:112:0;;;;;:::i;:::-;;:::i;15023:254::-;;;;;;;;;;-1:-1:-1;15023:254:0;;;;;:::i;:::-;;:::i;18150:87::-;;;;;;;;;;;;;;;;23865:194;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;;;;;;;;;23965:13:::1;;23951:10;:27;;23943:36;;;::::0;::::1;;24027:11;:24:::0;23865:194::o;20910:80::-;20958:13;20982:5;20975:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20910:80;:::o;21604:161::-;21679:4;21696:39;244:10;21719:7;21728:6;21696:8;:39::i;:::-;-1:-1:-1;21753:4:0;21604:161;;;;;:::o;21773:313::-;21871:4;21888:36;21898:6;21906:9;21917:6;21888:9;:36::i;:::-;21935:121;21944:6;244:10;21966:89;22004:6;21966:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21966:19:0;;;;;;:11;:19;;;;;;;;244:10;21966:33;;;;;;;;;;:37;:89::i;:::-;21935:8;:121::i;:::-;-1:-1:-1;22074:4:0;21773:313;;;;;:::o;24796:284::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;24907:4:::1;24896:7;:15;;24888:24;;;::::0;::::1;;24970:33;24995:7;24970:20;24982:7;24970;;:11;;:20;;;;:::i;:::-;:24:::0;::::1;:33::i;:::-;24953:14;:50:::0;25032:14:::1;::::0;:40:::1;::::0;25064:7;;25032:27:::1;::::0;25051:7;25032:18:::1;:27::i;:40::-;25014:15;:58:::0;-1:-1:-1;;24796:284:0:o;26982:253::-;27048:7;27087;;27076;:18;;27068:73;;;;-1:-1:-1;;;27068:73:0;;6852:2:1;27068:73:0;;;6834:21:1;6891:2;6871:18;;;6864:30;6930:34;6910:18;;;6903:62;-1:-1:-1;;;6981:18:1;;;6974:40;7031:19;;27068:73:0;6650:406:1;27068:73:0;27152:19;27175:10;:8;:10::i;:::-;27152:33;-1:-1:-1;27203:24:0;:7;27152:33;27203:11;:24::i;:::-;27196:31;26982:253;-1:-1:-1;;;26982:253:0:o;23486:180::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23565:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;23557:64;;;::::0;-1:-1:-1;;;23557:64:0;;7263:2:1;23557:64:0::1;::::0;::::1;7245:21:1::0;7302:2;7282:18;;;7275:30;7341:34;7321:18;;;7314:62;-1:-1:-1;;;7392:18:1;;;7385:31;7433:19;;23557:64:0::1;7061:397:1::0;23557:64:0::1;-1:-1:-1::0;;;;;23632:18:0::1;23653:5;23632:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;23632:26:0::1;::::0;;23486:180::o;27698:479::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27780:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27772:60;;;::::0;-1:-1:-1;;;27772:60:0;;7665:2:1;27772:60:0::1;::::0;::::1;7647:21:1::0;7704:2;7684:18;;;7677:30;7743:29;7723:18;;;7716:57;7790:18;;27772:60:0::1;7463:351:1::0;27772:60:0::1;27848:9;27843:327;27867:9;:16:::0;27863:20;::::1;27843:327;;;27925:7;-1:-1:-1::0;;;;;27909:23:0::1;:9;27919:1;27909:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27909:12:0::1;:23:::0;27905:254:::1;;27968:9;27978:16:::0;;:20:::1;::::0;27997:1:::1;::::0;27978:20:::1;:::i;:::-;27968:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27953:9:::1;:12:::0;;-1:-1:-1;;;;;27968:31:0;;::::1;::::0;27963:1;;27953:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27953:46:0::1;-1:-1:-1::0;;;;;27953:46:0;;::::1;;::::0;;28018:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;28057:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28057:28:0::1;::::0;;28104:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28104:15:0;;;;;-1:-1:-1;;;;;;28104:15:0::1;::::0;;;;;27843:327:::1;27698:479:::0;:::o;27905:254::-:1;27885:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27843:327;;;;27698:479:::0;:::o;22518:218::-;244:10;22606:4;22655:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22655:34:0;;;;;;;;;;22606:4;;22623:83;;22646:7;;22655:50;;22694:10;22655:38;:50::i;22094:416::-;22192:4;22217:35;;;22209:91;;;;-1:-1:-1;;;22209:91:0;;8690:2:1;22209:91:0;;;8672:21:1;8729:2;8709:18;;;8702:30;8768:34;8748:18;;;8741:62;-1:-1:-1;;;8819:18:1;;;8812:31;8860:19;;22209:91:0;8488:397:1;22209:91:0;22338:10;22321:14;22376:105;22397:6;22393:1;:10;22376:105;;;22433:35;22442:10;;22453:1;22442:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22457:7;;22465:1;22457:10;;;;;;;:::i;:::-;;;;;;;22433:8;:35::i;:::-;22425:44;;;;;;22405:3;;;;:::i;:::-;;;;22376:105;;;-1:-1:-1;22498:4:0;;22094:416;-1:-1:-1;;;;;;22094:416:0:o;26153:377::-;244:10;26205:14;26254:19;;;:11;:19;;;;;;;;26253:20;26245:77;;;;-1:-1:-1;;;26245:77:0;;9092:2:1;26245:77:0;;;9074:21:1;9131:2;9111:18;;;9104:30;9170:34;9150:18;;;9143:62;-1:-1:-1;;;9221:18:1;;;9214:42;9273:19;;26245:77:0;8890:408:1;26245:77:0;26334:15;26358:19;26369:7;26358:10;:19::i;:::-;-1:-1:-1;;;;;;;;;26406:15:0;;;;;;:7;:15;;;;;;26333:44;;-1:-1:-1;26406:28:0;;:15;-1:-1:-1;26333:44:0;26406:19;:28::i;:::-;-1:-1:-1;;;;;26388:15:0;;;;;;:7;:15;;;;;:46;26455:7;;:20;;26467:7;26455:11;:20::i;:::-;26445:7;:30;26499:10;;:23;;26514:7;26499:14;:23::i;:::-;26486:10;:36;-1:-1:-1;;;26153:377:0:o;24507:281::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;24617:5:::1;24606:7;:16;;24598:25;;;::::0;::::1;;24680:33;24705:7;24680:20;24692:7;24680;;:11;;:20;;;;:::i;:33::-;24665:12;:48:::0;24740:14:::1;::::0;:40:::1;::::0;24772:7;;24740:27:::1;::::0;24759:7;24740:18:::1;:27::i;:40::-;24724:13;:56:::0;-1:-1:-1;;24507:281:0:o;25477:111::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25546:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;25546:34:0::1;25576:4;25546:34;::::0;;25477:111::o;26538:436::-;26628:7;26667;;26656;:18;;26648:62;;;;-1:-1:-1;;;26648:62:0;;9505:2:1;26648:62:0;;;9487:21:1;9544:2;9524:18;;;9517:30;9583:33;9563:18;;;9556:61;9634:18;;26648:62:0;9303:355:1;26648:62:0;26726:17;26721:246;;26761:15;26785:19;26796:7;26785:10;:19::i;:::-;-1:-1:-1;26760:44:0;;-1:-1:-1;26819:14:0;;-1:-1:-1;;;;;26819:14:0;26721:246;26868:23;26899:19;26910:7;26899:10;:19::i;:::-;-1:-1:-1;26866:52:0;;-1:-1:-1;26933:22:0;;-1:-1:-1;;;;;26933:22:0;24289:210;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;24399:15:::1;;24383:12;:31;;24375:40;;;::::0;::::1;;24463:13;:28:::0;24289:210::o;38972:223::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;39066:12:::1;39080:17:::0;39101:9:::1;-1:-1:-1::0;;;;;39101:14:0::1;39123:6;39101:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39065:69;;;;39153:7;39145:42;;;::::0;-1:-1:-1;;;39145:42:0;;10075:2:1;39145:42:0::1;::::0;::::1;10057:21:1::0;10114:2;10094:18;;;10087:30;-1:-1:-1;;;10133:18:1;;;10126:52;10195:18;;39145:42:0::1;9873:346:1::0;39145:42:0::1;39054:141;;38972:223:::0;;:::o;27243:447::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27440:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27439:21;27431:61;;;::::0;-1:-1:-1;;;27431:61:0;;7665:2:1;27431:61:0::1;::::0;::::1;7647:21:1::0;7704:2;7684:18;;;7677:30;7743:29;7723:18;;;7716:57;7790:18;;27431:61:0::1;7463:351:1::0;27431:61:0::1;-1:-1:-1::0;;;;;27506:16:0;::::1;27525:1;27506:16:::0;;;:7:::1;:16;::::0;;;;;:20;27503:108:::1;;-1:-1:-1::0;;;;;27582:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;27562:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;27543:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;27503:108:::1;-1:-1:-1::0;;;;;27621:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27621:27:0::1;27644:4;27621:27:::0;;::::1;::::0;;;27659:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27659:23:0::1;::::0;;::::1;::::0;;27243:447::o;25088:202::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;25181:16:::1;::::0;-1:-1:-1;;;;;25181:29:0;;::::1;:16:::0;::::1;:29:::0;25173:61:::1;;;::::0;-1:-1:-1;;;25173:61:0;;10426:2:1;25173:61:0::1;::::0;::::1;10408:21:1::0;10465:2;10445:18;;;10438:30;-1:-1:-1;;;10484:18:1;;;10477:49;10543:18;;25173:61:0::1;10224:343:1::0;25173:61:0::1;25245:16;:37:::0;;-1:-1:-1;;;;;;25245:37:0::1;-1:-1:-1::0;;;;;25245:37:0;;;::::1;::::0;;;::::1;::::0;;25088:202::o;21223:198::-;-1:-1:-1;;;;;21313:20:0;;21289:7;21313:20;;;:11;:20;;;;;;;;21309:49;;;-1:-1:-1;;;;;;21342:16:0;;;;;:7;:16;;;;;;;21223:198::o;21309:49::-;-1:-1:-1;;;;;21396:16:0;;;;;;:7;:16;;;;;;21376:37;;:19;:37::i;14867:148::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;14974:1:::1;14958:6:::0;;14937:40:::1;::::0;-1:-1:-1;;;;;14958:6:0;;::::1;::::0;14937:40:::1;::::0;14974:1;;14937:40:::1;15005:1;14988:19:::0;;-1:-1:-1;;;;;;14988:19:0::1;::::0;;14867:148::o;24071:210::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;24181:15:::1;;24165:12;:31;;24157:40;;;::::0;::::1;;24245:13;:28:::0;24071:210::o;20820:84::-;20870:13;20894:7;20887:14;;;;;:::i;22744:269::-;22837:4;22854:129;244:10;22877:7;22886:96;22925:15;22886:96;;;;;;;;;;;;;;;;;244:10;22886:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22886:34:0;;;;;;;;;;;;:38;:96::i;21429:167::-;21507:4;21524:42;244:10;21548:9;21559:6;21524:9;:42::i;25298:171::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;25375:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;25375:32:0::1;-1:-1:-1::0;;;;25375:32:0;;::::1;;::::0;;25423:38:::1;::::0;::::1;::::0;::::1;::::0;25399:8;1598:14:1;1591:22;1573:41;;1561:2;1546:18;;1433:187;25423:38:0::1;;;;;;;;25298:171:::0;:::o;23674:179::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;23775:16:::1;::::0;::::1;;23764:27;;::::0;::::1;;::::0;23756:52:::1;;;::::0;-1:-1:-1;;;23756:52:0;;10774:2:1;23756:52:0::1;::::0;::::1;10756:21:1::0;10813:2;10793:18;;;10786:30;-1:-1:-1;;;10832:18:1;;;10825:42;10884:18;;23756:52:0::1;10572:336:1::0;23756:52:0::1;23819:16;:26:::0;;-1:-1:-1;;23819:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23674:179::o;23021:84::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;23084:6:::1;:13:::0;;-1:-1:-1;;;;;;23084:13:0::1;-1:-1:-1::0;;;;;23084:13:0;;;::::1;::::0;;;::::1;::::0;;23021:84::o;25600:112::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25669:27:0::1;25699:5;25669:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;25669:35:0::1;::::0;;25600:112::o;15023:254::-;14780:6;;-1:-1:-1;;;;;14780:6:0;244:10;14780:22;14772:67;;;;-1:-1:-1;;;14772:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15112:22:0;::::1;15104:73;;;::::0;-1:-1:-1;;;15104:73:0;;11115:2:1;15104:73:0::1;::::0;::::1;11097:21:1::0;11154:2;11134:18;;;11127:30;11193:34;11173:18;;;11166:62;-1:-1:-1;;;11244:18:1;;;11237:36;11290:19;;15104:73:0::1;10913:402:1::0;15104:73:0::1;15224:6;::::0;;15203:38:::1;::::0;-1:-1:-1;;;;;15203:38:0;;::::1;::::0;15224:6;::::1;::::0;15203:38:::1;::::0;::::1;15252:6;:17:::0;;-1:-1:-1;;;;;;15252:17:0::1;-1:-1:-1::0;;;;;15252:17:0;;;::::1;::::0;;;::::1;::::0;;15023:254::o;28277:337::-;-1:-1:-1;;;;;28370:19:0;;28362:68;;;;-1:-1:-1;;;28362:68:0;;11522:2:1;28362:68:0;;;11504:21:1;11561:2;11541:18;;;11534:30;11600:34;11580:18;;;11573:62;-1:-1:-1;;;11651:18:1;;;11644:34;11695:19;;28362:68:0;11320:400:1;28362:68:0;-1:-1:-1;;;;;28449:21:0;;28441:68;;;;-1:-1:-1;;;28441:68:0;;11927:2:1;28441:68:0;;;11909:21:1;11966:2;11946:18;;;11939:30;12005:34;11985:18;;;11978:62;-1:-1:-1;;;12056:18:1;;;12049:32;12098:19;;28441:68:0;11725:398:1;28441:68:0;-1:-1:-1;;;;;28522:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28574:32;;2023:25:1;;;28574:32:0;;1996:18:1;28574:32:0;;;;;;;28277:337;;;:::o;28622:1591::-;-1:-1:-1;;;;;28744:18:0;;28736:68;;;;-1:-1:-1;;;28736:68:0;;12330:2:1;28736:68:0;;;12312:21:1;12369:2;12349:18;;;12342:30;12408:34;12388:18;;;12381:62;-1:-1:-1;;;12459:18:1;;;12452:35;12504:19;;28736:68:0;12128:401:1;28736:68:0;-1:-1:-1;;;;;28823:16:0;;28815:64;;;;-1:-1:-1;;;28815:64:0;;12736:2:1;28815:64:0;;;12718:21:1;12775:2;12755:18;;;12748:30;12814:34;12794:18;;;12787:62;-1:-1:-1;;;12865:18:1;;;12858:33;12908:19;;28815:64:0;12534:399:1;28815:64:0;28907:1;28898:6;:10;28890:64;;;;-1:-1:-1;;;28890:64:0;;13140:2:1;28890:64:0;;;13122:21:1;13179:2;13159:18;;;13152:30;13218:34;13198:18;;;13191:62;-1:-1:-1;;;13269:18:1;;;13262:39;13318:19;;28890:64:0;12938:405:1;28890:64:0;28968:20;28979:4;28985:2;28968:10;:20::i;:::-;28965:113;;;29021:12;;29011:6;:22;;29003:75;;;;-1:-1:-1;;;29003:75:0;;13550:2:1;29003:75:0;;;13532:21:1;13589:2;13569:18;;;13562:30;13628:34;13608:18;;;13601:62;-1:-1:-1;;;13679:18:1;;;13672:38;13727:19;;29003:75:0;13348:404:1;29003:75:0;29092:20;29103:4;29109:2;29092:10;:20::i;:::-;:57;;;;-1:-1:-1;29135:14:0;;-1:-1:-1;;;;;29129:20:0;;;29135:14;;29129:20;;29092:57;:87;;;;-1:-1:-1;29173:6:0;;-1:-1:-1;;;;;29167:12:0;;;29173:6;;29167:12;;29092:87;29089:298;;;29206:32;29241:13;29251:2;29241:9;:13::i;:::-;29314:14;;29206:48;;-1:-1:-1;29277:33:0;29304:6;29206:48;29277:33;:::i;:::-;:51;;29269:106;;;;-1:-1:-1;;;29269:106:0;;14089:2:1;29269:106:0;;;14071:21:1;14128:2;14108:18;;;14101:30;14167:34;14147:18;;;14140:62;-1:-1:-1;;;14218:18:1;;;14211:40;14268:19;;29269:106:0;13887:406:1;29269:106:0;29191:196;29089:298;29399:28;29430:24;29448:4;29430:9;:24::i;:::-;29399:55;;29502:12;;29478:20;:36;29475:112;;-1:-1:-1;29563:12:0;;29475:112;29658:29;;29703:16;;29634:53;;;;;-1:-1:-1;;;29703:16:0;;;;29702:17;:46;;;;-1:-1:-1;29742:6:0;;-1:-1:-1;;;;;29736:12:0;;;29742:6;;29736:12;29702:46;:84;;;;-1:-1:-1;29765:21:0;;-1:-1:-1;;;29765:21:0;;;;29702:84;29698:293;;;29817:19;29813:167;;;29880:29;;29857:52;;29928:36;29943:20;29928:14;:36::i;:::-;-1:-1:-1;;;;;30054:24:0;;30011:12;30054:24;;;:18;:24;;;;;;30026:4;;30054:24;;;:50;;-1:-1:-1;;;;;;30082:22:0;;;;;;:18;:22;;;;;;;;30054:50;30051:96;;;-1:-1:-1;30130:5:0;30051:96;30167:38;30182:4;30187:2;30190:6;30197:7;30167:14;:38::i;:::-;28725:1488;;;28622:1591;;;:::o;5207:192::-;5293:7;5329:12;5321:6;;;;5313:29;;;;-1:-1:-1;;;5313:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5353:9:0;5365:5;5369:1;5365;:5;:::i;:::-;5353:17;5207:192;-1:-1:-1;;;;;5207:192:0:o;5658:462::-;5716:7;5952:1;5957;5952:6;5948:47;;-1:-1:-1;5982:1:0;5975:8;;5948:47;6007:9;6019:5;6023:1;6019;:5;:::i;:::-;6007:17;-1:-1:-1;6052:1:0;6043:5;6047:1;6007:17;6043:5;:::i;:::-;:10;6035:56;;;;-1:-1:-1;;;6035:56:0;;14895:2:1;6035:56:0;;;14877:21:1;14934:2;14914:18;;;14907:30;14973:34;14953:18;;;14946:62;-1:-1:-1;;;15024:18:1;;;15017:31;15065:19;;6035:56:0;14693:397:1;6596:132:0;6654:7;6681:39;6685:1;6688;6681:39;;;;;;;;;;;;;;;;;:3;:39::i;36727:163::-;36768:7;36789:15;36806;36825:19;:17;:19::i;:::-;36788:56;;-1:-1:-1;36788:56:0;-1:-1:-1;36862:20:0;36788:56;;36862:11;:20::i;:::-;36855:27;;;;36727:163;:::o;4304:181::-;4362:7;;4394:5;4398:1;4394;:5;:::i;:::-;4382:17;;4423:1;4418;:6;;4410:46;;;;-1:-1:-1;;;4410:46:0;;15297:2:1;4410:46:0;;;15279:21:1;15336:2;15316:18;;;15309:30;15375:29;15355:18;;;15348:57;15422:18;;4410:46:0;15095:351:1;35523:419:0;35582:7;35591;35600;35609;35618;35627;35648:23;35673:12;35687:18;35709:20;35721:7;35709:11;:20::i;:::-;35647:82;;;;;;35741:15;35758:23;35783:12;35799:50;35811:7;35820:4;35826:10;35838;:8;:10::i;:::-;35799:11;:50::i;:::-;35740:109;;;;-1:-1:-1;35740:109:0;;-1:-1:-1;35900:15:0;;-1:-1:-1;35917:4:0;;-1:-1:-1;35923:10:0;;-1:-1:-1;35523:419:0;;-1:-1:-1;;;;;35523:419:0:o;4768:136::-;4826:7;4853:43;4857:1;4860;4853:43;;;;;;;;;;;;;;;;;:3;:43::i;25815:330::-;25883:4;14718:6;;-1:-1:-1;;;;;25907:15:0;;;14718:6;;25907:15;;;;:45;;-1:-1:-1;14691:7:0;14718:6;-1:-1:-1;;;;;25939:13:0;;;14718:6;;25939:13;;25907:45;:84;;;;-1:-1:-1;;;;;;25970:21:0;;;;;;:17;:21;;;;;;;;25969:22;25907:84;:125;;;;-1:-1:-1;;;;;;26009:23:0;;;;;;:17;:23;;;;;;;;26008:24;25907:125;:159;;;;-1:-1:-1;26055:11:0;;-1:-1:-1;;;;;26049:17:0;;;26055:11;;26049:17;;25907:159;:192;;;;-1:-1:-1;;;;;;26083:16:0;;;;25907:192;:230;;;;-1:-1:-1;;;;;;;;26116:21:0;26132:4;26116:21;;;25815:330::o;30221:1315::-;18975:16;:23;;-1:-1:-1;;;;18975:23:0;-1:-1:-1;;;18975:23:0;;;:16;30326:13;30310::::1;::::0;:29:::1;::::0;30326:13;30310:29:::1;:::i;:::-;30306:60:::0;30359:7:::1;30306:60;30376:19;30398:77;30442:32;30460:13;;30442;;:17;;:32;;;;:::i;:::-;30423:13;::::0;30398:39:::1;::::0;:20;;:24:::1;:39::i;:77::-;30376:99:::0;-1:-1:-1;30486:17:0::1;30506:37;:20:::0;30376:99;30506:24:::1;:37::i;:::-;30486:57:::0;-1:-1:-1;30607:12:0::1;30622:16;30486:57:::0;30636:1:::1;30622:13;:16::i;:::-;30607:31:::0;-1:-1:-1;30649:17:0::1;30669:19;:9:::0;30607:31;30669:13:::1;:19::i;:::-;30649:39:::0;-1:-1:-1;30991:21:0::1;30966:22;31080:21;:4:::0;31089:11;31080:8:::1;:21::i;:::-;31057:44;;31112:30;31129:12;31112:16;:30::i;:::-;31203:16;31222:41;:21;31248:14:::0;31222:25:::1;:41::i;:::-;31203:60:::0;-1:-1:-1;31274:24:0::1;31301:36;31324:12:::0;31301:18:::1;31203:60:::0;31314:4;31301:12:::1;:18::i;:36::-;31274:63;;31350:41;31363:9;31374:16;31350:12;:41::i;:::-;31409:49;::::0;;15653:25:1;;;15709:2;15694:18;;15687:34;;;15737:18;;;15730:34;;;31409:49:0::1;::::0;15641:2:1;15626:18;31409:49:0::1;;;;;;;31471:16;::::0;-1:-1:-1;;;;;31471:16:0::1;:57;31497:30;:8:::0;31510:16;31497:12:::1;:30::i;:::-;31471:57;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30295:1241;;;;;;;;19009:1;-1:-1:-1::0;19021:16:0;:24;;-1:-1:-1;;;;19021:24:0;;;30221:1315::o;32638:1303::-;32798:16;;;;32794:969;;;-1:-1:-1;;;;;23452:18:0;;23428:4;23452:18;;;:9;:18;;;;;;;;32902:30;;;-1:-1:-1;;;;;;23452:18:0;;23428:4;23452:18;;;:9;:18;;;;;;;;32920:12;32898:97;;;32953:26;;-1:-1:-1;;;32953:26:0;;15977:2:1;32953:26:0;;;15959:21:1;16016:2;15996:18;;;15989:30;-1:-1:-1;;;16035:18:1;;;16028:46;16091:18;;32953:26:0;15775:340:1;32898:97:0;33085:16;;;;;;;33080:672;;33122:28;33141:4;33147:2;33122:18;:28::i;:::-;33178:16;;;;;;;33177:17;:41;;;;;33198:20;33209:4;33215:2;33198:10;:20::i;:::-;33173:145;;;33247:47;;-1:-1:-1;;;33247:47:0;;16322:2:1;33247:47:0;;;16304:21:1;16361:2;16341:18;;;16334:30;16400:34;16380:18;;;16373:62;-1:-1:-1;;;16451:18:1;;;16444:35;16496:19;;33247:47:0;16120:401:1;33173:145:0;33080:672;;;33377:1;33362:12;;:16;:56;;;;-1:-1:-1;33412:6:0;;-1:-1:-1;;;;;33404:14:0;;;33412:6;;33404:14;33362:56;:102;;;;;33444:20;33455:4;33461:2;33444:10;:20::i;:::-;33358:379;;;33541:13;33526:12;;33511;:27;;;;:::i;:::-;:43;33507:211;;;-1:-1:-1;;;;;33583:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;33583:20:0;33599:4;33583:20;;;33630:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;33678:16:0;;-1:-1:-1;;;;;933:32:1;;915:51;;33678:16:0;;903:2:1;888:18;33678:16:0;;;;;;;33507:211;33779:7;33775:40;;33801:14;:12;:14::i;:::-;33836:35;33854:4;33860:2;33864:6;33836:17;:35::i;:::-;33896:7;33892:41;;33918:15;38841:19;;38827:11;:33;38887:21;;38871:13;:37;38935:21;;38919:13;:37;38783:181;7224:278;7310:7;7345:12;7338:5;7330:28;;;;-1:-1:-1;;;7330:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7369:9:0;7381:5;7385:1;7381;:5;:::i;36898:561::-;36995:7;;37031;;36948;;;;;37055:289;37079:9;:16;37075:20;;37055:289;;;37145:7;37121;:21;37129:9;37139:1;37129:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37129:12:0;37121:21;;;;;;;;;;;;;:31;;:66;;;37180:7;37156;:21;37164:9;37174:1;37164:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37164:12:0;37156:21;;;;;;;;;;;;;:31;37121:66;37117:97;;;37197:7;;37206;;37189:25;;;;;;;36898:561;;:::o;37117:97::-;37239:34;37251:7;:21;37259:9;37269:1;37259:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37259:12:0;37251:21;;;;;;;;;;;;;37239:7;;:11;:34::i;:::-;37229:44;;37298:34;37310:7;:21;37318:9;37328:1;37318:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37318:12:0;37310:21;;;;;;;;;;;;;37298:7;;:11;:34::i;:::-;37288:44;-1:-1:-1;37097:3:0;;;;:::i;:::-;;;;37055:289;;;-1:-1:-1;37380:7:0;;37368;;:20;;:11;:20::i;:::-;37358:7;:30;37354:61;;;37398:7;;37407;;37390:25;;;;;;36898:561;;:::o;37354:61::-;37434:7;;37443;;-1:-1:-1;36898:561:0;-1:-1:-1;36898:561:0:o;35950:330::-;36010:7;36019;36028;36048:12;36063:24;36079:7;36063:15;:24::i;:::-;36048:39;;36098:18;36119:30;36141:7;36119:21;:30::i;:::-;36098:51;-1:-1:-1;36160:23:0;36186:33;36098:51;36186:17;:7;36198:4;36186:11;:17::i;:::-;:21;;:33::i;:::-;36160:59;36255:4;;-1:-1:-1;36261:10:0;;-1:-1:-1;35950:330:0;;-1:-1:-1;;;35950:330:0:o;36288:429::-;36403:7;;;;36459:24;:7;36471:11;36459;:24::i;:::-;36441:42;-1:-1:-1;36494:12:0;36509:21;:4;36518:11;36509:8;:21::i;:::-;36494:36;-1:-1:-1;36541:18:0;36562:27;:10;36577:11;36562:14;:27::i;:::-;36541:48;-1:-1:-1;36600:23:0;36626:33;36541:48;36626:17;:7;36638:4;36626:11;:17::i;:33::-;36678:7;;;;-1:-1:-1;36704:4:0;;-1:-1:-1;36288:429:0;;-1:-1:-1;;;;;;;36288:429:0:o;31544:573::-;31696:16;;;31710:1;31696:16;;;;;;;;31672:21;;31696:16;;;;;;;;;;-1:-1:-1;31696:16:0;31672:40;;31741:4;31723;31728:1;31723:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31723:23:0;;;:7;;;;;;;;;;:23;;;;31767:9;;:16;;;-1:-1:-1;;;31767:16:0;;;;:9;;;;;:14;;:16;;;;;31723:7;;31767:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31757:4;31762:1;31757:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31757:26:0;;;:7;;;;;;;;;:26;31828:9;;31796:56;;31813:4;;31828:9;31840:11;31796:8;:56::i;:::-;31891:9;;:218;;-1:-1:-1;;;31891:218:0;;-1:-1:-1;;;;;31891:9:0;;;;:60;;:218;;31966:11;;31891:9;;32036:4;;32063;;32083:15;;31891:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32125:505;32305:9;;32273:56;;32290:4;;-1:-1:-1;;;;;32305:9:0;32317:11;32273:8;:56::i;:::-;32372:9;;32570:11;;32372:250;;-1:-1:-1;;;32372:250:0;;32438:4;32372:250;;;18240:34:1;18290:18;;;18283:34;;;32372:9:0;18333:18:1;;;18326:34;;;18376:18;;;18369:34;-1:-1:-1;;;;;32570:11:0;;;18419:19:1;;;18412:44;32596:15:0;18472:19:1;;;18465:35;32372:9:0;;;:25;;32405:9;;18174:19:1;;32372:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32125:505;;:::o;35035:480::-;35117:16;;;;;;;35116:17;35108:65;;;;-1:-1:-1;;;35108:65:0;;19024:2:1;35108:65:0;;;19006:21:1;19063:2;19043:18;;;19036:30;19102:34;19082:18;;;19075:62;-1:-1:-1;;;19153:18:1;;;19146:33;19196:19;;35108:65:0;18822:399:1;35108:65:0;35189:20;35200:4;35206:2;35189:10;:20::i;:::-;35188:21;:37;;;;-1:-1:-1;35219:6:0;;-1:-1:-1;;;;;35213:12:0;;;35219:6;;35213:12;35188:37;35184:324;;;-1:-1:-1;;;;;35242:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;35242:30:0;35268:4;35242:30;;;;;;35287:16;:23;;-1:-1:-1;;35287:23:0;35242:30;35287:23;;;35340:12;35325;:27;35382:15;35367:12;:30;35414:21;:28;;-1:-1:-1;;;;35414:28:0;-1:-1:-1;;;35414:28:0;;;35462:34;;;;;;1598:14:1;;1591:22;1573:41;;1561:2;1546:18;;1433:187;35462:34:0;;;;;;;;35035:480;;:::o;38437:334::-;38483:11;;:16;:38;;;;-1:-1:-1;38503:13:0;;:18;38483:38;38480:50;;;38437:334::o;38480:50::-;38572:11;;;38550:19;:33;38618:13;;;38594:21;:37;38666:13;;;38642:21;:37;-1:-1:-1;38692:15:0;;;;38718:17;;;;38746;38437:334::o;33949:1078::-;34048:15;34065:23;34090:12;34104:23;34129:12;34143:18;34165:19;34176:7;34165:10;:19::i;:::-;-1:-1:-1;;;;;34215:15:0;;;;;;:7;:15;;;;;;34047:137;;-1:-1:-1;34047:137:0;;-1:-1:-1;34047:137:0;;-1:-1:-1;34047:137:0;-1:-1:-1;34047:137:0;-1:-1:-1;34047:137:0;-1:-1:-1;34215:28:0;;34047:137;34215:19;:28::i;:::-;-1:-1:-1;;;;;34197:15:0;;;;;;;:7;:15;;;;;;:46;;;;34275:18;;;;;;;:39;;34298:15;34275:22;:39::i;:::-;-1:-1:-1;;;;;34254:18:0;;;;;;;:7;:18;;;;;;;;:60;;;;34331:19;;;;;:11;:19;;;;;;;:46;;;;-1:-1:-1;;;;;;34355:22:0;;;;;;:11;:22;;;;;;;;34354:23;34331:46;34327:477;;;-1:-1:-1;;;;;34412:15:0;;;;;;:7;:15;;;;;;:28;;34432:7;34412:19;:28::i;:::-;-1:-1:-1;;;;;34394:15:0;;;;;;:7;:15;;;;;:46;34327:477;;;-1:-1:-1;;;;;34463:19:0;;;;;;:11;:19;;;;;;;;34462:20;:46;;;;-1:-1:-1;;;;;;34486:22:0;;;;;;:11;:22;;;;;;;;34462:46;34458:346;;;-1:-1:-1;;;;;34546:18:0;;;;;;:7;:18;;;;;;:39;;34569:15;34546:22;:39::i;:::-;-1:-1:-1;;;;;34525:18:0;;;;;;:7;:18;;;;;:60;34458:346;;;-1:-1:-1;;;;;34609:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34632:22:0;;;;;;:11;:22;;;;;;;;34609:45;34605:199;;;-1:-1:-1;;;;;34689:15:0;;;;;;:7;:15;;;;;;:28;;34709:7;34689:19;:28::i;:::-;-1:-1:-1;;;;;34671:15:0;;;;;;;:7;:15;;;;;;:46;;;;34753:18;;;;;;;:39;;34776:15;34753:22;:39::i;:::-;-1:-1:-1;;;;;34732:18:0;;;;;;:7;:18;;;;;:60;34605:199;34820:14;;34816:67;;34849:34;34864:6;34872:10;34849:14;:34::i;:::-;34905:1;34898:4;:8;:20;;;;34917:1;34910:4;:8;34898:20;34894:63;;;34933:24;34946:4;34952;34933:12;:24::i;:::-;34992:9;-1:-1:-1;;;;;34975:44:0;34984:6;-1:-1:-1;;;;;34975:44:0;;35003:15;34975:44;;;;2023:25:1;;2011:2;1996:18;;1877:177;34975:44:0;;;;;;;;34036:991;;;;;;33949:1078;;;:::o;38104:145::-;38168:7;38195:46;38224:16;;38195:24;38207:11;;38195:7;:11;;:24;;;;:::i;38257:172::-;38327:7;38354:67;38404:16;;38354:45;38366:32;38384:13;;38366;;:17;;:32;;;;:::i;:::-;38354:7;;:11;:45::i;37627:469::-;37706:19;37729:10;:8;:10::i;:::-;37706:33;-1:-1:-1;37750:18:0;37771:27;:10;37706:33;37771:14;:27::i;:::-;37850:4;37834:22;;;;:7;:22;;;;;;37750:48;;-1:-1:-1;37834:38:0;;37750:48;37834:26;:38::i;:::-;37825:4;37809:22;;;;:7;:22;;;;;;;;:63;;;;37886:11;:26;;;;;;37883:107;;;37968:4;37952:22;;;;:7;:22;;;;;;:38;;37979:10;37952:26;:38::i;:::-;37943:4;37927:22;;;;:7;:22;;;;;:63;37883:107;38006:43;;2023:25:1;;;38031:4:0;;-1:-1:-1;;;;;38006:43:0;;;;;2011:2:1;1996:18;38006:43:0;;;;;;;37695:401;;37627:469;;:::o;37467:148::-;37546:7;;:17;;37558:4;37546:11;:17::i;:::-;37536:7;:27;37587:10;;:20;;37602:4;37587:14;:20::i;:::-;37574:10;:33;-1:-1:-1;;37467:148:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;977:131::-;-1:-1:-1;;;;;1052:31:1;;1042:42;;1032:70;;1098:1;1095;1088:12;1032:70;977:131;:::o;1113:315::-;1181:6;1189;1242:2;1230:9;1221:7;1217:23;1213:32;1210:52;;;1258:1;1255;1248:12;1210:52;1297:9;1284:23;1316:31;1341:5;1316:31;:::i;:::-;1366:5;1418:2;1403:18;;;;1390:32;;-1:-1:-1;;;1113:315:1:o;1625:247::-;1684:6;1737:2;1725:9;1716:7;1712:23;1708:32;1705:52;;;1753:1;1750;1743:12;1705:52;1792:9;1779:23;1811:31;1836:5;1811:31;:::i;2059:456::-;2136:6;2144;2152;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;2260:9;2247:23;2279:31;2304:5;2279:31;:::i;:::-;2329:5;-1:-1:-1;2386:2:1;2371:18;;2358:32;2399:33;2358:32;2399:33;:::i;:::-;2059:456;;2451:7;;-1:-1:-1;;;2505:2:1;2490:18;;;;2477:32;;2059:456::o;2520:248::-;2588:6;2596;2649:2;2637:9;2628:7;2624:23;2620:32;2617:52;;;2665:1;2662;2655:12;2617:52;-1:-1:-1;;2688:23:1;;;2758:2;2743:18;;;2730:32;;-1:-1:-1;2520:248:1:o;2962:367::-;3025:8;3035:6;3089:3;3082:4;3074:6;3070:17;3066:27;3056:55;;3107:1;3104;3097:12;3056:55;-1:-1:-1;3130:20:1;;3173:18;3162:30;;3159:50;;;3205:1;3202;3195:12;3159:50;3242:4;3234:6;3230:17;3218:29;;3302:3;3295:4;3285:6;3282:1;3278:14;3270:6;3266:27;3262:38;3259:47;3256:67;;;3319:1;3316;3309:12;3256:67;2962:367;;;;;:::o;3334:773::-;3456:6;3464;3472;3480;3533:2;3521:9;3512:7;3508:23;3504:32;3501:52;;;3549:1;3546;3539:12;3501:52;3589:9;3576:23;3618:18;3659:2;3651:6;3648:14;3645:34;;;3675:1;3672;3665:12;3645:34;3714:70;3776:7;3767:6;3756:9;3752:22;3714:70;:::i;:::-;3803:8;;-1:-1:-1;3688:96:1;-1:-1:-1;3891:2:1;3876:18;;3863:32;;-1:-1:-1;3907:16:1;;;3904:36;;;3936:1;3933;3926:12;3904:36;;3975:72;4039:7;4028:8;4017:9;4013:24;3975:72;:::i;:::-;3334:773;;;;-1:-1:-1;4066:8:1;-1:-1:-1;;;;3334:773:1:o;4320:160::-;4385:20;;4441:13;;4434:21;4424:32;;4414:60;;4470:1;4467;4460:12;4414:60;4320:160;;;:::o;4485:248::-;4550:6;4558;4611:2;4599:9;4590:7;4586:23;4582:32;4579:52;;;4627:1;4624;4617:12;4579:52;4663:9;4650:23;4640:33;;4692:35;4723:2;4712:9;4708:18;4692:35;:::i;:::-;4682:45;;4485:248;;;;;:::o;5326:180::-;5382:6;5435:2;5423:9;5414:7;5410:23;5406:32;5403:52;;;5451:1;5448;5441:12;5403:52;5474:26;5490:9;5474:26;:::i;5511:388::-;5579:6;5587;5640:2;5628:9;5619:7;5615:23;5611:32;5608:52;;;5656:1;5653;5646:12;5608:52;5695:9;5682:23;5714:31;5739:5;5714:31;:::i;:::-;5764:5;-1:-1:-1;5821:2:1;5806:18;;5793:32;5834:33;5793:32;5834:33;:::i;:::-;5886:7;5876:17;;;5511:388;;;;;:::o;5904:356::-;6106:2;6088:21;;;6125:18;;;6118:30;6184:34;6179:2;6164:18;;6157:62;6251:2;6236:18;;5904:356::o;6265:380::-;6344:1;6340:12;;;;6387;;;6408:61;;6462:4;6454:6;6450:17;6440:27;;6408:61;6515:2;6507:6;6504:14;6484:18;6481:38;6478:161;;6561:10;6556:3;6552:20;6549:1;6542:31;6596:4;6593:1;6586:15;6624:4;6621:1;6614:15;6478:161;;6265:380;;;:::o;7819:127::-;7880:10;7875:3;7871:20;7868:1;7861:31;7911:4;7908:1;7901:15;7935:4;7932:1;7925:15;7951:127;8012:10;8007:3;8003:20;8000:1;7993:31;8043:4;8040:1;8033:15;8067:4;8064:1;8057:15;8083:128;8150:9;;;8171:11;;;8168:37;;;8185:18;;:::i;8216:127::-;8277:10;8272:3;8268:20;8265:1;8258:31;8308:4;8305:1;8298:15;8332:4;8329:1;8322:15;8348:135;8387:3;8408:17;;;8405:43;;8428:18;;:::i;:::-;-1:-1:-1;8475:1:1;8464:13;;8348:135::o;13757:125::-;13822:9;;;13843:10;;;13840:36;;;13856:18;;:::i;14298:168::-;14371:9;;;14402;;14419:15;;;14413:22;;14399:37;14389:71;;14440:18;;:::i;14471:217::-;14511:1;14537;14527:132;;14581:10;14576:3;14572:20;14569:1;14562:31;14616:4;14613:1;14606:15;14644:4;14641:1;14634:15;14527:132;-1:-1:-1;14673:9:1;;14471:217::o;16658:251::-;16728:6;16781:2;16769:9;16760:7;16756:23;16752:32;16749:52;;;16797:1;16794;16787:12;16749:52;16829:9;16823:16;16848:31;16873:5;16848:31;:::i;16914:980::-;17176:4;17224:3;17213:9;17209:19;17255:6;17244:9;17237:25;17281:2;17319:6;17314:2;17303:9;17299:18;17292:34;17362:3;17357:2;17346:9;17342:18;17335:31;17386:6;17421;17415:13;17452:6;17444;17437:22;17490:3;17479:9;17475:19;17468:26;;17529:2;17521:6;17517:15;17503:29;;17550:1;17560:195;17574:6;17571:1;17568:13;17560:195;;;17639:13;;-1:-1:-1;;;;;17635:39:1;17623:52;;17730:15;;;;17695:12;;;;17671:1;17589:9;17560:195;;;-1:-1:-1;;;;;;;17811:32:1;;;;17806:2;17791:18;;17784:60;-1:-1:-1;;;17875:3:1;17860:19;17853:35;17772:3;16914:980;-1:-1:-1;;;16914:980:1:o;18511:306::-;18599:6;18607;18615;18668:2;18656:9;18647:7;18643:23;18639:32;18636:52;;;18684:1;18681;18674:12;18636:52;18713:9;18707:16;18697:26;;18763:2;18752:9;18748:18;18742:25;18732:35;;18807:2;18796:9;18792:18;18786:25;18776:35;;18511:306;;;;;:::o

Swarm Source

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