ETH Price: $3,877.69 (-1.36%)
Gas: 5.64 Gwei

Token

ERC-20: CrypterToken (CRYPT)
 

Overview

Max Total Supply

100,000,000,000 CRYPT

Holders

1,102

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
138,872.657502497 CRYPT

Value
$0.00
0x1642d8694b31c2a38ce37135b6e58fc6599e522a
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:
CrypterToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-12
*/

/**
 *Submitted for verification at Etherscan.io on 2023-2-9
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.7.0 <0.9.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
/**
 * @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);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
/**
 * @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);
}

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
 * @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;
    }
}

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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

/**
 * @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.openzeppelin.com/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 Moves `amount` of tokens from `from` to `to`.
     *
     * 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;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 {}
}

contract CrypterToken is ERC20, Ownable {
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    // Trading bool
    bool public tradingOpen; 
    // In swap and liquify
    bool private _inSwap;
    // Automatic swap and liquify enabled
    bool public swapEnabled = true; // INMUTABLE
    bool public manualSwapEnabled = true;

    // Addresses excluded from fees
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public automatedMarketMakerPairs;

    uint8 public stakingFee = 20; // 2%
    uint8 public teamFee = 20; // 2%
    uint8 public marketingFee = 20; // 2%
    uint8 public totalFee = 60; // 6%
    uint8 public constant MAXFEE = 100; // 10%

    uint256 initialSupply = 100000000000 ether;
    uint256 public minSwapAmount = 10 ether;   //10 CRYPT tokens

    address public stakingContract = 0x4D04878b00A7A82AD732140595cE8Dc70f61A988;
    address public marketingWallet = 0xa6508c6e3B90871E23980B3E00BBe0305088244B;
    address public rewardWallet = 0x42567B693B651Bf1d94d92C2F9EB3F2d8102335B;
    // Burn address
    address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; // INMUTABLE
    // STABLE Token address
    address public STABLE;
    
    // Events before Governance
    event EnableSwapToken(bool enabled, bool enabledManual);
    event OpenTrading();
    event Received(address, uint256);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapToStable(address stableAddress, uint256 amount, address receiver);
    event SwapToETH(address ETH, uint256 amount, address receiver);
    event SetTaxAddresses(address stakingAddress, address rewardAddress, address marktingAddress);
    event SetTaxFee(uint8 stakingAddress, uint8 rewardAddress, uint8 marktingAddress);
    event SetExcludeFromFee(address indexed account, bool indexed feeExcluded);
    event UpdateSTABLE(address stable);
    event UpdateMinSwapAmount(uint256 amount);
    
    // Lock the swap on SwapAndLiquify
    modifier lockTheSwap {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    /**z
     * @notice Constructs the PAL token contract.
     */
    constructor(address _router, address _stable) ERC20("CrypterToken", "CRYPT") {

        _mint(msg.sender, initialSupply);
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[msg.sender] = true;
        
        STABLE = _stable;
    }

    receive() external payable {
        emit Received(msg.sender, msg.value);
    }

    /// @dev overrides transfer function to meet tokenomics of PAL
    function _transfer(address sender, address recipient, uint256 amount) internal virtual override {
        // Pre-flight checks
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 startGas = gasleft();
        uint256 gasPrice = getGasPrice();
        uint256 contractBalance = balanceOf(address(this));
        bool canSwap  = contractBalance >= minSwapAmount;
        if( 
            tradingOpen == true
            && swapEnabled == true 
            && _inSwap == false
            && canSwap
            && !automatedMarketMakerPairs[sender]
            && sender != owner() 
        ) {
            swapBack();
            uint256 gasUsed = (startGas - gasleft()) * gasPrice;
            uint256 totalEth = address(this).balance;
            address payable _sender = payable(sender);
            if(totalEth > gasUsed) {
                _sender.transfer(gasUsed);
            } else {
                _sender.transfer(totalEth);
            }
        }

        if (sender == owner() || recipient == owner() || totalFee == 0 || isExcludedFromFee[sender] || isExcludedFromFee[recipient]) {
            super._transfer(sender, recipient, amount);
        } else {
            require(tradingOpen == true, "CRYPT:: Trading is not yet open.");

            uint256 sendAmount = amount;
            uint256 feeAmount;
            //Buy || Sell Token
            if(automatedMarketMakerPairs[sender] || automatedMarketMakerPairs[recipient]) {
                feeAmount = amount * totalFee / 1000;
                sendAmount = amount - feeAmount;
            }
            if(feeAmount > 0) {
                super._transfer(sender, address(this), feeAmount);
            }
            super._transfer(sender, recipient, sendAmount);
        }
    }

    //tx.gasprice (uint)
     function getGasPrice() public view returns (uint){
          return tx.gasprice  ;
    }

    function swapBack() private lockTheSwap {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 stakingFeeAmount = contractTokenBalance * stakingFee / totalFee;
        uint256 marketingFeeAmount = contractTokenBalance * marketingFee / totalFee;
        uint256 teamRewardAmount = contractTokenBalance - stakingFeeAmount - marketingFeeAmount;

        swapToStable(stakingFeeAmount, stakingContract);
        swapToETH(marketingFeeAmount, marketingWallet);
        super._transfer(address(this), rewardWallet, teamRewardAmount);
    }

    function swapBackManual() public {
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap  = contractTokenBalance >= minSwapAmount;
        if( 
            tradingOpen == true
            && manualSwapEnabled == true 
            && _inSwap == false
            && canSwap
        ) {
            _inSwap = true;
            uint256 stakingFeeAmount = contractTokenBalance * stakingFee / totalFee;
            uint256 marketingFeeAmount = contractTokenBalance * marketingFee / totalFee;
            uint256 teamRewardAmount = contractTokenBalance - stakingFeeAmount - marketingFeeAmount;

            swapToStable(stakingFeeAmount, stakingContract);
            swapToETH(marketingFeeAmount, marketingWallet);
            super._transfer(address(this), rewardWallet, teamRewardAmount);
            _inSwap = false;
        }
    }

    function swapToStable(uint256 _amount, address _receiver) internal {
        address[] memory path;
        path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = STABLE;
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            _amount,
            0,
            path,
            _receiver,
            block.timestamp + 400
        );

        emit SwapToStable(STABLE, _amount, _receiver);
    }

    function swapToETH(uint256 _amount, address _receiver) internal {
        address[] memory path;
        path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount,
            0,
            path,
            _receiver,
            block.timestamp + 400
        );

        emit SwapToETH(uniswapV2Router.WETH(), _amount, _receiver);
    }
   
    function openTrading() external onlyOwner {
        // Can open trading only once!
        tradingOpen = true;
        emit OpenTrading();
    }

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

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

    function setExcludeFromFee(address _account, bool _bool) external onlyOwner {
        isExcludedFromFee[_account] = _bool;
        emit SetExcludeFromFee(_account, _bool);
    }

    function updateMinSwapAmount(uint256 _minSwapAmount) external onlyOwner {
        minSwapAmount = _minSwapAmount;
        emit UpdateMinSwapAmount(_minSwapAmount);
    }

    function updateSTABLE(address _stable) external onlyOwner {
        require(_stable != address(0), "CRYPT:: updateSTABLE: STABLE address is zero address");
        STABLE = _stable;
        emit UpdateSTABLE(_stable);
    }

    function enableSwapToken(bool _enabled, bool _enabledManual) external onlyOwner {
        swapEnabled = _enabled;
        manualSwapEnabled = _enabledManual;
        emit EnableSwapToken(_enabled, _enabledManual);
    }

    function setTaxAddresses(address _staking, address _rewardWallet, address _marketingWallet) external onlyOwner {
        require(_staking != address(0), "CRYPT:: setTaxAddresses: Staking address is zero address");
        require(_rewardWallet != address(0), "CRYPT:: setTaxAddresses: Reward address is zero address");
        require(_marketingWallet != address(0), "CRYPT:: setTaxAddresses: Market address is zero address");

        stakingContract = _staking;
        rewardWallet = _rewardWallet;
        marketingWallet = _marketingWallet;

        emit SetTaxAddresses(_staking, _rewardWallet, _marketingWallet);
    }

    function setTaxFee(uint8 _stakingFee, uint8 _teamFee, uint8 _marketingFee) public onlyOwner {
        require(_stakingFee + _teamFee + _marketingFee < MAXFEE, "CRYPT:: setTaxFee: Max Fee is reached");
        stakingFee = _stakingFee;
        teamFee = _teamFee;
        marketingFee = _marketingFee;
        totalFee = stakingFee + teamFee + marketingFee;

        emit SetTaxFee(_stakingFee, _teamFee, _marketingFee);
    }

    function withdrawETH(uint256 _amount) external onlyOwner {
        uint256 totalEth = address(this).balance;
        require(
            _amount <= totalEth,
            "CRYPT:: withdraw: Can't exceed more than totalLiquidity"
        );
        address payable _owner = payable(msg.sender);
        _owner.transfer(_amount);
    }

    function recoverERC20(address _token, uint256 _amount) external onlyOwner {
        require(_token != address(this), "CRYPT:: recoverERC20: can't recover this token");
        uint256 balance = IERC20(_token).balanceOf(address(this));
        require(
            _amount <= balance,
            "CRYPT:: recoverERC20: Can't exceed more than total balance"
        );
        IERC20(_token).transfer(msg.sender, balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_stable","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"bool","name":"enabledManual","type":"bool"}],"name":"EnableSwapToken","type":"event"},{"anonymous":false,"inputs":[],"name":"OpenTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"feeExcluded","type":"bool"}],"name":"SetExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"stakingAddress","type":"address"},{"indexed":false,"internalType":"address","name":"rewardAddress","type":"address"},{"indexed":false,"internalType":"address","name":"marktingAddress","type":"address"}],"name":"SetTaxAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"stakingAddress","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"rewardAddress","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marktingAddress","type":"uint8"}],"name":"SetTaxFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"ETH","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"SwapToETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"stableAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"SwapToStable","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdateMinSwapAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"stable","type":"address"}],"name":"UpdateSTABLE","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXFEE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STABLE","outputs":[{"internalType":"address","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":"bool","name":"_enabled","type":"bool"},{"internalType":"bool","name":"_enabledManual","type":"bool"}],"name":"enableSwapToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getGasPrice","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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_rewardWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setTaxAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_stakingFee","type":"uint8"},{"internalType":"uint8","name":"_teamFee","type":"uint8"},{"internalType":"uint8","name":"_marketingFee","type":"uint8"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBackManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minSwapAmount","type":"uint256"}],"name":"updateMinSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stable","type":"address"}],"name":"updateSTABLE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805461ffff60b01b191661010160b01b179055600a805463ffffffff1916633c1414141790556c01431e0fae6d7217caa0000000600b55678ac7230489e80000600c55600d8054734d04878b00a7a82ad732140595ce8dc70f61a9886001600160a01b031991821617909155600e805473a6508c6e3b90871e23980b3e00bbe0305088244b908316179055600f80547342567b693b651bf1d94d92c2f9eb3f2d8102335b9216919091179055348015620000bf57600080fd5b5060405162002e8d38038062002e8d833981016040819052620000e2916200062f565b6040518060400160405280600c81526020016b21b93cb83a32b92a37b5b2b760a11b8152506040518060400160405280600581526020016410d496541560da1b81525081600390816200013691906200070b565b5060046200014582826200070b565b50505060006200015a620003c660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001bc33600b54620003ca60201b60201c565b600680546001600160a01b0319166001600160a01b0384169081179091556040805163c45a015560e01b8152905184929163c45a01559160048083019260209291908290030181865afa15801562000218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023e9190620007d7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b29190620007d7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000300573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003269190620007d7565b600780546001600160a01b0319166001600160a01b039290921691821790556200035290600162000491565b6006546200036e9030906001600160a01b0316600019620004e5565b50306000908152600860205260408082208054600160ff1991821681179092553384529190922080549091169091179055601080546001600160a01b0319166001600160a01b03929092169190911790555062000824565b3390565b6001600160a01b038216620004265760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600260008282546200043a9190620007fc565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216600081815260096020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316620005495760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200041d565b6001600160a01b038216620005ac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200041d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b80516001600160a01b03811681146200062a57600080fd5b919050565b600080604083850312156200064357600080fd5b6200064e8362000612565b91506200065e6020840162000612565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200069257607f821691505b602082108103620006b357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200060d57600081815260208120601f850160051c81016020861015620006e25750805b601f850160051c820191505b818110156200070357828155600101620006ee565b505050505050565b81516001600160401b0381111562000727576200072762000667565b6200073f816200073884546200067d565b84620006b9565b602080601f8311600181146200077757600084156200075e5750858301515b600019600386901b1c1916600185901b17855562000703565b600085815260208120601f198616915b82811015620007a85788860151825594840194600190910190840162000787565b5085821015620007c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620007ea57600080fd5b620007f58262000612565b9392505050565b808201808211156200081e57634e487b7160e01b600052601160045260246000fd5b92915050565b61265980620008346000396000f3fe60806040526004361061026b5760003560e01c806395d89b4111610144578063d7c94efd116100b6578063f14210a61161007a578063f14210a61461078b578063f2fde38b146107ab578063fb180f01146107cb578063fb75b2c7146107eb578063fccc28131461080b578063ffb54a991461082157600080fd5b8063d7c94efd146106f2578063d818359514610711578063dd62ed3e14610731578063ee99205c14610751578063eff988431461077157600080fd5b8063a9059cbb11610108578063a9059cbb14610638578063af9549e014610658578063b2a12aaa14610678578063b327050114610698578063b62496f5146106ad578063c9567bf9146106dd57600080fd5b806395d89b41146105ad57806398fbb906146105c25780639a7a23d6146105e35780639bda664514610603578063a457c2d71461061857600080fd5b80634bac44d1116101dd57806370a08231116101a157806370a08231146104e4578063715018a61461051a57806375f0a8741461052f578063887d63171461054f5780638980f11f1461056f5780638da5cb5b1461058f57600080fd5b80634bac44d1146104315780635342acb41461045357806354d9f653146104835780636b67c4df146104a35780636ddd1713146104c357600080fd5b806323b872dd1161022f57806323b872dd14610394578063313ce567146103b4578063338246e2146103c857806339509351146103de578063455259cb146103fe57806349bd5a5e1461041157600080fd5b806306fdde03146102af578063095ea7b3146102da5780631694505e1461030a57806318160ddd146103425780631df4ccfc1461036157600080fd5b366102aa57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b3480156102bb57600080fd5b506102c4610842565b6040516102d19190612205565b60405180910390f35b3480156102e657600080fd5b506102fa6102f536600461226b565b6108d4565b60405190151581526020016102d1565b34801561031657600080fd5b5060065461032a906001600160a01b031681565b6040516001600160a01b0390911681526020016102d1565b34801561034e57600080fd5b506002545b6040519081526020016102d1565b34801561036d57600080fd5b50600a54610382906301000000900460ff1681565b60405160ff90911681526020016102d1565b3480156103a057600080fd5b506102fa6103af366004612297565b6108ee565b3480156103c057600080fd5b506012610382565b3480156103d457600080fd5b50610353600c5481565b3480156103ea57600080fd5b506102fa6103f936600461226b565b610912565b34801561040a57600080fd5b503a610353565b34801561041d57600080fd5b5060075461032a906001600160a01b031681565b34801561043d57600080fd5b5061045161044c3660046122d8565b610934565b005b34801561045f57600080fd5b506102fa61046e3660046122d8565b60086020526000908152604090205460ff1681565b34801561048f57600080fd5b5060105461032a906001600160a01b031681565b3480156104af57600080fd5b50600a546103829062010000900460ff1681565b3480156104cf57600080fd5b506007546102fa90600160b01b900460ff1681565b3480156104f057600080fd5b506103536104ff3660046122d8565b6001600160a01b031660009081526020819052604090205490565b34801561052657600080fd5b50610451610a2f565b34801561053b57600080fd5b50600e5461032a906001600160a01b031681565b34801561055b57600080fd5b5061045161056a3660046122fc565b610aa3565b34801561057b57600080fd5b5061045161058a36600461226b565b610cba565b34801561059b57600080fd5b506005546001600160a01b031661032a565b3480156105b957600080fd5b506102c4610ead565b3480156105ce57600080fd5b506007546102fa90600160b81b900460ff1681565b3480156105ef57600080fd5b506104516105fe366004612355565b610ebc565b34801561060f57600080fd5b50610382606481565b34801561062457600080fd5b506102fa61063336600461226b565b610f78565b34801561064457600080fd5b506102fa61065336600461226b565b610ff3565b34801561066457600080fd5b50610451610673366004612355565b611001565b34801561068457600080fd5b5061045161069336600461238e565b61107f565b3480156106a457600080fd5b5061045161111b565b3480156106b957600080fd5b506102fa6106c83660046122d8565b60096020526000908152604090205460ff1681565b3480156106e957600080fd5b50610451611267565b3480156106fe57600080fd5b50600a5461038290610100900460ff1681565b34801561071d57600080fd5b5061045161072c3660046123ac565b6112cf565b34801561073d57600080fd5b5061035361074c3660046123c5565b61132e565b34801561075d57600080fd5b50600d5461032a906001600160a01b031681565b34801561077d57600080fd5b50600a546103829060ff1681565b34801561079757600080fd5b506104516107a63660046123ac565b611359565b3480156107b757600080fd5b506104516107c63660046122d8565b611429565b3480156107d757600080fd5b506104516107e6366004612409565b611514565b3480156107f757600080fd5b50600f5461032a906001600160a01b031681565b34801561081757600080fd5b5061032a61dead81565b34801561082d57600080fd5b506007546102fa90600160a01b900460ff1681565b6060600380546108519061244c565b80601f016020809104026020016040519081016040528092919081815260200182805461087d9061244c565b80156108ca5780601f1061089f576101008083540402835291602001916108ca565b820191906000526020600020905b8154815290600101906020018083116108ad57829003601f168201915b5050505050905090565b6000336108e2818585611668565b60019150505b92915050565b6000336108fc85828561178c565b610907858585611800565b506001949350505050565b6000336108e2818585610925838361132e565b61092f919061249c565b611668565b6005546001600160a01b031633146109675760405162461bcd60e51b815260040161095e906124af565b60405180910390fd5b6001600160a01b0381166109da5760405162461bcd60e51b815260206004820152603460248201527f43525950543a3a20757064617465535441424c453a20535441424c452061646460448201527372657373206973207a65726f206164647265737360601b606482015260840161095e565b601080546001600160a01b0319166001600160a01b0383169081179091556040519081527fbb323c593c878f60bcfe56b30aeadd69c588349039c3e329ba8a61835f43b925906020015b60405180910390a150565b6005546001600160a01b03163314610a595760405162461bcd60e51b815260040161095e906124af565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610acd5760405162461bcd60e51b815260040161095e906124af565b6001600160a01b038316610b495760405162461bcd60e51b815260206004820152603860248201527f43525950543a3a207365745461784164647265737365733a205374616b696e6760448201527f2061646472657373206973207a65726f20616464726573730000000000000000606482015260840161095e565b6001600160a01b038216610bbf5760405162461bcd60e51b815260206004820152603760248201527f43525950543a3a207365745461784164647265737365733a205265776172642060448201527661646472657373206973207a65726f206164647265737360481b606482015260840161095e565b6001600160a01b038116610c355760405162461bcd60e51b815260206004820152603760248201527f43525950543a3a207365745461784164647265737365733a204d61726b65742060448201527661646472657373206973207a65726f206164647265737360481b606482015260840161095e565b600d80546001600160a01b038581166001600160a01b03199283168117909355600f80548683169084168117909155600e8054928616929093168217909255604080519384526020840192909252908201527f2d3ff3653ebfd421089380eab9b46d01859b38c9d3e2755602884ab6ee693d42906060015b60405180910390a1505050565b6005546001600160a01b03163314610ce45760405162461bcd60e51b815260040161095e906124af565b306001600160a01b03831603610d535760405162461bcd60e51b815260206004820152602e60248201527f43525950543a3a207265636f76657245524332303a2063616e2774207265636f60448201526d3b32b9103a3434b9903a37b5b2b760911b606482015260840161095e565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbe91906124e4565b905080821115610e365760405162461bcd60e51b815260206004820152603a60248201527f43525950543a3a207265636f76657245524332303a2043616e2774206578636560448201527f6564206d6f7265207468616e20746f74616c2062616c616e6365000000000000606482015260840161095e565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea791906124fd565b50505050565b6060600480546108519061244c565b6005546001600160a01b03163314610ee65760405162461bcd60e51b815260040161095e906124af565b6007546001600160a01b0390811690831603610f6a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161095e565b610f748282611b4f565b5050565b60003381610f86828661132e565b905083811015610fe65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161095e565b6109078286868403611668565b6000336108e2818585611800565b6005546001600160a01b0316331461102b5760405162461bcd60e51b815260040161095e906124af565b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f0653eceefbd0b482dff642e4c2c68422d2c0ccb424ec1ca631648fc1a182cc9791a35050565b6005546001600160a01b031633146110a95760405162461bcd60e51b815260040161095e906124af565b6007805461ffff60b01b1916600160b01b84151590810260ff60b81b191691909117600160b81b841515908102919091179092556040805191825260208201929092527f55ff3b31afd9343b6efd7378f4ccd63f5385931cff9000a456b6378717c0b38d910160405180910390a15050565b30600090815260208190526040812054600c5460075491925082101590600160a01b900460ff16151560011480156111615750600754600160b81b900460ff1615156001145b80156111775750600754600160a81b900460ff16155b80156111805750805b15610f74576007805460ff60a81b1916600160a81b179055600a546000906301000000810460ff908116916111b691168561251a565b6111c09190612531565b600a5490915060009060ff630100000082048116916111e79162010000909104168661251a565b6111f19190612531565b90506000816112008487612553565b61120a9190612553565b600d549091506112249084906001600160a01b0316611ba3565b600e5461123b9083906001600160a01b0316611d69565b600f546112539030906001600160a01b031683611f6e565b50506007805460ff60a81b19169055505050565b6005546001600160a01b031633146112915760405162461bcd60e51b815260040161095e906124af565b6007805460ff60a01b1916600160a01b1790556040517f51cd7cc33235a1c89f708fecec535bf7cca0f94ed05216751befb052ca83e67990600090a1565b6005546001600160a01b031633146112f95760405162461bcd60e51b815260040161095e906124af565b600c8190556040518181527ffaaef882e67226ff309a60b699b462c47acf0718b47be11bb3cac6ce251cbb6790602001610a24565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146113835760405162461bcd60e51b815260040161095e906124af565b47808211156113fa5760405162461bcd60e51b815260206004820152603760248201527f43525950543a3a2077697468647261773a2043616e277420657863656564206d60448201527f6f7265207468616e20746f74616c4c6971756964697479000000000000000000606482015260840161095e565b6040513390819084156108fc029085906000818181858888f19350505050158015610ea7573d6000803e3d6000fd5b6005546001600160a01b031633146114535760405162461bcd60e51b815260040161095e906124af565b6001600160a01b0381166114b85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461153e5760405162461bcd60e51b815260040161095e906124af565b60648161154b8486612566565b6115559190612566565b60ff16106115b35760405162461bcd60e51b815260206004820152602560248201527f43525950543a3a207365745461784665653a204d6178204665652069732072656044820152641858da195960da1b606482015260840161095e565b600a805460ff8381166201000090810262ff00001987841661010090810261ffff19909616858b161795909517908116821795869055918504831694611603949004831692908116911617612566565b61160d9190612566565b600a805463ff0000001916630100000060ff938416021790556040805185831681528483166020820152918316908201527f69ca914ad0a80d723c4bbcb7a2aef7090e78a7a35f3135f3745db0bfc50e755f90606001610cad565b6001600160a01b0383166116ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095e565b6001600160a01b03821661172b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611798848461132e565b90506000198114610ea757818110156117f35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161095e565b610ea78484848403611668565b600081116118625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161095e565b60005a30600090815260208190526040902054600c546007549293503a929082101590600160a01b900460ff16151560011480156118ae5750600754600160b01b900460ff1615156001145b80156118c45750600754600160a81b900460ff16155b80156118cd5750805b80156118f257506001600160a01b03871660009081526009602052604090205460ff16155b801561190c57506005546001600160a01b03888116911614155b156119b557611919612112565b6000835a6119279087612553565b611931919061251a565b9050478882821115611979576040516001600160a01b0382169084156108fc029085906000818181858888f19350505050158015611973573d6000803e3d6000fd5b506119b1565b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156119af573d6000803e3d6000fd5b505b5050505b6005546001600160a01b03888116911614806119de57506005546001600160a01b038781169116145b806119f35750600a546301000000900460ff16155b80611a1657506001600160a01b03871660009081526008602052604090205460ff165b80611a3957506001600160a01b03861660009081526008602052604090205460ff165b15611a4e57611a49878787611f6e565b611b46565b600754600160a01b900460ff161515600114611aac5760405162461bcd60e51b815260206004820181905260248201527f43525950543a3a2054726164696e67206973206e6f7420796574206f70656e2e604482015260640161095e565b6001600160a01b03871660009081526009602052604081205486919060ff1680611aee57506001600160a01b03881660009081526009602052604090205460ff165b15611b2757600a546103e890611b0e906301000000900460ff168961251a565b611b189190612531565b9050611b248188612553565b91505b8015611b3857611b38893083611f6e565b611b43898984611f6e565b50505b50505050505050565b6001600160a01b038216600081815260096020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516003808252608082019092526060916020820183803683370190505090503081600081518110611bd957611bd961257f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c569190612595565b81600181518110611c6957611c6961257f565b6001600160a01b039283166020918202929092010152601054825191169082906002908110611c9a57611c9a61257f565b6001600160a01b03928316602091820292909201015260065416635c11d7958460008486611cca4261019061249c565b6040518663ffffffff1660e01b8152600401611cea9594939291906125b2565b600060405180830381600087803b158015611d0457600080fd5b505af1158015611d18573d6000803e3d6000fd5b5050601054604080516001600160a01b03928316815260208101889052918616908201527f95d267a65296fba910885084431d92e3370ee983cc0c90ddd872fa134dd129a692506060019050610cad565b60408051600280825260608083018452926020830190803683370190505090503081600081518110611d9d57611d9d61257f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a9190612595565b81600181518110611e2d57611e2d61257f565b6001600160a01b0392831660209182029290920101526006541663791ac9478460008486611e5d4261019061249c565b6040518663ffffffff1660e01b8152600401611e7d9594939291906125b2565b600060405180830381600087803b158015611e9757600080fd5b505af1158015611eab573d6000803e3d6000fd5b505050507ffa99afd185fb2ab6c9102503619563b856f564e07ba1715a6bfe445e7c56aa16600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f479190612595565b604080516001600160a01b0392831681526020810187905291851690820152606001610cad565b6001600160a01b038316611fd25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161095e565b6001600160a01b0382166120345760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161095e565b6001600160a01b038316600090815260208190526040902054818110156120ac5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161095e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ea7565b6007805460ff60a81b1916600160a81b17905530600090815260208190526040812054600a5490915060009060ff6301000000820481169161215591168461251a565b61215f9190612531565b600a5490915060009060ff630100000082048116916121869162010000909104168561251a565b6121909190612531565b905060008161219f8486612553565b6121a99190612553565b600d549091506121c39084906001600160a01b0316611ba3565b600e546121da9083906001600160a01b0316611d69565b600f546121f29030906001600160a01b031683611f6e565b50506007805460ff60a81b191690555050565b600060208083528351808285015260005b8181101561223257858101830151858201604001528201612216565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461226857600080fd5b50565b6000806040838503121561227e57600080fd5b823561228981612253565b946020939093013593505050565b6000806000606084860312156122ac57600080fd5b83356122b781612253565b925060208401356122c781612253565b929592945050506040919091013590565b6000602082840312156122ea57600080fd5b81356122f581612253565b9392505050565b60008060006060848603121561231157600080fd5b833561231c81612253565b9250602084013561232c81612253565b9150604084013561233c81612253565b809150509250925092565b801515811461226857600080fd5b6000806040838503121561236857600080fd5b823561237381612253565b9150602083013561238381612347565b809150509250929050565b600080604083850312156123a157600080fd5b823561237381612347565b6000602082840312156123be57600080fd5b5035919050565b600080604083850312156123d857600080fd5b82356123e381612253565b9150602083013561238381612253565b803560ff8116811461240457600080fd5b919050565b60008060006060848603121561241e57600080fd5b612427846123f3565b9250612435602085016123f3565b9150612443604085016123f3565b90509250925092565b600181811c9082168061246057607f821691505b60208210810361248057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108e8576108e8612486565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156124f657600080fd5b5051919050565b60006020828403121561250f57600080fd5b81516122f581612347565b80820281158282048414176108e8576108e8612486565b60008261254e57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156108e8576108e8612486565b60ff81811683821601908111156108e8576108e8612486565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125a757600080fd5b81516122f581612253565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126025784516001600160a01b0316835293830193918301916001016125dd565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220225c37858a085c5b367ed0cd117ebe01d3dce9d5664ae0edb667d5416904f86f64736f6c634300081100330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48

