ETH Price: $3,919.01 (-0.38%)

Token

ERC-20: ELONMEME (ELONMEME)
 

Overview

Max Total Supply

1,000,000,000,000,000 ELONMEME

Holders

12

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.351358475 ELONMEME

Value
$0.00
0x5c899bb231989b6bf21eea6c43d7e40e83710d61
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:
ELONMEME

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-31
*/

// SPDX-License-Identifier: MIT

// https://twitter.com/ElonMeme69
// https://t.me/elonmeme69

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

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

// File: contracts/IUniswapV2Router02.sol

pragma solidity ^0.8.0;

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

    function WETH() external pure returns (address);

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

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

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

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

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

// File: contracts/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/IUniswapV2Factory.sol

pragma solidity >=0.8.0;

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol

// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: contracts/ERC20.sol

pragma solidity ^0.8.0;

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;
    uint8 private _decimals;

    constructor(string memory name_, string memory symbol_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol

// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

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

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

pragma solidity ^0.8.0;

contract ELONMEME is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

    address private operationsWallet;
    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping(address => uint256) private _holderLastTransferBlock;
    bool public transferDelayEnabled = true;

    uint256 public buyFees;
    uint256 public sellFees;
    uint256 private _maxSwapableTokens;

    uint256 public _preventSwapBefore = 10;
    uint256 public _removeLimitsAt = 10;
    uint256 public _totalBuys = 0;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress,address indexed oldAddress);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived,uint256 tokensIntoLiquidity);
    event setOperationsWalletUpdated(address indexed newOperationsWallet);
    event setExcludeFromFeesUpdate(address indexed account, bool newStatus);
    event setAutomatedMarketMakerPairUpdate(address indexed pair, bool indexed value);
    event setSwapTokensAtAmountUpdate(uint256 newTokenAmount);
    event setMaxTransactionUpdate(uint256 newTokenAmount);
    event setMaxWalletUpdate(uint256 newTokenAmount);
    event setExcludeFromMaxTransactionUpdate(address newAddress, bool newStatus);
    event setUpdateSwapEnabledUpdate(bool newStatus);
    event setBuyFeeUpdated(uint256 newOperationsFee);
    event setSellFeeUpdated(uint256 newOperationsFee);

    constructor(address _operationsWallet) ERC20("ELONMEME", "ELONMEME", 9) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);

        setExcludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uint256 totalSupply = 1_000_000_000_000_000 * 10 ** decimals();

        maxTransaction = (totalSupply * 50) / 10_000; // 0.5% max transaction at launch
        maxWallet = (totalSupply * 50) / 10_000; // 0.5% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10_000; // 0.05%
        _maxSwapableTokens = (totalSupply * 50) / 10_000; // 0.5%

        buyFees = 500;
        sellFees = 1_000;

        operationsWallet = _operationsWallet;

        // exclude from paying fees or having max transaction amount
        setExcludeFromFees(owner(), true);
        setExcludeFromFees(address(this), true);
        setExcludeFromFees(address(0xdead), true);

        setExcludeFromMaxTransaction(owner(), true);
        setExcludeFromMaxTransaction(address(this), true);
        setExcludeFromMaxTransaction(address(0xdead), true);

        uint256 liqSupply = (totalSupply * 95) / 100;
        uint256 teamSupply = (totalSupply * 5) / 100;

        _mint(address(this), liqSupply);
        _mint(msg.sender, teamSupply);
    }

    receive() external payable {}

    function openTrading() external payable onlyOwner() {
        require(!tradingActive,"trading is already active");
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        setExcludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingActive = true;
    }

    function removeLimits() internal returns (bool) {
        limitsInEffect = false;
        buyFees = 500;
        sellFees = 500;
        return true;
    }

    function disableLimits(bool tValue, bool lValue) external onlyOwner {
        tradingActive = tValue;
        limitsInEffect = lValue;
    }

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

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

        emit setAutomatedMarketMakerPairUpdate(pair, value);
    }
    
    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferBlock[tx.origin] < block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferBlock[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to] &&
            _totalBuys > _preventSwapBefore
        ) {
            swapping = true;
            swapBack(min(contractTokenBalance, _maxSwapableTokens));
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                fees = amount.mul(sellFees).div(10_000);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                fees = amount.mul(buyFees).div(10_000);
                _totalBuys++;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);

        if (_totalBuys >= _removeLimitsAt && limitsInEffect) {
            removeLimits();
        }
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

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

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

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

    function swapBack(uint256 amount) private {
        bool success;

        if (amount == 0) {
            return;
        }

        uint256 amountToSwapForETH = amount;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;
        (success, ) = address(operationsWallet).call{value: ethBalance}("");
    }

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

    function setSwapTokensAtAmount(uint256 newTokenAmount) external onlyOwner returns (bool) {
        require(
            newTokenAmount >= (totalSupply() * 1) / 100_000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newTokenAmount <= (totalSupply() * 100) / 10_000,
            "Swap amount cannot be higher than 1% total supply."
        );
        swapTokensAtAmount = newTokenAmount;
        emit setSwapTokensAtAmountUpdate(newTokenAmount);
        return true;
    }

    function setMaxTransaction(uint256 newTokenAmount) external onlyOwner {
        require(
            newTokenAmount >= ((totalSupply() * 10) / 10_000),
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newTokenAmount * (10 ** decimals());
        emit setMaxTransactionUpdate(newTokenAmount);
    }

    function setMaxWallet(uint256 newTokenAmount) external onlyOwner {
        require(
            newTokenAmount >= ((totalSupply() * 50) / 10_000),
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newTokenAmount * (10 ** decimals());
        emit setMaxWalletUpdate(newTokenAmount);
    }

    function setExcludeFromMaxTransaction(address newAddress, bool newStatus) public onlyOwner {
        _isExcludedmaxTransaction[newAddress] = newStatus;
        emit setExcludeFromMaxTransactionUpdate(newAddress, newStatus);
    }

    function setUpdateSwapEnabled(bool newStatus) external onlyOwner {
        swapEnabled = newStatus;
        emit setUpdateSwapEnabledUpdate(newStatus);
    }

    function setBuyFee(uint256 newOperationsFee) external onlyOwner {
        buyFees = newOperationsFee;
        require(buyFees <= 500);
        emit setBuyFeeUpdated(newOperationsFee);
    }

    function setSellFee(uint256 newOperationsFee) external onlyOwner {
        sellFees = newOperationsFee;
        require(sellFees <= 500);
        emit setSellFeeUpdated(newOperationsFee);
    }

    function setExcludeFromFees(address account, bool newStatus) public onlyOwner {
        _isExcludedFromFees[account] = newStatus;
        emit setExcludeFromFeesUpdate(account, newStatus);
    }

    function setOperationsWallet(address newOperationsWallet) external onlyOwner {
        operationsWallet = newOperationsWallet;
        emit setOperationsWalletUpdated(newOperationsWallet);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_operationsWallet","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPairUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newOperationsFee","type":"uint256"}],"name":"setBuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setExcludeFromFeesUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setExcludeFromMaxTransactionUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTokenAmount","type":"uint256"}],"name":"setMaxTransactionUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTokenAmount","type":"uint256"}],"name":"setMaxWalletUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOperationsWallet","type":"address"}],"name":"setOperationsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newOperationsFee","type":"uint256"}],"name":"setSellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTokenAmount","type":"uint256"}],"name":"setSwapTokensAtAmountUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setUpdateSwapEnabledUpdate","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_preventSwapBefore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removeLimitsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"buyFees","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":"tValue","type":"bool"},{"internalType":"bool","name":"lValue","type":"bool"}],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOperationsFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"},{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTokenAmount","type":"uint256"}],"name":"setMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTokenAmount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperationsWallet","type":"address"}],"name":"setOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOperationsFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTokenAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setUpdateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600c805462ffffff19166001908117909155600e805460ff19169091179055600a60128190556013555f60145534801562000063575f80fd5b5060405162002fc438038062002fc4833981016040819052620000869162000555565b604080518082018252600880825267454c4f4e4d454d4560c01b60208084018290528451808601909552918452908301529060096003620000c8848262000623565b506004620000d7838262000623565b506005805460ff191660ff9290921691909117905550620001019050620000fb3390565b620002d9565b6007546001600160a01b03166200011a81600162000332565b6001600160a01b0381166080525f6200013560055460ff1690565b6200014290600a620007fa565b620001559066038d7ea4c680006200080a565b9050612710620001678260326200080a565b62000173919062000824565b600955612710620001868260326200080a565b62000192919062000824565b600b55612710620001a58260056200080a565b620001b1919062000824565b600a55612710620001c48260326200080a565b620001d0919062000824565b6011556101f4600f556103e8601055600880546001600160a01b0319166001600160a01b0385161790556200021e6200021660055461010090046001600160a01b031690565b60016200039e565b6200022b3060016200039e565b6200023a61dead60016200039e565b6200025e6200025660055461010090046001600160a01b031690565b600162000332565b6200026b30600162000332565b6200027a61dead600162000332565b5f60646200028a83605f6200080a565b62000296919062000824565b90505f6064620002a88460056200080a565b620002b4919062000824565b9050620002c2308362000406565b620002ce338262000406565b50505050506200085a565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6200033c620004ec565b6001600160a01b0382165f81815260166020908152604091829020805460ff19168515159081179091558251938452908301527f7f654cd58ed27e5f937ca593d4b7b6c2712dd47aae3a8980c67dddf81430257a910160405180910390a15050565b620003a8620004ec565b6001600160a01b0382165f81815260156020908152604091829020805460ff191685151590811790915591519182527f9cc19e08ba758837142b0e92d33f07d6494311434625fa20b5cfc51195abab61910160405180910390a25050565b6001600160a01b038216620004625760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060025f82825462000475919062000844565b90915550506001600160a01b0382165f9081526020819052604081208054839290620004a390849062000844565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b036101009091041633146200054e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000459565b565b505050565b5f6020828403121562000566575f80fd5b81516001600160a01b03811681146200057d575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005ad57607f821691505b602082108103620005cc57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000550575f81815260208120601f850160051c81016020861015620005fa5750805b601f850160051c820191505b818110156200061b5782815560010162000606565b505050505050565b81516001600160401b038111156200063f576200063f62000584565b620006578162000650845462000598565b84620005d2565b602080601f8311600181146200068d575f8415620006755750858301515b5f19600386901b1c1916600185901b1785556200061b565b5f85815260208120601f198616915b82811015620006bd578886015182559484019460019091019084016200069c565b5085821015620006db57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200073f57815f1904821115620007235762000723620006eb565b808516156200073157918102915b93841c939080029062000704565b509250929050565b5f826200075757506001620007f4565b816200076557505f620007f4565b81600181146200077e57600281146200078957620007a9565b6001915050620007f4565b60ff8411156200079d576200079d620006eb565b50506001821b620007f4565b5060208310610133831016604e8410600b8410161715620007ce575081810a620007f4565b620007da8383620006ff565b805f1904821115620007f057620007f0620006eb565b0290505b92915050565b5f6200057d60ff84168362000747565b8082028115828204841417620007f457620007f4620006eb565b5f826200083f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620007f457620007f4620006eb565b608051612712620008b25f395f818161030301528181610f7301528181610f9d0152818161102c0152818161115b0152818161126901528181611827015281816120c10152818161217801526121b401526127125ff3fe60806040526004361061026d575f3560e01c8063a457c2d71161014a578063d63cad22116100be578063e4748b9e11610078578063e4748b9e14610778578063e884f2601461078d578063ee5ecc89146107a1578063f2fde38b146107c0578063f887ea40146107df578063f8b45b05146107fe575f80fd5b8063d63cad221461069e578063db9855e8146106bd578063dd62ed3e146106dc578063e0f3ccf514610720578063e1bc339414610735578063e2f4560514610763575f80fd5b8063bbc0c7421161010f578063bbc0c74214610616578063c3f70b5214610634578063c81d924614610649578063c876d0b91461065e578063c9567bf914610677578063cfb4357b1461067f575f80fd5b8063a457c2d71461056c578063a9059cbb1461058b578063ab5a1887146105aa578063afa4f3b2146105c9578063b62496f5146105e8575f80fd5b80634fbee193116101e1578063715018a6116101a6578063715018a6146104cf57806373a94292146104e35780638b4cee08146104f85780638da5cb5b1461051757806395d89b41146105395780639a7a23d61461054d575f80fd5b80634fbee193146104115780635d0044ca1461044857806368018226146104675780636ddd17131461047c57806370a082311461049b575f80fd5b806323b872dd1161023257806323b872dd1461035b578063313ce5671461037a578063395093511461039b57806343668e6d146103ba57806349bd5a5e146103d95780634a62bb65146103f8575f80fd5b806306fdde0314610278578063095ea7b3146102a25780630cc835a3146102d15780631694505e146102f257806318160ddd1461033d575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028c610813565b6040516102999190612222565b60405180910390f35b3480156102ad575f80fd5b506102c16102bc366004612281565b6108a3565b6040519015158152602001610299565b3480156102dc575f80fd5b506102f06102eb3660046122ab565b6108b9565b005b3480156102fd575f80fd5b506103257f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610299565b348015610348575f80fd5b506002545b604051908152602001610299565b348015610366575f80fd5b506102c16103753660046122c2565b61090b565b348015610385575f80fd5b5060055460405160ff9091168152602001610299565b3480156103a6575f80fd5b506102c16103b5366004612281565b6109b8565b3480156103c5575f80fd5b506102f06103d436600461230d565b6109f3565b3480156103e4575f80fd5b50600654610325906001600160a01b031681565b348015610403575f80fd5b50600c546102c19060ff1681565b34801561041c575f80fd5b506102c161042b366004612344565b6001600160a01b03165f9081526015602052604090205460ff1690565b348015610453575f80fd5b506102f06104623660046122ab565b610a1e565b348015610472575f80fd5b5061034d60135481565b348015610487575f80fd5b50600c546102c19062010000900460ff1681565b3480156104a6575f80fd5b5061034d6104b5366004612344565b6001600160a01b03165f9081526020819052604090205490565b3480156104da575f80fd5b506102f0610af0565b3480156104ee575f80fd5b5061034d60145481565b348015610503575f80fd5b506102f06105123660046122ab565b610b03565b348015610522575f80fd5b5060055461010090046001600160a01b0316610325565b348015610544575f80fd5b5061028c610b4e565b348015610558575f80fd5b506102f061056736600461235f565b610b5d565b348015610577575f80fd5b506102c1610586366004612281565b610c2e565b348015610596575f80fd5b506102c16105a5366004612281565b610cc6565b3480156105b5575f80fd5b506102f06105c43660046122ab565b610cd2565b3480156105d4575f80fd5b506102c16105e33660046122ab565b610daa565b3480156105f3575f80fd5b506102c1610602366004612344565b60176020525f908152604090205460ff1681565b348015610621575f80fd5b50600c546102c190610100900460ff1681565b34801561063f575f80fd5b5061034d60095481565b348015610654575f80fd5b5061034d60125481565b348015610669575f80fd5b50600e546102c19060ff1681565b6102f0610f0d565b34801561068a575f80fd5b506102f061069936600461237b565b6112f8565b3480156106a9575f80fd5b506102f06106b836600461235f565b61134b565b3480156106c8575f80fd5b506102f06106d736600461235f565b6113b1565b3480156106e7575f80fd5b5061034d6106f6366004612396565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561072b575f80fd5b5061034d60105481565b348015610740575f80fd5b506102c161074f366004612344565b60166020525f908152604090205460ff1681565b34801561076e575f80fd5b5061034d600a5481565b348015610783575f80fd5b5061034d600f5481565b348015610798575f80fd5b506102c161141b565b3480156107ac575f80fd5b506102f06107bb366004612344565b611434565b3480156107cb575f80fd5b506102f06107da366004612344565b611485565b3480156107ea575f80fd5b50600754610325906001600160a01b031681565b348015610809575f80fd5b5061034d600b5481565b606060038054610822906123c2565b80601f016020809104026020016040519081016040528092919081815260200182805461084e906123c2565b80156108995780601f1061087057610100808354040283529160200191610899565b820191905f5260205f20905b81548152906001019060200180831161087c57829003601f168201915b5050505050905090565b5f6108af3384846114fe565b5060015b92915050565b6108c1611621565b600f8190556101f48111156108d4575f80fd5b6040518181527fa872edbd15308577c98aad0962f729a1875f28e00ab28cba83ab55653ad3d1c3906020015b60405180910390a150565b5f610917848484611681565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156109a05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6109ad85338584036114fe565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916108af9185906109ee90869061240e565b6114fe565b6109fb611621565b600c805461ffff19166101009315159390930260ff191692909217901515179055565b610a26611621565b612710610a3260025490565b610a3d906032612421565b610a479190612438565b811015610aa25760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610997565b60055460ff16610ab390600a612537565b610abd9082612421565b600b556040518181527f1730415ef59f304dd1da6ed28821f819b979f6efbab42c44aebefaa4b7b5131e90602001610900565b610af8611621565b610b015f611de0565b565b610b0b611621565b60108190556101f4811115610b1e575f80fd5b6040518181527fe1435708d333edbd00af16b969ad0814c8a957a37fefc22afda088dfebec2cd090602001610900565b606060048054610822906123c2565b610b65611621565b6006546001600160a01b0390811690831603610be95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610997565b610bf38282611e39565b604051811515906001600160a01b038416907f6fd08642eb227264836bd314a2faad34ea890d67a077763e0809e9acd2aa892d905f90a35050565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610caf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610997565b610cbc33858584036114fe565b5060019392505050565b5f6108af338484611681565b610cda611621565b612710610ce660025490565b610cf190600a612421565b610cfb9190612438565b811015610d5c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610997565b60055460ff16610d6d90600a612537565b610d779082612421565b6009556040518181527f93f578c61e9ff613008cec299dd781e522b70349dcd321ca43de1c00d6778ea490602001610900565b5f610db3611621565b620186a0610dc060025490565b610dcb906001612421565b610dd59190612438565b821015610e425760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610997565b612710610e4e60025490565b610e59906064612421565b610e639190612438565b821115610ecd5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610997565b600a8290556040518281527f3bd8f1497f38289f05933d46fadc4ebe49ab69ae55fb2cc2efe549e15bb73cf69060200160405180910390a1506001919050565b610f15611621565b600c54610100900460ff1615610f6d5760405162461bcd60e51b815260206004820152601960248201527f74726164696e6720697320616c726561647920616374697665000000000000006044820152606401610997565b610f9b307f00000000000000000000000000000000000000000000000000000000000000006109ee60025490565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101b9190612545565b6001600160a01b031663c9c65396307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611086573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110aa9190612545565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156110f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111189190612545565b600680546001600160a01b0319166001600160a01b039290921691821790556111429060016113b1565b600654611159906001600160a01b03166001611e39565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71947306111a8306001600160a01b03165f9081526020819052604090205490565b5f806111c26005546001600160a01b036101009091041690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611228573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061124d9190612560565b505060065460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f196024830152909116915063095ea7b3906044016020604051808303815f875af11580156112c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e4919061258b565b50600c805462ffff00191662010100179055565b611300611621565b600c8054821515620100000262ff0000199091161790556040517f0a02a9777cf03eb2f9c8a2400ac5f4142480e5844e543d81cf6f03416519077d9061090090831515815260200190565b611353611621565b6001600160a01b0382165f81815260156020908152604091829020805460ff191685151590811790915591519182527f9cc19e08ba758837142b0e92d33f07d6494311434625fa20b5cfc51195abab61910160405180910390a25050565b6113b9611621565b6001600160a01b0382165f81815260166020908152604091829020805460ff19168515159081179091558251938452908301527f7f654cd58ed27e5f937ca593d4b7b6c2712dd47aae3a8980c67dddf81430257a910160405180910390a15050565b5f611424611621565b50600e805460ff19169055600190565b61143c611621565b600880546001600160a01b0319166001600160a01b0383169081179091556040517fc314153aca90d62d1eb1c8798d85eb9eb192a82c4775f818897bec6858c54b26905f90a250565b61148d611621565b6001600160a01b0381166114f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610997565b6114fb81611de0565b50565b6001600160a01b0383166115605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610997565b6001600160a01b0382166115c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610997565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03610100909104163314610b015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610997565b6001600160a01b0383166116a75760405162461bcd60e51b8152600401610997906125a6565b6001600160a01b0382166116cd5760405162461bcd60e51b8152600401610997906125eb565b805f036116e4576116df83835f611e8c565b505050565b600c5460ff1615611b75576005546001600160a01b03848116610100909204161480159061172557506005546001600160a01b038381166101009092041614155b801561173957506001600160a01b03821615155b801561175057506001600160a01b03821661dead14155b80156117665750600754600160a01b900460ff16155b15611b7557600c54610100900460ff166117fc576001600160a01b0383165f9081526015602052604090205460ff16806117b757506001600160a01b0382165f9081526015602052604090205460ff165b6117fc5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610997565b600e5460ff1615611922576005546001600160a01b03838116610100909204161480159061185c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561187657506006546001600160a01b03838116911614155b1561192257325f908152600d602052604090205443116119105760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610997565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526017602052604090205460ff16801561196157506001600160a01b0382165f9081526016602052604090205460ff16155b15611a3e576009548111156119d05760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610997565b600b546001600160a01b0383165f908152602081905260409020546119f5908361240e565b1115611a395760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610997565b611b75565b6001600160a01b0382165f9081526017602052604090205460ff168015611a7d57506001600160a01b0383165f9081526016602052604090205460ff16155b15611aed57600954811115611a395760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610997565b6001600160a01b0382165f9081526016602052604090205460ff16611b7557600b546001600160a01b0383165f90815260208190526040902054611b31908361240e565b1115611b755760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610997565b305f90815260208190526040902054600a5481108015908190611ba05750600c5462010000900460ff165b8015611bb65750600754600160a01b900460ff16155b8015611bda57506001600160a01b0385165f9081526017602052604090205460ff16155b8015611bfe57506001600160a01b0385165f9081526015602052604090205460ff16155b8015611c2257506001600160a01b0384165f9081526015602052604090205460ff16155b8015611c315750601254601454115b15611c6e576007805460ff60a01b1916600160a01b179055601154611c6090611c5b908490611fdf565b611ff6565b6007805460ff60a01b191690555b6007546001600160a01b0386165f9081526015602052604090205460ff600160a01b909204821615911680611cba57506001600160a01b0385165f9081526015602052604090205460ff165b15611cc257505f5b5f8115611d9b576001600160a01b0386165f9081526017602052604090205460ff168015611cf157505f601054115b15611d1e57611d17612710611d116010548861205690919063ffffffff16565b90612061565b9050611d7d565b6001600160a01b0387165f9081526017602052604090205460ff168015611d4657505f600f54115b15611d7d57611d66612710611d11600f548861205690919063ffffffff16565b601480549192505f611d778361262e565b91905055505b8015611d8e57611d8e873083611e8c565b611d988186612646565b94505b611da6878787611e8c565b60135460145410158015611dbc5750600c5460ff165b15611dd757600c805460ff191690556101f4600f8190556010555b50505050505050565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f81815260176020526040808220805460ff191685151590811790915590519092917f6fd08642eb227264836bd314a2faad34ea890d67a077763e0809e9acd2aa892d91a35050565b6001600160a01b038316611eb25760405162461bcd60e51b8152600401610997906125a6565b6001600160a01b038216611ed85760405162461bcd60e51b8152600401610997906125eb565b6001600160a01b0383165f9081526020819052604090205481811015611f4f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610997565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611f8590849061240e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fd191815260200190565b60405180910390a350505050565b5f818311611fed5782611fef565b815b9392505050565b5f815f03612002575050565b8161200c8161206c565b60085460405147916001600160a01b03169082905f81818185875af1925050503d805f8114611dd7576040519150601f19603f3d011682016040523d82523d5f602084013e611dd7565b5f611fef8284612421565b5f611fef8284612438565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061209f5761209f612659565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561211b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213f9190612545565b8160018151811061215257612152612659565b60200260200101906001600160a01b031690816001600160a01b03168152505061219d307f0000000000000000000000000000000000000000000000000000000000000000846114fe565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906121f19085905f9086903090429060040161266d565b5f604051808303815f87803b158015612208575f80fd5b505af115801561221a573d5f803e3d5ffd5b505050505050565b5f6020808352835180828501525f5b8181101561224d57858101830151858201604001528201612231565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114fb575f80fd5b5f8060408385031215612292575f80fd5b823561229d8161226d565b946020939093013593505050565b5f602082840312156122bb575f80fd5b5035919050565b5f805f606084860312156122d4575f80fd5b83356122df8161226d565b925060208401356122ef8161226d565b929592945050506040919091013590565b80151581146114fb575f80fd5b5f806040838503121561231e575f80fd5b823561232981612300565b9150602083013561233981612300565b809150509250929050565b5f60208284031215612354575f80fd5b8135611fef8161226d565b5f8060408385031215612370575f80fd5b82356123298161226d565b5f6020828403121561238b575f80fd5b8135611fef81612300565b5f80604083850312156123a7575f80fd5b82356123b28161226d565b915060208301356123398161226d565b600181811c908216806123d657607f821691505b6020821081036123f457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108b3576108b36123fa565b80820281158282048414176108b3576108b36123fa565b5f8261245257634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b8085111561249157815f1904821115612477576124776123fa565b8085161561248457918102915b93841c939080029061245c565b509250929050565b5f826124a7575060016108b3565b816124b357505f6108b3565b81600181146124c957600281146124d3576124ef565b60019150506108b3565b60ff8411156124e4576124e46123fa565b50506001821b6108b3565b5060208310610133831016604e8410600b8410161715612512575081810a6108b3565b61251c8383612457565b805f190482111561252f5761252f6123fa565b029392505050565b5f611fef60ff841683612499565b5f60208284031215612555575f80fd5b8151611fef8161226d565b5f805f60608486031215612572575f80fd5b8351925060208401519150604084015190509250925092565b5f6020828403121561259b575f80fd5b8151611fef81612300565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f6001820161263f5761263f6123fa565b5060010190565b818103818111156108b3576108b36123fa565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156126bb5784516001600160a01b031683529383019391830191600101612696565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220741d411b56e17fcbd4f42818c3cfd50c45627be54ce362a3178e3227915d6d0d64736f6c6343000814003300000000000000000000000034fd543115aae04d0f670c06baab6f33bdded26c

