ETH Price: $3,424.01 (+3.12%)

Token

Gainz Coin (GAINZ)
 

Overview

Max Total Supply

242,315,205,393.01354648312915579 GAINZ

Holders

295

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
satstack3r.eth
Balance
58,376,952.48863095238095238 GAINZ

Value
$0.00
0xf5c13c0050e88a721b61c4739902dc484bf28ada
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:
GAINZZZ

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/GAINZZZ.sol


pragma solidity ^0.8.17;


contract GAINZZZ is ERC20 {
    IERC20 public chadToken;
    IERC20 public wojakToken;
    IERC20 public pepeToken;

    mapping(uint => mapping(uint256 => mapping(address => uint256))) public stakedBalances;
    mapping(uint => mapping(uint256 => mapping(address => uint256))) public stakedAt;
    mapping(uint => mapping(uint256 => mapping(address => uint256))) public lastClaimed;
    mapping(uint => mapping(uint256 => mapping(address => uint256))) public lastTimeClaimed;

    mapping(uint256 => uint256) public lockTimeMultipliers;
    mapping(uint256 => uint256) public lockTimes;
    mapping(uint256 => uint256) public tokenFactors;
    mapping(uint256 => uint256) public totalStaked;
    uint256 public startTime;

    mapping(uint256 => IERC20) public tokenIndex;

    uint256 public BASE_MULTIPLIER = 1 << 128;

    uint256 public constant EPOCH = 1 weeks;

    event Staked(address indexed user, uint256 amount);
    event Unstaked(address indexed user, uint256 amount);

    constructor() ERC20("Gainz Coin", "GAINZ") {
        uint256 initialSupply = 235_000_000_000 * 10 ** 18;

        uint256 marketingBudget = 5 * initialSupply / 100;
        uint256 exchangeBudget = 5 * initialSupply / 100;
        uint256 teamBudget = 20 * initialSupply / 100;
        uint256 liquidity = 70 * initialSupply / 100;

        _mint(0xf3b678F3D41732C22304243D5Ae9B0dC899379d3, marketingBudget); // marketing
        _mint(0x30A80b3304Ab26eBCA5159E76FE60Fb1CaAcB210, exchangeBudget); // exchange listing
        _mint(0x5b5B879936b21b72f7ea4C73D9Bc134905f149E8, teamBudget); // team
        _mint(msg.sender, liquidity); // liquidity

        startTime = block.timestamp;

        chadToken = IERC20(0x6B89B97169a797d94F057F4a0B01E2cA303155e4);
        wojakToken = IERC20(0x5026F006B85729a8b14553FAE6af249aD16c9aaB);
        pepeToken = IERC20(0x6982508145454Ce325dDbE47a25d4ec3d2311933);

        tokenIndex[0] = chadToken;
        tokenIndex[1] = wojakToken;
        tokenIndex[2] = pepeToken;

        tokenFactors[0] = 100000; // 1 * 100000
        tokenFactors[1] = 30000; // 0.3 * 100000
        tokenFactors[2] = 5; // 0.00005 * 100000

        lockTimeMultipliers[0] = 120; // 1 week = 1.2x
        lockTimeMultipliers[1] = 150; // 1 month = 1.5x
        lockTimeMultipliers[2] = 200; // 3 months = 2x
        lockTimeMultipliers[3] = 300; // 6 months = 3x
        lockTimeMultipliers[4] = 500; // 1 year = 5x

        lockTimes[0] = EPOCH;
        lockTimes[1] = 4 * EPOCH;
        lockTimes[2] = 12 * EPOCH;
        lockTimes[3] = 24 * EPOCH;
        lockTimes[4] = 48 * EPOCH;
    }

    modifier valid(uint256 token, uint256 timelock) {
        require(timelock < 5, "Invalid lock period");
        require(token < 3, "Invalid token");
        _;
    }

    function stake(uint256 token, uint256 timelock, uint256 amount) public valid(token, timelock) {
        require(amount > 0, "Amount must be greater than 0");

        _claimRewards(token, msg.sender, timelock);

        tokenIndex[token].transferFrom(msg.sender, address(this), amount);

        stakedBalances[token][timelock][msg.sender] += amount;
        stakedAt[token][timelock][msg.sender] = block.timestamp;
        totalStaked[token] += amount;

        emit Staked(msg.sender, amount);
    }

    function unstake(uint256 token, uint256 timelock, uint256 amount) public valid(token, timelock) {
        require(stakedBalances[token][timelock][msg.sender] >= amount, "Insufficient staked balance");
        require(block.timestamp - stakedAt[token][timelock][msg.sender] >= lockTimes[timelock], "Just a little bit longer, CHAD.");
        require(amount > 0, "Amount must be greater than 0");

        _claimRewards(token, msg.sender, timelock);

        stakedBalances[token][timelock][msg.sender] -= amount;
        tokenIndex[token].transfer(msg.sender, amount);
        totalStaked[token] -= amount;

        emit Unstaked(msg.sender, amount);
    }

    function claimRewards(uint256 token, uint256 timelock) public valid(token, timelock) {
        _claimRewards(token, msg.sender, timelock);
    }

    function claimAllRewards() public {
        for (uint256 token = 0; token < 3; ++token) {
            for (uint256 timelock = 0; timelock < 5; ++timelock) {
                _claimRewards(token, msg.sender, timelock);
            }
        }
    }

    function _claimRewards(uint256 token, address user, uint256 timelock) internal {
        uint256 totalOwed = _calculateRewards(token, user, timelock);

        lastClaimed[token][timelock][user] = _getEpochOfTimestamp(block.timestamp);
        lastTimeClaimed[token][timelock][user] = block.timestamp;
        if (totalOwed > 0) _mint(user, totalOwed);
    }

    function _calculateRewards(uint256 token, address user, uint256 timelock) internal view returns (uint256) {
        if (lastTimeClaimed[token][timelock][user] == 0 || stakedBalances[token][timelock][user] == 0) {
            return 0;
        }

        uint256 startEpoch = lastClaimed[token][timelock][user];
        uint256 endEpoch = _getEpochOfTimestamp(block.timestamp);

        uint256 totalOwed;
        uint256 balanceScaled = stakedBalances[token][timelock][user] * lockTimeMultipliers[timelock] * tokenFactors[token];

        // Handle first epoch
        if (startEpoch != endEpoch) {
            uint256 timeLeftInStartEpoch = EPOCH - ((lastTimeClaimed[token][timelock][user] - startTime) % EPOCH);
            totalOwed += timeLeftInStartEpoch * (BASE_MULTIPLIER >> startEpoch) * balanceScaled / EPOCH / BASE_MULTIPLIER / 100 / 100000;
        }

        for (uint256 i = startEpoch + 1; i < endEpoch; i++) {
            if (i > 128) break;
            totalOwed += balanceScaled * (BASE_MULTIPLIER >> i) / BASE_MULTIPLIER / 100 / 100000;
        }

        // Handle current epoch
        uint256 lastTime = (endEpoch == lastClaimed[token][timelock][user]) ? lastTimeClaimed[token][timelock][user] : startTime;
        uint256 secondsSinceLastUpdate = (block.timestamp - lastTime) % EPOCH;
        uint256 rawEarnAmountForThisEpoch = balanceScaled * (BASE_MULTIPLIER >> endEpoch) / BASE_MULTIPLIER / 100 / 100000;
        uint256 scaledEarningsThisEpoch = rawEarnAmountForThisEpoch * secondsSinceLastUpdate / EPOCH;

        return totalOwed + scaledEarningsThisEpoch;
    }

    function calculateRewards(uint256 token, address user, uint256 timelock) public view returns(uint256) {
        return _calculateRewards(token, user, timelock);
    }

    function getAllStakedBalances(uint256 token, address user) public view returns(uint256) {
        uint total;
        for (uint timelock = 0; timelock < 5; ++timelock) {
            total += stakedBalances[token][timelock][user];
        }
        return total;
    }

    function calculateAllRewards(uint256 token, address user) public view returns(uint256) {
        uint total;
        for (uint timelock = 0; timelock < 5; ++timelock) {
            total += _calculateRewards(token, user, timelock);
        }
        return total;
    }

    function _getEpochOfTimestamp(uint256 timestamp) internal view returns (uint256) {
        return (timestamp - startTime) / (EPOCH);
    }

    function getBaseMultiplier() public view returns (uint256) {
        return (BASE_MULTIPLIER >> getCurrentEpoch());
    }

    function getCurrentEpoch() public view returns (uint256) {
        return _getEpochOfTimestamp(block.timestamp);
    }
}

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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"BASE_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EPOCH","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":"token","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"calculateAllRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"timelock","type":"uint256"}],"name":"calculateRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chadToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"uint256","name":"timelock","type":"uint256"}],"name":"claimRewards","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":"uint256","name":"token","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"getAllStakedBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpoch","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":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"lastClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"lastTimeClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockTimeMultipliers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pepeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"uint256","name":"timelock","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"stakedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"stakedBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenFactors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIndex","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"uint256","name":"timelock","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wojakToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040527001000000000000000000000000000000006012553480156200002657600080fd5b506040518060400160405280600a81526020017f4761696e7a20436f696e000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4741494e5a0000000000000000000000000000000000000000000000000000008152508160039081620000a49190620009c9565b508060049081620000b69190620009c9565b50505060006c02f75371a6b465b7e8f8000000905060006064826005620000de919062000adf565b620000ea919062000b59565b905060006064836005620000ff919062000adf565b6200010b919062000b59565b90506000606484601462000120919062000adf565b6200012c919062000b59565b90506000606485604662000141919062000adf565b6200014d919062000b59565b90506200017573f3b678f3d41732c22304243d5ae9b0dc899379d385620005d860201b60201c565b6200019b7330a80b3304ab26ebca5159e76fe60fb1caacb21084620005d860201b60201c565b620001c1735b5b879936b21b72f7ea4c73d9bc134905f149e883620005d860201b60201c565b620001d33382620005d860201b60201c565b42601081905550736b89b97169a797d94f057f4a0b01e2ca303155e4600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735026f006b85729a8b14553fae6af249ad16c9aab600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736982508145454ce325ddbe47a25d4ec3d2311933600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166011600080815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601160006001815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601160006002815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a0600e600080815260200190815260200160002081905550617530600e600060018152602001908152602001600020819055506005600e600060028152602001908152602001600020819055506078600c6000808152602001908152602001600020819055506096600c6000600181526020019081526020016000208190555060c8600c6000600281526020019081526020016000208190555061012c600c600060038152602001908152602001600020819055506101f4600c6000600481526020019081526020016000208190555062093a80600d60008081526020019081526020016000208190555062093a80600462000537919062000adf565b600d6000600181526020019081526020016000208190555062093a80600c62000561919062000adf565b600d6000600281526020019081526020016000208190555062093a8060186200058b919062000adf565b600d6000600381526020019081526020016000208190555062093a806030620005b5919062000adf565b600d60006004815260200190815260200160002081905550505050505062000c7d565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200064a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006419062000bf2565b60405180910390fd5b6200065e600083836200074560201b60201c565b806002600082825462000672919062000c14565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000725919062000c60565b60405180910390a362000741600083836200074a60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007d157607f821691505b602082108103620007e757620007e662000789565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000812565b6200085d868362000812565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008aa620008a46200089e8462000875565b6200087f565b62000875565b9050919050565b6000819050919050565b620008c68362000889565b620008de620008d582620008b1565b8484546200081f565b825550505050565b600090565b620008f5620008e6565b62000902818484620008bb565b505050565b5b818110156200092a576200091e600082620008eb565b60018101905062000908565b5050565b601f82111562000979576200094381620007ed565b6200094e8462000802565b810160208510156200095e578190505b620009766200096d8562000802565b83018262000907565b50505b505050565b600082821c905092915050565b60006200099e600019846008026200097e565b1980831691505092915050565b6000620009b983836200098b565b9150826002028217905092915050565b620009d4826200074f565b67ffffffffffffffff811115620009f057620009ef6200075a565b5b620009fc8254620007b8565b62000a098282856200092e565b600060209050601f83116001811462000a41576000841562000a2c578287015190505b62000a388582620009ab565b86555062000aa8565b601f19841662000a5186620007ed565b60005b8281101562000a7b5784890151825560018201915060208501945060208101905062000a54565b8683101562000a9b578489015162000a97601f8916826200098b565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000aec8262000875565b915062000af98362000875565b925082820262000b098162000875565b9150828204841483151762000b235762000b2262000ab0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000b668262000875565b915062000b738362000875565b92508262000b865762000b8562000b2a565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000bda601f8362000b91565b915062000be78262000ba2565b602082019050919050565b6000602082019050818103600083015262000c0d8162000bcb565b9050919050565b600062000c218262000875565b915062000c2e8362000875565b925082820190508082111562000c495762000c4862000ab0565b5b92915050565b62000c5a8162000875565b82525050565b600060208201905062000c77600083018462000c4f565b92915050565b612fd58062000c8d6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806378e9792511610125578063adee3cfd116100ad578063d29a719e1161007c578063d29a719e1461067c578063d3c942a6146106ac578063dd62ed3e146106dc578063fb81ea711461070c578063fbb7583b1461073c57610211565b8063adee3cfd146105e2578063b97dd9e214610612578063bd97b37514610630578063c9f276c01461064c57610211565b8063a0dc2758116100f4578063a0dc27581461052a578063a2b4439314610548578063a457c2d714610566578063a638f2e214610596578063a9059cbb146105b257610211565b806378e97925146104a05780638a47f963146104be57806395d89b41146104dc5780639bf7198a146104fa57610211565b806323b872dd116101a8578063395093511161017757806339509351146103c457806341cb8c20146103f457806345b7c6fc14610424578063594dd4321461045457806370a082311461047057610211565b806323b872dd146103285780632c5483b214610358578063313ce567146103885780633687e84d146103a657610211565b806318160ddd116101e457806318160ddd1461029e5780631cb51891146102bc5780631e34e6e4146102ec57806321cc4c3f1461030a57610211565b80630583e9f81461021657806306fdde0314610246578063095ea7b3146102645780630b83a72714610294575b600080fd5b610230600480360381019061022b919061219e565b61076c565b60405161023d919061224a565b60405180910390f35b61024e61079f565b60405161025b91906122f5565b60405180910390f35b61027e60048036038101906102799190612355565b610831565b60405161028b91906123b0565b60405180910390f35b61029c610854565b005b6102a661089d565b6040516102b391906123da565b60405180910390f35b6102d660048036038101906102d191906123f5565b6108a7565b6040516102e391906123da565b60405180910390f35b6102f46108d9565b604051610301919061224a565b60405180910390f35b6103126108ff565b60405161031f919061224a565b60405180910390f35b610342600480360381019061033d9190612448565b610925565b60405161034f91906123b0565b60405180910390f35b610372600480360381019061036d919061249b565b610954565b60405161037f91906123da565b60405180910390f35b6103906109ee565b60405161039d91906124f7565b60405180910390f35b6103ae6109f7565b6040516103bb919061224a565b60405180910390f35b6103de60048036038101906103d99190612355565b610a1d565b6040516103eb91906123b0565b60405180910390f35b61040e6004803603810190610409919061219e565b610a54565b60405161041b91906123da565b60405180910390f35b61043e60048036038101906104399190612512565b610a6c565b60405161044b91906123da565b60405180910390f35b61046e60048036038101906104699190612565565b610a82565b005b61048a600480360381019061048591906125a5565b610b1b565b60405161049791906123da565b60405180910390f35b6104a8610b63565b6040516104b591906123da565b60405180910390f35b6104c6610b69565b6040516104d391906123da565b60405180910390f35b6104e4610b7d565b6040516104f191906122f5565b60405180910390f35b610514600480360381019061050f91906123f5565b610c0f565b60405161052191906123da565b60405180910390f35b610532610c41565b60405161053f91906123da565b60405180910390f35b610550610c48565b60405161055d91906123da565b60405180910390f35b610580600480360381019061057b9190612355565b610c4e565b60405161058d91906123b0565b60405180910390f35b6105b060048036038101906105ab91906125d2565b610cc5565b005b6105cc60048036038101906105c79190612355565b610fac565b6040516105d991906123b0565b60405180910390f35b6105fc60048036038101906105f791906123f5565b610fcf565b60405161060991906123da565b60405180910390f35b61061a611001565b60405161062791906123da565b60405180910390f35b61064a600480360381019061064591906125d2565b611011565b005b610666600480360381019061066191906123f5565b6113f6565b60405161067391906123da565b60405180910390f35b6106966004803603810190610691919061219e565b611428565b6040516106a391906123da565b60405180910390f35b6106c660048036038101906106c1919061219e565b611440565b6040516106d391906123da565b60405180910390f35b6106f660048036038101906106f19190612625565b611458565b60405161070391906123da565b60405180910390f35b6107266004803603810190610721919061219e565b6114df565b60405161073391906123da565b60405180910390f35b6107566004803603810190610751919061249b565b6114f7565b60405161076391906123da565b60405180910390f35b60116020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546107ae90612694565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90612694565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b60008061083c61153a565b9050610849818585611542565b600191505092915050565b60005b600381101561089a5760005b60058110156108885761087782338361170b565b80610881906126f4565b9050610863565b5080610893906126f4565b9050610857565b50565b6000600254905090565b600960205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061093061153a565b905061093d858285611808565b610948858585611894565b60019150509392505050565b60008060005b60058110156109e35760086000868152602001908152602001600020600082815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826109d0919061273c565b9150806109dc906126f4565b905061095a565b508091505092915050565b60006012905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610a2861153a565b9050610a49818585610a3a8589611458565b610a44919061273c565b611542565b600191505092915050565b600f6020528060005260406000206000915090505481565b6000610a79848484611b0a565b90509392505050565b818160058110610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe906127bc565b60405180910390fd5b60038210610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0190612828565b60405180910390fd5b610b1584338561170b565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60105481565b6000610b73611001565b601254901c905090565b606060048054610b8c90612694565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb890612694565b8015610c055780601f10610bda57610100808354040283529160200191610c05565b820191906000526020600020905b815481529060010190602001808311610be857829003601f168201915b5050505050905090565b600b60205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b62093a8081565b60125481565b600080610c5961153a565b90506000610c678286611458565b905083811015610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca3906128ba565b60405180910390fd5b610cb98286868403611542565b60019250505092915050565b828260058110610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d01906127bc565b60405180910390fd5b60038210610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490612828565b60405180910390fd5b60008311610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790612926565b60405180910390fd5b610d9b85338661170b565b6011600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610e0b93929190612955565b6020604051808303816000875af1158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906129b8565b508260086000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ec0919061273c565b925050819055504260096000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600f60008781526020019081526020016000206000828254610f50919061273c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d84604051610f9d91906123da565b60405180910390a25050505050565b600080610fb761153a565b9050610fc4818585611894565b600191505092915050565b600860205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600061100c42611fde565b905090565b828260058110611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d906127bc565b60405180910390fd5b60038210611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090612828565b60405180910390fd5b8260086000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490612a31565b60405180910390fd5b600d60008581526020019081526020016000205460096000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426111be9190612a51565b10156111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690612ad1565b60405180910390fd5b60008311611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990612926565b60405180910390fd5b61124d85338661170b565b8260086000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112be9190612a51565b925050819055506011600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401611333929190612af1565b6020604051808303816000875af1158015611352573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137691906129b8565b5082600f6000878152602001908152602001600020600082825461139a9190612a51565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75846040516113e791906123da565b60405180910390a25050505050565b600a60205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600c6020528060005260406000206000915090505481565b600d6020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e6020528060005260406000206000915090505481565b60008060005b600581101561152f57611511858583611b0a565b8261151c919061273c565b915080611528906126f4565b90506114fd565b508091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890612b8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790612c1e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116fe91906123da565b60405180910390a3505050565b6000611718848484611b0a565b905061172342611fde565b600a6000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600b6000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000811115611802576118018382612003565b5b50505050565b60006118148484611458565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461188e5781811015611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790612c8a565b60405180910390fd5b61188d8484848403611542565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90612d1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990612dae565b60405180910390fd5b61197d838383612159565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90612e40565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611af191906123da565b60405180910390a3611b0484848461215e565b50505050565b600080600b6000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480611bdc5750600060086000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15611bea5760009050611fd7565b6000600a6000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611c5b42611fde565b9050600080600e600089815260200190815260200160002054600c600088815260200190815260200160002054600860008b8152602001908152602001600020600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cf49190612e60565b611cfe9190612e60565b9050828414611df657600062093a80601054600b60008c815260200190815260200160002060008a815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d7c9190612a51565b611d869190612ed1565b62093a80611d949190612a51565b9050620186a0606460125462093a808589601254901c86611db59190612e60565b611dbf9190612e60565b611dc99190612f02565b611dd39190612f02565b611ddd9190612f02565b611de79190612f02565b83611df2919061273c565b9250505b6000600185611e05919061273c565b90505b83811015611e705760808111611e7057620186a0606460125483601254901c85611e329190612e60565b611e3c9190612f02565b611e469190612f02565b611e509190612f02565b83611e5b919061273c565b92508080611e68906126f4565b915050611e08565b506000600a60008a8152602001908152602001600020600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548414611ee357601054611f46565b600b60008a8152602001908152602001600020600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b9050600062093a808242611f5a9190612a51565b611f649190612ed1565b90506000620186a0606460125488601254901c87611f829190612e60565b611f8c9190612f02565b611f969190612f02565b611fa09190612f02565b9050600062093a808383611fb49190612e60565b611fbe9190612f02565b90508086611fcc919061273c565b985050505050505050505b9392505050565b600062093a8060105483611ff29190612a51565b611ffc9190612f02565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990612f7f565b60405180910390fd5b61207e60008383612159565b8060026000828254612090919061273c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161214191906123da565b60405180910390a36121556000838361215e565b5050565b505050565b505050565b600080fd5b6000819050919050565b61217b81612168565b811461218657600080fd5b50565b60008135905061219881612172565b92915050565b6000602082840312156121b4576121b3612163565b5b60006121c284828501612189565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061221061220b612206846121cb565b6121eb565b6121cb565b9050919050565b6000612222826121f5565b9050919050565b600061223482612217565b9050919050565b61224481612229565b82525050565b600060208201905061225f600083018461223b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561229f578082015181840152602081019050612284565b60008484015250505050565b6000601f19601f8301169050919050565b60006122c782612265565b6122d18185612270565b93506122e1818560208601612281565b6122ea816122ab565b840191505092915050565b6000602082019050818103600083015261230f81846122bc565b905092915050565b6000612322826121cb565b9050919050565b61233281612317565b811461233d57600080fd5b50565b60008135905061234f81612329565b92915050565b6000806040838503121561236c5761236b612163565b5b600061237a85828601612340565b925050602061238b85828601612189565b9150509250929050565b60008115159050919050565b6123aa81612395565b82525050565b60006020820190506123c560008301846123a1565b92915050565b6123d481612168565b82525050565b60006020820190506123ef60008301846123cb565b92915050565b60008060006060848603121561240e5761240d612163565b5b600061241c86828701612189565b935050602061242d86828701612189565b925050604061243e86828701612340565b9150509250925092565b60008060006060848603121561246157612460612163565b5b600061246f86828701612340565b935050602061248086828701612340565b925050604061249186828701612189565b9150509250925092565b600080604083850312156124b2576124b1612163565b5b60006124c085828601612189565b92505060206124d185828601612340565b9150509250929050565b600060ff82169050919050565b6124f1816124db565b82525050565b600060208201905061250c60008301846124e8565b92915050565b60008060006060848603121561252b5761252a612163565b5b600061253986828701612189565b935050602061254a86828701612340565b925050604061255b86828701612189565b9150509250925092565b6000806040838503121561257c5761257b612163565b5b600061258a85828601612189565b925050602061259b85828601612189565b9150509250929050565b6000602082840312156125bb576125ba612163565b5b60006125c984828501612340565b91505092915050565b6000806000606084860312156125eb576125ea612163565b5b60006125f986828701612189565b935050602061260a86828701612189565b925050604061261b86828701612189565b9150509250925092565b6000806040838503121561263c5761263b612163565b5b600061264a85828601612340565b925050602061265b85828601612340565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126ac57607f821691505b6020821081036126bf576126be612665565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126ff82612168565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612731576127306126c5565b5b600182019050919050565b600061274782612168565b915061275283612168565b925082820190508082111561276a576127696126c5565b5b92915050565b7f496e76616c6964206c6f636b20706572696f6400000000000000000000000000600082015250565b60006127a6601383612270565b91506127b182612770565b602082019050919050565b600060208201905081810360008301526127d581612799565b9050919050565b7f496e76616c696420746f6b656e00000000000000000000000000000000000000600082015250565b6000612812600d83612270565b915061281d826127dc565b602082019050919050565b6000602082019050818103600083015261284181612805565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128a4602583612270565b91506128af82612848565b604082019050919050565b600060208201905081810360008301526128d381612897565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000612910601d83612270565b915061291b826128da565b602082019050919050565b6000602082019050818103600083015261293f81612903565b9050919050565b61294f81612317565b82525050565b600060608201905061296a6000830186612946565b6129776020830185612946565b61298460408301846123cb565b949350505050565b61299581612395565b81146129a057600080fd5b50565b6000815190506129b28161298c565b92915050565b6000602082840312156129ce576129cd612163565b5b60006129dc848285016129a3565b91505092915050565b7f496e73756666696369656e74207374616b65642062616c616e63650000000000600082015250565b6000612a1b601b83612270565b9150612a26826129e5565b602082019050919050565b60006020820190508181036000830152612a4a81612a0e565b9050919050565b6000612a5c82612168565b9150612a6783612168565b9250828203905081811115612a7f57612a7e6126c5565b5b92915050565b7f4a7573742061206c6974746c6520626974206c6f6e6765722c20434841442e00600082015250565b6000612abb601f83612270565b9150612ac682612a85565b602082019050919050565b60006020820190508181036000830152612aea81612aae565b9050919050565b6000604082019050612b066000830185612946565b612b1360208301846123cb565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612b76602483612270565b9150612b8182612b1a565b604082019050919050565b60006020820190508181036000830152612ba581612b69565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c08602283612270565b9150612c1382612bac565b604082019050919050565b60006020820190508181036000830152612c3781612bfb565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612c74601d83612270565b9150612c7f82612c3e565b602082019050919050565b60006020820190508181036000830152612ca381612c67565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d06602583612270565b9150612d1182612caa565b604082019050919050565b60006020820190508181036000830152612d3581612cf9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612d98602383612270565b9150612da382612d3c565b604082019050919050565b60006020820190508181036000830152612dc781612d8b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612e2a602683612270565b9150612e3582612dce565b604082019050919050565b60006020820190508181036000830152612e5981612e1d565b9050919050565b6000612e6b82612168565b9150612e7683612168565b9250828202612e8481612168565b91508282048414831517612e9b57612e9a6126c5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612edc82612168565b9150612ee783612168565b925082612ef757612ef6612ea2565b5b828206905092915050565b6000612f0d82612168565b9150612f1883612168565b925082612f2857612f27612ea2565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612f69601f83612270565b9150612f7482612f33565b602082019050919050565b60006020820190508181036000830152612f9881612f5c565b905091905056fea2646970667358221220383cff92e83923a6bbdc0c96ad528a0c20bcbab6610a8f45901da244a8217c1864736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c806378e9792511610125578063adee3cfd116100ad578063d29a719e1161007c578063d29a719e1461067c578063d3c942a6146106ac578063dd62ed3e146106dc578063fb81ea711461070c578063fbb7583b1461073c57610211565b8063adee3cfd146105e2578063b97dd9e214610612578063bd97b37514610630578063c9f276c01461064c57610211565b8063a0dc2758116100f4578063a0dc27581461052a578063a2b4439314610548578063a457c2d714610566578063a638f2e214610596578063a9059cbb146105b257610211565b806378e97925146104a05780638a47f963146104be57806395d89b41146104dc5780639bf7198a146104fa57610211565b806323b872dd116101a8578063395093511161017757806339509351146103c457806341cb8c20146103f457806345b7c6fc14610424578063594dd4321461045457806370a082311461047057610211565b806323b872dd146103285780632c5483b214610358578063313ce567146103885780633687e84d146103a657610211565b806318160ddd116101e457806318160ddd1461029e5780631cb51891146102bc5780631e34e6e4146102ec57806321cc4c3f1461030a57610211565b80630583e9f81461021657806306fdde0314610246578063095ea7b3146102645780630b83a72714610294575b600080fd5b610230600480360381019061022b919061219e565b61076c565b60405161023d919061224a565b60405180910390f35b61024e61079f565b60405161025b91906122f5565b60405180910390f35b61027e60048036038101906102799190612355565b610831565b60405161028b91906123b0565b60405180910390f35b61029c610854565b005b6102a661089d565b6040516102b391906123da565b60405180910390f35b6102d660048036038101906102d191906123f5565b6108a7565b6040516102e391906123da565b60405180910390f35b6102f46108d9565b604051610301919061224a565b60405180910390f35b6103126108ff565b60405161031f919061224a565b60405180910390f35b610342600480360381019061033d9190612448565b610925565b60405161034f91906123b0565b60405180910390f35b610372600480360381019061036d919061249b565b610954565b60405161037f91906123da565b60405180910390f35b6103906109ee565b60405161039d91906124f7565b60405180910390f35b6103ae6109f7565b6040516103bb919061224a565b60405180910390f35b6103de60048036038101906103d99190612355565b610a1d565b6040516103eb91906123b0565b60405180910390f35b61040e6004803603810190610409919061219e565b610a54565b60405161041b91906123da565b60405180910390f35b61043e60048036038101906104399190612512565b610a6c565b60405161044b91906123da565b60405180910390f35b61046e60048036038101906104699190612565565b610a82565b005b61048a600480360381019061048591906125a5565b610b1b565b60405161049791906123da565b60405180910390f35b6104a8610b63565b6040516104b591906123da565b60405180910390f35b6104c6610b69565b6040516104d391906123da565b60405180910390f35b6104e4610b7d565b6040516104f191906122f5565b60405180910390f35b610514600480360381019061050f91906123f5565b610c0f565b60405161052191906123da565b60405180910390f35b610532610c41565b60405161053f91906123da565b60405180910390f35b610550610c48565b60405161055d91906123da565b60405180910390f35b610580600480360381019061057b9190612355565b610c4e565b60405161058d91906123b0565b60405180910390f35b6105b060048036038101906105ab91906125d2565b610cc5565b005b6105cc60048036038101906105c79190612355565b610fac565b6040516105d991906123b0565b60405180910390f35b6105fc60048036038101906105f791906123f5565b610fcf565b60405161060991906123da565b60405180910390f35b61061a611001565b60405161062791906123da565b60405180910390f35b61064a600480360381019061064591906125d2565b611011565b005b610666600480360381019061066191906123f5565b6113f6565b60405161067391906123da565b60405180910390f35b6106966004803603810190610691919061219e565b611428565b6040516106a391906123da565b60405180910390f35b6106c660048036038101906106c1919061219e565b611440565b6040516106d391906123da565b60405180910390f35b6106f660048036038101906106f19190612625565b611458565b60405161070391906123da565b60405180910390f35b6107266004803603810190610721919061219e565b6114df565b60405161073391906123da565b60405180910390f35b6107566004803603810190610751919061249b565b6114f7565b60405161076391906123da565b60405180910390f35b60116020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546107ae90612694565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90612694565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b60008061083c61153a565b9050610849818585611542565b600191505092915050565b60005b600381101561089a5760005b60058110156108885761087782338361170b565b80610881906126f4565b9050610863565b5080610893906126f4565b9050610857565b50565b6000600254905090565b600960205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061093061153a565b905061093d858285611808565b610948858585611894565b60019150509392505050565b60008060005b60058110156109e35760086000868152602001908152602001600020600082815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826109d0919061273c565b9150806109dc906126f4565b905061095a565b508091505092915050565b60006012905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610a2861153a565b9050610a49818585610a3a8589611458565b610a44919061273c565b611542565b600191505092915050565b600f6020528060005260406000206000915090505481565b6000610a79848484611b0a565b90509392505050565b818160058110610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe906127bc565b60405180910390fd5b60038210610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0190612828565b60405180910390fd5b610b1584338561170b565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60105481565b6000610b73611001565b601254901c905090565b606060048054610b8c90612694565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb890612694565b8015610c055780601f10610bda57610100808354040283529160200191610c05565b820191906000526020600020905b815481529060010190602001808311610be857829003601f168201915b5050505050905090565b600b60205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b62093a8081565b60125481565b600080610c5961153a565b90506000610c678286611458565b905083811015610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca3906128ba565b60405180910390fd5b610cb98286868403611542565b60019250505092915050565b828260058110610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d01906127bc565b60405180910390fd5b60038210610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490612828565b60405180910390fd5b60008311610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790612926565b60405180910390fd5b610d9b85338661170b565b6011600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610e0b93929190612955565b6020604051808303816000875af1158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906129b8565b508260086000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ec0919061273c565b925050819055504260096000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600f60008781526020019081526020016000206000828254610f50919061273c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d84604051610f9d91906123da565b60405180910390a25050505050565b600080610fb761153a565b9050610fc4818585611894565b600191505092915050565b600860205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600061100c42611fde565b905090565b828260058110611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d906127bc565b60405180910390fd5b60038210611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090612828565b60405180910390fd5b8260086000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490612a31565b60405180910390fd5b600d60008581526020019081526020016000205460096000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426111be9190612a51565b10156111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690612ad1565b60405180910390fd5b60008311611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990612926565b60405180910390fd5b61124d85338661170b565b8260086000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112be9190612a51565b925050819055506011600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401611333929190612af1565b6020604051808303816000875af1158015611352573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137691906129b8565b5082600f6000878152602001908152602001600020600082825461139a9190612a51565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75846040516113e791906123da565b60405180910390a25050505050565b600a60205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600c6020528060005260406000206000915090505481565b600d6020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e6020528060005260406000206000915090505481565b60008060005b600581101561152f57611511858583611b0a565b8261151c919061273c565b915080611528906126f4565b90506114fd565b508091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890612b8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790612c1e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116fe91906123da565b60405180910390a3505050565b6000611718848484611b0a565b905061172342611fde565b600a6000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600b6000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000811115611802576118018382612003565b5b50505050565b60006118148484611458565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461188e5781811015611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790612c8a565b60405180910390fd5b61188d8484848403611542565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90612d1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990612dae565b60405180910390fd5b61197d838383612159565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90612e40565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611af191906123da565b60405180910390a3611b0484848461215e565b50505050565b600080600b6000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480611bdc5750600060086000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15611bea5760009050611fd7565b6000600a6000868152602001908152602001600020600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611c5b42611fde565b9050600080600e600089815260200190815260200160002054600c600088815260200190815260200160002054600860008b8152602001908152602001600020600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cf49190612e60565b611cfe9190612e60565b9050828414611df657600062093a80601054600b60008c815260200190815260200160002060008a815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d7c9190612a51565b611d869190612ed1565b62093a80611d949190612a51565b9050620186a0606460125462093a808589601254901c86611db59190612e60565b611dbf9190612e60565b611dc99190612f02565b611dd39190612f02565b611ddd9190612f02565b611de79190612f02565b83611df2919061273c565b9250505b6000600185611e05919061273c565b90505b83811015611e705760808111611e7057620186a0606460125483601254901c85611e329190612e60565b611e3c9190612f02565b611e469190612f02565b611e509190612f02565b83611e5b919061273c565b92508080611e68906126f4565b915050611e08565b506000600a60008a8152602001908152602001600020600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548414611ee357601054611f46565b600b60008a8152602001908152602001600020600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b9050600062093a808242611f5a9190612a51565b611f649190612ed1565b90506000620186a0606460125488601254901c87611f829190612e60565b611f8c9190612f02565b611f969190612f02565b611fa09190612f02565b9050600062093a808383611fb49190612e60565b611fbe9190612f02565b90508086611fcc919061273c565b985050505050505050505b9392505050565b600062093a8060105483611ff29190612a51565b611ffc9190612f02565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990612f7f565b60405180910390fd5b61207e60008383612159565b8060026000828254612090919061273c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161214191906123da565b60405180910390a36121556000838361215e565b5050565b505050565b505050565b600080fd5b6000819050919050565b61217b81612168565b811461218657600080fd5b50565b60008135905061219881612172565b92915050565b6000602082840312156121b4576121b3612163565b5b60006121c284828501612189565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061221061220b612206846121cb565b6121eb565b6121cb565b9050919050565b6000612222826121f5565b9050919050565b600061223482612217565b9050919050565b61224481612229565b82525050565b600060208201905061225f600083018461223b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561229f578082015181840152602081019050612284565b60008484015250505050565b6000601f19601f8301169050919050565b60006122c782612265565b6122d18185612270565b93506122e1818560208601612281565b6122ea816122ab565b840191505092915050565b6000602082019050818103600083015261230f81846122bc565b905092915050565b6000612322826121cb565b9050919050565b61233281612317565b811461233d57600080fd5b50565b60008135905061234f81612329565b92915050565b6000806040838503121561236c5761236b612163565b5b600061237a85828601612340565b925050602061238b85828601612189565b9150509250929050565b60008115159050919050565b6123aa81612395565b82525050565b60006020820190506123c560008301846123a1565b92915050565b6123d481612168565b82525050565b60006020820190506123ef60008301846123cb565b92915050565b60008060006060848603121561240e5761240d612163565b5b600061241c86828701612189565b935050602061242d86828701612189565b925050604061243e86828701612340565b9150509250925092565b60008060006060848603121561246157612460612163565b5b600061246f86828701612340565b935050602061248086828701612340565b925050604061249186828701612189565b9150509250925092565b600080604083850312156124b2576124b1612163565b5b60006124c085828601612189565b92505060206124d185828601612340565b9150509250929050565b600060ff82169050919050565b6124f1816124db565b82525050565b600060208201905061250c60008301846124e8565b92915050565b60008060006060848603121561252b5761252a612163565b5b600061253986828701612189565b935050602061254a86828701612340565b925050604061255b86828701612189565b9150509250925092565b6000806040838503121561257c5761257b612163565b5b600061258a85828601612189565b925050602061259b85828601612189565b9150509250929050565b6000602082840312156125bb576125ba612163565b5b60006125c984828501612340565b91505092915050565b6000806000606084860312156125eb576125ea612163565b5b60006125f986828701612189565b935050602061260a86828701612189565b925050604061261b86828701612189565b9150509250925092565b6000806040838503121561263c5761263b612163565b5b600061264a85828601612340565b925050602061265b85828601612340565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126ac57607f821691505b6020821081036126bf576126be612665565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126ff82612168565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612731576127306126c5565b5b600182019050919050565b600061274782612168565b915061275283612168565b925082820190508082111561276a576127696126c5565b5b92915050565b7f496e76616c6964206c6f636b20706572696f6400000000000000000000000000600082015250565b60006127a6601383612270565b91506127b182612770565b602082019050919050565b600060208201905081810360008301526127d581612799565b9050919050565b7f496e76616c696420746f6b656e00000000000000000000000000000000000000600082015250565b6000612812600d83612270565b915061281d826127dc565b602082019050919050565b6000602082019050818103600083015261284181612805565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128a4602583612270565b91506128af82612848565b604082019050919050565b600060208201905081810360008301526128d381612897565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000612910601d83612270565b915061291b826128da565b602082019050919050565b6000602082019050818103600083015261293f81612903565b9050919050565b61294f81612317565b82525050565b600060608201905061296a6000830186612946565b6129776020830185612946565b61298460408301846123cb565b949350505050565b61299581612395565b81146129a057600080fd5b50565b6000815190506129b28161298c565b92915050565b6000602082840312156129ce576129cd612163565b5b60006129dc848285016129a3565b91505092915050565b7f496e73756666696369656e74207374616b65642062616c616e63650000000000600082015250565b6000612a1b601b83612270565b9150612a26826129e5565b602082019050919050565b60006020820190508181036000830152612a4a81612a0e565b9050919050565b6000612a5c82612168565b9150612a6783612168565b9250828203905081811115612a7f57612a7e6126c5565b5b92915050565b7f4a7573742061206c6974746c6520626974206c6f6e6765722c20434841442e00600082015250565b6000612abb601f83612270565b9150612ac682612a85565b602082019050919050565b60006020820190508181036000830152612aea81612aae565b9050919050565b6000604082019050612b066000830185612946565b612b1360208301846123cb565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612b76602483612270565b9150612b8182612b1a565b604082019050919050565b60006020820190508181036000830152612ba581612b69565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c08602283612270565b9150612c1382612bac565b604082019050919050565b60006020820190508181036000830152612c3781612bfb565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612c74601d83612270565b9150612c7f82612c3e565b602082019050919050565b60006020820190508181036000830152612ca381612c67565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d06602583612270565b9150612d1182612caa565b604082019050919050565b60006020820190508181036000830152612d3581612cf9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612d98602383612270565b9150612da382612d3c565b604082019050919050565b60006020820190508181036000830152612dc781612d8b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612e2a602683612270565b9150612e3582612dce565b604082019050919050565b60006020820190508181036000830152612e5981612e1d565b9050919050565b6000612e6b82612168565b9150612e7683612168565b9250828202612e8481612168565b91508282048414831517612e9b57612e9a6126c5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612edc82612168565b9150612ee783612168565b925082612ef757612ef6612ea2565b5b828206905092915050565b6000612f0d82612168565b9150612f1883612168565b925082612f2857612f27612ea2565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612f69601f83612270565b9150612f7482612f33565b602082019050919050565b60006020820190508181036000830152612f9881612f5c565b905091905056fea2646970667358221220383cff92e83923a6bbdc0c96ad528a0c20bcbab6610a8f45901da244a8217c1864736f6c63430008120033

