ETH Price: $3,419.44 (+0.42%)
Gas: 8 Gwei

Token

ANTWAR (ANTWAR)
 

Overview

Max Total Supply

21,000,000 ANTWAR

Holders

72

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4 ANTWAR

Value
$0.00
0xd6b0d389b4888e06038b2ed629cf9636adad98c9
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AntWar

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-06
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}


/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}



// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}




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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

contract AntWar is Context, IERC20, Ownable {
    using SafeMath for uint256;

    mapping (address => bool) private whiteList;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    string private _name = "ANTWAR";
    string private _symbol = "ANTWAR";
    uint8 private _decimals = 18;

    uint256 private _totalSupply = 21000000 * 10 **_decimals;

    uint256 public deadFee = 2;
    uint256 public liquidityFee = 3;
    uint256 private totalFee;

    address LpWallet = 0xCc5215779FdB4857Bb5F8C680b86D4f411039b04;
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    uint256 private max_lp_per_amount = 10 * 10**_decimals;

    IUniswapRouter public router;
    address public pair;
    address uniswapRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor() {
        _balances[msg.sender] = _totalSupply;
        
        router = IUniswapRouter(uniswapRouter);
        pair = IUniswapV2Factory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );

        whiteList[msg.sender] = true;
        whiteList[address(this)] = true;
        
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");

        unchecked {
            _balances[from] = fromBalance - amount;
        }

       
        if(shouldAddLiquidity(from)){
            _addLiquidity();
        }
        

        uint256 gonAmountReceived = amount;
        if((!whiteList[from] && !whiteList[to]) && pair == to){
            gonAmountReceived =  takeFee(amount);
        }

        _balances[to] += gonAmountReceived;

        emit Transfer(from, to, gonAmountReceived);
        _afterTokenTransfer(from, to, gonAmountReceived);
    }

    
    function shouldAddLiquidity(address from) public view returns (bool) {
        return  !inSwapAndLiquify && from != pair && swapAndLiquifyEnabled;  
    }


    function _addLiquidity() internal lockTheSwap {
        
        uint256 liquidityAmount = _balances[LpWallet];
        if (liquidityAmount < max_lp_per_amount) {
            return;
        }
        
        _balances[address(this)] = _balances[address(this)].add(_balances[LpWallet]);
        _balances[LpWallet] = 0;
        
        uint256 amountToLiquify = liquidityAmount.div(2);
        uint256 amountToSwap = liquidityAmount.sub(amountToLiquify);

        if (amountToSwap == 0) {
            return;
        }
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        uint256 balanceBefore = address(this).balance;

        _approve(address(this), address(router), amountToSwap);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETHLiquidity = address(this).balance.sub(balanceBefore);

        _approve(address(this), address(router), amountToLiquify);
        if (amountToLiquify > 0 && amountETHLiquidity > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                LpWallet,
                block.timestamp
            );
        }
        emit SwapAndLiquify(amountToLiquify, amountETHLiquidity, amountToSwap);
    }

    
    function takeFee(uint256 amount) internal returns (uint256) {
        totalFee = liquidityFee.add(deadFee);
        uint256 feeAmount = amount.mul(totalFee).div(10**2);

        uint256 deadAmount = amount.mul(deadFee).div(10**2);
        _balances[DEAD] = _balances[DEAD].add(deadAmount);
        emit Transfer(pair, DEAD, deadAmount);

        uint256 liquidityAmount = amount.mul(liquidityFee).div(10**2);
        _balances[LpWallet] = _balances[LpWallet].add(liquidityAmount);
        emit Transfer(pair, LpWallet, liquidityAmount);

        return amount.sub(feeAmount);
    }

    function isWhitelist(address _address) public view returns(bool){
        return whiteList[_address];
    }
   
    function setWhitelist(address _address, bool enable) external onlyOwner() {
        require(_address != address(0), "ERC20: transfer from the zero address");
        whiteList[_address] = enable;
    }

    function setSwapAndLiquifyEnabled(bool enable) external onlyOwner {
        swapAndLiquifyEnabled = enable;
        emit SwapAndLiquifyEnabledUpdated(enable);
    }

    
    function setMaxLPPerAmount(uint256 _amount) external onlyOwner {
        max_lp_per_amount = _amount;
    }

     
    function setLpWallet(address _address) external onlyOwner  {
       LpWallet = _address;
    }

    function setRouter(address _address) external onlyOwner  {
       router = IUniswapRouter(_address);
    }


    
    function setLiquidityFee(uint256 _amount) external onlyOwner {
        liquidityFee = _amount;
    }

    
    function setDeadFee(uint256 _deadFee) external onlyOwner {
        deadFee = _deadFee;
    }

    
    function getAllFee() public view returns(uint256){
         return liquidityFee.add(deadFee);
    }


    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelist","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadFee","type":"uint256"}],"name":"setDeadFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLpWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxLPPerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"shouldAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600681526020017f414e5457415200000000000000000000000000000000000000000000000000008152506004908051906020019062000051929190620006c6565b506040518060400160405280600681526020017f414e545741520000000000000000000000000000000000000000000000000000815250600590805190602001906200009f929190620006c6565b506012600660006101000a81548160ff021916908360ff160217905550600660009054906101000a900460ff16600a620000da919062000886565b6301406f40620000eb9190620009c3565b6007556002600855600360095573cc5215779fdb4857bb5f8c680b86d4f411039b04600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900460ff16600a6200016b919062000886565b600a620001799190620009c3565b600c55737a250d5630b4cf539739df2c5dacb4c659f2488d600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60156101000a81548160ff021916908315150217905550348015620001f957600080fd5b506200021a6200020e620005fa60201b60201c565b6200060260201b60201c565b600754600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032c57600080fd5b505afa15801562000341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036791906200078d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003eb57600080fd5b505afa15801562000400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042691906200078d565b306040518363ffffffff1660e01b815260040162000446929190620007e1565b602060405180830381600087803b1580156200046157600080fd5b505af115801562000476573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049c91906200078d565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060018060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620005ec91906200080e565b60405180910390a362000b2f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620006d49062000a6f565b90600052602060002090601f016020900481019282620006f8576000855562000744565b82601f106200071357805160ff191683800117855562000744565b8280016001018555821562000744579182015b828111156200074357825182559160200191906001019062000726565b5b50905062000753919062000757565b5090565b5b808211156200077257600081600090555060010162000758565b5090565b600081519050620007878162000b15565b92915050565b600060208284031215620007a657620007a562000b03565b5b6000620007b68482850162000776565b91505092915050565b620007ca8162000a24565b82525050565b620007db8162000a58565b82525050565b6000604082019050620007f86000830185620007bf565b620008076020830184620007bf565b9392505050565b6000602082019050620008256000830184620007d0565b92915050565b6000808291508390505b60018511156200087d5780860481111562000855576200085462000aa5565b5b6001851615620008655780820291505b8081029050620008758562000b08565b945062000835565b94509492505050565b6000620008938262000a58565b9150620008a08362000a62565b9250620008cf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008d7565b905092915050565b600082620008e95760019050620009bc565b81620008f95760009050620009bc565b81600181146200091257600281146200091d5762000953565b6001915050620009bc565b60ff84111562000932576200093162000aa5565b5b8360020a9150848211156200094c576200094b62000aa5565b5b50620009bc565b5060208310610133831016604e8410600b84101617156200098d5782820a90508381111562000987576200098662000aa5565b5b620009bc565b6200099c84848460016200082b565b92509050818404811115620009b657620009b562000aa5565b5b81810290505b9392505050565b6000620009d08262000a58565b9150620009dd8362000a58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000a195762000a1862000aa5565b5b828202905092915050565b600062000a318262000a38565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000a8857607f821691505b6020821081141562000a9f5762000a9e62000ad4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b62000b208162000a24565b811462000b2c57600080fd5b50565b6131488062000b3f6000396000f3fe6080604052600436106101c65760003560e01c80638da5cb5b116100f7578063c0d7865511610095578063d667a5da11610064578063d667a5da14610673578063dd62ed3e1461069e578063f2fde38b146106db578063f887ea4014610704576101cd565b8063c0d78655146105bb578063c1b11b7b146105e4578063c49b9a801461060d578063c683630d14610636576101cd565b8063a14c80fb116100d1578063a14c80fb146104eb578063a457c2d714610516578063a8aa1b3114610553578063a9059cbb1461057e576101cd565b80638da5cb5b1461046a57806395d89b411461049557806398118cb4146104c0576101cd565b8063395093511161016457806353d6fd591161013e57806353d6fd59146103c45780635beb447b146103ed57806370a0823114610416578063715018a614610453576101cd565b80633950935114610333578063468c7ee2146103705780634a74bb0214610399576101cd565b806323b872dd116101a057806323b872dd14610265578063313ce567146102a2578063319b2106146102cd578063357bf15c1461030a576101cd565b806306fdde03146101d2578063095ea7b3146101fd57806318160ddd1461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e761072f565b6040516101f491906128dc565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f91906124ea565b6107c1565b60405161023191906128a6565b60405180910390f35b34801561024657600080fd5b5061024f6107e4565b60405161025c9190612a1e565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190612457565b6107ee565b60405161029991906128a6565b60405180910390f35b3480156102ae57600080fd5b506102b761081d565b6040516102c49190612aca565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef91906123bd565b610834565b60405161030191906128a6565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190612557565b6108c0565b005b34801561033f57600080fd5b5061035a600480360381019061035591906124ea565b610946565b60405161036791906128a6565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906123bd565b61097d565b005b3480156103a557600080fd5b506103ae610a3d565b6040516103bb91906128a6565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e691906124aa565b610a50565b005b3480156103f957600080fd5b50610414600480360381019061040f9190612557565b610b97565b005b34801561042257600080fd5b5061043d600480360381019061043891906123bd565b610c1d565b60405161044a9190612a1e565b60405180910390f35b34801561045f57600080fd5b50610468610c66565b005b34801561047657600080fd5b5061047f610cee565b60405161048c919061282a565b60405180910390f35b3480156104a157600080fd5b506104aa610d17565b6040516104b791906128dc565b60405180910390f35b3480156104cc57600080fd5b506104d5610da9565b6040516104e29190612a1e565b60405180910390f35b3480156104f757600080fd5b50610500610daf565b60405161050d9190612a1e565b60405180910390f35b34801561052257600080fd5b5061053d600480360381019061053891906124ea565b610db5565b60405161054a91906128a6565b60405180910390f35b34801561055f57600080fd5b50610568610e2c565b604051610575919061282a565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906124ea565b610e52565b6040516105b291906128a6565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd91906123bd565b610e75565b005b3480156105f057600080fd5b5061060b60048036038101906106069190612557565b610f35565b005b34801561061957600080fd5b50610634600480360381019061062f919061252a565b610fbb565b005b34801561064257600080fd5b5061065d600480360381019061065891906123bd565b61108b565b60405161066a91906128a6565b60405180910390f35b34801561067f57600080fd5b506106886110e1565b6040516106959190612a1e565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c09190612417565b6110ff565b6040516106d29190612a1e565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd91906123bd565b611186565b005b34801561071057600080fd5b5061071961127e565b60405161072691906128c1565b60405180910390f35b60606004805461073e90612d1f565b80601f016020809104026020016040519081016040528092919081815260200182805461076a90612d1f565b80156107b75780601f1061078c576101008083540402835291602001916107b7565b820191906000526020600020905b81548152906001019060200180831161079a57829003601f168201915b5050505050905090565b6000806107cc6112a4565b90506107d98185856112ac565b600191505092915050565b6000600754905090565b6000806107f96112a4565b9050610806858285611477565b610811858585611503565b60019150509392505050565b6000600660009054906101000a900460ff16905090565b6000600f60149054906101000a900460ff161580156108a15750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156108b95750600f60159054906101000a900460ff165b9050919050565b6108c86112a4565b73ffffffffffffffffffffffffffffffffffffffff166108e6610cee565b73ffffffffffffffffffffffffffffffffffffffff161461093c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109339061299e565b60405180910390fd5b8060098190555050565b6000806109516112a4565b905061097281858561096385896110ff565b61096d9190612b3a565b6112ac565b600191505092915050565b6109856112a4565b73ffffffffffffffffffffffffffffffffffffffff166109a3610cee565b73ffffffffffffffffffffffffffffffffffffffff16146109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f09061299e565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60159054906101000a900460ff1681565b610a586112a4565b73ffffffffffffffffffffffffffffffffffffffff16610a76610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac39061299e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b33906129be565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610b9f6112a4565b73ffffffffffffffffffffffffffffffffffffffff16610bbd610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a9061299e565b60405180910390fd5b8060088190555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c6e6112a4565b73ffffffffffffffffffffffffffffffffffffffff16610c8c610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd99061299e565b60405180910390fd5b610cec60006118b2565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610d2690612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5290612d1f565b8015610d9f5780601f10610d7457610100808354040283529160200191610d9f565b820191906000526020600020905b815481529060010190602001808311610d8257829003601f168201915b5050505050905090565b60095481565b60085481565b600080610dc06112a4565b90506000610dce82866110ff565b905083811015610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a906129fe565b60405180910390fd5b610e2082868684036112ac565b60019250505092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610e5d6112a4565b9050610e6a818585611503565b600191505092915050565b610e7d6112a4565b73ffffffffffffffffffffffffffffffffffffffff16610e9b610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee89061299e565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f3d6112a4565b73ffffffffffffffffffffffffffffffffffffffff16610f5b610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa89061299e565b60405180910390fd5b80600c8190555050565b610fc36112a4565b73ffffffffffffffffffffffffffffffffffffffff16610fe1610cee565b73ffffffffffffffffffffffffffffffffffffffff1614611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e9061299e565b60405180910390fd5b80600f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161108091906128a6565b60405180910390a150565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006110fa60085460095461197690919063ffffffff16565b905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61118e6112a4565b73ffffffffffffffffffffffffffffffffffffffff166111ac610cee565b73ffffffffffffffffffffffffffffffffffffffff1614611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f99061299e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112699061291e565b60405180910390fd5b61127b816118b2565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561131c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611313906129de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561138c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113839061293e565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161146a9190612a1e565b60405180910390a3505050565b600061148384846110ff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114fd57818110156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e69061295e565b60405180910390fd5b6114fc84848484036112ac565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a906129be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da906128fe565b60405180910390fd5b6115ee83838361198c565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c9061297e565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116c484610834565b156116d2576116d1611991565b5b6000829050600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561177b5750600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117d457508373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156117e5576117e283611fa9565b90505b80600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118349190612b3a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118989190612a1e565b60405180910390a36118ab85858361230d565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836119849190612b3a565b905092915050565b505050565b6001600f60146101000a81548160ff021916908315150217905550600060026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600c54811015611a225750611f8c565b611ad560026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461197690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611b9560028361231290919063ffffffff16565b90506000611bac828461232890919063ffffffff16565b90506000811415611bbf57505050611f8c565b6000600267ffffffffffffffff811115611bdc57611bdb612e0d565b5b604051908082528060200260200182016040528015611c0a5781602001602082028036833780820191505090505b5090503081600081518110611c2257611c21612dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611cc457600080fd5b505afa158015611cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfc91906123ea565b81600181518110611d1057611d0f612dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050611d7c30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856112ac565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401611de0959493929190612a39565b600060405180830381600087803b158015611dfa57600080fd5b505af1158015611e0e573d6000803e3d6000fd5b505050506000611e27824761232890919063ffffffff16565b9050611e5630600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876112ac565b600085118015611e665750600081115b15611f4a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823088600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611ef496959493929190612845565b6060604051808303818588803b158015611f0d57600080fd5b505af1158015611f21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f469190612584565b5050505b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051611f7d93929190612a93565b60405180910390a15050505050505b6000600f60146101000a81548160ff021916908315150217905550565b6000611fc260085460095461197690919063ffffffff16565b600a819055506000611ff26064611fe4600a548661233e90919063ffffffff16565b61231290919063ffffffff16565b9050600061201e60646120106008548761233e90919063ffffffff16565b61231290919063ffffffff16565b9050612074816002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461197690919063ffffffff16565b6002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061dead73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161213a9190612a1e565b60405180910390a3600061216c606461215e6009548861233e90919063ffffffff16565b61231290919063ffffffff16565b90506121e28160026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461197690919063ffffffff16565b60026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122e89190612a1e565b60405180910390a3612303838661232890919063ffffffff16565b9350505050919050565b505050565b600081836123209190612b90565b905092915050565b600081836123369190612c1b565b905092915050565b6000818361234c9190612bc1565b905092915050565b600081359050612363816130cd565b92915050565b600081519050612378816130cd565b92915050565b60008135905061238d816130e4565b92915050565b6000813590506123a2816130fb565b92915050565b6000815190506123b7816130fb565b92915050565b6000602082840312156123d3576123d2612e3c565b5b60006123e184828501612354565b91505092915050565b600060208284031215612400576123ff612e3c565b5b600061240e84828501612369565b91505092915050565b6000806040838503121561242e5761242d612e3c565b5b600061243c85828601612354565b925050602061244d85828601612354565b9150509250929050565b6000806000606084860312156124705761246f612e3c565b5b600061247e86828701612354565b935050602061248f86828701612354565b92505060406124a086828701612393565b9150509250925092565b600080604083850312156124c1576124c0612e3c565b5b60006124cf85828601612354565b92505060206124e08582860161237e565b9150509250929050565b6000806040838503121561250157612500612e3c565b5b600061250f85828601612354565b925050602061252085828601612393565b9150509250929050565b6000602082840312156125405761253f612e3c565b5b600061254e8482850161237e565b91505092915050565b60006020828403121561256d5761256c612e3c565b5b600061257b84828501612393565b91505092915050565b60008060006060848603121561259d5761259c612e3c565b5b60006125ab868287016123a8565b93505060206125bc868287016123a8565b92505060406125cd868287016123a8565b9150509250925092565b60006125e383836125ef565b60208301905092915050565b6125f881612c4f565b82525050565b61260781612c4f565b82525050565b600061261882612af5565b6126228185612b18565b935061262d83612ae5565b8060005b8381101561265e57815161264588826125d7565b975061265083612b0b565b925050600181019050612631565b5085935050505092915050565b61267481612c61565b82525050565b61268381612ca4565b82525050565b61269281612cb6565b82525050565b60006126a382612b00565b6126ad8185612b29565b93506126bd818560208601612cec565b6126c681612e41565b840191505092915050565b60006126de602383612b29565b91506126e982612e52565b604082019050919050565b6000612701602683612b29565b915061270c82612ea1565b604082019050919050565b6000612724602283612b29565b915061272f82612ef0565b604082019050919050565b6000612747601d83612b29565b915061275282612f3f565b602082019050919050565b600061276a602683612b29565b915061277582612f68565b604082019050919050565b600061278d602083612b29565b915061279882612fb7565b602082019050919050565b60006127b0602583612b29565b91506127bb82612fe0565b604082019050919050565b60006127d3602483612b29565b91506127de8261302f565b604082019050919050565b60006127f6602583612b29565b91506128018261307e565b604082019050919050565b61281581612c8d565b82525050565b61282481612c97565b82525050565b600060208201905061283f60008301846125fe565b92915050565b600060c08201905061285a60008301896125fe565b612867602083018861280c565b6128746040830187612689565b6128816060830186612689565b61288e60808301856125fe565b61289b60a083018461280c565b979650505050505050565b60006020820190506128bb600083018461266b565b92915050565b60006020820190506128d6600083018461267a565b92915050565b600060208201905081810360008301526128f68184612698565b905092915050565b60006020820190508181036000830152612917816126d1565b9050919050565b60006020820190508181036000830152612937816126f4565b9050919050565b6000602082019050818103600083015261295781612717565b9050919050565b600060208201905081810360008301526129778161273a565b9050919050565b600060208201905081810360008301526129978161275d565b9050919050565b600060208201905081810360008301526129b781612780565b9050919050565b600060208201905081810360008301526129d7816127a3565b9050919050565b600060208201905081810360008301526129f7816127c6565b9050919050565b60006020820190508181036000830152612a17816127e9565b9050919050565b6000602082019050612a33600083018461280c565b92915050565b600060a082019050612a4e600083018861280c565b612a5b6020830187612689565b8181036040830152612a6d818661260d565b9050612a7c60608301856125fe565b612a89608083018461280c565b9695505050505050565b6000606082019050612aa8600083018661280c565b612ab5602083018561280c565b612ac2604083018461280c565b949350505050565b6000602082019050612adf600083018461281b565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612b4582612c8d565b9150612b5083612c8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b8557612b84612d51565b5b828201905092915050565b6000612b9b82612c8d565b9150612ba683612c8d565b925082612bb657612bb5612d80565b5b828204905092915050565b6000612bcc82612c8d565b9150612bd783612c8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c1057612c0f612d51565b5b828202905092915050565b6000612c2682612c8d565b9150612c3183612c8d565b925082821015612c4457612c43612d51565b5b828203905092915050565b6000612c5a82612c6d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612caf82612cc8565b9050919050565b6000612cc182612c8d565b9050919050565b6000612cd382612cda565b9050919050565b6000612ce582612c6d565b9050919050565b60005b83811015612d0a578082015181840152602081019050612cef565b83811115612d19576000848401525b50505050565b60006002820490506001821680612d3757607f821691505b60208210811415612d4b57612d4a612daf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6130d681612c4f565b81146130e157600080fd5b50565b6130ed81612c61565b81146130f857600080fd5b50565b61310481612c8d565b811461310f57600080fd5b5056fea2646970667358221220bc92b91236bc843b4cfa85e4bc7956fa344d55cdd775bbc00460d14f2771038464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c80638da5cb5b116100f7578063c0d7865511610095578063d667a5da11610064578063d667a5da14610673578063dd62ed3e1461069e578063f2fde38b146106db578063f887ea4014610704576101cd565b8063c0d78655146105bb578063c1b11b7b146105e4578063c49b9a801461060d578063c683630d14610636576101cd565b8063a14c80fb116100d1578063a14c80fb146104eb578063a457c2d714610516578063a8aa1b3114610553578063a9059cbb1461057e576101cd565b80638da5cb5b1461046a57806395d89b411461049557806398118cb4146104c0576101cd565b8063395093511161016457806353d6fd591161013e57806353d6fd59146103c45780635beb447b146103ed57806370a0823114610416578063715018a614610453576101cd565b80633950935114610333578063468c7ee2146103705780634a74bb0214610399576101cd565b806323b872dd116101a057806323b872dd14610265578063313ce567146102a2578063319b2106146102cd578063357bf15c1461030a576101cd565b806306fdde03146101d2578063095ea7b3146101fd57806318160ddd1461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e761072f565b6040516101f491906128dc565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f91906124ea565b6107c1565b60405161023191906128a6565b60405180910390f35b34801561024657600080fd5b5061024f6107e4565b60405161025c9190612a1e565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190612457565b6107ee565b60405161029991906128a6565b60405180910390f35b3480156102ae57600080fd5b506102b761081d565b6040516102c49190612aca565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef91906123bd565b610834565b60405161030191906128a6565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190612557565b6108c0565b005b34801561033f57600080fd5b5061035a600480360381019061035591906124ea565b610946565b60405161036791906128a6565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906123bd565b61097d565b005b3480156103a557600080fd5b506103ae610a3d565b6040516103bb91906128a6565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e691906124aa565b610a50565b005b3480156103f957600080fd5b50610414600480360381019061040f9190612557565b610b97565b005b34801561042257600080fd5b5061043d600480360381019061043891906123bd565b610c1d565b60405161044a9190612a1e565b60405180910390f35b34801561045f57600080fd5b50610468610c66565b005b34801561047657600080fd5b5061047f610cee565b60405161048c919061282a565b60405180910390f35b3480156104a157600080fd5b506104aa610d17565b6040516104b791906128dc565b60405180910390f35b3480156104cc57600080fd5b506104d5610da9565b6040516104e29190612a1e565b60405180910390f35b3480156104f757600080fd5b50610500610daf565b60405161050d9190612a1e565b60405180910390f35b34801561052257600080fd5b5061053d600480360381019061053891906124ea565b610db5565b60405161054a91906128a6565b60405180910390f35b34801561055f57600080fd5b50610568610e2c565b604051610575919061282a565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906124ea565b610e52565b6040516105b291906128a6565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd91906123bd565b610e75565b005b3480156105f057600080fd5b5061060b60048036038101906106069190612557565b610f35565b005b34801561061957600080fd5b50610634600480360381019061062f919061252a565b610fbb565b005b34801561064257600080fd5b5061065d600480360381019061065891906123bd565b61108b565b60405161066a91906128a6565b60405180910390f35b34801561067f57600080fd5b506106886110e1565b6040516106959190612a1e565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c09190612417565b6110ff565b6040516106d29190612a1e565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd91906123bd565b611186565b005b34801561071057600080fd5b5061071961127e565b60405161072691906128c1565b60405180910390f35b60606004805461073e90612d1f565b80601f016020809104026020016040519081016040528092919081815260200182805461076a90612d1f565b80156107b75780601f1061078c576101008083540402835291602001916107b7565b820191906000526020600020905b81548152906001019060200180831161079a57829003601f168201915b5050505050905090565b6000806107cc6112a4565b90506107d98185856112ac565b600191505092915050565b6000600754905090565b6000806107f96112a4565b9050610806858285611477565b610811858585611503565b60019150509392505050565b6000600660009054906101000a900460ff16905090565b6000600f60149054906101000a900460ff161580156108a15750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156108b95750600f60159054906101000a900460ff165b9050919050565b6108c86112a4565b73ffffffffffffffffffffffffffffffffffffffff166108e6610cee565b73ffffffffffffffffffffffffffffffffffffffff161461093c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109339061299e565b60405180910390fd5b8060098190555050565b6000806109516112a4565b905061097281858561096385896110ff565b61096d9190612b3a565b6112ac565b600191505092915050565b6109856112a4565b73ffffffffffffffffffffffffffffffffffffffff166109a3610cee565b73ffffffffffffffffffffffffffffffffffffffff16146109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f09061299e565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60159054906101000a900460ff1681565b610a586112a4565b73ffffffffffffffffffffffffffffffffffffffff16610a76610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac39061299e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b33906129be565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610b9f6112a4565b73ffffffffffffffffffffffffffffffffffffffff16610bbd610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a9061299e565b60405180910390fd5b8060088190555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c6e6112a4565b73ffffffffffffffffffffffffffffffffffffffff16610c8c610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd99061299e565b60405180910390fd5b610cec60006118b2565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610d2690612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5290612d1f565b8015610d9f5780601f10610d7457610100808354040283529160200191610d9f565b820191906000526020600020905b815481529060010190602001808311610d8257829003601f168201915b5050505050905090565b60095481565b60085481565b600080610dc06112a4565b90506000610dce82866110ff565b905083811015610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a906129fe565b60405180910390fd5b610e2082868684036112ac565b60019250505092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610e5d6112a4565b9050610e6a818585611503565b600191505092915050565b610e7d6112a4565b73ffffffffffffffffffffffffffffffffffffffff16610e9b610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee89061299e565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f3d6112a4565b73ffffffffffffffffffffffffffffffffffffffff16610f5b610cee565b73ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa89061299e565b60405180910390fd5b80600c8190555050565b610fc36112a4565b73ffffffffffffffffffffffffffffffffffffffff16610fe1610cee565b73ffffffffffffffffffffffffffffffffffffffff1614611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e9061299e565b60405180910390fd5b80600f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161108091906128a6565b60405180910390a150565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006110fa60085460095461197690919063ffffffff16565b905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61118e6112a4565b73ffffffffffffffffffffffffffffffffffffffff166111ac610cee565b73ffffffffffffffffffffffffffffffffffffffff1614611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f99061299e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112699061291e565b60405180910390fd5b61127b816118b2565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561131c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611313906129de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561138c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113839061293e565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161146a9190612a1e565b60405180910390a3505050565b600061148384846110ff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114fd57818110156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e69061295e565b60405180910390fd5b6114fc84848484036112ac565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a906129be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da906128fe565b60405180910390fd5b6115ee83838361198c565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c9061297e565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116c484610834565b156116d2576116d1611991565b5b6000829050600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561177b5750600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117d457508373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156117e5576117e283611fa9565b90505b80600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118349190612b3a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118989190612a1e565b60405180910390a36118ab85858361230d565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836119849190612b3a565b905092915050565b505050565b6001600f60146101000a81548160ff021916908315150217905550600060026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600c54811015611a225750611f8c565b611ad560026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461197690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611b9560028361231290919063ffffffff16565b90506000611bac828461232890919063ffffffff16565b90506000811415611bbf57505050611f8c565b6000600267ffffffffffffffff811115611bdc57611bdb612e0d565b5b604051908082528060200260200182016040528015611c0a5781602001602082028036833780820191505090505b5090503081600081518110611c2257611c21612dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611cc457600080fd5b505afa158015611cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfc91906123ea565b81600181518110611d1057611d0f612dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050611d7c30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856112ac565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401611de0959493929190612a39565b600060405180830381600087803b158015611dfa57600080fd5b505af1158015611e0e573d6000803e3d6000fd5b505050506000611e27824761232890919063ffffffff16565b9050611e5630600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876112ac565b600085118015611e665750600081115b15611f4a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823088600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611ef496959493929190612845565b6060604051808303818588803b158015611f0d57600080fd5b505af1158015611f21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f469190612584565b5050505b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051611f7d93929190612a93565b60405180910390a15050505050505b6000600f60146101000a81548160ff021916908315150217905550565b6000611fc260085460095461197690919063ffffffff16565b600a819055506000611ff26064611fe4600a548661233e90919063ffffffff16565b61231290919063ffffffff16565b9050600061201e60646120106008548761233e90919063ffffffff16565b61231290919063ffffffff16565b9050612074816002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461197690919063ffffffff16565b6002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061dead73ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161213a9190612a1e565b60405180910390a3600061216c606461215e6009548861233e90919063ffffffff16565b61231290919063ffffffff16565b90506121e28160026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461197690919063ffffffff16565b60026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122e89190612a1e565b60405180910390a3612303838661232890919063ffffffff16565b9350505050919050565b505050565b600081836123209190612b90565b905092915050565b600081836123369190612c1b565b905092915050565b6000818361234c9190612bc1565b905092915050565b600081359050612363816130cd565b92915050565b600081519050612378816130cd565b92915050565b60008135905061238d816130e4565b92915050565b6000813590506123a2816130fb565b92915050565b6000815190506123b7816130fb565b92915050565b6000602082840312156123d3576123d2612e3c565b5b60006123e184828501612354565b91505092915050565b600060208284031215612400576123ff612e3c565b5b600061240e84828501612369565b91505092915050565b6000806040838503121561242e5761242d612e3c565b5b600061243c85828601612354565b925050602061244d85828601612354565b9150509250929050565b6000806000606084860312156124705761246f612e3c565b5b600061247e86828701612354565b935050602061248f86828701612354565b92505060406124a086828701612393565b9150509250925092565b600080604083850312156124c1576124c0612e3c565b5b60006124cf85828601612354565b92505060206124e08582860161237e565b9150509250929050565b6000806040838503121561250157612500612e3c565b5b600061250f85828601612354565b925050602061252085828601612393565b9150509250929050565b6000602082840312156125405761253f612e3c565b5b600061254e8482850161237e565b91505092915050565b60006020828403121561256d5761256c612e3c565b5b600061257b84828501612393565b91505092915050565b60008060006060848603121561259d5761259c612e3c565b5b60006125ab868287016123a8565b93505060206125bc868287016123a8565b92505060406125cd868287016123a8565b9150509250925092565b60006125e383836125ef565b60208301905092915050565b6125f881612c4f565b82525050565b61260781612c4f565b82525050565b600061261882612af5565b6126228185612b18565b935061262d83612ae5565b8060005b8381101561265e57815161264588826125d7565b975061265083612b0b565b925050600181019050612631565b5085935050505092915050565b61267481612c61565b82525050565b61268381612ca4565b82525050565b61269281612cb6565b82525050565b60006126a382612b00565b6126ad8185612b29565b93506126bd818560208601612cec565b6126c681612e41565b840191505092915050565b60006126de602383612b29565b91506126e982612e52565b604082019050919050565b6000612701602683612b29565b915061270c82612ea1565b604082019050919050565b6000612724602283612b29565b915061272f82612ef0565b604082019050919050565b6000612747601d83612b29565b915061275282612f3f565b602082019050919050565b600061276a602683612b29565b915061277582612f68565b604082019050919050565b600061278d602083612b29565b915061279882612fb7565b602082019050919050565b60006127b0602583612b29565b91506127bb82612fe0565b604082019050919050565b60006127d3602483612b29565b91506127de8261302f565b604082019050919050565b60006127f6602583612b29565b91506128018261307e565b604082019050919050565b61281581612c8d565b82525050565b61282481612c97565b82525050565b600060208201905061283f60008301846125fe565b92915050565b600060c08201905061285a60008301896125fe565b612867602083018861280c565b6128746040830187612689565b6128816060830186612689565b61288e60808301856125fe565b61289b60a083018461280c565b979650505050505050565b60006020820190506128bb600083018461266b565b92915050565b60006020820190506128d6600083018461267a565b92915050565b600060208201905081810360008301526128f68184612698565b905092915050565b60006020820190508181036000830152612917816126d1565b9050919050565b60006020820190508181036000830152612937816126f4565b9050919050565b6000602082019050818103600083015261295781612717565b9050919050565b600060208201905081810360008301526129778161273a565b9050919050565b600060208201905081810360008301526129978161275d565b9050919050565b600060208201905081810360008301526129b781612780565b9050919050565b600060208201905081810360008301526129d7816127a3565b9050919050565b600060208201905081810360008301526129f7816127c6565b9050919050565b60006020820190508181036000830152612a17816127e9565b9050919050565b6000602082019050612a33600083018461280c565b92915050565b600060a082019050612a4e600083018861280c565b612a5b6020830187612689565b8181036040830152612a6d818661260d565b9050612a7c60608301856125fe565b612a89608083018461280c565b9695505050505050565b6000606082019050612aa8600083018661280c565b612ab5602083018561280c565b612ac2604083018461280c565b949350505050565b6000602082019050612adf600083018461281b565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612b4582612c8d565b9150612b5083612c8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b8557612b84612d51565b5b828201905092915050565b6000612b9b82612c8d565b9150612ba683612c8d565b925082612bb657612bb5612d80565b5b828204905092915050565b6000612bcc82612c8d565b9150612bd783612c8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c1057612c0f612d51565b5b828202905092915050565b6000612c2682612c8d565b9150612c3183612c8d565b925082821015612c4457612c43612d51565b5b828203905092915050565b6000612c5a82612c6d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612caf82612cc8565b9050919050565b6000612cc182612c8d565b9050919050565b6000612cd382612cda565b9050919050565b6000612ce582612c6d565b9050919050565b60005b83811015612d0a578082015181840152602081019050612cef565b83811115612d19576000848401525b50505050565b60006002820490506001821680612d3757607f821691505b60208210811415612d4b57612d4a612daf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6130d681612c4f565b81146130e157600080fd5b50565b6130ed81612c61565b81146130f857600080fd5b50565b61310481612c8d565b811461310f57600080fd5b5056fea2646970667358221220bc92b91236bc843b4cfa85e4bc7956fa344d55cdd775bbc00460d14f2771038464736f6c63430008070033

