ETH Price: $3,487.68 (+3.45%)
Gas: 3 Gwei

Token

FORCE (FORCE)
 

Overview

Max Total Supply

454,545,454,545,454 FORCE

Holders

488

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
272,698,193,341.458731040495277747 FORCE

Value
$0.00
0xa1ac562c9017ba6255a7dbb87e8e22055cac423d
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:
FORCE

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-04
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions 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);
    }
}

// File: force.sol



/*
___  ___              _   _                            
|  \/  |             | | | |                           
| .  . | __ _ _   _  | |_| |__   ___                   
| |\/| |/ _` | | | | | __| '_ \ / _ \                  
| |  | | (_| | |_| | | |_| | | |  __/                  
\_|  |_/\__,_|\__, |  \__|_| |_|\___|                  
               __/ |                                   
              |___/                                    

  _ ______ ___________  _____  _____                   
 | ||  ___|  _  | ___ \/  __ \|  ___|                  
/ __) |_  | | | | |_/ /| /  \/| |__                    
\__ \  _| | | | |    / | |    |  __|                   
(   / |   \ \_/ / |\ \ | \__/\| |___                   
 |_|\_|    \___/\_| \_| \____/\____/                   


______                 _ _   _                         
| ___ \               (_) | | |                        
| |_/ / ___  __      ___| |_| |__    _   _  ___  _   _ 
| ___ \/ _ \ \ \ /\ / / | __| '_ \  | | | |/ _ \| | | |
| |_/ /  __/  \ V  V /| | |_| | | | | |_| | (_) | |_| |
\____/ \___|   \_/\_/ |_|\__|_| |_|  \__, |\___/ \__,_|
                                      __/ |            
                                     |___/             
                                     
*/          
pragma solidity =0.8.17;