Deployed Bytecode Sourcemap

17905:7595:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18649:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6651:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9002:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22098:252;;;:::i;:::-;;7771:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18124:80;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17968:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17999:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9783:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24534:273;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7613:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17938:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10487:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18563:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24358:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21944:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7942:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18616:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25246:123;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6870:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18301:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18752:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18702:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11228:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20748:513;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8275:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18031:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25377:120;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21269:667;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18211:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18397:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18458:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8531:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18509:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24815:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18649:44;;;;;;;;;;;;;;;;;;;;;;:::o;6651:100::-;6705:13;6738:5;6731:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6651:100;:::o;9002:201::-;9085:4;9102:13;9118:12;:10;:12::i;:::-;9102:28;;9141:32;9150:5;9157:7;9166:6;9141:8;:32::i;:::-;9191:4;9184:11;;;9002:201;;;;:::o;22098:252::-;22148:13;22143:200;22175:1;22167:5;:9;22143:200;;;22207:16;22202:130;22240:1;22229:8;:12;22202:130;;;22274:42;22288:5;22295:10;22307:8;22274:13;:42::i;:::-;22243:10;;;;:::i;:::-;;;22202:130;;;;22178:7;;;;:::i;:::-;;;22143:200;;;;22098:252::o;7771:108::-;7832:7;7859:12;;7852:19;;7771:108;:::o;18124:80::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17968:24::-;;;;;;;;;;;;;:::o;17999:23::-;;;;;;;;;;;;;:::o;9783:295::-;9914:4;9931:15;9949:12;:10;:12::i;:::-;9931:30;;9972:38;9988:4;9994:7;10003:6;9972:15;:38::i;:::-;10021:27;10031:4;10037:2;10041:6;10021:9;:27::i;:::-;10066:4;10059:11;;;9783:295;;;;;:::o;24534:273::-;24613:7;24633:10;24659:13;24654:123;24689:1;24678:8;:12;24654:123;;;24728:14;:21;24743:5;24728:21;;;;;;;;;;;:31;24750:8;24728:31;;;;;;;;;;;:37;24760:4;24728:37;;;;;;;;;;;;;;;;24719:46;;;;;:::i;:::-;;;24692:10;;;;:::i;:::-;;;24654:123;;;;24794:5;24787:12;;;24534:273;;;;:::o;7613:93::-;7671:5;7696:2;7689:9;;7613:93;:::o;17938:23::-;;;;;;;;;;;;;:::o;10487:238::-;10575:4;10592:13;10608:12;:10;:12::i;:::-;10592:28;;10631:64;10640:5;10647:7;10684:10;10656:25;10666:5;10673:7;10656:9;:25::i;:::-;:38;;;;:::i;:::-;10631:8;:64::i;:::-;10713:4;10706:11;;;10487:238;;;;:::o;18563:46::-;;;;;;;;;;;;;;;;;:::o;24358:168::-;24451:7;24478:40;24496:5;24503:4;24509:8;24478:17;:40::i;:::-;24471:47;;24358:168;;;;;:::o;21944:146::-;22012:5;22019:8;20649:1;20638:8;:12;20630:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20701:1;20693:5;:9;20685:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;22040:42:::1;22054:5;22061:10;22073:8;22040:13;:42::i;:::-;21944:146:::0;;;;:::o;7942:127::-;8016:7;8043:9;:18;8053:7;8043:18;;;;;;;;;;;;;;;;8036:25;;7942:127;;;:::o;18616:24::-;;;;:::o;25246:123::-;25296:7;25343:17;:15;:17::i;:::-;25324:15;;:36;;25316:45;;25246:123;:::o;6870:104::-;6926:13;6959:7;6952:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6870:104;:::o;18301:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18752:39::-;18784:7;18752:39;:::o;18702:41::-;;;;:::o;11228:436::-;11321:4;11338:13;11354:12;:10;:12::i;:::-;11338:28;;11377:24;11404:25;11414:5;11421:7;11404:9;:25::i;:::-;11377:52;;11468:15;11448:16;:35;;11440:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11561:60;11570:5;11577:7;11605:15;11586:16;:34;11561:8;:60::i;:::-;11652:4;11645:11;;;;11228:436;;;;:::o;20748:513::-;20825:5;20832:8;20649:1;20638:8;:12;20630:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20701:1;20693:5;:9;20685:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;20870:1:::1;20861:6;:10;20853:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20918:42;20932:5;20939:10;20951:8;20918:13;:42::i;:::-;20973:10;:17;20984:5;20973:17;;;;;;;;;;;;;;;;;;;;;:30;;;21004:10;21024:4;21031:6;20973:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21098:6;21051:14;:21;21066:5;21051:21;;;;;;;;;;;:31;21073:8;21051:31;;;;;;;;;;;:43;21083:10;21051:43;;;;;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;;;;;21155:15;21115:8;:15;21124:5;21115:15;;;;;;;;;;;:25;21131:8;21115:25;;;;;;;;;;;:37;21141:10;21115:37;;;;;;;;;;;;;;;:55;;;;21203:6;21181:11;:18;21193:5;21181:18;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;21234:10;21227:26;;;21246:6;21227:26;;;;;;:::i;:::-;;;;;;;;20748:513:::0;;;;;:::o;8275:193::-;8354:4;8371:13;8387:12;:10;:12::i;:::-;8371:28;;8410;8420:5;8427:2;8431:6;8410:9;:28::i;:::-;8456:4;8449:11;;;8275:193;;;;:::o;18031:86::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25377:120::-;25425:7;25452:37;25473:15;25452:20;:37::i;:::-;25445:44;;25377:120;:::o;21269:667::-;21348:5;21355:8;20649:1;20638:8;:12;20630:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20701:1;20693:5;:9;20685:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;21431:6:::1;21384:14;:21;21399:5;21384:21;;;;;;;;;;;:31;21406:8;21384:31;;;;;;;;;;;:43;21416:10;21384:43;;;;;;;;;;;;;;;;:53;;21376:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;21547:9;:19;21557:8;21547:19;;;;;;;;;;;;21506:8;:15;21515:5;21506:15;;;;;;;;;;;:25;21522:8;21506:25;;;;;;;;;;;:37;21532:10;21506:37;;;;;;;;;;;;;;;;21488:15;:55;;;;:::i;:::-;:78;;21480:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;21630:1;21621:6;:10;21613:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;21678:42;21692:5;21699:10;21711:8;21678:13;:42::i;:::-;21780:6;21733:14;:21;21748:5;21733:21;;;;;;;;;;;:31;21755:8;21733:31;;;;;;;;;;;:43;21765:10;21733:43;;;;;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;;;;;21797:10;:17;21808:5;21797:17;;;;;;;;;;;;;;;;;;;;;:26;;;21824:10;21836:6;21797:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21876:6;21854:11;:18;21866:5;21854:18;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;21909:10;21900:28;;;21921:6;21900:28;;;;;;:::i;:::-;;;;;;;;21269:667:::0;;;;;:::o;18211:83::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18397:54::-;;;;;;;;;;;;;;;;;:::o;18458:44::-;;;;;;;;;;;;;;;;;:::o;8531:151::-;8620:7;8647:11;:18;8659:5;8647:18;;;;;;;;;;;;;;;:27;8666:7;8647:27;;;;;;;;;;;;;;;;8640:34;;8531:151;;;;:::o;18509:47::-;;;;;;;;;;;;;;;;;:::o;24815:275::-;24893:7;24913:10;24939:13;24934:126;24969:1;24958:8;:12;24934:126;;;25008:40;25026:5;25033:4;25039:8;25008:17;:40::i;:::-;24999:49;;;;;:::i;:::-;;;24972:10;;;;:::i;:::-;;;24934:126;;;;25077:5;25070:12;;;24815:275;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;15255:380::-;15408:1;15391:19;;:5;:19;;;15383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15489:1;15470:21;;:7;:21;;;15462:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15573:6;15543:11;:18;15555:5;15543:18;;;;;;;;;;;;;;;:27;15562:7;15543:27;;;;;;;;;;;;;;;:36;;;;15611:7;15595:32;;15604:5;15595:32;;;15620:6;15595:32;;;;;;:::i;:::-;;;;;;;;15255:380;;;:::o;22358:364::-;22448:17;22468:40;22486:5;22493:4;22499:8;22468:17;:40::i;:::-;22448:60;;22558:37;22579:15;22558:20;:37::i;:::-;22521:11;:18;22533:5;22521:18;;;;;;;;;;;:28;22540:8;22521:28;;;;;;;;;;;:34;22550:4;22521:34;;;;;;;;;;;;;;;:74;;;;22647:15;22606;:22;22622:5;22606:22;;;;;;;;;;;:32;22629:8;22606:32;;;;;;;;;;;:38;22639:4;22606:38;;;;;;;;;;;;;;;:56;;;;22689:1;22677:9;:13;22673:41;;;22692:22;22698:4;22704:9;22692:5;:22::i;:::-;22673:41;22437:285;22358:364;;;:::o;15926:453::-;16061:24;16088:25;16098:5;16105:7;16088:9;:25::i;:::-;16061:52;;16148:17;16128:16;:37;16124:248;;16210:6;16190:16;:26;;16182:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16294:51;16303:5;16310:7;16338:6;16319:16;:25;16294:8;:51::i;:::-;16124:248;16050:329;15926:453;;;:::o;12134:840::-;12281:1;12265:18;;:4;:18;;;12257:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12358:1;12344:16;;:2;:16;;;12336:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12413:38;12434:4;12440:2;12444:6;12413:20;:38::i;:::-;12464:19;12486:9;:15;12496:4;12486:15;;;;;;;;;;;;;;;;12464:37;;12535:6;12520:11;:21;;12512:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12652:6;12638:11;:20;12620:9;:15;12630:4;12620:15;;;;;;;;;;;;;;;:38;;;;12855:6;12838:9;:13;12848:2;12838:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12905:2;12890:26;;12899:4;12890:26;;;12909:6;12890:26;;;;;;:::i;:::-;;;;;;;;12929:37;12949:4;12955:2;12959:6;12929:19;:37::i;:::-;12246:728;12134:840;;;:::o;22730:1620::-;22827:7;22893:1;22851:15;:22;22867:5;22851:22;;;;;;;;;;;:32;22874:8;22851:32;;;;;;;;;;;:38;22884:4;22851:38;;;;;;;;;;;;;;;;:43;:89;;;;22939:1;22898:14;:21;22913:5;22898:21;;;;;;;;;;;:31;22920:8;22898:31;;;;;;;;;;;:37;22930:4;22898:37;;;;;;;;;;;;;;;;:42;22851:89;22847:130;;;22964:1;22957:8;;;;22847:130;22989:18;23010:11;:18;23022:5;23010:18;;;;;;;;;;;:28;23029:8;23010:28;;;;;;;;;;;:34;23039:4;23010:34;;;;;;;;;;;;;;;;22989:55;;23055:16;23074:37;23095:15;23074:20;:37::i;:::-;23055:56;;23124:17;23152:21;23248:12;:19;23261:5;23248:19;;;;;;;;;;;;23216;:29;23236:8;23216:29;;;;;;;;;;;;23176:14;:21;23191:5;23176:21;;;;;;;;;;;:31;23198:8;23176:31;;;;;;;;;;;:37;23208:4;23176:37;;;;;;;;;;;;;;;;:69;;;;:::i;:::-;:91;;;;:::i;:::-;23152:115;;23329:8;23315:10;:22;23311:295;;23354:28;18784:7;23436:9;;23395:15;:22;23411:5;23395:22;;;;;;;;;;;:32;23418:8;23395:32;;;;;;;;;;;:38;23428:4;23395:38;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;23394:60;;;;:::i;:::-;18784:7;23385:70;;;;:::i;:::-;23354:101;;23588:6;23582:3;23564:15;;18784:7;23540:13;23526:10;23507:15;;:29;;23483:20;:54;;;;:::i;:::-;:70;;;;:::i;:::-;:78;;;;:::i;:::-;:96;;;;:::i;:::-;:102;;;;:::i;:::-;:111;;;;:::i;:::-;23470:124;;;;;:::i;:::-;;;23339:267;23311:295;23623:9;23648:1;23635:10;:14;;;;:::i;:::-;23623:26;;23618:196;23655:8;23651:1;:12;23618:196;;;23693:3;23689:1;:7;23698:5;23685:18;23796:6;23790:3;23772:15;;23767:1;23748:15;;:20;;23731:13;:38;;;;:::i;:::-;:56;;;;:::i;:::-;:62;;;;:::i;:::-;:71;;;;:::i;:::-;23718:84;;;;;:::i;:::-;;;23665:3;;;;;:::i;:::-;;;;23618:196;;;;23859:16;23891:11;:18;23903:5;23891:18;;;;;;;;;;;:28;23910:8;23891:28;;;;;;;;;;;:34;23920:4;23891:34;;;;;;;;;;;;;;;;23879:8;:46;23878:101;;23970:9;;23878:101;;;23929:15;:22;23945:5;23929:22;;;;;;;;;;;:32;23952:8;23929:32;;;;;;;;;;;:38;23962:4;23929:38;;;;;;;;;;;;;;;;23878:101;23859:120;;23990:30;18784:7;24042:8;24024:15;:26;;;;:::i;:::-;24023:36;;;;:::i;:::-;23990:69;;24070:33;24178:6;24172:3;24154:15;;24142:8;24123:15;;:27;;24106:13;:45;;;;:::i;:::-;:63;;;;:::i;:::-;:69;;;;:::i;:::-;:78;;;;:::i;:::-;24070:114;;24195:31;18784:7;24257:22;24229:25;:50;;;;:::i;:::-;:58;;;;:::i;:::-;24195:92;;24319:23;24307:9;:35;;;;:::i;:::-;24300:42;;;;;;;;;;22730:1620;;;;;;:::o;25098:140::-;25170:7;18784;25210:9;;25198;:21;;;;:::i;:::-;25197:33;;;;:::i;:::-;25190:40;;25098:140;;;:::o;13261:548::-;13364:1;13345:21;;:7;:21;;;13337:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13415:49;13444:1;13448:7;13457:6;13415:20;:49::i;:::-;13493:6;13477:12;;:22;;;;;;;:::i;:::-;;;;;;;;13670:6;13648:9;:18;13658:7;13648:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;13724:7;13703:37;;13720:1;13703:37;;;13733:6;13703:37;;;;;;:::i;:::-;;;;;;;;13753:48;13781:1;13785:7;13794:6;13753:19;:48::i;:::-;13261:548;;:::o;16979:125::-;;;;:::o;17708:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:126::-;1062:7;1102:42;1095:5;1091:54;1080:65;;1025:126;;;:::o;1157:60::-;1185:3;1206:5;1199:12;;1157:60;;;:::o;1223:142::-;1273:9;1306:53;1324:34;1333:24;1351:5;1333:24;:::i;:::-;1324:34;:::i;:::-;1306:53;:::i;:::-;1293:66;;1223:142;;;:::o;1371:126::-;1421:9;1454:37;1485:5;1454:37;:::i;:::-;1441:50;;1371:126;;;:::o;1503:139::-;1566:9;1599:37;1630:5;1599:37;:::i;:::-;1586:50;;1503:139;;;:::o;1648:157::-;1748:50;1792:5;1748:50;:::i;:::-;1743:3;1736:63;1648:157;;:::o;1811:248::-;1917:4;1955:2;1944:9;1940:18;1932:26;;1968:84;2049:1;2038:9;2034:17;2025:6;1968:84;:::i;:::-;1811:248;;;;:::o;2065:99::-;2117:6;2151:5;2145:12;2135:22;;2065:99;;;:::o;2170:169::-;2254:11;2288:6;2283:3;2276:19;2328:4;2323:3;2319:14;2304:29;;2170:169;;;;:::o;2345:246::-;2426:1;2436:113;2450:6;2447:1;2444:13;2436:113;;;2535:1;2530:3;2526:11;2520:18;2516:1;2511:3;2507:11;2500:39;2472:2;2469:1;2465:10;2460:15;;2436:113;;;2583:1;2574:6;2569:3;2565:16;2558:27;2407:184;2345:246;;;:::o;2597:102::-;2638:6;2689:2;2685:7;2680:2;2673:5;2669:14;2665:28;2655:38;;2597:102;;;:::o;2705:377::-;2793:3;2821:39;2854:5;2821:39;:::i;:::-;2876:71;2940:6;2935:3;2876:71;:::i;:::-;2869:78;;2956:65;3014:6;3009:3;3002:4;2995:5;2991:16;2956:65;:::i;:::-;3046:29;3068:6;3046:29;:::i;:::-;3041:3;3037:39;3030:46;;2797:285;2705:377;;;;:::o;3088:313::-;3201:4;3239:2;3228:9;3224:18;3216:26;;3288:9;3282:4;3278:20;3274:1;3263:9;3259:17;3252:47;3316:78;3389:4;3380:6;3316:78;:::i;:::-;3308:86;;3088:313;;;;:::o;3407:96::-;3444:7;3473:24;3491:5;3473:24;:::i;:::-;3462:35;;3407:96;;;:::o;3509:122::-;3582:24;3600:5;3582:24;:::i;:::-;3575:5;3572:35;3562:63;;3621:1;3618;3611:12;3562:63;3509:122;:::o;3637:139::-;3683:5;3721:6;3708:20;3699:29;;3737:33;3764:5;3737:33;:::i;:::-;3637:139;;;;:::o;3782:474::-;3850:6;3858;3907:2;3895:9;3886:7;3882:23;3878:32;3875:119;;;3913:79;;:::i;:::-;3875:119;4033:1;4058:53;4103:7;4094:6;4083:9;4079:22;4058:53;:::i;:::-;4048:63;;4004:117;4160:2;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4131:118;3782:474;;;;;:::o;4262:90::-;4296:7;4339:5;4332:13;4325:21;4314:32;;4262:90;;;:::o;4358:109::-;4439:21;4454:5;4439:21;:::i;:::-;4434:3;4427:34;4358:109;;:::o;4473:210::-;4560:4;4598:2;4587:9;4583:18;4575:26;;4611:65;4673:1;4662:9;4658:17;4649:6;4611:65;:::i;:::-;4473:210;;;;:::o;4689:118::-;4776:24;4794:5;4776:24;:::i;:::-;4771:3;4764:37;4689:118;;:::o;4813:222::-;4906:4;4944:2;4933:9;4929:18;4921:26;;4957:71;5025:1;5014:9;5010:17;5001:6;4957:71;:::i;:::-;4813:222;;;;:::o;5041:619::-;5118:6;5126;5134;5183:2;5171:9;5162:7;5158:23;5154:32;5151:119;;;5189:79;;:::i;:::-;5151:119;5309:1;5334:53;5379:7;5370:6;5359:9;5355:22;5334:53;:::i;:::-;5324:63;;5280:117;5436:2;5462:53;5507:7;5498:6;5487:9;5483:22;5462:53;:::i;:::-;5452:63;;5407:118;5564:2;5590:53;5635:7;5626:6;5615:9;5611:22;5590:53;:::i;:::-;5580:63;;5535:118;5041:619;;;;;:::o;5666:::-;5743:6;5751;5759;5808:2;5796:9;5787:7;5783:23;5779:32;5776:119;;;5814:79;;:::i;:::-;5776:119;5934:1;5959:53;6004:7;5995:6;5984:9;5980:22;5959:53;:::i;:::-;5949:63;;5905:117;6061:2;6087:53;6132:7;6123:6;6112:9;6108:22;6087:53;:::i;:::-;6077:63;;6032:118;6189:2;6215:53;6260:7;6251:6;6240:9;6236:22;6215:53;:::i;:::-;6205:63;;6160:118;5666:619;;;;;:::o;6291:474::-;6359:6;6367;6416:2;6404:9;6395:7;6391:23;6387:32;6384:119;;;6422:79;;:::i;:::-;6384:119;6542:1;6567:53;6612:7;6603:6;6592:9;6588:22;6567:53;:::i;:::-;6557:63;;6513:117;6669:2;6695:53;6740:7;6731:6;6720:9;6716:22;6695:53;:::i;:::-;6685:63;;6640:118;6291:474;;;;;:::o;6771:86::-;6806:7;6846:4;6839:5;6835:16;6824:27;;6771:86;;;:::o;6863:112::-;6946:22;6962:5;6946:22;:::i;:::-;6941:3;6934:35;6863:112;;:::o;6981:214::-;7070:4;7108:2;7097:9;7093:18;7085:26;;7121:67;7185:1;7174:9;7170:17;7161:6;7121:67;:::i;:::-;6981:214;;;;:::o;7201:619::-;7278:6;7286;7294;7343:2;7331:9;7322:7;7318:23;7314:32;7311:119;;;7349:79;;:::i;:::-;7311:119;7469:1;7494:53;7539:7;7530:6;7519:9;7515:22;7494:53;:::i;:::-;7484:63;;7440:117;7596:2;7622:53;7667:7;7658:6;7647:9;7643:22;7622:53;:::i;:::-;7612:63;;7567:118;7724:2;7750:53;7795:7;7786:6;7775:9;7771:22;7750:53;:::i;:::-;7740:63;;7695:118;7201:619;;;;;:::o;7826:474::-;7894:6;7902;7951:2;7939:9;7930:7;7926:23;7922:32;7919:119;;;7957:79;;:::i;:::-;7919:119;8077:1;8102:53;8147:7;8138:6;8127:9;8123:22;8102:53;:::i;:::-;8092:63;;8048:117;8204:2;8230:53;8275:7;8266:6;8255:9;8251:22;8230:53;:::i;:::-;8220:63;;8175:118;7826:474;;;;;:::o;8306:329::-;8365:6;8414:2;8402:9;8393:7;8389:23;8385:32;8382:119;;;8420:79;;:::i;:::-;8382:119;8540:1;8565:53;8610:7;8601:6;8590:9;8586:22;8565:53;:::i;:::-;8555:63;;8511:117;8306:329;;;;:::o;8641:619::-;8718:6;8726;8734;8783:2;8771:9;8762:7;8758:23;8754:32;8751:119;;;8789:79;;:::i;:::-;8751:119;8909:1;8934:53;8979:7;8970:6;8959:9;8955:22;8934:53;:::i;:::-;8924:63;;8880:117;9036:2;9062:53;9107:7;9098:6;9087:9;9083:22;9062:53;:::i;:::-;9052:63;;9007:118;9164:2;9190:53;9235:7;9226:6;9215:9;9211:22;9190:53;:::i;:::-;9180:63;;9135:118;8641:619;;;;;:::o;9266:474::-;9334:6;9342;9391:2;9379:9;9370:7;9366:23;9362:32;9359:119;;;9397:79;;:::i;:::-;9359:119;9517:1;9542:53;9587:7;9578:6;9567:9;9563:22;9542:53;:::i;:::-;9532:63;;9488:117;9644:2;9670:53;9715:7;9706:6;9695:9;9691:22;9670:53;:::i;:::-;9660:63;;9615:118;9266:474;;;;;:::o;9746:180::-;9794:77;9791:1;9784:88;9891:4;9888:1;9881:15;9915:4;9912:1;9905:15;9932:320;9976:6;10013:1;10007:4;10003:12;9993:22;;10060:1;10054:4;10050:12;10081:18;10071:81;;10137:4;10129:6;10125:17;10115:27;;10071:81;10199:2;10191:6;10188:14;10168:18;10165:38;10162:84;;10218:18;;:::i;:::-;10162:84;9983:269;9932:320;;;:::o;10258:180::-;10306:77;10303:1;10296:88;10403:4;10400:1;10393:15;10427:4;10424:1;10417:15;10444:233;10483:3;10506:24;10524:5;10506:24;:::i;:::-;10497:33;;10552:66;10545:5;10542:77;10539:103;;10622:18;;:::i;:::-;10539:103;10669:1;10662:5;10658:13;10651:20;;10444:233;;;:::o;10683:191::-;10723:3;10742:20;10760:1;10742:20;:::i;:::-;10737:25;;10776:20;10794:1;10776:20;:::i;:::-;10771:25;;10819:1;10816;10812:9;10805:16;;10840:3;10837:1;10834:10;10831:36;;;10847:18;;:::i;:::-;10831:36;10683:191;;;;:::o;10880:169::-;11020:21;11016:1;11008:6;11004:14;10997:45;10880:169;:::o;11055:366::-;11197:3;11218:67;11282:2;11277:3;11218:67;:::i;:::-;11211:74;;11294:93;11383:3;11294:93;:::i;:::-;11412:2;11407:3;11403:12;11396:19;;11055:366;;;:::o;11427:419::-;11593:4;11631:2;11620:9;11616:18;11608:26;;11680:9;11674:4;11670:20;11666:1;11655:9;11651:17;11644:47;11708:131;11834:4;11708:131;:::i;:::-;11700:139;;11427:419;;;:::o;11852:163::-;11992:15;11988:1;11980:6;11976:14;11969:39;11852:163;:::o;12021:366::-;12163:3;12184:67;12248:2;12243:3;12184:67;:::i;:::-;12177:74;;12260:93;12349:3;12260:93;:::i;:::-;12378:2;12373:3;12369:12;12362:19;;12021:366;;;:::o;12393:419::-;12559:4;12597:2;12586:9;12582:18;12574:26;;12646:9;12640:4;12636:20;12632:1;12621:9;12617:17;12610:47;12674:131;12800:4;12674:131;:::i;:::-;12666:139;;12393:419;;;:::o;12818:224::-;12958:34;12954:1;12946:6;12942:14;12935:58;13027:7;13022:2;13014:6;13010:15;13003:32;12818:224;:::o;13048:366::-;13190:3;13211:67;13275:2;13270:3;13211:67;:::i;:::-;13204:74;;13287:93;13376:3;13287:93;:::i;:::-;13405:2;13400:3;13396:12;13389:19;;13048:366;;;:::o;13420:419::-;13586:4;13624:2;13613:9;13609:18;13601:26;;13673:9;13667:4;13663:20;13659:1;13648:9;13644:17;13637:47;13701:131;13827:4;13701:131;:::i;:::-;13693:139;;13420:419;;;:::o;13845:179::-;13985:31;13981:1;13973:6;13969:14;13962:55;13845:179;:::o;14030:366::-;14172:3;14193:67;14257:2;14252:3;14193:67;:::i;:::-;14186:74;;14269:93;14358:3;14269:93;:::i;:::-;14387:2;14382:3;14378:12;14371:19;;14030:366;;;:::o;14402:419::-;14568:4;14606:2;14595:9;14591:18;14583:26;;14655:9;14649:4;14645:20;14641:1;14630:9;14626:17;14619:47;14683:131;14809:4;14683:131;:::i;:::-;14675:139;;14402:419;;;:::o;14827:118::-;14914:24;14932:5;14914:24;:::i;:::-;14909:3;14902:37;14827:118;;:::o;14951:442::-;15100:4;15138:2;15127:9;15123:18;15115:26;;15151:71;15219:1;15208:9;15204:17;15195:6;15151:71;:::i;:::-;15232:72;15300:2;15289:9;15285:18;15276:6;15232:72;:::i;:::-;15314;15382:2;15371:9;15367:18;15358:6;15314:72;:::i;:::-;14951:442;;;;;;:::o;15399:116::-;15469:21;15484:5;15469:21;:::i;:::-;15462:5;15459:32;15449:60;;15505:1;15502;15495:12;15449:60;15399:116;:::o;15521:137::-;15575:5;15606:6;15600:13;15591:22;;15622:30;15646:5;15622:30;:::i;:::-;15521:137;;;;:::o;15664:345::-;15731:6;15780:2;15768:9;15759:7;15755:23;15751:32;15748:119;;;15786:79;;:::i;:::-;15748:119;15906:1;15931:61;15984:7;15975:6;15964:9;15960:22;15931:61;:::i;:::-;15921:71;;15877:125;15664:345;;;;:::o;16015:177::-;16155:29;16151:1;16143:6;16139:14;16132:53;16015:177;:::o;16198:366::-;16340:3;16361:67;16425:2;16420:3;16361:67;:::i;:::-;16354:74;;16437:93;16526:3;16437:93;:::i;:::-;16555:2;16550:3;16546:12;16539:19;;16198:366;;;:::o;16570:419::-;16736:4;16774:2;16763:9;16759:18;16751:26;;16823:9;16817:4;16813:20;16809:1;16798:9;16794:17;16787:47;16851:131;16977:4;16851:131;:::i;:::-;16843:139;;16570:419;;;:::o;16995:194::-;17035:4;17055:20;17073:1;17055:20;:::i;:::-;17050:25;;17089:20;17107:1;17089:20;:::i;:::-;17084:25;;17133:1;17130;17126:9;17118:17;;17157:1;17151:4;17148:11;17145:37;;;17162:18;;:::i;:::-;17145:37;16995:194;;;;:::o;17195:181::-;17335:33;17331:1;17323:6;17319:14;17312:57;17195:181;:::o;17382:366::-;17524:3;17545:67;17609:2;17604:3;17545:67;:::i;:::-;17538:74;;17621:93;17710:3;17621:93;:::i;:::-;17739:2;17734:3;17730:12;17723:19;;17382:366;;;:::o;17754:419::-;17920:4;17958:2;17947:9;17943:18;17935:26;;18007:9;18001:4;17997:20;17993:1;17982:9;17978:17;17971:47;18035:131;18161:4;18035:131;:::i;:::-;18027:139;;17754:419;;;:::o;18179:332::-;18300:4;18338:2;18327:9;18323:18;18315:26;;18351:71;18419:1;18408:9;18404:17;18395:6;18351:71;:::i;:::-;18432:72;18500:2;18489:9;18485:18;18476:6;18432:72;:::i;:::-;18179:332;;;;;:::o;18517:223::-;18657:34;18653:1;18645:6;18641:14;18634:58;18726:6;18721:2;18713:6;18709:15;18702:31;18517:223;:::o;18746:366::-;18888:3;18909:67;18973:2;18968:3;18909:67;:::i;:::-;18902:74;;18985:93;19074:3;18985:93;:::i;:::-;19103:2;19098:3;19094:12;19087:19;;18746:366;;;:::o;19118:419::-;19284:4;19322:2;19311:9;19307:18;19299:26;;19371:9;19365:4;19361:20;19357:1;19346:9;19342:17;19335:47;19399:131;19525:4;19399:131;:::i;:::-;19391:139;;19118:419;;;:::o;19543:221::-;19683:34;19679:1;19671:6;19667:14;19660:58;19752:4;19747:2;19739:6;19735:15;19728:29;19543:221;:::o;19770:366::-;19912:3;19933:67;19997:2;19992:3;19933:67;:::i;:::-;19926:74;;20009:93;20098:3;20009:93;:::i;:::-;20127:2;20122:3;20118:12;20111:19;;19770:366;;;:::o;20142:419::-;20308:4;20346:2;20335:9;20331:18;20323:26;;20395:9;20389:4;20385:20;20381:1;20370:9;20366:17;20359:47;20423:131;20549:4;20423:131;:::i;:::-;20415:139;;20142:419;;;:::o;20567:179::-;20707:31;20703:1;20695:6;20691:14;20684:55;20567:179;:::o;20752:366::-;20894:3;20915:67;20979:2;20974:3;20915:67;:::i;:::-;20908:74;;20991:93;21080:3;20991:93;:::i;:::-;21109:2;21104:3;21100:12;21093:19;;20752:366;;;:::o;21124:419::-;21290:4;21328:2;21317:9;21313:18;21305:26;;21377:9;21371:4;21367:20;21363:1;21352:9;21348:17;21341:47;21405:131;21531:4;21405:131;:::i;:::-;21397:139;;21124:419;;;:::o;21549:224::-;21689:34;21685:1;21677:6;21673:14;21666:58;21758:7;21753:2;21745:6;21741:15;21734:32;21549:224;:::o;21779:366::-;21921:3;21942:67;22006:2;22001:3;21942:67;:::i;:::-;21935:74;;22018:93;22107:3;22018:93;:::i;:::-;22136:2;22131:3;22127:12;22120:19;;21779:366;;;:::o;22151:419::-;22317:4;22355:2;22344:9;22340:18;22332:26;;22404:9;22398:4;22394:20;22390:1;22379:9;22375:17;22368:47;22432:131;22558:4;22432:131;:::i;:::-;22424:139;;22151:419;;;:::o;22576:222::-;22716:34;22712:1;22704:6;22700:14;22693:58;22785:5;22780:2;22772:6;22768:15;22761:30;22576:222;:::o;22804:366::-;22946:3;22967:67;23031:2;23026:3;22967:67;:::i;:::-;22960:74;;23043:93;23132:3;23043:93;:::i;:::-;23161:2;23156:3;23152:12;23145:19;;22804:366;;;:::o;23176:419::-;23342:4;23380:2;23369:9;23365:18;23357:26;;23429:9;23423:4;23419:20;23415:1;23404:9;23400:17;23393:47;23457:131;23583:4;23457:131;:::i;:::-;23449:139;;23176:419;;;:::o;23601:225::-;23741:34;23737:1;23729:6;23725:14;23718:58;23810:8;23805:2;23797:6;23793:15;23786:33;23601:225;:::o;23832:366::-;23974:3;23995:67;24059:2;24054:3;23995:67;:::i;:::-;23988:74;;24071:93;24160:3;24071:93;:::i;:::-;24189:2;24184:3;24180:12;24173:19;;23832:366;;;:::o;24204:419::-;24370:4;24408:2;24397:9;24393:18;24385:26;;24457:9;24451:4;24447:20;24443:1;24432:9;24428:17;24421:47;24485:131;24611:4;24485:131;:::i;:::-;24477:139;;24204:419;;;:::o;24629:410::-;24669:7;24692:20;24710:1;24692:20;:::i;:::-;24687:25;;24726:20;24744:1;24726:20;:::i;:::-;24721:25;;24781:1;24778;24774:9;24803:30;24821:11;24803:30;:::i;:::-;24792:41;;24982:1;24973:7;24969:15;24966:1;24963:22;24943:1;24936:9;24916:83;24893:139;;25012:18;;:::i;:::-;24893:139;24677:362;24629:410;;;;:::o;25045:180::-;25093:77;25090:1;25083:88;25190:4;25187:1;25180:15;25214:4;25211:1;25204:15;25231:176;25263:1;25280:20;25298:1;25280:20;:::i;:::-;25275:25;;25314:20;25332:1;25314:20;:::i;:::-;25309:25;;25353:1;25343:35;;25358:18;;:::i;:::-;25343:35;25399:1;25396;25392:9;25387:14;;25231:176;;;;:::o;25413:185::-;25453:1;25470:20;25488:1;25470:20;:::i;:::-;25465:25;;25504:20;25522:1;25504:20;:::i;:::-;25499:25;;25543:1;25533:35;;25548:18;;:::i;:::-;25533:35;25590:1;25587;25583:9;25578:14;;25413:185;;;;:::o;25604:181::-;25744:33;25740:1;25732:6;25728:14;25721:57;25604:181;:::o;25791:366::-;25933:3;25954:67;26018:2;26013:3;25954:67;:::i;:::-;25947:74;;26030:93;26119:3;26030:93;:::i;:::-;26148:2;26143:3;26139:12;26132:19;;25791:366;;;:::o;26163:419::-;26329:4;26367:2;26356:9;26352:18;26344:26;;26416:9;26410:4;26406:20;26402:1;26391:9;26387:17;26380:47;26444:131;26570:4;26444:131;:::i;:::-;26436:139;;26163:419;;;:::o

Swarm Source

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