Deployed Bytecode

0x60806040526004361061026b5760003560e01c806395d89b4111610144578063d7c94efd116100b6578063f14210a61161007a578063f14210a61461078b578063f2fde38b146107ab578063fb180f01146107cb578063fb75b2c7146107eb578063fccc28131461080b578063ffb54a991461082157600080fd5b8063d7c94efd146106f2578063d818359514610711578063dd62ed3e14610731578063ee99205c14610751578063eff988431461077157600080fd5b8063a9059cbb11610108578063a9059cbb14610638578063af9549e014610658578063b2a12aaa14610678578063b327050114610698578063b62496f5146106ad578063c9567bf9146106dd57600080fd5b806395d89b41146105ad57806398fbb906146105c25780639a7a23d6146105e35780639bda664514610603578063a457c2d71461061857600080fd5b80634bac44d1116101dd57806370a08231116101a157806370a08231146104e4578063715018a61461051a57806375f0a8741461052f578063887d63171461054f5780638980f11f1461056f5780638da5cb5b1461058f57600080fd5b80634bac44d1146104315780635342acb41461045357806354d9f653146104835780636b67c4df146104a35780636ddd1713146104c357600080fd5b806323b872dd1161022f57806323b872dd14610394578063313ce567146103b4578063338246e2146103c857806339509351146103de578063455259cb146103fe57806349bd5a5e1461041157600080fd5b806306fdde03146102af578063095ea7b3146102da5780631694505e1461030a57806318160ddd146103425780631df4ccfc1461036157600080fd5b366102aa57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b3480156102bb57600080fd5b506102c4610842565b6040516102d19190612205565b60405180910390f35b3480156102e657600080fd5b506102fa6102f536600461226b565b6108d4565b60405190151581526020016102d1565b34801561031657600080fd5b5060065461032a906001600160a01b031681565b6040516001600160a01b0390911681526020016102d1565b34801561034e57600080fd5b506002545b6040519081526020016102d1565b34801561036d57600080fd5b50600a54610382906301000000900460ff1681565b60405160ff90911681526020016102d1565b3480156103a057600080fd5b506102fa6103af366004612297565b6108ee565b3480156103c057600080fd5b506012610382565b3480156103d457600080fd5b50610353600c5481565b3480156103ea57600080fd5b506102fa6103f936600461226b565b610912565b34801561040a57600080fd5b503a610353565b34801561041d57600080fd5b5060075461032a906001600160a01b031681565b34801561043d57600080fd5b5061045161044c3660046122d8565b610934565b005b34801561045f57600080fd5b506102fa61046e3660046122d8565b60086020526000908152604090205460ff1681565b34801561048f57600080fd5b5060105461032a906001600160a01b031681565b3480156104af57600080fd5b50600a546103829062010000900460ff1681565b3480156104cf57600080fd5b506007546102fa90600160b01b900460ff1681565b3480156104f057600080fd5b506103536104ff3660046122d8565b6001600160a01b031660009081526020819052604090205490565b34801561052657600080fd5b50610451610a2f565b34801561053b57600080fd5b50600e5461032a906001600160a01b031681565b34801561055b57600080fd5b5061045161056a3660046122fc565b610aa3565b34801561057b57600080fd5b5061045161058a36600461226b565b610cba565b34801561059b57600080fd5b506005546001600160a01b031661032a565b3480156105b957600080fd5b506102c4610ead565b3480156105ce57600080fd5b506007546102fa90600160b81b900460ff1681565b3480156105ef57600080fd5b506104516105fe366004612355565b610ebc565b34801561060f57600080fd5b50610382606481565b34801561062457600080fd5b506102fa61063336600461226b565b610f78565b34801561064457600080fd5b506102fa61065336600461226b565b610ff3565b34801561066457600080fd5b50610451610673366004612355565b611001565b34801561068457600080fd5b5061045161069336600461238e565b61107f565b3480156106a457600080fd5b5061045161111b565b3480156106b957600080fd5b506102fa6106c83660046122d8565b60096020526000908152604090205460ff1681565b3480156106e957600080fd5b50610451611267565b3480156106fe57600080fd5b50600a5461038290610100900460ff1681565b34801561071d57600080fd5b5061045161072c3660046123ac565b6112cf565b34801561073d57600080fd5b5061035361074c3660046123c5565b61132e565b34801561075d57600080fd5b50600d5461032a906001600160a01b031681565b34801561077d57600080fd5b50600a546103829060ff1681565b34801561079757600080fd5b506104516107a63660046123ac565b611359565b3480156107b757600080fd5b506104516107c63660046122d8565b611429565b3480156107d757600080fd5b506104516107e6366004612409565b611514565b3480156107f757600080fd5b50600f5461032a906001600160a01b031681565b34801561081757600080fd5b5061032a61dead81565b34801561082d57600080fd5b506007546102fa90600160a01b900460ff1681565b6060600380546108519061244c565b80601f016020809104026020016040519081016040528092919081815260200182805461087d9061244c565b80156108ca5780601f1061089f576101008083540402835291602001916108ca565b820191906000526020600020905b8154815290600101906020018083116108ad57829003601f168201915b5050505050905090565b6000336108e2818585611668565b60019150505b92915050565b6000336108fc85828561178c565b610907858585611800565b506001949350505050565b6000336108e2818585610925838361132e565b61092f919061249c565b611668565b6005546001600160a01b031633146109675760405162461bcd60e51b815260040161095e906124af565b60405180910390fd5b6001600160a01b0381166109da5760405162461bcd60e51b815260206004820152603460248201527f43525950543a3a20757064617465535441424c453a20535441424c452061646460448201527372657373206973207a65726f206164647265737360601b606482015260840161095e565b601080546001600160a01b0319166001600160a01b0383169081179091556040519081527fbb323c593c878f60bcfe56b30aeadd69c588349039c3e329ba8a61835f43b925906020015b60405180910390a150565b6005546001600160a01b03163314610a595760405162461bcd60e51b815260040161095e906124af565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610acd5760405162461bcd60e51b815260040161095e906124af565b6001600160a01b038316610b495760405162461bcd60e51b815260206004820152603860248201527f43525950543a3a207365745461784164647265737365733a205374616b696e6760448201527f2061646472657373206973207a65726f20616464726573730000000000000000606482015260840161095e565b6001600160a01b038216610bbf5760405162461bcd60e51b815260206004820152603760248201527f43525950543a3a207365745461784164647265737365733a205265776172642060448201527661646472657373206973207a65726f206164647265737360481b606482015260840161095e565b6001600160a01b038116610c355760405162461bcd60e51b815260206004820152603760248201527f43525950543a3a207365745461784164647265737365733a204d61726b65742060448201527661646472657373206973207a65726f206164647265737360481b606482015260840161095e565b600d80546001600160a01b038581166001600160a01b03199283168117909355600f80548683169084168117909155600e8054928616929093168217909255604080519384526020840192909252908201527f2d3ff3653ebfd421089380eab9b46d01859b38c9d3e2755602884ab6ee693d42906060015b60405180910390a1505050565b6005546001600160a01b03163314610ce45760405162461bcd60e51b815260040161095e906124af565b306001600160a01b03831603610d535760405162461bcd60e51b815260206004820152602e60248201527f43525950543a3a207265636f76657245524332303a2063616e2774207265636f60448201526d3b32b9103a3434b9903a37b5b2b760911b606482015260840161095e565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbe91906124e4565b905080821115610e365760405162461bcd60e51b815260206004820152603a60248201527f43525950543a3a207265636f76657245524332303a2043616e2774206578636560448201527f6564206d6f7265207468616e20746f74616c2062616c616e6365000000000000606482015260840161095e565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea791906124fd565b50505050565b6060600480546108519061244c565b6005546001600160a01b03163314610ee65760405162461bcd60e51b815260040161095e906124af565b6007546001600160a01b0390811690831603610f6a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161095e565b610f748282611b4f565b5050565b60003381610f86828661132e565b905083811015610fe65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161095e565b6109078286868403611668565b6000336108e2818585611800565b6005546001600160a01b0316331461102b5760405162461bcd60e51b815260040161095e906124af565b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f0653eceefbd0b482dff642e4c2c68422d2c0ccb424ec1ca631648fc1a182cc9791a35050565b6005546001600160a01b031633146110a95760405162461bcd60e51b815260040161095e906124af565b6007805461ffff60b01b1916600160b01b84151590810260ff60b81b191691909117600160b81b841515908102919091179092556040805191825260208201929092527f55ff3b31afd9343b6efd7378f4ccd63f5385931cff9000a456b6378717c0b38d910160405180910390a15050565b30600090815260208190526040812054600c5460075491925082101590600160a01b900460ff16151560011480156111615750600754600160b81b900460ff1615156001145b80156111775750600754600160a81b900460ff16155b80156111805750805b15610f74576007805460ff60a81b1916600160a81b179055600a546000906301000000810460ff908116916111b691168561251a565b6111c09190612531565b600a5490915060009060ff630100000082048116916111e79162010000909104168661251a565b6111f19190612531565b90506000816112008487612553565b61120a9190612553565b600d549091506112249084906001600160a01b0316611ba3565b600e5461123b9083906001600160a01b0316611d69565b600f546112539030906001600160a01b031683611f6e565b50506007805460ff60a81b19169055505050565b6005546001600160a01b031633146112915760405162461bcd60e51b815260040161095e906124af565b6007805460ff60a01b1916600160a01b1790556040517f51cd7cc33235a1c89f708fecec535bf7cca0f94ed05216751befb052ca83e67990600090a1565b6005546001600160a01b031633146112f95760405162461bcd60e51b815260040161095e906124af565b600c8190556040518181527ffaaef882e67226ff309a60b699b462c47acf0718b47be11bb3cac6ce251cbb6790602001610a24565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146113835760405162461bcd60e51b815260040161095e906124af565b47808211156113fa5760405162461bcd60e51b815260206004820152603760248201527f43525950543a3a2077697468647261773a2043616e277420657863656564206d60448201527f6f7265207468616e20746f74616c4c6971756964697479000000000000000000606482015260840161095e565b6040513390819084156108fc029085906000818181858888f19350505050158015610ea7573d6000803e3d6000fd5b6005546001600160a01b031633146114535760405162461bcd60e51b815260040161095e906124af565b6001600160a01b0381166114b85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461153e5760405162461bcd60e51b815260040161095e906124af565b60648161154b8486612566565b6115559190612566565b60ff16106115b35760405162461bcd60e51b815260206004820152602560248201527f43525950543a3a207365745461784665653a204d6178204665652069732072656044820152641858da195960da1b606482015260840161095e565b600a805460ff8381166201000090810262ff00001987841661010090810261ffff19909616858b161795909517908116821795869055918504831694611603949004831692908116911617612566565b61160d9190612566565b600a805463ff0000001916630100000060ff938416021790556040805185831681528483166020820152918316908201527f69ca914ad0a80d723c4bbcb7a2aef7090e78a7a35f3135f3745db0bfc50e755f90606001610cad565b6001600160a01b0383166116ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095e565b6001600160a01b03821661172b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611798848461132e565b90506000198114610ea757818110156117f35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161095e565b610ea78484848403611668565b600081116118625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161095e565b60005a30600090815260208190526040902054600c546007549293503a929082101590600160a01b900460ff16151560011480156118ae5750600754600160b01b900460ff1615156001145b80156118c45750600754600160a81b900460ff16155b80156118cd5750805b80156118f257506001600160a01b03871660009081526009602052604090205460ff16155b801561190c57506005546001600160a01b03888116911614155b156119b557611919612112565b6000835a6119279087612553565b611931919061251a565b9050478882821115611979576040516001600160a01b0382169084156108fc029085906000818181858888f19350505050158015611973573d6000803e3d6000fd5b506119b1565b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156119af573d6000803e3d6000fd5b505b5050505b6005546001600160a01b03888116911614806119de57506005546001600160a01b038781169116145b806119f35750600a546301000000900460ff16155b80611a1657506001600160a01b03871660009081526008602052604090205460ff165b80611a3957506001600160a01b03861660009081526008602052604090205460ff165b15611a4e57611a49878787611f6e565b611b46565b600754600160a01b900460ff161515600114611aac5760405162461bcd60e51b815260206004820181905260248201527f43525950543a3a2054726164696e67206973206e6f7420796574206f70656e2e604482015260640161095e565b6001600160a01b03871660009081526009602052604081205486919060ff1680611aee57506001600160a01b03881660009081526009602052604090205460ff165b15611b2757600a546103e890611b0e906301000000900460ff168961251a565b611b189190612531565b9050611b248188612553565b91505b8015611b3857611b38893083611f6e565b611b43898984611f6e565b50505b50505050505050565b6001600160a01b038216600081815260096020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516003808252608082019092526060916020820183803683370190505090503081600081518110611bd957611bd961257f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c569190612595565b81600181518110611c6957611c6961257f565b6001600160a01b039283166020918202929092010152601054825191169082906002908110611c9a57611c9a61257f565b6001600160a01b03928316602091820292909201015260065416635c11d7958460008486611cca4261019061249c565b6040518663ffffffff1660e01b8152600401611cea9594939291906125b2565b600060405180830381600087803b158015611d0457600080fd5b505af1158015611d18573d6000803e3d6000fd5b5050601054604080516001600160a01b03928316815260208101889052918616908201527f95d267a65296fba910885084431d92e3370ee983cc0c90ddd872fa134dd129a692506060019050610cad565b60408051600280825260608083018452926020830190803683370190505090503081600081518110611d9d57611d9d61257f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a9190612595565b81600181518110611e2d57611e2d61257f565b6001600160a01b0392831660209182029290920101526006541663791ac9478460008486611e5d4261019061249c565b6040518663ffffffff1660e01b8152600401611e7d9594939291906125b2565b600060405180830381600087803b158015611e9757600080fd5b505af1158015611eab573d6000803e3d6000fd5b505050507ffa99afd185fb2ab6c9102503619563b856f564e07ba1715a6bfe445e7c56aa16600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f479190612595565b604080516001600160a01b0392831681526020810187905291851690820152606001610cad565b6001600160a01b038316611fd25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161095e565b6001600160a01b0382166120345760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161095e565b6001600160a01b038316600090815260208190526040902054818110156120ac5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161095e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ea7565b6007805460ff60a81b1916600160a81b17905530600090815260208190526040812054600a5490915060009060ff6301000000820481169161215591168461251a565b61215f9190612531565b600a5490915060009060ff630100000082048116916121869162010000909104168561251a565b6121909190612531565b905060008161219f8486612553565b6121a99190612553565b600d549091506121c39084906001600160a01b0316611ba3565b600e546121da9083906001600160a01b0316611d69565b600f546121f29030906001600160a01b031683611f6e565b50506007805460ff60a81b191690555050565b600060208083528351808285015260005b8181101561223257858101830151858201604001528201612216565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461226857600080fd5b50565b6000806040838503121561227e57600080fd5b823561228981612253565b946020939093013593505050565b6000806000606084860312156122ac57600080fd5b83356122b781612253565b925060208401356122c781612253565b929592945050506040919091013590565b6000602082840312156122ea57600080fd5b81356122f581612253565b9392505050565b60008060006060848603121561231157600080fd5b833561231c81612253565b9250602084013561232c81612253565b9150604084013561233c81612253565b809150509250925092565b801515811461226857600080fd5b6000806040838503121561236857600080fd5b823561237381612253565b9150602083013561238381612347565b809150509250929050565b600080604083850312156123a157600080fd5b823561237381612347565b6000602082840312156123be57600080fd5b5035919050565b600080604083850312156123d857600080fd5b82356123e381612253565b9150602083013561238381612253565b803560ff8116811461240457600080fd5b919050565b60008060006060848603121561241e57600080fd5b612427846123f3565b9250612435602085016123f3565b9150612443604085016123f3565b90509250925092565b600181811c9082168061246057607f821691505b60208210810361248057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108e8576108e8612486565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156124f657600080fd5b5051919050565b60006020828403121561250f57600080fd5b81516122f581612347565b80820281158282048414176108e8576108e8612486565b60008261254e57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156108e8576108e8612486565b60ff81811683821601908111156108e8576108e8612486565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125a757600080fd5b81516122f581612253565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126025784516001600160a01b0316835293830193918301916001016125dd565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220225c37858a085c5b367ed0cd117ebe01d3dce9d5664ae0edb667d5416904f86f64736f6c63430008110033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _stable (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48


Deployed Bytecode Sourcemap

27313:10869:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30311:31;;;30320:10;188:51:1;;30332:9:0;270:2:1;255:18;;248:34;30311:31:0;;161:18:1;30311:31:0;;;;;;;27313:10869;;;;;16125:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18476:201;;;;;;;;;;-1:-1:-1;18476:201:0;;;;;:::i;:::-;;:::i;:::-;;;1467:14:1;;1460:22;1442:41;;1430:2;1415:18;18476:201:0;1302:187:1;27366:41:0;;;;;;;;;;-1:-1:-1;27366:41:0;;;;-1:-1:-1;;;;;27366:41:0;;;;;;-1:-1:-1;;;;;1684:32:1;;;1666:51;;1654:2;1639:18;27366:41:0;1494:229:1;17245:108:0;;;;;;;;;;-1:-1:-1;17333:12:0;;17245:108;;;1874:25:1;;;1862:2;1847:18;17245:108:0;1728:177:1;27979:26:0;;;;;;;;;;-1:-1:-1;27979:26:0;;;;;;;;;;;;;;2082:4:1;2070:17;;;2052:36;;2040:2;2025:18;27979:26:0;1910:184:1;19257:295:0;;;;;;;;;;-1:-1:-1;19257:295:0;;;;;:::i;:::-;;:::i;17087:93::-;;;;;;;;;;-1:-1:-1;17170:2:0;17087:93;;28117:39;;;;;;;;;;;;;;;;19961:238;;;;;;;;;;-1:-1:-1;19961:238:0;;;;;:::i;:::-;;:::i;32291:90::-;;;;;;;;;;-1:-1:-1;32360:11:0;32291:90;;27414:28;;;;;;;;;;-1:-1:-1;27414:28:0;;;;-1:-1:-1;;;;;27414:28:0;;;35845:227;;;;;;;;;;-1:-1:-1;35845:227:0;;;;;:::i;:::-;;:::i;:::-;;27733:50;;;;;;;;;;-1:-1:-1;27733:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28579:21;;;;;;;;;;-1:-1:-1;28579:21:0;;;;-1:-1:-1;;;;;28579:21:0;;;27936:30;;;;;;;;;;-1:-1:-1;27936:30:0;;;;;;;;;;;27601;;;;;;;;;;-1:-1:-1;27601:30:0;;;;-1:-1:-1;;;27601:30:0;;;;;;17416:127;;;;;;;;;;-1:-1:-1;17416:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17517:18:0;17490:7;17517:18;;;;;;;;;;;;17416:127;13481:148;;;;;;;;;;;;;:::i;28267:75::-;;;;;;;;;;-1:-1:-1;28267:75:0;;;;-1:-1:-1;;;;;28267:75:0;;;36311:635;;;;;;;;;;-1:-1:-1;36311:635:0;;;;;:::i;:::-;;:::i;37744:435::-;;;;;;;;;;-1:-1:-1;37744:435:0;;;;;:::i;:::-;;:::i;12839:79::-;;;;;;;;;;-1:-1:-1;12904:6:0;;-1:-1:-1;;;;;12904:6:0;12839:79;;16344:104;;;;;;;;;;;;;:::i;27651:36::-;;;;;;;;;;-1:-1:-1;27651:36:0;;;;-1:-1:-1;;;27651:36:0;;;;;;35033:242;;;;;;;;;;-1:-1:-1;35033:242:0;;;;;:::i;:::-;;:::i;28018:34::-;;;;;;;;;;;;28049:3;28018:34;;20702:436;;;;;;;;;;-1:-1:-1;20702:436:0;;;;;:::i;:::-;;:::i;17749:193::-;;;;;;;;;;-1:-1:-1;17749:193:0;;;;;:::i;:::-;;:::i;35477:180::-;;;;;;;;;;-1:-1:-1;35477:180:0;;;;;:::i;:::-;;:::i;36080:223::-;;;;;;;;;;-1:-1:-1;36080:223:0;;;;;:::i;:::-;;:::i;32967:881::-;;;;;;;;;;;;;:::i;27790:58::-;;;;;;;;;;-1:-1:-1;27790:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34877:148;;;;;;;;;;;;;:::i;27898:25::-;;;;;;;;;;-1:-1:-1;27898:25:0;;;;;;;;;;;35665:172;;;;;;;;;;-1:-1:-1;35665:172:0;;;;;:::i;:::-;;:::i;18005:151::-;;;;;;;;;;-1:-1:-1;18005:151:0;;;;;:::i;:::-;;:::i;28185:75::-;;;;;;;;;;-1:-1:-1;28185:75:0;;;;-1:-1:-1;;;;;28185:75:0;;;27857:28;;;;;;;;;;-1:-1:-1;27857:28:0;;;;;;;;37395:341;;;;;;;;;;-1:-1:-1;37395:341:0;;;;;:::i;:::-;;:::i;13784:281::-;;;;;;;;;;-1:-1:-1;13784:281:0;;;;;:::i;:::-;;:::i;36954:433::-;;;;;;;;;;-1:-1:-1;36954:433:0;;;;;:::i;:::-;;:::i;28349:72::-;;;;;;;;;;-1:-1:-1;28349:72:0;;;;-1:-1:-1;;;;;28349:72:0;;;28449:81;;;;;;;;;;;;28488:42;28449:81;;27472:23;;;;;;;;;;-1:-1:-1;27472:23:0;;;;-1:-1:-1;;;27472:23:0;;;;;;16125:100;16179:13;16212:5;16205:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16125:100;:::o;18476:201::-;18559:4;12189:10;18615:32;12189:10;18631:7;18640:6;18615:8;:32::i;:::-;18665:4;18658:11;;;18476:201;;;;;:::o;19257:295::-;19388:4;12189:10;19446:38;19462:4;12189:10;19477:6;19446:15;:38::i;:::-;19495:27;19505:4;19511:2;19515:6;19495:9;:27::i;:::-;-1:-1:-1;19540:4:0;;19257:295;-1:-1:-1;;;;19257:295:0:o;19961:238::-;20049:4;12189:10;20105:64;12189:10;20121:7;20158:10;20130:25;12189:10;20121:7;20130:9;:25::i;:::-;:38;;;;:::i;:::-;20105:8;:64::i;35845:227::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;35922:21:0;::::1;35914:86;;;::::0;-1:-1:-1;;;35914:86:0;;6721:2:1;35914:86:0::1;::::0;::::1;6703:21:1::0;6760:2;6740:18;;;6733:30;6799:34;6779:18;;;6772:62;-1:-1:-1;;;6850:18:1;;;6843:50;6910:19;;35914:86:0::1;6519:416:1::0;35914:86:0::1;36011:6;:16:::0;;-1:-1:-1;;;;;;36011:16:0::1;-1:-1:-1::0;;;;;36011:16:0;::::1;::::0;;::::1;::::0;;;36043:21:::1;::::0;1666:51:1;;;36043:21:0::1;::::0;1654:2:1;1639:18;36043:21:0::1;;;;;;;;35845:227:::0;:::o;13481:148::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;13572:6:::1;::::0;13551:40:::1;::::0;13588:1:::1;::::0;-1:-1:-1;;;;;13572:6:0::1;::::0;13551:40:::1;::::0;13588:1;;13551:40:::1;13602:6;:19:::0;;-1:-1:-1;;;;;;13602:19:0::1;::::0;;13481:148::o;36311:635::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36441:22:0;::::1;36433:91;;;::::0;-1:-1:-1;;;36433:91:0;;7142:2:1;36433:91:0::1;::::0;::::1;7124:21:1::0;7181:2;7161:18;;;7154:30;7220:34;7200:18;;;7193:62;7291:26;7271:18;;;7264:54;7335:19;;36433:91:0::1;6940:420:1::0;36433:91:0::1;-1:-1:-1::0;;;;;36543:27:0;::::1;36535:95;;;::::0;-1:-1:-1;;;36535:95:0;;7567:2:1;36535:95:0::1;::::0;::::1;7549:21:1::0;7606:2;7586:18;;;7579:30;7645:34;7625:18;;;7618:62;-1:-1:-1;;;7696:18:1;;;7689:53;7759:19;;36535:95:0::1;7365:419:1::0;36535:95:0::1;-1:-1:-1::0;;;;;36649:30:0;::::1;36641:98;;;::::0;-1:-1:-1;;;36641:98:0;;7991:2:1;36641:98:0::1;::::0;::::1;7973:21:1::0;8030:2;8010:18;;;8003:30;8069:34;8049:18;;;8042:62;-1:-1:-1;;;8120:18:1;;;8113:53;8183:19;;36641:98:0::1;7789:419:1::0;36641:98:0::1;36752:15;:26:::0;;-1:-1:-1;;;;;36752:26:0;;::::1;-1:-1:-1::0;;;;;;36752:26:0;;::::1;::::0;::::1;::::0;;;36789:12:::1;:28:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;36828:15:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;36880:58:::1;::::0;;8453:34:1;;;8518:2;8503:18;;8496:43;;;;8555:18;;;8548:43;36880:58:0::1;::::0;8403:2:1;8388:18;36880:58:0::1;;;;;;;;36311:635:::0;;;:::o;37744:435::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;37855:4:::1;-1:-1:-1::0;;;;;37837:23:0;::::1;::::0;37829:82:::1;;;::::0;-1:-1:-1;;;37829:82:0;;8804:2:1;37829:82:0::1;::::0;::::1;8786:21:1::0;8843:2;8823:18;;;8816:30;8882:34;8862:18;;;8855:62;-1:-1:-1;;;8933:18:1;;;8926:44;8987:19;;37829:82:0::1;8602:410:1::0;37829:82:0::1;37940:39;::::0;-1:-1:-1;;;37940:39:0;;37973:4:::1;37940:39;::::0;::::1;1666:51:1::0;37922:15:0::1;::::0;-1:-1:-1;;;;;37940:24:0;::::1;::::0;::::1;::::0;1639:18:1;;37940:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37922:57;;38023:7;38012;:18;;37990:126;;;::::0;-1:-1:-1;;;37990:126:0;;9408:2:1;37990:126:0::1;::::0;::::1;9390:21:1::0;9447:2;9427:18;;;9420:30;9486:34;9466:18;;;9459:62;9557:28;9537:18;;;9530:56;9603:19;;37990:126:0::1;9206:422:1::0;37990:126:0::1;38127:44;::::0;-1:-1:-1;;;38127:44:0;;38151:10:::1;38127:44;::::0;::::1;188:51:1::0;255:18;;;248:34;;;-1:-1:-1;;;;;38127:23:0;::::1;::::0;::::1;::::0;161:18:1;;38127:44:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37818:361;37744:435:::0;;:::o;16344:104::-;16400:13;16433:7;16426:14;;;;;:::i;35033:242::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;35140:13:::1;::::0;-1:-1:-1;;;;;35140:13:0;;::::1;35132:21:::0;;::::1;::::0;35124:91:::1;;;::::0;-1:-1:-1;;;35124:91:0;;10085:2:1;35124:91:0::1;::::0;::::1;10067:21:1::0;10124:2;10104:18;;;10097:30;10163:34;10143:18;;;10136:62;10234:27;10214:18;;;10207:55;10279:19;;35124:91:0::1;9883:421:1::0;35124:91:0::1;35226:41;35255:4;35261:5;35226:28;:41::i;:::-;35033:242:::0;;:::o;20702:436::-;20795:4;12189:10;20795:4;20878:25;12189:10;20895:7;20878:9;:25::i;:::-;20851:52;;20942:15;20922:16;:35;;20914:85;;;;-1:-1:-1;;;20914:85:0;;10511:2:1;20914:85:0;;;10493:21:1;10550:2;10530:18;;;10523:30;10589:34;10569:18;;;10562:62;-1:-1:-1;;;10640:18:1;;;10633:35;10685:19;;20914:85:0;10309:401:1;20914:85:0;21035:60;21044:5;21051:7;21079:15;21060:16;:34;21035:8;:60::i;17749:193::-;17828:4;12189:10;17884:28;12189:10;17901:2;17905:6;17884:9;:28::i;35477:180::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35564:27:0;::::1;;::::0;;;:17:::1;:27;::::0;;;;;:35;;-1:-1:-1;;35564:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35615:34;;35564:35;;:27;35615:34:::1;::::0;::::1;35477:180:::0;;:::o;36080:223::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;36171:11:::1;:22:::0;;-1:-1:-1;;;;36204:34:0;-1:-1:-1;;;36171:22:0;::::1;;::::0;;::::1;-1:-1:-1::0;;;;36204:34:0;;;;;-1:-1:-1;;;36204:34:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;36254:41:::1;::::0;;10877::1;;;10949:2;10934:18;;10927:50;;;;36254:41:0::1;::::0;10850:18:1;36254:41:0::1;;;;;;;36080:223:::0;;:::o;32967:881::-;33060:4;33011:28;17517:18;;;;;;;;;;;33117:13;;33159:11;;33011:55;;-1:-1:-1;33093:37:0;;;;-1:-1:-1;;;33159:11:0;;;;:19;;33174:4;33159:19;:61;;;;-1:-1:-1;33195:17:0;;-1:-1:-1;;;33195:17:0;;;;:25;;33216:4;33195:25;33159:61;:95;;;;-1:-1:-1;33238:7:0;;-1:-1:-1;;;33238:7:0;;;;:16;33159:95;:119;;;;;33271:7;33159:119;33141:700;;;33305:7;:14;;-1:-1:-1;;;;33305:14:0;-1:-1:-1;;;33305:14:0;;;33397:8;;33305:14;;33397:8;;;33305:14;33397:8;;;;33361:33;;33384:10;33361:20;:33;:::i;:::-;:44;;;;:::i;:::-;33487:8;;33334:71;;-1:-1:-1;33420:26:0;;33487:8;;;;;;;33449:35;;33472:12;;;;;33449:20;:35;:::i;:::-;:46;;;;:::i;:::-;33420:75;-1:-1:-1;33510:24:0;33420:75;33537:39;33560:16;33537:20;:39;:::i;:::-;:60;;;;:::i;:::-;33645:15;;33510:87;;-1:-1:-1;33614:47:0;;33627:16;;-1:-1:-1;;;;;33645:15:0;33614:12;:47::i;:::-;33706:15;;33676:46;;33686:18;;-1:-1:-1;;;;;33706:15:0;33676:9;:46::i;:::-;33768:12;;33737:62;;33761:4;;-1:-1:-1;;;;;33768:12:0;33782:16;33737:15;:62::i;:::-;-1:-1:-1;;33814:7:0;:15;;-1:-1:-1;;;;33814:15:0;;;-1:-1:-1;33000:848:0;;32967:881::o;34877:148::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;34970:11:::1;:18:::0;;-1:-1:-1;;;;34970:18:0::1;-1:-1:-1::0;;;34970:18:0::1;::::0;;35004:13:::1;::::0;::::1;::::0;34970:18;;35004:13:::1;34877:148::o:0;35665:172::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;35748:13:::1;:30:::0;;;35794:35:::1;::::0;1874:25:1;;;35794:35:0::1;::::0;1862:2:1;1847:18;35794:35:0::1;1728:177:1::0;18005:151:0;-1:-1:-1;;;;;18121:18:0;;;18094:7;18121:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18005:151::o;37395:341::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;37482:21:::1;37536:19:::0;;::::1;;37514:124;;;::::0;-1:-1:-1;;;37514:124:0;;11718:2:1;37514:124:0::1;::::0;::::1;11700:21:1::0;11757:2;11737:18;;;11730:30;11796:34;11776:18;;;11769:62;11867:25;11847:18;;;11840:53;11910:19;;37514:124:0::1;11516:419:1::0;37514:124:0::1;37704:24;::::0;37682:10:::1;::::0;;;37704:24;::::1;;;::::0;37720:7;;37649:22:::1;37704:24:::0;37649:22;37704:24;37720:7;37682:10;37704:24;::::1;;;;;;;;;;;;;::::0;::::1;;;;13784:281:::0;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13887:22:0;::::1;13865:110;;;::::0;-1:-1:-1;;;13865:110:0;;12142:2:1;13865:110:0::1;::::0;::::1;12124:21:1::0;12181:2;12161:18;;;12154:30;12220:34;12200:18;;;12193:62;-1:-1:-1;;;12271:18:1;;;12264:36;12317:19;;13865:110:0::1;11940:402:1::0;13865:110:0::1;14012:6;::::0;13991:38:::1;::::0;-1:-1:-1;;;;;13991:38:0;;::::1;::::0;14012:6:::1;::::0;13991:38:::1;::::0;14012:6:::1;::::0;13991:38:::1;14040:6;:17:::0;;-1:-1:-1;;;;;;14040:17:0::1;-1:-1:-1::0;;;;;14040:17:0;;;::::1;::::0;;;::::1;::::0;;13784:281::o;36954:433::-;13051:6;;-1:-1:-1;;;;;13051:6:0;12189:10;13051:22;13043:67;;;;-1:-1:-1;;;13043:67:0;;;;;;;:::i;:::-;28049:3:::1;37090:13:::0;37065:22:::1;37079:8:::0;37065:11;:22:::1;:::i;:::-;:38;;;;:::i;:::-;:47;;;37057:97;;;::::0;-1:-1:-1;;;37057:97:0;;12702:2:1;37057:97:0::1;::::0;::::1;12684:21:1::0;12741:2;12721:18;;;12714:30;12780:34;12760:18;;;12753:62;-1:-1:-1;;;12831:18:1;;;12824:35;12876:19;;37057:97:0::1;12500:401:1::0;37057:97:0::1;37165:10;:24:::0;;::::1;37229:28:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;37200:18:0;;::::1;37165:24;37200:18:::0;;::::1;-1:-1:-1::0;;37200:18:0;;;37165:24;;::::1;37200:18:::0;;;;::::1;37229:28:::0;;::::1;::::0;::::1;::::0;;;;37302:12;;::::1;::::0;::::1;::::0;37279:20:::1;::::0;37292:7;::::1;::::0;::::1;::::0;37279:10;;;;;;:20:::1;:::i;:::-;:35;;;;:::i;:::-;37268:8;:46:::0;;-1:-1:-1;;37268:46:0::1;::::0;::::1;::::0;;::::1;;;::::0;;37332:47:::1;::::0;;13114:17:1;;;13096:36;;13168:17;;;13163:2;13148:18;;13141:45;13222:17;;;13202:18;;;13195:45;37332:47:0::1;::::0;13084:2:1;13069:18;37332:47:0::1;12906:340:1::0;24729:380:0;-1:-1:-1;;;;;24865:19:0;;24857:68;;;;-1:-1:-1;;;24857:68:0;;13453:2:1;24857:68:0;;;13435:21:1;13492:2;13472:18;;;13465:30;13531:34;13511:18;;;13504:62;-1:-1:-1;;;13582:18:1;;;13575:34;13626:19;;24857:68:0;13251:400:1;24857:68:0;-1:-1:-1;;;;;24944:21:0;;24936:68;;;;-1:-1:-1;;;24936:68:0;;13858:2:1;24936:68:0;;;13840:21:1;13897:2;13877:18;;;13870:30;13936:34;13916:18;;;13909:62;-1:-1:-1;;;13987:18:1;;;13980:32;14029:19;;24936:68:0;13656:398:1;24936:68:0;-1:-1:-1;;;;;25017:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25069:32;;1874:25:1;;;25069:32:0;;1847:18:1;25069:32:0;;;;;;;24729:380;;;:::o;25400:453::-;25535:24;25562:25;25572:5;25579:7;25562:9;:25::i;:::-;25535:52;;-1:-1:-1;;25602:16:0;:37;25598:248;;25684:6;25664:16;:26;;25656:68;;;;-1:-1:-1;;;25656:68:0;;14261:2:1;25656:68:0;;;14243:21:1;14300:2;14280:18;;;14273:30;14339:31;14319:18;;;14312:59;14388:18;;25656:68:0;14059:353:1;25656:68:0;25768:51;25777:5;25784:7;25812:6;25793:16;:25;25768:8;:51::i;30426:1830::-;30580:1;30571:6;:10;30563:64;;;;-1:-1:-1;;;30563:64:0;;14619:2:1;30563:64:0;;;14601:21:1;14658:2;14638:18;;;14631:30;14697:34;14677:18;;;14670:62;-1:-1:-1;;;14748:18:1;;;14741:39;14797:19;;30563:64:0;14417:405:1;30563:64:0;30638:16;30657:9;30764:4;30677:16;17517:18;;;;;;;;;;;30816:13;;30858:11;;30638:28;;-1:-1:-1;32360:11:0;;30797:32;;;;;-1:-1:-1;;;30858:11:0;;;;:19;;30873:4;30858:19;:55;;;;-1:-1:-1;30894:11:0;;-1:-1:-1;;;30894:11:0;;;;:19;;30909:4;30894:19;30858:55;:89;;;;-1:-1:-1;30931:7:0;;-1:-1:-1;;;30931:7:0;;;;:16;30858:89;:113;;;;;30964:7;30858:113;:164;;;;-1:-1:-1;;;;;;30989:33:0;;;;;;:25;:33;;;;;;;;30988:34;30858:164;:198;;;;-1:-1:-1;12904:6:0;;-1:-1:-1;;;;;31039:17:0;;;12904:6;;31039:17;;30858:198;30840:607;;;31084:10;:8;:10::i;:::-;31109:15;31152:8;31139:9;31128:20;;:8;:20;:::i;:::-;31127:33;;;;:::i;:::-;31109:51;-1:-1:-1;31194:21:0;31264:6;31289:18;;;31286:150;;;31328:25;;-1:-1:-1;;;;;31328:16:0;;;:25;;;;;31345:7;;31328:25;;;;31345:7;31328:16;:25;;;;;;;;;;;;;;;;;;;;;31286:150;;;31394:26;;-1:-1:-1;;;;;31394:16:0;;;:26;;;;;31411:8;;31394:26;;;;31411:8;31394:16;:26;;;;;;;;;;;;;;;;;;;;;31286:150;31069:378;;;30840:607;12904:6;;-1:-1:-1;;;;;31463:17:0;;;12904:6;;31463:17;;:41;;-1:-1:-1;12904:6:0;;-1:-1:-1;;;;;31484:20:0;;;12904:6;;31484:20;31463:41;:58;;;-1:-1:-1;31508:8:0;;;;;;;:13;31463:58;:87;;;-1:-1:-1;;;;;;31525:25:0;;;;;;:17;:25;;;;;;;;31463:87;:119;;;-1:-1:-1;;;;;;31554:28:0;;;;;;:17;:28;;;;;;;;31463:119;31459:790;;;31599:42;31615:6;31623:9;31634:6;31599:15;:42::i;:::-;31459:790;;;31682:11;;-1:-1:-1;;;31682:11:0;;;;:19;;31697:4;31682:19;31674:64;;;;-1:-1:-1;;;31674:64:0;;15029:2:1;31674:64:0;;;15011:21:1;;;15048:18;;;15041:30;15107:34;15087:18;;;15080:62;15159:18;;31674:64:0;14827:356:1;31674:64:0;-1:-1:-1;;;;;31865:33:0;;31755:18;31865:33;;;:25;:33;;;;;;31776:6;;31755:18;31865:33;;;:73;;-1:-1:-1;;;;;;31902:36:0;;;;;;:25;:36;;;;;;;;31865:73;31862:199;;;31980:8;;31991:4;;31971:17;;31980:8;;;;;31971:6;:17;:::i;:::-;:24;;;;:::i;:::-;31959:36;-1:-1:-1;32027:18:0;31959:36;32027:6;:18;:::i;:::-;32014:31;;31862:199;32078:13;;32075:102;;32112:49;32128:6;32144:4;32151:9;32112:15;:49::i;:::-;32191:46;32207:6;32215:9;32226:10;32191:15;:46::i;:::-;31659:590;;31459:790;30522:1734;;;;30426:1830;;;:::o;35283:186::-;-1:-1:-1;;;;;35366:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;35366:39:0;;;;;;;;;;35421:40;;35366:39;;:31;35421:40;;;35283:186;;:::o;33856:511::-;33973:16;;;33987:1;33973:16;;;;;;;;;33934:21;;33973:16;;;33934:21;;33973:16;;;;;-1:-1:-1;33973:16:0;33966:23;;34018:4;34000;34005:1;34000:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34000:23:0;;;:7;;;;;;;;;;:23;;;;34044:15;;:22;;;-1:-1:-1;;;34044:22:0;;;;:15;;;;;:20;;:22;;;;;34000:7;;34044:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34034:4;34039:1;34034:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34034:32:0;;;:7;;;;;;;;;:32;34087:6;;34077:7;;34087:6;;;34077:4;;34082:1;;34077:7;;;;;;:::i;:::-;-1:-1:-1;;;;;34077:16:0;;;:7;;;;;;;;;:16;34104:15;;;:69;34188:7;34104:15;34226:4;34245:9;34269:21;:15;34287:3;34269:21;:::i;:::-;34104:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34332:6:0;;34319:40;;;-1:-1:-1;;;;;34332:6:0;;;16933:34:1;;16998:2;16983:18;;16976:34;;;17046:15;;;17026:18;;;17019:43;34319:40:0;;-1:-1:-1;16883:2:1;16868:18;;-1:-1:-1;34319:40:0;16693:375:1;34375:491:0;34489:16;;;34503:1;34489:16;;;34450:21;34489:16;;;;;34450:21;34489:16;;;;;;;;;;-1:-1:-1;34489:16:0;34482:23;;34534:4;34516;34521:1;34516:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34516:23:0;;;:7;;;;;;;;;;:23;;;;34560:15;;:22;;;-1:-1:-1;;;34560:22:0;;;;:15;;;;;:20;;:22;;;;;34516:7;;34560:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34550:4;34555:1;34550:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34550:32:0;;;:7;;;;;;;;;:32;34593:15;;;:66;34674:7;34593:15;34712:4;34731:9;34755:21;:15;34773:3;34755:21;:::i;:::-;34593:194;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34805:53;34815:15;;;;;;;;;-1:-1:-1;;;;;34815:15:0;-1:-1:-1;;;;;34815:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34805:53;;;-1:-1:-1;;;;;16951:15:1;;;16933:34;;16998:2;16983:18;;16976:34;;;17046:15;;;17026:18;;;17019:43;16883:2;16868:18;34805:53:0;16693:375:1;21608:840:0;-1:-1:-1;;;;;21739:18:0;;21731:68;;;;-1:-1:-1;;;21731:68:0;;17275:2:1;21731:68:0;;;17257:21:1;17314:2;17294:18;;;17287:30;17353:34;17333:18;;;17326:62;-1:-1:-1;;;17404:18:1;;;17397:35;17449:19;;21731:68:0;17073:401:1;21731:68:0;-1:-1:-1;;;;;21818:16:0;;21810:64;;;;-1:-1:-1;;;21810:64:0;;17681:2:1;21810:64:0;;;17663:21:1;17720:2;17700:18;;;17693:30;17759:34;17739:18;;;17732:62;-1:-1:-1;;;17810:18:1;;;17803:33;17853:19;;21810:64:0;17479:399:1;21810:64:0;-1:-1:-1;;;;;21960:15:0;;21938:19;21960:15;;;;;;;;;;;21994:21;;;;21986:72;;;;-1:-1:-1;;;21986:72:0;;18085:2:1;21986:72:0;;;18067:21:1;18124:2;18104:18;;;18097:30;18163:34;18143:18;;;18136:62;-1:-1:-1;;;18214:18:1;;;18207:36;18260:19;;21986:72:0;17883:402:1;21986:72:0;-1:-1:-1;;;;;22094:15:0;;;:9;:15;;;;;;;;;;;22112:20;;;22094:38;;22312:13;;;;;;;;;;:23;;;;;;22364:26;;1874:25:1;;;22312:13:0;;22364:26;;1847:18:1;22364:26:0;;;;;;;22403:37;26453:125;32389:570;29442:7;:14;;-1:-1:-1;;;;29442:14:0;-1:-1:-1;;;29442:14:0;;;32489:4:::1;-1:-1:-1::0;17517:18:0;;;;;;;;;;;32569:8:::1;::::0;32440:55;;-1:-1:-1;32506:24:0::1;::::0;32569:8:::1;::::0;;::::1;::::0;::::1;::::0;32533:33:::1;::::0;32556:10:::1;32440:55:::0;32533:33:::1;:::i;:::-;:44;;;;:::i;:::-;32655:8;::::0;32506:71;;-1:-1:-1;32588:26:0::1;::::0;32655:8:::1;::::0;;::::1;::::0;::::1;::::0;32617:35:::1;::::0;32640:12;;;::::1;;32617:20:::0;:35:::1;:::i;:::-;:46;;;;:::i;:::-;32588:75:::0;-1:-1:-1;32674:24:0::1;32588:75:::0;32701:39:::1;32724:16:::0;32701:20;:39:::1;:::i;:::-;:60;;;;:::i;:::-;32805:15;::::0;32674:87;;-1:-1:-1;32774:47:0::1;::::0;32787:16;;-1:-1:-1;;;;;32805:15:0::1;32774:12;:47::i;:::-;32862:15;::::0;32832:46:::1;::::0;32842:18;;-1:-1:-1;;;;;32862:15:0::1;32832:9;:46::i;:::-;32920:12;::::0;32889:62:::1;::::0;32913:4:::1;::::0;-1:-1:-1;;;;;32920:12:0::1;32934:16:::0;32889:15:::1;:62::i;:::-;-1:-1:-1::0;;29479:7:0;:15;;-1:-1:-1;;;;29479:15:0;;;-1:-1:-1;;32389:570:0:o;293:548:1:-;405:4;434:2;463;452:9;445:21;495:6;489:13;538:6;533:2;522:9;518:18;511:34;563:1;573:140;587:6;584:1;581:13;573:140;;;682:14;;;678:23;;672:30;648:17;;;667:2;644:26;637:66;602:10;;573:140;;;577:3;762:1;757:2;748:6;737:9;733:22;729:31;722:42;832:2;825;821:7;816:2;808:6;804:15;800:29;789:9;785:45;781:54;773:62;;;;293:548;;;;:::o;846:131::-;-1:-1:-1;;;;;921:31:1;;911:42;;901:70;;967:1;964;957:12;901:70;846:131;:::o;982:315::-;1050:6;1058;1111:2;1099:9;1090:7;1086:23;1082:32;1079:52;;;1127:1;1124;1117:12;1079:52;1166:9;1153:23;1185:31;1210:5;1185:31;:::i;:::-;1235:5;1287:2;1272:18;;;;1259:32;;-1:-1:-1;;;982:315:1:o;2099:456::-;2176:6;2184;2192;2245:2;2233:9;2224:7;2220:23;2216:32;2213:52;;;2261:1;2258;2251:12;2213:52;2300:9;2287:23;2319:31;2344:5;2319:31;:::i;:::-;2369:5;-1:-1:-1;2426:2:1;2411:18;;2398:32;2439:33;2398:32;2439:33;:::i;:::-;2099:456;;2491:7;;-1:-1:-1;;;2545:2:1;2530:18;;;;2517:32;;2099:456::o;2768:247::-;2827:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:52;;;2896:1;2893;2886:12;2848:52;2935:9;2922:23;2954:31;2979:5;2954:31;:::i;:::-;3004:5;2768:247;-1:-1:-1;;;2768:247:1:o;3020:529::-;3097:6;3105;3113;3166:2;3154:9;3145:7;3141:23;3137:32;3134:52;;;3182:1;3179;3172:12;3134:52;3221:9;3208:23;3240:31;3265:5;3240:31;:::i;:::-;3290:5;-1:-1:-1;3347:2:1;3332:18;;3319:32;3360:33;3319:32;3360:33;:::i;:::-;3412:7;-1:-1:-1;3471:2:1;3456:18;;3443:32;3484:33;3443:32;3484:33;:::i;:::-;3536:7;3526:17;;;3020:529;;;;;:::o;3554:118::-;3640:5;3633:13;3626:21;3619:5;3616:32;3606:60;;3662:1;3659;3652:12;3677:382;3742:6;3750;3803:2;3791:9;3782:7;3778:23;3774:32;3771:52;;;3819:1;3816;3809:12;3771:52;3858:9;3845:23;3877:31;3902:5;3877:31;:::i;:::-;3927:5;-1:-1:-1;3984:2:1;3969:18;;3956:32;3997:30;3956:32;3997:30;:::i;:::-;4046:7;4036:17;;;3677:382;;;;;:::o;4064:376::-;4126:6;4134;4187:2;4175:9;4166:7;4162:23;4158:32;4155:52;;;4203:1;4200;4193:12;4155:52;4242:9;4229:23;4261:28;4283:5;4261:28;:::i;4445:180::-;4504:6;4557:2;4545:9;4536:7;4532:23;4528:32;4525:52;;;4573:1;4570;4563:12;4525:52;-1:-1:-1;4596:23:1;;4445:180;-1:-1:-1;4445:180:1:o;4630:388::-;4698:6;4706;4759:2;4747:9;4738:7;4734:23;4730:32;4727:52;;;4775:1;4772;4765:12;4727:52;4814:9;4801:23;4833:31;4858:5;4833:31;:::i;:::-;4883:5;-1:-1:-1;4940:2:1;4925:18;;4912:32;4953:33;4912:32;4953:33;:::i;5023:156::-;5089:20;;5149:4;5138:16;;5128:27;;5118:55;;5169:1;5166;5159:12;5118:55;5023:156;;;:::o;5184:322::-;5255:6;5263;5271;5324:2;5312:9;5303:7;5299:23;5295:32;5292:52;;;5340:1;5337;5330:12;5292:52;5363:27;5380:9;5363:27;:::i;:::-;5353:37;;5409:36;5441:2;5430:9;5426:18;5409:36;:::i;:::-;5399:46;;5464:36;5496:2;5485:9;5481:18;5464:36;:::i;:::-;5454:46;;5184:322;;;;;:::o;5511:380::-;5590:1;5586:12;;;;5633;;;5654:61;;5708:4;5700:6;5696:17;5686:27;;5654:61;5761:2;5753:6;5750:14;5730:18;5727:38;5724:161;;5807:10;5802:3;5798:20;5795:1;5788:31;5842:4;5839:1;5832:15;5870:4;5867:1;5860:15;5724:161;;5511:380;;;:::o;5896:127::-;5957:10;5952:3;5948:20;5945:1;5938:31;5988:4;5985:1;5978:15;6012:4;6009:1;6002:15;6028:125;6093:9;;;6114:10;;;6111:36;;;6127:18;;:::i;6158:356::-;6360:2;6342:21;;;6379:18;;;6372:30;6438:34;6433:2;6418:18;;6411:62;6505:2;6490:18;;6158:356::o;9017:184::-;9087:6;9140:2;9128:9;9119:7;9115:23;9111:32;9108:52;;;9156:1;9153;9146:12;9108:52;-1:-1:-1;9179:16:1;;9017:184;-1:-1:-1;9017:184:1:o;9633:245::-;9700:6;9753:2;9741:9;9732:7;9728:23;9724:32;9721:52;;;9769:1;9766;9759:12;9721:52;9801:9;9795:16;9820:28;9842:5;9820:28;:::i;10988:168::-;11061:9;;;11092;;11109:15;;;11103:22;;11089:37;11079:71;;11130:18;;:::i;11161:217::-;11201:1;11227;11217:132;;11271:10;11266:3;11262:20;11259:1;11252:31;11306:4;11303:1;11296:15;11334:4;11331:1;11324:15;11217:132;-1:-1:-1;11363:9:1;;11161:217::o;11383:128::-;11450:9;;;11471:11;;;11468:37;;;11485:18;;:::i;12347:148::-;12435:4;12414:12;;;12428;;;12410:31;;12453:13;;12450:39;;;12469:18;;:::i;15320:127::-;15381:10;15376:3;15372:20;15369:1;15362:31;15412:4;15409:1;15402:15;15436:4;15433:1;15426:15;15452:251;15522:6;15575:2;15563:9;15554:7;15550:23;15546:32;15543:52;;;15591:1;15588;15581:12;15543:52;15623:9;15617:16;15642:31;15667:5;15642:31;:::i;15708:980::-;15970:4;16018:3;16007:9;16003:19;16049:6;16038:9;16031:25;16075:2;16113:6;16108:2;16097:9;16093:18;16086:34;16156:3;16151:2;16140:9;16136:18;16129:31;16180:6;16215;16209:13;16246:6;16238;16231:22;16284:3;16273:9;16269:19;16262:26;;16323:2;16315:6;16311:15;16297:29;;16344:1;16354:195;16368:6;16365:1;16362:13;16354:195;;;16433:13;;-1:-1:-1;;;;;16429:39:1;16417:52;;16524:15;;;;16489:12;;;;16465:1;16383:9;16354:195;;;-1:-1:-1;;;;;;;16605:32:1;;;;16600:2;16585:18;;16578:60;-1:-1:-1;;;16669:3:1;16654:19;16647:35;16566:3;15708:980;-1:-1:-1;;;15708:980:1:o

Swarm Source

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