Deployed Bytecode Sourcemap

21512:16610:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23547:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25878:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24647:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26659:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24491:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29946:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33130:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27329:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32902:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22430:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32385:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33246:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24818:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5103:103;;;;;;;;;;;;;:::i;:::-;;4452:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23757:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21989:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21956:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28070:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22301:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25151:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33006:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32778:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32597:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32265:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33354:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25407:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5361:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22266:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23547:91;23592:13;23625:5;23618:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23547:91;:::o;25878:201::-;25961:4;25978:13;25994:12;:10;:12::i;:::-;25978:28;;26017:32;26026:5;26033:7;26042:6;26017:8;:32::i;:::-;26067:4;26060:11;;;25878:201;;;;:::o;24647:108::-;24708:7;24735:12;;24728:19;;24647:108;:::o;26659:261::-;26756:4;26773:15;26791:12;:10;:12::i;:::-;26773:30;;26814:38;26830:4;26836:7;26845:6;26814:15;:38::i;:::-;26863:27;26873:4;26879:2;26883:6;26863:9;:27::i;:::-;26908:4;26901:11;;;26659:261;;;;;:::o;24491:91::-;24540:5;24565:9;;;;;;;;;;;24558:16;;24491:91;:::o;29946:156::-;30009:4;30035:16;;;;;;;;;;;30034:17;:33;;;;;30063:4;;;;;;;;;;;30055:12;;:4;:12;;;;30034:33;:58;;;;;30071:21;;;;;;;;;;;30034:58;30026:66;;29946:156;;;:::o;33130:102::-;4683:12;:10;:12::i;:::-;4672:23;;:7;:5;:7::i;:::-;:23;;;4664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33217:7:::1;33202:12;:22;;;;33130:102:::0;:::o;27329:238::-;27417:4;27434:13;27450:12;:10;:12::i;:::-;27434:28;;27473:64;27482:5;27489:7;27526:10;27498:25;27508:5;27515:7;27498:9;:25::i;:::-;:38;;;;:::i;:::-;27473:8;:64::i;:::-;27555:4;27548:11;;;27329:238;;;;:::o;32902:96::-;4683:12;:10;:12::i;:::-;4672:23;;:7;:5;:7::i;:::-;:23;;;4664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32982:8:::1;32971;;:19;;;;;;;;;;;;;;;;;;32902:96:::0;:::o;22430:40::-;;;;;;;;;;;;;:::o;32385:204::-;4683:12;:10;:12::i;:::-;4672:23;;:7;:5;:7::i;:::-;:23;;;4664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32498:1:::1;32478:22;;:8;:22;;;;32470:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32575:6;32553:9;:19;32563:8;32553:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32385:204:::0;;:::o;33246:94::-;4683:12;:10;:12::i;:::-;4672:23;;:7;:5;:7::i;:::-;:23;;;4664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33324:8:::1;33314:7;:18;;;;33246:94:::0;:::o;24818:127::-;24892:7;24919:9;:18;24929:7;24919:18;;;;;;;;;;;;;;;;24912:25;;24818:127;;;:::o;5103:103::-;4683:12;:10;:12::i;:::-;4672:23;;:7;:5;:7::i;:::-;:23;;;4664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5168:30:::1;5195:1;5168:18;:30::i;:::-;5103:103::o:0;4452:87::-;4498:7;4525:6;;;;;;;;;;;4518:13;;4452:87;:::o;23757:95::-;23804:13;23837:7;23830:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23757:95;:::o;21989:31::-;;;;:::o;21956:26::-;;;;:::o;28070:436::-;28163:4;28180:13;28196:12;:10;:12::i;:::-;28180:28;;28219:24;28246:25;28256:5;28263:7;28246:9;:25::i;:::-;28219:52;;28310:15;28290:16;:35;;28282:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28403:60;28412:5;28419:7;28447:15;28428:16;:34;28403:8;:60::i;:::-;28494:4;28487:11;;;;28070:436;;;;:::o;22301:19::-;;;;;;;;;;;;;:::o;25151:193::-;25230:4;25247:13;25263:12;:10;:12::i;:::-;25247:28;;25286;25296:5;25303:2;25307:6;25286:9;:28::i;:::-;25332:4;25325:11;;;25151:193;;;;:::o;33006:108::-;4683:12;:10;:12::i;:::-;4672:23;;:7;:5;:7::i;:::-;:23;;;4664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33097:8:::1;33073:6;;:33;;;;;;;;;;;;;;;;;;33006:108:::0;:::o;32778:109::-;4683:12;:10;:12::i;:::-;4672:23;;:7;:5;:7::i;:::-;:23;;;4664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32872:7:::1;32852:17;:27;;;;32778:109:::0;:::o;32597:167::-;4683:12;:10;:12::i;:::-;4672:23;;:7;:5;:7::i;:::-;:23;;;4664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32698:6:::1;32674:21;;:30;;;;;;;;;;;;;;;;;;32720:36;32749:6;32720:36;;;;;;:::i;:::-;;;;;;;;32597:167:::0;:::o;32265:109::-;32324:4;32347:9;:19;32357:8;32347:19;;;;;;;;;;;;;;;;;;;;;;;;;32340:26;;32265:109;;;:::o;33354:101::-;33395:7;33422:25;33439:7;;33422:12;;:16;;:25;;;;:::i;:::-;33415:32;;33354:101;:::o;25407:151::-;25496:7;25523:11;:18;25535:5;25523:18;;;;;;;;;;;;;;;:27;25542:7;25523:27;;;;;;;;;;;;;;;;25516:34;;25407:151;;;;:::o;5361:201::-;4683:12;:10;:12::i;:::-;4672:23;;:7;:5;:7::i;:::-;:23;;;4664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5470:1:::1;5450:22;;:8;:22;;;;5442:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5526:28;5545:8;5526:18;:28::i;:::-;5361:201:::0;:::o;22266:28::-;;;;;;;;;;;;;:::o;3317:98::-;3370:7;3397:10;3390:17;;3317:98;:::o;35505:380::-;35658:1;35641:19;;:5;:19;;;;35633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35739:1;35720:21;;:7;:21;;;;35712:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35823:6;35793:11;:18;35805:5;35793:18;;;;;;;;;;;;;;;:27;35812:7;35793:27;;;;;;;;;;;;;;;:36;;;;35861:7;35845:32;;35854:5;35845:32;;;35870:6;35845:32;;;;;;:::i;:::-;;;;;;;;35505:380;;;:::o;36176:453::-;36311:24;36338:25;36348:5;36355:7;36338:9;:25::i;:::-;36311:52;;36398:17;36378:16;:37;36374:248;;36460:6;36440:16;:26;;36432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36544:51;36553:5;36560:7;36588:6;36569:16;:25;36544:8;:51::i;:::-;36374:248;36300:329;36176:453;;;:::o;28985:947::-;29098:1;29082:18;;:4;:18;;;;29074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29175:1;29161:16;;:2;:16;;;;29153:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29230:38;29251:4;29257:2;29261:6;29230:20;:38::i;:::-;29281:19;29303:9;:15;29313:4;29303:15;;;;;;;;;;;;;;;;29281:37;;29352:6;29337:11;:21;;29329:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;29471:6;29457:11;:20;29439:9;:15;29449:4;29439:15;;;;;;;;;;;;;;;:38;;;;29513:24;29532:4;29513:18;:24::i;:::-;29510:70;;;29553:15;:13;:15::i;:::-;29510:70;29602:25;29630:6;29602:34;;29652:9;:15;29662:4;29652:15;;;;;;;;;;;;;;;;;;;;;;;;;29651:16;:34;;;;;29672:9;:13;29682:2;29672:13;;;;;;;;;;;;;;;;;;;;;;;;;29671:14;29651:34;29650:50;;;;;29698:2;29690:10;;:4;;;;;;;;;;;:10;;;29650:50;29647:117;;;29737:15;29745:6;29737:7;:15::i;:::-;29716:36;;29647:117;29793:17;29776:9;:13;29786:2;29776:13;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;29843:2;29828:37;;29837:4;29828:37;;;29847:17;29828:37;;;;;;:::i;:::-;;;;;;;;29876:48;29896:4;29902:2;29906:17;29876:19;:48::i;:::-;29063:869;;28985:947;;;:::o;5722:191::-;5796:16;5815:6;;;;;;;;;;;5796:25;;5841:8;5832:6;;:17;;;;;;;;;;;;;;;;;;5896:8;5865:40;;5886:8;5865:40;;;;;;;;;;;;5785:128;5722:191;:::o;8634:98::-;8692:7;8723:1;8719;:5;;;;:::i;:::-;8712:12;;8634:98;;;;:::o;37229:125::-;;;;:::o;30112:1537::-;22528:4;22509:16;;:23;;;;;;;;;;;;;;;;;;30179::::1;30205:9;:19;30215:8;;;;;;;;;;;30205:19;;;;;;;;;;;;;;;;30179:45;;30257:17;;30239:15;:35;30235:74;;;30291:7;;;30235:74;30356:49;30385:9;:19;30395:8;;;;;;;;;;;30385:19;;;;;;;;;;;;;;;;30356:9;:24;30374:4;30356:24;;;;;;;;;;;;;;;;:28;;:49;;;;:::i;:::-;30329:9;:24;30347:4;30329:24;;;;;;;;;;;;;;;:76;;;;30438:1;30416:9;:19;30426:8;;;;;;;;;;;30416:19;;;;;;;;;;;;;;;:23;;;;30460;30486:22;30506:1;30486:15;:19;;:22;;;;:::i;:::-;30460:48;;30519:20;30542:36;30562:15;30542;:19;;:36;;;;:::i;:::-;30519:59;;30611:1;30595:12;:17;30591:56;;;30629:7;;;;;30591:56;30657:21;30695:1;30681:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30657:40;;30726:4;30708;30713:1;30708:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30752:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30742:4;30747:1;30742:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30778:21;30802;30778:45;;30836:54;30853:4;30868:6;;;;;;;;;;;30877:12;30836:8;:54::i;:::-;30901:6;;;;;;;;;;;:57;;;30973:12;31000:1;31016:4;31043;31063:15;30901:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31102:26;31131:40;31157:13;31131:21;:25;;:40;;;;:::i;:::-;31102:69;;31184:57;31201:4;31216:6;;;;;;;;;;;31225:15;31184:8;:57::i;:::-;31274:1;31256:15;:19;:45;;;;;31300:1;31279:18;:22;31256:45;31252:309;;;31318:6;;;;;;;;;;;:22;;;31348:18;31394:4;31418:15;31452:1;31472::::0;31492:8:::1;;;;;;;;;;;31519:15;31318:231;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31252:309;31576:65;31591:15;31608:18;31628:12;31576:65;;;;;;;;:::i;:::-;;;;;;;;30158:1491;;;;;;22543:1;22574:5:::0;22555:16;;:24;;;;;;;;;;;;;;;;;;30112:1537::o;31663:594::-;31714:7;31745:25;31762:7;;31745:12;;:16;;:25;;;;:::i;:::-;31734:8;:36;;;;31781:17;31801:31;31826:5;31801:20;31812:8;;31801:6;:10;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;31781:51;;31845:18;31866:30;31890:5;31866:19;31877:7;;31866:6;:10;;:19;;;;:::i;:::-;:23;;:30;;;;:::i;:::-;31845:51;;31925:31;31945:10;31925:9;:15;22152:42;31925:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;31907:9;:15;22152:42;31907:15;;;;;;;;;;;;;;;:49;;;;22152:42;31972:32;;31981:4;;;;;;;;;;;31972:32;;;31993:10;31972:32;;;;;;:::i;:::-;;;;;;;;32017:23;32043:35;32072:5;32043:24;32054:12;;32043:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;32017:61;;32111:40;32135:15;32111:9;:19;32121:8;;;;;;;;;;;32111:19;;;;;;;;;;;;;;;;:23;;:40;;;;:::i;:::-;32089:9;:19;32099:8;;;;;;;;;;;32089:19;;;;;;;;;;;;;;;:62;;;;32182:8;;;;;;;;;;;32167:41;;32176:4;;;;;;;;;;;32167:41;;;32192:15;32167:41;;;;;;:::i;:::-;;;;;;;;32228:21;32239:9;32228:6;:10;;:21;;;;:::i;:::-;32221:28;;;;;31663:594;;;:::o;37958:124::-;;;;:::o;9771:98::-;9829:7;9860:1;9856;:5;;;;:::i;:::-;9849:12;;9771:98;;;;:::o;9015:::-;9073:7;9104:1;9100;:5;;;;:::i;:::-;9093:12;;9015:98;;;;:::o;9372:::-;9430:7;9461:1;9457;:5;;;;:::i;:::-;9450:12;;9372:98;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:468::-;2596:6;2604;2653:2;2641:9;2632:7;2628:23;2624:32;2621:119;;;2659:79;;:::i;:::-;2621:119;2779:1;2804:53;2849:7;2840:6;2829:9;2825:22;2804:53;:::i;:::-;2794:63;;2750:117;2906:2;2932:50;2974:7;2965:6;2954:9;2950:22;2932:50;:::i;:::-;2922:60;;2877:115;2531:468;;;;;:::o;3005:474::-;3073:6;3081;3130:2;3118:9;3109:7;3105:23;3101:32;3098:119;;;3136:79;;:::i;:::-;3098:119;3256:1;3281:53;3326:7;3317:6;3306:9;3302:22;3281:53;:::i;:::-;3271:63;;3227:117;3383:2;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3354:118;3005:474;;;;;:::o;3485:323::-;3541:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:119;;;3596:79;;:::i;:::-;3558:119;3716:1;3741:50;3783:7;3774:6;3763:9;3759:22;3741:50;:::i;:::-;3731:60;;3687:114;3485:323;;;;:::o;3814:329::-;3873:6;3922:2;3910:9;3901:7;3897:23;3893:32;3890:119;;;3928:79;;:::i;:::-;3890:119;4048:1;4073:53;4118:7;4109:6;4098:9;4094:22;4073:53;:::i;:::-;4063:63;;4019:117;3814:329;;;;:::o;4149:663::-;4237:6;4245;4253;4302:2;4290:9;4281:7;4277:23;4273:32;4270:119;;;4308:79;;:::i;:::-;4270:119;4428:1;4453:64;4509:7;4500:6;4489:9;4485:22;4453:64;:::i;:::-;4443:74;;4399:128;4566:2;4592:64;4648:7;4639:6;4628:9;4624:22;4592:64;:::i;:::-;4582:74;;4537:129;4705:2;4731:64;4787:7;4778:6;4767:9;4763:22;4731:64;:::i;:::-;4721:74;;4676:129;4149:663;;;;;:::o;4818:179::-;4887:10;4908:46;4950:3;4942:6;4908:46;:::i;:::-;4986:4;4981:3;4977:14;4963:28;;4818:179;;;;:::o;5003:108::-;5080:24;5098:5;5080:24;:::i;:::-;5075:3;5068:37;5003:108;;:::o;5117:118::-;5204:24;5222:5;5204:24;:::i;:::-;5199:3;5192:37;5117:118;;:::o;5271:732::-;5390:3;5419:54;5467:5;5419:54;:::i;:::-;5489:86;5568:6;5563:3;5489:86;:::i;:::-;5482:93;;5599:56;5649:5;5599:56;:::i;:::-;5678:7;5709:1;5694:284;5719:6;5716:1;5713:13;5694:284;;;5795:6;5789:13;5822:63;5881:3;5866:13;5822:63;:::i;:::-;5815:70;;5908:60;5961:6;5908:60;:::i;:::-;5898:70;;5754:224;5741:1;5738;5734:9;5729:14;;5694:284;;;5698:14;5994:3;5987:10;;5395:608;;;5271:732;;;;:::o;6009:109::-;6090:21;6105:5;6090:21;:::i;:::-;6085:3;6078:34;6009:109;;:::o;6124:175::-;6233:59;6286:5;6233:59;:::i;:::-;6228:3;6221:72;6124:175;;:::o;6305:147::-;6400:45;6439:5;6400:45;:::i;:::-;6395:3;6388:58;6305:147;;:::o;6458:364::-;6546:3;6574:39;6607:5;6574:39;:::i;:::-;6629:71;6693:6;6688:3;6629:71;:::i;:::-;6622:78;;6709:52;6754:6;6749:3;6742:4;6735:5;6731:16;6709:52;:::i;:::-;6786:29;6808:6;6786:29;:::i;:::-;6781:3;6777:39;6770:46;;6550:272;6458:364;;;;:::o;6828:366::-;6970:3;6991:67;7055:2;7050:3;6991:67;:::i;:::-;6984:74;;7067:93;7156:3;7067:93;:::i;:::-;7185:2;7180:3;7176:12;7169:19;;6828:366;;;:::o;7200:::-;7342:3;7363:67;7427:2;7422:3;7363:67;:::i;:::-;7356:74;;7439:93;7528:3;7439:93;:::i;:::-;7557:2;7552:3;7548:12;7541:19;;7200:366;;;:::o;7572:::-;7714:3;7735:67;7799:2;7794:3;7735:67;:::i;:::-;7728:74;;7811:93;7900:3;7811:93;:::i;:::-;7929:2;7924:3;7920:12;7913:19;;7572:366;;;:::o;7944:::-;8086:3;8107:67;8171:2;8166:3;8107:67;:::i;:::-;8100:74;;8183:93;8272:3;8183:93;:::i;:::-;8301:2;8296:3;8292:12;8285:19;;7944:366;;;:::o;8316:::-;8458:3;8479:67;8543:2;8538:3;8479:67;:::i;:::-;8472:74;;8555:93;8644:3;8555:93;:::i;:::-;8673:2;8668:3;8664:12;8657:19;;8316:366;;;:::o;8688:::-;8830:3;8851:67;8915:2;8910:3;8851:67;:::i;:::-;8844:74;;8927:93;9016:3;8927:93;:::i;:::-;9045:2;9040:3;9036:12;9029:19;;8688:366;;;:::o;9060:::-;9202:3;9223:67;9287:2;9282:3;9223:67;:::i;:::-;9216:74;;9299:93;9388:3;9299:93;:::i;:::-;9417:2;9412:3;9408:12;9401:19;;9060:366;;;:::o;9432:::-;9574:3;9595:67;9659:2;9654:3;9595:67;:::i;:::-;9588:74;;9671:93;9760:3;9671:93;:::i;:::-;9789:2;9784:3;9780:12;9773:19;;9432:366;;;:::o;9804:::-;9946:3;9967:67;10031:2;10026:3;9967:67;:::i;:::-;9960:74;;10043:93;10132:3;10043:93;:::i;:::-;10161:2;10156:3;10152:12;10145:19;;9804:366;;;:::o;10176:118::-;10263:24;10281:5;10263:24;:::i;:::-;10258:3;10251:37;10176:118;;:::o;10300:112::-;10383:22;10399:5;10383:22;:::i;:::-;10378:3;10371:35;10300:112;;:::o;10418:222::-;10511:4;10549:2;10538:9;10534:18;10526:26;;10562:71;10630:1;10619:9;10615:17;10606:6;10562:71;:::i;:::-;10418:222;;;;:::o;10646:807::-;10895:4;10933:3;10922:9;10918:19;10910:27;;10947:71;11015:1;11004:9;11000:17;10991:6;10947:71;:::i;:::-;11028:72;11096:2;11085:9;11081:18;11072:6;11028:72;:::i;:::-;11110:80;11186:2;11175:9;11171:18;11162:6;11110:80;:::i;:::-;11200;11276:2;11265:9;11261:18;11252:6;11200:80;:::i;:::-;11290:73;11358:3;11347:9;11343:19;11334:6;11290:73;:::i;:::-;11373;11441:3;11430:9;11426:19;11417:6;11373:73;:::i;:::-;10646:807;;;;;;;;;:::o;11459:210::-;11546:4;11584:2;11573:9;11569:18;11561:26;;11597:65;11659:1;11648:9;11644:17;11635:6;11597:65;:::i;:::-;11459:210;;;;:::o;11675:266::-;11790:4;11828:2;11817:9;11813:18;11805:26;;11841:93;11931:1;11920:9;11916:17;11907:6;11841:93;:::i;:::-;11675:266;;;;:::o;11947:313::-;12060:4;12098:2;12087:9;12083:18;12075:26;;12147:9;12141:4;12137:20;12133:1;12122:9;12118:17;12111:47;12175:78;12248:4;12239:6;12175:78;:::i;:::-;12167:86;;11947:313;;;;:::o;12266:419::-;12432:4;12470:2;12459:9;12455:18;12447:26;;12519:9;12513:4;12509:20;12505:1;12494:9;12490:17;12483:47;12547:131;12673:4;12547:131;:::i;:::-;12539:139;;12266:419;;;:::o;12691:::-;12857:4;12895:2;12884:9;12880:18;12872:26;;12944:9;12938:4;12934:20;12930:1;12919:9;12915:17;12908:47;12972:131;13098:4;12972:131;:::i;:::-;12964:139;;12691:419;;;:::o;13116:::-;13282:4;13320:2;13309:9;13305:18;13297:26;;13369:9;13363:4;13359:20;13355:1;13344:9;13340:17;13333:47;13397:131;13523:4;13397:131;:::i;:::-;13389:139;;13116:419;;;:::o;13541:::-;13707:4;13745:2;13734:9;13730:18;13722:26;;13794:9;13788:4;13784:20;13780:1;13769:9;13765:17;13758:47;13822:131;13948:4;13822:131;:::i;:::-;13814:139;;13541:419;;;:::o;13966:::-;14132:4;14170:2;14159:9;14155:18;14147:26;;14219:9;14213:4;14209:20;14205:1;14194:9;14190:17;14183:47;14247:131;14373:4;14247:131;:::i;:::-;14239:139;;13966:419;;;:::o;14391:::-;14557:4;14595:2;14584:9;14580:18;14572:26;;14644:9;14638:4;14634:20;14630:1;14619:9;14615:17;14608:47;14672:131;14798:4;14672:131;:::i;:::-;14664:139;;14391:419;;;:::o;14816:::-;14982:4;15020:2;15009:9;15005:18;14997:26;;15069:9;15063:4;15059:20;15055:1;15044:9;15040:17;15033:47;15097:131;15223:4;15097:131;:::i;:::-;15089:139;;14816:419;;;:::o;15241:::-;15407:4;15445:2;15434:9;15430:18;15422:26;;15494:9;15488:4;15484:20;15480:1;15469:9;15465:17;15458:47;15522:131;15648:4;15522:131;:::i;:::-;15514:139;;15241:419;;;:::o;15666:::-;15832:4;15870:2;15859:9;15855:18;15847:26;;15919:9;15913:4;15909:20;15905:1;15894:9;15890:17;15883:47;15947:131;16073:4;15947:131;:::i;:::-;15939:139;;15666:419;;;:::o;16091:222::-;16184:4;16222:2;16211:9;16207:18;16199:26;;16235:71;16303:1;16292:9;16288:17;16279:6;16235:71;:::i;:::-;16091:222;;;;:::o;16319:831::-;16582:4;16620:3;16609:9;16605:19;16597:27;;16634:71;16702:1;16691:9;16687:17;16678:6;16634:71;:::i;:::-;16715:80;16791:2;16780:9;16776:18;16767:6;16715:80;:::i;:::-;16842:9;16836:4;16832:20;16827:2;16816:9;16812:18;16805:48;16870:108;16973:4;16964:6;16870:108;:::i;:::-;16862:116;;16988:72;17056:2;17045:9;17041:18;17032:6;16988:72;:::i;:::-;17070:73;17138:3;17127:9;17123:19;17114:6;17070:73;:::i;:::-;16319:831;;;;;;;;:::o;17156:442::-;17305:4;17343:2;17332:9;17328:18;17320:26;;17356:71;17424:1;17413:9;17409:17;17400:6;17356:71;:::i;:::-;17437:72;17505:2;17494:9;17490:18;17481:6;17437:72;:::i;:::-;17519;17587:2;17576:9;17572:18;17563:6;17519:72;:::i;:::-;17156:442;;;;;;:::o;17604:214::-;17693:4;17731:2;17720:9;17716:18;17708:26;;17744:67;17808:1;17797:9;17793:17;17784:6;17744:67;:::i;:::-;17604:214;;;;:::o;17905:132::-;17972:4;17995:3;17987:11;;18025:4;18020:3;18016:14;18008:22;;17905:132;;;:::o;18043:114::-;18110:6;18144:5;18138:12;18128:22;;18043:114;;;:::o;18163:99::-;18215:6;18249:5;18243:12;18233:22;;18163:99;;;:::o;18268:113::-;18338:4;18370;18365:3;18361:14;18353:22;;18268:113;;;:::o;18387:184::-;18486:11;18520:6;18515:3;18508:19;18560:4;18555:3;18551:14;18536:29;;18387:184;;;;:::o;18577:169::-;18661:11;18695:6;18690:3;18683:19;18735:4;18730:3;18726:14;18711:29;;18577:169;;;;:::o;18752:305::-;18792:3;18811:20;18829:1;18811:20;:::i;:::-;18806:25;;18845:20;18863:1;18845:20;:::i;:::-;18840:25;;18999:1;18931:66;18927:74;18924:1;18921:81;18918:107;;;19005:18;;:::i;:::-;18918:107;19049:1;19046;19042:9;19035:16;;18752:305;;;;:::o;19063:185::-;19103:1;19120:20;19138:1;19120:20;:::i;:::-;19115:25;;19154:20;19172:1;19154:20;:::i;:::-;19149:25;;19193:1;19183:35;;19198:18;;:::i;:::-;19183:35;19240:1;19237;19233:9;19228:14;;19063:185;;;;:::o;19254:348::-;19294:7;19317:20;19335:1;19317:20;:::i;:::-;19312:25;;19351:20;19369:1;19351:20;:::i;:::-;19346:25;;19539:1;19471:66;19467:74;19464:1;19461:81;19456:1;19449:9;19442:17;19438:105;19435:131;;;19546:18;;:::i;:::-;19435:131;19594:1;19591;19587:9;19576:20;;19254:348;;;;:::o;19608:191::-;19648:4;19668:20;19686:1;19668:20;:::i;:::-;19663:25;;19702:20;19720:1;19702:20;:::i;:::-;19697:25;;19741:1;19738;19735:8;19732:34;;;19746:18;;:::i;:::-;19732:34;19791:1;19788;19784:9;19776:17;;19608:191;;;;:::o;19805:96::-;19842:7;19871:24;19889:5;19871:24;:::i;:::-;19860:35;;19805:96;;;:::o;19907:90::-;19941:7;19984:5;19977:13;19970:21;19959:32;;19907:90;;;:::o;20003:126::-;20040:7;20080:42;20073:5;20069:54;20058:65;;20003:126;;;:::o;20135:77::-;20172:7;20201:5;20190:16;;20135:77;;;:::o;20218:86::-;20253:7;20293:4;20286:5;20282:16;20271:27;;20218:86;;;:::o;20310:148::-;20382:9;20415:37;20446:5;20415:37;:::i;:::-;20402:50;;20310:148;;;:::o;20464:121::-;20522:9;20555:24;20573:5;20555:24;:::i;:::-;20542:37;;20464:121;;;:::o;20591:126::-;20641:9;20674:37;20705:5;20674:37;:::i;:::-;20661:50;;20591:126;;;:::o;20723:113::-;20773:9;20806:24;20824:5;20806:24;:::i;:::-;20793:37;;20723:113;;;:::o;20842:307::-;20910:1;20920:113;20934:6;20931:1;20928:13;20920:113;;;21019:1;21014:3;21010:11;21004:18;21000:1;20995:3;20991:11;20984:39;20956:2;20953:1;20949:10;20944:15;;20920:113;;;21051:6;21048:1;21045:13;21042:101;;;21131:1;21122:6;21117:3;21113:16;21106:27;21042:101;20891:258;20842:307;;;:::o;21155:320::-;21199:6;21236:1;21230:4;21226:12;21216:22;;21283:1;21277:4;21273:12;21304:18;21294:81;;21360:4;21352:6;21348:17;21338:27;;21294:81;21422:2;21414:6;21411:14;21391:18;21388:38;21385:84;;;21441:18;;:::i;:::-;21385:84;21206:269;21155:320;;;:::o;21481:180::-;21529:77;21526:1;21519:88;21626:4;21623:1;21616:15;21650:4;21647:1;21640:15;21667:180;21715:77;21712:1;21705:88;21812:4;21809:1;21802:15;21836:4;21833:1;21826:15;21853:180;21901:77;21898:1;21891:88;21998:4;21995:1;21988:15;22022:4;22019:1;22012:15;22039:180;22087:77;22084:1;22077:88;22184:4;22181:1;22174:15;22208:4;22205:1;22198:15;22225:180;22273:77;22270:1;22263:88;22370:4;22367:1;22360:15;22394:4;22391:1;22384:15;22534:117;22643:1;22640;22633:12;22657:102;22698:6;22749:2;22745:7;22740:2;22733:5;22729:14;22725:28;22715:38;;22657:102;;;:::o;22765:222::-;22905:34;22901:1;22893:6;22889:14;22882:58;22974:5;22969:2;22961:6;22957:15;22950:30;22765:222;:::o;22993:225::-;23133:34;23129:1;23121:6;23117:14;23110:58;23202:8;23197:2;23189:6;23185:15;23178:33;22993:225;:::o;23224:221::-;23364:34;23360:1;23352:6;23348:14;23341:58;23433:4;23428:2;23420:6;23416:15;23409:29;23224:221;:::o;23451:179::-;23591:31;23587:1;23579:6;23575:14;23568:55;23451:179;:::o;23636:225::-;23776:34;23772:1;23764:6;23760:14;23753:58;23845:8;23840:2;23832:6;23828:15;23821:33;23636:225;:::o;23867:182::-;24007:34;24003:1;23995:6;23991:14;23984:58;23867:182;:::o;24055:224::-;24195:34;24191:1;24183:6;24179:14;24172:58;24264:7;24259:2;24251:6;24247:15;24240:32;24055:224;:::o;24285:223::-;24425:34;24421:1;24413:6;24409:14;24402:58;24494:6;24489:2;24481:6;24477:15;24470:31;24285:223;:::o;24514:224::-;24654:34;24650:1;24642:6;24638:14;24631:58;24723:7;24718:2;24710:6;24706:15;24699:32;24514:224;:::o;24744:122::-;24817:24;24835:5;24817:24;:::i;:::-;24810:5;24807:35;24797:63;;24856:1;24853;24846:12;24797:63;24744:122;:::o;24872:116::-;24942:21;24957:5;24942:21;:::i;:::-;24935:5;24932:32;24922:60;;24978:1;24975;24968:12;24922:60;24872:116;:::o;24994:122::-;25067:24;25085:5;25067:24;:::i;:::-;25060:5;25057:35;25047:63;;25106:1;25103;25096:12;25047:63;24994:122;:::o

Swarm Source

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