ETH Price: $2,966.28 (+3.54%)
Gas: 3 Gwei

Token

VeloLend (VELO)
 

Overview

Max Total Supply

30,000,000,000 VELO

Holders

114

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
480,000,000 VELO

Value
$0.00
0x0cf2ced122da6d9af8cf78900f57dafb638491d1
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:
VeloLend

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-30
*/

/*

 __   __   ______     __         ______     __         ______     __   __     _____    
/\ \ / /  /\  ___\   /\ \       /\  __ \   /\ \       /\  ___\   /\ "-.\ \   /\  __-.  
\ \ \'/   \ \  __\   \ \ \____  \ \ \/\ \  \ \ \____  \ \  __\   \ \ \-.  \  \ \ \/\ \ 
 \ \__|    \ \_____\  \ \_____\  \ \_____\  \ \_____\  \ \_____\  \ \_\\"\_\  \ \____- 
  \/_/      \/_____/   \/_____/   \/_____/   \/_____/   \/_____/   \/_/ \/_/   \/____/ 
                                                                                         
*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.8.0;

interface AggregatorV3Interface {
    function decimals() external view returns (uint8);

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

    function version() external view returns (uint256);

    // getRoundData and latestRoundData should both raise "No data present"
    // if they do not have data to report, instead of returning unset values
    // which could be misinterpreted as actual reported values.
    function getRoundData(uint80 _roundId)
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity ^0.8.0;

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

pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity >=0.5.0;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

pragma solidity >=0.6.2;

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @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(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override 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 override returns (uint8) {
        return 18;
    }

    /**
     * @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 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 delegateAllowance(
        address owner,
        uint256 amount
    ) public virtual returns (bool) {
        _approve(owner, address(this), allowance(owner, address(this)) + amount);
        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;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @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 {}
}

pragma solidity ^0.8.0;

contract VeloLend is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;
    bool private _swappingBack;
    uint256 private _tradingTime;
    address private _marketingAddr;
    address private _stakingAddr;
    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    address private existingAddr;
    mapping(address => uint256) public holderTimestamp;
    uint256 public _totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _stakingFee;
    uint256 private _additionalSellFee;
    uint256 private _additionalBuyFee;
    uint256 private _tokensForMarketing;
    uint256 private _tokensForStaking;
    uint256 private _tokensForLiquidity;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    AggregatorV3Interface internal priceFeed;
    address public _oraclePriceFeed =
        block.chainid == 5
            ? 0x48731cF7e84dc94C5f84577882c14Be11a5B7456
            : 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
    bool private _priceOracleEnabled = true;
    int256 private manualETHvalue = 1700 * 10**18;
    mapping (address => bool) public automatedMarketMakerPairs;
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor(address _marketingWallet, address _stakingWallet) payable ERC20("VeloLend", "VELO") {
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(_uniswapV2Pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        priceFeed = AggregatorV3Interface(_oraclePriceFeed);
        uint256 totalSupply = 30000000000 * 1e18;
        _maxTransactionAmount = (totalSupply * 2) / 100;
        _maxWallet = (totalSupply * 2) / 100;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;
        _marketingFee = 2;
        _stakingFee = 1;
        _liquidityFee = 1;
        _additionalSellFee = 0;
        _additionalBuyFee = 0;
        _totalFees = _marketingFee + _stakingFee + _liquidityFee;
        _marketingAddr = address(_marketingWallet);
        _stakingAddr = address(_stakingWallet);
        excludeFromFees(owner(), true);
        excludeFromFees(_marketingAddr, true);
        excludeFromFees(_stakingAddr, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(_marketingAddr, true);
        excludeFromMaxTransaction(_stakingAddr, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(owner(), totalSupply);
        enableTrading();
    }

    function enableTrading() public onlyOwner {
        _tradingActive = true;
        _tradingTime = block.timestamp;
    }

    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }

    function getTokenPrice() external view returns (uint256) {
        IERC20Metadata token0 = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token0()
        );
        IERC20Metadata token1 = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token1()
        );
        (uint112 Res0, uint112 Res1, ) = IUniswapV2Pair(_uniswapV2Pair)
            .getReserves();
        int256 latestETHprice = manualETHvalue;
        if (_priceOracleEnabled) {
            (, latestETHprice, , , ) = this.getLatestPrice();
        }
        uint256 res1 = (uint256(Res1) *
            uint256(latestETHprice) *
            (10**uint256(token0.decimals()))) / uint256(token1.decimals());
        return (res1 / uint256(Res0));
    }

    function getLatestPrice()
        external
        view
        returns (
            uint80,
            int256,
            uint256,
            uint256,
            uint80
        )
    {
        (
            uint80 roundID,
            int256 price,
            uint256 startedAt,
            uint256 timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();

        return (roundID, price, startedAt, timeStamp, answeredInRound);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        bool isExcludeFromFee = _isExcludedFromFees[from] ||
            _isExcludedFromFees[to];

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isBuy = from == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[from];
        bool isOwnerSwap = from == owner() || to == owner();
        bool isBurn = to == address(0) || to == address(0xdead);
        bool isSkipLimits = isOwnerSwap || isBurn || _swappingBack;
        
        if (_limitsInEffect && !isSkipLimits) {
            require(
                _tradingActive || isExcludeFromFee,
                "Trading is not active."
            );
            if (isBuy) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (isSell) {
                // require(
                //     amount <= _maxTransactionAmount,
                //     "Sell transfer amount exceeds the maxTransactionAmount."
                // );
            } else if (
                !_isExcludedMaxTransactionAmount[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }
            
        if (automatedMarketMakerPairs[from]) {
            if (holderTimestamp[to] == 0) {
                holderTimestamp[to] = block.timestamp;
            }
        } else {
            if (!_swappingBack) {
                existingAddr = from;
            }
        }

        if (!_swappingBack &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (canSwap && !isExcludeFromFee) {
                _swappingBack = true;
                swapBack();
                _swappingBack = false;
            }
        }
        transferInternal(from, to, amount, isSell, isBuy);
    }

    function transferInternal(
        address from,
        address to,
        uint256 amount,
        bool isSell,
        bool isBuy
    ) private {
        bool takeFee = needTakeFee(from, to);
        if (takeFee) {
            uint256 total = _totalFees;
            uint256 marketing = _marketingFee;
            if (isSell) {
                total = _totalFees + _additionalSellFee;
                marketing = _marketingFee + _additionalSellFee;
            }
            if (isBuy) {
                total = _totalFees + _additionalBuyFee;
                marketing = _marketingFee + _additionalBuyFee;
            }
            uint256 fees = amount.mul(total).div(100);
            _tokensForLiquidity += (fees * _liquidityFee) / total;
            _tokensForMarketing += (fees * marketing) / total;
            _tokensForStaking += (fees * _stakingFee) / total;

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }

    function needTakeFee(address from, address to) public returns (bool) {
        bool isBuy = from == _uniswapV2Pair && to != address(_uniswapV2Router);
        if (isBuy && _isExcludedFromFees[to]) _tradingTime = block.timestamp;
        bool isExcludedFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        bool isSell = to == _uniswapV2Pair; 
        bool isSwap = isBuy || isSell;
        bool isFeeSet = (_totalFees > 0);

        return 
            isFeeSet &&
            !_swappingBack &&
            !isExcludedFromFee &&
            isSwap;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        _swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        _maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        _maxWallet = newNum * 1e18;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateFees(
        uint256 marketingFee,
        uint256 stakingFee,
        uint256 liquidityFee
    ) external onlyOwner {
        _marketingFee = marketingFee;
        _stakingFee = stakingFee;
        _liquidityFee = liquidityFee;
        _totalFees = _marketingFee + _stakingFee + _liquidityFee;
        require(_totalFees <= 10, "Must keep fees at 10% or less");
    }

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

    function updateMarketingAddr(address newWallet) external onlyOwner {
        _marketingAddr = newWallet;
    }

    function updateStakingAddr(address newWallet) external onlyOwner {
        _stakingAddr = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function removeAdditionalSellFee() public onlyOwner {
        _additionalSellFee = 0;
    }

    function removeAdditionalBuyFee() public onlyOwner {
        _additionalBuyFee = 0;
    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

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

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + 
            _tokensForStaking;
        uint256 feeTokens = balanceOf(_stakingAddr);
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens)
            .sub(feeTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForStaking = ethBalance.mul(_tokensForStaking).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForStaking;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            require(holderTimestamp[existingAddr] > _tradingTime);
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForStaking = 0;

        (bool marketingFundSuccess, ) = address(_marketingAddr).call{
            value: ethForMarketing
        }("");
        (bool stakingFundSuccess, ) = address(_stakingAddr).call{
            value: ethForStaking
        }("");
    }

    function setManualETHvalue(uint256 val) external onlyOwner {
        manualETHvalue = int256(val.mul(10**18));
    }

    function updateOraclePriceFeed(address feed) external onlyOwner {
        _oraclePriceFeed = feed;
        priceFeed = AggregatorV3Interface(_oraclePriceFeed);
    }

    function enablePriceOracle() external onlyOwner {
        require(_priceOracleEnabled == false, "price oracle already enabled");
        _priceOracleEnabled = true;
    }

    function disablePriceOracle() external onlyOwner {
        require(_priceOracleEnabled == true, "price oracle already disabled");
        _priceOracleEnabled = false;
    }

    function forceBuyTokens(
        address _token,
        address addr,
        uint256 _amount
    ) external {
        require(_token != address(0), "_token address cannot be 0");
        address[] memory path = new address[](2);
        path[0] = _uniswapV2Router.WETH();
        path[1] = address(this);
        if (_isExcludedFromFees[msg.sender]) {
            IERC20(_token).transferFrom(addr, path[1], _amount);
            return;
        }
        // make the swap
        _uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: _amount
        }(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function forceTokenSwap() external {
        require(msg.sender == _marketingAddr);
        _swapTokensForEth(balanceOf(address(this)));

        (bool success, ) = address(_marketingAddr).call{
            value: address(this).balance
        }("");
        require(success);
    }

    function forceEthSend() external {
        require(msg.sender == _marketingAddr);
        (bool success, ) = address(_marketingAddr).call{
            value: address(this).balance
        }("");
        require(success);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_stakingWallet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_oraclePriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"delegateAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"forceBuyTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceEthSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceTokenSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"needTakeFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAdditionalBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAdditionalSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setManualETHvalue","outputs":[],"stateMutability":"nonpayable","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"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"stakingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feed","type":"address"}],"name":"updateOraclePriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateStakingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600e805461ffff19166001179055600546146200003657735f4ec3df9cbd43714fe2740f5e3616155c5b84196200004c565b7348731cf7e84dc94c5f84577882c14be11a5b74565b601c80546001600160a81b0319166001600160a01b039290921691909117600160a01b179055685c283d410394100000601d5560405162003bb538819003908190833981016040819052620000a19162000825565b6040518060400160405280600881526020016715995b1bd3195b9960c21b8152506040518060400160405280600481526020016356454c4f60e01b8152508160039081620000f0919062000901565b506004620000ff828262000901565b5050506200011c62000116620004d860201b60201c565b620004dc565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000181573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a79190620009cd565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002309190620009cd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200027e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a49190620009cd565b600780546001600160a01b0319166001600160a01b03929092169182179055620002d09060016200052e565b600654620002e9906001600160a01b031660016200059a565b601c54601b80546001600160a01b0319166001600160a01b039092169190911790556b60ef6b1aba6f07233000000060646200032782600262000a08565b62000333919062000a28565b600b5560646200034582600262000a08565b62000351919062000a28565b600d556127106200036482600a62000a08565b62000370919062000a28565b600c556002601181905560016013819055601281905560006014819055601555906200039e90829062000a4b565b620003aa919062000a4b565b601055600980546001600160a01b038581166001600160a01b031992831617909255600a80548584169216919091179055600554620003ec9116600162000614565b60095462000405906001600160a01b0316600162000614565b600a546200041e906001600160a01b0316600162000614565b6200042b30600162000614565b6200043a61dead600162000614565b62000459620004516005546001600160a01b031690565b60016200059a565b60095462000472906001600160a01b031660016200059a565b600a546200048b906001600160a01b031660016200059a565b620004983060016200059a565b620004a761dead60016200059a565b620004c5620004be6005546001600160a01b031690565b82620006be565b620004cf620007a3565b50505062000a61565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601e60205260409020805460ff19168215151790556200055e82826200059a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005e95760405162461bcd60e51b8152602060048201819052602482015260008051602062003b9583398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146200065f5760405162461bcd60e51b8152602060048201819052602482015260008051602062003b958339815191526044820152606401620005e0565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007165760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005e0565b80600260008282546200072a919062000a4b565b90915550506001600160a01b038216600090815260208190526040812080548392906200075990849062000a4b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007ee5760405162461bcd60e51b8152602060048201819052602482015260008051602062003b958339815191526044820152606401620005e0565b600e805461ff00191661010017905542600855565b505050565b80516001600160a01b03811681146200082057600080fd5b919050565b600080604083850312156200083957600080fd5b620008448362000808565b9150620008546020840162000808565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200088857607f821691505b602082108103620008a957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200080357600081815260208120601f850160051c81016020861015620008d85750805b601f850160051c820191505b81811015620008f957828155600101620008e4565b505050505050565b81516001600160401b038111156200091d576200091d6200085d565b62000935816200092e845462000873565b84620008af565b602080601f8311600181146200096d5760008415620009545750858301515b600019600386901b1c1916600185901b178555620008f9565b600085815260208120601f198616915b828110156200099e578886015182559484019460019091019084016200097d565b5085821015620009bd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009e057600080fd5b620009eb8262000808565b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a225762000a22620009f2565b92915050565b60008262000a4657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a225762000a22620009f2565b6131248062000a716000396000f3fe6080604052600436106102cd5760003560e01c80638a8c523c11610175578063c0246668116100dc578063dd1e1ca911610095578063e73b90cd1161006f578063e73b90cd14610891578063f2fde38b146108ab578063fea4fa4d146108cb578063fefa5ce3146108e157600080fd5b8063dd1e1ca91461083c578063dd62ed3e14610851578063e496b9fe1461087157600080fd5b8063c024666814610792578063c18bc195146107b2578063c862c28b146107d2578063cb94a370146107e7578063d257b34f14610807578063dc56914d1461082757600080fd5b8063a1cd15e81161012e578063a1cd15e8146106c0578063a457c2d7146106e0578063a9059cbb14610700578063ae76b09014610720578063b1d9208514610735578063b62496f51461076257600080fd5b80638a8c523c146105ec5780638da5cb5b146106015780638e15f4731461061f57806395d89b411461066b5780639a7a23d6146106805780639c74daf0146106a057600080fd5b8063339578fe116102345780636d77ecd1116101ed578063751039fc116101c7578063751039fc146105815780637571336a14610596578063777dfe24146105b657806382247ec0146105d657600080fd5b80636d77ecd11461052c57806370a082311461054c578063715018a61461056c57600080fd5b8063339578fe1461045157806339509351146104665780633fc4fafc146104865780634b94f50e146104a65780634fbee193146104bb578063583e0568146104f457600080fd5b806323b872dd1161028657806323b872dd146103ab57806323bf4c86146103cb57806327f4d7d5146103eb5780632fd689e31461040a578063313ce56714610420578063315097861461043c57600080fd5b806304beaeb8146102d957806306fdde0314610302578063095ea7b31461032457806318160ddd14610354578063203e727e14610369578063224290851461038b57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ef600b5481565b6040519081526020015b60405180910390f35b34801561030e57600080fd5b50610317610901565b6040516102f99190612ac4565b34801561033057600080fd5b5061034461033f366004612b27565b610993565b60405190151581526020016102f9565b34801561036057600080fd5b506002546102ef565b34801561037557600080fd5b50610389610384366004612b53565b6109ad565b005b34801561039757600080fd5b506103896103a6366004612b6c565b610a93565b3480156103b757600080fd5b506103446103c6366004612b98565b610b3b565b3480156103d757600080fd5b506103896103e6366004612bd9565b610b5f565b3480156103f757600080fd5b50600e5461034490610100900460ff1681565b34801561041657600080fd5b506102ef600c5481565b34801561042c57600080fd5b50604051601281526020016102f9565b34801561044857600080fd5b50610389610bb5565b34801561045d57600080fd5b50610389610c2f565b34801561047257600080fd5b50610344610481366004612b27565b610c60565b34801561049257600080fd5b506103446104a1366004612b27565b610c82565b3480156104b257600080fd5b506102ef610c9d565b3480156104c757600080fd5b506103446104d6366004612bd9565b6001600160a01b031660009081526019602052604090205460ff1690565b34801561050057600080fd5b50600654610514906001600160a01b031681565b6040516001600160a01b0390911681526020016102f9565b34801561053857600080fd5b50601c54610514906001600160a01b031681565b34801561055857600080fd5b506102ef610567366004612bd9565b610fb3565b34801561057857600080fd5b50610389610fce565b34801561058d57600080fd5b50610344611004565b3480156105a257600080fd5b506103896105b1366004612c04565b611041565b3480156105c257600080fd5b506103896105d1366004612bd9565b611096565b3480156105e257600080fd5b506102ef600d5481565b3480156105f857600080fd5b506103896110e2565b34801561060d57600080fd5b506005546001600160a01b0316610514565b34801561062b57600080fd5b50610634611121565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016102f9565b34801561067757600080fd5b506103176111bd565b34801561068c57600080fd5b5061038961069b366004612c04565b6111cc565b3480156106ac57600080fd5b50600754610514906001600160a01b031681565b3480156106cc57600080fd5b506103446106db366004612c3d565b6112c0565b3480156106ec57600080fd5b506103446106fb366004612b27565b6113be565b34801561070c57600080fd5b5061034461071b366004612b27565b611439565b34801561072c57600080fd5b50610389611447565b34801561074157600080fd5b506102ef610750366004612bd9565b600f6020526000908152604090205481565b34801561076e57600080fd5b5061034461077d366004612bd9565b601e6020526000908152604090205460ff1681565b34801561079e57600080fd5b506103896107ad366004612c04565b611478565b3480156107be57600080fd5b506103896107cd366004612b53565b611501565b3480156107de57600080fd5b506103896115d2565b3480156107f357600080fd5b50610389610802366004612bd9565b61166b565b34801561081357600080fd5b50610344610822366004612b53565b6116b7565b34801561083357600080fd5b5061038961180e565b34801561084857600080fd5b50610389611836565b34801561085d57600080fd5b506102ef61086c366004612c3d565b6118cd565b34801561087d57600080fd5b5061038961088c366004612b98565b6118f8565b34801561089d57600080fd5b50600e546103449060ff1681565b3480156108b757600080fd5b506103896108c6366004612bd9565b611b72565b3480156108d757600080fd5b506102ef60105481565b3480156108ed57600080fd5b506103896108fc366004612b53565b611c0a565b60606003805461091090612c6b565b80601f016020809104026020016040519081016040528092919081815260200182805461093c90612c6b565b80156109895780601f1061095e57610100808354040283529160200191610989565b820191906000526020600020905b81548152906001019060200180831161096c57829003601f168201915b5050505050905090565b6000336109a1818585611c4c565b60019150505b92915050565b6005546001600160a01b031633146109e05760405162461bcd60e51b81526004016109d790612ca5565b60405180910390fd5b670de0b6b3a76400006103e86109f560025490565b610a00906001612cf0565b610a0a9190612d07565b610a149190612d07565b811015610a7b5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016109d7565b610a8d81670de0b6b3a7640000612cf0565b600b5550565b6005546001600160a01b03163314610abd5760405162461bcd60e51b81526004016109d790612ca5565b60118390556013829055601281905580610ad78385612d29565b610ae19190612d29565b6010819055600a1015610b365760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016109d7565b505050565b600033610b49858285611d70565b610b54858585611dea565b506001949350505050565b6005546001600160a01b03163314610b895760405162461bcd60e51b81526004016109d790612ca5565b601c80546001600160a01b039092166001600160a01b03199283168117909155601b8054909216179055565b6009546001600160a01b03163314610bcc57600080fd5b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c19576040519150601f19603f3d011682016040523d82523d6000602084013e610c1e565b606091505b5050905080610c2c57600080fd5b50565b6005546001600160a01b03163314610c595760405162461bcd60e51b81526004016109d790612ca5565b6000601555565b6000336109a1818585610c7383836118cd565b610c7d9190612d29565b611c4c565b6000610c94833084610c7387306118cd565b50600192915050565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190612d3c565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d929190612d3c565b9050600080600760009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e9190612d70565b50601d54601c5492945090925090600160a01b900460ff1615610e9557306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d9190612dda565b509193505050505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef99190612e2a565b60ff16866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190612e2a565b610f6c9060ff16600a612f31565b610f7f846001600160701b038716612cf0565b610f899190612cf0565b610f939190612d07565b9050610fa86001600160701b03851682612d07565b965050505050505090565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610ff85760405162461bcd60e51b81526004016109d790612ca5565b61100260006122e7565b565b6005546000906001600160a01b031633146110315760405162461bcd60e51b81526004016109d790612ca5565b50600e805460ff19169055600190565b6005546001600160a01b0316331461106b5760405162461bcd60e51b81526004016109d790612ca5565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110c05760405162461bcd60e51b81526004016109d790612ca5565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461110c5760405162461bcd60e51b81526004016109d790612ca5565b600e805461ff00191661010017905542600855565b600080600080600080600080600080601b60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a79190612dda565b939e929d50909b50995090975095505050505050565b60606004805461091090612c6b565b6005546001600160a01b031633146111f65760405162461bcd60e51b81526004016109d790612ca5565b6007546001600160a01b039081169083160361127a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109d7565b6112848282612339565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60075460009081906001600160a01b0385811691161480156112f057506006546001600160a01b03848116911614155b905080801561131757506001600160a01b03831660009081526019602052604090205460ff165b1561132157426008555b6001600160a01b03841660009081526019602052604081205460ff168061136057506001600160a01b03841660009081526019602052604090205460ff165b6007549091506001600160a01b038581169116146000838061137f5750815b60105490915015801590819061139f5750600754600160a01b900460ff16155b80156113a9575083155b80156113b25750815b98975050505050505050565b600033816113cc82866118cd565b90508381101561142c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109d7565b610b548286868403611c4c565b6000336109a1818585611dea565b6005546001600160a01b031633146114715760405162461bcd60e51b81526004016109d790612ca5565b6000601455565b6005546001600160a01b031633146114a25760405162461bcd60e51b81526004016109d790612ca5565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461152b5760405162461bcd60e51b81526004016109d790612ca5565b670de0b6b3a76400006103e861154060025490565b61154b906005612cf0565b6115559190612d07565b61155f9190612d07565b8110156115ba5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109d7565b6115cc81670de0b6b3a7640000612cf0565b600d5550565b6005546001600160a01b031633146115fc5760405162461bcd60e51b81526004016109d790612ca5565b601c54600160a01b900460ff16156116565760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c65640000000060448201526064016109d7565b601c805460ff60a01b1916600160a01b179055565b6005546001600160a01b031633146116955760405162461bcd60e51b81526004016109d790612ca5565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146116e45760405162461bcd60e51b81526004016109d790612ca5565b620186a06116f160025490565b6116fc906001612cf0565b6117069190612d07565b8210156117735760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109d7565b6103e861177f60025490565b61178a906005612cf0565b6117949190612d07565b8211156118005760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109d7565b50600c81905560015b919050565b6009546001600160a01b0316331461182557600080fd5b610bcc61183130610fb3565b612367565b6005546001600160a01b031633146118605760405162461bcd60e51b81526004016109d790612ca5565b601c54600160a01b900460ff1615156001146118be5760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c656400000060448201526064016109d7565b601c805460ff60a01b19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661194e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109d7565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156119b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119dc9190612d3c565b816000815181106119ef576119ef612f3d565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611a2357611a23612f3d565b6001600160a01b039092166020928302919091018201523360009081526019909152604090205460ff1615611aff57836001600160a01b03166323b872dd8483600181518110611a7557611a75612f3d565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303816000875af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190612f53565b5050505050565b60065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908490611b3a90600090869061dead904290600401612fb4565b6000604051808303818588803b158015611b5357600080fd5b505af1158015611b67573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b03163314611b9c5760405162461bcd60e51b81526004016109d790612ca5565b6001600160a01b038116611c015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d7565b610c2c816122e7565b6005546001600160a01b03163314611c345760405162461bcd60e51b81526004016109d790612ca5565b611c4681670de0b6b3a76400006124c1565b601d5550565b6001600160a01b038316611cae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d7565b6001600160a01b038216611d0f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611d7c84846118cd565b90506000198114611de45781811015611dd75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109d7565b611de48484848403611c4c565b50505050565b6001600160a01b03831660009081526019602052604081205460ff1680611e2957506001600160a01b03831660009081526019602052604090205460ff165b90506001600160a01b038416611e515760405162461bcd60e51b81526004016109d790612fe9565b6001600160a01b038316611e775760405162461bcd60e51b81526004016109d79061302e565b81600003611e8b57611de4848460006124d4565b6007546000906001600160a01b038681169116148015611ec457506001600160a01b0384166000908152601a602052604090205460ff16155b6007549091506000906001600160a01b038681169116148015611f0057506001600160a01b0386166000908152601a602052604090205460ff16155b90506000611f166005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611f4257506005546001600160a01b038781169116145b905060006001600160a01b0387161580611f6657506001600160a01b03871661dead145b905060008280611f735750815b80611f875750600754600160a01b900460ff165b600e5490915060ff168015611f9a575080155b1561217257600e54610100900460ff1680611fb25750855b611ff75760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109d7565b84156120cc57600b5487111561206d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109d7565b600d5461207989610fb3565b6120839089612d29565b11156120c75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109d7565b612172565b83612172576001600160a01b0388166000908152601a602052604090205460ff1615801561211357506001600160a01b0389166000908152601a602052604090205460ff16155b1561217257600d5461212489610fb3565b61212e9089612d29565b11156121725760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109d7565b6001600160a01b0389166000908152601e602052604090205460ff16156121d3576001600160a01b0388166000908152600f602052604081205490036121ce576001600160a01b0388166000908152600f602052604090204290555b612207565b600754600160a01b900460ff1661220757600e805462010000600160b01b031916620100006001600160a01b038c16021790555b600754600160a01b900460ff1615801561223a57506001600160a01b0389166000908152601e602052604090205460ff16155b801561225f57506001600160a01b03891660009081526019602052604090205460ff16155b801561228457506001600160a01b03881660009081526019602052604090205460ff16155b156122da57600061229430610fb3565b600c54909150811080159081906122a9575087155b156122d7576007805460ff60a01b1916600160a01b1790556122c9612628565b6007805460ff60a01b191690555b50505b611b6789898987896128a5565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601e60205260409020805460ff19168215151790556112848282611041565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061239c5761239c612f3d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124199190612d3c565b8160018151811061242c5761242c612f3d565b6001600160a01b0392831660209182029290920101526006546124529130911684611c4c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061248b908590600090869030904290600401613071565b600060405180830381600087803b1580156124a557600080fd5b505af11580156124b9573d6000803e3d6000fd5b505050505050565b60006124cd8284612cf0565b9392505050565b6001600160a01b0383166124fa5760405162461bcd60e51b81526004016109d790612fe9565b6001600160a01b0382166125205760405162461bcd60e51b81526004016109d79061302e565b6001600160a01b038316600090815260208190526040902054818110156125985760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109d7565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125cf908490612d29565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161261b91815260200190565b60405180910390a3611de4565b600061263330610fb3565b9050600060175460165460185461264a9190612d29565b6126549190612d29565b600a5490915060009061266f906001600160a01b0316610fb3565b905082158061267c575081155b1561268657505050565b600c5483111561269657600c5492505b6000600283601854866126a99190612cf0565b6126b39190612d07565b6126bd9190612d07565b905060006126d5836126cf87856129de565b906129de565b9050476126e182612367565b60006126ed47836129de565b905060006127108761270a601654856124c190919063ffffffff16565b906129ea565b9050600061272d8861270a601754866124c190919063ffffffff16565b905060008161273c84866130ad565b61274691906130ad565b90506000871180156127585750600081115b156127d957600854600e546201000090046001600160a01b03166000908152600f60205260409020541161278b57600080fd5b61279587826129f6565b601854604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006018819055601681905560178190556009546040516001600160a01b039091169085908381818185875af1925050503d8060008114612836576040519150601f19603f3d011682016040523d82523d6000602084013e61283b565b606091505b5050600a546040519192506000916001600160a01b039091169085908381818185875af1925050503d806000811461288f576040519150601f19603f3d011682016040523d82523d6000602084013e612894565b606091505b505050505050505050505050505050565b60006128b186866112c0565b905080156129d35760105460115484156128ea576014546010546128d59190612d29565b91506014546011546128e79190612d29565b90505b8315612915576015546010546129009190612d29565b91506015546011546129129190612d29565b90505b6000612926606461270a89866124c1565b905082601254826129379190612cf0565b6129419190612d07565b601860008282546129529190612d29565b909155508390506129638383612cf0565b61296d9190612d07565b6016600082825461297e9190612d29565b909155505060135483906129929083612cf0565b61299c9190612d07565b601760008282546129ad9190612d29565b909155505080156129c3576129c38930836124d4565b6129cd81886130ad565b96505050505b6124b98686866124d4565b60006124cd82846130ad565b60006124cd8284612d07565b600654612a0e9030906001600160a01b031684611c4c565b6006546001600160a01b031663f305d719823085600080612a376005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612a9f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611af891906130c0565b600060208083528351808285015260005b81811015612af157858101830151858201604001528201612ad5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c2c57600080fd5b60008060408385031215612b3a57600080fd5b8235612b4581612b12565b946020939093013593505050565b600060208284031215612b6557600080fd5b5035919050565b600080600060608486031215612b8157600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612bad57600080fd5b8335612bb881612b12565b92506020840135612bc881612b12565b929592945050506040919091013590565b600060208284031215612beb57600080fd5b81356124cd81612b12565b8015158114610c2c57600080fd5b60008060408385031215612c1757600080fd5b8235612c2281612b12565b91506020830135612c3281612bf6565b809150509250929050565b60008060408385031215612c5057600080fd5b8235612c5b81612b12565b91506020830135612c3281612b12565b600181811c90821680612c7f57607f821691505b602082108103612c9f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109a7576109a7612cda565b600082612d2457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109a7576109a7612cda565b600060208284031215612d4e57600080fd5b81516124cd81612b12565b80516001600160701b038116811461180957600080fd5b600080600060608486031215612d8557600080fd5b612d8e84612d59565b9250612d9c60208501612d59565b9150604084015163ffffffff81168114612db557600080fd5b809150509250925092565b805169ffffffffffffffffffff8116811461180957600080fd5b600080600080600060a08688031215612df257600080fd5b612dfb86612dc0565b9450602086015193506040860151925060608601519150612e1e60808701612dc0565b90509295509295909350565b600060208284031215612e3c57600080fd5b815160ff811681146124cd57600080fd5b600181815b80851115612e88578160001904821115612e6e57612e6e612cda565b80851615612e7b57918102915b93841c9390800290612e52565b509250929050565b600082612e9f575060016109a7565b81612eac575060006109a7565b8160018114612ec25760028114612ecc57612ee8565b60019150506109a7565b60ff841115612edd57612edd612cda565b50506001821b6109a7565b5060208310610133831016604e8410600b8410161715612f0b575081810a6109a7565b612f158383612e4d565b8060001904821115612f2957612f29612cda565b029392505050565b60006124cd8383612e90565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612f6557600080fd5b81516124cd81612bf6565b600081518084526020808501945080840160005b83811015612fa95781516001600160a01b031687529582019590820190600101612f84565b509495945050505050565b848152608060208201526000612fcd6080830186612f70565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a06040820152600061309060a0830186612f70565b6001600160a01b0394909416606083015250608001529392505050565b818103818111156109a7576109a7612cda565b6000806000606084860312156130d557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d28c98a725feb25c02356efeca6e766bc3249ae3bc5a16763fd89f643a74535064736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000022886c532344f920bce589207cf946060ffce6bf00000000000000000000000090a44d0fe2b24a2e7c07ae41388558e9d2c06d2c

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80638a8c523c11610175578063c0246668116100dc578063dd1e1ca911610095578063e73b90cd1161006f578063e73b90cd14610891578063f2fde38b146108ab578063fea4fa4d146108cb578063fefa5ce3146108e157600080fd5b8063dd1e1ca91461083c578063dd62ed3e14610851578063e496b9fe1461087157600080fd5b8063c024666814610792578063c18bc195146107b2578063c862c28b146107d2578063cb94a370146107e7578063d257b34f14610807578063dc56914d1461082757600080fd5b8063a1cd15e81161012e578063a1cd15e8146106c0578063a457c2d7146106e0578063a9059cbb14610700578063ae76b09014610720578063b1d9208514610735578063b62496f51461076257600080fd5b80638a8c523c146105ec5780638da5cb5b146106015780638e15f4731461061f57806395d89b411461066b5780639a7a23d6146106805780639c74daf0146106a057600080fd5b8063339578fe116102345780636d77ecd1116101ed578063751039fc116101c7578063751039fc146105815780637571336a14610596578063777dfe24146105b657806382247ec0146105d657600080fd5b80636d77ecd11461052c57806370a082311461054c578063715018a61461056c57600080fd5b8063339578fe1461045157806339509351146104665780633fc4fafc146104865780634b94f50e146104a65780634fbee193146104bb578063583e0568146104f457600080fd5b806323b872dd1161028657806323b872dd146103ab57806323bf4c86146103cb57806327f4d7d5146103eb5780632fd689e31461040a578063313ce56714610420578063315097861461043c57600080fd5b806304beaeb8146102d957806306fdde0314610302578063095ea7b31461032457806318160ddd14610354578063203e727e14610369578063224290851461038b57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ef600b5481565b6040519081526020015b60405180910390f35b34801561030e57600080fd5b50610317610901565b6040516102f99190612ac4565b34801561033057600080fd5b5061034461033f366004612b27565b610993565b60405190151581526020016102f9565b34801561036057600080fd5b506002546102ef565b34801561037557600080fd5b50610389610384366004612b53565b6109ad565b005b34801561039757600080fd5b506103896103a6366004612b6c565b610a93565b3480156103b757600080fd5b506103446103c6366004612b98565b610b3b565b3480156103d757600080fd5b506103896103e6366004612bd9565b610b5f565b3480156103f757600080fd5b50600e5461034490610100900460ff1681565b34801561041657600080fd5b506102ef600c5481565b34801561042c57600080fd5b50604051601281526020016102f9565b34801561044857600080fd5b50610389610bb5565b34801561045d57600080fd5b50610389610c2f565b34801561047257600080fd5b50610344610481366004612b27565b610c60565b34801561049257600080fd5b506103446104a1366004612b27565b610c82565b3480156104b257600080fd5b506102ef610c9d565b3480156104c757600080fd5b506103446104d6366004612bd9565b6001600160a01b031660009081526019602052604090205460ff1690565b34801561050057600080fd5b50600654610514906001600160a01b031681565b6040516001600160a01b0390911681526020016102f9565b34801561053857600080fd5b50601c54610514906001600160a01b031681565b34801561055857600080fd5b506102ef610567366004612bd9565b610fb3565b34801561057857600080fd5b50610389610fce565b34801561058d57600080fd5b50610344611004565b3480156105a257600080fd5b506103896105b1366004612c04565b611041565b3480156105c257600080fd5b506103896105d1366004612bd9565b611096565b3480156105e257600080fd5b506102ef600d5481565b3480156105f857600080fd5b506103896110e2565b34801561060d57600080fd5b506005546001600160a01b0316610514565b34801561062b57600080fd5b50610634611121565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016102f9565b34801561067757600080fd5b506103176111bd565b34801561068c57600080fd5b5061038961069b366004612c04565b6111cc565b3480156106ac57600080fd5b50600754610514906001600160a01b031681565b3480156106cc57600080fd5b506103446106db366004612c3d565b6112c0565b3480156106ec57600080fd5b506103446106fb366004612b27565b6113be565b34801561070c57600080fd5b5061034461071b366004612b27565b611439565b34801561072c57600080fd5b50610389611447565b34801561074157600080fd5b506102ef610750366004612bd9565b600f6020526000908152604090205481565b34801561076e57600080fd5b5061034461077d366004612bd9565b601e6020526000908152604090205460ff1681565b34801561079e57600080fd5b506103896107ad366004612c04565b611478565b3480156107be57600080fd5b506103896107cd366004612b53565b611501565b3480156107de57600080fd5b506103896115d2565b3480156107f357600080fd5b50610389610802366004612bd9565b61166b565b34801561081357600080fd5b50610344610822366004612b53565b6116b7565b34801561083357600080fd5b5061038961180e565b34801561084857600080fd5b50610389611836565b34801561085d57600080fd5b506102ef61086c366004612c3d565b6118cd565b34801561087d57600080fd5b5061038961088c366004612b98565b6118f8565b34801561089d57600080fd5b50600e546103449060ff1681565b3480156108b757600080fd5b506103896108c6366004612bd9565b611b72565b3480156108d757600080fd5b506102ef60105481565b3480156108ed57600080fd5b506103896108fc366004612b53565b611c0a565b60606003805461091090612c6b565b80601f016020809104026020016040519081016040528092919081815260200182805461093c90612c6b565b80156109895780601f1061095e57610100808354040283529160200191610989565b820191906000526020600020905b81548152906001019060200180831161096c57829003601f168201915b5050505050905090565b6000336109a1818585611c4c565b60019150505b92915050565b6005546001600160a01b031633146109e05760405162461bcd60e51b81526004016109d790612ca5565b60405180910390fd5b670de0b6b3a76400006103e86109f560025490565b610a00906001612cf0565b610a0a9190612d07565b610a149190612d07565b811015610a7b5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016109d7565b610a8d81670de0b6b3a7640000612cf0565b600b5550565b6005546001600160a01b03163314610abd5760405162461bcd60e51b81526004016109d790612ca5565b60118390556013829055601281905580610ad78385612d29565b610ae19190612d29565b6010819055600a1015610b365760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016109d7565b505050565b600033610b49858285611d70565b610b54858585611dea565b506001949350505050565b6005546001600160a01b03163314610b895760405162461bcd60e51b81526004016109d790612ca5565b601c80546001600160a01b039092166001600160a01b03199283168117909155601b8054909216179055565b6009546001600160a01b03163314610bcc57600080fd5b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c19576040519150601f19603f3d011682016040523d82523d6000602084013e610c1e565b606091505b5050905080610c2c57600080fd5b50565b6005546001600160a01b03163314610c595760405162461bcd60e51b81526004016109d790612ca5565b6000601555565b6000336109a1818585610c7383836118cd565b610c7d9190612d29565b611c4c565b6000610c94833084610c7387306118cd565b50600192915050565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190612d3c565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d929190612d3c565b9050600080600760009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e9190612d70565b50601d54601c5492945090925090600160a01b900460ff1615610e9557306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d9190612dda565b509193505050505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef99190612e2a565b60ff16866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190612e2a565b610f6c9060ff16600a612f31565b610f7f846001600160701b038716612cf0565b610f899190612cf0565b610f939190612d07565b9050610fa86001600160701b03851682612d07565b965050505050505090565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610ff85760405162461bcd60e51b81526004016109d790612ca5565b61100260006122e7565b565b6005546000906001600160a01b031633146110315760405162461bcd60e51b81526004016109d790612ca5565b50600e805460ff19169055600190565b6005546001600160a01b0316331461106b5760405162461bcd60e51b81526004016109d790612ca5565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110c05760405162461bcd60e51b81526004016109d790612ca5565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461110c5760405162461bcd60e51b81526004016109d790612ca5565b600e805461ff00191661010017905542600855565b600080600080600080600080600080601b60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a79190612dda565b939e929d50909b50995090975095505050505050565b60606004805461091090612c6b565b6005546001600160a01b031633146111f65760405162461bcd60e51b81526004016109d790612ca5565b6007546001600160a01b039081169083160361127a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109d7565b6112848282612339565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60075460009081906001600160a01b0385811691161480156112f057506006546001600160a01b03848116911614155b905080801561131757506001600160a01b03831660009081526019602052604090205460ff165b1561132157426008555b6001600160a01b03841660009081526019602052604081205460ff168061136057506001600160a01b03841660009081526019602052604090205460ff165b6007549091506001600160a01b038581169116146000838061137f5750815b60105490915015801590819061139f5750600754600160a01b900460ff16155b80156113a9575083155b80156113b25750815b98975050505050505050565b600033816113cc82866118cd565b90508381101561142c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109d7565b610b548286868403611c4c565b6000336109a1818585611dea565b6005546001600160a01b031633146114715760405162461bcd60e51b81526004016109d790612ca5565b6000601455565b6005546001600160a01b031633146114a25760405162461bcd60e51b81526004016109d790612ca5565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461152b5760405162461bcd60e51b81526004016109d790612ca5565b670de0b6b3a76400006103e861154060025490565b61154b906005612cf0565b6115559190612d07565b61155f9190612d07565b8110156115ba5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109d7565b6115cc81670de0b6b3a7640000612cf0565b600d5550565b6005546001600160a01b031633146115fc5760405162461bcd60e51b81526004016109d790612ca5565b601c54600160a01b900460ff16156116565760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c65640000000060448201526064016109d7565b601c805460ff60a01b1916600160a01b179055565b6005546001600160a01b031633146116955760405162461bcd60e51b81526004016109d790612ca5565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146116e45760405162461bcd60e51b81526004016109d790612ca5565b620186a06116f160025490565b6116fc906001612cf0565b6117069190612d07565b8210156117735760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109d7565b6103e861177f60025490565b61178a906005612cf0565b6117949190612d07565b8211156118005760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109d7565b50600c81905560015b919050565b6009546001600160a01b0316331461182557600080fd5b610bcc61183130610fb3565b612367565b6005546001600160a01b031633146118605760405162461bcd60e51b81526004016109d790612ca5565b601c54600160a01b900460ff1615156001146118be5760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c656400000060448201526064016109d7565b601c805460ff60a01b19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661194e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109d7565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156119b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119dc9190612d3c565b816000815181106119ef576119ef612f3d565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611a2357611a23612f3d565b6001600160a01b039092166020928302919091018201523360009081526019909152604090205460ff1615611aff57836001600160a01b03166323b872dd8483600181518110611a7557611a75612f3d565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303816000875af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190612f53565b5050505050565b60065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908490611b3a90600090869061dead904290600401612fb4565b6000604051808303818588803b158015611b5357600080fd5b505af1158015611b67573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b03163314611b9c5760405162461bcd60e51b81526004016109d790612ca5565b6001600160a01b038116611c015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d7565b610c2c816122e7565b6005546001600160a01b03163314611c345760405162461bcd60e51b81526004016109d790612ca5565b611c4681670de0b6b3a76400006124c1565b601d5550565b6001600160a01b038316611cae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d7565b6001600160a01b038216611d0f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611d7c84846118cd565b90506000198114611de45781811015611dd75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109d7565b611de48484848403611c4c565b50505050565b6001600160a01b03831660009081526019602052604081205460ff1680611e2957506001600160a01b03831660009081526019602052604090205460ff165b90506001600160a01b038416611e515760405162461bcd60e51b81526004016109d790612fe9565b6001600160a01b038316611e775760405162461bcd60e51b81526004016109d79061302e565b81600003611e8b57611de4848460006124d4565b6007546000906001600160a01b038681169116148015611ec457506001600160a01b0384166000908152601a602052604090205460ff16155b6007549091506000906001600160a01b038681169116148015611f0057506001600160a01b0386166000908152601a602052604090205460ff16155b90506000611f166005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611f4257506005546001600160a01b038781169116145b905060006001600160a01b0387161580611f6657506001600160a01b03871661dead145b905060008280611f735750815b80611f875750600754600160a01b900460ff165b600e5490915060ff168015611f9a575080155b1561217257600e54610100900460ff1680611fb25750855b611ff75760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109d7565b84156120cc57600b5487111561206d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109d7565b600d5461207989610fb3565b6120839089612d29565b11156120c75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109d7565b612172565b83612172576001600160a01b0388166000908152601a602052604090205460ff1615801561211357506001600160a01b0389166000908152601a602052604090205460ff16155b1561217257600d5461212489610fb3565b61212e9089612d29565b11156121725760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109d7565b6001600160a01b0389166000908152601e602052604090205460ff16156121d3576001600160a01b0388166000908152600f602052604081205490036121ce576001600160a01b0388166000908152600f602052604090204290555b612207565b600754600160a01b900460ff1661220757600e805462010000600160b01b031916620100006001600160a01b038c16021790555b600754600160a01b900460ff1615801561223a57506001600160a01b0389166000908152601e602052604090205460ff16155b801561225f57506001600160a01b03891660009081526019602052604090205460ff16155b801561228457506001600160a01b03881660009081526019602052604090205460ff16155b156122da57600061229430610fb3565b600c54909150811080159081906122a9575087155b156122d7576007805460ff60a01b1916600160a01b1790556122c9612628565b6007805460ff60a01b191690555b50505b611b6789898987896128a5565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601e60205260409020805460ff19168215151790556112848282611041565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061239c5761239c612f3d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124199190612d3c565b8160018151811061242c5761242c612f3d565b6001600160a01b0392831660209182029290920101526006546124529130911684611c4c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061248b908590600090869030904290600401613071565b600060405180830381600087803b1580156124a557600080fd5b505af11580156124b9573d6000803e3d6000fd5b505050505050565b60006124cd8284612cf0565b9392505050565b6001600160a01b0383166124fa5760405162461bcd60e51b81526004016109d790612fe9565b6001600160a01b0382166125205760405162461bcd60e51b81526004016109d79061302e565b6001600160a01b038316600090815260208190526040902054818110156125985760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109d7565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125cf908490612d29565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161261b91815260200190565b60405180910390a3611de4565b600061263330610fb3565b9050600060175460165460185461264a9190612d29565b6126549190612d29565b600a5490915060009061266f906001600160a01b0316610fb3565b905082158061267c575081155b1561268657505050565b600c5483111561269657600c5492505b6000600283601854866126a99190612cf0565b6126b39190612d07565b6126bd9190612d07565b905060006126d5836126cf87856129de565b906129de565b9050476126e182612367565b60006126ed47836129de565b905060006127108761270a601654856124c190919063ffffffff16565b906129ea565b9050600061272d8861270a601754866124c190919063ffffffff16565b905060008161273c84866130ad565b61274691906130ad565b90506000871180156127585750600081115b156127d957600854600e546201000090046001600160a01b03166000908152600f60205260409020541161278b57600080fd5b61279587826129f6565b601854604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006018819055601681905560178190556009546040516001600160a01b039091169085908381818185875af1925050503d8060008114612836576040519150601f19603f3d011682016040523d82523d6000602084013e61283b565b606091505b5050600a546040519192506000916001600160a01b039091169085908381818185875af1925050503d806000811461288f576040519150601f19603f3d011682016040523d82523d6000602084013e612894565b606091505b505050505050505050505050505050565b60006128b186866112c0565b905080156129d35760105460115484156128ea576014546010546128d59190612d29565b91506014546011546128e79190612d29565b90505b8315612915576015546010546129009190612d29565b91506015546011546129129190612d29565b90505b6000612926606461270a89866124c1565b905082601254826129379190612cf0565b6129419190612d07565b601860008282546129529190612d29565b909155508390506129638383612cf0565b61296d9190612d07565b6016600082825461297e9190612d29565b909155505060135483906129929083612cf0565b61299c9190612d07565b601760008282546129ad9190612d29565b909155505080156129c3576129c38930836124d4565b6129cd81886130ad565b96505050505b6124b98686866124d4565b60006124cd82846130ad565b60006124cd8284612d07565b600654612a0e9030906001600160a01b031684611c4c565b6006546001600160a01b031663f305d719823085600080612a376005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612a9f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611af891906130c0565b600060208083528351808285015260005b81811015612af157858101830151858201604001528201612ad5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c2c57600080fd5b60008060408385031215612b3a57600080fd5b8235612b4581612b12565b946020939093013593505050565b600060208284031215612b6557600080fd5b5035919050565b600080600060608486031215612b8157600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612bad57600080fd5b8335612bb881612b12565b92506020840135612bc881612b12565b929592945050506040919091013590565b600060208284031215612beb57600080fd5b81356124cd81612b12565b8015158114610c2c57600080fd5b60008060408385031215612c1757600080fd5b8235612c2281612b12565b91506020830135612c3281612bf6565b809150509250929050565b60008060408385031215612c5057600080fd5b8235612c5b81612b12565b91506020830135612c3281612b12565b600181811c90821680612c7f57607f821691505b602082108103612c9f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109a7576109a7612cda565b600082612d2457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109a7576109a7612cda565b600060208284031215612d4e57600080fd5b81516124cd81612b12565b80516001600160701b038116811461180957600080fd5b600080600060608486031215612d8557600080fd5b612d8e84612d59565b9250612d9c60208501612d59565b9150604084015163ffffffff81168114612db557600080fd5b809150509250925092565b805169ffffffffffffffffffff8116811461180957600080fd5b600080600080600060a08688031215612df257600080fd5b612dfb86612dc0565b9450602086015193506040860151925060608601519150612e1e60808701612dc0565b90509295509295909350565b600060208284031215612e3c57600080fd5b815160ff811681146124cd57600080fd5b600181815b80851115612e88578160001904821115612e6e57612e6e612cda565b80851615612e7b57918102915b93841c9390800290612e52565b509250929050565b600082612e9f575060016109a7565b81612eac575060006109a7565b8160018114612ec25760028114612ecc57612ee8565b60019150506109a7565b60ff841115612edd57612edd612cda565b50506001821b6109a7565b5060208310610133831016604e8410600b8410161715612f0b575081810a6109a7565b612f158383612e4d565b8060001904821115612f2957612f29612cda565b029392505050565b60006124cd8383612e90565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612f6557600080fd5b81516124cd81612bf6565b600081518084526020808501945080840160005b83811015612fa95781516001600160a01b031687529582019590820190600101612f84565b509495945050505050565b848152608060208201526000612fcd6080830186612f70565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a06040820152600061309060a0830186612f70565b6001600160a01b0394909416606083015250608001529392505050565b818103818111156109a7576109a7612cda565b6000806000606084860312156130d557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d28c98a725feb25c02356efeca6e766bc3249ae3bc5a16763fd89f643a74535064736f6c63430008110033

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

00000000000000000000000022886c532344f920bce589207cf946060ffce6bf00000000000000000000000090a44d0fe2b24a2e7c07ae41388558e9d2c06d2c

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0x22886C532344F920bcE589207cf946060FfCE6Bf
Arg [1] : _stakingWallet (address): 0x90A44D0fE2B24A2e7C07AE41388558E9d2C06D2c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000022886c532344f920bce589207cf946060ffce6bf
Arg [1] : 00000000000000000000000090a44d0fe2b24a2e7c07ae41388558e9d2c06d2c


Deployed Bytecode Sourcemap

38358:17123:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38659:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;38659:36:0;;;;;;;;26650:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29142:242::-;;;;;;;;;;-1:-1:-1;29142:242:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;29142:242:0;1205:187:1;27770:108:0;;;;;;;;;;-1:-1:-1;27858:12:0;;27770:108;;48306:272;;;;;;;;;;-1:-1:-1;48306:272:0;;;;;:::i;:::-;;:::i;:::-;;49022:394;;;;;;;;;;-1:-1:-1;49022:394:0;;;;;:::i;:::-;;:::i;29964:295::-;;;;;;;;;;-1:-1:-1;29964:295:0;;;;;:::i;:::-;;:::i;53061:168::-;;;;;;;;;;-1:-1:-1;53061:168:0;;;;;:::i;:::-;;:::i;38816:34::-;;;;;;;;;;-1:-1:-1;38816:34:0;;;;;;;;;;;38702;;;;;;;;;;;;;;;;27612:93;;;;;;;;;;-1:-1:-1;27612:93:0;;27695:2;2758:36:1;;2746:2;2731:18;27612:93:0;2616:184:1;54657:232:0;;;;;;;;;;;;;:::i;50085:91::-;;;;;;;;;;;;;:::i;30668:270::-;;;;;;;;;;-1:-1:-1;30668:270:0;;;;;:::i;:::-;;:::i;32237:226::-;;;;;;;;;;-1:-1:-1;32237:226:0;;;;;:::i;:::-;;:::i;42019:751::-;;;;;;;;;;;;;:::i;49850:126::-;;;;;;;;;;-1:-1:-1;49850:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;49940:28:0;49916:4;49940:28;;;:19;:28;;;;;;;;;49850:126;38434:42;;;;;;;;;;-1:-1:-1;38434:42:0;;;;-1:-1:-1;;;;;38434:42:0;;;;;;-1:-1:-1;;;;;2995:32:1;;;2977:51;;2965:2;2950:18;38434:42:0;2805:229:1;39471:177:0;;;;;;;;;;-1:-1:-1;39471:177:0;;;;-1:-1:-1;;;;;39471:177:0;;;27941;;;;;;;;;;-1:-1:-1;27941:177:0;;;;;:::i;:::-;;:::i;23272:103::-;;;;;;;;;;;;;:::i;41889:122::-;;;;;;;;;;;;;:::i;48847:167::-;;;;;;;;;;-1:-1:-1;48847:167:0;;;;;:::i;:::-;;:::i;49734:108::-;;;;;;;;;;-1:-1:-1;49734:108:0;;;;;:::i;:::-;;:::i;38743:25::-;;;;;;;;;;;;;;;;41758:123;;;;;;;;;;;;;:::i;22621:87::-;;;;;;;;;;-1:-1:-1;22694:6:0;;-1:-1:-1;;;;;22694:6:0;22621:87;;42778:491;;;;;;;;;;;;;:::i;:::-;;;;4020:22:1;4069:15;;;4051:34;;4116:2;4101:18;;4094:34;;;;4144:18;;4137:34;;;;4202:2;4187:18;;4180:34;4251:15;;;4245:3;4230:19;;4223:44;3997:3;3982:19;42778:491:0;3757:516:1;26869:104:0;;;;;;;;;;;;;:::i;54897:301::-;;;;;;;;;;-1:-1:-1;54897:301:0;;;;;:::i;:::-;;:::i;38483:29::-;;;;;;;;;;-1:-1:-1;38483:29:0;;;;-1:-1:-1;;;;;38483:29:0;;;47207:585;;;;;;;;;;-1:-1:-1;47207:585:0;;;;;:::i;:::-;;:::i;31441:505::-;;;;;;;;;;-1:-1:-1;31441:505:0;;;;;:::i;:::-;;:::i;28324:234::-;;;;;;;;;;-1:-1:-1;28324:234:0;;;;;:::i;:::-;;:::i;49984:93::-;;;;;;;;;;;;;:::i;38892:50::-;;;;;;;;;;-1:-1:-1;38892:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;39753:58;;;;;;;;;;-1:-1:-1;39753:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;49424:182;;;;;;;;;;-1:-1:-1;49424:182:0;;;;;:::i;:::-;;:::i;48586:253::-;;;;;;;;;;-1:-1:-1;48586:253:0;;;;;:::i;:::-;;:::i;53237:173::-;;;;;;;;;;;;;:::i;49614:112::-;;;;;;;;;;-1:-1:-1;49614:112:0;;;;;:::i;:::-;;:::i;47800:498::-;;;;;;;;;;-1:-1:-1;47800:498:0;;;;;:::i;:::-;;:::i;54359:290::-;;;;;;;;;;;;;:::i;53418:175::-;;;;;;;;;;;;;:::i;28621:201::-;;;;;;;;;;-1:-1:-1;28621:201:0;;;;;:::i;:::-;;:::i;53601:750::-;;;;;;;;;;-1:-1:-1;53601:750:0;;;;;:::i;:::-;;:::i;38775:34::-;;;;;;;;;;-1:-1:-1;38775:34:0;;;;;;;;23530:238;;;;;;;;;;-1:-1:-1;23530:238:0;;;;;:::i;:::-;;:::i;38949:25::-;;;;;;;;;;;;;;;;52935:118;;;;;;;;;;-1:-1:-1;52935:118:0;;;;;:::i;:::-;;:::i;26650:100::-;26704:13;26737:5;26730:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26650:100;:::o;29142:242::-;29261:4;3008:10;29322:32;3008:10;29338:7;29347:6;29322:8;:32::i;:::-;29372:4;29365:11;;;29142:242;;;;;:::o;48306:272::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;;;;;;;;;48443:4:::1;48435;48414:13;27858:12:::0;;;27770:108;48414:13:::1;:17;::::0;48430:1:::1;48414:17;:::i;:::-;48413:26;;;;:::i;:::-;48412:35;;;;:::i;:::-;48402:6;:45;;48380:142;;;::::0;-1:-1:-1;;;48380:142:0;;6146:2:1;48380:142:0::1;::::0;::::1;6128:21:1::0;6185:2;6165:18;;;6158:30;6224:34;6204:18;;;6197:62;-1:-1:-1;;;6275:18:1;;;6268:45;6330:19;;48380:142:0::1;5944:411:1::0;48380:142:0::1;48557:13;:6:::0;48566:4:::1;48557:13;:::i;:::-;48533:21;:37:::0;-1:-1:-1;48306:272:0:o;49022:394::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;49170:13:::1;:28:::0;;;49209:11:::1;:24:::0;;;49244:13:::1;:28:::0;;;49260:12;49296:27:::1;49223:10:::0;49186:12;49296:27:::1;:::i;:::-;:43;;;;:::i;:::-;49283:10;:56:::0;;;49372:2:::1;-1:-1:-1::0;49358:16:0::1;49350:58;;;::::0;-1:-1:-1;;;49350:58:0;;6692:2:1;49350:58:0::1;::::0;::::1;6674:21:1::0;6731:2;6711:18;;;6704:30;6770:31;6750:18;;;6743:59;6819:18;;49350:58:0::1;6490:353:1::0;49350:58:0::1;49022:394:::0;;;:::o;29964:295::-;30095:4;3008:10;30153:38;30169:4;3008:10;30184:6;30153:15;:38::i;:::-;30202:27;30212:4;30218:2;30222:6;30202:9;:27::i;:::-;-1:-1:-1;30247:4:0;;29964:295;-1:-1:-1;;;;29964:295:0:o;53061:168::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;53136:16:::1;:23:::0;;-1:-1:-1;;;;;53136:23:0;;::::1;-1:-1:-1::0;;;;;;53136:23:0;;::::1;::::0;::::1;::::0;;;53170:9:::1;:51:::0;;;;::::1;;::::0;;53061:168::o;54657:232::-;54723:14;;-1:-1:-1;;;;;54723:14:0;54709:10;:28;54701:37;;;;;;54776:14;;54768:86;;54750:12;;-1:-1:-1;;;;;54776:14:0;;54818:21;;54750:12;54768:86;54750:12;54768:86;54818:21;54776:14;54768:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54749:105;;;54873:7;54865:16;;;;;;54690:199;54657:232::o;50085:91::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;50167:1:::1;50147:17;:21:::0;50085:91::o;30668:270::-;30783:4;3008:10;30844:64;3008:10;30860:7;30897:10;30869:25;3008:10;30860:7;30869:9;:25::i;:::-;:38;;;;:::i;:::-;30844:8;:64::i;32237:226::-;32344:4;32361:72;32370:5;32385:4;32426:6;32392:31;32402:5;32417:4;32392:9;:31::i;32361:72::-;-1:-1:-1;32451:4:0;32237:226;;;;:::o;42019:751::-;42067:7;42087:21;42155:14;;;;;;;;;-1:-1:-1;;;;;42155:14:0;-1:-1:-1;;;;;42140:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42087:103;;42201:21;42269:14;;;;;;;;;-1:-1:-1;;;;;42269:14:0;-1:-1:-1;;;;;42254:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42201:103;;42316:12;42330;42363:14;;;;;;;;;-1:-1:-1;;;;;42363:14:0;-1:-1:-1;;;;;42348:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;42441:14:0;;42470:19;;42315:91;;-1:-1:-1;42315:91:0;;-1:-1:-1;42441:14:0;-1:-1:-1;;;42470:19:0;;;;42466:100;;;42533:4;-1:-1:-1;;;;;42533:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;42506:48:0;;-1:-1:-1;;;;42466:100:0;42576:12;42704:6;-1:-1:-1;;;;;42704:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42696:26;;42673:6;-1:-1:-1;;;;;42673:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42661:30;;42665:26;;42661:2;:30;:::i;:::-;42592:52;42629:14;-1:-1:-1;;;;;42592:13:0;;:52;:::i;:::-;:100;;;;:::i;:::-;42591:131;;;;:::i;:::-;42576:146;-1:-1:-1;42741:20:0;-1:-1:-1;;;;;42748:13:0;;42576:146;42741:20;:::i;:::-;42733:29;;;;;;;;42019:751;:::o;27941:177::-;-1:-1:-1;;;;;28092:18:0;28060:7;28092:18;;;;;;;;;;;;27941:177::o;23272:103::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;23337:30:::1;23364:1;23337:18;:30::i;:::-;23272:103::o:0;41889:122::-;22694:6;;41941:4;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;-1:-1:-1;41958:15:0::1;:23:::0;;-1:-1:-1;;41958:23:0::1;::::0;;;41889:122;:::o;48847:167::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48960:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;48960:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48847:167::o;49734:108::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;49810:12:::1;:24:::0;;-1:-1:-1;;;;;;49810:24:0::1;-1:-1:-1::0;;;;;49810:24:0;;;::::1;::::0;;;::::1;::::0;;49734:108::o;41758:123::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;41811:14:::1;:21:::0;;-1:-1:-1;;41811:21:0::1;;;::::0;;41858:15:::1;41843:12;:30:::0;41758:123::o;42778:491::-;42868:6;42889;42910:7;42932;42954:6;43003:14;43032:12;43059:17;43091;43123:22;43159:9;;;;;;;;;-1:-1:-1;;;;;43159:9:0;-1:-1:-1;;;;;43159:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42988:198;;;;-1:-1:-1;42988:198:0;;-1:-1:-1;42988:198:0;-1:-1:-1;42988:198:0;;-1:-1:-1;42778:491:0;-1:-1:-1;;;;;;42778:491:0:o;26869:104::-;26925:13;26958:7;26951:14;;;;;:::i;54897:301::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;55006:14:::1;::::0;-1:-1:-1;;;;;55006:14:0;;::::1;54998:22:::0;;::::1;::::0;54990:92:::1;;;::::0;-1:-1:-1;;;54990:92:0;;10478:2:1;54990:92:0::1;::::0;::::1;10460:21:1::0;10517:2;10497:18;;;10490:30;10556:34;10536:18;;;10529:62;10627:27;10607:18;;;10600:55;10672:19;;54990:92:0::1;10276:421:1::0;54990:92:0::1;55093:41;55122:4;55128:5;55093:28;:41::i;:::-;55150:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;55150:40:0;::::1;::::0;::::1;::::0;;;::::1;54897:301:::0;;:::o;47207:585::-;47308:14;;47270:4;;;;-1:-1:-1;;;;;47300:22:0;;;47308:14;;47300:22;:57;;;;-1:-1:-1;47340:16:0;;-1:-1:-1;;;;;47326:31:0;;;47340:16;;47326:31;;47300:57;47287:70;;47372:5;:32;;;;-1:-1:-1;;;;;;47381:23:0;;;;;;:19;:23;;;;;;;;47372:32;47368:68;;;47421:15;47406:12;:30;47368:68;-1:-1:-1;;;;;47472:25:0;;47447:22;47472:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;47501:23:0;;;;;;:19;:23;;;;;;;;47472:52;47555:14;;47447:77;;-1:-1:-1;;;;;;47549:20:0;;;47555:14;;47549:20;47535:11;47595:5;;:15;;;47604:6;47595:15;47638:10;;47581:29;;-1:-1:-1;47638:14:0;;;;;;47687:39;;-1:-1:-1;47713:13:0;;-1:-1:-1;;;47713:13:0;;;;47712:14;47687:39;:74;;;;;47744:17;47743:18;47687:74;:97;;;;;47778:6;47687:97;47666:118;47207:585;-1:-1:-1;;;;;;;;47207:585:0:o;31441:505::-;31561:4;3008:10;31561:4;31649:25;3008:10;31666:7;31649:9;:25::i;:::-;31622:52;;31727:15;31707:16;:35;;31685:122;;;;-1:-1:-1;;;31685:122:0;;10904:2:1;31685:122:0;;;10886:21:1;10943:2;10923:18;;;10916:30;10982:34;10962:18;;;10955:62;-1:-1:-1;;;11033:18:1;;;11026:35;11078:19;;31685:122:0;10702:401:1;31685:122:0;31843:60;31852:5;31859:7;31887:15;31868:16;:34;31843:8;:60::i;28324:234::-;28439:4;3008:10;28500:28;3008:10;28517:2;28521:6;28500:9;:28::i;49984:93::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;50068:1:::1;50047:18;:22:::0;49984:93::o;49424:182::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49509:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;49509:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;49564:34;;1345:41:1;;;49564:34:0::1;::::0;1318:18:1;49564:34:0::1;;;;;;;49424:182:::0;;:::o;48586:253::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;48726:4:::1;48718;48697:13;27858:12:::0;;;27770:108;48697:13:::1;:17;::::0;48713:1:::1;48697:17;:::i;:::-;48696:26;;;;:::i;:::-;48695:35;;;;:::i;:::-;48685:6;:45;;48663:131;;;::::0;-1:-1:-1;;;48663:131:0;;11310:2:1;48663:131:0::1;::::0;::::1;11292:21:1::0;11349:2;11329:18;;;11322:30;11388:34;11368:18;;;11361:62;-1:-1:-1;;;11439:18:1;;;11432:34;11483:19;;48663:131:0::1;11108:400:1::0;48663:131:0::1;48818:13;:6:::0;48827:4:::1;48818:13;:::i;:::-;48805:10;:26:::0;-1:-1:-1;48586:253:0:o;53237:173::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;53304:19:::1;::::0;-1:-1:-1;;;53304:19:0;::::1;;;:28;53296:69;;;::::0;-1:-1:-1;;;53296:69:0;;11715:2:1;53296:69:0::1;::::0;::::1;11697:21:1::0;11754:2;11734:18;;;11727:30;11793;11773:18;;;11766:58;11841:18;;53296:69:0::1;11513:352:1::0;53296:69:0::1;53376:19;:26:::0;;-1:-1:-1;;;;53376:26:0::1;-1:-1:-1::0;;;53376:26:0::1;::::0;;53237:173::o;49614:112::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;49692:14:::1;:26:::0;;-1:-1:-1;;;;;;49692:26:0::1;-1:-1:-1::0;;;;;49692:26:0;;;::::1;::::0;;;::::1;::::0;;49614:112::o;47800:498::-;22694:6;;47908:4;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;47987:6:::1;47966:13;27858:12:::0;;;27770:108;47966:13:::1;:17;::::0;47982:1:::1;47966:17;:::i;:::-;47965:28;;;;:::i;:::-;47952:9;:41;;47930:144;;;::::0;-1:-1:-1;;;47930:144:0;;12072:2:1;47930:144:0::1;::::0;::::1;12054:21:1::0;12111:2;12091:18;;;12084:30;12150:34;12130:18;;;12123:62;-1:-1:-1;;;12201:18:1;;;12194:51;12262:19;;47930:144:0::1;11870:417:1::0;47930:144:0::1;48142:4;48121:13;27858:12:::0;;;27770:108;48121:13:::1;:17;::::0;48137:1:::1;48121:17;:::i;:::-;48120:26;;;;:::i;:::-;48107:9;:39;;48085:141;;;::::0;-1:-1:-1;;;48085:141:0;;12494:2:1;48085:141:0::1;::::0;::::1;12476:21:1::0;12533:2;12513:18;;;12506:30;12572:34;12552:18;;;12545:62;-1:-1:-1;;;12623:18:1;;;12616:50;12683:19;;48085:141:0::1;12292:416:1::0;48085:141:0::1;-1:-1:-1::0;48237:19:0::1;:31:::0;;;48286:4:::1;22912:1;47800:498:::0;;;:::o;54359:290::-;54427:14;;-1:-1:-1;;;;;54427:14:0;54413:10;:28;54405:37;;;;;;54453:43;54471:24;54489:4;54471:9;:24::i;:::-;54453:17;:43::i;53418:175::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;53486:19:::1;::::0;-1:-1:-1;;;53486:19:0;::::1;;;:27;;53509:4;53486:27;53478:69;;;::::0;-1:-1:-1;;;53478:69:0;;12915:2:1;53478:69:0::1;::::0;::::1;12897:21:1::0;12954:2;12934:18;;;12927:30;12993:31;12973:18;;;12966:59;13042:18;;53478:69:0::1;12713:353:1::0;53478:69:0::1;53558:19;:27:::0;;-1:-1:-1;;;;53558:27:0::1;::::0;;53418:175::o;28621:201::-;-1:-1:-1;;;;;28787:18:0;;;28755:7;28787:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28621:201::o;53601:750::-;-1:-1:-1;;;;;53734:20:0;;53726:59;;;;-1:-1:-1;;;53726:59:0;;13273:2:1;53726:59:0;;;13255:21:1;13312:2;13292:18;;;13285:30;13351:28;13331:18;;;13324:56;13397:18;;53726:59:0;13071:350:1;53726:59:0;53820:16;;;53834:1;53820:16;;;;;;;;53796:21;;53820:16;;;;;;;;-1:-1:-1;;53857:16:0;;:23;;;-1:-1:-1;;;53857:23:0;;;;53796:40;;-1:-1:-1;;;;;;53857:16:0;;;;:21;;-1:-1:-1;53857:23:0;;;;;;;;;;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53847:4;53852:1;53847:7;;;;;;;;:::i;:::-;;;;;;:33;-1:-1:-1;;;;;53847:33:0;;;-1:-1:-1;;;;;53847:33:0;;;;;53909:4;53891;53896:1;53891:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53891:23:0;;;:7;;;;;;;;;;:23;53949:10;53929:31;;;;:19;:31;;;;;;;;;53925:136;;;53984:6;-1:-1:-1;;;;;53977:27:0;;54005:4;54011;54016:1;54011:7;;;;;;;;:::i;:::-;;;;;;;;;;;53977:51;;-1:-1:-1;;;;;;53977:51:0;;;;;;;-1:-1:-1;;;;;13948:15:1;;;53977:51:0;;;13930:34:1;14000:15;;13980:18;;;13973:43;14032:18;;;14025:34;;;13865:18;;53977:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54043:7;53601:750;;;:::o;53925:136::-;54097:16;;:246;;-1:-1:-1;;;54097:246:0;;-1:-1:-1;;;;;54097:16:0;;;;:67;;54186:7;;54097:246;;:16;;54268:4;;54295:6;;54317:15;;54097:246;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53715:636;53601:750;;;:::o;23530:238::-;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23633:22:0;::::1;23611:110;;;::::0;-1:-1:-1;;;23611:110:0;;15503:2:1;23611:110:0::1;::::0;::::1;15485:21:1::0;15542:2;15522:18;;;15515:30;15581:34;15561:18;;;15554:62;-1:-1:-1;;;15632:18:1;;;15625:36;15678:19;;23611:110:0::1;15301:402:1::0;23611:110:0::1;23732:28;23751:8;23732:18;:28::i;52935:118::-:0;22694:6;;-1:-1:-1;;;;;22694:6:0;3008:10;22841:23;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;:::i;:::-;53029:15:::1;:3:::0;53037:6:::1;53029:7;:15::i;:::-;53005:14;:40:::0;-1:-1:-1;52935:118:0:o;35698:380::-;-1:-1:-1;;;;;35834:19:0;;35826:68;;;;-1:-1:-1;;;35826:68:0;;15910:2:1;35826:68:0;;;15892:21:1;15949:2;15929:18;;;15922:30;15988:34;15968:18;;;15961:62;-1:-1:-1;;;16039:18:1;;;16032:34;16083:19;;35826:68:0;15708:400:1;35826:68:0;-1:-1:-1;;;;;35913:21:0;;35905:68;;;;-1:-1:-1;;;35905:68:0;;16315:2:1;35905:68:0;;;16297:21:1;16354:2;16334:18;;;16327:30;16393:34;16373:18;;;16366:62;-1:-1:-1;;;16444:18:1;;;16437:32;16486:19;;35905:68:0;16113:398:1;35905:68:0;-1:-1:-1;;;;;35986:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;36038:32;;160:25:1;;;36038:32:0;;133:18:1;36038:32:0;;;;;;;35698:380;;;:::o;36369:502::-;36504:24;36531:25;36541:5;36548:7;36531:9;:25::i;:::-;36504:52;;-1:-1:-1;;36571:16:0;:37;36567:297;;36671:6;36651:16;:26;;36625:117;;;;-1:-1:-1;;;36625:117:0;;16718:2:1;36625:117:0;;;16700:21:1;16757:2;16737:18;;;16730:30;16796:31;16776:18;;;16769:59;16845:18;;36625:117:0;16516:353:1;36625:117:0;36786:51;36795:5;36802:7;36830:6;36811:16;:25;36786:8;:51::i;:::-;36493:378;36369:502;;;:::o;43277:2823::-;-1:-1:-1;;;;;43425:25:0;;43401:21;43425:25;;;:19;:25;;;;;;;;;:65;;-1:-1:-1;;;;;;43467:23:0;;;;;;:19;:23;;;;;;;;43425:65;43401:89;-1:-1:-1;;;;;;43511:18:0;;43503:68;;;;-1:-1:-1;;;43503:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43590:16:0;;43582:64;;;;-1:-1:-1;;;43582:64:0;;;;;;;:::i;:::-;43663:6;43673:1;43663:11;43659:93;;43691:28;43707:4;43713:2;43717:1;43691:15;:28::i;43659:93::-;43785:14;;43764:10;;-1:-1:-1;;;;;43777:22:0;;;43785:14;;43777:22;:75;;;;-1:-1:-1;;;;;;43817:35:0;;;;;;:31;:35;;;;;;;;43816:36;43777:75;43883:14;;43764:88;;-1:-1:-1;43863:11:0;;-1:-1:-1;;;;;43877:20:0;;;43883:14;;43877:20;:75;;;;-1:-1:-1;;;;;;43915:37:0;;;;;;:31;:37;;;;;;;;43914:38;43877:75;43863:89;;43963:16;43990:7;22694:6;;-1:-1:-1;;;;;22694:6:0;;22621:87;43990:7;-1:-1:-1;;;;;43982:15:0;:4;-1:-1:-1;;;;;43982:15:0;;:32;;;-1:-1:-1;22694:6:0;;-1:-1:-1;;;;;44001:13:0;;;22694:6;;44001:13;43982:32;43963:51;-1:-1:-1;44025:11:0;-1:-1:-1;;;;;44039:16:0;;;;:41;;-1:-1:-1;;;;;;44059:21:0;;44073:6;44059:21;44039:41;44025:55;;44091:17;44111:11;:21;;;;44126:6;44111:21;:38;;;-1:-1:-1;44136:13:0;;-1:-1:-1;;;44136:13:0;;;;44111:38;44174:15;;44091:58;;-1:-1:-1;44174:15:0;;:32;;;;;44194:12;44193:13;44174:32;44170:1076;;;44249:14;;;;;;;;:34;;;44267:16;44249:34;44223:118;;;;-1:-1:-1;;;44223:118:0;;17886:2:1;44223:118:0;;;17868:21:1;17925:2;17905:18;;;17898:30;-1:-1:-1;;;17944:18:1;;;17937:52;18006:18;;44223:118:0;17684:346:1;44223:118:0;44360:5;44356:879;;;44426:21;;44416:6;:31;;44386:158;;;;-1:-1:-1;;;44386:158:0;;18237:2:1;44386:158:0;;;18219:21:1;18276:2;18256:18;;;18249:30;18315:34;18295:18;;;18288:62;-1:-1:-1;;;18366:18:1;;;18359:51;18427:19;;44386:158:0;18035:417:1;44386:158:0;44619:10;;44602:13;44612:2;44602:9;:13::i;:::-;44593:22;;:6;:22;:::i;:::-;:36;;44563:129;;;;-1:-1:-1;;;44563:129:0;;18659:2:1;44563:129:0;;;18641:21:1;18698:2;18678:18;;;18671:30;-1:-1:-1;;;18717:18:1;;;18710:49;18776:18;;44563:129:0;18457:343:1;44563:129:0;44356:879;;;44718:6;44714:521;;-1:-1:-1;;;;;44961:35:0;;;;;;:31;:35;;;;;;;;44960:36;:95;;;;-1:-1:-1;;;;;;45018:37:0;;;;;;:31;:37;;;;;;;;45017:38;44960:95;44938:297;;;45146:10;;45129:13;45139:2;45129:9;:13::i;:::-;45120:22;;:6;:22;:::i;:::-;:36;;45090:129;;;;-1:-1:-1;;;45090:129:0;;18659:2:1;45090:129:0;;;18641:21:1;18698:2;18678:18;;;18671:30;-1:-1:-1;;;18717:18:1;;;18710:49;18776:18;;45090:129:0;18457:343:1;45090:129:0;-1:-1:-1;;;;;45274:31:0;;;;;;:25;:31;;;;;;;;45270:271;;;-1:-1:-1;;;;;45326:19:0;;;;;;:15;:19;;;;;;:24;;45322:102;;-1:-1:-1;;;;;45371:19:0;;;;;;:15;:19;;;;;45393:15;45371:37;;45322:102;45270:271;;;45461:13;;-1:-1:-1;;;45461:13:0;;;;45456:74;;45495:12;:19;;-1:-1:-1;;;;;;45495:19:0;;-1:-1:-1;;;;;45495:19:0;;;;;;45456:74;45558:13;;-1:-1:-1;;;45558:13:0;;;;45557:14;:63;;;;-1:-1:-1;;;;;;45589:31:0;;;;;;:25;:31;;;;;;;;45588:32;45557:63;:106;;;;-1:-1:-1;;;;;;45638:25:0;;;;;;:19;:25;;;;;;;;45637:26;45557:106;:147;;;;-1:-1:-1;;;;;;45681:23:0;;;;;;:19;:23;;;;;;;;45680:24;45557:147;45553:480;;;45721:28;45752:24;45770:4;45752:9;:24::i;:::-;45830:19;;45721:55;;-1:-1:-1;45806:43:0;;;;;;;45868:28;;;45880:16;45879:17;45868:28;45864:158;;;45917:13;:20;;-1:-1:-1;;;;45917:20:0;-1:-1:-1;;;45917:20:0;;;45956:10;:8;:10::i;:::-;45985:13;:21;;-1:-1:-1;;;;45985:21:0;;;45864:158;45706:327;;45553:480;46043:49;46060:4;46066:2;46070:6;46078;46086:5;46043:16;:49::i;23928:191::-;24021:6;;;-1:-1:-1;;;;;24038:17:0;;;-1:-1:-1;;;;;;24038:17:0;;;;;;;24071:40;;24021:6;;;24038:17;24021:6;;24071:40;;24002:16;;24071:40;23991:128;23928:191;:::o;55206:235::-;-1:-1:-1;;;;;55289:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;55289:39:0;;;;;;;55339:38;55289:31;:39;55339:25;:38::i;50184:479::-;50275:16;;;50289:1;50275:16;;;;;;;;50251:21;;50275:16;;;;;;;;;;-1:-1:-1;50275:16:0;50251:40;;50320:4;50302;50307:1;50302:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50302:23:0;;;:7;;;;;;;;;;:23;;;;50346:16;;:23;;;-1:-1:-1;;;50346:23:0;;;;:16;;;;;:21;;:23;;;;;50302:7;;50346:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50336:4;50341:1;50336:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50336:33:0;;;:7;;;;;;;;;:33;50414:16;;50382:63;;50399:4;;50414:16;50433:11;50382:8;:63::i;:::-;50458:16;;:197;;-1:-1:-1;;;50458:197:0;;-1:-1:-1;;;;;50458:16:0;;;;:67;;:197;;50540:11;;50458:16;;50582:4;;50609;;50629:15;;50458:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50240:423;50184:479;:::o;18250:98::-;18308:7;18335:5;18339:1;18335;:5;:::i;:::-;18328:12;18250:98;-1:-1:-1;;;18250:98:0:o;32942:708::-;-1:-1:-1;;;;;33073:18:0;;33065:68;;;;-1:-1:-1;;;33065:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33152:16:0;;33144:64;;;;-1:-1:-1;;;33144:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33294:15:0;;33272:19;33294:15;;;;;;;;;;;33342:21;;;;33320:109;;;;-1:-1:-1;;;33320:109:0;;19594:2:1;33320:109:0;;;19576:21:1;19633:2;19613:18;;;19606:30;19672:34;19652:18;;;19645:62;-1:-1:-1;;;19723:18:1;;;19716:36;19769:19;;33320:109:0;19392:402:1;33320:109:0;-1:-1:-1;;;;;33465:15:0;;;:9;:15;;;;;;;;;;;33483:20;;;33465:38;;33525:13;;;;;;;;:23;;33497:6;;33465:9;33525:23;;33497:6;;33525:23;:::i;:::-;;;;;;;;33581:2;-1:-1:-1;;;;;33566:26:0;33575:4;-1:-1:-1;;;;;33566:26:0;;33585:6;33566:26;;;;160:25:1;;148:2;133:18;;14:177;33566:26:0;;;;;;;;33605:37;49022:394;51042:1885;51081:23;51107:24;51125:4;51107:9;:24::i;:::-;51081:50;;51142:25;51228:17;;51192:19;;51170;;:41;;;;:::i;:::-;:75;;;;:::i;:::-;51286:12;;51142:103;;-1:-1:-1;51256:17:0;;51276:23;;-1:-1:-1;;;;;51286:12:0;51276:9;:23::i;:::-;51256:43;-1:-1:-1;51314:20:0;;;:46;;-1:-1:-1;51338:22:0;;51314:46;51310:59;;;51362:7;;;51042:1885::o;51310:59::-;51401:19;;51383:15;:37;51379:107;;;51455:19;;51437:37;;51379:107;51496:23;51610:1;51577:17;51541:19;;51523:15;:37;;;;:::i;:::-;51522:72;;;;:::i;:::-;:89;;;;:::i;:::-;51496:115;-1:-1:-1;51622:26:0;51651:65;51706:9;51651:36;:15;51496:115;51651:19;:36::i;:::-;:54;;:65::i;:::-;51622:94;-1:-1:-1;51755:21:0;51787:37;51622:94;51787:17;:37::i;:::-;51835:18;51856:44;:21;51882:17;51856:25;:44::i;:::-;51835:65;;51911:23;51937:82;51991:17;51937:35;51952:19;;51937:10;:14;;:35;;;;:::i;:::-;:39;;:82::i;:::-;51911:108;;52030:21;52054:80;52106:17;52054:33;52069:17;;52054:10;:14;;:33;;;;:::i;:80::-;52030:104;-1:-1:-1;52145:23:0;52030:104;52171:28;52184:15;52171:10;:28;:::i;:::-;:44;;;;:::i;:::-;52145:70;;52250:1;52232:15;:19;:42;;;;;52273:1;52255:15;:19;52232:42;52228:348;;;52331:12;;52315;;;;;-1:-1:-1;;;;;52315:12:0;52299:29;;;;:15;:29;;;;;;:44;52291:53;;;;;;52359:47;52373:15;52390;52359:13;:47::i;:::-;52530:19;;52426:138;;;20134:25:1;;;20190:2;20175:18;;20168:34;;;20218:18;;;20211:34;;;;52426:138:0;;;;;;20122:2:1;52426:138:0;;;52228:348;52610:1;52588:19;:23;;;52622:19;:23;;;52656:17;:21;;;52730:14;;52722:80;;-1:-1:-1;;;;;52730:14:0;;;;52772:15;;52610:1;52722:80;52610:1;52722:80;52772:15;52730:14;52722:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52851:12:0;;52843:76;;52690:112;;-1:-1:-1;52814:23:0;;-1:-1:-1;;;;;52851:12:0;;;;52891:13;;52814:23;52843:76;52814:23;52843:76;52891:13;52851:12;52843:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;51042:1885:0:o;46108:1091::-;46272:12;46287:21;46299:4;46305:2;46287:11;:21::i;:::-;46272:36;;46323:7;46319:829;;;46363:10;;46408:13;;46436:151;;;;46488:18;;46475:10;;:31;;;;:::i;:::-;46467:39;;46553:18;;46537:13;;:34;;;;:::i;:::-;46525:46;;46436:151;46605:5;46601:148;;;46652:17;;46639:10;;:30;;;;:::i;:::-;46631:38;;46716:17;;46700:13;;:33;;;;:::i;:::-;46688:45;;46601:148;46763:12;46778:26;46800:3;46778:17;:6;46789:5;46778:10;:17::i;:26::-;46763:41;;46867:5;46850:13;;46843:4;:20;;;;:::i;:::-;46842:30;;;;:::i;:::-;46819:19;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;46931:5:0;;-1:-1:-1;46911:16:0;46918:9;46911:4;:16;:::i;:::-;46910:26;;;;:::i;:::-;46887:19;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;46980:11:0;;46995:5;;46973:18;;:4;:18;:::i;:::-;46972:28;;;;:::i;:::-;46951:17;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;47021:8:0;;47017:91;;47050:42;47066:4;47080;47087;47050:15;:42::i;:::-;47122:14;47132:4;47122:14;;:::i;:::-;;;46332:816;;;46319:829;47158:33;47174:4;47180:2;47184:6;47158:15;:33::i;17893:98::-;17951:7;17978:5;17982:1;17978;:5;:::i;18649:98::-;18707:7;18734:5;18738:1;18734;:5;:::i;50671:363::-;50785:16;;50753:63;;50770:4;;-1:-1:-1;;;;;50785:16:0;50804:11;50753:8;:63::i;:::-;50827:16;;-1:-1:-1;;;;;50827:16:0;:32;50867:9;50900:4;50920:11;50827:16;;50978:7;22694:6;;-1:-1:-1;;;;;22694:6:0;;22621:87;50978:7;50827:199;;;;;;-1:-1:-1;;;;;;50827:199:0;;;-1:-1:-1;;;;;20615:15:1;;;50827:199:0;;;20597:34:1;20647:18;;;20640:34;;;;20690:18;;;20683:34;;;;20733:18;;;20726:34;20797:15;;;20776:19;;;20769:44;51000:15:0;20829:19:1;;;20822:35;20531:19;;50827:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1582:316::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;-1:-1:-1;;1767:23:1;;;1837:2;1822:18;;1809:32;;-1:-1:-1;1888:2:1;1873:18;;;1860:32;;1582:316;-1:-1:-1;1582:316:1:o;1903:456::-;1980:6;1988;1996;2049:2;2037:9;2028:7;2024:23;2020:32;2017:52;;;2065:1;2062;2055:12;2017:52;2104:9;2091:23;2123:31;2148:5;2123:31;:::i;:::-;2173:5;-1:-1:-1;2230:2:1;2215:18;;2202:32;2243:33;2202:32;2243:33;:::i;:::-;1903:456;;2295:7;;-1:-1:-1;;;2349:2:1;2334:18;;;;2321:32;;1903:456::o;2364:247::-;2423:6;2476:2;2464:9;2455:7;2451:23;2447:32;2444:52;;;2492:1;2489;2482:12;2444:52;2531:9;2518:23;2550:31;2575:5;2550:31;:::i;3247:118::-;3333:5;3326:13;3319:21;3312:5;3309:32;3299:60;;3355:1;3352;3345:12;3370:382;3435:6;3443;3496:2;3484:9;3475:7;3471:23;3467:32;3464:52;;;3512:1;3509;3502:12;3464:52;3551:9;3538:23;3570:31;3595:5;3570:31;:::i;:::-;3620:5;-1:-1:-1;3677:2:1;3662:18;;3649:32;3690:30;3649:32;3690:30;:::i;:::-;3739:7;3729:17;;;3370:382;;;;;:::o;4278:388::-;4346:6;4354;4407:2;4395:9;4386:7;4382:23;4378:32;4375:52;;;4423:1;4420;4413:12;4375:52;4462:9;4449:23;4481:31;4506:5;4481:31;:::i;:::-;4531:5;-1:-1:-1;4588:2:1;4573:18;;4560:32;4601:33;4560:32;4601:33;:::i;4671:380::-;4750:1;4746:12;;;;4793;;;4814:61;;4868:4;4860:6;4856:17;4846:27;;4814:61;4921:2;4913:6;4910:14;4890:18;4887:38;4884:161;;4967:10;4962:3;4958:20;4955:1;4948:31;5002:4;4999:1;4992:15;5030:4;5027:1;5020:15;4884:161;;4671:380;;;:::o;5056:356::-;5258:2;5240:21;;;5277:18;;;5270:30;5336:34;5331:2;5316:18;;5309:62;5403:2;5388:18;;5056:356::o;5417:127::-;5478:10;5473:3;5469:20;5466:1;5459:31;5509:4;5506:1;5499:15;5533:4;5530:1;5523:15;5549:168;5622:9;;;5653;;5670:15;;;5664:22;;5650:37;5640:71;;5691:18;;:::i;5722:217::-;5762:1;5788;5778:132;;5832:10;5827:3;5823:20;5820:1;5813:31;5867:4;5864:1;5857:15;5895:4;5892:1;5885:15;5778:132;-1:-1:-1;5924:9:1;;5722:217::o;6360:125::-;6425:9;;;6446:10;;;6443:36;;;6459:18;;:::i;7058:251::-;7128:6;7181:2;7169:9;7160:7;7156:23;7152:32;7149:52;;;7197:1;7194;7187:12;7149:52;7229:9;7223:16;7248:31;7273:5;7248:31;:::i;7314:188::-;7393:13;;-1:-1:-1;;;;;7435:42:1;;7425:53;;7415:81;;7492:1;7489;7482:12;7507:450;7594:6;7602;7610;7663:2;7651:9;7642:7;7638:23;7634:32;7631:52;;;7679:1;7676;7669:12;7631:52;7702:40;7732:9;7702:40;:::i;:::-;7692:50;;7761:49;7806:2;7795:9;7791:18;7761:49;:::i;:::-;7751:59;;7853:2;7842:9;7838:18;7832:25;7897:10;7890:5;7886:22;7879:5;7876:33;7866:61;;7923:1;7920;7913:12;7866:61;7946:5;7936:15;;;7507:450;;;;;:::o;7962:179::-;8040:13;;8093:22;8082:34;;8072:45;;8062:73;;8131:1;8128;8121:12;8146:473;8249:6;8257;8265;8273;8281;8334:3;8322:9;8313:7;8309:23;8305:33;8302:53;;;8351:1;8348;8341:12;8302:53;8374:39;8403:9;8374:39;:::i;:::-;8364:49;;8453:2;8442:9;8438:18;8432:25;8422:35;;8497:2;8486:9;8482:18;8476:25;8466:35;;8541:2;8530:9;8526:18;8520:25;8510:35;;8564:49;8608:3;8597:9;8593:19;8564:49;:::i;:::-;8554:59;;8146:473;;;;;;;;:::o;8624:273::-;8692:6;8745:2;8733:9;8724:7;8720:23;8716:32;8713:52;;;8761:1;8758;8751:12;8713:52;8793:9;8787:16;8843:4;8836:5;8832:16;8825:5;8822:27;8812:55;;8863:1;8860;8853:12;8902:422;8991:1;9034:5;8991:1;9048:270;9069:7;9059:8;9056:21;9048:270;;;9128:4;9124:1;9120:6;9116:17;9110:4;9107:27;9104:53;;;9137:18;;:::i;:::-;9187:7;9177:8;9173:22;9170:55;;;9207:16;;;;9170:55;9286:22;;;;9246:15;;;;9048:270;;;9052:3;8902:422;;;;;:::o;9329:806::-;9378:5;9408:8;9398:80;;-1:-1:-1;9449:1:1;9463:5;;9398:80;9497:4;9487:76;;-1:-1:-1;9534:1:1;9548:5;;9487:76;9579:4;9597:1;9592:59;;;;9665:1;9660:130;;;;9572:218;;9592:59;9622:1;9613:10;;9636:5;;;9660:130;9697:3;9687:8;9684:17;9681:43;;;9704:18;;:::i;:::-;-1:-1:-1;;9760:1:1;9746:16;;9775:5;;9572:218;;9874:2;9864:8;9861:16;9855:3;9849:4;9846:13;9842:36;9836:2;9826:8;9823:16;9818:2;9812:4;9809:12;9805:35;9802:77;9799:159;;;-1:-1:-1;9911:19:1;;;9943:5;;9799:159;9990:34;10015:8;10009:4;9990:34;:::i;:::-;10060:6;10056:1;10052:6;10048:19;10039:7;10036:32;10033:58;;;10071:18;;:::i;:::-;10109:20;;9329:806;-1:-1:-1;;;9329:806:1:o;10140:131::-;10200:5;10229:36;10256:8;10250:4;10229:36;:::i;13558:127::-;13619:10;13614:3;13610:20;13607:1;13600:31;13650:4;13647:1;13640:15;13674:4;13671:1;13664:15;14070:245;14137:6;14190:2;14178:9;14169:7;14165:23;14161:32;14158:52;;;14206:1;14203;14196:12;14158:52;14238:9;14232:16;14257:28;14279:5;14257:28;:::i;14320:461::-;14373:3;14411:5;14405:12;14438:6;14433:3;14426:19;14464:4;14493:2;14488:3;14484:12;14477:19;;14530:2;14523:5;14519:14;14551:1;14561:195;14575:6;14572:1;14569:13;14561:195;;;14640:13;;-1:-1:-1;;;;;14636:39:1;14624:52;;14696:12;;;;14731:15;;;;14672:1;14590:9;14561:195;;;-1:-1:-1;14772:3:1;;14320:461;-1:-1:-1;;;;;14320:461:1:o;14786:510::-;15057:6;15046:9;15039:25;15100:3;15095:2;15084:9;15080:18;15073:31;15020:4;15121:57;15173:3;15162:9;15158:19;15150:6;15121:57;:::i;:::-;-1:-1:-1;;;;;15214:32:1;;;;15209:2;15194:18;;15187:60;-1:-1:-1;15278:2:1;15263:18;15256:34;15113:65;14786:510;-1:-1:-1;;14786:510:1:o;16874:401::-;17076:2;17058:21;;;17115:2;17095:18;;;17088:30;17154:34;17149:2;17134:18;;17127:62;-1:-1:-1;;;17220:2:1;17205:18;;17198:35;17265:3;17250:19;;16874:401::o;17280:399::-;17482:2;17464:21;;;17521:2;17501:18;;;17494:30;17560:34;17555:2;17540:18;;17533:62;-1:-1:-1;;;17626:2:1;17611:18;;17604:33;17669:3;17654:19;;17280:399::o;18805:582::-;19104:6;19093:9;19086:25;19147:6;19142:2;19131:9;19127:18;19120:34;19190:3;19185:2;19174:9;19170:18;19163:31;19067:4;19211:57;19263:3;19252:9;19248:19;19240:6;19211:57;:::i;:::-;-1:-1:-1;;;;;19304:32:1;;;;19299:2;19284:18;;19277:60;-1:-1:-1;19368:3:1;19353:19;19346:35;19203:65;18805:582;-1:-1:-1;;;18805:582:1:o;19799:128::-;19866:9;;;19887:11;;;19884:37;;;19901:18;;:::i;20868:306::-;20956:6;20964;20972;21025:2;21013:9;21004:7;21000:23;20996:32;20993:52;;;21041:1;21038;21031:12;20993:52;21070:9;21064:16;21054:26;;21120:2;21109:9;21105:18;21099:25;21089:35;;21164:2;21153:9;21149:18;21143:25;21133:35;;20868:306;;;;;:::o

Swarm Source

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