BTT Price: $0.00000091 (+2.15%)

Token

millionada.github.io/bittorrent (MLOT)

Overview

Max Total Supply

101,007 MLOT

Holders

9,920

Market

Price

$0.00 @ 0.000000 BTT

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10 MLOT

Value
$0.00
0x29d300665739536b6ccd1651f81a681c89ae369a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
MillionadaLottery

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at bttcscan.com on 2023-06-21
*/

// SPDX-License-Identifier: MIT
/**
 * @title Millionada Crypto Lottery 
  * https://millionada.github.io/bittorrent/
 */
pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * IMPORTANT: It is unsafe to assume that an address for which this
     * function returns false is an externally-owned account (EOA) and not a
     * contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return payable(address(uint160(account)));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface IERC20Receiver {
    function onERC20Receive(address from, uint256 amount) external returns (bool);
}

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);
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

contract MillionadaLottery is ERC20 {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;
    address payable[] public participants ;
    mapping(address => uint) public address_deposit;
 
    fallback() external payable {}
    receive() external payable {}

    constructor(
    )  ERC20("millionada.github.io/bittorrent", "MLOT") {
        _mint(msg.sender, 1000*1e18);
        owner = msg.sender;
    }

    address public owner;
    mapping(address => bool) public players;
    mapping(uint256 => address) public playerNumber;
    mapping(address => uint256) public playerScratched;
    mapping(address => uint256) public playerPrize;
    mapping(address => bool) erasePlayers;
    mapping(uint256 => address) eraseNo;
    uint256 public ticketPrice = 1*1e18;
    uint256 public totalPlayers;
    uint256 public totalPot;
    address[] winners;
    
    address payable dev_fund  = payable(0x24aF739A63ead20d7fa9e67caDc7b32869D5B69A);

    function getOwner() public view returns (address) {
        return owner;
    }
    
    function get_eth_balance() public view returns (uint256) 
    {
        return address(this).balance/1e18;
    }
    
    function getTokenBalance(IERC20 token) public view returns (uint256) {
        return token.balanceOf(address(this));
    }

    function random1m(address from, uint256 attempt) public view returns(uint256){
        uint256 randIndex = uint256(keccak256(abi.encodePacked(block.timestamp, uint256(uint160(from)), attempt))) % 1000000;
        return randIndex;
    }

    function random100k(address from, uint256 attempt) public view returns(uint256){
        uint256 randIndex = uint256(keccak256(abi.encodePacked(block.timestamp, uint256(uint160(from)), attempt))) % 100000;
        return randIndex;
    }

    function random10k(address from, uint256 attempt) public view returns(uint256){
        uint256 randIndex = uint256(keccak256(abi.encodePacked(block.timestamp, uint256(uint160(from)), attempt))) % 10000;
        return randIndex;
    }

    function random1k(address from, uint256 attempt) public view returns(uint256){
        uint256 randIndex = uint256(keccak256(abi.encodePacked(block.timestamp, uint256(uint160(from)), attempt))) % 1000;
        return randIndex;
    } 

    function set_ticket_ptice(uint256 price) public                                
    {
	    require(msg.sender == owner);
        ticketPrice = price*1e18;
    }

    function fund_contract() public payable
    {
        totalPot += msg.value;
    }

    event drawEvent(uint256 amount);

    function unscratched_balance(address player) public view returns (uint256)
    {
        return _balances[player]/1e18 - playerScratched[player]/1e18;
    }

    function player_prize(address player) public view returns (uint256)
    {
        return playerPrize[player];
    }

    function buy() public payable 
    {
        uint256 send_tickets = msg.value / ticketPrice;
        dev_fund.transfer(msg.value /100);
        _mint(msg.sender, send_tickets*1e18);
    }

    function scratch() public payable  {

        totalPlayers++;
        dev_fund.transfer(ticketPrice /100);
        totalPot += (msg.value - (ticketPrice /100));
            uint256 x2;
            uint256 x10;
            uint256 mini_jackpot;
            uint256 jackpot;

            uint256 win;
            uint256 dev;
            uint256 drawer_ticket_count = 0;
            drawer_ticket_count = _balances[msg.sender]/1e18;
            require((_balances[msg.sender] - playerScratched[msg.sender]) > 0, "Buy more tickets");

            playerScratched[msg.sender]+=1*1e18;

            x2 = random1k(msg.sender, playerScratched[msg.sender]);
            x10 = random10k(msg.sender, playerScratched[msg.sender]);
            mini_jackpot = random100k(msg.sender, playerScratched[msg.sender]);
            jackpot = random1m(msg.sender, playerScratched[msg.sender]);

            win;
            dev;

            if(jackpot == 1000) 
            {
                win = address(this).balance - address(this).balance/100;
                payable(msg.sender).transfer(win);
                playerPrize[msg.sender]+=win;
                emit drawEvent(win);
            }

            if(mini_jackpot == 100) 
            {
                win = address(this).balance/10;
                payable(msg.sender).transfer(win);
                playerPrize[msg.sender]+=win;
                emit drawEvent(win);
            }

            if(x10 == 10) 
            {
                win = address(this).balance/100;
                payable(msg.sender).transfer(win);
                playerPrize[msg.sender]+=win;
                emit drawEvent(win);
            }

            if(x2 == 1) 
            {                
                win = address(this).balance/1000;
                payable(msg.sender).transfer(win);
                playerPrize[msg.sender]+=win;
                emit drawEvent(win);
            }
         
    }   
}

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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"drawEvent","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"address_deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buy","outputs":[],"stateMutability":"payable","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":"fund_contract","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_eth_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"participants","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerNumber","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerScratched","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"player_prize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"players","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"attempt","type":"uint256"}],"name":"random100k","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"attempt","type":"uint256"}],"name":"random10k","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"attempt","type":"uint256"}],"name":"random1k","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"attempt","type":"uint256"}],"name":"random1m","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scratch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"set_ticket_ptice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ticketPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"unscratched_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052670de0b6b3a7640000600e557324af739a63ead20d7fa9e67cadc7b32869d5b69a601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200007257600080fd5b506040518060400160405280601f81526020017f6d696c6c696f6e6164612e6769746875622e696f2f626974746f7272656e74008152506040518060400160405280600481526020017f4d4c4f54000000000000000000000000000000000000000000000000000000008152508160039081620000f0919062000563565b50806004908162000102919062000563565b5050506200012033683635c9adc5dea000006200016760201b60201c565b33600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000765565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d090620006ab565b60405180910390fd5b620001ed60008383620002df60201b60201c565b8060026000828254620002019190620006fc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002589190620006fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002bf919062000748565b60405180910390a3620002db60008383620002e460201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036b57607f821691505b60208210810362000381576200038062000323565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003ac565b620003f78683620003ac565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004446200043e62000438846200040f565b62000419565b6200040f565b9050919050565b6000819050919050565b620004608362000423565b620004786200046f826200044b565b848454620003b9565b825550505050565b600090565b6200048f62000480565b6200049c81848462000455565b505050565b5b81811015620004c457620004b860008262000485565b600181019050620004a2565b5050565b601f8211156200051357620004dd8162000387565b620004e8846200039c565b81016020851015620004f8578190505b6200051062000507856200039c565b830182620004a1565b50505b505050565b600082821c905092915050565b6000620005386000198460080262000518565b1980831691505092915050565b600062000553838362000525565b9150826002028217905092915050565b6200056e82620002e9565b67ffffffffffffffff8111156200058a5762000589620002f4565b5b62000596825462000352565b620005a3828285620004c8565b600060209050601f831160018114620005db5760008415620005c6578287015190505b620005d2858262000545565b86555062000642565b601f198416620005eb8662000387565b60005b828110156200061557848901518255600182019150602085019450602081019050620005ee565b8683101562000635578489015162000631601f89168262000525565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000693601f836200064a565b9150620006a0826200065b565b602082019050919050565b60006020820190508181036000830152620006c68162000684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000709826200040f565b915062000716836200040f565b9250828201905080821115620007315762000730620006cd565b5b92915050565b62000742816200040f565b82525050565b60006020820190506200075f600083018462000737565b92915050565b612c1880620007756000396000f3fe6080604052600436106102085760003560e01c80636ebcf60711610118578063a9059cbb116100a0578063d53909ed1161006f578063d53909ed1461081b578063dac6965414610858578063dd62ed3e14610862578063e2eb41ff1461089f578063f60cdcf6146108dc5761020f565b8063a9059cbb1461073b578063aec1523c14610778578063b04d6f08146107b5578063d338c516146107f25761020f565b80638da5cb5b116100e75780638da5cb5b1461067357806395d89b411461069e5780639e401046146106c9578063a457c2d7146106f4578063a6f2ae3a146107315761020f565b80636ebcf6071461059157806370a08231146105ce57806375d36ea31461060b578063893d20e8146106485761020f565b806324b570a91161019b5780633741b9711161016a5780633741b9711461049357806339509351146104d05780633aecd0e31461050d5780633e6c22d41461054a5780635cb22e33146105545761020f565b806324b570a9146103c35780632b889b48146103ee578063313ce5671461042b57806335c1d349146104565761020f565b806318160ddd116101d757806318160ddd146102e1578063185112c91461030c578063222b7be01461034957806323b872dd146103865761020f565b80630296313e1461021157806306fdde031461024e578063095ea7b3146102795780631209b1f6146102b65761020f565b3661020f57005b005b34801561021d57600080fd5b50610238600480360381019061023391906120dd565b610907565b6040516102459190612123565b60405180910390f35b34801561025a57600080fd5b5061026361091f565b60405161027091906121ce565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b919061221c565b6109b1565b6040516102ad9190612277565b60405180910390f35b3480156102c257600080fd5b506102cb6109cf565b6040516102d89190612123565b60405180910390f35b3480156102ed57600080fd5b506102f66109d5565b6040516103039190612123565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e91906120dd565b6109df565b6040516103409190612123565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b91906120dd565b610a97565b60405161037d9190612123565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612292565b610ae0565b6040516103ba9190612277565b60405180910390f35b3480156103cf57600080fd5b506103d8610bd8565b6040516103e59190612123565b60405180910390f35b3480156103fa57600080fd5b506104156004803603810190610410919061221c565b610bde565b6040516104229190612123565b60405180910390f35b34801561043757600080fd5b50610440610c3f565b60405161044d9190612301565b60405180910390f35b34801561046257600080fd5b5061047d6004803603810190610478919061231c565b610c48565b60405161048a919061236a565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b591906120dd565b610c87565b6040516104c79190612123565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f2919061221c565b610c9f565b6040516105049190612277565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906123c3565b610d4b565b6040516105419190612123565b60405180910390f35b610552610dce565b005b34801561056057600080fd5b5061057b600480360381019061057691906120dd565b611509565b6040516105889190612123565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b391906120dd565b611521565b6040516105c59190612123565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f091906120dd565b611539565b6040516106029190612123565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061221c565b611581565b60405161063f9190612123565b60405180910390f35b34801561065457600080fd5b5061065d6115e1565b60405161066a91906123ff565b60405180910390f35b34801561067f57600080fd5b5061068861160b565b60405161069591906123ff565b60405180910390f35b3480156106aa57600080fd5b506106b3611631565b6040516106c091906121ce565b60405180910390f35b3480156106d557600080fd5b506106de6116c3565b6040516106eb9190612123565b60405180910390f35b34801561070057600080fd5b5061071b6004803603810190610716919061221c565b6116de565b6040516107289190612277565b60405180910390f35b6107396117c9565b005b34801561074757600080fd5b50610762600480360381019061075d919061221c565b611870565b60405161076f9190612277565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a919061231c565b61188e565b6040516107ac91906123ff565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d7919061221c565b6118c1565b6040516107e99190612123565b60405180910390f35b3480156107fe57600080fd5b506108196004803603810190610814919061231c565b611921565b005b34801561082757600080fd5b50610842600480360381019061083d919061221c565b611998565b60405161084f9190612123565b60405180910390f35b6108606119f9565b005b34801561086e57600080fd5b506108896004803603810190610884919061241a565b611a14565b6040516108969190612123565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c191906120dd565b611a9b565b6040516108d39190612277565b60405180910390f35b3480156108e857600080fd5b506108f1611abb565b6040516108fe9190612123565b60405180910390f35b600a6020528060005260406000206000915090505481565b60606003805461092e90612489565b80601f016020809104026020016040519081016040528092919081815260200182805461095a90612489565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b60006109c56109be611ac1565b8484611ac9565b6001905092915050565b600e5481565b6000600254905090565b6000670de0b6b3a7640000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a349190612518565b670de0b6b3a76400006000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a869190612518565b610a909190612549565b9050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610aed848484611c92565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b38611ac1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf906125ef565b60405180910390fd5b610bcc85610bc4611ac1565b858403611ac9565b60019150509392505050565b60105481565b600080620f4240428573ffffffffffffffffffffffffffffffffffffffff1685604051602001610c1093929190612630565b6040516020818303038152906040528051906020012060001c610c33919061266d565b90508091505092915050565b60006012905090565b60058181548110610c5857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090505481565b6000610d41610cac611ac1565b848460016000610cba611ac1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d3c919061269e565b611ac9565b6001905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d8691906123ff565b602060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc791906126e7565b9050919050565b600f6000815480929190610de190612714565b9190505550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600e54610e319190612518565b9081150290604051600060405180830381858888f19350505050158015610e5c573d6000803e3d6000fd5b506064600e54610e6c9190612518565b34610e779190612549565b60106000828254610e88919061269e565b925050819055506000806000806000806000670de0b6b3a76400006000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eec9190612518565b90506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f799190612549565b11610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb0906127a8565b60405180910390fd5b670de0b6b3a7640000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611010919061269e565b9250508190555061106033600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611581565b96506110ab33600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118c1565b95506110f633600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611998565b945061114133600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bde565b93506103e8840361123b576064476111599190612518565b476111649190612549565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156111ac573d6000803e3d6000fd5b5082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111fc919061269e565b925050819055507fe8de61bf1673b49feae9ce28cff92e6fafb1e195b3f29bd22a6376afd67aeca5836040516112329190612123565b60405180910390a15b6064850361132757600a476112509190612518565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611298573d6000803e3d6000fd5b5082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112e8919061269e565b925050819055507fe8de61bf1673b49feae9ce28cff92e6fafb1e195b3f29bd22a6376afd67aeca58360405161131e9190612123565b60405180910390a15b600a86036114135760644761133c9190612518565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611384573d6000803e3d6000fd5b5082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113d4919061269e565b925050819055507fe8de61bf1673b49feae9ce28cff92e6fafb1e195b3f29bd22a6376afd67aeca58360405161140a9190612123565b60405180910390a15b60018703611500576103e8476114299190612518565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611471573d6000803e3d6000fd5b5082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114c1919061269e565b925050819055507fe8de61bf1673b49feae9ce28cff92e6fafb1e195b3f29bd22a6376afd67aeca5836040516114f79190612123565b60405180910390a15b50505050505050565b600b6020528060005260406000206000915090505481565b60006020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806103e8428573ffffffffffffffffffffffffffffffffffffffff16856040516020016115b293929190612630565b6040516020818303038152906040528051906020012060001c6115d5919061266d565b90508091505092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461164090612489565b80601f016020809104026020016040519081016040528092919081815260200182805461166c90612489565b80156116b95780601f1061168e576101008083540402835291602001916116b9565b820191906000526020600020905b81548152906001019060200180831161169c57829003601f168201915b5050505050905090565b6000670de0b6b3a7640000476116d99190612518565b905090565b600080600160006116ed611ac1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a19061283a565b60405180910390fd5b6117be6117b5611ac1565b85858403611ac9565b600191505092915050565b6000600e54346117d99190612518565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064346118249190612518565b9081150290604051600060405180830381858888f1935050505015801561184f573d6000803e3d6000fd5b5061186d33670de0b6b3a764000083611868919061285a565b611f11565b50565b600061188461187d611ac1565b8484611c92565b6001905092915050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080612710428573ffffffffffffffffffffffffffffffffffffffff16856040516020016118f293929190612630565b6040516020818303038152906040528051906020012060001c611915919061266d565b90508091505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461197b57600080fd5b670de0b6b3a76400008161198f919061285a565b600e8190555050565b600080620186a0428573ffffffffffffffffffffffffffffffffffffffff16856040516020016119ca93929190612630565b6040516020818303038152906040528051906020012060001c6119ed919061266d565b90508091505092915050565b3460106000828254611a0b919061269e565b92505081905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b600f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f9061290e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e906129a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c859190612123565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890612a32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790612ac4565b60405180910390fd5b611d7b838383612070565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890612b56565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e94919061269e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef89190612123565b60405180910390a3611f0b848484612075565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790612bc2565b60405180910390fd5b611f8c60008383612070565b8060026000828254611f9e919061269e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff3919061269e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120589190612123565b60405180910390a361206c60008383612075565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120aa8261207f565b9050919050565b6120ba8161209f565b81146120c557600080fd5b50565b6000813590506120d7816120b1565b92915050565b6000602082840312156120f3576120f261207a565b5b6000612101848285016120c8565b91505092915050565b6000819050919050565b61211d8161210a565b82525050565b60006020820190506121386000830184612114565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561217857808201518184015260208101905061215d565b60008484015250505050565b6000601f19601f8301169050919050565b60006121a08261213e565b6121aa8185612149565b93506121ba81856020860161215a565b6121c381612184565b840191505092915050565b600060208201905081810360008301526121e88184612195565b905092915050565b6121f98161210a565b811461220457600080fd5b50565b600081359050612216816121f0565b92915050565b600080604083850312156122335761223261207a565b5b6000612241858286016120c8565b925050602061225285828601612207565b9150509250929050565b60008115159050919050565b6122718161225c565b82525050565b600060208201905061228c6000830184612268565b92915050565b6000806000606084860312156122ab576122aa61207a565b5b60006122b9868287016120c8565b93505060206122ca868287016120c8565b92505060406122db86828701612207565b9150509250925092565b600060ff82169050919050565b6122fb816122e5565b82525050565b600060208201905061231660008301846122f2565b92915050565b6000602082840312156123325761233161207a565b5b600061234084828501612207565b91505092915050565b60006123548261207f565b9050919050565b61236481612349565b82525050565b600060208201905061237f600083018461235b565b92915050565b60006123908261209f565b9050919050565b6123a081612385565b81146123ab57600080fd5b50565b6000813590506123bd81612397565b92915050565b6000602082840312156123d9576123d861207a565b5b60006123e7848285016123ae565b91505092915050565b6123f98161209f565b82525050565b600060208201905061241460008301846123f0565b92915050565b600080604083850312156124315761243061207a565b5b600061243f858286016120c8565b9250506020612450858286016120c8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124a157607f821691505b6020821081036124b4576124b361245a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006125238261210a565b915061252e8361210a565b92508261253e5761253d6124ba565b5b828204905092915050565b60006125548261210a565b915061255f8361210a565b9250828203905081811115612577576125766124e9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006125d9602883612149565b91506125e48261257d565b604082019050919050565b60006020820190508181036000830152612608816125cc565b9050919050565b6000819050919050565b61262a6126258261210a565b61260f565b82525050565b600061263c8286612619565b60208201915061264c8285612619565b60208201915061265c8284612619565b602082019150819050949350505050565b60006126788261210a565b91506126838361210a565b925082612693576126926124ba565b5b828206905092915050565b60006126a98261210a565b91506126b48361210a565b92508282019050808211156126cc576126cb6124e9565b5b92915050565b6000815190506126e1816121f0565b92915050565b6000602082840312156126fd576126fc61207a565b5b600061270b848285016126d2565b91505092915050565b600061271f8261210a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612751576127506124e9565b5b600182019050919050565b7f427579206d6f7265207469636b65747300000000000000000000000000000000600082015250565b6000612792601083612149565b915061279d8261275c565b602082019050919050565b600060208201905081810360008301526127c181612785565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612824602583612149565b915061282f826127c8565b604082019050919050565b6000602082019050818103600083015261285381612817565b9050919050565b60006128658261210a565b91506128708361210a565b925082820261287e8161210a565b91508282048414831517612895576128946124e9565b5b5092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006128f8602483612149565b91506129038261289c565b604082019050919050565b60006020820190508181036000830152612927816128eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061298a602283612149565b91506129958261292e565b604082019050919050565b600060208201905081810360008301526129b98161297d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a1c602583612149565b9150612a27826129c0565b604082019050919050565b60006020820190508181036000830152612a4b81612a0f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612aae602383612149565b9150612ab982612a52565b604082019050919050565b60006020820190508181036000830152612add81612aa1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b40602683612149565b9150612b4b82612ae4565b604082019050919050565b60006020820190508181036000830152612b6f81612b33565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612bac601f83612149565b9150612bb782612b76565b602082019050919050565b60006020820190508181036000830152612bdb81612b9f565b905091905056fea26469706673582212201d5f2d207d14696f95acb5d584d2cc82d2f72d7eeb092408f56e88720e09113c64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102085760003560e01c80636ebcf60711610118578063a9059cbb116100a0578063d53909ed1161006f578063d53909ed1461081b578063dac6965414610858578063dd62ed3e14610862578063e2eb41ff1461089f578063f60cdcf6146108dc5761020f565b8063a9059cbb1461073b578063aec1523c14610778578063b04d6f08146107b5578063d338c516146107f25761020f565b80638da5cb5b116100e75780638da5cb5b1461067357806395d89b411461069e5780639e401046146106c9578063a457c2d7146106f4578063a6f2ae3a146107315761020f565b80636ebcf6071461059157806370a08231146105ce57806375d36ea31461060b578063893d20e8146106485761020f565b806324b570a91161019b5780633741b9711161016a5780633741b9711461049357806339509351146104d05780633aecd0e31461050d5780633e6c22d41461054a5780635cb22e33146105545761020f565b806324b570a9146103c35780632b889b48146103ee578063313ce5671461042b57806335c1d349146104565761020f565b806318160ddd116101d757806318160ddd146102e1578063185112c91461030c578063222b7be01461034957806323b872dd146103865761020f565b80630296313e1461021157806306fdde031461024e578063095ea7b3146102795780631209b1f6146102b65761020f565b3661020f57005b005b34801561021d57600080fd5b50610238600480360381019061023391906120dd565b610907565b6040516102459190612123565b60405180910390f35b34801561025a57600080fd5b5061026361091f565b60405161027091906121ce565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b919061221c565b6109b1565b6040516102ad9190612277565b60405180910390f35b3480156102c257600080fd5b506102cb6109cf565b6040516102d89190612123565b60405180910390f35b3480156102ed57600080fd5b506102f66109d5565b6040516103039190612123565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e91906120dd565b6109df565b6040516103409190612123565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b91906120dd565b610a97565b60405161037d9190612123565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612292565b610ae0565b6040516103ba9190612277565b60405180910390f35b3480156103cf57600080fd5b506103d8610bd8565b6040516103e59190612123565b60405180910390f35b3480156103fa57600080fd5b506104156004803603810190610410919061221c565b610bde565b6040516104229190612123565b60405180910390f35b34801561043757600080fd5b50610440610c3f565b60405161044d9190612301565b60405180910390f35b34801561046257600080fd5b5061047d6004803603810190610478919061231c565b610c48565b60405161048a919061236a565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b591906120dd565b610c87565b6040516104c79190612123565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f2919061221c565b610c9f565b6040516105049190612277565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906123c3565b610d4b565b6040516105419190612123565b60405180910390f35b610552610dce565b005b34801561056057600080fd5b5061057b600480360381019061057691906120dd565b611509565b6040516105889190612123565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b391906120dd565b611521565b6040516105c59190612123565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f091906120dd565b611539565b6040516106029190612123565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061221c565b611581565b60405161063f9190612123565b60405180910390f35b34801561065457600080fd5b5061065d6115e1565b60405161066a91906123ff565b60405180910390f35b34801561067f57600080fd5b5061068861160b565b60405161069591906123ff565b60405180910390f35b3480156106aa57600080fd5b506106b3611631565b6040516106c091906121ce565b60405180910390f35b3480156106d557600080fd5b506106de6116c3565b6040516106eb9190612123565b60405180910390f35b34801561070057600080fd5b5061071b6004803603810190610716919061221c565b6116de565b6040516107289190612277565b60405180910390f35b6107396117c9565b005b34801561074757600080fd5b50610762600480360381019061075d919061221c565b611870565b60405161076f9190612277565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a919061231c565b61188e565b6040516107ac91906123ff565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d7919061221c565b6118c1565b6040516107e99190612123565b60405180910390f35b3480156107fe57600080fd5b506108196004803603810190610814919061231c565b611921565b005b34801561082757600080fd5b50610842600480360381019061083d919061221c565b611998565b60405161084f9190612123565b60405180910390f35b6108606119f9565b005b34801561086e57600080fd5b506108896004803603810190610884919061241a565b611a14565b6040516108969190612123565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c191906120dd565b611a9b565b6040516108d39190612277565b60405180910390f35b3480156108e857600080fd5b506108f1611abb565b6040516108fe9190612123565b60405180910390f35b600a6020528060005260406000206000915090505481565b60606003805461092e90612489565b80601f016020809104026020016040519081016040528092919081815260200182805461095a90612489565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b60006109c56109be611ac1565b8484611ac9565b6001905092915050565b600e5481565b6000600254905090565b6000670de0b6b3a7640000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a349190612518565b670de0b6b3a76400006000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a869190612518565b610a909190612549565b9050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610aed848484611c92565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b38611ac1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf906125ef565b60405180910390fd5b610bcc85610bc4611ac1565b858403611ac9565b60019150509392505050565b60105481565b600080620f4240428573ffffffffffffffffffffffffffffffffffffffff1685604051602001610c1093929190612630565b6040516020818303038152906040528051906020012060001c610c33919061266d565b90508091505092915050565b60006012905090565b60058181548110610c5857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090505481565b6000610d41610cac611ac1565b848460016000610cba611ac1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d3c919061269e565b611ac9565b6001905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d8691906123ff565b602060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc791906126e7565b9050919050565b600f6000815480929190610de190612714565b9190505550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600e54610e319190612518565b9081150290604051600060405180830381858888f19350505050158015610e5c573d6000803e3d6000fd5b506064600e54610e6c9190612518565b34610e779190612549565b60106000828254610e88919061269e565b925050819055506000806000806000806000670de0b6b3a76400006000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eec9190612518565b90506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f799190612549565b11610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb0906127a8565b60405180910390fd5b670de0b6b3a7640000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611010919061269e565b9250508190555061106033600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611581565b96506110ab33600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118c1565b95506110f633600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611998565b945061114133600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bde565b93506103e8840361123b576064476111599190612518565b476111649190612549565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156111ac573d6000803e3d6000fd5b5082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111fc919061269e565b925050819055507fe8de61bf1673b49feae9ce28cff92e6fafb1e195b3f29bd22a6376afd67aeca5836040516112329190612123565b60405180910390a15b6064850361132757600a476112509190612518565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611298573d6000803e3d6000fd5b5082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112e8919061269e565b925050819055507fe8de61bf1673b49feae9ce28cff92e6fafb1e195b3f29bd22a6376afd67aeca58360405161131e9190612123565b60405180910390a15b600a86036114135760644761133c9190612518565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611384573d6000803e3d6000fd5b5082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113d4919061269e565b925050819055507fe8de61bf1673b49feae9ce28cff92e6fafb1e195b3f29bd22a6376afd67aeca58360405161140a9190612123565b60405180910390a15b60018703611500576103e8476114299190612518565b92503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611471573d6000803e3d6000fd5b5082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114c1919061269e565b925050819055507fe8de61bf1673b49feae9ce28cff92e6fafb1e195b3f29bd22a6376afd67aeca5836040516114f79190612123565b60405180910390a15b50505050505050565b600b6020528060005260406000206000915090505481565b60006020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806103e8428573ffffffffffffffffffffffffffffffffffffffff16856040516020016115b293929190612630565b6040516020818303038152906040528051906020012060001c6115d5919061266d565b90508091505092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461164090612489565b80601f016020809104026020016040519081016040528092919081815260200182805461166c90612489565b80156116b95780601f1061168e576101008083540402835291602001916116b9565b820191906000526020600020905b81548152906001019060200180831161169c57829003601f168201915b5050505050905090565b6000670de0b6b3a7640000476116d99190612518565b905090565b600080600160006116ed611ac1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a19061283a565b60405180910390fd5b6117be6117b5611ac1565b85858403611ac9565b600191505092915050565b6000600e54346117d99190612518565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064346118249190612518565b9081150290604051600060405180830381858888f1935050505015801561184f573d6000803e3d6000fd5b5061186d33670de0b6b3a764000083611868919061285a565b611f11565b50565b600061188461187d611ac1565b8484611c92565b6001905092915050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080612710428573ffffffffffffffffffffffffffffffffffffffff16856040516020016118f293929190612630565b6040516020818303038152906040528051906020012060001c611915919061266d565b90508091505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461197b57600080fd5b670de0b6b3a76400008161198f919061285a565b600e8190555050565b600080620186a0428573ffffffffffffffffffffffffffffffffffffffff16856040516020016119ca93929190612630565b6040516020818303038152906040528051906020012060001c6119ed919061266d565b90508091505092915050565b3460106000828254611a0b919061269e565b92505081905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b600f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f9061290e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e906129a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c859190612123565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890612a32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790612ac4565b60405180910390fd5b611d7b838383612070565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890612b56565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e94919061269e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef89190612123565b60405180910390a3611f0b848484612075565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790612bc2565b60405180910390fd5b611f8c60008383612070565b8060026000828254611f9e919061269e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff3919061269e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120589190612123565b60405180910390a361206c60008383612075565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120aa8261207f565b9050919050565b6120ba8161209f565b81146120c557600080fd5b50565b6000813590506120d7816120b1565b92915050565b6000602082840312156120f3576120f261207a565b5b6000612101848285016120c8565b91505092915050565b6000819050919050565b61211d8161210a565b82525050565b60006020820190506121386000830184612114565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561217857808201518184015260208101905061215d565b60008484015250505050565b6000601f19601f8301169050919050565b60006121a08261213e565b6121aa8185612149565b93506121ba81856020860161215a565b6121c381612184565b840191505092915050565b600060208201905081810360008301526121e88184612195565b905092915050565b6121f98161210a565b811461220457600080fd5b50565b600081359050612216816121f0565b92915050565b600080604083850312156122335761223261207a565b5b6000612241858286016120c8565b925050602061225285828601612207565b9150509250929050565b60008115159050919050565b6122718161225c565b82525050565b600060208201905061228c6000830184612268565b92915050565b6000806000606084860312156122ab576122aa61207a565b5b60006122b9868287016120c8565b93505060206122ca868287016120c8565b92505060406122db86828701612207565b9150509250925092565b600060ff82169050919050565b6122fb816122e5565b82525050565b600060208201905061231660008301846122f2565b92915050565b6000602082840312156123325761233161207a565b5b600061234084828501612207565b91505092915050565b60006123548261207f565b9050919050565b61236481612349565b82525050565b600060208201905061237f600083018461235b565b92915050565b60006123908261209f565b9050919050565b6123a081612385565b81146123ab57600080fd5b50565b6000813590506123bd81612397565b92915050565b6000602082840312156123d9576123d861207a565b5b60006123e7848285016123ae565b91505092915050565b6123f98161209f565b82525050565b600060208201905061241460008301846123f0565b92915050565b600080604083850312156124315761243061207a565b5b600061243f858286016120c8565b9250506020612450858286016120c8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124a157607f821691505b6020821081036124b4576124b361245a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006125238261210a565b915061252e8361210a565b92508261253e5761253d6124ba565b5b828204905092915050565b60006125548261210a565b915061255f8361210a565b9250828203905081811115612577576125766124e9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006125d9602883612149565b91506125e48261257d565b604082019050919050565b60006020820190508181036000830152612608816125cc565b9050919050565b6000819050919050565b61262a6126258261210a565b61260f565b82525050565b600061263c8286612619565b60208201915061264c8285612619565b60208201915061265c8284612619565b602082019150819050949350505050565b60006126788261210a565b91506126838361210a565b925082612693576126926124ba565b5b828206905092915050565b60006126a98261210a565b91506126b48361210a565b92508282019050808211156126cc576126cb6124e9565b5b92915050565b6000815190506126e1816121f0565b92915050565b6000602082840312156126fd576126fc61207a565b5b600061270b848285016126d2565b91505092915050565b600061271f8261210a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612751576127506124e9565b5b600182019050919050565b7f427579206d6f7265207469636b65747300000000000000000000000000000000600082015250565b6000612792601083612149565b915061279d8261275c565b602082019050919050565b600060208201905081810360008301526127c181612785565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612824602583612149565b915061282f826127c8565b604082019050919050565b6000602082019050818103600083015261285381612817565b9050919050565b60006128658261210a565b91506128708361210a565b925082820261287e8161210a565b91508282048414831517612895576128946124e9565b5b5092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006128f8602483612149565b91506129038261289c565b604082019050919050565b60006020820190508181036000830152612927816128eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061298a602283612149565b91506129958261292e565b604082019050919050565b600060208201905081810360008301526129b98161297d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a1c602583612149565b9150612a27826129c0565b604082019050919050565b60006020820190508181036000830152612a4b81612a0f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612aae602383612149565b9150612ab982612a52565b604082019050919050565b60006020820190508181036000830152612add81612aa1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b40602683612149565b9150612b4b82612ae4565b604082019050919050565b60006020820190508181036000830152612b6f81612b33565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612bac601f83612149565b9150612bb782612b76565b602082019050919050565b60006020820190508181036000830152612bdb81612b9f565b905091905056fea26469706673582212201d5f2d207d14696f95acb5d584d2cc82d2f72d7eeb092408f56e88720e09113c64736f6c63430008120033

