ETH Price: $3,182.36 (-7.55%)
Gas: 2 Gwei

Token

LilBanana (LILBANANA)
 

Overview

Max Total Supply

98,939.6680236898699998 LILBANANA

Holders

242

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
narckotikz.eth
Balance
550.54264185707 LILBANANA

Value
$0.00
0xb605fe904873Da0b0065183D89635aF49A50806F
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LilBanana

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 9 of 11: LilBanana.sol
// contracts/Zzz.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC20Burnable.sol";
import "./Ownable.sol";
import "./SafeMath.sol";
import "./IERC721Enumerable.sol";

contract LilBanana is ERC20Burnable, Ownable {
    /*
LBAC STAKING
*/

    using SafeMath for uint256;

    uint256 public MAX_WALLET_STAKED = 10;
    uint256 public EMISSIONS_RATE = 11574070000000;
    uint256 public CLAIM_END_TIME = 1898732640;

    address nullAddress = 0x0000000000000000000000000000000000000000;

    address public LBACAddress;

    //Mapping of LBAC to timestamp
    mapping(uint256 => uint256) internal tokenIdToTimeStamp;

    //Mapping of LBAC to staker
    mapping(uint256 => address) internal tokenIdToStaker;

    //Mapping of staker to LBAC
    mapping(address => uint256[]) internal stakerToTokenIds;

    constructor() ERC20("LilBanana", "LILBANANA") {}

    function setLBACAddress(address _LBACAddress) public onlyOwner {
        LBACAddress = _LBACAddress;
        return;
    }

    function getTokensStaked(address staker)
        public
        view
        returns (uint256[] memory)
    {
        return stakerToTokenIds[staker];
    }

    function remove(address staker, uint256 index) internal {
        if (index >= stakerToTokenIds[staker].length) return;

        for (uint256 i = index; i < stakerToTokenIds[staker].length - 1; i++) {
            stakerToTokenIds[staker][i] = stakerToTokenIds[staker][i + 1];
        }
        stakerToTokenIds[staker].pop();
    }

    function removeTokenIdFromStaker(address staker, uint256 tokenId) internal {
        for (uint256 i = 0; i < stakerToTokenIds[staker].length; i++) {
            if (stakerToTokenIds[staker][i] == tokenId) {
                //This is the tokenId to remove;
                remove(staker, i);
            }
        }
    }

    function stakeByIds(uint256[] memory tokenIds) public {
        require(
            stakerToTokenIds[msg.sender].length + tokenIds.length <=
                MAX_WALLET_STAKED,
            "Must have less than 31 mice staked!"
        );

        for (uint256 i = 0; i < tokenIds.length; i++) {
            require(
                IERC721(LBACAddress).ownerOf(tokenIds[i]) == msg.sender &&
                    tokenIdToStaker[tokenIds[i]] == nullAddress,
                "Token must be stakable by you!"
            );

            IERC721(LBACAddress).transferFrom(
                msg.sender,
                address(this),
                tokenIds[i]
            );

            stakerToTokenIds[msg.sender].push(tokenIds[i]);

            tokenIdToTimeStamp[tokenIds[i]] = block.timestamp;
            tokenIdToStaker[tokenIds[i]] = msg.sender;
        }
    }

    function unstakeAll() public {
        require(
            stakerToTokenIds[msg.sender].length > 0,
            "Must have at least one token staked!"
        );
        uint256 totalRewards = 0;

        for (uint256 i = stakerToTokenIds[msg.sender].length; i > 0; i--) {
            uint256 tokenId = stakerToTokenIds[msg.sender][i - 1];

            IERC721(LBACAddress).transferFrom(
                address(this),
                msg.sender,
                tokenId
            );

            totalRewards =
                totalRewards +
                ((block.timestamp - tokenIdToTimeStamp[tokenId]) *
                    EMISSIONS_RATE);

            removeTokenIdFromStaker(msg.sender, tokenId);

            tokenIdToStaker[tokenId] = nullAddress;
        }

        _mint(msg.sender, totalRewards);
    }

    function unstakeByIds(uint256[] memory tokenIds) public {
        uint256 totalRewards = 0;

        for (uint256 i = 0; i < tokenIds.length; i++) {
            require(
                tokenIdToStaker[tokenIds[i]] == msg.sender,
                "Message Sender was not original staker!"
            );

            IERC721(LBACAddress).transferFrom(
                address(this),
                msg.sender,
                tokenIds[i]
            );

            totalRewards =
                totalRewards +
                ((block.timestamp - tokenIdToTimeStamp[tokenIds[i]]) *
                    EMISSIONS_RATE);

            removeTokenIdFromStaker(msg.sender, tokenIds[i]);

            tokenIdToStaker[tokenIds[i]] = nullAddress;
        }

        _mint(msg.sender, totalRewards);
    }

    function claimByTokenId(uint256 tokenId) public {
        require(
            tokenIdToStaker[tokenId] == msg.sender,
            "Token is not claimable by you!"
        );
        require(block.timestamp < CLAIM_END_TIME, "Claim period is over!");

        _mint(
            msg.sender,
            ((block.timestamp - tokenIdToTimeStamp[tokenId]) * EMISSIONS_RATE)
        );

        tokenIdToTimeStamp[tokenId] = block.timestamp;
    }

    function claimAll() public {
        require(block.timestamp < CLAIM_END_TIME, "Claim period is over!");
        uint256[] memory tokenIds = stakerToTokenIds[msg.sender];
        uint256 totalRewards = 0;

        for (uint256 i = 0; i < tokenIds.length; i++) {
            require(
                tokenIdToStaker[tokenIds[i]] == msg.sender,
                "Token is not claimable by you!"
            );

            totalRewards =
                totalRewards +
                ((block.timestamp - tokenIdToTimeStamp[tokenIds[i]]) *
                    EMISSIONS_RATE);

            tokenIdToTimeStamp[tokenIds[i]] = block.timestamp;
        }

        _mint(msg.sender, totalRewards);
    }

    function getAllRewards(address staker) public view returns (uint256) {
        uint256[] memory tokenIds = stakerToTokenIds[staker];
        uint256 totalRewards = 0;

        for (uint256 i = 0; i < tokenIds.length; i++) {
            totalRewards =
                totalRewards +
                ((block.timestamp - tokenIdToTimeStamp[tokenIds[i]]) *
                    EMISSIONS_RATE);
        }

        return totalRewards;
    }

    function getRewardsByTokenId(uint256 tokenId)
        public
        view
        returns (uint256)
    {
        require(
            tokenIdToStaker[tokenId] != nullAddress,
            "Token is not staked!"
        );

        uint256 secondsStaked = block.timestamp - tokenIdToTimeStamp[tokenId];

        return secondsStaked * EMISSIONS_RATE;
    }

    function getStaker(uint256 tokenId) public view returns (address) {
        return tokenIdToStaker[tokenId];
    }
}

File 1 of 11: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 2 of 11: ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

File 3 of 11: ERC20Burnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Context.sol";

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        unchecked {
            _approve(account, _msgSender(), currentAllowance - amount);
        }
        _burn(account, amount);
    }
}

File 4 of 11: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 5 of 11: IERC20.sol
// 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);
}

File 6 of 11: IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";

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

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

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