Deployed Bytecode

0x60806040526004361061026d575f3560e01c8063a457c2d71161014a578063d63cad22116100be578063e4748b9e11610078578063e4748b9e14610778578063e884f2601461078d578063ee5ecc89146107a1578063f2fde38b146107c0578063f887ea40146107df578063f8b45b05146107fe575f80fd5b8063d63cad221461069e578063db9855e8146106bd578063dd62ed3e146106dc578063e0f3ccf514610720578063e1bc339414610735578063e2f4560514610763575f80fd5b8063bbc0c7421161010f578063bbc0c74214610616578063c3f70b5214610634578063c81d924614610649578063c876d0b91461065e578063c9567bf914610677578063cfb4357b1461067f575f80fd5b8063a457c2d71461056c578063a9059cbb1461058b578063ab5a1887146105aa578063afa4f3b2146105c9578063b62496f5146105e8575f80fd5b80634fbee193116101e1578063715018a6116101a6578063715018a6146104cf57806373a94292146104e35780638b4cee08146104f85780638da5cb5b1461051757806395d89b41146105395780639a7a23d61461054d575f80fd5b80634fbee193146104115780635d0044ca1461044857806368018226146104675780636ddd17131461047c57806370a082311461049b575f80fd5b806323b872dd1161023257806323b872dd1461035b578063313ce5671461037a578063395093511461039b57806343668e6d146103ba57806349bd5a5e146103d95780634a62bb65146103f8575f80fd5b806306fdde0314610278578063095ea7b3146102a25780630cc835a3146102d15780631694505e146102f257806318160ddd1461033d575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028c610813565b6040516102999190612222565b60405180910390f35b3480156102ad575f80fd5b506102c16102bc366004612281565b6108a3565b6040519015158152602001610299565b3480156102dc575f80fd5b506102f06102eb3660046122ab565b6108b9565b005b3480156102fd575f80fd5b506103257f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610299565b348015610348575f80fd5b506002545b604051908152602001610299565b348015610366575f80fd5b506102c16103753660046122c2565b61090b565b348015610385575f80fd5b5060055460405160ff9091168152602001610299565b3480156103a6575f80fd5b506102c16103b5366004612281565b6109b8565b3480156103c5575f80fd5b506102f06103d436600461230d565b6109f3565b3480156103e4575f80fd5b50600654610325906001600160a01b031681565b348015610403575f80fd5b50600c546102c19060ff1681565b34801561041c575f80fd5b506102c161042b366004612344565b6001600160a01b03165f9081526015602052604090205460ff1690565b348015610453575f80fd5b506102f06104623660046122ab565b610a1e565b348015610472575f80fd5b5061034d60135481565b348015610487575f80fd5b50600c546102c19062010000900460ff1681565b3480156104a6575f80fd5b5061034d6104b5366004612344565b6001600160a01b03165f9081526020819052604090205490565b3480156104da575f80fd5b506102f0610af0565b3480156104ee575f80fd5b5061034d60145481565b348015610503575f80fd5b506102f06105123660046122ab565b610b03565b348015610522575f80fd5b5060055461010090046001600160a01b0316610325565b348015610544575f80fd5b5061028c610b4e565b348015610558575f80fd5b506102f061056736600461235f565b610b5d565b348015610577575f80fd5b506102c1610586366004612281565b610c2e565b348015610596575f80fd5b506102c16105a5366004612281565b610cc6565b3480156105b5575f80fd5b506102f06105c43660046122ab565b610cd2565b3480156105d4575f80fd5b506102c16105e33660046122ab565b610daa565b3480156105f3575f80fd5b506102c1610602366004612344565b60176020525f908152604090205460ff1681565b348015610621575f80fd5b50600c546102c190610100900460ff1681565b34801561063f575f80fd5b5061034d60095481565b348015610654575f80fd5b5061034d60125481565b348015610669575f80fd5b50600e546102c19060ff1681565b6102f0610f0d565b34801561068a575f80fd5b506102f061069936600461237b565b6112f8565b3480156106a9575f80fd5b506102f06106b836600461235f565b61134b565b3480156106c8575f80fd5b506102f06106d736600461235f565b6113b1565b3480156106e7575f80fd5b5061034d6106f6366004612396565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561072b575f80fd5b5061034d60105481565b348015610740575f80fd5b506102c161074f366004612344565b60166020525f908152604090205460ff1681565b34801561076e575f80fd5b5061034d600a5481565b348015610783575f80fd5b5061034d600f5481565b348015610798575f80fd5b506102c161141b565b3480156107ac575f80fd5b506102f06107bb366004612344565b611434565b3480156107cb575f80fd5b506102f06107da366004612344565b611485565b3480156107ea575f80fd5b50600754610325906001600160a01b031681565b348015610809575f80fd5b5061034d600b5481565b606060038054610822906123c2565b80601f016020809104026020016040519081016040528092919081815260200182805461084e906123c2565b80156108995780601f1061087057610100808354040283529160200191610899565b820191905f5260205f20905b81548152906001019060200180831161087c57829003601f168201915b5050505050905090565b5f6108af3384846114fe565b5060015b92915050565b6108c1611621565b600f8190556101f48111156108d4575f80fd5b6040518181527fa872edbd15308577c98aad0962f729a1875f28e00ab28cba83ab55653ad3d1c3906020015b60405180910390a150565b5f610917848484611681565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156109a05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6109ad85338584036114fe565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916108af9185906109ee90869061240e565b6114fe565b6109fb611621565b600c805461ffff19166101009315159390930260ff191692909217901515179055565b610a26611621565b612710610a3260025490565b610a3d906032612421565b610a479190612438565b811015610aa25760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610997565b60055460ff16610ab390600a612537565b610abd9082612421565b600b556040518181527f1730415ef59f304dd1da6ed28821f819b979f6efbab42c44aebefaa4b7b5131e90602001610900565b610af8611621565b610b015f611de0565b565b610b0b611621565b60108190556101f4811115610b1e575f80fd5b6040518181527fe1435708d333edbd00af16b969ad0814c8a957a37fefc22afda088dfebec2cd090602001610900565b606060048054610822906123c2565b610b65611621565b6006546001600160a01b0390811690831603610be95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610997565b610bf38282611e39565b604051811515906001600160a01b038416907f6fd08642eb227264836bd314a2faad34ea890d67a077763e0809e9acd2aa892d905f90a35050565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610caf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610997565b610cbc33858584036114fe565b5060019392505050565b5f6108af338484611681565b610cda611621565b612710610ce660025490565b610cf190600a612421565b610cfb9190612438565b811015610d5c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610997565b60055460ff16610d6d90600a612537565b610d779082612421565b6009556040518181527f93f578c61e9ff613008cec299dd781e522b70349dcd321ca43de1c00d6778ea490602001610900565b5f610db3611621565b620186a0610dc060025490565b610dcb906001612421565b610dd59190612438565b821015610e425760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610997565b612710610e4e60025490565b610e59906064612421565b610e639190612438565b821115610ecd5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610997565b600a8290556040518281527f3bd8f1497f38289f05933d46fadc4ebe49ab69ae55fb2cc2efe549e15bb73cf69060200160405180910390a1506001919050565b610f15611621565b600c54610100900460ff1615610f6d5760405162461bcd60e51b815260206004820152601960248201527f74726164696e6720697320616c726561647920616374697665000000000000006044820152606401610997565b610f9b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6109ee60025490565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101b9190612545565b6001600160a01b031663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611086573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110aa9190612545565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156110f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111189190612545565b600680546001600160a01b0319166001600160a01b039290921691821790556111429060016113b1565b600654611159906001600160a01b03166001611e39565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d71947306111a8306001600160a01b03165f9081526020819052604090205490565b5f806111c26005546001600160a01b036101009091041690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611228573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061124d9190612560565b505060065460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d811660048301525f196024830152909116915063095ea7b3906044016020604051808303815f875af11580156112c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e4919061258b565b50600c805462ffff00191662010100179055565b611300611621565b600c8054821515620100000262ff0000199091161790556040517f0a02a9777cf03eb2f9c8a2400ac5f4142480e5844e543d81cf6f03416519077d9061090090831515815260200190565b611353611621565b6001600160a01b0382165f81815260156020908152604091829020805460ff191685151590811790915591519182527f9cc19e08ba758837142b0e92d33f07d6494311434625fa20b5cfc51195abab61910160405180910390a25050565b6113b9611621565b6001600160a01b0382165f81815260166020908152604091829020805460ff19168515159081179091558251938452908301527f7f654cd58ed27e5f937ca593d4b7b6c2712dd47aae3a8980c67dddf81430257a910160405180910390a15050565b5f611424611621565b50600e805460ff19169055600190565b61143c611621565b600880546001600160a01b0319166001600160a01b0383169081179091556040517fc314153aca90d62d1eb1c8798d85eb9eb192a82c4775f818897bec6858c54b26905f90a250565b61148d611621565b6001600160a01b0381166114f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610997565b6114fb81611de0565b50565b6001600160a01b0383166115605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610997565b6001600160a01b0382166115c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610997565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03610100909104163314610b015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610997565b6001600160a01b0383166116a75760405162461bcd60e51b8152600401610997906125a6565b6001600160a01b0382166116cd5760405162461bcd60e51b8152600401610997906125eb565b805f036116e4576116df83835f611e8c565b505050565b600c5460ff1615611b75576005546001600160a01b03848116610100909204161480159061172557506005546001600160a01b038381166101009092041614155b801561173957506001600160a01b03821615155b801561175057506001600160a01b03821661dead14155b80156117665750600754600160a01b900460ff16155b15611b7557600c54610100900460ff166117fc576001600160a01b0383165f9081526015602052604090205460ff16806117b757506001600160a01b0382165f9081526015602052604090205460ff165b6117fc5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610997565b600e5460ff1615611922576005546001600160a01b03838116610100909204161480159061185c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561187657506006546001600160a01b03838116911614155b1561192257325f908152600d602052604090205443116119105760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610997565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526017602052604090205460ff16801561196157506001600160a01b0382165f9081526016602052604090205460ff16155b15611a3e576009548111156119d05760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610997565b600b546001600160a01b0383165f908152602081905260409020546119f5908361240e565b1115611a395760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610997565b611b75565b6001600160a01b0382165f9081526017602052604090205460ff168015611a7d57506001600160a01b0383165f9081526016602052604090205460ff16155b15611aed57600954811115611a395760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610997565b6001600160a01b0382165f9081526016602052604090205460ff16611b7557600b546001600160a01b0383165f90815260208190526040902054611b31908361240e565b1115611b755760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610997565b305f90815260208190526040902054600a5481108015908190611ba05750600c5462010000900460ff165b8015611bb65750600754600160a01b900460ff16155b8015611bda57506001600160a01b0385165f9081526017602052604090205460ff16155b8015611bfe57506001600160a01b0385165f9081526015602052604090205460ff16155b8015611c2257506001600160a01b0384165f9081526015602052604090205460ff16155b8015611c315750601254601454115b15611c6e576007805460ff60a01b1916600160a01b179055601154611c6090611c5b908490611fdf565b611ff6565b6007805460ff60a01b191690555b6007546001600160a01b0386165f9081526015602052604090205460ff600160a01b909204821615911680611cba57506001600160a01b0385165f9081526015602052604090205460ff165b15611cc257505f5b5f8115611d9b576001600160a01b0386165f9081526017602052604090205460ff168015611cf157505f601054115b15611d1e57611d17612710611d116010548861205690919063ffffffff16565b90612061565b9050611d7d565b6001600160a01b0387165f9081526017602052604090205460ff168015611d4657505f600f54115b15611d7d57611d66612710611d11600f548861205690919063ffffffff16565b601480549192505f611d778361262e565b91905055505b8015611d8e57611d8e873083611e8c565b611d988186612646565b94505b611da6878787611e8c565b60135460145410158015611dbc5750600c5460ff165b15611dd757600c805460ff191690556101f4600f8190556010555b50505050505050565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f81815260176020526040808220805460ff191685151590811790915590519092917f6fd08642eb227264836bd314a2faad34ea890d67a077763e0809e9acd2aa892d91a35050565b6001600160a01b038316611eb25760405162461bcd60e51b8152600401610997906125a6565b6001600160a01b038216611ed85760405162461bcd60e51b8152600401610997906125eb565b6001600160a01b0383165f9081526020819052604090205481811015611f4f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610997565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611f8590849061240e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fd191815260200190565b60405180910390a350505050565b5f818311611fed5782611fef565b815b9392505050565b5f815f03612002575050565b8161200c8161206c565b60085460405147916001600160a01b03169082905f81818185875af1925050503d805f8114611dd7576040519150601f19603f3d011682016040523d82523d5f602084013e611dd7565b5f611fef8284612421565b5f611fef8284612438565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061209f5761209f612659565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561211b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213f9190612545565b8160018151811061215257612152612659565b60200260200101906001600160a01b031690816001600160a01b03168152505061219d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114fe565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906121f19085905f9086903090429060040161266d565b5f604051808303815f87803b158015612208575f80fd5b505af115801561221a573d5f803e3d5ffd5b505050505050565b5f6020808352835180828501525f5b8181101561224d57858101830151858201604001528201612231565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114fb575f80fd5b5f8060408385031215612292575f80fd5b823561229d8161226d565b946020939093013593505050565b5f602082840312156122bb575f80fd5b5035919050565b5f805f606084860312156122d4575f80fd5b83356122df8161226d565b925060208401356122ef8161226d565b929592945050506040919091013590565b80151581146114fb575f80fd5b5f806040838503121561231e575f80fd5b823561232981612300565b9150602083013561233981612300565b809150509250929050565b5f60208284031215612354575f80fd5b8135611fef8161226d565b5f8060408385031215612370575f80fd5b82356123298161226d565b5f6020828403121561238b575f80fd5b8135611fef81612300565b5f80604083850312156123a7575f80fd5b82356123b28161226d565b915060208301356123398161226d565b600181811c908216806123d657607f821691505b6020821081036123f457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108b3576108b36123fa565b80820281158282048414176108b3576108b36123fa565b5f8261245257634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b8085111561249157815f1904821115612477576124776123fa565b8085161561248457918102915b93841c939080029061245c565b509250929050565b5f826124a7575060016108b3565b816124b357505f6108b3565b81600181146124c957600281146124d3576124ef565b60019150506108b3565b60ff8411156124e4576124e46123fa565b50506001821b6108b3565b5060208310610133831016604e8410600b8410161715612512575081810a6108b3565b61251c8383612457565b805f190482111561252f5761252f6123fa565b029392505050565b5f611fef60ff841683612499565b5f60208284031215612555575f80fd5b8151611fef8161226d565b5f805f60608486031215612572575f80fd5b8351925060208401519150604084015190509250925092565b5f6020828403121561259b575f80fd5b8151611fef81612300565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f6001820161263f5761263f6123fa565b5060010190565b818103818111156108b3576108b36123fa565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156126bb5784516001600160a01b031683529383019391830191600101612696565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220741d411b56e17fcbd4f42818c3cfd50c45627be54ce362a3178e3227915d6d0d64736f6c63430008140033

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

