ETH Price: $3,475.46 (+0.77%)

Token

QANX Token (QANX)
 

Overview

Max Total Supply

3,333,333,000 QANX

Holders

4,825 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,454.566084523684510229 QANX

Value
$0.00
0xbda25cc512176a93019a64a2522a176c8b2da5eb
Loading...
Loading
Loading...
Loading
Loading...
Loading

 


# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
QANX

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at Etherscan.io on 2021-05-30
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}



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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() external view virtual 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
     * overloaded;
     *
     * 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() external view virtual returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) external 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) external virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) external 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) external 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) external virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _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) external 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) external virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(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:
     *
     * - `to` 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);
    }

    /**
     * @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");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(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 to 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 { }
}

///////////////////////////////////////////////
// QANX STARTS HERE, OPENZEPPELIN CODE ABOVE //
///////////////////////////////////////////////

contract QANX is ERC20 {

    // EVENTS TO BE EMITTED UPON LOCKS ARE APPLIED & REMOVED
    event LockApplied(address indexed account, uint256 amount, uint32 hardLockUntil, uint32 softLockUntil, uint8 allowedHops);
    event LockRemoved(address indexed account);

    // INITIALIZE AN ERC20 TOKEN BASED ON THE OPENZEPPELIN VERSION
    constructor() ERC20("QANX Token", "QANX") {

        // INITIALLY MINT TOTAL SUPPLY TO CREATOR
        _mint(_msgSender(), 3333333000 * (10 ** 18));
    }

    // MAPPING FOR QUANTUM PUBLIC KEY HASHES
    mapping (address => bytes32) private _qPubKeyHashes;

    // REGISTER QUANTUM PUBLIC KEY HASH OF THE CURRENT ACCOUNT
    function setQuantumPubkeyHash(bytes32 qPubKeyHash) external {
        _qPubKeyHashes[_msgSender()] = qPubKeyHash;
    }

    // QUERY A QUANTUM PUBLIC KEY HASH OF A GIVEN ACCOUNT
    function getQuantumPubkeyHash(address account) external view virtual returns (bytes32) {
        return _qPubKeyHashes[account];
    }

    // REPRESENTS A LOCK WHICH MIGHT BE APPLIED ON AN ADDRESS
    struct Lock {
        uint256 tokenAmount;    // HOW MANY TOKENS ARE LOCKED
        uint32 hardLockUntil;   // UNTIL WHEN NO LOCKED TOKENS CAN BE ACCESSED
        uint32 softLockUntil;   // UNTIL WHEN LOCKED TOKENS CAN BE GRADUALLY RELEASED
        uint8 allowedHops;      // HOW MANY TRANSFERS LEFT WITH SAME LOCK PARAMS
        uint32 lastUnlock;      // LAST GRADUAL UNLOCK TIME (SOFTLOCK PERIOD)
        uint256 unlockPerSec;   // HOW MANY TOKENS ARE UNLOCKABLE EACH SEC FROM HL -> SL
    }

    // THIS MAPS LOCK PARAMS TO CERTAIN ADDRESSES WHICH RECEIVED LOCKED TOKENS
    mapping (address => Lock) private _locks;

    // RETURNS LOCK INFORMATION OF A GIVEN ADDRESS
    function lockOf(address account) external view virtual returns (Lock memory) {
        return _locks[account];
    }

    // RETURN THE BALANCE OF UNLOCKED AND LOCKED TOKENS COMBINED
    function balanceOf(address account) external view virtual override returns (uint256) {
        return _balances[account] + _locks[account].tokenAmount;
    }

    // TRANSFER FUNCTION WITH LOCK PARAMETERS
    function transferLocked(address recipient, uint256 amount, uint32 hardLockUntil, uint32 softLockUntil, uint8 allowedHops) external returns (bool) {

        // ONLY ONE LOCKED TRANSACTION ALLOWED PER RECIPIENT
        require(_locks[recipient].tokenAmount == 0, "Only one lock per address allowed!");

        // SENDER MUST HAVE ENOUGH TOKENS (UNLOCKED + LOCKED BALANCE COMBINED)
        require(_balances[_msgSender()] + _locks[_msgSender()].tokenAmount >= amount, "Transfer amount exceeds balance");

        // IF SENDER HAS ENOUGH UNLOCKED BALANCE, THEN LOCK PARAMS CAN BE CHOSEN
        if(_balances[_msgSender()] >= amount){

            // DEDUCT SENDER BALANCE
            _balances[_msgSender()] = _balances[_msgSender()] - amount;

            // APPLY LOCK
            return _applyLock(recipient, amount, hardLockUntil, softLockUntil, allowedHops);
        }

        // OTHERWISE REQUIRE THAT THE CHOSEN LOCK PARAMS ARE SAME / STRICTER (allowedHops) THAN THE SENDER'S
        require(
            hardLockUntil >= _locks[_msgSender()].hardLockUntil && 
            softLockUntil >= _locks[_msgSender()].softLockUntil && 
            allowedHops < _locks[_msgSender()].allowedHops
        );

        // IF SENDER HAS ENOUGH LOCKED BALANCE
        if(_locks[_msgSender()].tokenAmount >= amount){

            // DECREASE LOCKED BALANCE OF SENDER
            _locks[_msgSender()].tokenAmount = _locks[_msgSender()].tokenAmount - amount;

            // APPLY LOCK
            return _applyLock(recipient, amount, hardLockUntil, softLockUntil, allowedHops);
        }

        // IF NO CONDITIONS WERE MET SO FAR, DEDUCT FROM THE UNLOCKED BALANCE
        _balances[_msgSender()] = _balances[_msgSender()] - (amount - _locks[_msgSender()].tokenAmount);

        // THEN SPEND LOCKED BALANCE OF SENDER FIRST
        _locks[_msgSender()].tokenAmount = 0;

        // APPLY LOCK
        return _applyLock(recipient, amount, hardLockUntil, softLockUntil, allowedHops);
    }

    // APPLIES LOCK TO RECIPIENT WITH SPECIFIED PARAMS AND EMITS A TRANSFER EVENT
    function _applyLock(address recipient, uint256 amount, uint32 hardLockUntil, uint32 softLockUntil, uint8 allowedHops) private returns (bool) {

        // MAKE SURE THAT SOFTLOCK IS AFTER HARDLOCK
        require(softLockUntil > hardLockUntil, "SoftLock must be greater than HardLock!");

        // APPLY LOCK, EMIT TRANSFER EVENT
        _locks[recipient] = Lock(amount, hardLockUntil, softLockUntil, allowedHops, hardLockUntil, amount / (softLockUntil - hardLockUntil));
        emit LockApplied(recipient, amount, hardLockUntil, softLockUntil, allowedHops);
        emit Transfer(_msgSender(), recipient, amount);
        return true;
    }

    function lockedBalanceOf(address account) external view virtual returns (uint256) {
        return _locks[account].tokenAmount;
    }

    function unlockedBalanceOf(address account) external view virtual returns (uint256) {
        return _balances[account];
    }

    function unlockableBalanceOf(address account) public view virtual returns (uint256) {

        // IF THE HARDLOCK HAS NOT PASSED YET, THERE ARE NO UNLOCKABLE TOKENS
        if(block.timestamp < _locks[account].hardLockUntil) {
            return 0;
        }

        // IF THE SOFTLOCK PERIOD PASSED, ALL CURRENTLY TOKENS ARE UNLOCKABLE
        if(block.timestamp > _locks[account].softLockUntil) {
            return _locks[account].tokenAmount;
        }

        // OTHERWISE THE PROPORTIONAL AMOUNT IS UNLOCKABLE
        return (block.timestamp - _locks[account].lastUnlock) * _locks[account].unlockPerSec;
    }

    function unlock(address account) external returns (bool) {

        // CALCULATE UNLOCKABLE BALANCE
        uint256 unlockable = unlockableBalanceOf(account);

        // ONLY ADDRESSES OWNING LOCKED TOKENS AND BYPASSED HARDLOCK TIME ARE UNLOCKABLE
        require(unlockable > 0 && _locks[account].tokenAmount > 0 && block.timestamp > _locks[account].hardLockUntil, "No unlockable tokens!");

        // SET LAST UNLOCK TIME, DEDUCT FROM LOCKED BALANCE & CREDIT TO REGULAR BALANCE
        _locks[account].lastUnlock = uint32(block.timestamp);
        _locks[account].tokenAmount = _locks[account].tokenAmount - unlockable;
        _balances[account] = _balances[account] + unlockable;

        // IF NO MORE LOCKED TOKENS LEFT, REMOVE LOCK OBJECT FROM ADDRESS
        if(_locks[account].tokenAmount == 0){
            delete _locks[account];
            emit LockRemoved(account);
        }

        // UNLOCK SUCCESSFUL
        emit Transfer(account, account, unlockable);
        return true;
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"hardLockUntil","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"softLockUntil","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"allowedHops","type":"uint8"}],"name":"LockApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"LockRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getQuantumPubkeyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lockOf","outputs":[{"components":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint32","name":"hardLockUntil","type":"uint32"},{"internalType":"uint32","name":"softLockUntil","type":"uint32"},{"internalType":"uint8","name":"allowedHops","type":"uint8"},{"internalType":"uint32","name":"lastUnlock","type":"uint32"},{"internalType":"uint256","name":"unlockPerSec","type":"uint256"}],"internalType":"struct QANX.Lock","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lockedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"qPubKeyHash","type":"bytes32"}],"name":"setQuantumPubkeyHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"hardLockUntil","type":"uint32"},{"internalType":"uint32","name":"softLockUntil","type":"uint32"},{"internalType":"uint8","name":"allowedHops","type":"uint8"}],"name":"transferLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unlockableBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unlockedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f51414e5820546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f51414e580000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000257565b508060049080519060200190620000af92919062000257565b505050620000df620000c6620000e560201b60201c565b6b0ac544b802c91c33bb200000620000ed60201b60201c565b620004b3565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000157906200033f565b60405180910390fd5b62000174600083836200025260201b60201c565b80600260008282546200018891906200038f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001df91906200038f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000246919062000361565b60405180910390a35050565b505050565b8280546200026590620003f6565b90600052602060002090601f016020900481019282620002895760008555620002d5565b82601f10620002a457805160ff1916838001178555620002d5565b82800160010185558215620002d5579182015b82811115620002d4578251825591602001919060010190620002b7565b5b509050620002e49190620002e8565b5090565b5b8082111562000303576000816000905550600101620002e9565b5090565b600062000316601f836200037e565b915062000323826200048a565b602082019050919050565b6200033981620003ec565b82525050565b600060208201905081810360008301526200035a8162000307565b9050919050565b60006020820190506200037860008301846200032e565b92915050565b600082825260208201905092915050565b60006200039c82620003ec565b9150620003a983620003ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620003e157620003e06200042c565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200040f57607f821691505b602082108114156200042657620004256200045b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612c4380620004c36000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80635af76875116100ad578063a457c2d711610071578063a457c2d71461036a578063a9059cbb1461039a578063b80e74d7146103ca578063dd62ed3e146103fa578063dfb40d1d1461042a57610121565b80635af76875146102a057806370a08231146102bc578063740499ab146102ec57806384955c881461031c57806395d89b411461034c57610121565b80632f6c493c116100f45780632f6c493c146101c2578063313ce567146101f2578063395093511461021057806359355736146102405780635a46d3b51461027057610121565b806306fdde0314610126578063095ea7b31461014457806318160ddd1461017457806323b872dd14610192575b600080fd5b61012e61045a565b60405161013b9190612392565b60405180910390f35b61015e60048036038101906101599190611fd3565b6104ec565b60405161016b919061235c565b60405180910390f35b61017c61050a565b604051610189919061252f565b60405180910390f35b6101ac60048036038101906101a79190611f84565b610514565b6040516101b9919061235c565b60405180910390f35b6101dc60048036038101906101d79190611f1f565b610615565b6040516101e9919061235c565b60405180910390f35b6101fa610a41565b604051610207919061258f565b60405180910390f35b61022a60048036038101906102259190611fd3565b610a4a565b604051610237919061235c565b60405180910390f35b61025a60048036038101906102559190611f1f565b610af6565b604051610267919061252f565b60405180910390f35b61028a60048036038101906102859190611f1f565b610b42565b6040516102979190612514565b60405180910390f35b6102ba60048036038101906102b59190612086565b610c3e565b005b6102d660048036038101906102d19190611f1f565b610c8c565b6040516102e3919061252f565b60405180910390f35b61030660048036038101906103019190611f1f565b610d21565b604051610313919061252f565b60405180910390f35b61033660048036038101906103319190611f1f565b610eef565b604051610343919061252f565b60405180910390f35b610354610f37565b6040516103619190612392565b60405180910390f35b610384600480360381019061037f9190611fd3565b610fc9565b604051610391919061235c565b60405180910390f35b6103b460048036038101906103af9190611fd3565b6110bd565b6040516103c1919061235c565b60405180910390f35b6103e460048036038101906103df919061200f565b6110db565b6040516103f1919061235c565b60405180910390f35b610414600480360381019061040f9190611f48565b6116dd565b604051610421919061252f565b60405180910390f35b610444600480360381019061043f9190611f1f565b611764565b6040516104519190612377565b60405180910390f35b606060038054610469906127b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610495906127b1565b80156104e25780601f106104b7576101008083540402835291602001916104e2565b820191906000526020600020905b8154815290600101906020018083116104c557829003601f168201915b5050505050905090565b60006105006104f96117ad565b84846117b5565b6001905092915050565b6000600254905090565b6000610521848484611980565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061056c6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156105ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e390612494565b60405180910390fd5b610609856105f86117ad565b858461060491906126a7565b6117b5565b60019150509392505050565b60008061062183610d21565b905060008111801561067557506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b80156106d85750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff1642115b610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070e906123f4565b60405180910390fd5b42600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160096101000a81548163ffffffff021916908363ffffffff16021790555080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546107c691906126a7565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461085691906125c6565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156109d257600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160006101000a81549063ffffffff02191690556001820160046101000a81549063ffffffff02191690556001820160086101000a81549060ff02191690556001820160096101000a81549063ffffffff0219169055600282016000905550508273ffffffffffffffffffffffffffffffffffffffff167f064f67e76df103eb3e142dac6110a06fcfc7a01ef2da651312b88eb6f0dd3d2860405160405180910390a25b8273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a2f919061252f565b60405180910390a36001915050919050565b60006012905090565b6000610aec610a576117ad565b848460016000610a656117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae791906125c6565b6117b5565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b610b4a611e6b565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160089054906101000a900460ff1660ff1660ff1681526020016001820160099054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815250509050919050565b8060056000610c4b6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d1a91906125c6565b9050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff16421015610d8c5760009050610eea565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160049054906101000a900463ffffffff1663ffffffff16421115610e3657600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050610eea565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160099054906101000a900463ffffffff1663ffffffff1642610edd91906126a7565b610ee7919061264d565b90505b919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054610f46906127b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f72906127b1565b8015610fbf5780601f10610f9457610100808354040283529160200191610fbf565b820191906000526020600020905b815481529060010190602001808311610fa257829003601f168201915b5050505050905090565b60008060016000610fd86117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c906124f4565b60405180910390fd5b6110b26110a06117ad565b8585846110ad91906126a7565b6117b5565b600191505092915050565b60006110d16110ca6117ad565b8484611980565b6001905092915050565b600080600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906123d4565b60405180910390fd5b846006600061116e6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546000806111b76117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111fc91906125c6565b101561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612474565b60405180910390fd5b846000806112496117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061133757846000806112956117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112da91906126a7565b6000806112e56117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113308686868686611bff565b90506116d4565b600660006113436117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff168463ffffffff16101580156114115750600660006113b36117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160049054906101000a900463ffffffff1663ffffffff168363ffffffff1610155b80156114785750600660006114246117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160089054906101000a900460ff1660ff168260ff16105b61148157600080fd5b846006600061148e6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154106115875784600660006114de6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461152691906126a7565b600660006115326117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506115808686868686611bff565b90506116d4565b600660006115936117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154856115dc91906126a7565b6000806115e76117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461162c91906126a7565b6000806116376117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660006116836117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506116d18686868686611bff565b90505b95945050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906124d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90612414565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611973919061252f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e7906124b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a57906123b4565b60405180910390fd5b611a6b838383611e66565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890612434565b60405180910390fd5b8181611afd91906126a7565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8d91906125c6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bf1919061252f565b60405180910390a350505050565b60008363ffffffff168363ffffffff1611611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690612454565b60405180910390fd5b6040518060c001604052808681526020018563ffffffff1681526020018463ffffffff1681526020018360ff1681526020018563ffffffff1681526020018585611c9991906126db565b63ffffffff1687611caa919061261c565b815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010160046101000a81548163ffffffff021916908363ffffffff16021790555060608201518160010160086101000a81548160ff021916908360ff16021790555060808201518160010160096101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600201559050508573ffffffffffffffffffffffffffffffffffffffff167f8bf9cacb4cd237ca8757b8bd644a6bbe3c734237269c104dd7fdd61fd40e3ccd86868686604051611de5949392919061254a565b60405180910390a28573ffffffffffffffffffffffffffffffffffffffff16611e0c6117ad565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611e51919061252f565b60405180910390a36001905095945050505050565b505050565b6040518060c0016040528060008152602001600063ffffffff168152602001600063ffffffff168152602001600060ff168152602001600063ffffffff168152602001600081525090565b600081359050611ec581612b9a565b92915050565b600081359050611eda81612bb1565b92915050565b600081359050611eef81612bc8565b92915050565b600081359050611f0481612bdf565b92915050565b600081359050611f1981612bf6565b92915050565b600060208284031215611f3157600080fd5b6000611f3f84828501611eb6565b91505092915050565b60008060408385031215611f5b57600080fd5b6000611f6985828601611eb6565b9250506020611f7a85828601611eb6565b9150509250929050565b600080600060608486031215611f9957600080fd5b6000611fa786828701611eb6565b9350506020611fb886828701611eb6565b9250506040611fc986828701611ee0565b9150509250925092565b60008060408385031215611fe657600080fd5b6000611ff485828601611eb6565b925050602061200585828601611ee0565b9150509250929050565b600080600080600060a0868803121561202757600080fd5b600061203588828901611eb6565b955050602061204688828901611ee0565b945050604061205788828901611ef5565b935050606061206888828901611ef5565b925050608061207988828901611f0a565b9150509295509295909350565b60006020828403121561209857600080fd5b60006120a684828501611ecb565b91505092915050565b6120b881612721565b82525050565b6120c78161272d565b82525050565b60006120d8826125aa565b6120e281856125b5565b93506120f281856020860161277e565b6120fb81612870565b840191505092915050565b60006121136023836125b5565b915061211e82612881565b604082019050919050565b60006121366022836125b5565b9150612141826128d0565b604082019050919050565b60006121596015836125b5565b91506121648261291f565b602082019050919050565b600061217c6022836125b5565b915061218782612948565b604082019050919050565b600061219f6026836125b5565b91506121aa82612997565b604082019050919050565b60006121c26027836125b5565b91506121cd826129e6565b604082019050919050565b60006121e5601f836125b5565b91506121f082612a35565b602082019050919050565b60006122086028836125b5565b915061221382612a5e565b604082019050919050565b600061222b6025836125b5565b915061223682612aad565b604082019050919050565b600061224e6024836125b5565b915061225982612afc565b604082019050919050565b60006122716025836125b5565b915061227c82612b4b565b604082019050919050565b60c08201600082015161229d6000850182612302565b5060208201516122b06020850182612320565b5060408201516122c36040850182612320565b5060608201516122d6606085018261233e565b5060808201516122e96080850182612320565b5060a08201516122fc60a0850182612302565b50505050565b61230b81612757565b82525050565b61231a81612757565b82525050565b61232981612761565b82525050565b61233881612761565b82525050565b61234781612771565b82525050565b61235681612771565b82525050565b600060208201905061237160008301846120af565b92915050565b600060208201905061238c60008301846120be565b92915050565b600060208201905081810360008301526123ac81846120cd565b905092915050565b600060208201905081810360008301526123cd81612106565b9050919050565b600060208201905081810360008301526123ed81612129565b9050919050565b6000602082019050818103600083015261240d8161214c565b9050919050565b6000602082019050818103600083015261242d8161216f565b9050919050565b6000602082019050818103600083015261244d81612192565b9050919050565b6000602082019050818103600083015261246d816121b5565b9050919050565b6000602082019050818103600083015261248d816121d8565b9050919050565b600060208201905081810360008301526124ad816121fb565b9050919050565b600060208201905081810360008301526124cd8161221e565b9050919050565b600060208201905081810360008301526124ed81612241565b9050919050565b6000602082019050818103600083015261250d81612264565b9050919050565b600060c0820190506125296000830184612287565b92915050565b60006020820190506125446000830184612311565b92915050565b600060808201905061255f6000830187612311565b61256c602083018661232f565b612579604083018561232f565b612586606083018461234d565b95945050505050565b60006020820190506125a4600083018461234d565b92915050565b600081519050919050565b600082825260208201905092915050565b60006125d182612757565b91506125dc83612757565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612611576126106127e3565b5b828201905092915050565b600061262782612757565b915061263283612757565b92508261264257612641612812565b5b828204905092915050565b600061265882612757565b915061266383612757565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561269c5761269b6127e3565b5b828202905092915050565b60006126b282612757565b91506126bd83612757565b9250828210156126d0576126cf6127e3565b5b828203905092915050565b60006126e682612761565b91506126f183612761565b925082821015612704576127036127e3565b5b828203905092915050565b600061271a82612737565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b8381101561279c578082015181840152602081019050612781565b838111156127ab576000848401525b50505050565b600060028204905060018216806127c957607f821691505b602082108114156127dd576127dc612841565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f6e65206c6f636b20706572206164647265737320616c6c6f776560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f20756e6c6f636b61626c6520746f6b656e73210000000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f536f66744c6f636b206d7573742062652067726561746572207468616e20486160008201527f72644c6f636b2100000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e636500600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b612ba38161270f565b8114612bae57600080fd5b50565b612bba8161272d565b8114612bc557600080fd5b50565b612bd181612757565b8114612bdc57600080fd5b50565b612be881612761565b8114612bf357600080fd5b50565b612bff81612771565b8114612c0a57600080fd5b5056fea2646970667358221220dae0b7308e533ed6887411ac0fa9a38ede082f4334ef028cd393303b68139b0b64736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c80635af76875116100ad578063a457c2d711610071578063a457c2d71461036a578063a9059cbb1461039a578063b80e74d7146103ca578063dd62ed3e146103fa578063dfb40d1d1461042a57610121565b80635af76875146102a057806370a08231146102bc578063740499ab146102ec57806384955c881461031c57806395d89b411461034c57610121565b80632f6c493c116100f45780632f6c493c146101c2578063313ce567146101f2578063395093511461021057806359355736146102405780635a46d3b51461027057610121565b806306fdde0314610126578063095ea7b31461014457806318160ddd1461017457806323b872dd14610192575b600080fd5b61012e61045a565b60405161013b9190612392565b60405180910390f35b61015e60048036038101906101599190611fd3565b6104ec565b60405161016b919061235c565b60405180910390f35b61017c61050a565b604051610189919061252f565b60405180910390f35b6101ac60048036038101906101a79190611f84565b610514565b6040516101b9919061235c565b60405180910390f35b6101dc60048036038101906101d79190611f1f565b610615565b6040516101e9919061235c565b60405180910390f35b6101fa610a41565b604051610207919061258f565b60405180910390f35b61022a60048036038101906102259190611fd3565b610a4a565b604051610237919061235c565b60405180910390f35b61025a60048036038101906102559190611f1f565b610af6565b604051610267919061252f565b60405180910390f35b61028a60048036038101906102859190611f1f565b610b42565b6040516102979190612514565b60405180910390f35b6102ba60048036038101906102b59190612086565b610c3e565b005b6102d660048036038101906102d19190611f1f565b610c8c565b6040516102e3919061252f565b60405180910390f35b61030660048036038101906103019190611f1f565b610d21565b604051610313919061252f565b60405180910390f35b61033660048036038101906103319190611f1f565b610eef565b604051610343919061252f565b60405180910390f35b610354610f37565b6040516103619190612392565b60405180910390f35b610384600480360381019061037f9190611fd3565b610fc9565b604051610391919061235c565b60405180910390f35b6103b460048036038101906103af9190611fd3565b6110bd565b6040516103c1919061235c565b60405180910390f35b6103e460048036038101906103df919061200f565b6110db565b6040516103f1919061235c565b60405180910390f35b610414600480360381019061040f9190611f48565b6116dd565b604051610421919061252f565b60405180910390f35b610444600480360381019061043f9190611f1f565b611764565b6040516104519190612377565b60405180910390f35b606060038054610469906127b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610495906127b1565b80156104e25780601f106104b7576101008083540402835291602001916104e2565b820191906000526020600020905b8154815290600101906020018083116104c557829003601f168201915b5050505050905090565b60006105006104f96117ad565b84846117b5565b6001905092915050565b6000600254905090565b6000610521848484611980565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061056c6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156105ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e390612494565b60405180910390fd5b610609856105f86117ad565b858461060491906126a7565b6117b5565b60019150509392505050565b60008061062183610d21565b905060008111801561067557506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b80156106d85750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff1642115b610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070e906123f4565b60405180910390fd5b42600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160096101000a81548163ffffffff021916908363ffffffff16021790555080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546107c691906126a7565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461085691906125c6565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156109d257600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160006101000a81549063ffffffff02191690556001820160046101000a81549063ffffffff02191690556001820160086101000a81549060ff02191690556001820160096101000a81549063ffffffff0219169055600282016000905550508273ffffffffffffffffffffffffffffffffffffffff167f064f67e76df103eb3e142dac6110a06fcfc7a01ef2da651312b88eb6f0dd3d2860405160405180910390a25b8273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a2f919061252f565b60405180910390a36001915050919050565b60006012905090565b6000610aec610a576117ad565b848460016000610a656117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae791906125c6565b6117b5565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b610b4a611e6b565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160089054906101000a900460ff1660ff1660ff1681526020016001820160099054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815250509050919050565b8060056000610c4b6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d1a91906125c6565b9050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff16421015610d8c5760009050610eea565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160049054906101000a900463ffffffff1663ffffffff16421115610e3657600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050610eea565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160099054906101000a900463ffffffff1663ffffffff1642610edd91906126a7565b610ee7919061264d565b90505b919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054610f46906127b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f72906127b1565b8015610fbf5780601f10610f9457610100808354040283529160200191610fbf565b820191906000526020600020905b815481529060010190602001808311610fa257829003601f168201915b5050505050905090565b60008060016000610fd86117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c906124f4565b60405180910390fd5b6110b26110a06117ad565b8585846110ad91906126a7565b6117b5565b600191505092915050565b60006110d16110ca6117ad565b8484611980565b6001905092915050565b600080600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906123d4565b60405180910390fd5b846006600061116e6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546000806111b76117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111fc91906125c6565b101561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612474565b60405180910390fd5b846000806112496117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061133757846000806112956117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112da91906126a7565b6000806112e56117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113308686868686611bff565b90506116d4565b600660006113436117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff168463ffffffff16101580156114115750600660006113b36117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160049054906101000a900463ffffffff1663ffffffff168363ffffffff1610155b80156114785750600660006114246117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160089054906101000a900460ff1660ff168260ff16105b61148157600080fd5b846006600061148e6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154106115875784600660006114de6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461152691906126a7565b600660006115326117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506115808686868686611bff565b90506116d4565b600660006115936117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154856115dc91906126a7565b6000806115e76117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461162c91906126a7565b6000806116376117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660006116836117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506116d18686868686611bff565b90505b95945050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906124d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90612414565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611973919061252f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e7906124b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a57906123b4565b60405180910390fd5b611a6b838383611e66565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890612434565b60405180910390fd5b8181611afd91906126a7565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8d91906125c6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bf1919061252f565b60405180910390a350505050565b60008363ffffffff168363ffffffff1611611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690612454565b60405180910390fd5b6040518060c001604052808681526020018563ffffffff1681526020018463ffffffff1681526020018360ff1681526020018563ffffffff1681526020018585611c9991906126db565b63ffffffff1687611caa919061261c565b815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010160046101000a81548163ffffffff021916908363ffffffff16021790555060608201518160010160086101000a81548160ff021916908360ff16021790555060808201518160010160096101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600201559050508573ffffffffffffffffffffffffffffffffffffffff167f8bf9cacb4cd237ca8757b8bd644a6bbe3c734237269c104dd7fdd61fd40e3ccd86868686604051611de5949392919061254a565b60405180910390a28573ffffffffffffffffffffffffffffffffffffffff16611e0c6117ad565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611e51919061252f565b60405180910390a36001905095945050505050565b505050565b6040518060c0016040528060008152602001600063ffffffff168152602001600063ffffffff168152602001600060ff168152602001600063ffffffff168152602001600081525090565b600081359050611ec581612b9a565b92915050565b600081359050611eda81612bb1565b92915050565b600081359050611eef81612bc8565b92915050565b600081359050611f0481612bdf565b92915050565b600081359050611f1981612bf6565b92915050565b600060208284031215611f3157600080fd5b6000611f3f84828501611eb6565b91505092915050565b60008060408385031215611f5b57600080fd5b6000611f6985828601611eb6565b9250506020611f7a85828601611eb6565b9150509250929050565b600080600060608486031215611f9957600080fd5b6000611fa786828701611eb6565b9350506020611fb886828701611eb6565b9250506040611fc986828701611ee0565b9150509250925092565b60008060408385031215611fe657600080fd5b6000611ff485828601611eb6565b925050602061200585828601611ee0565b9150509250929050565b600080600080600060a0868803121561202757600080fd5b600061203588828901611eb6565b955050602061204688828901611ee0565b945050604061205788828901611ef5565b935050606061206888828901611ef5565b925050608061207988828901611f0a565b9150509295509295909350565b60006020828403121561209857600080fd5b60006120a684828501611ecb565b91505092915050565b6120b881612721565b82525050565b6120c78161272d565b82525050565b60006120d8826125aa565b6120e281856125b5565b93506120f281856020860161277e565b6120fb81612870565b840191505092915050565b60006121136023836125b5565b915061211e82612881565b604082019050919050565b60006121366022836125b5565b9150612141826128d0565b604082019050919050565b60006121596015836125b5565b91506121648261291f565b602082019050919050565b600061217c6022836125b5565b915061218782612948565b604082019050919050565b600061219f6026836125b5565b91506121aa82612997565b604082019050919050565b60006121c26027836125b5565b91506121cd826129e6565b604082019050919050565b60006121e5601f836125b5565b91506121f082612a35565b602082019050919050565b60006122086028836125b5565b915061221382612a5e565b604082019050919050565b600061222b6025836125b5565b915061223682612aad565b604082019050919050565b600061224e6024836125b5565b915061225982612afc565b604082019050919050565b60006122716025836125b5565b915061227c82612b4b565b604082019050919050565b60c08201600082015161229d6000850182612302565b5060208201516122b06020850182612320565b5060408201516122c36040850182612320565b5060608201516122d6606085018261233e565b5060808201516122e96080850182612320565b5060a08201516122fc60a0850182612302565b50505050565b61230b81612757565b82525050565b61231a81612757565b82525050565b61232981612761565b82525050565b61233881612761565b82525050565b61234781612771565b82525050565b61235681612771565b82525050565b600060208201905061237160008301846120af565b92915050565b600060208201905061238c60008301846120be565b92915050565b600060208201905081810360008301526123ac81846120cd565b905092915050565b600060208201905081810360008301526123cd81612106565b9050919050565b600060208201905081810360008301526123ed81612129565b9050919050565b6000602082019050818103600083015261240d8161214c565b9050919050565b6000602082019050818103600083015261242d8161216f565b9050919050565b6000602082019050818103600083015261244d81612192565b9050919050565b6000602082019050818103600083015261246d816121b5565b9050919050565b6000602082019050818103600083015261248d816121d8565b9050919050565b600060208201905081810360008301526124ad816121fb565b9050919050565b600060208201905081810360008301526124cd8161221e565b9050919050565b600060208201905081810360008301526124ed81612241565b9050919050565b6000602082019050818103600083015261250d81612264565b9050919050565b600060c0820190506125296000830184612287565b92915050565b60006020820190506125446000830184612311565b92915050565b600060808201905061255f6000830187612311565b61256c602083018661232f565b612579604083018561232f565b612586606083018461234d565b95945050505050565b60006020820190506125a4600083018461234d565b92915050565b600081519050919050565b600082825260208201905092915050565b60006125d182612757565b91506125dc83612757565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612611576126106127e3565b5b828201905092915050565b600061262782612757565b915061263283612757565b92508261264257612641612812565b5b828204905092915050565b600061265882612757565b915061266383612757565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561269c5761269b6127e3565b5b828202905092915050565b60006126b282612757565b91506126bd83612757565b9250828210156126d0576126cf6127e3565b5b828203905092915050565b60006126e682612761565b91506126f183612761565b925082821015612704576127036127e3565b5b828203905092915050565b600061271a82612737565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b8381101561279c578082015181840152602081019050612781565b838111156127ab576000848401525b50505050565b600060028204905060018216806127c957607f821691505b602082108114156127dd576127dc612841565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f6e65206c6f636b20706572206164647265737320616c6c6f776560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f20756e6c6f636b61626c6520746f6b656e73210000000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f536f66744c6f636b206d7573742062652067726561746572207468616e20486160008201527f72644c6f636b2100000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e636500600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b612ba38161270f565b8114612bae57600080fd5b50565b612bba8161272d565b8114612bc557600080fd5b50565b612bd181612757565b8114612bdc57600080fd5b50565b612be881612761565b8114612bf357600080fd5b50565b612bff81612771565b8114612c0a57600080fd5b5056fea2646970667358221220dae0b7308e533ed6887411ac0fa9a38ede082f4334ef028cd393303b68139b0b64736f6c63430008040033

Deployed Bytecode Sourcemap

14538:6888:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5623:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7777:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6722:110;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8430:424;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20400:1023;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6571:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9263:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19482:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16300:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15215:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16492:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19761:631;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19625:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5835:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9983:379;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7237:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16706:2023;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7477:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15403:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5623:93;5670:13;5703:5;5696:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5623:93;:::o;7777:171::-;7862:4;7879:39;7888:12;:10;:12::i;:::-;7902:7;7911:6;7879:8;:39::i;:::-;7936:4;7929:11;;7777:171;;;;:::o;6722:110::-;6785:7;6812:12;;6805:19;;6722:110;:::o;8430:424::-;8538:4;8555:36;8565:6;8573:9;8584:6;8555:9;:36::i;:::-;8604:24;8631:11;:19;8643:6;8631:19;;;;;;;;;;;;;;;:33;8651:12;:10;:12::i;:::-;8631:33;;;;;;;;;;;;;;;;8604:60;;8703:6;8683:16;:26;;8675:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8765:57;8774:6;8782:12;:10;:12::i;:::-;8815:6;8796:16;:25;;;;:::i;:::-;8765:8;:57::i;:::-;8842:4;8835:11;;;8430:424;;;;;:::o;20400:1023::-;20451:4;20511:18;20532:28;20552:7;20532:19;:28::i;:::-;20511:49;;20684:1;20671:10;:14;:49;;;;;20719:1;20689:6;:15;20696:7;20689:15;;;;;;;;;;;;;;;:27;;;:31;20671:49;:100;;;;;20742:6;:15;20749:7;20742:15;;;;;;;;;;;;;;;:29;;;;;;;;;;;;20724:47;;:15;:47;20671:100;20663:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;20935:15;20899:6;:15;20906:7;20899:15;;;;;;;;;;;;;;;:26;;;:52;;;;;;;;;;;;;;;;;;21022:10;20992:6;:15;20999:7;20992:15;;;;;;;;;;;;;;;:27;;;:40;;;;:::i;:::-;20962:6;:15;20969:7;20962:15;;;;;;;;;;;;;;;:27;;:70;;;;21085:10;21064:9;:18;21074:7;21064:18;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;21043:9;:18;21053:7;21043:18;;;;;;;;;;;;;;;:52;;;;21217:1;21186:6;:15;21193:7;21186:15;;;;;;;;;;;;;;;:27;;;:32;21183:125;;;21241:6;:15;21248:7;21241:15;;;;;;;;;;;;;;;;21234:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21288:7;21276:20;;;;;;;;;;;;21183:125;21373:7;21355:38;;21364:7;21355:38;;;21382:10;21355:38;;;;;;:::i;:::-;;;;;;;;21411:4;21404:11;;;20400:1023;;;:::o;6571:86::-;6622:5;6647:2;6640:9;;6571:86;:::o;9263:217::-;9353:4;9370:80;9379:12;:10;:12::i;:::-;9393:7;9439:10;9402:11;:25;9414:12;:10;:12::i;:::-;9402:25;;;;;;;;;;;;;;;:34;9428:7;9402:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9370:8;:80::i;:::-;9468:4;9461:11;;9263:217;;;;:::o;19482:135::-;19555:7;19582:6;:15;19589:7;19582:15;;;;;;;;;;;;;;;:27;;;19575:34;;19482:135;;;:::o;16300:118::-;16364:11;;:::i;:::-;16395:6;:15;16402:7;16395:15;;;;;;;;;;;;;;;16388:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16300:118;;;:::o;15215:121::-;15317:11;15286:14;:28;15301:12;:10;:12::i;:::-;15286:28;;;;;;;;;;;;;;;:42;;;;15215:121;:::o;16492:159::-;16568:7;16616:6;:15;16623:7;16616:15;;;;;;;;;;;;;;;:27;;;16595:9;:18;16605:7;16595:18;;;;;;;;;;;;;;;;:48;;;;:::i;:::-;16588:55;;16492:159;;;:::o;19761:631::-;19836:7;19958:6;:15;19965:7;19958:15;;;;;;;;;;;;;;;:29;;;;;;;;;;;;19940:47;;:15;:47;19937:87;;;20011:1;20004:8;;;;19937:87;20136:6;:15;20143:7;20136:15;;;;;;;;;;;;;;;:29;;;;;;;;;;;;20118:47;;:15;:47;20115:113;;;20189:6;:15;20196:7;20189:15;;;;;;;;;;;;;;;:27;;;20182:34;;;;20115:113;20356:6;:15;20363:7;20356:15;;;;;;;;;;;;;;;:28;;;20326:6;:15;20333:7;20326:15;;;;;;;;;;;;;;;:26;;;;;;;;;;;;20308:44;;:15;:44;;;;:::i;:::-;20307:77;;;;:::i;:::-;20300:84;;19761:631;;;;:::o;19625:128::-;19700:7;19727:9;:18;19737:7;19727:18;;;;;;;;;;;;;;;;19720:25;;19625:128;;;:::o;5835:97::-;5884:13;5917:7;5910:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5835:97;:::o;9983:379::-;10078:4;10095:24;10122:11;:25;10134:12;:10;:12::i;:::-;10122:25;;;;;;;;;;;;;;;:34;10148:7;10122:34;;;;;;;;;;;;;;;;10095:61;;10195:15;10175:16;:35;;10167:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10263:67;10272:12;:10;:12::i;:::-;10286:7;10314:15;10295:16;:34;;;;:::i;:::-;10263:8;:67::i;:::-;10350:4;10343:11;;;9983:379;;;;:::o;7237:177::-;7325:4;7342:42;7352:12;:10;:12::i;:::-;7366:9;7377:6;7342:9;:42::i;:::-;7402:4;7395:11;;7237:177;;;;:::o;16706:2023::-;16846:4;16968:1;16935:6;:17;16942:9;16935:17;;;;;;;;;;;;;;;:29;;;:34;16927:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;17171:6;17135;:20;17142:12;:10;:12::i;:::-;17135:20;;;;;;;;;;;;;;;:32;;;17109:9;:23;17119:12;:10;:12::i;:::-;17109:23;;;;;;;;;;;;;;;;:58;;;;:::i;:::-;:68;;17101:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;17338:6;17311:9;:23;17321:12;:10;:12::i;:::-;17311:23;;;;;;;;;;;;;;;;:33;17308:285;;17452:6;17426:9;:23;17436:12;:10;:12::i;:::-;17426:23;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;17400:9;:23;17410:12;:10;:12::i;:::-;17400:23;;;;;;;;;;;;;;;:58;;;;17509:72;17520:9;17531:6;17539:13;17554;17569:11;17509:10;:72::i;:::-;17502:79;;;;17308:285;17754:6;:20;17761:12;:10;:12::i;:::-;17754:20;;;;;;;;;;;;;;;:34;;;;;;;;;;;;17737:51;;:13;:51;;;;:120;;;;;17823:6;:20;17830:12;:10;:12::i;:::-;17823:20;;;;;;;;;;;;;;;:34;;;;;;;;;;;;17806:51;;:13;:51;;;;17737:120;:184;;;;;17889:6;:20;17896:12;:10;:12::i;:::-;17889:20;;;;;;;;;;;;;;;:32;;;;;;;;;;;;17875:46;;:11;:46;;;17737:184;17715:217;;;;;;18032:6;17996;:20;18003:12;:10;:12::i;:::-;17996:20;;;;;;;;;;;;;;;:32;;;:42;17993:324;;18176:6;18141;:20;18148:12;:10;:12::i;:::-;18141:20;;;;;;;;;;;;;;;:32;;;:41;;;;:::i;:::-;18106:6;:20;18113:12;:10;:12::i;:::-;18106:20;;;;;;;;;;;;;;;:32;;:76;;;;18233:72;18244:9;18255:6;18263:13;18278;18293:11;18233:10;:72::i;:::-;18226:79;;;;17993:324;18470:6;:20;18477:12;:10;:12::i;:::-;18470:20;;;;;;;;;;;;;;;:32;;;18461:6;:41;;;;:::i;:::-;18434:9;:23;18444:12;:10;:12::i;:::-;18434:23;;;;;;;;;;;;;;;;:69;;;;:::i;:::-;18408:9;:23;18418:12;:10;:12::i;:::-;18408:23;;;;;;;;;;;;;;;:95;;;;18605:1;18570:6;:20;18577:12;:10;:12::i;:::-;18570:20;;;;;;;;;;;;;;;:32;;:36;;;;18649:72;18660:9;18671:6;18679:13;18694;18709:11;18649:10;:72::i;:::-;18642:79;;16706:2023;;;;;;;;:::o;7477:153::-;7568:7;7595:11;:18;7607:5;7595:18;;;;;;;;;;;;;;;:27;7614:7;7595:27;;;;;;;;;;;;;;;;7588:34;;7477:153;;;;:::o;15403:136::-;15481:7;15508:14;:23;15523:7;15508:23;;;;;;;;;;;;;;;;15501:30;;15403:136;;;:::o;3314:98::-;3367:7;3394:10;3387:17;;3314:98;:::o;13341:346::-;13460:1;13443:19;;:5;:19;;;;13435:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13541:1;13522:21;;:7;:21;;;;13514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13625:6;13595:11;:18;13607:5;13595:18;;;;;;;;;;;;;;;:27;13614:7;13595:27;;;;;;;;;;;;;;;:36;;;;13663:7;13647:32;;13656:5;13647:32;;;13672:6;13647:32;;;;;;:::i;:::-;;;;;;;;13341:346;;;:::o;10852:604::-;10976:1;10958:20;;:6;:20;;;;10950:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11060:1;11039:23;;:9;:23;;;;11031:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11115:47;11136:6;11144:9;11155:6;11115:20;:47::i;:::-;11175:21;11199:9;:17;11209:6;11199:17;;;;;;;;;;;;;;;;11175:41;;11252:6;11235:13;:23;;11227:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11348:6;11332:13;:22;;;;:::i;:::-;11312:9;:17;11322:6;11312:17;;;;;;;;;;;;;;;:42;;;;11389:6;11365:9;:20;11375:9;11365:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11430:9;11413:35;;11422:6;11413:35;;;11441:6;11413:35;;;;;;:::i;:::-;;;;;;;;10852:604;;;;:::o;18820:654::-;18955:4;19052:13;19036:29;;:13;:29;;;19028:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;19186:112;;;;;;;;19191:6;19186:112;;;;19199:13;19186:112;;;;;;19214:13;19186:112;;;;;;19229:11;19186:112;;;;;;19242:13;19186:112;;;;;;19283:13;19267;:29;;;;:::i;:::-;19257:40;;:6;:40;;;;:::i;:::-;19186:112;;;19166:6;:17;19173:9;19166:17;;;;;;;;;;;;;;;:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19326:9;19314:73;;;19337:6;19345:13;19360;19375:11;19314:73;;;;;;;;;:::i;:::-;;;;;;;;19426:9;19403:41;;19412:12;:10;:12::i;:::-;19403:41;;;19437:6;19403:41;;;;;;:::i;:::-;;;;;;;;19462:4;19455:11;;18820:654;;;;;;;:::o;14290:92::-;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:139::-;343:5;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;349:87;;;;:::o;442:137::-;487:5;525:6;512:20;503:29;;541:32;567:5;541:32;:::i;:::-;493:86;;;;:::o;585:135::-;629:5;667:6;654:20;645:29;;683:31;708:5;683:31;:::i;:::-;635:85;;;;:::o;726:262::-;785:6;834:2;822:9;813:7;809:23;805:32;802:2;;;850:1;847;840:12;802:2;893:1;918:53;963:7;954:6;943:9;939:22;918:53;:::i;:::-;908:63;;864:117;792:196;;;;:::o;994:407::-;1062:6;1070;1119:2;1107:9;1098:7;1094:23;1090:32;1087:2;;;1135:1;1132;1125:12;1087:2;1178:1;1203:53;1248:7;1239:6;1228:9;1224:22;1203:53;:::i;:::-;1193:63;;1149:117;1305:2;1331:53;1376:7;1367:6;1356:9;1352:22;1331:53;:::i;:::-;1321:63;;1276:118;1077:324;;;;;:::o;1407:552::-;1484:6;1492;1500;1549:2;1537:9;1528:7;1524:23;1520:32;1517:2;;;1565:1;1562;1555:12;1517:2;1608:1;1633:53;1678:7;1669:6;1658:9;1654:22;1633:53;:::i;:::-;1623:63;;1579:117;1735:2;1761:53;1806:7;1797:6;1786:9;1782:22;1761:53;:::i;:::-;1751:63;;1706:118;1863:2;1889:53;1934:7;1925:6;1914:9;1910:22;1889:53;:::i;:::-;1879:63;;1834:118;1507:452;;;;;:::o;1965:407::-;2033:6;2041;2090:2;2078:9;2069:7;2065:23;2061:32;2058:2;;;2106:1;2103;2096:12;2058:2;2149:1;2174:53;2219:7;2210:6;2199:9;2195:22;2174:53;:::i;:::-;2164:63;;2120:117;2276:2;2302:53;2347:7;2338:6;2327:9;2323:22;2302:53;:::i;:::-;2292:63;;2247:118;2048:324;;;;;:::o;2378:836::-;2469:6;2477;2485;2493;2501;2550:3;2538:9;2529:7;2525:23;2521:33;2518:2;;;2567:1;2564;2557:12;2518:2;2610:1;2635:53;2680:7;2671:6;2660:9;2656:22;2635:53;:::i;:::-;2625:63;;2581:117;2737:2;2763:53;2808:7;2799:6;2788:9;2784:22;2763:53;:::i;:::-;2753:63;;2708:118;2865:2;2891:52;2935:7;2926:6;2915:9;2911:22;2891:52;:::i;:::-;2881:62;;2836:117;2992:2;3018:52;3062:7;3053:6;3042:9;3038:22;3018:52;:::i;:::-;3008:62;;2963:117;3119:3;3146:51;3189:7;3180:6;3169:9;3165:22;3146:51;:::i;:::-;3136:61;;3090:117;2508:706;;;;;;;;:::o;3220:262::-;3279:6;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3286:196;;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3547:50;;:::o;3603:118::-;3690:24;3708:5;3690:24;:::i;:::-;3685:3;3678:37;3668:53;;:::o;3727:364::-;3815:3;3843:39;3876:5;3843:39;:::i;:::-;3898:71;3962:6;3957:3;3898:71;:::i;:::-;3891:78;;3978:52;4023:6;4018:3;4011:4;4004:5;4000:16;3978:52;:::i;:::-;4055:29;4077:6;4055:29;:::i;:::-;4050:3;4046:39;4039:46;;3819:272;;;;;:::o;4097:366::-;4239:3;4260:67;4324:2;4319:3;4260:67;:::i;:::-;4253:74;;4336:93;4425:3;4336:93;:::i;:::-;4454:2;4449:3;4445:12;4438:19;;4243:220;;;:::o;4469:366::-;4611:3;4632:67;4696:2;4691:3;4632:67;:::i;:::-;4625:74;;4708:93;4797:3;4708:93;:::i;:::-;4826:2;4821:3;4817:12;4810:19;;4615:220;;;:::o;4841:366::-;4983:3;5004:67;5068:2;5063:3;5004:67;:::i;:::-;4997:74;;5080:93;5169:3;5080:93;:::i;:::-;5198:2;5193:3;5189:12;5182:19;;4987:220;;;:::o;5213:366::-;5355:3;5376:67;5440:2;5435:3;5376:67;:::i;:::-;5369:74;;5452:93;5541:3;5452:93;:::i;:::-;5570:2;5565:3;5561:12;5554:19;;5359:220;;;:::o;5585:366::-;5727:3;5748:67;5812:2;5807:3;5748:67;:::i;:::-;5741:74;;5824:93;5913:3;5824:93;:::i;:::-;5942:2;5937:3;5933:12;5926:19;;5731:220;;;:::o;5957:366::-;6099:3;6120:67;6184:2;6179:3;6120:67;:::i;:::-;6113:74;;6196:93;6285:3;6196:93;:::i;:::-;6314:2;6309:3;6305:12;6298:19;;6103:220;;;:::o;6329:366::-;6471:3;6492:67;6556:2;6551:3;6492:67;:::i;:::-;6485:74;;6568:93;6657:3;6568:93;:::i;:::-;6686:2;6681:3;6677:12;6670:19;;6475:220;;;:::o;6701:366::-;6843:3;6864:67;6928:2;6923:3;6864:67;:::i;:::-;6857:74;;6940:93;7029:3;6940:93;:::i;:::-;7058:2;7053:3;7049:12;7042:19;;6847:220;;;:::o;7073:366::-;7215:3;7236:67;7300:2;7295:3;7236:67;:::i;:::-;7229:74;;7312:93;7401:3;7312:93;:::i;:::-;7430:2;7425:3;7421:12;7414:19;;7219:220;;;:::o;7445:366::-;7587:3;7608:67;7672:2;7667:3;7608:67;:::i;:::-;7601:74;;7684:93;7773:3;7684:93;:::i;:::-;7802:2;7797:3;7793:12;7786:19;;7591:220;;;:::o;7817:366::-;7959:3;7980:67;8044:2;8039:3;7980:67;:::i;:::-;7973:74;;8056:93;8145:3;8056:93;:::i;:::-;8174:2;8169:3;8165:12;8158:19;;7963:220;;;:::o;8233:1231::-;8372:4;8367:3;8363:14;8466:4;8459:5;8455:16;8449:23;8485:63;8542:4;8537:3;8533:14;8519:12;8485:63;:::i;:::-;8387:171;8649:4;8642:5;8638:16;8632:23;8668:61;8723:4;8718:3;8714:14;8700:12;8668:61;:::i;:::-;8568:171;8830:4;8823:5;8819:16;8813:23;8849:61;8904:4;8899:3;8895:14;8881:12;8849:61;:::i;:::-;8749:171;9009:4;9002:5;8998:16;8992:23;9028:59;9081:4;9076:3;9072:14;9058:12;9028:59;:::i;:::-;8930:167;9185:4;9178:5;9174:16;9168:23;9204:61;9259:4;9254:3;9250:14;9236:12;9204:61;:::i;:::-;9107:168;9365:4;9358:5;9354:16;9348:23;9384:63;9441:4;9436:3;9432:14;9418:12;9384:63;:::i;:::-;9285:172;8341:1123;;;:::o;9470:108::-;9547:24;9565:5;9547:24;:::i;:::-;9542:3;9535:37;9525:53;;:::o;9584:118::-;9671:24;9689:5;9671:24;:::i;:::-;9666:3;9659:37;9649:53;;:::o;9708:105::-;9783:23;9800:5;9783:23;:::i;:::-;9778:3;9771:36;9761:52;;:::o;9819:115::-;9904:23;9921:5;9904:23;:::i;:::-;9899:3;9892:36;9882:52;;:::o;9940:102::-;10013:22;10029:5;10013:22;:::i;:::-;10008:3;10001:35;9991:51;;:::o;10048:112::-;10131:22;10147:5;10131:22;:::i;:::-;10126:3;10119:35;10109:51;;:::o;10166:210::-;10253:4;10291:2;10280:9;10276:18;10268:26;;10304:65;10366:1;10355:9;10351:17;10342:6;10304:65;:::i;:::-;10258:118;;;;:::o;10382:222::-;10475:4;10513:2;10502:9;10498:18;10490:26;;10526:71;10594:1;10583:9;10579:17;10570:6;10526:71;:::i;:::-;10480:124;;;;:::o;10610:313::-;10723:4;10761:2;10750:9;10746:18;10738:26;;10810:9;10804:4;10800:20;10796:1;10785:9;10781:17;10774:47;10838:78;10911:4;10902:6;10838:78;:::i;:::-;10830:86;;10728:195;;;;:::o;10929:419::-;11095:4;11133:2;11122:9;11118:18;11110:26;;11182:9;11176:4;11172:20;11168:1;11157:9;11153:17;11146:47;11210:131;11336:4;11210:131;:::i;:::-;11202:139;;11100:248;;;:::o;11354:419::-;11520:4;11558:2;11547:9;11543:18;11535:26;;11607:9;11601:4;11597:20;11593:1;11582:9;11578:17;11571:47;11635:131;11761:4;11635:131;:::i;:::-;11627:139;;11525:248;;;:::o;11779:419::-;11945:4;11983:2;11972:9;11968:18;11960:26;;12032:9;12026:4;12022:20;12018:1;12007:9;12003:17;11996:47;12060:131;12186:4;12060:131;:::i;:::-;12052:139;;11950:248;;;:::o;12204:419::-;12370:4;12408:2;12397:9;12393:18;12385:26;;12457:9;12451:4;12447:20;12443:1;12432:9;12428:17;12421:47;12485:131;12611:4;12485:131;:::i;:::-;12477:139;;12375:248;;;:::o;12629:419::-;12795:4;12833:2;12822:9;12818:18;12810:26;;12882:9;12876:4;12872:20;12868:1;12857:9;12853:17;12846:47;12910:131;13036:4;12910:131;:::i;:::-;12902:139;;12800:248;;;:::o;13054:419::-;13220:4;13258:2;13247:9;13243:18;13235:26;;13307:9;13301:4;13297:20;13293:1;13282:9;13278:17;13271:47;13335:131;13461:4;13335:131;:::i;:::-;13327:139;;13225:248;;;:::o;13479:419::-;13645:4;13683:2;13672:9;13668:18;13660:26;;13732:9;13726:4;13722:20;13718:1;13707:9;13703:17;13696:47;13760:131;13886:4;13760:131;:::i;:::-;13752:139;;13650:248;;;:::o;13904:419::-;14070:4;14108:2;14097:9;14093:18;14085:26;;14157:9;14151:4;14147:20;14143:1;14132:9;14128:17;14121:47;14185:131;14311:4;14185:131;:::i;:::-;14177:139;;14075:248;;;:::o;14329:419::-;14495:4;14533:2;14522:9;14518:18;14510:26;;14582:9;14576:4;14572:20;14568:1;14557:9;14553:17;14546:47;14610:131;14736:4;14610:131;:::i;:::-;14602:139;;14500:248;;;:::o;14754:419::-;14920:4;14958:2;14947:9;14943:18;14935:26;;15007:9;15001:4;14997:20;14993:1;14982:9;14978:17;14971:47;15035:131;15161:4;15035:131;:::i;:::-;15027:139;;14925:248;;;:::o;15179:419::-;15345:4;15383:2;15372:9;15368:18;15360:26;;15432:9;15426:4;15422:20;15418:1;15407:9;15403:17;15396:47;15460:131;15586:4;15460:131;:::i;:::-;15452:139;;15350:248;;;:::o;15604:307::-;15739:4;15777:3;15766:9;15762:19;15754:27;;15791:113;15901:1;15890:9;15886:17;15877:6;15791:113;:::i;:::-;15744:167;;;;:::o;15917:222::-;16010:4;16048:2;16037:9;16033:18;16025:26;;16061:71;16129:1;16118:9;16114:17;16105:6;16061:71;:::i;:::-;16015:124;;;;:::o;16145:537::-;16314:4;16352:3;16341:9;16337:19;16329:27;;16366:71;16434:1;16423:9;16419:17;16410:6;16366:71;:::i;:::-;16447:70;16513:2;16502:9;16498:18;16489:6;16447:70;:::i;:::-;16527;16593:2;16582:9;16578:18;16569:6;16527:70;:::i;:::-;16607:68;16671:2;16660:9;16656:18;16647:6;16607:68;:::i;:::-;16319:363;;;;;;;:::o;16688:214::-;16777:4;16815:2;16804:9;16800:18;16792:26;;16828:67;16892:1;16881:9;16877:17;16868:6;16828:67;:::i;:::-;16782:120;;;;:::o;16908:99::-;16960:6;16994:5;16988:12;16978:22;;16967:40;;;:::o;17013:169::-;17097:11;17131:6;17126:3;17119:19;17171:4;17166:3;17162:14;17147:29;;17109:73;;;;:::o;17188:305::-;17228:3;17247:20;17265:1;17247:20;:::i;:::-;17242:25;;17281:20;17299:1;17281:20;:::i;:::-;17276:25;;17435:1;17367:66;17363:74;17360:1;17357:81;17354:2;;;17441:18;;:::i;:::-;17354:2;17485:1;17482;17478:9;17471:16;;17232:261;;;;:::o;17499:185::-;17539:1;17556:20;17574:1;17556:20;:::i;:::-;17551:25;;17590:20;17608:1;17590:20;:::i;:::-;17585:25;;17629:1;17619:2;;17634:18;;:::i;:::-;17619:2;17676:1;17673;17669:9;17664:14;;17541:143;;;;:::o;17690:348::-;17730:7;17753:20;17771:1;17753:20;:::i;:::-;17748:25;;17787:20;17805:1;17787:20;:::i;:::-;17782:25;;17975:1;17907:66;17903:74;17900:1;17897:81;17892:1;17885:9;17878:17;17874:105;17871:2;;;17982:18;;:::i;:::-;17871:2;18030:1;18027;18023:9;18012:20;;17738:300;;;;:::o;18044:191::-;18084:4;18104:20;18122:1;18104:20;:::i;:::-;18099:25;;18138:20;18156:1;18138:20;:::i;:::-;18133:25;;18177:1;18174;18171:8;18168:2;;;18182:18;;:::i;:::-;18168:2;18227:1;18224;18220:9;18212:17;;18089:146;;;;:::o;18241:188::-;18280:4;18300:19;18317:1;18300:19;:::i;:::-;18295:24;;18333:19;18350:1;18333:19;:::i;:::-;18328:24;;18371:1;18368;18365:8;18362:2;;;18376:18;;:::i;:::-;18362:2;18421:1;18418;18414:9;18406:17;;18285:144;;;;:::o;18435:96::-;18472:7;18501:24;18519:5;18501:24;:::i;:::-;18490:35;;18480:51;;;:::o;18537:90::-;18571:7;18614:5;18607:13;18600:21;18589:32;;18579:48;;;:::o;18633:77::-;18670:7;18699:5;18688:16;;18678:32;;;:::o;18716:126::-;18753:7;18793:42;18786:5;18782:54;18771:65;;18761:81;;;:::o;18848:77::-;18885:7;18914:5;18903:16;;18893:32;;;:::o;18931:93::-;18967:7;19007:10;19000:5;18996:22;18985:33;;18975:49;;;:::o;19030:86::-;19065:7;19105:4;19098:5;19094:16;19083:27;;19073:43;;;:::o;19122:307::-;19190:1;19200:113;19214:6;19211:1;19208:13;19200:113;;;19299:1;19294:3;19290:11;19284:18;19280:1;19275:3;19271:11;19264:39;19236:2;19233:1;19229:10;19224:15;;19200:113;;;19331:6;19328:1;19325:13;19322:2;;;19411:1;19402:6;19397:3;19393:16;19386:27;19322:2;19171:258;;;;:::o;19435:320::-;19479:6;19516:1;19510:4;19506:12;19496:22;;19563:1;19557:4;19553:12;19584:18;19574:2;;19640:4;19632:6;19628:17;19618:27;;19574:2;19702;19694:6;19691:14;19671:18;19668:38;19665:2;;;19721:18;;:::i;:::-;19665:2;19486:269;;;;:::o;19761:180::-;19809:77;19806:1;19799:88;19906:4;19903:1;19896:15;19930:4;19927:1;19920:15;19947:180;19995:77;19992:1;19985:88;20092:4;20089:1;20082:15;20116:4;20113:1;20106:15;20133:180;20181:77;20178:1;20171:88;20278:4;20275:1;20268:15;20302:4;20299:1;20292:15;20319:102;20360:6;20411:2;20407:7;20402:2;20395:5;20391:14;20387:28;20377:38;;20367:54;;;:::o;20427:222::-;20567:34;20563:1;20555:6;20551:14;20544:58;20636:5;20631:2;20623:6;20619:15;20612:30;20533:116;:::o;20655:221::-;20795:34;20791:1;20783:6;20779:14;20772:58;20864:4;20859:2;20851:6;20847:15;20840:29;20761:115;:::o;20882:171::-;21022:23;21018:1;21010:6;21006:14;20999:47;20988:65;:::o;21059:221::-;21199:34;21195:1;21187:6;21183:14;21176:58;21268:4;21263:2;21255:6;21251:15;21244:29;21165:115;:::o;21286:225::-;21426:34;21422:1;21414:6;21410:14;21403:58;21495:8;21490:2;21482:6;21478:15;21471:33;21392:119;:::o;21517:226::-;21657:34;21653:1;21645:6;21641:14;21634:58;21726:9;21721:2;21713:6;21709:15;21702:34;21623:120;:::o;21749:181::-;21889:33;21885:1;21877:6;21873:14;21866:57;21855:75;:::o;21936:227::-;22076:34;22072:1;22064:6;22060:14;22053:58;22145:10;22140:2;22132:6;22128:15;22121:35;22042:121;:::o;22169:224::-;22309:34;22305:1;22297:6;22293:14;22286:58;22378:7;22373:2;22365:6;22361:15;22354:32;22275:118;:::o;22399:223::-;22539:34;22535:1;22527:6;22523:14;22516:58;22608:6;22603:2;22595:6;22591:15;22584:31;22505:117;:::o;22628:224::-;22768:34;22764:1;22756:6;22752:14;22745:58;22837:7;22832:2;22824:6;22820:15;22813:32;22734:118;:::o;22858:122::-;22931:24;22949:5;22931:24;:::i;:::-;22924:5;22921:35;22911:2;;22970:1;22967;22960:12;22911:2;22901:79;:::o;22986:122::-;23059:24;23077:5;23059:24;:::i;:::-;23052:5;23049:35;23039:2;;23098:1;23095;23088:12;23039:2;23029:79;:::o;23114:122::-;23187:24;23205:5;23187:24;:::i;:::-;23180:5;23177:35;23167:2;;23226:1;23223;23216:12;23167:2;23157:79;:::o;23242:120::-;23314:23;23331:5;23314:23;:::i;:::-;23307:5;23304:34;23294:2;;23352:1;23349;23342:12;23294:2;23284:78;:::o;23368:118::-;23439:22;23455:5;23439:22;:::i;:::-;23432:5;23429:33;23419:2;;23476:1;23473;23466:12;23419:2;23409:77;:::o

Swarm Source

ipfs://dae0b7308e533ed6887411ac0fa9a38ede082f4334ef028cd393303b68139b0b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.