File 7 of 11: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 8 of 11: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 11 of 11: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CLAIM_END_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMISSIONS_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LBACAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WALLET_STAKED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimByTokenId","outputs":[],"stateMutability":"nonpayable","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":"staker","type":"address"}],"name":"getAllRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRewardsByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getStaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getTokensStaked","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_LBACAddress","type":"address"}],"name":"setLBACAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeByIds","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeByIds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a600655650a86cc54b98060075563712c5c606008556000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006a57600080fd5b506040518060400160405280600981526020017f4c696c42616e616e6100000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4c494c42414e414e4100000000000000000000000000000000000000000000008152508160039080519060200190620000ef929190620001ff565b50806004908051906020019062000108929190620001ff565b5050506200012b6200011f6200013160201b60201c565b6200013960201b60201c565b62000314565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020d90620002af565b90600052602060002090601f0160209004810192826200023157600085556200027d565b82601f106200024c57805160ff19168380011785556200027d565b828001600101855582156200027d579182015b828111156200027c5782518255916020019190600101906200025f565b5b5090506200028c919062000290565b5090565b5b80821115620002ab57600081600090555060010162000291565b5090565b60006002820490506001821680620002c857607f821691505b60208210811415620002df57620002de620002e5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613c3b80620003246000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80635e1f1e2a11610104578063a457c2d7116100a2578063d9ffad4711610071578063d9ffad4714610547578063dd62ed3e14610563578063e3c998fe14610593578063f2fde38b146105c3576101da565b8063a457c2d7146104bf578063a9059cbb146104ef578063ba7e76621461051f578063d1058e591461053d576101da565b806379cc6790116100de57806379cc6790146104495780638ab8fab3146104655780638da5cb5b1461048357806395d89b41146104a1576101da565b80635e1f1e2a146103f357806370a082311461040f578063715018a61461043f576101da565b806335322f371161017c57806348aa19361161014b57806348aa19361461035b578063515ec10514610377578063529cef99146103a757806352eb7796146103c3576101da565b806335322f37146102d5578063362a3fad146102df578063395093511461030f57806342966c681461033f576101da565b80632209d38c116101b85780632209d38c1461024b57806323b872dd146102695780633112bc8e14610299578063313ce567146102b7576101da565b806306fdde03146101df578063095ea7b3146101fd57806318160ddd1461022d575b600080fd5b6101e76105df565b6040516101f49190612fbf565b60405180910390f35b61021760048036038101906102129190612ac4565b610671565b6040516102249190612fa4565b60405180910390f35b61023561068f565b6040516102429190613261565b60405180910390f35b610253610699565b6040516102609190613261565b60405180910390f35b610283600480360381019061027e9190612a71565b61069f565b6040516102909190612fa4565b60405180910390f35b6102a1610797565b6040516102ae9190612f30565b60405180910390f35b6102bf6107bd565b6040516102cc919061327c565b60405180910390f35b6102dd6107c6565b005b6102f960048036038101906102f491906129d7565b610a73565b6040516103069190613261565b60405180910390f35b61032960048036038101906103249190612ac4565b610b84565b6040516103369190612fa4565b60405180910390f35b61035960048036038101906103549190612b4d565b610c30565b005b61037560048036038101906103709190612b04565b610c44565b005b610391600480360381019061038c9190612b4d565b610ede565b60405161039e9190613261565b60405180910390f35b6103c160048036038101906103bc91906129d7565b610fdd565b005b6103dd60048036038101906103d891906129d7565b61109d565b6040516103ea9190612f82565b60405180910390f35b61040d60048036038101906104089190612b4d565b611134565b005b610429600480360381019061042491906129d7565b611269565b6040516104369190613261565b60405180910390f35b6104476112b1565b005b610463600480360381019061045e9190612ac4565b611339565b005b61046d6113b4565b60405161047a9190613261565b60405180910390f35b61048b6113ba565b6040516104989190612f30565b60405180910390f35b6104a96113e4565b6040516104b69190612fbf565b60405180910390f35b6104d960048036038101906104d49190612ac4565b611476565b6040516104e69190612fa4565b60405180910390f35b61050960048036038101906105049190612ac4565b611561565b6040516105169190612fa4565b60405180910390f35b61052761157f565b6040516105349190613261565b60405180910390f35b610545611585565b005b610561600480360381019061055c9190612b04565b6117ca565b005b61057d60048036038101906105789190612a31565b611c21565b60405161058a9190613261565b60405180910390f35b6105ad60048036038101906105a89190612b4d565b611ca8565b6040516105ba9190612f30565b60405180910390f35b6105dd60048036038101906105d891906129d7565b611ce5565b005b6060600380546105ee906134d3565b80601f016020809104026020016040519081016040528092919081815260200182805461061a906134d3565b80156106675780601f1061063c57610100808354040283529160200191610667565b820191906000526020600020905b81548152906001019060200180831161064a57829003601f168201915b5050505050905090565b600061068561067e611ddd565b8484611de5565b6001905092915050565b6000600254905090565b60085481565b60006106ac848484611fb0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106f7611ddd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e90613121565b60405180910390fd5b61078b85610783611ddd565b858403611de5565b60019150509392505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501161084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084290613101565b60405180910390fd5b600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b6000811115610a65576000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836108eb91906133ed565b815481106108fc576108fb61360c565b5b90600052602060002001549050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161096893929190612f4b565b600060405180830381600087803b15801561098257600080fd5b505af1158015610996573d6000803e3d6000fd5b50505050600754600b600083815260200190815260200160002054426109bc91906133ed565b6109c69190613393565b836109d1919061333d565b92506109dd3382612231565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080610a5d906134a9565b915050610894565b50610a703382612304565b50565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610aff57602002820191906000526020600020905b815481526020019060010190808311610aeb575b505050505090506000805b8251811015610b7957600754600b6000858481518110610b2d57610b2c61360c565b5b602002602001015181526020019081526020016000205442610b4f91906133ed565b610b599190613393565b82610b64919061333d565b91508080610b7190613536565b915050610b0a565b508092505050919050565b6000610c26610b91611ddd565b848460016000610b9f611ddd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c21919061333d565b611de5565b6001905092915050565b610c41610c3b611ddd565b82612464565b50565b6000805b8251811015610ecf573373ffffffffffffffffffffffffffffffffffffffff16600c6000858481518110610c7f57610c7e61360c565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613181565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033868581518110610d5f57610d5e61360c565b5b60200260200101516040518463ffffffff1660e01b8152600401610d8593929190612f4b565b600060405180830381600087803b158015610d9f57600080fd5b505af1158015610db3573d6000803e3d6000fd5b50505050600754600b6000858481518110610dd157610dd061360c565b5b602002602001015181526020019081526020016000205442610df391906133ed565b610dfd9190613393565b82610e08919061333d565b9150610e2e33848381518110610e2157610e2061360c565b5b6020026020010151612231565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c6000858481518110610e6857610e6761360c565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080610ec790613536565b915050610c48565b50610eda3382612304565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600c600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90613201565b60405180910390fd5b6000600b60008481526020019081526020016000205442610fc591906133ed565b905060075481610fd59190613393565b915050919050565b610fe5611ddd565b73ffffffffffffffffffffffffffffffffffffffff166110036113ba565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090613141565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561112857602002820191906000526020600020905b815481526020019060010190808311611114575b50505050509050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc906130e1565b60405180910390fd5b6008544210611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613021565b60405180910390fd5b61124e33600754600b6000858152602001908152602001600020544261123f91906133ed565b6112499190613393565b612304565b42600b60008381526020019081526020016000208190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112b9611ddd565b73ffffffffffffffffffffffffffffffffffffffff166112d76113ba565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613141565b60405180910390fd5b611337600061263b565b565b600061134c83611347611ddd565b611c21565b905081811015611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890613161565b60405180910390fd5b6113a58361139d611ddd565b848403611de5565b6113af8383612464565b505050565b60065481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546113f3906134d3565b80601f016020809104026020016040519081016040528092919081815260200182805461141f906134d3565b801561146c5780601f106114415761010080835404028352916020019161146c565b820191906000526020600020905b81548152906001019060200180831161144f57829003601f168201915b5050505050905090565b60008060016000611485611ddd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613221565b60405180910390fd5b61155661154d611ddd565b85858403611de5565b600191505092915050565b600061157561156e611ddd565b8484611fb0565b6001905092915050565b60075481565b60085442106115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613021565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561165457602002820191906000526020600020905b815481526020019060010190808311611640575b505050505090506000805b82518110156117bb573373ffffffffffffffffffffffffffffffffffffffff16600c60008584815181106116965761169561360c565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a906130e1565b60405180910390fd5b600754600b600085848151811061173d5761173c61360c565b5b60200260200101518152602001908152602001600020544261175f91906133ed565b6117699190613393565b82611774919061333d565b915042600b600085848151811061178e5761178d61360c565b5b602002602001015181526020019081526020016000208190555080806117b390613536565b91505061165f565b506117c63382612304565b5050565b6006548151600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061181c919061333d565b111561185d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611854906130c1565b60405180910390fd5b60005b8151811015611c1d573373ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8484815181106118d1576118d061360c565b5b60200260200101516040518263ffffffff1660e01b81526004016118f59190613261565b60206040518083038186803b15801561190d57600080fd5b505afa158015611921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119459190612a04565b73ffffffffffffffffffffffffffffffffffffffff16148015611a025750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600c60008484815181106119b3576119b261360c565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a38906130a1565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330858581518110611a9457611a9361360c565b5b60200260200101516040518463ffffffff1660e01b8152600401611aba93929190612f4b565b600060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b50505050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828281518110611b3e57611b3d61360c565b5b6020026020010151908060018154018082558091505060019003906000526020600020016000909190919091505542600b6000848481518110611b8457611b8361360c565b5b602002602001015181526020019081526020016000208190555033600c6000848481518110611bb657611bb561360c565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080611c1590613536565b915050611860565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611ced611ddd565b73ffffffffffffffffffffffffffffffffffffffff16611d0b6113ba565b73ffffffffffffffffffffffffffffffffffffffff1614611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613141565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc890613041565b60405180910390fd5b611dda8161263b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c906131e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc90613061565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fa39190613261565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612020576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612017906131c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208790612fe1565b60405180910390fd5b61209b838383612701565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211890613081565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b4919061333d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122189190613261565b60405180910390a361222b848484612706565b50505050565b60005b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156122ff5781600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106122d0576122cf61360c565b5b906000526020600020015414156122ec576122eb838261270b565b5b80806122f790613536565b915050612234565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90613241565b60405180910390fd5b61238060008383612701565b8060026000828254612392919061333d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e7919061333d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161244c9190613261565b60405180910390a361246060008383612706565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb906131a1565b60405180910390fd5b6124e082600083612701565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d90613001565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546125bd91906133ed565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126229190613261565b60405180910390a361263683600084612706565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110612759576128f6565b60008190505b6001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506127ae91906133ed565b81101561288f57600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182612801919061333d565b815481106128125761281161360c565b5b9060005260206000200154600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061286e5761286d61360c565b5b9060005260206000200181905550808061288790613536565b91505061275f565b50600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806128df576128de6135dd565b5b600190038181906000526020600020016000905590555b5050565b600061290d612908846132bc565b613297565b905080838252602082019050828560208602820111156129305761292f61366f565b5b60005b85811015612960578161294688826129c2565b845260208401935060208301925050600181019050612933565b5050509392505050565b60008135905061297981613bd7565b92915050565b60008151905061298e81613bd7565b92915050565b600082601f8301126129a9576129a861366a565b5b81356129b98482602086016128fa565b91505092915050565b6000813590506129d181613bee565b92915050565b6000602082840312156129ed576129ec613679565b5b60006129fb8482850161296a565b91505092915050565b600060208284031215612a1a57612a19613679565b5b6000612a288482850161297f565b91505092915050565b60008060408385031215612a4857612a47613679565b5b6000612a568582860161296a565b9250506020612a678582860161296a565b9150509250929050565b600080600060608486031215612a8a57612a89613679565b5b6000612a988682870161296a565b9350506020612aa98682870161296a565b9250506040612aba868287016129c2565b9150509250925092565b60008060408385031215612adb57612ada613679565b5b6000612ae98582860161296a565b9250506020612afa858286016129c2565b9150509250929050565b600060208284031215612b1a57612b19613679565b5b600082013567ffffffffffffffff811115612b3857612b37613674565b5b612b4484828501612994565b91505092915050565b600060208284031215612b6357612b62613679565b5b6000612b71848285016129c2565b91505092915050565b6000612b868383612f03565b60208301905092915050565b612b9b81613421565b82525050565b6000612bac826132f8565b612bb6818561331b565b9350612bc1836132e8565b8060005b83811015612bf2578151612bd98882612b7a565b9750612be48361330e565b925050600181019050612bc5565b5085935050505092915050565b612c0881613433565b82525050565b6000612c1982613303565b612c23818561332c565b9350612c33818560208601613476565b612c3c8161367e565b840191505092915050565b6000612c5460238361332c565b9150612c5f8261368f565b604082019050919050565b6000612c7760228361332c565b9150612c82826136de565b604082019050919050565b6000612c9a60158361332c565b9150612ca58261372d565b602082019050919050565b6000612cbd60268361332c565b9150612cc882613756565b604082019050919050565b6000612ce060228361332c565b9150612ceb826137a5565b604082019050919050565b6000612d0360268361332c565b9150612d0e826137f4565b604082019050919050565b6000612d26601e8361332c565b9150612d3182613843565b602082019050919050565b6000612d4960238361332c565b9150612d548261386c565b604082019050919050565b6000612d6c601e8361332c565b9150612d77826138bb565b602082019050919050565b6000612d8f60248361332c565b9150612d9a826138e4565b604082019050919050565b6000612db260288361332c565b9150612dbd82613933565b604082019050919050565b6000612dd560208361332c565b9150612de082613982565b602082019050919050565b6000612df860248361332c565b9150612e03826139ab565b604082019050919050565b6000612e1b60278361332c565b9150612e26826139fa565b604082019050919050565b6000612e3e60218361332c565b9150612e4982613a49565b604082019050919050565b6000612e6160258361332c565b9150612e6c82613a98565b604082019050919050565b6000612e8460248361332c565b9150612e8f82613ae7565b604082019050919050565b6000612ea760148361332c565b9150612eb282613b36565b602082019050919050565b6000612eca60258361332c565b9150612ed582613b5f565b604082019050919050565b6000612eed601f8361332c565b9150612ef882613bae565b602082019050919050565b612f0c8161345f565b82525050565b612f1b8161345f565b82525050565b612f2a81613469565b82525050565b6000602082019050612f456000830184612b92565b92915050565b6000606082019050612f606000830186612b92565b612f6d6020830185612b92565b612f7a6040830184612f12565b949350505050565b60006020820190508181036000830152612f9c8184612ba1565b905092915050565b6000602082019050612fb96000830184612bff565b92915050565b60006020820190508181036000830152612fd98184612c0e565b905092915050565b60006020820190508181036000830152612ffa81612c47565b9050919050565b6000602082019050818103600083015261301a81612c6a565b9050919050565b6000602082019050818103600083015261303a81612c8d565b9050919050565b6000602082019050818103600083015261305a81612cb0565b9050919050565b6000602082019050818103600083015261307a81612cd3565b9050919050565b6000602082019050818103600083015261309a81612cf6565b9050919050565b600060208201905081810360008301526130ba81612d19565b9050919050565b600060208201905081810360008301526130da81612d3c565b9050919050565b600060208201905081810360008301526130fa81612d5f565b9050919050565b6000602082019050818103600083015261311a81612d82565b9050919050565b6000602082019050818103600083015261313a81612da5565b9050919050565b6000602082019050818103600083015261315a81612dc8565b9050919050565b6000602082019050818103600083015261317a81612deb565b9050919050565b6000602082019050818103600083015261319a81612e0e565b9050919050565b600060208201905081810360008301526131ba81612e31565b9050919050565b600060208201905081810360008301526131da81612e54565b9050919050565b600060208201905081810360008301526131fa81612e77565b9050919050565b6000602082019050818103600083015261321a81612e9a565b9050919050565b6000602082019050818103600083015261323a81612ebd565b9050919050565b6000602082019050818103600083015261325a81612ee0565b9050919050565b60006020820190506132766000830184612f12565b92915050565b60006020820190506132916000830184612f21565b92915050565b60006132a16132b2565b90506132ad8282613505565b919050565b6000604051905090565b600067ffffffffffffffff8211156132d7576132d661363b565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006133488261345f565b91506133538361345f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133885761338761357f565b5b828201905092915050565b600061339e8261345f565b91506133a98361345f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133e2576133e161357f565b5b828202905092915050565b60006133f88261345f565b91506134038361345f565b9250828210156134165761341561357f565b5b828203905092915050565b600061342c8261343f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613494578082015181840152602081019050613479565b838111156134a3576000848401525b50505050565b60006134b48261345f565b915060008214156134c8576134c761357f565b5b600182039050919050565b600060028204905060018216806134eb57607f821691505b602082108114156134ff576134fe6135ae565b5b50919050565b61350e8261367e565b810181811067ffffffffffffffff8211171561352d5761352c61363b565b5b80604052505050565b60006135418261345f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135745761357361357f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f436c61696d20706572696f64206973206f766572210000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e206d757374206265207374616b61626c6520627920796f75210000600082015250565b7f4d7573742068617665206c657373207468616e203331206d696365207374616b60008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e206973206e6f7420636c61696d61626c6520627920796f75210000600082015250565b7f4d7573742068617665206174206c65617374206f6e6520746f6b656e2073746160008201527f6b65642100000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4d6573736167652053656e64657220776173206e6f74206f726967696e616c2060008201527f7374616b65722100000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e206973206e6f74207374616b656421000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613be081613421565b8114613beb57600080fd5b50565b613bf78161345f565b8114613c0257600080fd5b5056fea2646970667358221220591612ae456e200ef241bc5b0df2e1298e4f3996f9097c1563b89188f920317164736f6c63430008060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80635e1f1e2a11610104578063a457c2d7116100a2578063d9ffad4711610071578063d9ffad4714610547578063dd62ed3e14610563578063e3c998fe14610593578063f2fde38b146105c3576101da565b8063a457c2d7146104bf578063a9059cbb146104ef578063ba7e76621461051f578063d1058e591461053d576101da565b806379cc6790116100de57806379cc6790146104495780638ab8fab3146104655780638da5cb5b1461048357806395d89b41146104a1576101da565b80635e1f1e2a146103f357806370a082311461040f578063715018a61461043f576101da565b806335322f371161017c57806348aa19361161014b57806348aa19361461035b578063515ec10514610377578063529cef99146103a757806352eb7796146103c3576101da565b806335322f37146102d5578063362a3fad146102df578063395093511461030f57806342966c681461033f576101da565b80632209d38c116101b85780632209d38c1461024b57806323b872dd146102695780633112bc8e14610299578063313ce567146102b7576101da565b806306fdde03146101df578063095ea7b3146101fd57806318160ddd1461022d575b600080fd5b6101e76105df565b6040516101f49190612fbf565b60405180910390f35b61021760048036038101906102129190612ac4565b610671565b6040516102249190612fa4565b60405180910390f35b61023561068f565b6040516102429190613261565b60405180910390f35b610253610699565b6040516102609190613261565b60405180910390f35b610283600480360381019061027e9190612a71565b61069f565b6040516102909190612fa4565b60405180910390f35b6102a1610797565b6040516102ae9190612f30565b60405180910390f35b6102bf6107bd565b6040516102cc919061327c565b60405180910390f35b6102dd6107c6565b005b6102f960048036038101906102f491906129d7565b610a73565b6040516103069190613261565b60405180910390f35b61032960048036038101906103249190612ac4565b610b84565b6040516103369190612fa4565b60405180910390f35b61035960048036038101906103549190612b4d565b610c30565b005b61037560048036038101906103709190612b04565b610c44565b005b610391600480360381019061038c9190612b4d565b610ede565b60405161039e9190613261565b60405180910390f35b6103c160048036038101906103bc91906129d7565b610fdd565b005b6103dd60048036038101906103d891906129d7565b61109d565b6040516103ea9190612f82565b60405180910390f35b61040d60048036038101906104089190612b4d565b611134565b005b610429600480360381019061042491906129d7565b611269565b6040516104369190613261565b60405180910390f35b6104476112b1565b005b610463600480360381019061045e9190612ac4565b611339565b005b61046d6113b4565b60405161047a9190613261565b60405180910390f35b61048b6113ba565b6040516104989190612f30565b60405180910390f35b6104a96113e4565b6040516104b69190612fbf565b60405180910390f35b6104d960048036038101906104d49190612ac4565b611476565b6040516104e69190612fa4565b60405180910390f35b61050960048036038101906105049190612ac4565b611561565b6040516105169190612fa4565b60405180910390f35b61052761157f565b6040516105349190613261565b60405180910390f35b610545611585565b005b610561600480360381019061055c9190612b04565b6117ca565b005b61057d60048036038101906105789190612a31565b611c21565b60405161058a9190613261565b60405180910390f35b6105ad60048036038101906105a89190612b4d565b611ca8565b6040516105ba9190612f30565b60405180910390f35b6105dd60048036038101906105d891906129d7565b611ce5565b005b6060600380546105ee906134d3565b80601f016020809104026020016040519081016040528092919081815260200182805461061a906134d3565b80156106675780601f1061063c57610100808354040283529160200191610667565b820191906000526020600020905b81548152906001019060200180831161064a57829003601f168201915b5050505050905090565b600061068561067e611ddd565b8484611de5565b6001905092915050565b6000600254905090565b60085481565b60006106ac848484611fb0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106f7611ddd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e90613121565b60405180910390fd5b61078b85610783611ddd565b858403611de5565b60019150509392505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501161084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084290613101565b60405180910390fd5b600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b6000811115610a65576000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836108eb91906133ed565b815481106108fc576108fb61360c565b5b90600052602060002001549050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161096893929190612f4b565b600060405180830381600087803b15801561098257600080fd5b505af1158015610996573d6000803e3d6000fd5b50505050600754600b600083815260200190815260200160002054426109bc91906133ed565b6109c69190613393565b836109d1919061333d565b92506109dd3382612231565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080610a5d906134a9565b915050610894565b50610a703382612304565b50565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610aff57602002820191906000526020600020905b815481526020019060010190808311610aeb575b505050505090506000805b8251811015610b7957600754600b6000858481518110610b2d57610b2c61360c565b5b602002602001015181526020019081526020016000205442610b4f91906133ed565b610b599190613393565b82610b64919061333d565b91508080610b7190613536565b915050610b0a565b508092505050919050565b6000610c26610b91611ddd565b848460016000610b9f611ddd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c21919061333d565b611de5565b6001905092915050565b610c41610c3b611ddd565b82612464565b50565b6000805b8251811015610ecf573373ffffffffffffffffffffffffffffffffffffffff16600c6000858481518110610c7f57610c7e61360c565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613181565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033868581518110610d5f57610d5e61360c565b5b60200260200101516040518463ffffffff1660e01b8152600401610d8593929190612f4b565b600060405180830381600087803b158015610d9f57600080fd5b505af1158015610db3573d6000803e3d6000fd5b50505050600754600b6000858481518110610dd157610dd061360c565b5b602002602001015181526020019081526020016000205442610df391906133ed565b610dfd9190613393565b82610e08919061333d565b9150610e2e33848381518110610e2157610e2061360c565b5b6020026020010151612231565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c6000858481518110610e6857610e6761360c565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080610ec790613536565b915050610c48565b50610eda3382612304565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600c600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90613201565b60405180910390fd5b6000600b60008481526020019081526020016000205442610fc591906133ed565b905060075481610fd59190613393565b915050919050565b610fe5611ddd565b73ffffffffffffffffffffffffffffffffffffffff166110036113ba565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090613141565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561112857602002820191906000526020600020905b815481526020019060010190808311611114575b50505050509050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc906130e1565b60405180910390fd5b6008544210611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613021565b60405180910390fd5b61124e33600754600b6000858152602001908152602001600020544261123f91906133ed565b6112499190613393565b612304565b42600b60008381526020019081526020016000208190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112b9611ddd565b73ffffffffffffffffffffffffffffffffffffffff166112d76113ba565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613141565b60405180910390fd5b611337600061263b565b565b600061134c83611347611ddd565b611c21565b905081811015611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890613161565b60405180910390fd5b6113a58361139d611ddd565b848403611de5565b6113af8383612464565b505050565b60065481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546113f3906134d3565b80601f016020809104026020016040519081016040528092919081815260200182805461141f906134d3565b801561146c5780601f106114415761010080835404028352916020019161146c565b820191906000526020600020905b81548152906001019060200180831161144f57829003601f168201915b5050505050905090565b60008060016000611485611ddd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613221565b60405180910390fd5b61155661154d611ddd565b85858403611de5565b600191505092915050565b600061157561156e611ddd565b8484611fb0565b6001905092915050565b60075481565b60085442106115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613021565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561165457602002820191906000526020600020905b815481526020019060010190808311611640575b505050505090506000805b82518110156117bb573373ffffffffffffffffffffffffffffffffffffffff16600c60008584815181106116965761169561360c565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a906130e1565b60405180910390fd5b600754600b600085848151811061173d5761173c61360c565b5b60200260200101518152602001908152602001600020544261175f91906133ed565b6117699190613393565b82611774919061333d565b915042600b600085848151811061178e5761178d61360c565b5b602002602001015181526020019081526020016000208190555080806117b390613536565b91505061165f565b506117c63382612304565b5050565b6006548151600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061181c919061333d565b111561185d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611854906130c1565b60405180910390fd5b60005b8151811015611c1d573373ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8484815181106118d1576118d061360c565b5b60200260200101516040518263ffffffff1660e01b81526004016118f59190613261565b60206040518083038186803b15801561190d57600080fd5b505afa158015611921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119459190612a04565b73ffffffffffffffffffffffffffffffffffffffff16148015611a025750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600c60008484815181106119b3576119b261360c565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a38906130a1565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330858581518110611a9457611a9361360c565b5b60200260200101516040518463ffffffff1660e01b8152600401611aba93929190612f4b565b600060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b50505050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828281518110611b3e57611b3d61360c565b5b6020026020010151908060018154018082558091505060019003906000526020600020016000909190919091505542600b6000848481518110611b8457611b8361360c565b5b602002602001015181526020019081526020016000208190555033600c6000848481518110611bb657611bb561360c565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080611c1590613536565b915050611860565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611ced611ddd565b73ffffffffffffffffffffffffffffffffffffffff16611d0b6113ba565b73ffffffffffffffffffffffffffffffffffffffff1614611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613141565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc890613041565b60405180910390fd5b611dda8161263b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c906131e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc90613061565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fa39190613261565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612020576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612017906131c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208790612fe1565b60405180910390fd5b61209b838383612701565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211890613081565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b4919061333d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122189190613261565b60405180910390a361222b848484612706565b50505050565b60005b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156122ff5781600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106122d0576122cf61360c565b5b906000526020600020015414156122ec576122eb838261270b565b5b80806122f790613536565b915050612234565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90613241565b60405180910390fd5b61238060008383612701565b8060026000828254612392919061333d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e7919061333d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161244c9190613261565b60405180910390a361246060008383612706565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb906131a1565b60405180910390fd5b6124e082600083612701565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d90613001565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546125bd91906133ed565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126229190613261565b60405180910390a361263683600084612706565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110612759576128f6565b60008190505b6001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506127ae91906133ed565b81101561288f57600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182612801919061333d565b815481106128125761281161360c565b5b9060005260206000200154600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061286e5761286d61360c565b5b9060005260206000200181905550808061288790613536565b91505061275f565b50600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806128df576128de6135dd565b5b600190038181906000526020600020016000905590555b5050565b600061290d612908846132bc565b613297565b905080838252602082019050828560208602820111156129305761292f61366f565b5b60005b85811015612960578161294688826129c2565b845260208401935060208301925050600181019050612933565b5050509392505050565b60008135905061297981613bd7565b92915050565b60008151905061298e81613bd7565b92915050565b600082601f8301126129a9576129a861366a565b5b81356129b98482602086016128fa565b91505092915050565b6000813590506129d181613bee565b92915050565b6000602082840312156129ed576129ec613679565b5b60006129fb8482850161296a565b91505092915050565b600060208284031215612a1a57612a19613679565b5b6000612a288482850161297f565b91505092915050565b60008060408385031215612a4857612a47613679565b5b6000612a568582860161296a565b9250506020612a678582860161296a565b9150509250929050565b600080600060608486031215612a8a57612a89613679565b5b6000612a988682870161296a565b9350506020612aa98682870161296a565b9250506040612aba868287016129c2565b9150509250925092565b60008060408385031215612adb57612ada613679565b5b6000612ae98582860161296a565b9250506020612afa858286016129c2565b9150509250929050565b600060208284031215612b1a57612b19613679565b5b600082013567ffffffffffffffff811115612b3857612b37613674565b5b612b4484828501612994565b91505092915050565b600060208284031215612b6357612b62613679565b5b6000612b71848285016129c2565b91505092915050565b6000612b868383612f03565b60208301905092915050565b612b9b81613421565b82525050565b6000612bac826132f8565b612bb6818561331b565b9350612bc1836132e8565b8060005b83811015612bf2578151612bd98882612b7a565b9750612be48361330e565b925050600181019050612bc5565b5085935050505092915050565b612c0881613433565b82525050565b6000612c1982613303565b612c23818561332c565b9350612c33818560208601613476565b612c3c8161367e565b840191505092915050565b6000612c5460238361332c565b9150612c5f8261368f565b604082019050919050565b6000612c7760228361332c565b9150612c82826136de565b604082019050919050565b6000612c9a60158361332c565b9150612ca58261372d565b602082019050919050565b6000612cbd60268361332c565b9150612cc882613756565b604082019050919050565b6000612ce060228361332c565b9150612ceb826137a5565b604082019050919050565b6000612d0360268361332c565b9150612d0e826137f4565b604082019050919050565b6000612d26601e8361332c565b9150612d3182613843565b602082019050919050565b6000612d4960238361332c565b9150612d548261386c565b604082019050919050565b6000612d6c601e8361332c565b9150612d77826138bb565b602082019050919050565b6000612d8f60248361332c565b9150612d9a826138e4565b604082019050919050565b6000612db260288361332c565b9150612dbd82613933565b604082019050919050565b6000612dd560208361332c565b9150612de082613982565b602082019050919050565b6000612df860248361332c565b9150612e03826139ab565b604082019050919050565b6000612e1b60278361332c565b9150612e26826139fa565b604082019050919050565b6000612e3e60218361332c565b9150612e4982613a49565b604082019050919050565b6000612e6160258361332c565b9150612e6c82613a98565b604082019050919050565b6000612e8460248361332c565b9150612e8f82613ae7565b604082019050919050565b6000612ea760148361332c565b9150612eb282613b36565b602082019050919050565b6000612eca60258361332c565b9150612ed582613b5f565b604082019050919050565b6000612eed601f8361332c565b9150612ef882613bae565b602082019050919050565b612f0c8161345f565b82525050565b612f1b8161345f565b82525050565b612f2a81613469565b82525050565b6000602082019050612f456000830184612b92565b92915050565b6000606082019050612f606000830186612b92565b612f6d6020830185612b92565b612f7a6040830184612f12565b949350505050565b60006020820190508181036000830152612f9c8184612ba1565b905092915050565b6000602082019050612fb96000830184612bff565b92915050565b60006020820190508181036000830152612fd98184612c0e565b905092915050565b60006020820190508181036000830152612ffa81612c47565b9050919050565b6000602082019050818103600083015261301a81612c6a565b9050919050565b6000602082019050818103600083015261303a81612c8d565b9050919050565b6000602082019050818103600083015261305a81612cb0565b9050919050565b6000602082019050818103600083015261307a81612cd3565b9050919050565b6000602082019050818103600083015261309a81612cf6565b9050919050565b600060208201905081810360008301526130ba81612d19565b9050919050565b600060208201905081810360008301526130da81612d3c565b9050919050565b600060208201905081810360008301526130fa81612d5f565b9050919050565b6000602082019050818103600083015261311a81612d82565b9050919050565b6000602082019050818103600083015261313a81612da5565b9050919050565b6000602082019050818103600083015261315a81612dc8565b9050919050565b6000602082019050818103600083015261317a81612deb565b9050919050565b6000602082019050818103600083015261319a81612e0e565b9050919050565b600060208201905081810360008301526131ba81612e31565b9050919050565b600060208201905081810360008301526131da81612e54565b9050919050565b600060208201905081810360008301526131fa81612e77565b9050919050565b6000602082019050818103600083015261321a81612e9a565b9050919050565b6000602082019050818103600083015261323a81612ebd565b9050919050565b6000602082019050818103600083015261325a81612ee0565b9050919050565b60006020820190506132766000830184612f12565b92915050565b60006020820190506132916000830184612f21565b92915050565b60006132a16132b2565b90506132ad8282613505565b919050565b6000604051905090565b600067ffffffffffffffff8211156132d7576132d661363b565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006133488261345f565b91506133538361345f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133885761338761357f565b5b828201905092915050565b600061339e8261345f565b91506133a98361345f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133e2576133e161357f565b5b828202905092915050565b60006133f88261345f565b91506134038361345f565b9250828210156134165761341561357f565b5b828203905092915050565b600061342c8261343f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613494578082015181840152602081019050613479565b838111156134a3576000848401525b50505050565b60006134b48261345f565b915060008214156134c8576134c761357f565b5b600182039050919050565b600060028204905060018216806134eb57607f821691505b602082108114156134ff576134fe6135ae565b5b50919050565b61350e8261367e565b810181811067ffffffffffffffff8211171561352d5761352c61363b565b5b80604052505050565b60006135418261345f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135745761357361357f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f436c61696d20706572696f64206973206f766572210000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e206d757374206265207374616b61626c6520627920796f75210000600082015250565b7f4d7573742068617665206c657373207468616e203331206d696365207374616b60008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e206973206e6f7420636c61696d61626c6520627920796f75210000600082015250565b7f4d7573742068617665206174206c65617374206f6e6520746f6b656e2073746160008201527f6b65642100000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4d6573736167652053656e64657220776173206e6f74206f726967696e616c2060008201527f7374616b65722100000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e206973206e6f74207374616b656421000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613be081613421565b8114613beb57600080fd5b50565b613bf78161345f565b8114613c0257600080fd5b5056fea2646970667358221220591612ae456e200ef241bc5b0df2e1298e4f3996f9097c1563b89188f920317164736f6c63430008060033