00000000000000000000000034fd543115aae04d0f670c06baab6f33bdded26c

-----Decoded View---------------
Arg [0] : _operationsWallet (address): 0x34FD543115aae04d0F670C06baaB6F33BDded26C

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


Deployed Bytecode Sourcemap

28559:12785:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13674:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14661:194;;;;;;;;;;-1:-1:-1;14661:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;14661:194:0;1023:187:1;40533:193:0;;;;;;;;;;-1:-1:-1;40533:193:0;;;;;:::i;:::-;;:::i;:::-;;28637:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1590:32:1;;;1572:51;;1560:2;1545:18;28637:51:0;1400:229:1;14002:108:0;;;;;;;;;;-1:-1:-1;14090:12:0;;14002:108;;;1780:25:1;;;1768:2;1753:18;14002:108:0;1634:177:1;14863:529:0;;;;;;;;;;-1:-1:-1;14863:529:0;;;;;:::i;:::-;;:::i;13894:100::-;;;;;;;;;;-1:-1:-1;13977:9:0;;13894:100;;13977:9;;;;2419:36:1;;2407:2;2392:18;13894:100:0;2277:184:1;15400:290:0;;;;;;;;;;-1:-1:-1;15400:290:0;;;;;:::i;:::-;;:::i;32799:143::-;;;;;;;;;;-1:-1:-1;32799:143:0;;;;;:::i;:::-;;:::i;28695:28::-;;;;;;;;;;-1:-1:-1;28695:28:0;;;;-1:-1:-1;;;;;28695:28:0;;;28983:33;;;;;;;;;;-1:-1:-1;28983:33:0;;;;;;;;33299:126;;;;;;;;;;-1:-1:-1;33299:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;33389:28:0;33365:4;33389:28;;;:19;:28;;;;;;;;;33299:126;39790:327;;;;;;;;;;-1:-1:-1;39790:327:0;;;;;:::i;:::-;;:::i;29365:35::-;;;;;;;;;;;;;;;;29063:31;;;;;;;;;;-1:-1:-1;29063:31:0;;;;;;;;;;;14118:143;;;;;;;;;;-1:-1:-1;14118:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;14235:18:0;14208:7;14235:18;;;;;;;;;;;;14118:143;20514:103;;;;;;;;;;;;;:::i;29407:29::-;;;;;;;;;;;;;;;;40734:197;;;;;;;;;;-1:-1:-1;40734:197:0;;;;;:::i;:::-;;:::i;19873:87::-;;;;;;;;;;-1:-1:-1;19946:6:0;;;;;-1:-1:-1;;;;;19946:6:0;19873:87;;13782:104;;;;;;;;;;;;;:::i;38522:353::-;;;;;;;;;;-1:-1:-1;38522:353:0;;;;;:::i;:::-;;:::i;15698:475::-;;;;;;;;;;-1:-1:-1;15698:475:0;;;;;:::i;:::-;;:::i;14269:200::-;;;;;;;;;;-1:-1:-1;14269:200:0;;;;;:::i;:::-;;:::i;39435:347::-;;;;;;;;;;-1:-1:-1;39435:347:0;;;;;:::i;:::-;;:::i;38883:544::-;;;;;;;;;;-1:-1:-1;38883:544:0;;;;;:::i;:::-;;:::i;29568:57::-;;;;;;;;;;-1:-1:-1;29568:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29023:33;;;;;;;;;;-1:-1:-1;29023:33:0;;;;;;;;;;;28874:29;;;;;;;;;;;;;;;;29320:38;;;;;;;;;;;;;;;;29170:39;;;;;;;;;;-1:-1:-1;29170:39:0;;;;;;;;31885:738;;;:::i;40365:160::-;;;;;;;;;;-1:-1:-1;40365:160:0;;;;;:::i;:::-;;:::i;40939:197::-;;;;;;;;;;-1:-1:-1;40939:197:0;;;;;:::i;:::-;;:::i;40125:232::-;;;;;;;;;;-1:-1:-1;40125:232:0;;;;;:::i;:::-;;:::i;14477:176::-;;;;;;;;;;-1:-1:-1;14477:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;14618:18:0;;;14591:7;14618:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14477:176;29247:23;;;;;;;;;;;;;;;;29504:57;;;;;;;;;;-1:-1:-1;29504:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28910:33;;;;;;;;;;;;;;;;29218:22;;;;;;;;;;;;;;;;32950:135;;;;;;;;;;;;;:::i;41144:197::-;;;;;;;;;;-1:-1:-1;41144:197:0;;;;;:::i;:::-;;:::i;20772:238::-;;;;;;;;;;-1:-1:-1;20772:238:0;;;;;:::i;:::-;;:::i;28730:66::-;;;;;;;;;;-1:-1:-1;28730:66:0;;;;-1:-1:-1;;;;;28730:66:0;;;28950:24;;;;;;;;;;;;;;;;13674:100;13728:13;13761:5;13754:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13674:100;:::o;14661:194::-;14769:4;14786:39;12996:10;14809:7;14818:6;14786:8;:39::i;:::-;-1:-1:-1;14843:4:0;14661:194;;;;;:::o;40533:193::-;19759:13;:11;:13::i;:::-;40608:7:::1;:26:::0;;;40664:3:::1;40653:14:::0;::::1;;40645:23;;;::::0;::::1;;40684:34;::::0;1780:25:1;;;40684:34:0::1;::::0;1768:2:1;1753:18;40684:34:0::1;;;;;;;;40533:193:::0;:::o;14863:529::-;15003:4;15020:36;15030:6;15038:9;15049:6;15020:9;:36::i;:::-;-1:-1:-1;;;;;15096:19:0;;15069:24;15096:19;;;:11;:19;;;;;;;;12996:10;15096:33;;;;;;;;15162:26;;;;15140:116;;;;-1:-1:-1;;;15140:116:0;;5043:2:1;15140:116:0;;;5025:21:1;5082:2;5062:18;;;5055:30;5121:34;5101:18;;;5094:62;-1:-1:-1;;;5172:18:1;;;5165:38;5220:19;;15140:116:0;;;;;;;;;15292:57;15301:6;12996:10;15342:6;15323:16;:25;15292:8;:57::i;:::-;-1:-1:-1;15380:4:0;;14863:529;-1:-1:-1;;;;14863:529:0:o;15400:290::-;12996:10;15513:4;15602:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15602:34:0;;;;;;;;;;15513:4;;15530:130;;15580:7;;15602:47;;15639:10;;15602:47;:::i;:::-;15530:8;:130::i;32799:143::-;19759:13;:11;:13::i;:::-;32878::::1;:22:::0;;-1:-1:-1;;32911:23:0;32878:22:::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;32911:23:0;;;;;;::::1;;;::::0;;32799:143::o;39790:327::-;19759:13;:11;:13::i;:::-;39930:6:::1;39908:13;14090:12:::0;;;14002:108;39908:13:::1;:18;::::0;39924:2:::1;39908:18;:::i;:::-;39907:29;;;;:::i;:::-;39888:14;:49;;39866:135;;;::::0;-1:-1:-1;;;39866:135:0;;6109:2:1;39866:135:0::1;::::0;::::1;6091:21:1::0;6148:2;6128:18;;;6121:30;6187:34;6167:18;;;6160:62;-1:-1:-1;;;6238:18:1;;;6231:34;6282:19;;39866:135:0::1;5907:400:1::0;39866:135:0::1;13977:9:::0;;;;40042:16:::1;::::0;:2:::1;:16;:::i;:::-;40024:35;::::0;:14;:35:::1;:::i;:::-;40012:9;:47:::0;40075:34:::1;::::0;1780:25:1;;;40075:34:0::1;::::0;1768:2:1;1753:18;40075:34:0::1;1634:177:1::0;20514:103:0;19759:13;:11;:13::i;:::-;20579:30:::1;20606:1;20579:18;:30::i;:::-;20514:103::o:0;40734:197::-;19759:13;:11;:13::i;:::-;40810:8:::1;:27:::0;;;40868:3:::1;40856:15:::0;::::1;;40848:24;;;::::0;::::1;;40888:35;::::0;1780:25:1;;;40888:35:0::1;::::0;1768:2:1;1753:18;40888:35:0::1;1634:177:1::0;13782:104:0;13838:13;13871:7;13864:14;;;;;:::i;38522:353::-;19759:13;:11;:13::i;:::-;38647::::1;::::0;-1:-1:-1;;;;;38647:13:0;;::::1;38639:21:::0;;::::1;::::0;38617:128:::1;;;::::0;-1:-1:-1;;;38617:128:0;;7897:2:1;38617:128:0::1;::::0;::::1;7879:21:1::0;7936:2;7916:18;;;7909:30;7975:34;7955:18;;;7948:62;8046:27;8026:18;;;8019:55;8091:19;;38617:128:0::1;7695:421:1::0;38617:128:0::1;38756:45;38785:4;38791:9;38756:28;:45::i;:::-;38817:50;::::0;;::::1;;::::0;-1:-1:-1;;;;;38817:50:0;::::1;::::0;::::1;::::0;;;::::1;38522:353:::0;;:::o;15698:475::-;12996:10;15816:4;15860:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15860:34:0;;;;;;;;;;15927:35;;;;15905:122;;;;-1:-1:-1;;;15905:122:0;;8323:2:1;15905:122:0;;;8305:21:1;8362:2;8342:18;;;8335:30;8401:34;8381:18;;;8374:62;-1:-1:-1;;;8452:18:1;;;8445:35;8497:19;;15905:122:0;8121:401:1;15905:122:0;16063:67;12996:10;16086:7;16114:15;16095:16;:34;16063:8;:67::i;:::-;-1:-1:-1;16161:4:0;;15698:475;-1:-1:-1;;;15698:475:0:o;14269:200::-;14380:4;14397:42;12996:10;14421:9;14432:6;14397:9;:42::i;39435:347::-;19759:13;:11;:13::i;:::-;39580:6:::1;39558:13;14090:12:::0;;;14002:108;39558:13:::1;:18;::::0;39574:2:::1;39558:18;:::i;:::-;39557:29;;;;:::i;:::-;39538:14;:49;;39516:140;;;::::0;-1:-1:-1;;;39516:140:0;;8729:2:1;39516:140:0::1;::::0;::::1;8711:21:1::0;8768:2;8748:18;;;8741:30;8807:34;8787:18;;;8780:62;-1:-1:-1;;;8858:18:1;;;8851:39;8907:19;;39516:140:0::1;8527:405:1::0;39516:140:0::1;13977:9:::0;;;;39702:16:::1;::::0;:2:::1;:16;:::i;:::-;39684:35;::::0;:14;:35:::1;:::i;:::-;39667:14;:52:::0;39735:39:::1;::::0;1780:25:1;;;39735:39:0::1;::::0;1768:2:1;1753:18;39735:39:0::1;1634:177:1::0;38883:544:0;38966:4;19759:13;:11;:13::i;:::-;39045:7:::1;39024:13;14090:12:::0;;;14002:108;39024:13:::1;:17;::::0;39040:1:::1;39024:17;:::i;:::-;39023:29;;;;:::i;:::-;39005:14;:47;;38983:150;;;::::0;-1:-1:-1;;;38983:150:0;;9139:2:1;38983:150:0::1;::::0;::::1;9121:21:1::0;9178:2;9158:18;;;9151:30;9217:34;9197:18;;;9190:62;-1:-1:-1;;;9268:18:1;;;9261:51;9329:19;;38983:150:0::1;8937:417:1::0;38983:150:0::1;39208:6;39185:13;14090:12:::0;;;14002:108;39185:13:::1;:19;::::0;39201:3:::1;39185:19;:::i;:::-;39184:30;;;;:::i;:::-;39166:14;:48;;39144:148;;;::::0;-1:-1:-1;;;39144:148:0;;9561:2:1;39144:148:0::1;::::0;::::1;9543:21:1::0;9600:2;9580:18;;;9573:30;9639:34;9619:18;;;9612:62;-1:-1:-1;;;9690:18:1;;;9683:48;9748:19;;39144:148:0::1;9359:414:1::0;39144:148:0::1;39303:18;:35:::0;;;39354:43:::1;::::0;1780:25:1;;;39354:43:0::1;::::0;1768:2:1;1753:18;39354:43:0::1;;;;;;;-1:-1:-1::0;39415:4:0::1;38883:544:::0;;;:::o;31885:738::-;19759:13;:11;:13::i;:::-;31957::::1;::::0;::::1;::::0;::::1;;;31956:14;31948:51;;;::::0;-1:-1:-1;;;31948:51:0;;9980:2:1;31948:51:0::1;::::0;::::1;9962:21:1::0;10019:2;9999:18;;;9992:30;10058:27;10038:18;;;10031:55;10103:18;;31948:51:0::1;9778:349:1::0;31948:51:0::1;32010:64;32027:4;32042:15;32060:13;14090:12:::0;;;14002:108;32010:64:::1;32119:15;-1:-1:-1::0;;;;;32119:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32101:55:0::1;;32165:4;32172:15;-1:-1:-1::0;;;;;32172:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32101:94;::::0;-1:-1:-1;;;;;;32101:94:0::1;::::0;;;;;;-1:-1:-1;;;;;10618:15:1;;;32101:94:0::1;::::0;::::1;10600:34:1::0;10670:15;;10650:18;;;10643:43;10535:18;;32101:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32085:13;:110:::0;;-1:-1:-1;;;;;;32085:110:0::1;-1:-1:-1::0;;;;;32085:110:0;;;::::1;::::0;;::::1;::::0;;32206:58:::1;::::0;-1:-1:-1;32206:28:0::1;:58::i;:::-;32312:13;::::0;32275:58:::1;::::0;-1:-1:-1;;;;;32312:13:0::1;::::0;32275:28:::1;:58::i;:::-;32344:15;-1:-1:-1::0;;;;;32344:31:0::1;;32383:21;32414:4;32420:24;32438:4;-1:-1:-1::0;;;;;14235:18:0;14208:7;14235:18;;;;;;;;;;;;14118:143;32420:24:::1;32445:1;32447::::0;32449:7:::1;19946:6:::0;;-1:-1:-1;;;;;19946:6:0;;;;;;19873:87;32449:7:::1;32344:129;::::0;::::1;::::0;;;-1:-1:-1;;;;;;32344:129:0;;;-1:-1:-1;;;;;11056:15:1;;;32344:129:0::1;::::0;::::1;11038:34:1::0;11088:18;;;11081:34;;;;11131:18;;;11124:34;;;;11174:18;;;11167:34;11238:15;;;11217:19;;;11210:44;32457:15:0::1;11270:19:1::0;;;11263:35;10972:19;;32344:129:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;32491:13:0::1;::::0;32484:71:::1;::::0;-1:-1:-1;;;32484:71:0;;-1:-1:-1;;;;;32522:15:0::1;11812:32:1::0;;32484:71:0::1;::::0;::::1;11794:51:1::0;-1:-1:-1;;11861:18:1;;;11854:34;32491:13:0;;::::1;::::0;-1:-1:-1;32484:29:0::1;::::0;11767:18:1;;32484:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;32566:11:0::1;:18:::0;;-1:-1:-1;;32595:20:0;;;;;31885:738::o;40365:160::-;19759:13;:11;:13::i;:::-;40441:11:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40441:23:0;;::::1;;::::0;;40480:37:::1;::::0;::::1;::::0;::::1;::::0;40455:9;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;40939:197:0;19759:13;:11;:13::i;:::-;-1:-1:-1;;;;;41028:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:40;;-1:-1:-1;;41028:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41084:44;;1163:41:1;;;41084:44:0::1;::::0;1136:18:1;41084:44:0::1;;;;;;;40939:197:::0;;:::o;40125:232::-;19759:13;:11;:13::i;:::-;-1:-1:-1;;;;;40227:37:0;::::1;;::::0;;;:25:::1;:37;::::0;;;;;;;;:49;;-1:-1:-1;;40227:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40292:57;;12317:51:1;;;12384:18;;;12377:50;40292:57:0::1;::::0;12290:18:1;40292:57:0::1;;;;;;;40125:232:::0;;:::o;32950:135::-;33010:4;19759:13;:11;:13::i;:::-;-1:-1:-1;33027:20:0::1;:28:::0;;-1:-1:-1;;33027:28:0::1;::::0;;;32950:135;:::o;41144:197::-;19759:13;:11;:13::i;:::-;41232:16:::1;:38:::0;;-1:-1:-1;;;;;;41232:38:0::1;-1:-1:-1::0;;;;;41232:38:0;::::1;::::0;;::::1;::::0;;;41286:47:::1;::::0;::::1;::::0;-1:-1:-1;;41286:47:0::1;41144:197:::0;:::o;20772:238::-;19759:13;:11;:13::i;:::-;-1:-1:-1;;;;;20875:22:0;::::1;20853:110;;;::::0;-1:-1:-1;;;20853:110:0;;12640:2:1;20853:110:0::1;::::0;::::1;12622:21:1::0;12679:2;12659:18;;;12652:30;12718:34;12698:18;;;12691:62;-1:-1:-1;;;12769:18:1;;;12762:36;12815:19;;20853:110:0::1;12438:402:1::0;20853:110:0::1;20974:28;20993:8;20974:18;:28::i;:::-;20772:238:::0;:::o;17965:380::-;-1:-1:-1;;;;;18101:19:0;;18093:68;;;;-1:-1:-1;;;18093:68:0;;13047:2:1;18093:68:0;;;13029:21:1;13086:2;13066:18;;;13059:30;13125:34;13105:18;;;13098:62;-1:-1:-1;;;13176:18:1;;;13169:34;13220:19;;18093:68:0;12845:400:1;18093:68:0;-1:-1:-1;;;;;18180:21:0;;18172:68;;;;-1:-1:-1;;;18172:68:0;;13452:2:1;18172:68:0;;;13434:21:1;13491:2;13471:18;;;13464:30;13530:34;13510:18;;;13503:62;-1:-1:-1;;;13581:18:1;;;13574:32;13623:19;;18172:68:0;13250:398:1;18172:68:0;-1:-1:-1;;;;;18253:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18305:32;;1780:25:1;;;18305:32:0;;1753:18:1;18305:32:0;;;;;;;17965:380;;;:::o;20038:132::-;19946:6;;-1:-1:-1;;;;;19946:6:0;;;;;12996:10;20102:23;20094:68;;;;-1:-1:-1;;;20094:68:0;;13855:2:1;20094:68:0;;;13837:21:1;;;13874:18;;;13867:30;13933:34;13913:18;;;13906:62;13985:18;;20094:68:0;13653:356:1;33433:4095:0;-1:-1:-1;;;;;33565:18:0;;33557:68;;;;-1:-1:-1;;;33557:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33644:16:0;;33636:64;;;;-1:-1:-1;;;33636:64:0;;;;;;;:::i;:::-;33717:6;33727:1;33717:11;33713:93;;33745:28;33761:4;33767:2;33771:1;33745:15;:28::i;:::-;33433:4095;;;:::o;33713:93::-;33822:14;;;;33818:2272;;;19946:6;;-1:-1:-1;;;;;33875:15:0;;;19946:6;;;;;33875:15;;;;:49;;-1:-1:-1;19946:6:0;;-1:-1:-1;;;;;33911:13:0;;;19946:6;;;;;33911:13;;33875:49;:86;;;;-1:-1:-1;;;;;;33945:16:0;;;;33875:86;:128;;;;-1:-1:-1;;;;;;33982:21:0;;33996:6;33982:21;;33875:128;:158;;;;-1:-1:-1;34025:8:0;;-1:-1:-1;;;34025:8:0;;;;34024:9;33875:158;33853:2226;;;34073:13;;;;;;;34068:223;;-1:-1:-1;;;;;34145:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;34174:23:0;;;;;;:19;:23;;;;;;;;34145:52;34111:160;;;;-1:-1:-1;;;34111:160:0;;15026:2:1;34111:160:0;;;15008:21:1;15065:2;15045:18;;;15038:30;-1:-1:-1;;;15084:18:1;;;15077:52;15146:18;;34111:160:0;14824:346:1;34111:160:0;34315:20;;;;34311:600;;;19946:6;;-1:-1:-1;;;;;34390:13:0;;;19946:6;;;;;34390:13;;;;:72;;;34446:15;-1:-1:-1;;;;;34432:30:0;:2;-1:-1:-1;;;;;34432:30:0;;;34390:72;:129;;;;-1:-1:-1;34505:13:0;;-1:-1:-1;;;;;34491:28:0;;;34505:13;;34491:28;;34390:129;34360:532;;;34633:9;34608:35;;;;:24;:35;;;;;;34646:12;-1:-1:-1;34570:221:0;;;;-1:-1:-1;;;34570:221:0;;15377:2:1;34570:221:0;;;15359:21:1;15416:2;15396:18;;;15389:30;15455:34;15435:18;;;15428:62;15526:34;15506:18;;;15499:62;-1:-1:-1;;;15577:19:1;;;15570:40;15627:19;;34570:221:0;15175:477:1;34570:221:0;34843:9;34818:35;;;;:24;:35;;;;;34856:12;34818:50;;34360:532;-1:-1:-1;;;;;34985:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;35042:29:0;;;;;;:25;:29;;;;;;;;35041:30;34985:86;34959:1105;;;35158:14;;35148:6;:24;;35114:157;;;;-1:-1:-1;;;35114:157:0;;15859:2:1;35114:157:0;;;15841:21:1;15898:2;15878:18;;;15871:30;15937:34;15917:18;;;15910:62;-1:-1:-1;;;15988:18:1;;;15981:45;16043:19;;35114:157:0;15657:411:1;35114:157:0;35354:9;;-1:-1:-1;;;;;14235:18:0;;14208:7;14235:18;;;;;;;;;;;35328:22;;:6;:22;:::i;:::-;:35;;35294:140;;;;-1:-1:-1;;;35294:140:0;;16275:2:1;35294:140:0;;;16257:21:1;16314:2;16294:18;;;16287:30;-1:-1:-1;;;16333:18:1;;;16326:49;16392:18;;35294:140:0;16073:343:1;35294:140:0;34959:1105;;;-1:-1:-1;;;;;35532:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;35587:31:0;;;;;;:25;:31;;;;;;;;35586:32;35532:86;35506:558;;;35705:14;;35695:6;:24;;35661:158;;;;-1:-1:-1;;;35661:158:0;;16623:2:1;35661:158:0;;;16605:21:1;16662:2;16642:18;;;16635:30;16701:34;16681:18;;;16674:62;-1:-1:-1;;;16752:18:1;;;16745:46;16808:19;;35661:158:0;16421:412:1;35506:558:0;-1:-1:-1;;;;;35850:29:0;;;;;;:25;:29;;;;;;;;35845:219;;35964:9;;-1:-1:-1;;;;;14235:18:0;;14208:7;14235:18;;;;;;;;;;;35938:22;;:6;:22;:::i;:::-;:35;;35904:140;;;;-1:-1:-1;;;35904:140:0;;16275:2:1;35904:140:0;;;16257:21:1;16314:2;16294:18;;;16287:30;-1:-1:-1;;;16333:18:1;;;16326:49;16392:18;;35904:140:0;16073:343:1;35904:140:0;36151:4;36102:28;14235:18;;;;;;;;;;;36209;;36185:42;;;;;;;36258:35;;-1:-1:-1;36282:11:0;;;;;;;36258:35;:61;;;;-1:-1:-1;36311:8:0;;-1:-1:-1;;;36311:8:0;;;;36310:9;36258:61;:110;;;;-1:-1:-1;;;;;;36337:31:0;;;;;;:25;:31;;;;;;;;36336:32;36258:110;:153;;;;-1:-1:-1;;;;;;36386:25:0;;;;;;:19;:25;;;;;;;;36385:26;36258:153;:194;;;;-1:-1:-1;;;;;;36429:23:0;;;;;;:19;:23;;;;;;;;36428:24;36258:194;:242;;;;;36482:18;;36469:10;;:31;36258:242;36240:415;;;36527:8;:15;;-1:-1:-1;;;;36527:15:0;-1:-1:-1;;;36527:15:0;;;36592:18;;36557:55;;36566:45;;36570:20;;36566:3;:45::i;:::-;36557:8;:55::i;:::-;36627:8;:16;;-1:-1:-1;;;;36627:16:0;;;36240:415;36683:8;;-1:-1:-1;;;;;36708:25:0;;36667:12;36708:25;;;:19;:25;;;;;;36683:8;-1:-1:-1;;;36683:8:0;;;;;36682:9;;36708:25;;:52;;-1:-1:-1;;;;;;36737:23:0;;;;;;:19;:23;;;;;;;;36708:52;36704:100;;;-1:-1:-1;36787:5:0;36704:100;36816:12;36849:7;36845:524;;;-1:-1:-1;;;;;36901:29:0;;;;;;:25;:29;;;;;;;;:45;;;;;36945:1;36934:8;;:12;36901:45;36897:323;;;36974:32;36999:6;36974:20;36985:8;;36974:6;:10;;:20;;;;:::i;:::-;:24;;:32::i;:::-;36967:39;;36897:323;;;-1:-1:-1;;;;;37068:31:0;;;;;;:25;:31;;;;;;;;:46;;;;;37113:1;37103:7;;:11;37068:46;37064:156;;;37142:31;37166:6;37142:19;37153:7;;37142:6;:10;;:19;;;;:::i;:31::-;37192:10;:12;;37135:38;;-1:-1:-1;37192:10:0;:12;;;:::i;:::-;;;;;;37064:156;37240:8;;37236:91;;37269:42;37285:4;37299;37306;37269:15;:42::i;:::-;37343:14;37353:4;37343:14;;:::i;:::-;;;36845:524;37381:33;37397:4;37403:2;37407:6;37381:15;:33::i;:::-;37445:15;;37431:10;;:29;;:47;;;;-1:-1:-1;37464:14:0;;;;37431:47;37427:94;;;32690:14;:22;;-1:-1:-1;;32690:22:0;;;32733:3;32723:7;:13;;;32747:8;:14;37427:94;33546:3982;;;;33433:4095;;;:::o;21170:191::-;21263:6;;;-1:-1:-1;;;;;21280:17:0;;;21263:6;21280:17;;;-1:-1:-1;;;;;;21280:17:0;;;;;;21313:40;;21263:6;;;;;;;;21313:40;;21244:16;;21313:40;21233:128;21170:191;:::o;33093:194::-;-1:-1:-1;;;;;33176:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;33176:39:0;;;;;;;;;;33233:46;;33176:39;;:31;33233:46;;;33093:194;;:::o;16181:770::-;-1:-1:-1;;;;;16321:20:0;;16313:70;;;;-1:-1:-1;;;16313:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16402:23:0;;16394:71;;;;-1:-1:-1;;;16394:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16562:17:0;;16538:21;16562:17;;;;;;;;;;;16612:23;;;;16590:111;;;;-1:-1:-1;;;16590:111:0;;17313:2:1;16590:111:0;;;17295:21:1;17352:2;17332:18;;;17325:30;17391:34;17371:18;;;17364:62;-1:-1:-1;;;17442:18:1;;;17435:36;17488:19;;16590:111:0;17111:402:1;16590:111:0;-1:-1:-1;;;;;16737:17:0;;;:9;:17;;;;;;;;;;;16757:22;;;16737:42;;16801:20;;;;;;;;:30;;16773:6;;16737:9;16801:30;;16773:6;;16801:30;:::i;:::-;;;;;;;;16866:9;-1:-1:-1;;;;;16849:35:0;16858:6;-1:-1:-1;;;;;16849:35:0;;16877:6;16849:35;;;;1780:25:1;;1768:2;1753:18;;1634:177;16849:35:0;;;;;;;;16302:649;16181:770;;;:::o;37536:107::-;37593:7;37625:1;37621;:5;37620:15;;37634:1;37620:15;;;37630:1;37620:15;37613:22;37536:107;-1:-1:-1;;;37536:107:0:o;38134:365::-;38187:12;38216:6;38226:1;38216:11;38212:50;;38244:7;38134:365;:::o;38212:50::-;38303:6;38322:36;38303:6;38322:16;:36::i;:::-;38446:16;;38438:53;;38392:21;;-1:-1:-1;;;;;38446:16:0;;38392:21;;38438:53;;;;38392:21;38446:16;38438:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25105:98;25163:7;25190:5;25194:1;25190;:5;:::i;25504:98::-;25562:7;25589:5;25593:1;25589;:5;:::i;37651:475::-;37741:16;;;37755:1;37741:16;;;;;;;;37717:21;;37741:16;;;;;;;;;;-1:-1:-1;37741:16:0;37717:40;;37786:4;37768;37773:1;37768:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;37768:23:0;;;-1:-1:-1;;;;;37768:23:0;;;;;37812:15;-1:-1:-1;;;;;37812:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37802:4;37807:1;37802:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;37802:32:0;;;-1:-1:-1;;;;;37802:32:0;;;;;37847:62;37864:4;37879:15;37897:11;37847:8;:62::i;:::-;37922:196;;-1:-1:-1;;;37922:196:0;;-1:-1:-1;;;;;37922:15:0;:66;;;;:196;;38003:11;;38029:1;;38045:4;;38072;;38092:15;;37922:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37706:420;37651:475;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1816:456::-;1893:6;1901;1909;1962:2;1950:9;1941:7;1937:23;1933:32;1930:52;;;1978:1;1975;1968:12;1930:52;2017:9;2004:23;2036:31;2061:5;2036:31;:::i;:::-;2086:5;-1:-1:-1;2143:2:1;2128:18;;2115:32;2156:33;2115:32;2156:33;:::i;:::-;1816:456;;2208:7;;-1:-1:-1;;;2262:2:1;2247:18;;;;2234:32;;1816:456::o;2466:118::-;2552:5;2545:13;2538:21;2531:5;2528:32;2518:60;;2574:1;2571;2564:12;2589:376;2651:6;2659;2712:2;2700:9;2691:7;2687:23;2683:32;2680:52;;;2728:1;2725;2718:12;2680:52;2767:9;2754:23;2786:28;2808:5;2786:28;:::i;:::-;2833:5;-1:-1:-1;2890:2:1;2875:18;;2862:32;2903:30;2862:32;2903:30;:::i;:::-;2952:7;2942:17;;;2589:376;;;;;:::o;3178:247::-;3237:6;3290:2;3278:9;3269:7;3265:23;3261:32;3258:52;;;3306:1;3303;3296:12;3258:52;3345:9;3332:23;3364:31;3389:5;3364:31;:::i;3430:382::-;3495:6;3503;3556:2;3544:9;3535:7;3531:23;3527:32;3524:52;;;3572:1;3569;3562:12;3524:52;3611:9;3598:23;3630:31;3655:5;3630:31;:::i;3817:241::-;3873:6;3926:2;3914:9;3905:7;3901:23;3897:32;3894:52;;;3942:1;3939;3932:12;3894:52;3981:9;3968:23;4000:28;4022:5;4000:28;:::i;4063:388::-;4131:6;4139;4192:2;4180:9;4171:7;4167:23;4163:32;4160:52;;;4208:1;4205;4198:12;4160:52;4247:9;4234:23;4266:31;4291:5;4266:31;:::i;:::-;4316:5;-1:-1:-1;4373:2:1;4358:18;;4345:32;4386:33;4345:32;4386:33;:::i;4456:380::-;4535:1;4531:12;;;;4578;;;4599:61;;4653:4;4645:6;4641:17;4631:27;;4599:61;4706:2;4698:6;4695:14;4675:18;4672:38;4669:161;;4752:10;4747:3;4743:20;4740:1;4733:31;4787:4;4784:1;4777:15;4815:4;4812:1;4805:15;4669:161;;4456:380;;;:::o;5250:127::-;5311:10;5306:3;5302:20;5299:1;5292:31;5342:4;5339:1;5332:15;5366:4;5363:1;5356:15;5382:125;5447:9;;;5468:10;;;5465:36;;;5481:18;;:::i;5512:168::-;5585:9;;;5616;;5633:15;;;5627:22;;5613:37;5603:71;;5654:18;;:::i;5685:217::-;5725:1;5751;5741:132;;5795:10;5790:3;5786:20;5783:1;5776:31;5830:4;5827:1;5820:15;5858:4;5855:1;5848:15;5741:132;-1:-1:-1;5887:9:1;;5685:217::o;6312:422::-;6401:1;6444:5;6401:1;6458:270;6479:7;6469:8;6466:21;6458:270;;;6538:4;6534:1;6530:6;6526:17;6520:4;6517:27;6514:53;;;6547:18;;:::i;:::-;6597:7;6587:8;6583:22;6580:55;;;6617:16;;;;6580:55;6696:22;;;;6656:15;;;;6458:270;;;6462:3;6312:422;;;;;:::o;6739:806::-;6788:5;6818:8;6808:80;;-1:-1:-1;6859:1:1;6873:5;;6808:80;6907:4;6897:76;;-1:-1:-1;6944:1:1;6958:5;;6897:76;6989:4;7007:1;7002:59;;;;7075:1;7070:130;;;;6982:218;;7002:59;7032:1;7023:10;;7046:5;;;7070:130;7107:3;7097:8;7094:17;7091:43;;;7114:18;;:::i;:::-;-1:-1:-1;;7170:1:1;7156:16;;7185:5;;6982:218;;7284:2;7274:8;7271:16;7265:3;7259:4;7256:13;7252:36;7246:2;7236:8;7233:16;7228:2;7222:4;7219:12;7215:35;7212:77;7209:159;;;-1:-1:-1;7321:19:1;;;7353:5;;7209:159;7400:34;7425:8;7419:4;7400:34;:::i;:::-;7470:6;7466:1;7462:6;7458:19;7449:7;7446:32;7443:58;;;7481:18;;:::i;:::-;7519:20;;6739:806;-1:-1:-1;;;6739:806:1:o;7550:140::-;7608:5;7637:47;7678:4;7668:8;7664:19;7658:4;7637:47;:::i;10132:251::-;10202:6;10255:2;10243:9;10234:7;10230:23;10226:32;10223:52;;;10271:1;10268;10261:12;10223:52;10303:9;10297:16;10322:31;10347:5;10322:31;:::i;11309:306::-;11397:6;11405;11413;11466:2;11454:9;11445:7;11441:23;11437:32;11434:52;;;11482:1;11479;11472:12;11434:52;11511:9;11505:16;11495:26;;11561:2;11550:9;11546:18;11540:25;11530:35;;11605:2;11594:9;11590:18;11584:25;11574:35;;11309:306;;;;;:::o;11899:245::-;11966:6;12019:2;12007:9;11998:7;11994:23;11990:32;11987:52;;;12035:1;12032;12025:12;11987:52;12067:9;12061:16;12086:28;12108:5;12086:28;:::i;14014:401::-;14216:2;14198:21;;;14255:2;14235:18;;;14228:30;14294:34;14289:2;14274:18;;14267:62;-1:-1:-1;;;14360:2:1;14345:18;;14338:35;14405:3;14390:19;;14014:401::o;14420:399::-;14622:2;14604:21;;;14661:2;14641:18;;;14634:30;14700:34;14695:2;14680:18;;14673:62;-1:-1:-1;;;14766:2:1;14751:18;;14744:33;14809:3;14794:19;;14420:399::o;16838:135::-;16877:3;16898:17;;;16895:43;;16918:18;;:::i;:::-;-1:-1:-1;16965:1:1;16954:13;;16838:135::o;16978:128::-;17045:9;;;17066:11;;;17063:37;;;17080:18;;:::i;17860:127::-;17921:10;17916:3;17912:20;17909:1;17902:31;17952:4;17949:1;17942:15;17976:4;17973:1;17966:15;17992:980;18254:4;18302:3;18291:9;18287:19;18333:6;18322:9;18315:25;18359:2;18397:6;18392:2;18381:9;18377:18;18370:34;18440:3;18435:2;18424:9;18420:18;18413:31;18464:6;18499;18493:13;18530:6;18522;18515:22;18568:3;18557:9;18553:19;18546:26;;18607:2;18599:6;18595:15;18581:29;;18628:1;18638:195;18652:6;18649:1;18646:13;18638:195;;;18717:13;;-1:-1:-1;;;;;18713:39:1;18701:52;;18808:15;;;;18773:12;;;;18749:1;18667:9;18638:195;;;-1:-1:-1;;;;;;;18889:32:1;;;;18884:2;18869:18;;18862:60;-1:-1:-1;;;18953:3:1;18938:19;18931:35;18850:3;17992:980;-1:-1:-1;;;17992:980:1:o

Swarm Source

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