Deployed Bytecode Sourcemap

25420:5119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25985:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15449:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17626:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26181:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16569:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28049:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28216:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18277:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26257:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26758:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16411:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25529:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25574:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19178:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26625:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28542:1991;;;:::i;:::-;;26042:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14733:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16740:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27499:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26405:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25858:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15668:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26498:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19896:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28342:192;;;:::i;:::-;;17090:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25931:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27253:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27744:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27005:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27916:85;;;:::i;:::-;;17328:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25885:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26223:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25985:50;;;;;;;;;;;;;;;;;:::o;15449:100::-;15503:13;15536:5;15529:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15449:100;:::o;17626:169::-;17709:4;17726:39;17735:12;:10;:12::i;:::-;17749:7;17758:6;17726:8;:39::i;:::-;17783:4;17776:11;;17626:169;;;;:::o;26181:35::-;;;;:::o;16569:108::-;16630:7;16657:12;;16650:19;;16569:108;:::o;28049:159::-;28115:7;28196:4;28172:15;:23;28188:6;28172:23;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;28165:4;28147:9;:17;28157:6;28147:17;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;:53;;;;:::i;:::-;28140:60;;28049:159;;;:::o;28216:118::-;28275:7;28307:11;:19;28319:6;28307:19;;;;;;;;;;;;;;;;28300:26;;28216:118;;;:::o;18277:492::-;18417:4;18434:36;18444:6;18452:9;18463:6;18434:9;:36::i;:::-;18483:24;18510:11;:19;18522:6;18510:19;;;;;;;;;;;;;;;:33;18530:12;:10;:12::i;:::-;18510:33;;;;;;;;;;;;;;;;18483:60;;18582:6;18562:16;:26;;18554:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18669:57;18678:6;18686:12;:10;:12::i;:::-;18719:6;18700:16;:25;18669:8;:57::i;:::-;18757:4;18750:11;;;18277:492;;;;;:::o;26257:23::-;;;;:::o;26758:239::-;26827:7;26846:17;26955:7;26901:15;26934:4;26918:22;;26942:7;26884:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26874:77;;;;;;26866:86;;:96;;;;:::i;:::-;26846:116;;26980:9;26973:16;;;26758:239;;;;:::o;16411:93::-;16469:5;16494:2;16487:9;;16411:93;:::o;25529:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25574:47::-;;;;;;;;;;;;;;;;;:::o;19178:215::-;19266:4;19283:80;19292:12;:10;:12::i;:::-;19306:7;19352:10;19315:11;:25;19327:12;:10;:12::i;:::-;19315:25;;;;;;;;;;;;;;;:34;19341:7;19315:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;19283:8;:80::i;:::-;19381:4;19374:11;;19178:215;;;;:::o;26625:125::-;26685:7;26712:5;:15;;;26736:4;26712:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26705:37;;26625:125;;;:::o;28542:1991::-;28590:12;;:14;;;;;;;;;:::i;:::-;;;;;;28615:8;;;;;;;;;;;:17;;:35;28646:3;28633:11;;:16;;;;:::i;:::-;28615:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28700:3;28687:11;;:16;;;;:::i;:::-;28674:9;:30;;;;:::i;:::-;28661:8;;:44;;;;;;;:::i;:::-;;;;;;;;28720:10;28745:11;28771:20;28806:15;28838:11;28864;28890:27;28980:4;28958:9;:21;28968:10;28958:21;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;28936:48;;29063:1;29032:15;:27;29048:10;29032:27;;;;;;;;;;;;;;;;29008:9;:21;29018:10;29008:21;;;;;;;;;;;;;;;;:51;;;;:::i;:::-;29007:57;28999:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:6;29102:15;:27;29118:10;29102:27;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;29159:49;29168:10;29180:15;:27;29196:10;29180:27;;;;;;;;;;;;;;;;29159:8;:49::i;:::-;29154:54;;29229:50;29239:10;29251:15;:27;29267:10;29251:27;;;;;;;;;;;;;;;;29229:9;:50::i;:::-;29223:56;;29309:51;29320:10;29332:15;:27;29348:10;29332:27;;;;;;;;;;;;;;;;29309:10;:51::i;:::-;29294:66;;29385:49;29394:10;29406:15;:27;29422:10;29406:27;;;;;;;;;;;;;;;;29385:8;:49::i;:::-;29375:59;;29503:4;29492:7;:15;29489:261;;29594:3;29572:21;:25;;;;:::i;:::-;29548:21;:49;;;;:::i;:::-;29542:55;;29624:10;29616:28;;:33;29645:3;29616:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29693:3;29668:11;:23;29680:10;29668:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;29720:14;29730:3;29720:14;;;;;;:::i;:::-;;;;;;;;29489:261;29785:3;29769:12;:19;29766:240;;29851:2;29829:21;:24;;;;:::i;:::-;29823:30;;29880:10;29872:28;;:33;29901:3;29872:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:3;29924:11;:23;29936:10;29924:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;29976:14;29986:3;29976:14;;;;;;:::i;:::-;;;;;;;;29766:240;30032:2;30025:3;:9;30022:231;;30097:3;30075:21;:25;;;;:::i;:::-;30069:31;;30127:10;30119:28;;:33;30148:3;30119:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30196:3;30171:11;:23;30183:10;30171:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;30223:14;30233:3;30223:14;;;;;;:::i;:::-;;;;;;;;30022:231;30278:1;30272:2;:7;30269:246;;30358:4;30336:21;:26;;;;:::i;:::-;30330:32;;30389:10;30381:28;;:33;30410:3;30381:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30458:3;30433:11;:23;30445:10;30433:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;30485:14;30495:3;30485:14;;;;;;:::i;:::-;;;;;;;;30269:246;28577:1956;;;;;;;28542:1991::o;26042:46::-;;;;;;;;;;;;;;;;;:::o;14733:44::-;;;;;;;;;;;;;;;;;:::o;16740:137::-;16814:7;16851:9;:18;16861:7;16851:18;;;;;;;;;;;;;;;;16844:25;;16740:137;;;:::o;27499:236::-;27568:7;27587:17;27696:4;27642:15;27675:4;27659:22;;27683:7;27625:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27615:77;;;;;;27607:86;;:93;;;;:::i;:::-;27587:113;;27718:9;27711:16;;;27499:236;;;;:::o;26405:81::-;26446:7;26473:5;;;;;;;;;;;26466:12;;26405:81;:::o;25858:20::-;;;;;;;;;;;;;:::o;15668:104::-;15724:13;15757:7;15750:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15668:104;:::o;26498:115::-;26546:7;26601:4;26579:21;:26;;;;:::i;:::-;26572:33;;26498:115;:::o;19896:413::-;19989:4;20006:24;20033:11;:25;20045:12;:10;:12::i;:::-;20033:25;;;;;;;;;;;;;;;:34;20059:7;20033:34;;;;;;;;;;;;;;;;20006:61;;20106:15;20086:16;:35;;20078:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20199:67;20208:12;:10;:12::i;:::-;20222:7;20250:15;20231:16;:34;20199:8;:67::i;:::-;20297:4;20290:11;;;19896:413;;;;:::o;28342:192::-;28389:20;28424:11;;28412:9;:23;;;;:::i;:::-;28389:46;;28446:8;;;;;;;;;;;:17;;:33;28475:3;28464:9;:14;;;;:::i;:::-;28446:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28490:36;28496:10;28521:4;28508:12;:17;;;;:::i;:::-;28490:5;:36::i;:::-;28378:156;28342:192::o;17090:175::-;17176:4;17193:42;17203:12;:10;:12::i;:::-;17217:9;17228:6;17193:9;:42::i;:::-;17253:4;17246:11;;17090:175;;;;:::o;25931:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;27253:238::-;27323:7;27342:17;27451:5;27397:15;27430:4;27414:22;;27438:7;27380:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27370:77;;;;;;27362:86;;:94;;;;:::i;:::-;27342:114;;27474:9;27467:16;;;27253:238;;;;:::o;27744:164::-;27859:5;;;;;;;;;;;27845:19;;:10;:19;;;27837:28;;;;;;27896:4;27890:5;:10;;;;:::i;:::-;27876:11;:24;;;;27744:164;:::o;27005:240::-;27076:7;27095:17;27204:6;27150:15;27183:4;27167:22;;27191:7;27133:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27123:77;;;;;;27115:86;;:95;;;;:::i;:::-;27095:115;;27228:9;27221:16;;;27005:240;;;;:::o;27916:85::-;27984:9;27972:8;;:21;;;;;;;:::i;:::-;;;;;;;;27916:85::o;17328:151::-;17417:7;17444:11;:18;17456:5;17444:18;;;;;;;;;;;;;;;:27;17463:7;17444:27;;;;;;;;;;;;;;;;17437:34;;17328:151;;;;:::o;25885:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;26223:27::-;;;;:::o;14464:98::-;14517:7;14544:10;14537:17;;14464:98;:::o;23580:380::-;23733:1;23716:19;;:5;:19;;;23708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23814:1;23795:21;;:7;:21;;;23787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23898:6;23868:11;:18;23880:5;23868:18;;;;;;;;;;;;;;;:27;23887:7;23868:27;;;;;;;;;;;;;;;:36;;;;23936:7;23920:32;;23929:5;23920:32;;;23945:6;23920:32;;;;;;:::i;:::-;;;;;;;;23580:380;;;:::o;20799:733::-;20957:1;20939:20;;:6;:20;;;20931:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;21041:1;21020:23;;:9;:23;;;21012:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21096:47;21117:6;21125:9;21136:6;21096:20;:47::i;:::-;21156:21;21180:9;:17;21190:6;21180:17;;;;;;;;;;;;;;;;21156:41;;21233:6;21216:13;:23;;21208:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21354:6;21338:13;:22;21318:9;:17;21328:6;21318:17;;;;;;;;;;;;;;;:42;;;;21406:6;21382:9;:20;21392:9;21382:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;21447:9;21430:35;;21439:6;21430:35;;;21458:6;21430:35;;;;;;:::i;:::-;;;;;;;;21478:46;21498:6;21506:9;21517:6;21478:19;:46::i;:::-;20920:612;20799:733;;;:::o;21819:399::-;21922:1;21903:21;;:7;:21;;;21895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21973:49;22002:1;22006:7;22015:6;21973:20;:49::i;:::-;22051:6;22035:12;;:22;;;;;;;:::i;:::-;;;;;;;;22090:6;22068:9;:18;22078:7;22068:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;22133:7;22112:37;;22129:1;22112:37;;;22142:6;22112:37;;;;;;:::i;:::-;;;;;;;;22162:48;22190:1;22194:7;22203:6;22162:19;:48::i;:::-;21819:399;;:::o;24560:125::-;;;;:::o;25289:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:99::-;1663:6;1697:5;1691:12;1681:22;;1611:99;;;:::o;1716:169::-;1800:11;1834:6;1829:3;1822:19;1874:4;1869:3;1865:14;1850:29;;1716:169;;;;:::o;1891:246::-;1972:1;1982:113;1996:6;1993:1;1990:13;1982:113;;;2081:1;2076:3;2072:11;2066:18;2062:1;2057:3;2053:11;2046:39;2018:2;2015:1;2011:10;2006:15;;1982:113;;;2129:1;2120:6;2115:3;2111:16;2104:27;1953:184;1891:246;;;:::o;2143:102::-;2184:6;2235:2;2231:7;2226:2;2219:5;2215:14;2211:28;2201:38;;2143:102;;;:::o;2251:377::-;2339:3;2367:39;2400:5;2367:39;:::i;:::-;2422:71;2486:6;2481:3;2422:71;:::i;:::-;2415:78;;2502:65;2560:6;2555:3;2548:4;2541:5;2537:16;2502:65;:::i;:::-;2592:29;2614:6;2592:29;:::i;:::-;2587:3;2583:39;2576:46;;2343:285;2251:377;;;;:::o;2634:313::-;2747:4;2785:2;2774:9;2770:18;2762:26;;2834:9;2828:4;2824:20;2820:1;2809:9;2805:17;2798:47;2862:78;2935:4;2926:6;2862:78;:::i;:::-;2854:86;;2634:313;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:104::-;5568:7;5597:24;5615:5;5597:24;:::i;:::-;5586:35;;5523:104;;;:::o;5633:142::-;5736:32;5762:5;5736:32;:::i;:::-;5731:3;5724:45;5633:142;;:::o;5781:254::-;5890:4;5928:2;5917:9;5913:18;5905:26;;5941:87;6025:1;6014:9;6010:17;6001:6;5941:87;:::i;:::-;5781:254;;;;:::o;6041:109::-;6091:7;6120:24;6138:5;6120:24;:::i;:::-;6109:35;;6041:109;;;:::o;6156:148::-;6242:37;6273:5;6242:37;:::i;:::-;6235:5;6232:48;6222:76;;6294:1;6291;6284:12;6222:76;6156:148;:::o;6310:165::-;6369:5;6407:6;6394:20;6385:29;;6423:46;6463:5;6423:46;:::i;:::-;6310:165;;;;:::o;6481:355::-;6553:6;6602:2;6590:9;6581:7;6577:23;6573:32;6570:119;;;6608:79;;:::i;:::-;6570:119;6728:1;6753:66;6811:7;6802:6;6791:9;6787:22;6753:66;:::i;:::-;6743:76;;6699:130;6481:355;;;;:::o;6842:118::-;6929:24;6947:5;6929:24;:::i;:::-;6924:3;6917:37;6842:118;;:::o;6966:222::-;7059:4;7097:2;7086:9;7082:18;7074:26;;7110:71;7178:1;7167:9;7163:17;7154:6;7110:71;:::i;:::-;6966:222;;;;:::o;7194:474::-;7262:6;7270;7319:2;7307:9;7298:7;7294:23;7290:32;7287:119;;;7325:79;;:::i;:::-;7287:119;7445:1;7470:53;7515:7;7506:6;7495:9;7491:22;7470:53;:::i;:::-;7460:63;;7416:117;7572:2;7598:53;7643:7;7634:6;7623:9;7619:22;7598:53;:::i;:::-;7588:63;;7543:118;7194:474;;;;;:::o;7674:180::-;7722:77;7719:1;7712:88;7819:4;7816:1;7809:15;7843:4;7840:1;7833:15;7860:320;7904:6;7941:1;7935:4;7931:12;7921:22;;7988:1;7982:4;7978:12;8009:18;7999:81;;8065:4;8057:6;8053:17;8043:27;;7999:81;8127:2;8119:6;8116:14;8096:18;8093:38;8090:84;;8146:18;;:::i;:::-;8090:84;7911:269;7860:320;;;:::o;8186:180::-;8234:77;8231:1;8224:88;8331:4;8328:1;8321:15;8355:4;8352:1;8345:15;8372:180;8420:77;8417:1;8410:88;8517:4;8514:1;8507:15;8541:4;8538:1;8531:15;8558:185;8598:1;8615:20;8633:1;8615:20;:::i;:::-;8610:25;;8649:20;8667:1;8649:20;:::i;:::-;8644:25;;8688:1;8678:35;;8693:18;;:::i;:::-;8678:35;8735:1;8732;8728:9;8723:14;;8558:185;;;;:::o;8749:194::-;8789:4;8809:20;8827:1;8809:20;:::i;:::-;8804:25;;8843:20;8861:1;8843:20;:::i;:::-;8838:25;;8887:1;8884;8880:9;8872:17;;8911:1;8905:4;8902:11;8899:37;;;8916:18;;:::i;:::-;8899:37;8749:194;;;;:::o;8949:227::-;9089:34;9085:1;9077:6;9073:14;9066:58;9158:10;9153:2;9145:6;9141:15;9134:35;8949:227;:::o;9182:366::-;9324:3;9345:67;9409:2;9404:3;9345:67;:::i;:::-;9338:74;;9421:93;9510:3;9421:93;:::i;:::-;9539:2;9534:3;9530:12;9523:19;;9182:366;;;:::o;9554:419::-;9720:4;9758:2;9747:9;9743:18;9735:26;;9807:9;9801:4;9797:20;9793:1;9782:9;9778:17;9771:47;9835:131;9961:4;9835:131;:::i;:::-;9827:139;;9554:419;;;:::o;9979:79::-;10018:7;10047:5;10036:16;;9979:79;;;:::o;10064:157::-;10169:45;10189:24;10207:5;10189:24;:::i;:::-;10169:45;:::i;:::-;10164:3;10157:58;10064:157;;:::o;10227:538::-;10395:3;10410:75;10481:3;10472:6;10410:75;:::i;:::-;10510:2;10505:3;10501:12;10494:19;;10523:75;10594:3;10585:6;10523:75;:::i;:::-;10623:2;10618:3;10614:12;10607:19;;10636:75;10707:3;10698:6;10636:75;:::i;:::-;10736:2;10731:3;10727:12;10720:19;;10756:3;10749:10;;10227:538;;;;;;:::o;10771:176::-;10803:1;10820:20;10838:1;10820:20;:::i;:::-;10815:25;;10854:20;10872:1;10854:20;:::i;:::-;10849:25;;10893:1;10883:35;;10898:18;;:::i;:::-;10883:35;10939:1;10936;10932:9;10927:14;;10771:176;;;;:::o;10953:191::-;10993:3;11012:20;11030:1;11012:20;:::i;:::-;11007:25;;11046:20;11064:1;11046:20;:::i;:::-;11041:25;;11089:1;11086;11082:9;11075:16;;11110:3;11107:1;11104:10;11101:36;;;11117:18;;:::i;:::-;11101:36;10953:191;;;;:::o;11150:143::-;11207:5;11238:6;11232:13;11223:22;;11254:33;11281:5;11254:33;:::i;:::-;11150:143;;;;:::o;11299:351::-;11369:6;11418:2;11406:9;11397:7;11393:23;11389:32;11386:119;;;11424:79;;:::i;:::-;11386:119;11544:1;11569:64;11625:7;11616:6;11605:9;11601:22;11569:64;:::i;:::-;11559:74;;11515:128;11299:351;;;;:::o;11656:233::-;11695:3;11718:24;11736:5;11718:24;:::i;:::-;11709:33;;11764:66;11757:5;11754:77;11751:103;;11834:18;;:::i;:::-;11751:103;11881:1;11874:5;11870:13;11863:20;;11656:233;;;:::o;11895:166::-;12035:18;12031:1;12023:6;12019:14;12012:42;11895:166;:::o;12067:366::-;12209:3;12230:67;12294:2;12289:3;12230:67;:::i;:::-;12223:74;;12306:93;12395:3;12306:93;:::i;:::-;12424:2;12419:3;12415:12;12408:19;;12067:366;;;:::o;12439:419::-;12605:4;12643:2;12632:9;12628:18;12620:26;;12692:9;12686:4;12682:20;12678:1;12667:9;12663:17;12656:47;12720:131;12846:4;12720:131;:::i;:::-;12712:139;;12439:419;;;:::o;12864:224::-;13004:34;13000:1;12992:6;12988:14;12981:58;13073:7;13068:2;13060:6;13056:15;13049:32;12864:224;:::o;13094:366::-;13236:3;13257:67;13321:2;13316:3;13257:67;:::i;:::-;13250:74;;13333:93;13422:3;13333:93;:::i;:::-;13451:2;13446:3;13442:12;13435:19;;13094:366;;;:::o;13466:419::-;13632:4;13670:2;13659:9;13655:18;13647:26;;13719:9;13713:4;13709:20;13705:1;13694:9;13690:17;13683:47;13747:131;13873:4;13747:131;:::i;:::-;13739:139;;13466:419;;;:::o;13891:410::-;13931:7;13954:20;13972:1;13954:20;:::i;:::-;13949:25;;13988:20;14006:1;13988:20;:::i;:::-;13983:25;;14043:1;14040;14036:9;14065:30;14083:11;14065:30;:::i;:::-;14054:41;;14244:1;14235:7;14231:15;14228:1;14225:22;14205:1;14198:9;14178:83;14155:139;;14274:18;;:::i;:::-;14155:139;13939:362;13891:410;;;;:::o;14307:223::-;14447:34;14443:1;14435:6;14431:14;14424:58;14516:6;14511:2;14503:6;14499:15;14492:31;14307:223;:::o;14536:366::-;14678:3;14699:67;14763:2;14758:3;14699:67;:::i;:::-;14692:74;;14775:93;14864:3;14775:93;:::i;:::-;14893:2;14888:3;14884:12;14877:19;;14536:366;;;:::o;14908:419::-;15074:4;15112:2;15101:9;15097:18;15089:26;;15161:9;15155:4;15151:20;15147:1;15136:9;15132:17;15125:47;15189:131;15315:4;15189:131;:::i;:::-;15181:139;;14908:419;;;:::o;15333:221::-;15473:34;15469:1;15461:6;15457:14;15450:58;15542:4;15537:2;15529:6;15525:15;15518:29;15333:221;:::o;15560:366::-;15702:3;15723:67;15787:2;15782:3;15723:67;:::i;:::-;15716:74;;15799:93;15888:3;15799:93;:::i;:::-;15917:2;15912:3;15908:12;15901:19;;15560:366;;;:::o;15932:419::-;16098:4;16136:2;16125:9;16121:18;16113:26;;16185:9;16179:4;16175:20;16171:1;16160:9;16156:17;16149:47;16213:131;16339:4;16213:131;:::i;:::-;16205:139;;15932:419;;;:::o;16357:224::-;16497:34;16493:1;16485:6;16481:14;16474:58;16566:7;16561:2;16553:6;16549:15;16542:32;16357:224;:::o;16587:366::-;16729:3;16750:67;16814:2;16809:3;16750:67;:::i;:::-;16743:74;;16826:93;16915:3;16826:93;:::i;:::-;16944:2;16939:3;16935:12;16928:19;;16587:366;;;:::o;16959:419::-;17125:4;17163:2;17152:9;17148:18;17140:26;;17212:9;17206:4;17202:20;17198:1;17187:9;17183:17;17176:47;17240:131;17366:4;17240:131;:::i;:::-;17232:139;;16959:419;;;:::o;17384:222::-;17524:34;17520:1;17512:6;17508:14;17501:58;17593:5;17588:2;17580:6;17576:15;17569:30;17384:222;:::o;17612:366::-;17754:3;17775:67;17839:2;17834:3;17775:67;:::i;:::-;17768:74;;17851:93;17940:3;17851:93;:::i;:::-;17969:2;17964:3;17960:12;17953:19;;17612:366;;;:::o;17984:419::-;18150:4;18188:2;18177:9;18173:18;18165:26;;18237:9;18231:4;18227:20;18223:1;18212:9;18208:17;18201:47;18265:131;18391:4;18265:131;:::i;:::-;18257:139;;17984:419;;;:::o;18409:225::-;18549:34;18545:1;18537:6;18533:14;18526:58;18618:8;18613:2;18605:6;18601:15;18594:33;18409:225;:::o;18640:366::-;18782:3;18803:67;18867:2;18862:3;18803:67;:::i;:::-;18796:74;;18879:93;18968:3;18879:93;:::i;:::-;18997:2;18992:3;18988:12;18981:19;;18640:366;;;:::o;19012:419::-;19178:4;19216:2;19205:9;19201:18;19193:26;;19265:9;19259:4;19255:20;19251:1;19240:9;19236:17;19229:47;19293:131;19419:4;19293:131;:::i;:::-;19285:139;;19012:419;;;:::o;19437:181::-;19577:33;19573:1;19565:6;19561:14;19554:57;19437:181;:::o;19624:366::-;19766:3;19787:67;19851:2;19846:3;19787:67;:::i;:::-;19780:74;;19863:93;19952:3;19863:93;:::i;:::-;19981:2;19976:3;19972:12;19965:19;;19624:366;;;:::o;19996:419::-;20162:4;20200:2;20189:9;20185:18;20177:26;;20249:9;20243:4;20239:20;20235:1;20224:9;20220:17;20213:47;20277:131;20403:4;20277:131;:::i;:::-;20269:139;;19996:419;;;:::o

Swarm Source

ipfs://1d5f2d207d14696f95acb5d584d2cc82d2f72d7eeb092408f56e88720e09113c
[ 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.