Deployed Bytecode Sourcemap

192:6211:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2063:98:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4160:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3151:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;395:42:8;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4793:478:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;515:26:8;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3000:91:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2708:819:8;;;:::i;:::-;;5485:435;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5666:212:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;473:89:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3533:797:8;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5926:355;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;884:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1012:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4336:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3315:125:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:9;;;:::i;:::-;;868:361:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;300:37:8;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;966:85:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2274:102:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6365:405;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3643:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;343:46:8;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4784:695;;;:::i;:::-;;1837:865;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3873:149:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6287:114:8;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2063:98:1;2117:13;2149:5;2142:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2063:98;:::o;4160:166::-;4243:4;4259:39;4268:12;:10;:12::i;:::-;4282:7;4291:6;4259:8;:39::i;:::-;4315:4;4308:11;;4160:166;;;;:::o;3151:106::-;3212:7;3238:12;;3231:19;;3151:106;:::o;395:42:8:-;;;;:::o;4793:478:1:-;4929:4;4945:36;4955:6;4963:9;4974:6;4945:9;:36::i;:::-;4992:24;5019:11;:19;5031:6;5019:19;;;;;;;;;;;;;;;:33;5039:12;:10;:12::i;:::-;5019:33;;;;;;;;;;;;;;;;4992:60;;5090:6;5070:16;:26;;5062:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5175:57;5184:6;5192:12;:10;:12::i;:::-;5225:6;5206:16;:25;5175:8;:57::i;:::-;5260:4;5253:11;;;4793:478;;;;;:::o;515:26:8:-;;;;;;;;;;;;;:::o;3000:91:1:-;3058:5;3082:2;3075:9;;3000:91;:::o;2708:819:8:-;2806:1;2768:16;:28;2785:10;2768:28;;;;;;;;;;;;;;;:35;;;;:39;2747:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;2879:20;2919:9;2931:16;:28;2948:10;2931:28;;;;;;;;;;;;;;;:35;;;;2919:47;;2914:565;2972:1;2968;:5;2914:565;;;2994:15;3012:16;:28;3029:10;3012:28;;;;;;;;;;;;;;;3045:1;3041;:5;;;;:::i;:::-;3012:35;;;;;;;;:::i;:::-;;;;;;;;;;2994:53;;3070:11;;;;;;;;;;;3062:33;;;3121:4;3144:10;3172:7;3062:131;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3341:14;;3290:18;:27;3309:7;3290:27;;;;;;;;;;;;3272:15;:45;;;;:::i;:::-;3271:84;;;;:::i;:::-;3239:12;:117;;;;:::i;:::-;3208:148;;3371:44;3395:10;3407:7;3371:23;:44::i;:::-;3457:11;;;;;;;;;;;3430:15;:24;3446:7;3430:24;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;2980:499;2975:3;;;;;:::i;:::-;;;;2914:565;;;;3489:31;3495:10;3507:12;3489:5;:31::i;:::-;2737:790;2708:819::o;5485:435::-;5545:7;5564:25;5592:16;:24;5609:6;5592:24;;;;;;;;;;;;;;;5564:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5626:20;5666:9;5661:223;5685:8;:15;5681:1;:19;5661:223;;;5858:14;;5803:18;:31;5822:8;5831:1;5822:11;;;;;;;;:::i;:::-;;;;;;;;5803:31;;;;;;;;;;;;5785:15;:49;;;;:::i;:::-;5784:88;;;;:::i;:::-;5752:12;:121;;;;:::i;:::-;5721:152;;5702:3;;;;;:::i;:::-;;;;5661:223;;;;5901:12;5894:19;;;;5485:435;;;:::o;5666:212:1:-;5754:4;5770:80;5779:12;:10;:12::i;:::-;5793:7;5839:10;5802:11;:25;5814:12;:10;:12::i;:::-;5802:25;;;;;;;;;;;;;;;:34;5828:7;5802:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5770:8;:80::i;:::-;5867:4;5860:11;;5666:212;;;;:::o;473:89:2:-;528:27;534:12;:10;:12::i;:::-;548:6;528:5;:27::i;:::-;473:89;:::o;3533:797:8:-;3599:20;3639:9;3634:648;3658:8;:15;3654:1;:19;3634:648;;;3751:10;3719:42;;:15;:28;3735:8;3744:1;3735:11;;;;;;;;:::i;:::-;;;;;;;;3719:28;;;;;;;;;;;;;;;;;;;;;:42;;;3694:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;3857:11;;;;;;;;;;;3849:33;;;3908:4;3931:10;3959:8;3968:1;3959:11;;;;;;;;:::i;:::-;;;;;;;;3849:135;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4136:14;;4081:18;:31;4100:8;4109:1;4100:11;;;;;;;;:::i;:::-;;;;;;;;4081:31;;;;;;;;;;;;4063:15;:49;;;;:::i;:::-;4062:88;;;;:::i;:::-;4030:12;:121;;;;:::i;:::-;3999:152;;4166:48;4190:10;4202:8;4211:1;4202:11;;;;;;;;:::i;:::-;;;;;;;;4166:23;:48::i;:::-;4260:11;;;;;;;;;;;4229:15;:28;4245:8;4254:1;4245:11;;;;;;;;:::i;:::-;;;;;;;;4229:28;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;3675:3;;;;;:::i;:::-;;;;3634:648;;;;4292:31;4298:10;4310:12;4292:5;:31::i;:::-;3589:741;3533:797;:::o;5926:355::-;6017:7;6089:11;;;;;;;;;;;6061:39;;:15;:24;6077:7;6061:24;;;;;;;;;;;;;;;;;;;;;:39;;;;6040:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;6157:21;6199:18;:27;6218:7;6199:27;;;;;;;;;;;;6181:15;:45;;;;:::i;:::-;6157:69;;6260:14;;6244:13;:30;;;;:::i;:::-;6237:37;;;5926:355;;;:::o;884:122::-;1189:12:9;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;971:12:8::1;957:11;;:26;;;;;;;;;;;;;;;;;;884:122:::0;:::o;1012:156::-;1098:16;1137;:24;1154:6;1137:24;;;;;;;;;;;;;;;1130:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1012:156;;;:::o;4336:442::-;4443:10;4415:38;;:15;:24;4431:7;4415:24;;;;;;;;;;;;;;;;;;;;;:38;;;4394:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;4545:14;;4527:15;:32;4519:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4596:119;4615:10;4690:14;;4659:18;:27;4678:7;4659:27;;;;;;;;;;;;4641:15;:45;;;;:::i;:::-;4640:64;;;;:::i;:::-;4596:5;:119::i;:::-;4756:15;4726:18;:27;4745:7;4726:27;;;;;;;;;;;:45;;;;4336:442;:::o;3315:125:1:-;3389:7;3415:9;:18;3425:7;3415:18;;;;;;;;;;;;;;;;3408:25;;3315:125;;;:::o;1598:92:9:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;868:361:2:-;944:24;971:32;981:7;990:12;:10;:12::i;:::-;971:9;:32::i;:::-;944:59;;1041:6;1021:16;:26;;1013:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;1122:58;1131:7;1140:12;:10;:12::i;:::-;1173:6;1154:16;:25;1122:8;:58::i;:::-;1200:22;1206:7;1215:6;1200:5;:22::i;:::-;934:295;868:361;;:::o;300:37:8:-;;;;:::o;966:85:9:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;2274:102:1:-;2330:13;2362:7;2355:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2274:102;:::o;6365:405::-;6458:4;6474:24;6501:11;:25;6513:12;:10;:12::i;:::-;6501:25;;;;;;;;;;;;;;;:34;6527:7;6501:34;;;;;;;;;;;;;;;;6474:61;;6573:15;6553:16;:35;;6545:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6664:67;6673:12;:10;:12::i;:::-;6687:7;6715:15;6696:16;:34;6664:8;:67::i;:::-;6759:4;6752:11;;;6365:405;;;;:::o;3643:172::-;3729:4;3745:42;3755:12;:10;:12::i;:::-;3769:9;3780:6;3745:9;:42::i;:::-;3804:4;3797:11;;3643:172;;;;:::o;343:46:8:-;;;;:::o;4784:695::-;4847:14;;4829:15;:32;4821:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4897:25;4925:16;:28;4942:10;4925:28;;;;;;;;;;;;;;;4897:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4963:20;5003:9;4998:433;5022:8;:15;5018:1;:19;4998:433;;;5115:10;5083:42;;:15;:28;5099:8;5108:1;5099:11;;;;;;;;:::i;:::-;;;;;;;;5083:28;;;;;;;;;;;;;;;;;;;;;:42;;;5058:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;5341:14;;5286:18;:31;5305:8;5314:1;5305:11;;;;;;;;:::i;:::-;;;;;;;;5286:31;;;;;;;;;;;;5268:15;:49;;;;:::i;:::-;5267:88;;;;:::i;:::-;5235:12;:121;;;;:::i;:::-;5204:152;;5405:15;5371:18;:31;5390:8;5399:1;5390:11;;;;;;;;:::i;:::-;;;;;;;;5371:31;;;;;;;;;;;:49;;;;5039:3;;;;;:::i;:::-;;;;4998:433;;;;5441:31;5447:10;5459:12;5441:5;:31::i;:::-;4811:668;;4784:695::o;1837:865::-;1995:17;;1960:8;:15;1922:16;:28;1939:10;1922:28;;;;;;;;;;;;;;;:35;;;;:53;;;;:::i;:::-;:90;;1901:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;2089:9;2084:612;2108:8;:15;2104:1;:19;2084:612;;;2214:10;2169:55;;2177:11;;;;;;;;;;;2169:28;;;2198:8;2207:1;2198:11;;;;;;;;:::i;:::-;;;;;;;;2169:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;;:122;;;;;2280:11;;;;;;;;;;;2248:43;;:15;:28;2264:8;2273:1;2264:11;;;;;;;;:::i;:::-;;;;;;;;2248:28;;;;;;;;;;;;;;;;;;;;;:43;;;2169:122;2144:211;;;;;;;;;;;;:::i;:::-;;;;;;;;;2378:11;;;;;;;;;;;2370:33;;;2421:10;2457:4;2480:8;2489:1;2480:11;;;;;;;;:::i;:::-;;;;;;;;2370:135;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2520:16;:28;2537:10;2520:28;;;;;;;;;;;;;;;2554:8;2563:1;2554:11;;;;;;;;:::i;:::-;;;;;;;;2520:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2615:15;2581:18;:31;2600:8;2609:1;2600:11;;;;;;;;:::i;:::-;;;;;;;;2581:31;;;;;;;;;;;:49;;;;2675:10;2644:15;:28;2660:8;2669:1;2660:11;;;;;;;;:::i;:::-;;;;;;;;2644:28;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;2125:3;;;;;:::i;:::-;;;;2084:612;;;;1837:865;:::o;3873:149:1:-;3962:7;3988:11;:18;4000:5;3988:18;;;;;;;;;;;;;;;:27;4007:7;3988:27;;;;;;;;;;;;;;;;3981:34;;3873:149;;;;:::o;6287:114:8:-;6344:7;6370:15;:24;6386:7;6370:24;;;;;;;;;;;;;;;;;;;;;6363:31;;6287:114;;;:::o;1839:189:9:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;587:96:0:-;640:7;666:10;659:17;;587:96;:::o;9941:370:1:-;10089:1;10072:19;;:5;:19;;;;10064:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10169:1;10150:21;;:7;:21;;;;10142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10251:6;10221:11;:18;10233:5;10221:18;;;;;;;;;;;;;;;:27;10240:7;10221:27;;;;;;;;;;;;;;;:36;;;;10288:7;10272:32;;10281:5;10272:32;;;10297:6;10272:32;;;;;;:::i;:::-;;;;;;;;9941:370;;;:::o;7244:713::-;7397:1;7379:20;;:6;:20;;;;7371:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7480:1;7459:23;;:9;:23;;;;7451:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7533:47;7554:6;7562:9;7573:6;7533:20;:47::i;:::-;7591:21;7615:9;:17;7625:6;7615:17;;;;;;;;;;;;;;;;7591:41;;7667:6;7650:13;:23;;7642:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7786:6;7770:13;:22;7750:9;:17;7760:6;7750:17;;;;;;;;;;;;;;;:42;;;;7836:6;7812:9;:20;7822:9;7812:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7875:9;7858:35;;7867:6;7858:35;;;7886:6;7858:35;;;;;;:::i;:::-;;;;;;;;7904:46;7924:6;7932:9;7943:6;7904:19;:46::i;:::-;7361:596;7244:713;;;:::o;1511:320:8:-;1601:9;1596:229;1620:16;:24;1637:6;1620:24;;;;;;;;;;;;;;;:31;;;;1616:1;:35;1596:229;;;1707:7;1676:16;:24;1693:6;1676:24;;;;;;;;;;;;;;;1701:1;1676:27;;;;;;;;:::i;:::-;;;;;;;;;;:38;1672:143;;;1783:17;1790:6;1798:1;1783:6;:17::i;:::-;1672:143;1653:3;;;;;:::i;:::-;;;;1596:229;;;;1511:320;;:::o;8233:389:1:-;8335:1;8316:21;;:7;:21;;;;8308:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8384:49;8413:1;8417:7;8426:6;8384:20;:49::i;:::-;8460:6;8444:12;;:22;;;;;;;:::i;:::-;;;;;;;;8498:6;8476:9;:18;8486:7;8476:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;8540:7;8519:37;;8536:1;8519:37;;;8549:6;8519:37;;;;;;:::i;:::-;;;;;;;;8567:48;8595:1;8599:7;8608:6;8567:19;:48::i;:::-;8233:389;;:::o;8942:576::-;9044:1;9025:21;;:7;:21;;;;9017:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9095:49;9116:7;9133:1;9137:6;9095:20;:49::i;:::-;9155:22;9180:9;:18;9190:7;9180:18;;;;;;;;;;;;;;;;9155:43;;9234:6;9216:14;:24;;9208:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9351:6;9334:14;:23;9313:9;:18;9323:7;9313:18;;;;;;;;;;;;;;;:44;;;;9393:6;9377:12;;:22;;;;;;;:::i;:::-;;;;;;;;9441:1;9415:37;;9424:7;9415:37;;;9445:6;9415:37;;;;;;:::i;:::-;;;;;;;;9463:48;9483:7;9500:1;9504:6;9463:19;:48::i;:::-;9007:511;8942:576;;:::o;2034:169:9:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;10895:121:1:-;;;;:::o;11604:120::-;;;;:::o;1174:331:8:-;1253:16;:24;1270:6;1253:24;;;;;;;;;;;;;;;:31;;;;1244:5;:40;1240:53;;1286:7;;1240:53;1308:9;1320:5;1308:17;;1303:156;1365:1;1331:16;:24;1348:6;1331:24;;;;;;;;;;;;;;;:31;;;;:35;;;;:::i;:::-;1327:1;:39;1303:156;;;1417:16;:24;1434:6;1417:24;;;;;;;;;;;;;;;1446:1;1442;:5;;;;:::i;:::-;1417:31;;;;;;;;:::i;:::-;;;;;;;;;;1387:16;:24;1404:6;1387:24;;;;;;;;;;;;;;;1412:1;1387:27;;;;;;;;:::i;:::-;;;;;;;;;:61;;;;1368:3;;;;;:::i;:::-;;;;1303:156;;;;1468:16;:24;1485:6;1468:24;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1174:331;;;:::o;24:722:11:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;404:79;;:::i;:::-;350:2;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;804:87;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;960:80;;;;:::o;1063:370::-;1134:5;1183:3;1176:4;1168:6;1164:17;1160:27;1150:2;;1191:79;;:::i;:::-;1150:2;1308:6;1295:20;1333:94;1423:3;1415:6;1408:4;1400:6;1396:17;1333:94;:::i;:::-;1324:103;;1140:293;;;;;:::o;1439:139::-;1485:5;1523:6;1510:20;1501:29;;1539:33;1566:5;1539:33;:::i;:::-;1491:87;;;;:::o;1584:329::-;1643:6;1692:2;1680:9;1671:7;1667:23;1663:32;1660:2;;;1698:79;;:::i;:::-;1660:2;1818:1;1843:53;1888:7;1879:6;1868:9;1864:22;1843:53;:::i;:::-;1833:63;;1789:117;1650:263;;;;:::o;1919:351::-;1989:6;2038:2;2026:9;2017:7;2013:23;2009:32;2006:2;;;2044:79;;:::i;:::-;2006:2;2164:1;2189:64;2245:7;2236:6;2225:9;2221:22;2189:64;:::i;:::-;2179:74;;2135:128;1996:274;;;;:::o;2276:474::-;2344:6;2352;2401:2;2389:9;2380:7;2376:23;2372:32;2369:2;;;2407:79;;:::i;:::-;2369:2;2527:1;2552:53;2597:7;2588:6;2577:9;2573:22;2552:53;:::i;:::-;2542:63;;2498:117;2654:2;2680:53;2725:7;2716:6;2705:9;2701:22;2680:53;:::i;:::-;2670:63;;2625:118;2359:391;;;;;:::o;2756:619::-;2833:6;2841;2849;2898:2;2886:9;2877:7;2873:23;2869:32;2866:2;;;2904:79;;:::i;:::-;2866:2;3024:1;3049:53;3094:7;3085:6;3074:9;3070:22;3049:53;:::i;:::-;3039:63;;2995:117;3151:2;3177:53;3222:7;3213:6;3202:9;3198:22;3177:53;:::i;:::-;3167:63;;3122:118;3279:2;3305:53;3350:7;3341:6;3330:9;3326:22;3305:53;:::i;:::-;3295:63;;3250:118;2856:519;;;;;:::o;3381:474::-;3449:6;3457;3506:2;3494:9;3485:7;3481:23;3477:32;3474:2;;;3512:79;;:::i;:::-;3474:2;3632:1;3657:53;3702:7;3693:6;3682:9;3678:22;3657:53;:::i;:::-;3647:63;;3603:117;3759:2;3785:53;3830:7;3821:6;3810:9;3806:22;3785:53;:::i;:::-;3775:63;;3730:118;3464:391;;;;;:::o;3861:539::-;3945:6;3994:2;3982:9;3973:7;3969:23;3965:32;3962:2;;;4000:79;;:::i;:::-;3962:2;4148:1;4137:9;4133:17;4120:31;4178:18;4170:6;4167:30;4164:2;;;4200:79;;:::i;:::-;4164:2;4305:78;4375:7;4366:6;4355:9;4351:22;4305:78;:::i;:::-;4295:88;;4091:302;3952:448;;;;:::o;4406:329::-;4465:6;4514:2;4502:9;4493:7;4489:23;4485:32;4482:2;;;4520:79;;:::i;:::-;4482:2;4640:1;4665:53;4710:7;4701:6;4690:9;4686:22;4665:53;:::i;:::-;4655:63;;4611:117;4472:263;;;;:::o;4741:179::-;4810:10;4831:46;4873:3;4865:6;4831:46;:::i;:::-;4909:4;4904:3;4900:14;4886:28;;4821:99;;;;:::o;4926:118::-;5013:24;5031:5;5013:24;:::i;:::-;5008:3;5001:37;4991:53;;:::o;5080:732::-;5199:3;5228:54;5276:5;5228:54;:::i;:::-;5298:86;5377:6;5372:3;5298:86;:::i;:::-;5291:93;;5408:56;5458:5;5408:56;:::i;:::-;5487:7;5518:1;5503:284;5528:6;5525:1;5522:13;5503:284;;;5604:6;5598:13;5631:63;5690:3;5675:13;5631:63;:::i;:::-;5624:70;;5717:60;5770:6;5717:60;:::i;:::-;5707:70;;5563:224;5550:1;5547;5543:9;5538:14;;5503:284;;;5507:14;5803:3;5796:10;;5204:608;;;;;;;:::o;5818:109::-;5899:21;5914:5;5899:21;:::i;:::-;5894:3;5887:34;5877:50;;:::o;5933:364::-;6021:3;6049:39;6082:5;6049:39;:::i;:::-;6104:71;6168:6;6163:3;6104:71;:::i;:::-;6097:78;;6184:52;6229:6;6224:3;6217:4;6210:5;6206:16;6184:52;:::i;:::-;6261:29;6283:6;6261:29;:::i;:::-;6256:3;6252:39;6245:46;;6025:272;;;;;:::o;6303:366::-;6445:3;6466:67;6530:2;6525:3;6466:67;:::i;:::-;6459:74;;6542:93;6631:3;6542:93;:::i;:::-;6660:2;6655:3;6651:12;6644:19;;6449:220;;;:::o;6675:366::-;6817:3;6838:67;6902:2;6897:3;6838:67;:::i;:::-;6831:74;;6914:93;7003:3;6914:93;:::i;:::-;7032:2;7027:3;7023:12;7016:19;;6821:220;;;:::o;7047:366::-;7189:3;7210:67;7274:2;7269:3;7210:67;:::i;:::-;7203:74;;7286:93;7375:3;7286:93;:::i;:::-;7404:2;7399:3;7395:12;7388:19;;7193:220;;;:::o;7419:366::-;7561:3;7582:67;7646:2;7641:3;7582:67;:::i;:::-;7575:74;;7658:93;7747:3;7658:93;:::i;:::-;7776:2;7771:3;7767:12;7760:19;;7565:220;;;:::o;7791:366::-;7933:3;7954:67;8018:2;8013:3;7954:67;:::i;:::-;7947:74;;8030:93;8119:3;8030:93;:::i;:::-;8148:2;8143:3;8139:12;8132:19;;7937:220;;;:::o;8163:366::-;8305:3;8326:67;8390:2;8385:3;8326:67;:::i;:::-;8319:74;;8402:93;8491:3;8402:93;:::i;:::-;8520:2;8515:3;8511:12;8504:19;;8309:220;;;:::o;8535:366::-;8677:3;8698:67;8762:2;8757:3;8698:67;:::i;:::-;8691:74;;8774:93;8863:3;8774:93;:::i;:::-;8892:2;8887:3;8883:12;8876:19;;8681:220;;;:::o;8907:366::-;9049:3;9070:67;9134:2;9129:3;9070:67;:::i;:::-;9063:74;;9146:93;9235:3;9146:93;:::i;:::-;9264:2;9259:3;9255:12;9248:19;;9053:220;;;:::o;9279:366::-;9421:3;9442:67;9506:2;9501:3;9442:67;:::i;:::-;9435:74;;9518:93;9607:3;9518:93;:::i;:::-;9636:2;9631:3;9627:12;9620:19;;9425:220;;;:::o;9651:366::-;9793:3;9814:67;9878:2;9873:3;9814:67;:::i;:::-;9807:74;;9890:93;9979:3;9890:93;:::i;:::-;10008:2;10003:3;9999:12;9992:19;;9797:220;;;:::o;10023:366::-;10165:3;10186:67;10250:2;10245:3;10186:67;:::i;:::-;10179:74;;10262:93;10351:3;10262:93;:::i;:::-;10380:2;10375:3;10371:12;10364:19;;10169:220;;;:::o;10395:366::-;10537:3;10558:67;10622:2;10617:3;10558:67;:::i;:::-;10551:74;;10634:93;10723:3;10634:93;:::i;:::-;10752:2;10747:3;10743:12;10736:19;;10541:220;;;:::o;10767:366::-;10909:3;10930:67;10994:2;10989:3;10930:67;:::i;:::-;10923:74;;11006:93;11095:3;11006:93;:::i;:::-;11124:2;11119:3;11115:12;11108:19;;10913:220;;;:::o;11139:366::-;11281:3;11302:67;11366:2;11361:3;11302:67;:::i;:::-;11295:74;;11378:93;11467:3;11378:93;:::i;:::-;11496:2;11491:3;11487:12;11480:19;;11285:220;;;:::o;11511:366::-;11653:3;11674:67;11738:2;11733:3;11674:67;:::i;:::-;11667:74;;11750:93;11839:3;11750:93;:::i;:::-;11868:2;11863:3;11859:12;11852:19;;11657:220;;;:::o;11883:366::-;12025:3;12046:67;12110:2;12105:3;12046:67;:::i;:::-;12039:74;;12122:93;12211:3;12122:93;:::i;:::-;12240:2;12235:3;12231:12;12224:19;;12029:220;;;:::o;12255:366::-;12397:3;12418:67;12482:2;12477:3;12418:67;:::i;:::-;12411:74;;12494:93;12583:3;12494:93;:::i;:::-;12612:2;12607:3;12603:12;12596:19;;12401:220;;;:::o;12627:366::-;12769:3;12790:67;12854:2;12849:3;12790:67;:::i;:::-;12783:74;;12866:93;12955:3;12866:93;:::i;:::-;12984:2;12979:3;12975:12;12968:19;;12773:220;;;:::o;12999:366::-;13141:3;13162:67;13226:2;13221:3;13162:67;:::i;:::-;13155:74;;13238:93;13327:3;13238:93;:::i;:::-;13356:2;13351:3;13347:12;13340:19;;13145:220;;;:::o;13371:366::-;13513:3;13534:67;13598:2;13593:3;13534:67;:::i;:::-;13527:74;;13610:93;13699:3;13610:93;:::i;:::-;13728:2;13723:3;13719:12;13712:19;;13517:220;;;:::o;13743:108::-;13820:24;13838:5;13820:24;:::i;:::-;13815:3;13808:37;13798:53;;:::o;13857:118::-;13944:24;13962:5;13944:24;:::i;:::-;13939:3;13932:37;13922:53;;:::o;13981:112::-;14064:22;14080:5;14064:22;:::i;:::-;14059:3;14052:35;14042:51;;:::o;14099:222::-;14192:4;14230:2;14219:9;14215:18;14207:26;;14243:71;14311:1;14300:9;14296:17;14287:6;14243:71;:::i;:::-;14197:124;;;;:::o;14327:442::-;14476:4;14514:2;14503:9;14499:18;14491:26;;14527:71;14595:1;14584:9;14580:17;14571:6;14527:71;:::i;:::-;14608:72;14676:2;14665:9;14661:18;14652:6;14608:72;:::i;:::-;14690;14758:2;14747:9;14743:18;14734:6;14690:72;:::i;:::-;14481:288;;;;;;:::o;14775:373::-;14918:4;14956:2;14945:9;14941:18;14933:26;;15005:9;14999:4;14995:20;14991:1;14980:9;14976:17;14969:47;15033:108;15136:4;15127:6;15033:108;:::i;:::-;15025:116;;14923:225;;;;:::o;15154:210::-;15241:4;15279:2;15268:9;15264:18;15256:26;;15292:65;15354:1;15343:9;15339:17;15330:6;15292:65;:::i;:::-;15246:118;;;;:::o;15370:313::-;15483:4;15521:2;15510:9;15506:18;15498:26;;15570:9;15564:4;15560:20;15556:1;15545:9;15541:17;15534:47;15598:78;15671:4;15662:6;15598:78;:::i;:::-;15590:86;;15488:195;;;;:::o;15689:419::-;15855:4;15893:2;15882:9;15878:18;15870:26;;15942:9;15936:4;15932:20;15928:1;15917:9;15913:17;15906:47;15970:131;16096:4;15970:131;:::i;:::-;15962:139;;15860:248;;;:::o;16114:419::-;16280:4;16318:2;16307:9;16303:18;16295:26;;16367:9;16361:4;16357:20;16353:1;16342:9;16338:17;16331:47;16395:131;16521:4;16395:131;:::i;:::-;16387:139;;16285:248;;;:::o;16539:419::-;16705:4;16743:2;16732:9;16728:18;16720:26;;16792:9;16786:4;16782:20;16778:1;16767:9;16763:17;16756:47;16820:131;16946:4;16820:131;:::i;:::-;16812:139;;16710:248;;;:::o;16964:419::-;17130:4;17168:2;17157:9;17153:18;17145:26;;17217:9;17211:4;17207:20;17203:1;17192:9;17188:17;17181:47;17245:131;17371:4;17245:131;:::i;:::-;17237:139;;17135:248;;;:::o;17389:419::-;17555:4;17593:2;17582:9;17578:18;17570:26;;17642:9;17636:4;17632:20;17628:1;17617:9;17613:17;17606:47;17670:131;17796:4;17670:131;:::i;:::-;17662:139;;17560:248;;;:::o;17814:419::-;17980:4;18018:2;18007:9;18003:18;17995:26;;18067:9;18061:4;18057:20;18053:1;18042:9;18038:17;18031:47;18095:131;18221:4;18095:131;:::i;:::-;18087:139;;17985:248;;;:::o;18239:419::-;18405:4;18443:2;18432:9;18428:18;18420:26;;18492:9;18486:4;18482:20;18478:1;18467:9;18463:17;18456:47;18520:131;18646:4;18520:131;:::i;:::-;18512:139;;18410:248;;;:::o;18664:419::-;18830:4;18868:2;18857:9;18853:18;18845:26;;18917:9;18911:4;18907:20;18903:1;18892:9;18888:17;18881:47;18945:131;19071:4;18945:131;:::i;:::-;18937:139;;18835:248;;;:::o;19089:419::-;19255:4;19293:2;19282:9;19278:18;19270:26;;19342:9;19336:4;19332:20;19328:1;19317:9;19313:17;19306:47;19370:131;19496:4;19370:131;:::i;:::-;19362:139;;19260:248;;;:::o;19514:419::-;19680:4;19718:2;19707:9;19703:18;19695:26;;19767:9;19761:4;19757:20;19753:1;19742:9;19738:17;19731:47;19795:131;19921:4;19795:131;:::i;:::-;19787:139;;19685:248;;;:::o;19939:419::-;20105:4;20143:2;20132:9;20128:18;20120:26;;20192:9;20186:4;20182:20;20178:1;20167:9;20163:17;20156:47;20220:131;20346:4;20220:131;:::i;:::-;20212:139;;20110:248;;;:::o;20364:419::-;20530:4;20568:2;20557:9;20553:18;20545:26;;20617:9;20611:4;20607:20;20603:1;20592:9;20588:17;20581:47;20645:131;20771:4;20645:131;:::i;:::-;20637:139;;20535:248;;;:::o;20789:419::-;20955:4;20993:2;20982:9;20978:18;20970:26;;21042:9;21036:4;21032:20;21028:1;21017:9;21013:17;21006:47;21070:131;21196:4;21070:131;:::i;:::-;21062:139;;20960:248;;;:::o;21214:419::-;21380:4;21418:2;21407:9;21403:18;21395:26;;21467:9;21461:4;21457:20;21453:1;21442:9;21438:17;21431:47;21495:131;21621:4;21495:131;:::i;:::-;21487:139;;21385:248;;;:::o;21639:419::-;21805:4;21843:2;21832:9;21828:18;21820:26;;21892:9;21886:4;21882:20;21878:1;21867:9;21863:17;21856:47;21920:131;22046:4;21920:131;:::i;:::-;21912:139;;21810:248;;;:::o;22064:419::-;22230:4;22268:2;22257:9;22253:18;22245:26;;22317:9;22311:4;22307:20;22303:1;22292:9;22288:17;22281:47;22345:131;22471:4;22345:131;:::i;:::-;22337:139;;22235:248;;;:::o;22489:419::-;22655:4;22693:2;22682:9;22678:18;22670:26;;22742:9;22736:4;22732:20;22728:1;22717:9;22713:17;22706:47;22770:131;22896:4;22770:131;:::i;:::-;22762:139;;22660:248;;;:::o;22914:419::-;23080:4;23118:2;23107:9;23103:18;23095:26;;23167:9;23161:4;23157:20;23153:1;23142:9;23138:17;23131:47;23195:131;23321:4;23195:131;:::i;:::-;23187:139;;23085:248;;;:::o;23339:419::-;23505:4;23543:2;23532:9;23528:18;23520:26;;23592:9;23586:4;23582:20;23578:1;23567:9;23563:17;23556:47;23620:131;23746:4;23620:131;:::i;:::-;23612:139;;23510:248;;;:::o;23764:419::-;23930:4;23968:2;23957:9;23953:18;23945:26;;24017:9;24011:4;24007:20;24003:1;23992:9;23988:17;23981:47;24045:131;24171:4;24045:131;:::i;:::-;24037:139;;23935:248;;;:::o;24189:222::-;24282:4;24320:2;24309:9;24305:18;24297:26;;24333:71;24401:1;24390:9;24386:17;24377:6;24333:71;:::i;:::-;24287:124;;;;:::o;24417:214::-;24506:4;24544:2;24533:9;24529:18;24521:26;;24557:67;24621:1;24610:9;24606:17;24597:6;24557:67;:::i;:::-;24511:120;;;;:::o;24637:129::-;24671:6;24698:20;;:::i;:::-;24688:30;;24727:33;24755:4;24747:6;24727:33;:::i;:::-;24678:88;;;:::o;24772:75::-;24805:6;24838:2;24832:9;24822:19;;24812:35;:::o;24853:311::-;24930:4;25020:18;25012:6;25009:30;25006:2;;;25042:18;;:::i;:::-;25006:2;25092:4;25084:6;25080:17;25072:25;;25152:4;25146;25142:15;25134:23;;24935:229;;;:::o;25170:132::-;25237:4;25260:3;25252:11;;25290:4;25285:3;25281:14;25273:22;;25242:60;;;:::o;25308:114::-;25375:6;25409:5;25403:12;25393:22;;25382:40;;;:::o;25428:99::-;25480:6;25514:5;25508:12;25498:22;;25487:40;;;:::o;25533:113::-;25603:4;25635;25630:3;25626:14;25618:22;;25608:38;;;:::o;25652:184::-;25751:11;25785:6;25780:3;25773:19;25825:4;25820:3;25816:14;25801:29;;25763:73;;;;:::o;25842:169::-;25926:11;25960:6;25955:3;25948:19;26000:4;25995:3;25991:14;25976:29;;25938:73;;;;:::o;26017:305::-;26057:3;26076:20;26094:1;26076:20;:::i;:::-;26071:25;;26110:20;26128:1;26110:20;:::i;:::-;26105:25;;26264:1;26196:66;26192:74;26189:1;26186:81;26183:2;;;26270:18;;:::i;:::-;26183:2;26314:1;26311;26307:9;26300:16;;26061:261;;;;:::o;26328:348::-;26368:7;26391:20;26409:1;26391:20;:::i;:::-;26386:25;;26425:20;26443:1;26425:20;:::i;:::-;26420:25;;26613:1;26545:66;26541:74;26538:1;26535:81;26530:1;26523:9;26516:17;26512:105;26509:2;;;26620:18;;:::i;:::-;26509:2;26668:1;26665;26661:9;26650:20;;26376:300;;;;:::o;26682:191::-;26722:4;26742:20;26760:1;26742:20;:::i;:::-;26737:25;;26776:20;26794:1;26776:20;:::i;:::-;26771:25;;26815:1;26812;26809:8;26806:2;;;26820:18;;:::i;:::-;26806:2;26865:1;26862;26858:9;26850:17;;26727:146;;;;:::o;26879:96::-;26916:7;26945:24;26963:5;26945:24;:::i;:::-;26934:35;;26924:51;;;:::o;26981:90::-;27015:7;27058:5;27051:13;27044:21;27033:32;;27023:48;;;:::o;27077:126::-;27114:7;27154:42;27147:5;27143:54;27132:65;;27122:81;;;:::o;27209:77::-;27246:7;27275:5;27264:16;;27254:32;;;:::o;27292:86::-;27327:7;27367:4;27360:5;27356:16;27345:27;;27335:43;;;:::o;27384:307::-;27452:1;27462:113;27476:6;27473:1;27470:13;27462:113;;;27561:1;27556:3;27552:11;27546:18;27542:1;27537:3;27533:11;27526:39;27498:2;27495:1;27491:10;27486:15;;27462:113;;;27593:6;27590:1;27587:13;27584:2;;;27673:1;27664:6;27659:3;27655:16;27648:27;27584:2;27433:258;;;;:::o;27697:171::-;27736:3;27759:24;27777:5;27759:24;:::i;:::-;27750:33;;27805:4;27798:5;27795:15;27792:2;;;27813:18;;:::i;:::-;27792:2;27860:1;27853:5;27849:13;27842:20;;27740:128;;;:::o;27874:320::-;27918:6;27955:1;27949:4;27945:12;27935:22;;28002:1;27996:4;27992:12;28023:18;28013:2;;28079:4;28071:6;28067:17;28057:27;;28013:2;28141;28133:6;28130:14;28110:18;28107:38;28104:2;;;28160:18;;:::i;:::-;28104:2;27925:269;;;;:::o;28200:281::-;28283:27;28305:4;28283:27;:::i;:::-;28275:6;28271:40;28413:6;28401:10;28398:22;28377:18;28365:10;28362:34;28359:62;28356:2;;;28424:18;;:::i;:::-;28356:2;28464:10;28460:2;28453:22;28243:238;;;:::o;28487:233::-;28526:3;28549:24;28567:5;28549:24;:::i;:::-;28540:33;;28595:66;28588:5;28585:77;28582:2;;;28665:18;;:::i;:::-;28582:2;28712:1;28705:5;28701:13;28694:20;;28530:190;;;:::o;28726:180::-;28774:77;28771:1;28764:88;28871:4;28868:1;28861:15;28895:4;28892:1;28885:15;28912:180;28960:77;28957:1;28950:88;29057:4;29054:1;29047:15;29081:4;29078:1;29071:15;29098:180;29146:77;29143:1;29136:88;29243:4;29240:1;29233:15;29267:4;29264:1;29257:15;29284:180;29332:77;29329:1;29322:88;29429:4;29426:1;29419:15;29453:4;29450:1;29443:15;29470:180;29518:77;29515:1;29508:88;29615:4;29612:1;29605:15;29639:4;29636:1;29629:15;29656:117;29765:1;29762;29755:12;29779:117;29888:1;29885;29878:12;29902:117;30011:1;30008;30001:12;30025:117;30134:1;30131;30124:12;30148:102;30189:6;30240:2;30236:7;30231:2;30224:5;30220:14;30216:28;30206:38;;30196:54;;;:::o;30256:222::-;30396:34;30392:1;30384:6;30380:14;30373:58;30465:5;30460:2;30452:6;30448:15;30441:30;30362:116;:::o;30484:221::-;30624:34;30620:1;30612:6;30608:14;30601:58;30693:4;30688:2;30680:6;30676:15;30669:29;30590:115;:::o;30711:171::-;30851:23;30847:1;30839:6;30835:14;30828:47;30817:65;:::o;30888:225::-;31028:34;31024:1;31016:6;31012:14;31005:58;31097:8;31092:2;31084:6;31080:15;31073:33;30994:119;:::o;31119:221::-;31259:34;31255:1;31247:6;31243:14;31236:58;31328:4;31323:2;31315:6;31311:15;31304:29;31225:115;:::o;31346:225::-;31486:34;31482:1;31474:6;31470:14;31463:58;31555:8;31550:2;31542:6;31538:15;31531:33;31452:119;:::o;31577:180::-;31717:32;31713:1;31705:6;31701:14;31694:56;31683:74;:::o;31763:222::-;31903:34;31899:1;31891:6;31887:14;31880:58;31972:5;31967:2;31959:6;31955:15;31948:30;31869:116;:::o;31991:180::-;32131:32;32127:1;32119:6;32115:14;32108:56;32097:74;:::o;32177:223::-;32317:34;32313:1;32305:6;32301:14;32294:58;32386:6;32381:2;32373:6;32369:15;32362:31;32283:117;:::o;32406:227::-;32546:34;32542:1;32534:6;32530:14;32523:58;32615:10;32610:2;32602:6;32598:15;32591:35;32512:121;:::o;32639:182::-;32779:34;32775:1;32767:6;32763:14;32756:58;32745:76;:::o;32827:223::-;32967:34;32963:1;32955:6;32951:14;32944:58;33036:6;33031:2;33023:6;33019:15;33012:31;32933:117;:::o;33056:226::-;33196:34;33192:1;33184:6;33180:14;33173:58;33265:9;33260:2;33252:6;33248:15;33241:34;33162:120;:::o;33288:220::-;33428:34;33424:1;33416:6;33412:14;33405:58;33497:3;33492:2;33484:6;33480:15;33473:28;33394:114;:::o;33514:224::-;33654:34;33650:1;33642:6;33638:14;33631:58;33723:7;33718:2;33710:6;33706:15;33699:32;33620:118;:::o;33744:223::-;33884:34;33880:1;33872:6;33868:14;33861:58;33953:6;33948:2;33940:6;33936:15;33929:31;33850:117;:::o;33973:170::-;34113:22;34109:1;34101:6;34097:14;34090:46;34079:64;:::o;34149:224::-;34289:34;34285:1;34277:6;34273:14;34266:58;34358:7;34353:2;34345:6;34341:15;34334:32;34255:118;:::o;34379:181::-;34519:33;34515:1;34507:6;34503:14;34496:57;34485:75;:::o;34566:122::-;34639:24;34657:5;34639:24;:::i;:::-;34632:5;34629:35;34619:2;;34678:1;34675;34668:12;34619:2;34609:79;:::o;34694:122::-;34767:24;34785:5;34767:24;:::i;:::-;34760:5;34757:35;34747:2;;34806:1;34803;34796:12;34747:2;34737:79;:::o

Swarm Source

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