contract FORCE is ERC20, Ownable {
    constructor() ERC20("FORCE", "FORCE"){}

    /// turn on/off contributions
    bool public enableForce;

    /// a minimum contribution to participate in the presale
    uint256 public constant MIN_CONTRIBUTION = .1 ether;

    /// limit the maximum contribution for each wallet
    uint256 public constant MAX_CONTRIBUTION = 1 ether;

    /// the maximum amount of eth that this contract will accept for presale
    uint256 public HARD_CAP = 40 ether;

    /// total number of tokens available
    uint256 public constant MAX_SUPPLY = 454545454545454 * 10 ** 18;

    /// 50% of tokens reserved for presale
    uint256 public constant PRESALE_SUPPLY = 227272727272727 * 10 ** 18;

    /// 50% of tokens reserved for LP and dev mint
    /// 50%= 35% LP + 10% team + 5% marketing
    uint256 public constant RESERVE_MAX_SUPPLY = 227272727272727 * 10 ** 18;

    /// used to track the total contributions for the presale
    uint256 public TOTAL_CONTRIBUTED;

    /// used to track the total number of contributoors
    uint256 public NUMBER_OF_CONTRIBUTOORS;

    mapping(address => bool) public whiteLists;

    /// a struct used to keep track of each contributoors address and contribution amount
    struct Contribution {
        address addr;
        uint256 amount;
    }

    /// mapping of contributions
    mapping (uint256 => Contribution) public contribution;

    /// index of an address to it's contribition information
    mapping (address => uint256) public contributoor;

    /// collect presale contributions
    function sendToPresale() public payable {
        require (enableForce, "Force is not ready for you");
        require(whiteLists[msg.sender], "Force is not strong with you ! Be Gone !");

        /// look up the sender's current contribution amount in the mapping
        uint256 currentContribution = contribution[contributoor[msg.sender]].amount;

        /// initialize a contribution index so we can keep track of this address' contributions
        uint256 contributionIndex;

        require(msg.value >= MIN_CONTRIBUTION, "Imperial credit too low");

        /// enforce per-wallet contribution limit
        require (msg.value + currentContribution <= MAX_CONTRIBUTION, "Too many Imperial Credits");

        /// enforce hard cap
        require (msg.value + TOTAL_CONTRIBUTED <= HARD_CAP, "Too many Imperial Credits"); 

        if (contributoor[msg.sender] != 0){
            /// no need to increase the number of contributors since this person already added
            contributionIndex = contributoor[msg.sender];
        } else {
            /// keep track of each new contributor with a unique index
            contributionIndex = NUMBER_OF_CONTRIBUTOORS + 1;
            NUMBER_OF_CONTRIBUTOORS++;
        }

        /// add the contribution to the amount contributed
        TOTAL_CONTRIBUTED = TOTAL_CONTRIBUTED + msg.value;

        /// keep track of the address' contributions so far
        contributoor[msg.sender] = contributionIndex;
        contribution[contributionIndex].addr = msg.sender;
        contribution[contributionIndex].amount += msg.value;
    }

    function airdropPresale() external onlyOwner {

        /// determine the price per token
        uint256 pricePerToken = (TOTAL_CONTRIBUTED * 10 ** 18)/PRESALE_SUPPLY;

        /// loop over each contribution and distribute tokens
        for (uint256 i = 1; i <= NUMBER_OF_CONTRIBUTOORS; i++) {

            /// convert contribution to 18 decimals
            uint256 contributionAmount = contribution[i].amount * 10 ** 18;

            /// calculate the percentage of the pool based on the address' contribution
            uint256 numberOfTokensToMint = contributionAmount/pricePerToken;

            /// mint the tokens to the address
            _giveforce(contribution[i].addr, numberOfTokensToMint);
        }
    }

    /// dev mint the remainder of the pool to round out the supply
    function devMint() external onlyOwner {

       /// calculate the remaining supply
        uint256 numberToMint = MAX_SUPPLY - totalSupply();
        
        /// don't allow the dev mint until the tokens have been airdropped
        require (numberToMint <= RESERVE_MAX_SUPPLY, "Dev mint limited to reserve max");

        /// mint the remaining supply to the dev's wallet
        _giveforce(msg.sender, numberToMint);
    }

     /// set whether or not the contract allows contributions
    function setForce(bool _value) external onlyOwner {
        enableForce = _value;
    }

    function setHardCAP(uint256 _hcap) external onlyOwner {
        require(_hcap <= 50 ether && _hcap >= 40 ether, "Incorrect HARD CAP");
        HARD_CAP = _hcap;
    }

      function whiteList(address _address) external onlyOwner{
        whiteLists[_address] = true;
    }

    function addBatchWhiteList(address[] calldata _address) external onlyOwner {
        for(uint i = 0; i < _address.length; i++) {
            whiteLists[_address[i]] = true;
        }
    }

    /// if there are not enough contributions or we decide this sucks, refund everyone their eth
    function refundEveryone() external onlyOwner {
        for (uint256 i = 1; i <= NUMBER_OF_CONTRIBUTOORS; i++) {
            address payable refundAddress = payable(contribution[i].addr);
            
            /// refund the contribution
            refundAddress.transfer(contribution[i].amount);
        }
    }

    function withdraw() public onlyOwner {
        uint256 contractBalance = address(this).balance;
        bool success = true;
        (success, ) = payable(owner()).call{value: contractBalance}("");
        require(success, "Transfer failed");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"HARD_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CONTRIBUTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_CONTRIBUTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NUMBER_OF_CONTRIBUTOORS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_CONTRIBUTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"addBatchWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropPresale","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"contribution","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contributoor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableForce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"refundEveryone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendToPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setForce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hcap","type":"uint256"}],"name":"setHardCAP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteLists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405268022b1c8c1227a000006006553480156200001e57600080fd5b506040518060400160405280600581526020017f464f5243450000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f464f52434500000000000000000000000000000000000000000000000000000081525081600390816200009c91906200041f565b508060049081620000ae91906200041f565b505050620000d1620000c5620000d760201b60201c565b620000df60201b60201c565b62000506565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200022757607f821691505b6020821081036200023d576200023c620001df565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002a77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000268565b620002b3868362000268565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000300620002fa620002f484620002cb565b620002d5565b620002cb565b9050919050565b6000819050919050565b6200031c83620002df565b620003346200032b8262000307565b84845462000275565b825550505050565b600090565b6200034b6200033c565b6200035881848462000311565b505050565b5b8181101562000380576200037460008262000341565b6001810190506200035e565b5050565b601f821115620003cf57620003998162000243565b620003a48462000258565b81016020851015620003b4578190505b620003cc620003c38562000258565b8301826200035d565b50505b505050565b600082821c905092915050565b6000620003f460001984600802620003d4565b1980831691505092915050565b60006200040f8383620003e1565b9150826002028217905092915050565b6200042a82620001a5565b67ffffffffffffffff811115620004465762000445620001b0565b5b6200045282546200020e565b6200045f82828562000384565b600060209050601f83116001811462000497576000841562000482578287015190505b6200048e858262000401565b865550620004fe565b601f198416620004a78662000243565b60005b82811015620004d157848901518255600182019150602085019450602081019050620004aa565b86831015620004f15784890151620004ed601f891682620003e1565b8355505b6001600288020188555050505b505050505050565b612c2080620005166000396000f3fe6080604052600436106102045760003560e01c806370a082311161011857806395d89b41116100a0578063dd62ed3e1161006f578063dd62ed3e1461072c578063e326145414610769578063e8709c4014610780578063f2fde38b146107be578063fa4a5c16146107e757610204565b806395d89b411461065c578063a457c2d714610687578063a9059cbb146106c4578063c26993261461070157610204565b80637c69e207116100e75780637c69e207146105ad5780638512747d146105c45780638da5cb5b146105db57806394a857b71461060657806394d95f8f1461063157610204565b806370a0823114610505578063715018a61461054257806372c985cb1461055957806373138e4f1461058257610204565b8063372c12b11161019b5780633dfa10f91161016a5780633dfa10f91461042b57806340650c9114610468578063511f07261461049357806353dc840b1461049d5780635ea06028146104da57610204565b8063372c12b11461038357806339509351146103ac5780633a03171c146103e95780633ccfd60b1461041457610204565b80631e570456116101d75780631e570456146102c757806323b872dd146102f0578063313ce5671461032d57806332cb6b0c1461035857610204565b8063044f910c1461020957806306fdde0314610234578063095ea7b31461025f57806318160ddd1461029c575b600080fd5b34801561021557600080fd5b5061021e610810565b60405161022b9190611cdf565b60405180910390f35b34801561024057600080fd5b50610249610816565b6040516102569190611d8a565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190611e40565b6108a8565b6040516102939190611e9b565b60405180910390f35b3480156102a857600080fd5b506102b16108cb565b6040516102be9190611cdf565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e99190611ee2565b6108d5565b005b3480156102fc57600080fd5b5061031760048036038101906103129190611f0f565b6108fa565b6040516103249190611e9b565b60405180910390f35b34801561033957600080fd5b50610342610929565b60405161034f9190611f7e565b60405180910390f35b34801561036457600080fd5b5061036d610932565b60405161037a9190611cdf565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190611f99565b610944565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190611e40565b6109a7565b6040516103e09190611e9b565b60405180910390f35b3480156103f557600080fd5b506103fe6109de565b60405161040b9190611cdf565b60405180910390f35b34801561042057600080fd5b506104296109e4565b005b34801561043757600080fd5b50610452600480360381019061044d9190611f99565b610aae565b60405161045f9190611cdf565b60405180910390f35b34801561047457600080fd5b5061047d610ac6565b60405161048a9190611cdf565b60405180910390f35b61049b610ad2565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190611f99565b610e92565b6040516104d19190611e9b565b60405180910390f35b3480156104e657600080fd5b506104ef610eb2565b6040516104fc9190611cdf565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190611f99565b610eb8565b6040516105399190611cdf565b60405180910390f35b34801561054e57600080fd5b50610557610f00565b005b34801561056557600080fd5b50610580600480360381019061057b919061202b565b610f14565b005b34801561058e57600080fd5b50610597610fc1565b6040516105a49190611cdf565b60405180910390f35b3480156105b957600080fd5b506105c2610fd3565b005b3480156105d057600080fd5b506105d961105e565b005b3480156105e757600080fd5b506105f0611140565b6040516105fd9190612087565b60405180910390f35b34801561061257600080fd5b5061061b61116a565b6040516106289190611e9b565b60405180910390f35b34801561063d57600080fd5b5061064661117d565b6040516106539190611cdf565b60405180910390f35b34801561066857600080fd5b50610671611189565b60405161067e9190611d8a565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190611e40565b61121b565b6040516106bb9190611e9b565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190611e40565b611292565b6040516106f89190611e9b565b60405180910390f35b34801561070d57600080fd5b506107166112b5565b6040516107239190611cdf565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e91906120a2565b6112c7565b6040516107609190611cdf565b60405180910390f35b34801561077557600080fd5b5061077e61134e565b005b34801561078c57600080fd5b506107a760048036038101906107a291906120e2565b611415565b6040516107b592919061210f565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190611f99565b611459565b005b3480156107f357600080fd5b5061080e600480360381019061080991906120e2565b6114dc565b005b60085481565b60606003805461082590612167565b80601f016020809104026020016040519081016040528092919081815260200182805461085190612167565b801561089e5780601f106108735761010080835404028352916020019161089e565b820191906000526020600020905b81548152906001019060200180831161088157829003601f168201915b5050505050905090565b6000806108b361154f565b90506108c0818585611557565b600191505092915050565b6000600254905090565b6108dd611720565b80600560146101000a81548160ff02191690831515021790555050565b60008061090561154f565b905061091285828561179e565b61091d85858561182a565b60019150509392505050565b60006012905090565b6d16692b93862b9ddd515cbbf8000081565b61094c611720565b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806109b261154f565b90506109d38185856109c485896112c7565b6109ce91906121c7565b611557565b600191505092915050565b60065481565b6109ec611720565b60004790506000600190506109ff611140565b73ffffffffffffffffffffffffffffffffffffffff1682604051610a229061222c565b60006040518083038185875af1925050503d8060008114610a5f576040519150601f19603f3d011682016040523d82523d6000602084013e610a64565b606091505b50508091505080610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa19061228d565b60405180910390fd5b5050565b600b6020528060005260406000206000915090505481565b67016345785d8a000081565b600560149054906101000a900460ff16610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b18906122f9565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba49061238b565b60405180910390fd5b6000600a6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548152602001908152602001600020600101549050600067016345785d8a0000341015610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b906123f7565b60405180910390fd5b670de0b6b3a76400008234610c6991906121c7565b1115610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190612463565b60405180910390fd5b60065460075434610cbb91906121c7565b1115610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612463565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d8a57600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610db4565b6001600854610d9991906121c7565b905060086000815480929190610dae90612483565b91905055505b34600754610dc291906121c7565b60078190555080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600a600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034600a60008381526020019081526020016000206001016000828254610e8791906121c7565b925050819055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b60075481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f08611720565b610f126000611aa0565b565b610f1c611720565b60005b82829050811015610fbc57600160096000858585818110610f4357610f426124cb565b5b9050602002016020810190610f589190611f99565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fb490612483565b915050610f1f565b505050565b6d0b3495c9c315ceeea8ae5dfc000081565b610fdb611720565b6000610fe56108cb565b6d16692b93862b9ddd515cbbf80000610ffe91906124fa565b90506d0b3495c9c315ceeea8ae5dfc0000811115611051576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110489061257a565b60405180910390fd5b61105b3382611b66565b50565b611066611720565b60006d0b3495c9c315ceeea8ae5dfc0000670de0b6b3a764000060075461108d919061259a565b611097919061260b565b90506000600190505b600854811161113c576000670de0b6b3a7640000600a6000848152602001908152602001600020600101546110d5919061259a565b9050600083826110e5919061260b565b9050611127600a600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611b66565b5050808061113490612483565b9150506110a0565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560149054906101000a900460ff1681565b670de0b6b3a764000081565b60606004805461119890612167565b80601f01602080910402602001604051908101604052809291908181526020018280546111c490612167565b80156112115780601f106111e657610100808354040283529160200191611211565b820191906000526020600020905b8154815290600101906020018083116111f457829003601f168201915b5050505050905090565b60008061122661154f565b9050600061123482866112c7565b905083811015611279576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611270906126ae565b60405180910390fd5b6112868286868403611557565b60019250505092915050565b60008061129d61154f565b90506112aa81858561182a565b600191505092915050565b6d0b3495c9c315ceeea8ae5dfc000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611356611720565b6000600190505b6008548111611412576000600a600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc600a6000858152602001908152602001600020600101549081150290604051600060405180830381858888f193505050501580156113fd573d6000803e3d6000fd5b5050808061140a90612483565b91505061135d565b50565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b611461611720565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790612740565b60405180910390fd5b6114d981611aa0565b50565b6114e4611720565b6802b5e3af16b18800008111158015611506575068022b1c8c1227a000008110155b611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c906127ac565b60405180910390fd5b8060068190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd9061283e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906128d0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117139190611cdf565b60405180910390a3505050565b61172861154f565b73ffffffffffffffffffffffffffffffffffffffff16611746611140565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117939061293c565b60405180910390fd5b565b60006117aa84846112c7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118245781811015611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d906129a8565b60405180910390fd5b6118238484848403611557565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090612a3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90612acc565b60405180910390fd5b611913838383611cbc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090612b5e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a879190611cdf565b60405180910390a3611a9a848484611cc1565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90612bca565b60405180910390fd5b611be160008383611cbc565b8060026000828254611bf391906121c7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ca49190611cdf565b60405180910390a3611cb860008383611cc1565b5050565b505050565b505050565b6000819050919050565b611cd981611cc6565b82525050565b6000602082019050611cf46000830184611cd0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d34578082015181840152602081019050611d19565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d5c82611cfa565b611d668185611d05565b9350611d76818560208601611d16565b611d7f81611d40565b840191505092915050565b60006020820190508181036000830152611da48184611d51565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611de182611db6565b9050919050565b611df181611dd6565b8114611dfc57600080fd5b50565b600081359050611e0e81611de8565b92915050565b611e1d81611cc6565b8114611e2857600080fd5b50565b600081359050611e3a81611e14565b92915050565b60008060408385031215611e5757611e56611dac565b5b6000611e6585828601611dff565b9250506020611e7685828601611e2b565b9150509250929050565b60008115159050919050565b611e9581611e80565b82525050565b6000602082019050611eb06000830184611e8c565b92915050565b611ebf81611e80565b8114611eca57600080fd5b50565b600081359050611edc81611eb6565b92915050565b600060208284031215611ef857611ef7611dac565b5b6000611f0684828501611ecd565b91505092915050565b600080600060608486031215611f2857611f27611dac565b5b6000611f3686828701611dff565b9350506020611f4786828701611dff565b9250506040611f5886828701611e2b565b9150509250925092565b600060ff82169050919050565b611f7881611f62565b82525050565b6000602082019050611f936000830184611f6f565b92915050565b600060208284031215611faf57611fae611dac565b5b6000611fbd84828501611dff565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611feb57611fea611fc6565b5b8235905067ffffffffffffffff81111561200857612007611fcb565b5b60208301915083602082028301111561202457612023611fd0565b5b9250929050565b6000806020838503121561204257612041611dac565b5b600083013567ffffffffffffffff8111156120605761205f611db1565b5b61206c85828601611fd5565b92509250509250929050565b61208181611dd6565b82525050565b600060208201905061209c6000830184612078565b92915050565b600080604083850312156120b9576120b8611dac565b5b60006120c785828601611dff565b92505060206120d885828601611dff565b9150509250929050565b6000602082840312156120f8576120f7611dac565b5b600061210684828501611e2b565b91505092915050565b60006040820190506121246000830185612078565b6121316020830184611cd0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061217f57607f821691505b60208210810361219257612191612138565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121d282611cc6565b91506121dd83611cc6565b92508282019050808211156121f5576121f4612198565b5b92915050565b600081905092915050565b50565b60006122166000836121fb565b915061222182612206565b600082019050919050565b600061223782612209565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612277600f83611d05565b915061228282612241565b602082019050919050565b600060208201905081810360008301526122a68161226a565b9050919050565b7f466f726365206973206e6f7420726561647920666f7220796f75000000000000600082015250565b60006122e3601a83611d05565b91506122ee826122ad565b602082019050919050565b60006020820190508181036000830152612312816122d6565b9050919050565b7f466f726365206973206e6f74207374726f6e67207769746820796f752021204260008201527f6520476f6e652021000000000000000000000000000000000000000000000000602082015250565b6000612375602883611d05565b915061238082612319565b604082019050919050565b600060208201905081810360008301526123a481612368565b9050919050565b7f496d70657269616c2063726564697420746f6f206c6f77000000000000000000600082015250565b60006123e1601783611d05565b91506123ec826123ab565b602082019050919050565b60006020820190508181036000830152612410816123d4565b9050919050565b7f546f6f206d616e7920496d70657269616c204372656469747300000000000000600082015250565b600061244d601983611d05565b915061245882612417565b602082019050919050565b6000602082019050818103600083015261247c81612440565b9050919050565b600061248e82611cc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124c0576124bf612198565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061250582611cc6565b915061251083611cc6565b925082820390508181111561252857612527612198565b5b92915050565b7f446576206d696e74206c696d6974656420746f2072657365727665206d617800600082015250565b6000612564601f83611d05565b915061256f8261252e565b602082019050919050565b6000602082019050818103600083015261259381612557565b9050919050565b60006125a582611cc6565b91506125b083611cc6565b92508282026125be81611cc6565b915082820484148315176125d5576125d4612198565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061261682611cc6565b915061262183611cc6565b925082612631576126306125dc565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612698602583611d05565b91506126a38261263c565b604082019050919050565b600060208201905081810360008301526126c78161268b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061272a602683611d05565b9150612735826126ce565b604082019050919050565b600060208201905081810360008301526127598161271d565b9050919050565b7f496e636f72726563742048415244204341500000000000000000000000000000600082015250565b6000612796601283611d05565b91506127a182612760565b602082019050919050565b600060208201905081810360008301526127c581612789565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612828602483611d05565b9150612833826127cc565b604082019050919050565b600060208201905081810360008301526128578161281b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006128ba602283611d05565b91506128c58261285e565b604082019050919050565b600060208201905081810360008301526128e9816128ad565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612926602083611d05565b9150612931826128f0565b602082019050919050565b6000602082019050818103600083015261295581612919565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612992601d83611d05565b915061299d8261295c565b602082019050919050565b600060208201905081810360008301526129c181612985565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a24602583611d05565b9150612a2f826129c8565b604082019050919050565b60006020820190508181036000830152612a5381612a17565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612ab6602383611d05565b9150612ac182612a5a565b604082019050919050565b60006020820190508181036000830152612ae581612aa9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b48602683611d05565b9150612b5382612aec565b604082019050919050565b60006020820190508181036000830152612b7781612b3b565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612bb4601f83611d05565b9150612bbf82612b7e565b602082019050919050565b60006020820190508181036000830152612be381612ba7565b905091905056fea264697066735822122038ff7ced0748e1ac2bf64f51513874763a8da9d4b9f85a543595d81c3766449264736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102045760003560e01c806370a082311161011857806395d89b41116100a0578063dd62ed3e1161006f578063dd62ed3e1461072c578063e326145414610769578063e8709c4014610780578063f2fde38b146107be578063fa4a5c16146107e757610204565b806395d89b411461065c578063a457c2d714610687578063a9059cbb146106c4578063c26993261461070157610204565b80637c69e207116100e75780637c69e207146105ad5780638512747d146105c45780638da5cb5b146105db57806394a857b71461060657806394d95f8f1461063157610204565b806370a0823114610505578063715018a61461054257806372c985cb1461055957806373138e4f1461058257610204565b8063372c12b11161019b5780633dfa10f91161016a5780633dfa10f91461042b57806340650c9114610468578063511f07261461049357806353dc840b1461049d5780635ea06028146104da57610204565b8063372c12b11461038357806339509351146103ac5780633a03171c146103e95780633ccfd60b1461041457610204565b80631e570456116101d75780631e570456146102c757806323b872dd146102f0578063313ce5671461032d57806332cb6b0c1461035857610204565b8063044f910c1461020957806306fdde0314610234578063095ea7b31461025f57806318160ddd1461029c575b600080fd5b34801561021557600080fd5b5061021e610810565b60405161022b9190611cdf565b60405180910390f35b34801561024057600080fd5b50610249610816565b6040516102569190611d8a565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190611e40565b6108a8565b6040516102939190611e9b565b60405180910390f35b3480156102a857600080fd5b506102b16108cb565b6040516102be9190611cdf565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e99190611ee2565b6108d5565b005b3480156102fc57600080fd5b5061031760048036038101906103129190611f0f565b6108fa565b6040516103249190611e9b565b60405180910390f35b34801561033957600080fd5b50610342610929565b60405161034f9190611f7e565b60405180910390f35b34801561036457600080fd5b5061036d610932565b60405161037a9190611cdf565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190611f99565b610944565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190611e40565b6109a7565b6040516103e09190611e9b565b60405180910390f35b3480156103f557600080fd5b506103fe6109de565b60405161040b9190611cdf565b60405180910390f35b34801561042057600080fd5b506104296109e4565b005b34801561043757600080fd5b50610452600480360381019061044d9190611f99565b610aae565b60405161045f9190611cdf565b60405180910390f35b34801561047457600080fd5b5061047d610ac6565b60405161048a9190611cdf565b60405180910390f35b61049b610ad2565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190611f99565b610e92565b6040516104d19190611e9b565b60405180910390f35b3480156104e657600080fd5b506104ef610eb2565b6040516104fc9190611cdf565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190611f99565b610eb8565b6040516105399190611cdf565b60405180910390f35b34801561054e57600080fd5b50610557610f00565b005b34801561056557600080fd5b50610580600480360381019061057b919061202b565b610f14565b005b34801561058e57600080fd5b50610597610fc1565b6040516105a49190611cdf565b60405180910390f35b3480156105b957600080fd5b506105c2610fd3565b005b3480156105d057600080fd5b506105d961105e565b005b3480156105e757600080fd5b506105f0611140565b6040516105fd9190612087565b60405180910390f35b34801561061257600080fd5b5061061b61116a565b6040516106289190611e9b565b60405180910390f35b34801561063d57600080fd5b5061064661117d565b6040516106539190611cdf565b60405180910390f35b34801561066857600080fd5b50610671611189565b60405161067e9190611d8a565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190611e40565b61121b565b6040516106bb9190611e9b565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190611e40565b611292565b6040516106f89190611e9b565b60405180910390f35b34801561070d57600080fd5b506107166112b5565b6040516107239190611cdf565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e91906120a2565b6112c7565b6040516107609190611cdf565b60405180910390f35b34801561077557600080fd5b5061077e61134e565b005b34801561078c57600080fd5b506107a760048036038101906107a291906120e2565b611415565b6040516107b592919061210f565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190611f99565b611459565b005b3480156107f357600080fd5b5061080e600480360381019061080991906120e2565b6114dc565b005b60085481565b60606003805461082590612167565b80601f016020809104026020016040519081016040528092919081815260200182805461085190612167565b801561089e5780601f106108735761010080835404028352916020019161089e565b820191906000526020600020905b81548152906001019060200180831161088157829003601f168201915b5050505050905090565b6000806108b361154f565b90506108c0818585611557565b600191505092915050565b6000600254905090565b6108dd611720565b80600560146101000a81548160ff02191690831515021790555050565b60008061090561154f565b905061091285828561179e565b61091d85858561182a565b60019150509392505050565b60006012905090565b6d16692b93862b9ddd515cbbf8000081565b61094c611720565b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806109b261154f565b90506109d38185856109c485896112c7565b6109ce91906121c7565b611557565b600191505092915050565b60065481565b6109ec611720565b60004790506000600190506109ff611140565b73ffffffffffffffffffffffffffffffffffffffff1682604051610a229061222c565b60006040518083038185875af1925050503d8060008114610a5f576040519150601f19603f3d011682016040523d82523d6000602084013e610a64565b606091505b50508091505080610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa19061228d565b60405180910390fd5b5050565b600b6020528060005260406000206000915090505481565b67016345785d8a000081565b600560149054906101000a900460ff16610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b18906122f9565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba49061238b565b60405180910390fd5b6000600a6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548152602001908152602001600020600101549050600067016345785d8a0000341015610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b906123f7565b60405180910390fd5b670de0b6b3a76400008234610c6991906121c7565b1115610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190612463565b60405180910390fd5b60065460075434610cbb91906121c7565b1115610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612463565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d8a57600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610db4565b6001600854610d9991906121c7565b905060086000815480929190610dae90612483565b91905055505b34600754610dc291906121c7565b60078190555080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600a600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034600a60008381526020019081526020016000206001016000828254610e8791906121c7565b925050819055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b60075481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f08611720565b610f126000611aa0565b565b610f1c611720565b60005b82829050811015610fbc57600160096000858585818110610f4357610f426124cb565b5b9050602002016020810190610f589190611f99565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fb490612483565b915050610f1f565b505050565b6d0b3495c9c315ceeea8ae5dfc000081565b610fdb611720565b6000610fe56108cb565b6d16692b93862b9ddd515cbbf80000610ffe91906124fa565b90506d0b3495c9c315ceeea8ae5dfc0000811115611051576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110489061257a565b60405180910390fd5b61105b3382611b66565b50565b611066611720565b60006d0b3495c9c315ceeea8ae5dfc0000670de0b6b3a764000060075461108d919061259a565b611097919061260b565b90506000600190505b600854811161113c576000670de0b6b3a7640000600a6000848152602001908152602001600020600101546110d5919061259a565b9050600083826110e5919061260b565b9050611127600a600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611b66565b5050808061113490612483565b9150506110a0565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560149054906101000a900460ff1681565b670de0b6b3a764000081565b60606004805461119890612167565b80601f01602080910402602001604051908101604052809291908181526020018280546111c490612167565b80156112115780601f106111e657610100808354040283529160200191611211565b820191906000526020600020905b8154815290600101906020018083116111f457829003601f168201915b5050505050905090565b60008061122661154f565b9050600061123482866112c7565b905083811015611279576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611270906126ae565b60405180910390fd5b6112868286868403611557565b60019250505092915050565b60008061129d61154f565b90506112aa81858561182a565b600191505092915050565b6d0b3495c9c315ceeea8ae5dfc000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611356611720565b6000600190505b6008548111611412576000600a600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc600a6000858152602001908152602001600020600101549081150290604051600060405180830381858888f193505050501580156113fd573d6000803e3d6000fd5b5050808061140a90612483565b91505061135d565b50565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b611461611720565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790612740565b60405180910390fd5b6114d981611aa0565b50565b6114e4611720565b6802b5e3af16b18800008111158015611506575068022b1c8c1227a000008110155b611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c906127ac565b60405180910390fd5b8060068190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd9061283e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906128d0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117139190611cdf565b60405180910390a3505050565b61172861154f565b73ffffffffffffffffffffffffffffffffffffffff16611746611140565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117939061293c565b60405180910390fd5b565b60006117aa84846112c7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118245781811015611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d906129a8565b60405180910390fd5b6118238484848403611557565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090612a3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90612acc565b60405180910390fd5b611913838383611cbc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090612b5e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a879190611cdf565b60405180910390a3611a9a848484611cc1565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90612bca565b60405180910390fd5b611be160008383611cbc565b8060026000828254611bf391906121c7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ca49190611cdf565b60405180910390a3611cb860008383611cc1565b5050565b505050565b505050565b6000819050919050565b611cd981611cc6565b82525050565b6000602082019050611cf46000830184611cd0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d34578082015181840152602081019050611d19565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d5c82611cfa565b611d668185611d05565b9350611d76818560208601611d16565b611d7f81611d40565b840191505092915050565b60006020820190508181036000830152611da48184611d51565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611de182611db6565b9050919050565b611df181611dd6565b8114611dfc57600080fd5b50565b600081359050611e0e81611de8565b92915050565b611e1d81611cc6565b8114611e2857600080fd5b50565b600081359050611e3a81611e14565b92915050565b60008060408385031215611e5757611e56611dac565b5b6000611e6585828601611dff565b9250506020611e7685828601611e2b565b9150509250929050565b60008115159050919050565b611e9581611e80565b82525050565b6000602082019050611eb06000830184611e8c565b92915050565b611ebf81611e80565b8114611eca57600080fd5b50565b600081359050611edc81611eb6565b92915050565b600060208284031215611ef857611ef7611dac565b5b6000611f0684828501611ecd565b91505092915050565b600080600060608486031215611f2857611f27611dac565b5b6000611f3686828701611dff565b9350506020611f4786828701611dff565b9250506040611f5886828701611e2b565b9150509250925092565b600060ff82169050919050565b611f7881611f62565b82525050565b6000602082019050611f936000830184611f6f565b92915050565b600060208284031215611faf57611fae611dac565b5b6000611fbd84828501611dff565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611feb57611fea611fc6565b5b8235905067ffffffffffffffff81111561200857612007611fcb565b5b60208301915083602082028301111561202457612023611fd0565b5b9250929050565b6000806020838503121561204257612041611dac565b5b600083013567ffffffffffffffff8111156120605761205f611db1565b5b61206c85828601611fd5565b92509250509250929050565b61208181611dd6565b82525050565b600060208201905061209c6000830184612078565b92915050565b600080604083850312156120b9576120b8611dac565b5b60006120c785828601611dff565b92505060206120d885828601611dff565b9150509250929050565b6000602082840312156120f8576120f7611dac565b5b600061210684828501611e2b565b91505092915050565b60006040820190506121246000830185612078565b6121316020830184611cd0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061217f57607f821691505b60208210810361219257612191612138565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121d282611cc6565b91506121dd83611cc6565b92508282019050808211156121f5576121f4612198565b5b92915050565b600081905092915050565b50565b60006122166000836121fb565b915061222182612206565b600082019050919050565b600061223782612209565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612277600f83611d05565b915061228282612241565b602082019050919050565b600060208201905081810360008301526122a68161226a565b9050919050565b7f466f726365206973206e6f7420726561647920666f7220796f75000000000000600082015250565b60006122e3601a83611d05565b91506122ee826122ad565b602082019050919050565b60006020820190508181036000830152612312816122d6565b9050919050565b7f466f726365206973206e6f74207374726f6e67207769746820796f752021204260008201527f6520476f6e652021000000000000000000000000000000000000000000000000602082015250565b6000612375602883611d05565b915061238082612319565b604082019050919050565b600060208201905081810360008301526123a481612368565b9050919050565b7f496d70657269616c2063726564697420746f6f206c6f77000000000000000000600082015250565b60006123e1601783611d05565b91506123ec826123ab565b602082019050919050565b60006020820190508181036000830152612410816123d4565b9050919050565b7f546f6f206d616e7920496d70657269616c204372656469747300000000000000600082015250565b600061244d601983611d05565b915061245882612417565b602082019050919050565b6000602082019050818103600083015261247c81612440565b9050919050565b600061248e82611cc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124c0576124bf612198565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061250582611cc6565b915061251083611cc6565b925082820390508181111561252857612527612198565b5b92915050565b7f446576206d696e74206c696d6974656420746f2072657365727665206d617800600082015250565b6000612564601f83611d05565b915061256f8261252e565b602082019050919050565b6000602082019050818103600083015261259381612557565b9050919050565b60006125a582611cc6565b91506125b083611cc6565b92508282026125be81611cc6565b915082820484148315176125d5576125d4612198565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061261682611cc6565b915061262183611cc6565b925082612631576126306125dc565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612698602583611d05565b91506126a38261263c565b604082019050919050565b600060208201905081810360008301526126c78161268b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061272a602683611d05565b9150612735826126ce565b604082019050919050565b600060208201905081810360008301526127598161271d565b9050919050565b7f496e636f72726563742048415244204341500000000000000000000000000000600082015250565b6000612796601283611d05565b91506127a182612760565b602082019050919050565b600060208201905081810360008301526127c581612789565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612828602483611d05565b9150612833826127cc565b604082019050919050565b600060208201905081810360008301526128578161281b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006128ba602283611d05565b91506128c58261285e565b604082019050919050565b600060208201905081810360008301526128e9816128ad565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612926602083611d05565b9150612931826128f0565b602082019050919050565b6000602082019050818103600083015261295581612919565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612992601d83611d05565b915061299d8261295c565b602082019050919050565b600060208201905081810360008301526129c181612985565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a24602583611d05565b9150612a2f826129c8565b604082019050919050565b60006020820190508181036000830152612a5381612a17565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612ab6602383611d05565b9150612ac182612a5a565b604082019050919050565b60006020820190508181036000830152612ae581612aa9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b48602683611d05565b9150612b5382612aec565b604082019050919050565b60006020820190508181036000830152612b7781612b3b565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612bb4601f83611d05565b9150612bbf82612b7e565b602082019050919050565b60006020820190508181036000830152612be381612ba7565b905091905056fea264697066735822122038ff7ced0748e1ac2bf64f51513874763a8da9d4b9f85a543595d81c3766449264736f6c63430008110033

Deployed Bytecode Sourcemap

21919:5831:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23005:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6651:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9002:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7771:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26481:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9783:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7613:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22473:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26757:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10487:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22388:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27494:253;;;;;;;;;;;;;:::i;:::-;;23436:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22135:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23532:1619;;;:::i;:::-;;23052:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22907:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7942:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19727:103;;;;;;;;;;;;;:::i;:::-;;26866:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22589:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25975:435;;;;;;;;;;;;;:::i;:::-;;25159:740;;;;;;;;;;;;;:::i;:::-;;19079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22041:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22251:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6870:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11228:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8275:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22764:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8531:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27164:322;;;;;;;;;;;;;:::i;:::-;;23312:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;19985:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26578:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23005:38;;;;:::o;6651:100::-;6705:13;6738:5;6731:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6651:100;:::o;9002:201::-;9085:4;9102:13;9118:12;:10;:12::i;:::-;9102:28;;9141:32;9150:5;9157:7;9166:6;9141:8;:32::i;:::-;9191:4;9184:11;;;9002:201;;;;:::o;7771:108::-;7832:7;7859:12;;7852:19;;7771:108;:::o;26481:89::-;18965:13;:11;:13::i;:::-;26556:6:::1;26542:11;;:20;;;;;;;;;;;;;;;;;;26481:89:::0;:::o;9783:295::-;9914:4;9931:15;9949:12;:10;:12::i;:::-;9931:30;;9972:38;9988:4;9994:7;10003:6;9972:15;:38::i;:::-;10021:27;10031:4;10037:2;10041:6;10021:9;:27::i;:::-;10066:4;10059:11;;;9783:295;;;;;:::o;7613:93::-;7671:5;7696:2;7689:9;;7613:93;:::o;22473:63::-;22510:26;22473:63;:::o;26757:101::-;18965:13;:11;:13::i;:::-;26846:4:::1;26823:10;:20;26834:8;26823:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;26757:101:::0;:::o;10487:238::-;10575:4;10592:13;10608:12;:10;:12::i;:::-;10592:28;;10631:64;10640:5;10647:7;10684:10;10656:25;10666:5;10673:7;10656:9;:25::i;:::-;:38;;;;:::i;:::-;10631:8;:64::i;:::-;10713:4;10706:11;;;10487:238;;;;:::o;22388:34::-;;;;:::o;27494:253::-;18965:13;:11;:13::i;:::-;27542:23:::1;27568:21;27542:47;;27600:12;27615:4;27600:19;;27652:7;:5;:7::i;:::-;27644:21;;27673:15;27644:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27630:63;;;;;27712:7;27704:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;27531:216;;27494:253::o:0;23436:48::-;;;;;;;;;;;;;;;;;:::o;22135:51::-;22178:8;22135:51;:::o;23532:1619::-;23592:11;;;;;;;;;;;23583:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;23653:10;:22;23664:10;23653:22;;;;;;;;;;;;;;;;;;;;;;;;;23645:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23810:27;23840:12;:38;23853:12;:24;23866:10;23853:24;;;;;;;;;;;;;;;;23840:38;;;;;;;;;;;:45;;;23810:75;;23995:25;22178:8;24041:9;:29;;24033:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22294:7;24183:19;24171:9;:31;;;;:::i;:::-;:51;;24162:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24337:8;;24316:17;;24304:9;:29;;;;:::i;:::-;:41;;24295:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24421:1;24393:12;:24;24406:10;24393:24;;;;;;;;;;;;;;;;:29;24389:393;;24554:12;:24;24567:10;24554:24;;;;;;;;;;;;;;;;24534:44;;24389:393;;;24729:1;24703:23;;:27;;;;:::i;:::-;24683:47;;24745:23;;:25;;;;;;;;;:::i;:::-;;;;;;24389:393;24894:9;24874:17;;:29;;;;:::i;:::-;24854:17;:49;;;;25004:17;24977:12;:24;24990:10;24977:24;;;;;;;;;;;;;;;:44;;;;25071:10;25032:12;:31;25045:17;25032:31;;;;;;;;;;;:36;;;:49;;;;;;;;;;;;;;;;;;25134:9;25092:12;:31;25105:17;25092:31;;;;;;;;;;;:38;;;:51;;;;;;;:::i;:::-;;;;;;;;23572:1579;;23532:1619::o;23052:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;22907:32::-;;;;:::o;7942:127::-;8016:7;8043:9;:18;8053:7;8043:18;;;;;;;;;;;;;;;;8036:25;;7942:127;;;:::o;19727:103::-;18965:13;:11;:13::i;:::-;19792:30:::1;19819:1;19792:18;:30::i;:::-;19727:103::o:0;26866:192::-;18965:13;:11;:13::i;:::-;26956:6:::1;26952:99;26972:8;;:15;;26968:1;:19;26952:99;;;27035:4;27009:10;:23;27020:8;;27029:1;27020:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27009:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;26989:3;;;;;:::i;:::-;;;;26952:99;;;;26866:192:::0;;:::o;22589:67::-;22630:26;22589:67;:::o;25975:435::-;18965:13;:11;:13::i;:::-;26069:20:::1;26105:13;:11;:13::i;:::-;22510:26;26092;;;;:::i;:::-;26069:49;;22809:26;26224:12;:34;;26215:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;26366:36;26377:10;26389:12;26366:10;:36::i;:::-;26013:397;25975:435::o:0;25159:740::-;18965:13;:11;:13::i;:::-;25260:21:::1;22630:26;25305:8;25285:17;;:28;;;;:::i;:::-;25284:45;;;;:::i;:::-;25260:69;;25410:9;25422:1;25410:13;;25405:487;25430:23;;25425:1;:28;25405:487;;25530:26;25584:8;25559:12;:15;25572:1;25559:15;;;;;;;;;;;:22;;;:33;;;;:::i;:::-;25530:62;;25698:28;25748:13;25729:18;:32;;;;:::i;:::-;25698:63;;25826:54;25837:12;:15;25850:1;25837:15;;;;;;;;;;;:20;;;;;;;;;;;;25859;25826:10;:54::i;:::-;25460:432;;25455:3;;;;;:::i;:::-;;;;25405:487;;;;25204:695;25159:740::o:0;19079:87::-;19125:7;19152:6;;;;;;;;;;;19145:13;;19079:87;:::o;22041:23::-;;;;;;;;;;;;;:::o;22251:50::-;22294:7;22251:50;:::o;6870:104::-;6926:13;6959:7;6952:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6870:104;:::o;11228:436::-;11321:4;11338:13;11354:12;:10;:12::i;:::-;11338:28;;11377:24;11404:25;11414:5;11421:7;11404:9;:25::i;:::-;11377:52;;11468:15;11448:16;:35;;11440:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11561:60;11570:5;11577:7;11605:15;11586:16;:34;11561:8;:60::i;:::-;11652:4;11645:11;;;;11228:436;;;;:::o;8275:193::-;8354:4;8371:13;8387:12;:10;:12::i;:::-;8371:28;;8410;8420:5;8427:2;8431:6;8410:9;:28::i;:::-;8456:4;8449:11;;;8275:193;;;;:::o;22764:71::-;22809:26;22764:71;:::o;8531:151::-;8620:7;8647:11;:18;8659:5;8647:18;;;;;;;;;;;;;;;:27;8666:7;8647:27;;;;;;;;;;;;;;;;8640:34;;8531:151;;;;:::o;27164:322::-;18965:13;:11;:13::i;:::-;27225:9:::1;27237:1;27225:13;;27220:259;27245:23;;27240:1;:28;27220:259;;27290:29;27330:12;:15;27343:1;27330:15;;;;;;;;;;;:20;;;;;;;;;;;;27290:61;;27421:13;:22;;:46;27444:12;:15;27457:1;27444:15;;;;;;;;;;;:22;;;27421:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27275:204;27270:3;;;;;:::i;:::-;;;;27220:259;;;;27164:322::o:0;23312:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19985:201::-;18965:13;:11;:13::i;:::-;20094:1:::1;20074:22;;:8;:22;;::::0;20066:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20150:28;20169:8;20150:18;:28::i;:::-;19985:201:::0;:::o;26578:169::-;18965:13;:11;:13::i;:::-;26660:8:::1;26651:5;:17;;:38;;;;;26681:8;26672:5;:17;;26651:38;26643:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26734:5;26723:8;:16;;;;26578:169:::0;:::o;4293:98::-;4346:7;4373:10;4366:17;;4293:98;:::o;15260:380::-;15413:1;15396:19;;:5;:19;;;15388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15494:1;15475:21;;:7;:21;;;15467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15578:6;15548:11;:18;15560:5;15548:18;;;;;;;;;;;;;;;:27;15567:7;15548:27;;;;;;;;;;;;;;;:36;;;;15616:7;15600:32;;15609:5;15600:32;;;15625:6;15600:32;;;;;;:::i;:::-;;;;;;;;15260:380;;;:::o;19244:132::-;19319:12;:10;:12::i;:::-;19308:23;;:7;:5;:7::i;:::-;:23;;;19300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19244:132::o;15931:453::-;16066:24;16093:25;16103:5;16110:7;16093:9;:25::i;:::-;16066:52;;16153:17;16133:16;:37;16129:248;;16215:6;16195:16;:26;;16187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16299:51;16308:5;16315:7;16343:6;16324:16;:25;16299:8;:51::i;:::-;16129:248;16055:329;15931:453;;;:::o;12134:840::-;12281:1;12265:18;;:4;:18;;;12257:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12358:1;12344:16;;:2;:16;;;12336:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12413:38;12434:4;12440:2;12444:6;12413:20;:38::i;:::-;12464:19;12486:9;:15;12496:4;12486:15;;;;;;;;;;;;;;;;12464:37;;12535:6;12520:11;:21;;12512:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12652:6;12638:11;:20;12620:9;:15;12630:4;12620:15;;;;;;;;;;;;;;;:38;;;;12855:6;12838:9;:13;12848:2;12838:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12905:2;12890:26;;12899:4;12890:26;;;12909:6;12890:26;;;;;;:::i;:::-;;;;;;;;12929:37;12949:4;12955:2;12959:6;12929:19;:37::i;:::-;12246:728;12134:840;;;:::o;20346:191::-;20420:16;20439:6;;;;;;;;;;;20420:25;;20465:8;20456:6;;:17;;;;;;;;;;;;;;;;;;20520:8;20489:40;;20510:8;20489:40;;;;;;;;;;;;20409:128;20346:191;:::o;13261:553::-;13369:1;13350:21;;:7;:21;;;13342:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13420:49;13449:1;13453:7;13462:6;13420:20;:49::i;:::-;13498:6;13482:12;;:22;;;;;;;:::i;:::-;;;;;;;;13675:6;13653:9;:18;13663:7;13653:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;13729:7;13708:37;;13725:1;13708:37;;;13738:6;13708:37;;;;;;:::i;:::-;;;;;;;;13758:48;13786:1;13790:7;13799:6;13758:19;:48::i;:::-;13261:553;;:::o;16984:125::-;;;;:::o;17713:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:116::-;3868:21;3883:5;3868:21;:::i;:::-;3861:5;3858:32;3848:60;;3904:1;3901;3894:12;3848:60;3798:116;:::o;3920:133::-;3963:5;4001:6;3988:20;3979:29;;4017:30;4041:5;4017:30;:::i;:::-;3920:133;;;;:::o;4059:323::-;4115:6;4164:2;4152:9;4143:7;4139:23;4135:32;4132:119;;;4170:79;;:::i;:::-;4132:119;4290:1;4315:50;4357:7;4348:6;4337:9;4333:22;4315:50;:::i;:::-;4305:60;;4261:114;4059:323;;;;:::o;4388:619::-;4465:6;4473;4481;4530:2;4518:9;4509:7;4505:23;4501:32;4498:119;;;4536:79;;:::i;:::-;4498:119;4656:1;4681:53;4726:7;4717:6;4706:9;4702:22;4681:53;:::i;:::-;4671:63;;4627:117;4783:2;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4754:118;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;4388:619;;;;;:::o;5013:86::-;5048:7;5088:4;5081:5;5077:16;5066:27;;5013:86;;;:::o;5105:112::-;5188:22;5204:5;5188:22;:::i;:::-;5183:3;5176:35;5105:112;;:::o;5223:214::-;5312:4;5350:2;5339:9;5335:18;5327:26;;5363:67;5427:1;5416:9;5412:17;5403:6;5363:67;:::i;:::-;5223:214;;;;:::o;5443:329::-;5502:6;5551:2;5539:9;5530:7;5526:23;5522:32;5519:119;;;5557:79;;:::i;:::-;5519:119;5677:1;5702:53;5747:7;5738:6;5727:9;5723:22;5702:53;:::i;:::-;5692:63;;5648:117;5443:329;;;;:::o;5778:117::-;5887:1;5884;5877:12;5901:117;6010:1;6007;6000:12;6024:117;6133:1;6130;6123:12;6164:568;6237:8;6247:6;6297:3;6290:4;6282:6;6278:17;6274:27;6264:122;;6305:79;;:::i;:::-;6264:122;6418:6;6405:20;6395:30;;6448:18;6440:6;6437:30;6434:117;;;6470:79;;:::i;:::-;6434:117;6584:4;6576:6;6572:17;6560:29;;6638:3;6630:4;6622:6;6618:17;6608:8;6604:32;6601:41;6598:128;;;6645:79;;:::i;:::-;6598:128;6164:568;;;;;:::o;6738:559::-;6824:6;6832;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7035:1;7024:9;7020:17;7007:31;7065:18;7057:6;7054:30;7051:117;;;7087:79;;:::i;:::-;7051:117;7200:80;7272:7;7263:6;7252:9;7248:22;7200:80;:::i;:::-;7182:98;;;;6978:312;6738:559;;;;;:::o;7303:118::-;7390:24;7408:5;7390:24;:::i;:::-;7385:3;7378:37;7303:118;;:::o;7427:222::-;7520:4;7558:2;7547:9;7543:18;7535:26;;7571:71;7639:1;7628:9;7624:17;7615:6;7571:71;:::i;:::-;7427:222;;;;:::o;7655:474::-;7723:6;7731;7780:2;7768:9;7759:7;7755:23;7751:32;7748:119;;;7786:79;;:::i;:::-;7748:119;7906:1;7931:53;7976:7;7967:6;7956:9;7952:22;7931:53;:::i;:::-;7921:63;;7877:117;8033:2;8059:53;8104:7;8095:6;8084:9;8080:22;8059:53;:::i;:::-;8049:63;;8004:118;7655:474;;;;;:::o;8135:329::-;8194:6;8243:2;8231:9;8222:7;8218:23;8214:32;8211:119;;;8249:79;;:::i;:::-;8211:119;8369:1;8394:53;8439:7;8430:6;8419:9;8415:22;8394:53;:::i;:::-;8384:63;;8340:117;8135:329;;;;:::o;8470:332::-;8591:4;8629:2;8618:9;8614:18;8606:26;;8642:71;8710:1;8699:9;8695:17;8686:6;8642:71;:::i;:::-;8723:72;8791:2;8780:9;8776:18;8767:6;8723:72;:::i;:::-;8470:332;;;;;:::o;8808:180::-;8856:77;8853:1;8846:88;8953:4;8950:1;8943:15;8977:4;8974:1;8967:15;8994:320;9038:6;9075:1;9069:4;9065:12;9055:22;;9122:1;9116:4;9112:12;9143:18;9133:81;;9199:4;9191:6;9187:17;9177:27;;9133:81;9261:2;9253:6;9250:14;9230:18;9227:38;9224:84;;9280:18;;:::i;:::-;9224:84;9045:269;8994:320;;;:::o;9320:180::-;9368:77;9365:1;9358:88;9465:4;9462:1;9455:15;9489:4;9486:1;9479:15;9506:191;9546:3;9565:20;9583:1;9565:20;:::i;:::-;9560:25;;9599:20;9617:1;9599:20;:::i;:::-;9594:25;;9642:1;9639;9635:9;9628:16;;9663:3;9660:1;9657:10;9654:36;;;9670:18;;:::i;:::-;9654:36;9506:191;;;;:::o;9703:147::-;9804:11;9841:3;9826:18;;9703:147;;;;:::o;9856:114::-;;:::o;9976:398::-;10135:3;10156:83;10237:1;10232:3;10156:83;:::i;:::-;10149:90;;10248:93;10337:3;10248:93;:::i;:::-;10366:1;10361:3;10357:11;10350:18;;9976:398;;;:::o;10380:379::-;10564:3;10586:147;10729:3;10586:147;:::i;:::-;10579:154;;10750:3;10743:10;;10380:379;;;:::o;10765:165::-;10905:17;10901:1;10893:6;10889:14;10882:41;10765:165;:::o;10936:366::-;11078:3;11099:67;11163:2;11158:3;11099:67;:::i;:::-;11092:74;;11175:93;11264:3;11175:93;:::i;:::-;11293:2;11288:3;11284:12;11277:19;;10936:366;;;:::o;11308:419::-;11474:4;11512:2;11501:9;11497:18;11489:26;;11561:9;11555:4;11551:20;11547:1;11536:9;11532:17;11525:47;11589:131;11715:4;11589:131;:::i;:::-;11581:139;;11308:419;;;:::o;11733:176::-;11873:28;11869:1;11861:6;11857:14;11850:52;11733:176;:::o;11915:366::-;12057:3;12078:67;12142:2;12137:3;12078:67;:::i;:::-;12071:74;;12154:93;12243:3;12154:93;:::i;:::-;12272:2;12267:3;12263:12;12256:19;;11915:366;;;:::o;12287:419::-;12453:4;12491:2;12480:9;12476:18;12468:26;;12540:9;12534:4;12530:20;12526:1;12515:9;12511:17;12504:47;12568:131;12694:4;12568:131;:::i;:::-;12560:139;;12287:419;;;:::o;12712:227::-;12852:34;12848:1;12840:6;12836:14;12829:58;12921:10;12916:2;12908:6;12904:15;12897:35;12712:227;:::o;12945:366::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:419::-;13483:4;13521:2;13510:9;13506:18;13498:26;;13570:9;13564:4;13560:20;13556:1;13545:9;13541:17;13534:47;13598:131;13724:4;13598:131;:::i;:::-;13590:139;;13317:419;;;:::o;13742:173::-;13882:25;13878:1;13870:6;13866:14;13859:49;13742:173;:::o;13921:366::-;14063:3;14084:67;14148:2;14143:3;14084:67;:::i;:::-;14077:74;;14160:93;14249:3;14160:93;:::i;:::-;14278:2;14273:3;14269:12;14262:19;;13921:366;;;:::o;14293:419::-;14459:4;14497:2;14486:9;14482:18;14474:26;;14546:9;14540:4;14536:20;14532:1;14521:9;14517:17;14510:47;14574:131;14700:4;14574:131;:::i;:::-;14566:139;;14293:419;;;:::o;14718:175::-;14858:27;14854:1;14846:6;14842:14;14835:51;14718:175;:::o;14899:366::-;15041:3;15062:67;15126:2;15121:3;15062:67;:::i;:::-;15055:74;;15138:93;15227:3;15138:93;:::i;:::-;15256:2;15251:3;15247:12;15240:19;;14899:366;;;:::o;15271:419::-;15437:4;15475:2;15464:9;15460:18;15452:26;;15524:9;15518:4;15514:20;15510:1;15499:9;15495:17;15488:47;15552:131;15678:4;15552:131;:::i;:::-;15544:139;;15271:419;;;:::o;15696:233::-;15735:3;15758:24;15776:5;15758:24;:::i;:::-;15749:33;;15804:66;15797:5;15794:77;15791:103;;15874:18;;:::i;:::-;15791:103;15921:1;15914:5;15910:13;15903:20;;15696:233;;;:::o;15935:180::-;15983:77;15980:1;15973:88;16080:4;16077:1;16070:15;16104:4;16101:1;16094:15;16121:194;16161:4;16181:20;16199:1;16181:20;:::i;:::-;16176:25;;16215:20;16233:1;16215:20;:::i;:::-;16210:25;;16259:1;16256;16252:9;16244:17;;16283:1;16277:4;16274:11;16271:37;;;16288:18;;:::i;:::-;16271:37;16121:194;;;;:::o;16321:181::-;16461:33;16457:1;16449:6;16445:14;16438:57;16321:181;:::o;16508:366::-;16650:3;16671:67;16735:2;16730:3;16671:67;:::i;:::-;16664:74;;16747:93;16836:3;16747:93;:::i;:::-;16865:2;16860:3;16856:12;16849:19;;16508:366;;;:::o;16880:419::-;17046:4;17084:2;17073:9;17069:18;17061:26;;17133:9;17127:4;17123:20;17119:1;17108:9;17104:17;17097:47;17161:131;17287:4;17161:131;:::i;:::-;17153:139;;16880:419;;;:::o;17305:410::-;17345:7;17368:20;17386:1;17368:20;:::i;:::-;17363:25;;17402:20;17420:1;17402:20;:::i;:::-;17397:25;;17457:1;17454;17450:9;17479:30;17497:11;17479:30;:::i;:::-;17468:41;;17658:1;17649:7;17645:15;17642:1;17639:22;17619:1;17612:9;17592:83;17569:139;;17688:18;;:::i;:::-;17569:139;17353:362;17305:410;;;;:::o;17721:180::-;17769:77;17766:1;17759:88;17866:4;17863:1;17856:15;17890:4;17887:1;17880:15;17907:185;17947:1;17964:20;17982:1;17964:20;:::i;:::-;17959:25;;17998:20;18016:1;17998:20;:::i;:::-;17993:25;;18037:1;18027:35;;18042:18;;:::i;:::-;18027:35;18084:1;18081;18077:9;18072:14;;17907:185;;;;:::o;18098:224::-;18238:34;18234:1;18226:6;18222:14;18215:58;18307:7;18302:2;18294:6;18290:15;18283:32;18098:224;:::o;18328:366::-;18470:3;18491:67;18555:2;18550:3;18491:67;:::i;:::-;18484:74;;18567:93;18656:3;18567:93;:::i;:::-;18685:2;18680:3;18676:12;18669:19;;18328:366;;;:::o;18700:419::-;18866:4;18904:2;18893:9;18889:18;18881:26;;18953:9;18947:4;18943:20;18939:1;18928:9;18924:17;18917:47;18981:131;19107:4;18981:131;:::i;:::-;18973:139;;18700:419;;;:::o;19125:225::-;19265:34;19261:1;19253:6;19249:14;19242:58;19334:8;19329:2;19321:6;19317:15;19310:33;19125:225;:::o;19356:366::-;19498:3;19519:67;19583:2;19578:3;19519:67;:::i;:::-;19512:74;;19595:93;19684:3;19595:93;:::i;:::-;19713:2;19708:3;19704:12;19697:19;;19356:366;;;:::o;19728:419::-;19894:4;19932:2;19921:9;19917:18;19909:26;;19981:9;19975:4;19971:20;19967:1;19956:9;19952:17;19945:47;20009:131;20135:4;20009:131;:::i;:::-;20001:139;;19728:419;;;:::o;20153:168::-;20293:20;20289:1;20281:6;20277:14;20270:44;20153:168;:::o;20327:366::-;20469:3;20490:67;20554:2;20549:3;20490:67;:::i;:::-;20483:74;;20566:93;20655:3;20566:93;:::i;:::-;20684:2;20679:3;20675:12;20668:19;;20327:366;;;:::o;20699:419::-;20865:4;20903:2;20892:9;20888:18;20880:26;;20952:9;20946:4;20942:20;20938:1;20927:9;20923:17;20916:47;20980:131;21106:4;20980:131;:::i;:::-;20972:139;;20699:419;;;:::o;21124:223::-;21264:34;21260:1;21252:6;21248:14;21241:58;21333:6;21328:2;21320:6;21316:15;21309:31;21124:223;:::o;21353:366::-;21495:3;21516:67;21580:2;21575:3;21516:67;:::i;:::-;21509:74;;21592:93;21681:3;21592:93;:::i;:::-;21710:2;21705:3;21701:12;21694:19;;21353:366;;;:::o;21725:419::-;21891:4;21929:2;21918:9;21914:18;21906:26;;21978:9;21972:4;21968:20;21964:1;21953:9;21949:17;21942:47;22006:131;22132:4;22006:131;:::i;:::-;21998:139;;21725:419;;;:::o;22150:221::-;22290:34;22286:1;22278:6;22274:14;22267:58;22359:4;22354:2;22346:6;22342:15;22335:29;22150:221;:::o;22377:366::-;22519:3;22540:67;22604:2;22599:3;22540:67;:::i;:::-;22533:74;;22616:93;22705:3;22616:93;:::i;:::-;22734:2;22729:3;22725:12;22718:19;;22377:366;;;:::o;22749:419::-;22915:4;22953:2;22942:9;22938:18;22930:26;;23002:9;22996:4;22992:20;22988:1;22977:9;22973:17;22966:47;23030:131;23156:4;23030:131;:::i;:::-;23022:139;;22749:419;;;:::o;23174:182::-;23314:34;23310:1;23302:6;23298:14;23291:58;23174:182;:::o;23362:366::-;23504:3;23525:67;23589:2;23584:3;23525:67;:::i;:::-;23518:74;;23601:93;23690:3;23601:93;:::i;:::-;23719:2;23714:3;23710:12;23703:19;;23362:366;;;:::o;23734:419::-;23900:4;23938:2;23927:9;23923:18;23915:26;;23987:9;23981:4;23977:20;23973:1;23962:9;23958:17;23951:47;24015:131;24141:4;24015:131;:::i;:::-;24007:139;;23734:419;;;:::o;24159:179::-;24299:31;24295:1;24287:6;24283:14;24276:55;24159:179;:::o;24344:366::-;24486:3;24507:67;24571:2;24566:3;24507:67;:::i;:::-;24500:74;;24583:93;24672:3;24583:93;:::i;:::-;24701:2;24696:3;24692:12;24685:19;;24344:366;;;:::o;24716:419::-;24882:4;24920:2;24909:9;24905:18;24897:26;;24969:9;24963:4;24959:20;24955:1;24944:9;24940:17;24933:47;24997:131;25123:4;24997:131;:::i;:::-;24989:139;;24716:419;;;:::o;25141:224::-;25281:34;25277:1;25269:6;25265:14;25258:58;25350:7;25345:2;25337:6;25333:15;25326:32;25141:224;:::o;25371:366::-;25513:3;25534:67;25598:2;25593:3;25534:67;:::i;:::-;25527:74;;25610:93;25699:3;25610:93;:::i;:::-;25728:2;25723:3;25719:12;25712:19;;25371:366;;;:::o;25743:419::-;25909:4;25947:2;25936:9;25932:18;25924:26;;25996:9;25990:4;25986:20;25982:1;25971:9;25967:17;25960:47;26024:131;26150:4;26024:131;:::i;:::-;26016:139;;25743:419;;;:::o;26168:222::-;26308:34;26304:1;26296:6;26292:14;26285:58;26377:5;26372:2;26364:6;26360:15;26353:30;26168:222;:::o;26396:366::-;26538:3;26559:67;26623:2;26618:3;26559:67;:::i;:::-;26552:74;;26635:93;26724:3;26635:93;:::i;:::-;26753:2;26748:3;26744:12;26737:19;;26396:366;;;:::o;26768:419::-;26934:4;26972:2;26961:9;26957:18;26949:26;;27021:9;27015:4;27011:20;27007:1;26996:9;26992:17;26985:47;27049:131;27175:4;27049:131;:::i;:::-;27041:139;;26768:419;;;:::o;27193:225::-;27333:34;27329:1;27321:6;27317:14;27310:58;27402:8;27397:2;27389:6;27385:15;27378:33;27193:225;:::o;27424:366::-;27566:3;27587:67;27651:2;27646:3;27587:67;:::i;:::-;27580:74;;27663:93;27752:3;27663:93;:::i;:::-;27781:2;27776:3;27772:12;27765:19;;27424:366;;;:::o;27796:419::-;27962:4;28000:2;27989:9;27985:18;27977:26;;28049:9;28043:4;28039:20;28035:1;28024:9;28020:17;28013:47;28077:131;28203:4;28077:131;:::i;:::-;28069:139;;27796:419;;;:::o;28221:181::-;28361:33;28357:1;28349:6;28345:14;28338:57;28221:181;:::o;28408:366::-;28550:3;28571:67;28635:2;28630:3;28571:67;:::i;:::-;28564:74;;28647:93;28736:3;28647:93;:::i;:::-;28765:2;28760:3;28756:12;28749:19;;28408:366;;;:::o;28780:419::-;28946:4;28984:2;28973:9;28969:18;28961:26;;29033:9;29027:4;29023:20;29019:1;29008:9;29004:17;28997:47;29061:131;29187:4;29061:131;:::i;:::-;29053:139;;28780:419;;;:::o

Swarm Source

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