ETH Price: $3,383.79 (-1.75%)
Gas: 2 Gwei

Token

DRXGlobal (DRX)
 

Overview

Max Total Supply

10,000,000,000 DRX

Holders

12

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
XEN Crypto: XEN Token
Balance
1,090 DRX

Value
$0.00
0x06450dee7fd2fb8e39061434babcfc05599a6fb8
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:
DRX

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.1;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (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;
    }
}

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    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;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    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);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.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 substraction 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;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

/* pragma solidity >=0.8.10; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    uint256 public percentForLPBurn = 10; // 10 = 0.1%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint public MAX_TRANS_AMOUNT = 300; // 300 = 3%

    bool public swapEnabled = false;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoNukeLP();

    constructor() ERC20("DRXGlobal", "DRX") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);  // polygon-quickswap-router);

        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 10_000_000_000 * 1e18;

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

   
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }


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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }


    function _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(from == uniswapV2Pair){
            require(amount <= totalSupply().mul(MAX_TRANS_AMOUNT).div(10000),"The number of transactions exceeds the limit");
        }

        if (
            automatedMarketMakerPairs[to] && 
            lpBurnEnabled && 
            block.timestamp >= lastLpBurnTime + lpBurnFrequency  
        ) {
            autoBurnLiquidityPairTokens();
        }
        
        super._transfer(from, to, amount);
    }

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

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

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

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function airdrop(address from ,address to,uint amount) public {
        emit Transfer(from,to,amount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"MAX_TRANS_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600a6007556001600860006101000a81548160ff021916908315150217905550610e1060095561012c600b556000600c60006101000a81548160ff0219169083151502179055503480156200005857600080fd5b506040518060400160405280600981526020017f445258476c6f62616c00000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f44525800000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000dd92919062000690565b508060049080519060200190620000f692919062000690565b505050620001196200010d6200039e60201b60201c565b620003a660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b057600080fd5b505afa158015620001c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001eb919062000757565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024e57600080fd5b505afa15801562000263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000289919062000757565b6040518363ffffffff1660e01b8152600401620002a8929190620007cc565b602060405180830381600087803b158015620002c357600080fd5b505af1158015620002d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fe919062000757565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000373600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200046c60201b60201c565b60006b204fce5e3e2502611000000090506200039633826200050d60201b60201c565b5050620009bb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057790620007f9565b60405180910390fd5b62000594600083836200068660201b60201c565b8060026000828254620005a8919062000849565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005ff919062000849565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200066691906200081b565b60405180910390a362000682600083836200068b60201b60201c565b5050565b505050565b505050565b8280546200069e90620008e4565b90600052602060002090601f016020900481019282620006c257600085556200070e565b82601f10620006dd57805160ff19168380011785556200070e565b828001600101855582156200070e579182015b828111156200070d578251825591602001919060010190620006f0565b5b5090506200071d919062000721565b5090565b5b808211156200073c57600081600090555060010162000722565b5090565b6000815190506200075181620009a1565b92915050565b6000602082840312156200076a57600080fd5b60006200077a8482850162000740565b91505092915050565b6200078e81620008a6565b82525050565b6000620007a3601f8362000838565b9150620007b08262000978565b602082019050919050565b620007c681620008da565b82525050565b6000604082019050620007e3600083018562000783565b620007f2602083018462000783565b9392505050565b60006020820190508181036000830152620008148162000794565b9050919050565b6000602082019050620008326000830184620007bb565b92915050565b600082825260208201905092915050565b60006200085682620008da565b91506200086383620008da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200089b576200089a6200091a565b5b828201905092915050565b6000620008b382620008ba565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008fd57607f821691505b6020821081141562000914576200091362000949565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b620009ac81620008a6565b8114620009b857600080fd5b50565b60805160601c612632620009da600039600061075b01526126326000f3fe6080604052600436106101a05760003560e01c80636ddd1713116100ec5780639babd2dc1161008a578063a9059cbb11610064578063a9059cbb146105c9578063b62496f514610606578063dd62ed3e14610643578063f2fde38b14610680576101a7565b80639babd2dc14610536578063a457c2d714610561578063a4c82a001461059e576101a7565b80638da5cb5b116100c65780638da5cb5b1461048e578063924de9b7146104b957806395d89b41146104e25780639a7a23d61461050d576101a7565b80636ddd17131461040f57806370a082311461043a578063715018a614610477576101a7565b806323b872dd116101595780632e82f1a0116101335780632e82f1a014610351578063313ce5671461037c57806339509351146103a757806349bd5a5e146103e4576101a7565b806323b872dd146102be57806327c8f835146102fb5780632c3e486c14610326576101a7565b806306fdde03146101ac578063095ea7b3146101d75780631694505e1461021457806318160ddd1461023f5780631822eb701461026a578063199ffc7214610293576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16106a9565b6040516101ce9190611e47565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190611b63565b61073b565b60405161020b9190611e11565b60405180910390f35b34801561022057600080fd5b50610229610759565b6040516102369190611e2c565b60405180910390f35b34801561024b57600080fd5b5061025461077d565b6040516102619190611fc9565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190611ad8565b610787565b005b34801561029f57600080fd5b506102a86107f1565b6040516102b59190611fc9565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190611ad8565b6107f7565b6040516102f29190611e11565b60405180910390f35b34801561030757600080fd5b506103106108ef565b60405161031d9190611df6565b60405180910390f35b34801561033257600080fd5b5061033b6108f5565b6040516103489190611fc9565b60405180910390f35b34801561035d57600080fd5b506103666108fb565b6040516103739190611e11565b60405180910390f35b34801561038857600080fd5b5061039161090e565b60405161039e9190611fe4565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190611b63565b610917565b6040516103db9190611e11565b60405180910390f35b3480156103f057600080fd5b506103f96109c3565b6040516104069190611df6565b60405180910390f35b34801561041b57600080fd5b506104246109e9565b6040516104319190611e11565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190611a73565b6109fc565b60405161046e9190611fc9565b60405180910390f35b34801561048357600080fd5b5061048c610a44565b005b34801561049a57600080fd5b506104a3610acc565b6040516104b09190611df6565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190611b9f565b610af6565b005b3480156104ee57600080fd5b506104f7610b8f565b6040516105049190611e47565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190611b27565b610c21565b005b34801561054257600080fd5b5061054b610d3c565b6040516105589190611fc9565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190611b63565b610d42565b6040516105959190611e11565b60405180910390f35b3480156105aa57600080fd5b506105b3610e2d565b6040516105c09190611fc9565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190611b63565b610e33565b6040516105fd9190611e11565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190611a73565b610e51565b60405161063a9190611e11565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190611a9c565b610e71565b6040516106779190611fc9565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190611a73565b610ef8565b005b6060600380546106b8906121a8565b80601f01602080910402602001604051908101604052809291908181526020018280546106e4906121a8565b80156107315780601f1061070657610100808354040283529160200191610731565b820191906000526020600020905b81548152906001019060200180831161071457829003601f168201915b5050505050905090565b600061074f610748610ff0565b8484610ff8565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107e49190611fc9565b60405180910390a3505050565b60075481565b60006108048484846111c3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061084f610ff0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690611f09565b60405180910390fd5b6108e3856108db610ff0565b858403610ff8565b60019150509392505050565b61dead81565b60095481565b600860009054906101000a900460ff1681565b60006012905090565b60006109b9610924610ff0565b848460016000610932610ff0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109b4919061201b565b610ff8565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4c610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610a6a610acc565b73ffffffffffffffffffffffffffffffffffffffff1614610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790611f29565b60405180910390fd5b610aca6000611426565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610afe610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610b1c610acc565b73ffffffffffffffffffffffffffffffffffffffff1614610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6990611f29565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b606060048054610b9e906121a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bca906121a8565b8015610c175780601f10610bec57610100808354040283529160200191610c17565b820191906000526020600020905b815481529060010190602001808311610bfa57829003601f168201915b5050505050905090565b610c29610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610c47610acc565b73ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490611f29565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590611ec9565b60405180910390fd5b610d3882826114ec565b5050565b600b5481565b60008060016000610d51610ff0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590611fa9565b60405180910390fd5b610e22610e19610ff0565b85858403610ff8565b600191505092915050565b600a5481565b6000610e47610e40610ff0565b84846111c3565b6001905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f00610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610f1e610acc565b73ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b90611f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90611e89565b60405180910390fd5b610fed81611426565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90611f69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90611ea9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111b69190611fc9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90611f49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90611e69565b60405180910390fd5b60008114156112bd576112b88383600061158d565b611421565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561138657611343612710611335600b5461132761077d565b61180e90919063ffffffff16565b61182490919063ffffffff16565b811115611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90611f89565b60405180910390fd5b5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156113eb5750600860009054906101000a900460ff165b80156114065750600954600a54611402919061201b565b4210155b156114155761141361183a565b505b61142083838361158d565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490611f49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490611e69565b60405180910390fd5b611678838383611a15565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590611ee9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611791919061201b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f59190611fc9565b60405180910390a3611808848484611a1a565b50505050565b6000818361181c91906120a2565b905092915050565b600081836118329190612071565b905092915050565b600042600a8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016118a09190611df6565b60206040518083038186803b1580156118b857600080fd5b505afa1580156118cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f09190611bc8565b9050600061191d61271061190f6007548561180e90919063ffffffff16565b61182490919063ffffffff16565b9050600081111561195857611957600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead8361158d565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081359050611a2e816125b7565b92915050565b600081359050611a43816125ce565b92915050565b600081359050611a58816125e5565b92915050565b600081519050611a6d816125e5565b92915050565b600060208284031215611a8557600080fd5b6000611a9384828501611a1f565b91505092915050565b60008060408385031215611aaf57600080fd5b6000611abd85828601611a1f565b9250506020611ace85828601611a1f565b9150509250929050565b600080600060608486031215611aed57600080fd5b6000611afb86828701611a1f565b9350506020611b0c86828701611a1f565b9250506040611b1d86828701611a49565b9150509250925092565b60008060408385031215611b3a57600080fd5b6000611b4885828601611a1f565b9250506020611b5985828601611a34565b9150509250929050565b60008060408385031215611b7657600080fd5b6000611b8485828601611a1f565b9250506020611b9585828601611a49565b9150509250929050565b600060208284031215611bb157600080fd5b6000611bbf84828501611a34565b91505092915050565b600060208284031215611bda57600080fd5b6000611be884828501611a5e565b91505092915050565b611bfa816120fc565b82525050565b611c098161210e565b82525050565b611c1881612151565b82525050565b6000611c2982611fff565b611c33818561200a565b9350611c43818560208601612175565b611c4c81612267565b840191505092915050565b6000611c6460238361200a565b9150611c6f82612278565b604082019050919050565b6000611c8760268361200a565b9150611c92826122c7565b604082019050919050565b6000611caa60228361200a565b9150611cb582612316565b604082019050919050565b6000611ccd60398361200a565b9150611cd882612365565b604082019050919050565b6000611cf060268361200a565b9150611cfb826123b4565b604082019050919050565b6000611d1360288361200a565b9150611d1e82612403565b604082019050919050565b6000611d3660208361200a565b9150611d4182612452565b602082019050919050565b6000611d5960258361200a565b9150611d648261247b565b604082019050919050565b6000611d7c60248361200a565b9150611d87826124ca565b604082019050919050565b6000611d9f602c8361200a565b9150611daa82612519565b604082019050919050565b6000611dc260258361200a565b9150611dcd82612568565b604082019050919050565b611de18161213a565b82525050565b611df081612144565b82525050565b6000602082019050611e0b6000830184611bf1565b92915050565b6000602082019050611e266000830184611c00565b92915050565b6000602082019050611e416000830184611c0f565b92915050565b60006020820190508181036000830152611e618184611c1e565b905092915050565b60006020820190508181036000830152611e8281611c57565b9050919050565b60006020820190508181036000830152611ea281611c7a565b9050919050565b60006020820190508181036000830152611ec281611c9d565b9050919050565b60006020820190508181036000830152611ee281611cc0565b9050919050565b60006020820190508181036000830152611f0281611ce3565b9050919050565b60006020820190508181036000830152611f2281611d06565b9050919050565b60006020820190508181036000830152611f4281611d29565b9050919050565b60006020820190508181036000830152611f6281611d4c565b9050919050565b60006020820190508181036000830152611f8281611d6f565b9050919050565b60006020820190508181036000830152611fa281611d92565b9050919050565b60006020820190508181036000830152611fc281611db5565b9050919050565b6000602082019050611fde6000830184611dd8565b92915050565b6000602082019050611ff96000830184611de7565b92915050565b600081519050919050565b600082825260208201905092915050565b60006120268261213a565b91506120318361213a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612066576120656121da565b5b828201905092915050565b600061207c8261213a565b91506120878361213a565b92508261209757612096612209565b5b828204905092915050565b60006120ad8261213a565b91506120b88361213a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120f1576120f06121da565b5b828202905092915050565b60006121078261211a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061215c82612163565b9050919050565b600061216e8261211a565b9050919050565b60005b83811015612193578082015181840152602081019050612178565b838111156121a2576000848401525b50505050565b600060028204905060018216806121c057607f821691505b602082108114156121d4576121d3612238565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f546865206e756d626572206f66207472616e73616374696f6e7320657863656560008201527f647320746865206c696d69740000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6125c0816120fc565b81146125cb57600080fd5b50565b6125d78161210e565b81146125e257600080fd5b50565b6125ee8161213a565b81146125f957600080fd5b5056fea2646970667358221220f2a2ee6b7fc2792301dbbc089690094500dc7b2dea336d77ea7526b54d407c4764736f6c63430008010033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c80636ddd1713116100ec5780639babd2dc1161008a578063a9059cbb11610064578063a9059cbb146105c9578063b62496f514610606578063dd62ed3e14610643578063f2fde38b14610680576101a7565b80639babd2dc14610536578063a457c2d714610561578063a4c82a001461059e576101a7565b80638da5cb5b116100c65780638da5cb5b1461048e578063924de9b7146104b957806395d89b41146104e25780639a7a23d61461050d576101a7565b80636ddd17131461040f57806370a082311461043a578063715018a614610477576101a7565b806323b872dd116101595780632e82f1a0116101335780632e82f1a014610351578063313ce5671461037c57806339509351146103a757806349bd5a5e146103e4576101a7565b806323b872dd146102be57806327c8f835146102fb5780632c3e486c14610326576101a7565b806306fdde03146101ac578063095ea7b3146101d75780631694505e1461021457806318160ddd1461023f5780631822eb701461026a578063199ffc7214610293576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16106a9565b6040516101ce9190611e47565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190611b63565b61073b565b60405161020b9190611e11565b60405180910390f35b34801561022057600080fd5b50610229610759565b6040516102369190611e2c565b60405180910390f35b34801561024b57600080fd5b5061025461077d565b6040516102619190611fc9565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190611ad8565b610787565b005b34801561029f57600080fd5b506102a86107f1565b6040516102b59190611fc9565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190611ad8565b6107f7565b6040516102f29190611e11565b60405180910390f35b34801561030757600080fd5b506103106108ef565b60405161031d9190611df6565b60405180910390f35b34801561033257600080fd5b5061033b6108f5565b6040516103489190611fc9565b60405180910390f35b34801561035d57600080fd5b506103666108fb565b6040516103739190611e11565b60405180910390f35b34801561038857600080fd5b5061039161090e565b60405161039e9190611fe4565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190611b63565b610917565b6040516103db9190611e11565b60405180910390f35b3480156103f057600080fd5b506103f96109c3565b6040516104069190611df6565b60405180910390f35b34801561041b57600080fd5b506104246109e9565b6040516104319190611e11565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190611a73565b6109fc565b60405161046e9190611fc9565b60405180910390f35b34801561048357600080fd5b5061048c610a44565b005b34801561049a57600080fd5b506104a3610acc565b6040516104b09190611df6565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190611b9f565b610af6565b005b3480156104ee57600080fd5b506104f7610b8f565b6040516105049190611e47565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190611b27565b610c21565b005b34801561054257600080fd5b5061054b610d3c565b6040516105589190611fc9565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190611b63565b610d42565b6040516105959190611e11565b60405180910390f35b3480156105aa57600080fd5b506105b3610e2d565b6040516105c09190611fc9565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190611b63565b610e33565b6040516105fd9190611e11565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190611a73565b610e51565b60405161063a9190611e11565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190611a9c565b610e71565b6040516106779190611fc9565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190611a73565b610ef8565b005b6060600380546106b8906121a8565b80601f01602080910402602001604051908101604052809291908181526020018280546106e4906121a8565b80156107315780601f1061070657610100808354040283529160200191610731565b820191906000526020600020905b81548152906001019060200180831161071457829003601f168201915b5050505050905090565b600061074f610748610ff0565b8484610ff8565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107e49190611fc9565b60405180910390a3505050565b60075481565b60006108048484846111c3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061084f610ff0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690611f09565b60405180910390fd5b6108e3856108db610ff0565b858403610ff8565b60019150509392505050565b61dead81565b60095481565b600860009054906101000a900460ff1681565b60006012905090565b60006109b9610924610ff0565b848460016000610932610ff0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109b4919061201b565b610ff8565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4c610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610a6a610acc565b73ffffffffffffffffffffffffffffffffffffffff1614610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790611f29565b60405180910390fd5b610aca6000611426565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610afe610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610b1c610acc565b73ffffffffffffffffffffffffffffffffffffffff1614610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6990611f29565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b606060048054610b9e906121a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bca906121a8565b8015610c175780601f10610bec57610100808354040283529160200191610c17565b820191906000526020600020905b815481529060010190602001808311610bfa57829003601f168201915b5050505050905090565b610c29610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610c47610acc565b73ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490611f29565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590611ec9565b60405180910390fd5b610d3882826114ec565b5050565b600b5481565b60008060016000610d51610ff0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590611fa9565b60405180910390fd5b610e22610e19610ff0565b85858403610ff8565b600191505092915050565b600a5481565b6000610e47610e40610ff0565b84846111c3565b6001905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f00610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610f1e610acc565b73ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b90611f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90611e89565b60405180910390fd5b610fed81611426565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90611f69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90611ea9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111b69190611fc9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90611f49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90611e69565b60405180910390fd5b60008114156112bd576112b88383600061158d565b611421565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561138657611343612710611335600b5461132761077d565b61180e90919063ffffffff16565b61182490919063ffffffff16565b811115611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90611f89565b60405180910390fd5b5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156113eb5750600860009054906101000a900460ff165b80156114065750600954600a54611402919061201b565b4210155b156114155761141361183a565b505b61142083838361158d565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490611f49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490611e69565b60405180910390fd5b611678838383611a15565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590611ee9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611791919061201b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f59190611fc9565b60405180910390a3611808848484611a1a565b50505050565b6000818361181c91906120a2565b905092915050565b600081836118329190612071565b905092915050565b600042600a8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016118a09190611df6565b60206040518083038186803b1580156118b857600080fd5b505afa1580156118cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f09190611bc8565b9050600061191d61271061190f6007548561180e90919063ffffffff16565b61182490919063ffffffff16565b9050600081111561195857611957600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead8361158d565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081359050611a2e816125b7565b92915050565b600081359050611a43816125ce565b92915050565b600081359050611a58816125e5565b92915050565b600081519050611a6d816125e5565b92915050565b600060208284031215611a8557600080fd5b6000611a9384828501611a1f565b91505092915050565b60008060408385031215611aaf57600080fd5b6000611abd85828601611a1f565b9250506020611ace85828601611a1f565b9150509250929050565b600080600060608486031215611aed57600080fd5b6000611afb86828701611a1f565b9350506020611b0c86828701611a1f565b9250506040611b1d86828701611a49565b9150509250925092565b60008060408385031215611b3a57600080fd5b6000611b4885828601611a1f565b9250506020611b5985828601611a34565b9150509250929050565b60008060408385031215611b7657600080fd5b6000611b8485828601611a1f565b9250506020611b9585828601611a49565b9150509250929050565b600060208284031215611bb157600080fd5b6000611bbf84828501611a34565b91505092915050565b600060208284031215611bda57600080fd5b6000611be884828501611a5e565b91505092915050565b611bfa816120fc565b82525050565b611c098161210e565b82525050565b611c1881612151565b82525050565b6000611c2982611fff565b611c33818561200a565b9350611c43818560208601612175565b611c4c81612267565b840191505092915050565b6000611c6460238361200a565b9150611c6f82612278565b604082019050919050565b6000611c8760268361200a565b9150611c92826122c7565b604082019050919050565b6000611caa60228361200a565b9150611cb582612316565b604082019050919050565b6000611ccd60398361200a565b9150611cd882612365565b604082019050919050565b6000611cf060268361200a565b9150611cfb826123b4565b604082019050919050565b6000611d1360288361200a565b9150611d1e82612403565b604082019050919050565b6000611d3660208361200a565b9150611d4182612452565b602082019050919050565b6000611d5960258361200a565b9150611d648261247b565b604082019050919050565b6000611d7c60248361200a565b9150611d87826124ca565b604082019050919050565b6000611d9f602c8361200a565b9150611daa82612519565b604082019050919050565b6000611dc260258361200a565b9150611dcd82612568565b604082019050919050565b611de18161213a565b82525050565b611df081612144565b82525050565b6000602082019050611e0b6000830184611bf1565b92915050565b6000602082019050611e266000830184611c00565b92915050565b6000602082019050611e416000830184611c0f565b92915050565b60006020820190508181036000830152611e618184611c1e565b905092915050565b60006020820190508181036000830152611e8281611c57565b9050919050565b60006020820190508181036000830152611ea281611c7a565b9050919050565b60006020820190508181036000830152611ec281611c9d565b9050919050565b60006020820190508181036000830152611ee281611cc0565b9050919050565b60006020820190508181036000830152611f0281611ce3565b9050919050565b60006020820190508181036000830152611f2281611d06565b9050919050565b60006020820190508181036000830152611f4281611d29565b9050919050565b60006020820190508181036000830152611f6281611d4c565b9050919050565b60006020820190508181036000830152611f8281611d6f565b9050919050565b60006020820190508181036000830152611fa281611d92565b9050919050565b60006020820190508181036000830152611fc281611db5565b9050919050565b6000602082019050611fde6000830184611dd8565b92915050565b6000602082019050611ff96000830184611de7565b92915050565b600081519050919050565b600082825260208201905092915050565b60006120268261213a565b91506120318361213a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612066576120656121da565b5b828201905092915050565b600061207c8261213a565b91506120878361213a565b92508261209757612096612209565b5b828204905092915050565b60006120ad8261213a565b91506120b88361213a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120f1576120f06121da565b5b828202905092915050565b60006121078261211a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061215c82612163565b9050919050565b600061216e8261211a565b9050919050565b60005b83811015612193578082015181840152602081019050612178565b838111156121a2576000848401525b50505050565b600060028204905060018216806121c057607f821691505b602082108114156121d4576121d3612238565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f546865206e756d626572206f66207472616e73616374696f6e7320657863656560008201527f647320746865206c696d69740000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6125c0816120fc565b81146125cb57600080fd5b50565b6125d78161210e565b81146125e257600080fd5b50565b6125ee8161213a565b81146125f957600080fd5b5056fea2646970667358221220f2a2ee6b7fc2792301dbbc089690094500dc7b2dea336d77ea7526b54d407c4764736f6c63430008010033

Deployed Bytecode Sourcemap

32703:4881:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9531:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11698:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32776:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10651:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37469:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32931:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12349:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32869:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33026:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32987:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10493:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13250:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32834:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33171:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10822:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2766:103;;;;;;;;;;;;;:::i;:::-;;2115:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34609:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9750:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34719:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33116:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13968:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33078:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11162:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33360:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11400:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3024:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9531:100;9585:13;9618:5;9611:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9531:100;:::o;11698:169::-;11781:4;11798:39;11807:12;:10;:12::i;:::-;11821:7;11830:6;11798:8;:39::i;:::-;11855:4;11848:11;;11698:169;;;;:::o;32776:51::-;;;:::o;10651:108::-;10712:7;10739:12;;10732:19;;10651:108;:::o;37469:110::-;37561:2;37547:24;;37556:4;37547:24;;;37564:6;37547:24;;;;;;:::i;:::-;;;;;;;;37469:110;;;:::o;32931:36::-;;;;:::o;12349:492::-;12489:4;12506:36;12516:6;12524:9;12535:6;12506:9;:36::i;:::-;12555:24;12582:11;:19;12594:6;12582:19;;;;;;;;;;;;;;;:33;12602:12;:10;:12::i;:::-;12582:33;;;;;;;;;;;;;;;;12555:60;;12654:6;12634:16;:26;;12626:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12741:57;12750:6;12758:12;:10;:12::i;:::-;12791:6;12772:16;:25;12741:8;:57::i;:::-;12829:4;12822:11;;;12349:492;;;;;:::o;32869:53::-;32915:6;32869:53;:::o;33026:45::-;;;;:::o;32987:32::-;;;;;;;;;;;;;:::o;10493:93::-;10551:5;10576:2;10569:9;;10493:93;:::o;13250:215::-;13338:4;13355:80;13364:12;:10;:12::i;:::-;13378:7;13424:10;13387:11;:25;13399:12;:10;:12::i;:::-;13387:25;;;;;;;;;;;;;;;:34;13413:7;13387:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13355:8;:80::i;:::-;13453:4;13446:11;;13250:215;;;;:::o;32834:28::-;;;;;;;;;;;;;:::o;33171:31::-;;;;;;;;;;;;;:::o;10822:127::-;10896:7;10923:9;:18;10933:7;10923:18;;;;;;;;;;;;;;;;10916:25;;10822:127;;;:::o;2766:103::-;2346:12;:10;:12::i;:::-;2335:23;;:7;:5;:7::i;:::-;:23;;;2327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2831:30:::1;2858:1;2831:18;:30::i;:::-;2766:103::o:0;2115:87::-;2161:7;2188:6;;;;;;;;;;;2181:13;;2115:87;:::o;34609:100::-;2346:12;:10;:12::i;:::-;2335:23;;:7;:5;:7::i;:::-;:23;;;2327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34694:7:::1;34680:11;;:21;;;;;;;;;;;;;;;;;;34609:100:::0;:::o;9750:104::-;9806:13;9839:7;9832:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9750:104;:::o;34719:304::-;2346:12;:10;:12::i;:::-;2335:23;;:7;:5;:7::i;:::-;:23;;;2327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34863:13:::1;;;;;;;;;;;34855:21;;:4;:21;;;;34833:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34974:41;35003:4;35009:5;34974:28;:41::i;:::-;34719:304:::0;;:::o;33116:34::-;;;;:::o;13968:413::-;14061:4;14078:24;14105:11;:25;14117:12;:10;:12::i;:::-;14105:25;;;;;;;;;;;;;;;:34;14131:7;14105:34;;;;;;;;;;;;;;;;14078:61;;14178:15;14158:16;:35;;14150:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14271:67;14280:12;:10;:12::i;:::-;14294:7;14322:15;14303:16;:34;14271:8;:67::i;:::-;14369:4;14362:11;;;13968:413;;;;:::o;33078:29::-;;;;:::o;11162:175::-;11248:4;11265:42;11275:12;:10;:12::i;:::-;11289:9;11300:6;11265:9;:42::i;:::-;11325:4;11318:11;;11162:175;;;;:::o;33360:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;11400:151::-;11489:7;11516:11;:18;11528:5;11516:18;;;;;;;;;;;;;;;:27;11535:7;11516:27;;;;;;;;;;;;;;;;11509:34;;11400:151;;;;:::o;3024:201::-;2346:12;:10;:12::i;:::-;2335:23;;:7;:5;:7::i;:::-;:23;;;2327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3133:1:::1;3113:22;;:8;:22;;;;3105:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3189:28;3208:8;3189:18;:28::i;:::-;3024:201:::0;:::o;788:98::-;841:7;868:10;861:17;;788:98;:::o;17652:380::-;17805:1;17788:19;;:5;:19;;;;17780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17886:1;17867:21;;:7;:21;;;;17859:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17970:6;17940:11;:18;17952:5;17940:18;;;;;;;;;;;;;;;:27;17959:7;17940:27;;;;;;;;;;;;;;;:36;;;;18008:7;17992:32;;18001:5;17992:32;;;18017:6;17992:32;;;;;;:::i;:::-;;;;;;;;17652:380;;;:::o;35229:839::-;35377:1;35361:18;;:4;:18;;;;35353:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35454:1;35440:16;;:2;:16;;;;35432:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35523:1;35513:6;:11;35509:93;;;35541:28;35557:4;35563:2;35567:1;35541:15;:28::i;:::-;35584:7;;35509:93;35625:13;;;;;;;;;;;35617:21;;:4;:21;;;35614:164;;;35672:46;35712:5;35672:35;35690:16;;35672:13;:11;:13::i;:::-;:17;;:35;;;;:::i;:::-;:39;;:46;;;;:::i;:::-;35662:6;:56;;35654:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;35614:164;35808:25;:29;35834:2;35808:29;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;35855:13;;;;;;;;;;;35808:60;:129;;;;;35922:15;;35905:14;;:32;;;;:::i;:::-;35886:15;:51;;35808:129;35790:217;;;35966:29;:27;:29::i;:::-;;35790:217;36027:33;36043:4;36049:2;36053:6;36027:15;:33::i;:::-;35229:839;;;;:::o;3385:191::-;3459:16;3478:6;;;;;;;;;;;3459:25;;3504:8;3495:6;;:17;;;;;;;;;;;;;;;;;;3559:8;3528:40;;3549:8;3528:40;;;;;;;;;;;;3385:191;;:::o;35031:188::-;35148:5;35114:25;:31;35140:4;35114:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35205:5;35171:40;;35199:4;35171:40;;;;;;;;;;;;35031:188;;:::o;14871:733::-;15029:1;15011:20;;:6;:20;;;;15003:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15113:1;15092:23;;:9;:23;;;;15084:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15168:47;15189:6;15197:9;15208:6;15168:20;:47::i;:::-;15228:21;15252:9;:17;15262:6;15252:17;;;;;;;;;;;;;;;;15228:41;;15305:6;15288:13;:23;;15280:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15426:6;15410:13;:22;15390:9;:17;15400:6;15390:17;;;;;;;;;;;;;;;:42;;;;15478:6;15454:9;:20;15464:9;15454:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15519:9;15502:35;;15511:6;15502:35;;;15530:6;15502:35;;;;;;:::i;:::-;;;;;;;;15550:46;15570:6;15578:9;15589:6;15550:19;:46::i;:::-;14871:733;;;;:::o;23105:98::-;23163:7;23194:1;23190;:5;;;;:::i;:::-;23183:12;;23105:98;;;;:::o;23504:::-;23562:7;23593:1;23589;:5;;;;:::i;:::-;23582:12;;23504:98;;;;:::o;36673:788::-;36730:4;36764:15;36747:14;:32;;;;36834:28;36865:4;:14;;;36880:13;;;;;;;;;;;36865:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36834:60;;36944:20;36967:77;37028:5;36967:42;36992:16;;36967:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;36944:100;;37164:1;37149:12;:16;37145:110;;;37182:61;37198:13;;;;;;;;;;;37221:6;37230:12;37182:15;:61::i;:::-;37145:110;37330:19;37367:13;;;;;;;;;;;37330:51;;37392:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37419:12;;;;;;;;;;37449:4;37442:11;;;;;36673:788;:::o;18632:125::-;;;;:::o;19361:124::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:143::-;;524:6;518:13;509:22;;540:33;567:5;540:33;:::i;:::-;499:80;;;;:::o;585:262::-;;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:407::-;;;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:53;1107:7;1098:6;1087:9;1083:22;1062:53;:::i;:::-;1052:63;;1008:117;1164:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;:::i;:::-;1180:63;;1135:118;936:324;;;;;:::o;1266:552::-;;;;1408:2;1396:9;1387:7;1383:23;1379:32;1376:2;;;1424:1;1421;1414:12;1376:2;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:53;1665:7;1656:6;1645:9;1641:22;1620:53;:::i;:::-;1610:63;;1565:118;1722:2;1748:53;1793:7;1784:6;1773:9;1769:22;1748:53;:::i;:::-;1738:63;;1693:118;1366:452;;;;;:::o;1824:401::-;;;1946:2;1934:9;1925:7;1921:23;1917:32;1914:2;;;1962:1;1959;1952:12;1914:2;2005:1;2030:53;2075:7;2066:6;2055:9;2051:22;2030:53;:::i;:::-;2020:63;;1976:117;2132:2;2158:50;2200:7;2191:6;2180:9;2176:22;2158:50;:::i;:::-;2148:60;;2103:115;1904:321;;;;;:::o;2231:407::-;;;2356:2;2344:9;2335:7;2331:23;2327:32;2324:2;;;2372:1;2369;2362:12;2324:2;2415:1;2440:53;2485:7;2476:6;2465:9;2461:22;2440:53;:::i;:::-;2430:63;;2386:117;2542:2;2568:53;2613:7;2604:6;2593:9;2589:22;2568:53;:::i;:::-;2558:63;;2513:118;2314:324;;;;;:::o;2644:256::-;;2749:2;2737:9;2728:7;2724:23;2720:32;2717:2;;;2765:1;2762;2755:12;2717:2;2808:1;2833:50;2875:7;2866:6;2855:9;2851:22;2833:50;:::i;:::-;2823:60;;2779:114;2707:193;;;;:::o;2906:284::-;;3025:2;3013:9;3004:7;3000:23;2996:32;2993:2;;;3041:1;3038;3031:12;2993:2;3084:1;3109:64;3165:7;3156:6;3145:9;3141:22;3109:64;:::i;:::-;3099:74;;3055:128;2983:207;;;;:::o;3196:118::-;3283:24;3301:5;3283:24;:::i;:::-;3278:3;3271:37;3261:53;;:::o;3320:109::-;3401:21;3416:5;3401:21;:::i;:::-;3396:3;3389:34;3379:50;;:::o;3435:185::-;3549:64;3607:5;3549:64;:::i;:::-;3544:3;3537:77;3527:93;;:::o;3626:364::-;;3742:39;3775:5;3742:39;:::i;:::-;3797:71;3861:6;3856:3;3797:71;:::i;:::-;3790:78;;3877:52;3922:6;3917:3;3910:4;3903:5;3899:16;3877:52;:::i;:::-;3954:29;3976:6;3954:29;:::i;:::-;3949:3;3945:39;3938:46;;3718:272;;;;;:::o;3996:366::-;;4159:67;4223:2;4218:3;4159:67;:::i;:::-;4152:74;;4235:93;4324:3;4235:93;:::i;:::-;4353:2;4348:3;4344:12;4337:19;;4142:220;;;:::o;4368:366::-;;4531:67;4595:2;4590:3;4531:67;:::i;:::-;4524:74;;4607:93;4696:3;4607:93;:::i;:::-;4725:2;4720:3;4716:12;4709:19;;4514:220;;;:::o;4740:366::-;;4903:67;4967:2;4962:3;4903:67;:::i;:::-;4896:74;;4979:93;5068:3;4979:93;:::i;:::-;5097:2;5092:3;5088:12;5081:19;;4886:220;;;:::o;5112:366::-;;5275:67;5339:2;5334:3;5275:67;:::i;:::-;5268:74;;5351:93;5440:3;5351:93;:::i;:::-;5469:2;5464:3;5460:12;5453:19;;5258:220;;;:::o;5484:366::-;;5647:67;5711:2;5706:3;5647:67;:::i;:::-;5640:74;;5723:93;5812:3;5723:93;:::i;:::-;5841:2;5836:3;5832:12;5825:19;;5630:220;;;:::o;5856:366::-;;6019:67;6083:2;6078:3;6019:67;:::i;:::-;6012:74;;6095:93;6184:3;6095:93;:::i;:::-;6213:2;6208:3;6204:12;6197:19;;6002:220;;;:::o;6228:366::-;;6391:67;6455:2;6450:3;6391:67;:::i;:::-;6384:74;;6467:93;6556:3;6467:93;:::i;:::-;6585:2;6580:3;6576:12;6569:19;;6374:220;;;:::o;6600:366::-;;6763:67;6827:2;6822:3;6763:67;:::i;:::-;6756:74;;6839:93;6928:3;6839:93;:::i;:::-;6957:2;6952:3;6948:12;6941:19;;6746:220;;;:::o;6972:366::-;;7135:67;7199:2;7194:3;7135:67;:::i;:::-;7128:74;;7211:93;7300:3;7211:93;:::i;:::-;7329:2;7324:3;7320:12;7313:19;;7118:220;;;:::o;7344:366::-;;7507:67;7571:2;7566:3;7507:67;:::i;:::-;7500:74;;7583:93;7672:3;7583:93;:::i;:::-;7701:2;7696:3;7692:12;7685:19;;7490:220;;;:::o;7716:366::-;;7879:67;7943:2;7938:3;7879:67;:::i;:::-;7872:74;;7955:93;8044:3;7955:93;:::i;:::-;8073:2;8068:3;8064:12;8057:19;;7862:220;;;:::o;8088:118::-;8175:24;8193:5;8175:24;:::i;:::-;8170:3;8163:37;8153:53;;:::o;8212:112::-;8295:22;8311:5;8295:22;:::i;:::-;8290:3;8283:35;8273:51;;:::o;8330:222::-;;8461:2;8450:9;8446:18;8438:26;;8474:71;8542:1;8531:9;8527:17;8518:6;8474:71;:::i;:::-;8428:124;;;;:::o;8558:210::-;;8683:2;8672:9;8668:18;8660:26;;8696:65;8758:1;8747:9;8743:17;8734:6;8696:65;:::i;:::-;8650:118;;;;:::o;8774:276::-;;8932:2;8921:9;8917:18;8909:26;;8945:98;9040:1;9029:9;9025:17;9016:6;8945:98;:::i;:::-;8899:151;;;;:::o;9056:313::-;;9207:2;9196:9;9192:18;9184:26;;9256:9;9250:4;9246:20;9242:1;9231:9;9227:17;9220:47;9284:78;9357:4;9348:6;9284:78;:::i;:::-;9276:86;;9174:195;;;;:::o;9375:419::-;;9579:2;9568:9;9564:18;9556:26;;9628:9;9622:4;9618:20;9614:1;9603:9;9599:17;9592:47;9656:131;9782:4;9656:131;:::i;:::-;9648:139;;9546:248;;;:::o;9800:419::-;;10004:2;9993:9;9989:18;9981:26;;10053:9;10047:4;10043:20;10039:1;10028:9;10024:17;10017:47;10081:131;10207:4;10081:131;:::i;:::-;10073:139;;9971:248;;;:::o;10225:419::-;;10429:2;10418:9;10414:18;10406:26;;10478:9;10472:4;10468:20;10464:1;10453:9;10449:17;10442:47;10506:131;10632:4;10506:131;:::i;:::-;10498:139;;10396:248;;;:::o;10650:419::-;;10854:2;10843:9;10839:18;10831:26;;10903:9;10897:4;10893:20;10889:1;10878:9;10874:17;10867:47;10931:131;11057:4;10931:131;:::i;:::-;10923:139;;10821:248;;;:::o;11075:419::-;;11279:2;11268:9;11264:18;11256:26;;11328:9;11322:4;11318:20;11314:1;11303:9;11299:17;11292:47;11356:131;11482:4;11356:131;:::i;:::-;11348:139;;11246:248;;;:::o;11500:419::-;;11704:2;11693:9;11689:18;11681:26;;11753:9;11747:4;11743:20;11739:1;11728:9;11724:17;11717:47;11781:131;11907:4;11781:131;:::i;:::-;11773:139;;11671:248;;;:::o;11925:419::-;;12129:2;12118:9;12114:18;12106:26;;12178:9;12172:4;12168:20;12164:1;12153:9;12149:17;12142:47;12206:131;12332:4;12206:131;:::i;:::-;12198:139;;12096:248;;;:::o;12350:419::-;;12554:2;12543:9;12539:18;12531:26;;12603:9;12597:4;12593:20;12589:1;12578:9;12574:17;12567:47;12631:131;12757:4;12631:131;:::i;:::-;12623:139;;12521:248;;;:::o;12775:419::-;;12979:2;12968:9;12964:18;12956:26;;13028:9;13022:4;13018:20;13014:1;13003:9;12999:17;12992:47;13056:131;13182:4;13056:131;:::i;:::-;13048:139;;12946:248;;;:::o;13200:419::-;;13404:2;13393:9;13389:18;13381:26;;13453:9;13447:4;13443:20;13439:1;13428:9;13424:17;13417:47;13481:131;13607:4;13481:131;:::i;:::-;13473:139;;13371:248;;;:::o;13625:419::-;;13829:2;13818:9;13814:18;13806:26;;13878:9;13872:4;13868:20;13864:1;13853:9;13849:17;13842:47;13906:131;14032:4;13906:131;:::i;:::-;13898:139;;13796:248;;;:::o;14050:222::-;;14181:2;14170:9;14166:18;14158:26;;14194:71;14262:1;14251:9;14247:17;14238:6;14194:71;:::i;:::-;14148:124;;;;:::o;14278:214::-;;14405:2;14394:9;14390:18;14382:26;;14418:67;14482:1;14471:9;14467:17;14458:6;14418:67;:::i;:::-;14372:120;;;;:::o;14498:99::-;;14584:5;14578:12;14568:22;;14557:40;;;:::o;14603:169::-;;14721:6;14716:3;14709:19;14761:4;14756:3;14752:14;14737:29;;14699:73;;;;:::o;14778:305::-;;14837:20;14855:1;14837:20;:::i;:::-;14832:25;;14871:20;14889:1;14871:20;:::i;:::-;14866:25;;15025:1;14957:66;14953:74;14950:1;14947:81;14944:2;;;15031:18;;:::i;:::-;14944:2;15075:1;15072;15068:9;15061:16;;14822:261;;;;:::o;15089:185::-;;15146:20;15164:1;15146:20;:::i;:::-;15141:25;;15180:20;15198:1;15180:20;:::i;:::-;15175:25;;15219:1;15209:2;;15224:18;;:::i;:::-;15209:2;15266:1;15263;15259:9;15254:14;;15131:143;;;;:::o;15280:348::-;;15343:20;15361:1;15343:20;:::i;:::-;15338:25;;15377:20;15395:1;15377:20;:::i;:::-;15372:25;;15565:1;15497:66;15493:74;15490:1;15487:81;15482:1;15475:9;15468:17;15464:105;15461:2;;;15572:18;;:::i;:::-;15461:2;15620:1;15617;15613:9;15602:20;;15328:300;;;;:::o;15634:96::-;;15700:24;15718:5;15700:24;:::i;:::-;15689:35;;15679:51;;;:::o;15736:90::-;;15813:5;15806:13;15799:21;15788:32;;15778:48;;;:::o;15832:126::-;;15909:42;15902:5;15898:54;15887:65;;15877:81;;;:::o;15964:77::-;;16030:5;16019:16;;16009:32;;;:::o;16047:86::-;;16122:4;16115:5;16111:16;16100:27;;16090:43;;;:::o;16139:180::-;;16249:64;16307:5;16249:64;:::i;:::-;16236:77;;16226:93;;;:::o;16325:140::-;;16435:24;16453:5;16435:24;:::i;:::-;16422:37;;16412:53;;;:::o;16471:307::-;16539:1;16549:113;16563:6;16560:1;16557:13;16549:113;;;16648:1;16643:3;16639:11;16633:18;16629:1;16624:3;16620:11;16613:39;16585:2;16582:1;16578:10;16573:15;;16549:113;;;16680:6;16677:1;16674:13;16671:2;;;16760:1;16751:6;16746:3;16742:16;16735:27;16671:2;16520:258;;;;:::o;16784:320::-;;16865:1;16859:4;16855:12;16845:22;;16912:1;16906:4;16902:12;16933:18;16923:2;;16989:4;16981:6;16977:17;16967:27;;16923:2;17051;17043:6;17040:14;17020:18;17017:38;17014:2;;;17070:18;;:::i;:::-;17014:2;16835:269;;;;:::o;17110:180::-;17158:77;17155:1;17148:88;17255:4;17252:1;17245:15;17279:4;17276:1;17269:15;17296:180;17344:77;17341:1;17334:88;17441:4;17438:1;17431:15;17465:4;17462:1;17455:15;17482:180;17530:77;17527:1;17520:88;17627:4;17624:1;17617:15;17651:4;17648:1;17641:15;17668:102;;17760:2;17756:7;17751:2;17744:5;17740:14;17736:28;17726:38;;17716:54;;;:::o;17776:222::-;17916:34;17912:1;17904:6;17900:14;17893:58;17985:5;17980:2;17972:6;17968:15;17961:30;17882:116;:::o;18004:225::-;18144:34;18140:1;18132:6;18128:14;18121:58;18213:8;18208:2;18200:6;18196:15;18189:33;18110:119;:::o;18235:221::-;18375:34;18371:1;18363:6;18359:14;18352:58;18444:4;18439:2;18431:6;18427:15;18420:29;18341:115;:::o;18462:244::-;18602:34;18598:1;18590:6;18586:14;18579:58;18671:27;18666:2;18658:6;18654:15;18647:52;18568:138;:::o;18712:225::-;18852:34;18848:1;18840:6;18836:14;18829:58;18921:8;18916:2;18908:6;18904:15;18897:33;18818:119;:::o;18943:227::-;19083:34;19079:1;19071:6;19067:14;19060:58;19152:10;19147:2;19139:6;19135:15;19128:35;19049:121;:::o;19176:182::-;19316:34;19312:1;19304:6;19300:14;19293:58;19282:76;:::o;19364:224::-;19504:34;19500:1;19492:6;19488:14;19481:58;19573:7;19568:2;19560:6;19556:15;19549:32;19470:118;:::o;19594:223::-;19734:34;19730:1;19722:6;19718:14;19711:58;19803:6;19798:2;19790:6;19786:15;19779:31;19700:117;:::o;19823:231::-;19963:34;19959:1;19951:6;19947:14;19940:58;20032:14;20027:2;20019:6;20015:15;20008:39;19929:125;:::o;20060:224::-;20200:34;20196:1;20188:6;20184:14;20177:58;20269:7;20264:2;20256:6;20252:15;20245:32;20166:118;:::o;20290:122::-;20363:24;20381:5;20363:24;:::i;:::-;20356:5;20353:35;20343:2;;20402:1;20399;20392:12;20343:2;20333:79;:::o;20418:116::-;20488:21;20503:5;20488:21;:::i;:::-;20481:5;20478:32;20468:2;;20524:1;20521;20514:12;20468:2;20458:76;:::o;20540:122::-;20613:24;20631:5;20613:24;:::i;:::-;20606:5;20603:35;20593:2;;20652:1;20649;20642:12;20593:2;20583:79;:::o

Swarm Source

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