Token XFACTORY

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
7,877 XFACTORY

Holders:
104 addresses

Transfers:
-

Contract:
0x5B494e116c0b8654c033a248F1a4B51f6930DB320x5B494e116c0b8654c033a248F1a4B51f6930DB32

Decimals:
18

Social Profiles:
Not Available, Update ?

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
XFACTORY

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-16
*/

// File: interfaces/IDistributor.sol

pragma solidity ^0.8.0;

interface IDistributor {
    function distribute() external;
}

// 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/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/Operator.sol



pragma solidity 0.8;



contract Operator is Context, Ownable {
    address private _operator;

    event OperatorTransferred(address indexed previousOperator, address indexed newOperator);

    constructor() {
        _operator = _msgSender();
        emit OperatorTransferred(address(0), _operator);
    }

    function operator() public view returns (address) {
        return _operator;
    }

    modifier onlyOperator() {
        require(_operator == msg.sender, "operator: caller is not the operator");
        _;
    }

    function isOperator() public view returns (bool) {
        return _msgSender() == _operator;
    }

    function transferOperator(address newOperator_) public onlyOwner {
        _transferOperator(newOperator_);
    }

    function _transferOperator(address newOperator_) internal {
        require(newOperator_ != address(0), "operator: zero address given for new operator");
        emit OperatorTransferred(address(0), newOperator_);
        _operator = newOperator_;
    }
}

// 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: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/XFACTORY.sol



pragma solidity 0.8;






contract XFACTORY is ERC20Burnable, Operator {
    using SafeMath for uint256;
    // Total supply 8766
    uint256 public constant XFACTORY_REWARD_POOL_ALLOCATION = 6866 ether; // xfactory total supply allocation(8766)
    uint256 public constant INIT_TREASURY_FUND_POOL_ALLOCATION = 1011 ether; // 10% for initial marketing and needs + airdrop to holders

    uint256 public constant TREASURY_FUND_POOL_ALLOCATION = 112 ether;
    uint256 public constant DEV_FUND_POOL_ALLOCATION = 777 ether;
    uint256 public constant VESTING_DURATION = 120 days;
    uint256 public startTime;
    uint256 public endTime;

    uint256 public treasuryFundRewardRate;
    uint256 public devFundRewardRate;

    address public treasuryFund;
    address public devFund;

    uint256 public treasuryFundLastClaimed;
    uint256 public devFundLastClaimed;
    bool public notifyDefFund = true;

    uint256 public farmingDistributed;

    constructor(uint256 _startTime, address _treasuryFund, address _devFund) public ERC20("XFACTORY", "XFACTORY") {
        _mint(_treasuryFund, INIT_TREASURY_FUND_POOL_ALLOCATION);

        startTime = _startTime;
        endTime = startTime + VESTING_DURATION;

        treasuryFundLastClaimed = startTime;
        devFundLastClaimed = startTime;

        treasuryFundRewardRate = TREASURY_FUND_POOL_ALLOCATION.div(VESTING_DURATION);
        devFundRewardRate = DEV_FUND_POOL_ALLOCATION.div(VESTING_DURATION);

        require(_devFund != address(0), "Address cannot be 0");
        devFund = _devFund;

        require(_treasuryFund != address(0), "Address cannot be 0");
        treasuryFund = _treasuryFund;
    }

    function setTreasuryFund(address _treasuryFund) external {
        require(msg.sender == _treasuryFund, "!treasury");
        treasuryFund = _treasuryFund;
    }

    function setDevFund(address _devFund) external {
        require(msg.sender == devFund, "!dev");
        require(_devFund != address(0), "zero");
        devFund = _devFund;
    }

    function setNotifyDevFund(bool _notifyDefFund) external onlyOperator {
        notifyDefFund = _notifyDefFund;
    }

    function unclaimedTreasuryFund() public view returns (uint256 _pending) {
        uint256 _now = block.timestamp;
        if (_now > endTime) _now = endTime;
        if (treasuryFundLastClaimed >= _now) return 0;
        _pending = _now.sub(treasuryFundLastClaimed).mul(treasuryFundRewardRate);
    }

    function unclaimedDevFund() public view returns (uint256 _pending) {
        uint256 _now = block.timestamp;
        if (_now > endTime) _now = endTime;
        if (devFundLastClaimed >= _now) return 0;
        _pending = _now.sub(devFundLastClaimed).mul(devFundRewardRate);
    }

    /**
     * @dev Claim pending rewards to treasury and dev fund
     */
    function claimRewards() external {
        uint256 _pending = unclaimedTreasuryFund();
        if (_pending > 0 && treasuryFund != address(0)) {
            _mint(treasuryFund, _pending);
            treasuryFundLastClaimed = block.timestamp;
        }
        _pending = unclaimedDevFund();
        if (_pending > 0 && devFund != address(0)) {
            _mint(devFund, _pending);
            devFundLastClaimed = block.timestamp;
            if (notifyDefFund) {
                IDistributor(devFund).distribute();
            }
        }
    }

    function distributeReward(address _farmingFund, uint256 _amount) external onlyOperator {
        farmingDistributed = farmingDistributed.add(_amount);
        require(farmingDistributed <= XFACTORY_REWARD_POOL_ALLOCATION, "!supply");
        require(_farmingFund != address(0), "!farmingFund");
        _mint(_farmingFund, _amount);
    }

    function burn(uint256 amount) public override {
        super.burn(amount);
    }

    function governanceRecoverUnsupported(
        IERC20 _token,
        uint256 _amount,
        address _to
    ) external onlyOperator {
        _token.transfer(_to, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"address","name":"_treasuryFund","type":"address"},{"internalType":"address","name":"_devFund","type":"address"}],"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":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEV_FUND_POOL_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INIT_TREASURY_FUND_POOL_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_FUND_POOL_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VESTING_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"XFACTORY_REWARD_POOL_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"name":"devFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFundLastClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFundRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_farmingFund","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"distributeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmingDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notifyDefFund","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devFund","type":"address"}],"name":"setDevFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_notifyDefFund","type":"bool"}],"name":"setNotifyDevFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryFund","type":"address"}],"name":"setTreasuryFund","outputs":[],"stateMutability":"nonpayable","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator_","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFundLastClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFundRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unclaimedDevFund","outputs":[{"internalType":"uint256","name":"_pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unclaimedTreasuryFund","outputs":[{"internalType":"uint256","name":"_pending","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526001600f60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162003a7838038062003a78833981810160405281019062000052919062000731565b6040518060400160405280600881526020017f58464143544f52590000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f58464143544f52590000000000000000000000000000000000000000000000008152508160039080519060200190620000d692919062000653565b508060049080519060200190620000ef92919062000653565b5050506200011262000106620003f560201b60201c565b620003fd60201b60201c565b62000122620003f560201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a3620001fa826836ce71877e0fec0000620004c360201b60201c565b82600781905550629e34006007546200021491906200085e565b600881905550600754600d81905550600754600e8190555062000252629e34006806124fee993bc000006200063160201b620014dd1790919060201c565b6009819055506200027e629e3400682a1f0a87470e8400006200063160201b620014dd1790919060201c565b600a81905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620002f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ee90620007ec565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a290620007ec565b60405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000a7f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000536576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200052d906200080e565b60405180910390fd5b6200054a600083836200064960201b60201c565b80600260008282546200055e91906200085e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000611919062000830565b60405180910390a36200062d600083836200064e60201b60201c565b5050565b60008183620006419190620008bb565b905092915050565b505050565b505050565b828054620006619062000931565b90600052602060002090601f016020900481019282620006855760008555620006d1565b82601f10620006a057805160ff1916838001178555620006d1565b82800160010185558215620006d1579182015b82811115620006d0578251825591602001919060010190620006b3565b5b509050620006e09190620006e4565b5090565b5b80821115620006ff576000816000905550600101620006e5565b5090565b600081519050620007148162000a4b565b92915050565b6000815190506200072b8162000a65565b92915050565b6000806000606084860312156200074d576200074c620009f4565b5b60006200075d868287016200071a565b9350506020620007708682870162000703565b9250506040620007838682870162000703565b9150509250925092565b60006200079c6013836200084d565b9150620007a982620009f9565b602082019050919050565b6000620007c3601f836200084d565b9150620007d08262000a22565b602082019050919050565b620007e68162000927565b82525050565b6000602082019050818103600083015262000807816200078d565b9050919050565b600060208201905081810360008301526200082981620007b4565b9050919050565b6000602082019050620008476000830184620007db565b92915050565b600082825260208201905092915050565b60006200086b8262000927565b9150620008788362000927565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008b057620008af62000967565b5b828201905092915050565b6000620008c88262000927565b9150620008d58362000927565b925082620008e857620008e762000996565b5b828204905092915050565b6000620009008262000907565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200094a57607f821691505b60208210811415620009615762000960620009c5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f416464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000a5681620008f3565b811462000a6257600080fd5b50565b62000a708162000927565b811462000a7c57600080fd5b50565b612fe98062000a8f6000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80634f337dd51161014657806395d89b41116100c3578063e0c4f12d11610087578063e0c4f12d146106e3578063e374ce1314610701578063e569381e1461071f578063f2fde38b1461073d578063f746b71814610759578063ff4688eb146107755761025e565b806395d89b4114610619578063a457c2d714610637578063a9059cbb14610667578063ae4db91914610697578063dd62ed3e146106b35761025e565b8063715018a61161010a578063715018a61461059957806374e7153d146105a357806378e97925146105c157806379cc6790146105df5780638da5cb5b146105fb5761025e565b80634f337dd5146104f357806354575af414610511578063570ca7351461052d57806362c42c841461054b57806370a08231146105695761025e565b806329605e77116101df578063372500ab116101a3578063372500ab14610443578063395093511461044d57806342966c681461047d5780634390d2a8146104995780634456eda2146104b75780634cfc4d30146104d55761025e565b806329605e77146103af5780632c07a624146103cb5780632e3367ce146103e9578063313ce567146104075780633197cbb6146104255761025e565b806318160ddd1161022657806318160ddd1461030b5780631de6934a146103295780631ec8bb8c1461034757806321e2c5071461036357806323b872dd1461037f5761025e565b8063040173151461026357806305e1b1101461028157806306fdde031461029f578063095ea7b3146102bd57806317764782146102ed575b600080fd5b61026b610793565b60405161027891906127d4565b60405180910390f35b610289610799565b60405161029691906127d4565b60405180910390f35b6102a761079f565b6040516102b49190612552565b60405180910390f35b6102d760048036038101906102d291906120cb565b610831565b6040516102e49190612537565b60405180910390f35b6102f5610854565b60405161030291906127d4565b60405180910390f35b6103136108ad565b60405161032091906127d4565b60405180910390f35b6103316108b7565b60405161033e91906127d4565b60405180910390f35b610361600480360381019061035c91906120cb565b6108bd565b005b61037d6004803603810190610378919061210b565b610a35565b005b61039960048036038101906103949190612078565b610ae2565b6040516103a69190612537565b60405180910390f35b6103c960048036038101906103c4919061200b565b610b11565b005b6103d3610b25565b6040516103e091906127d4565b60405180910390f35b6103f1610b7e565b6040516103fe91906127d4565b60405180910390f35b61040f610b84565b60405161041c91906127ef565b60405180910390f35b61042d610b8d565b60405161043a91906127d4565b60405180910390f35b61044b610b93565b005b610467600480360381019061046291906120cb565b610d74565b6040516104749190612537565b60405180910390f35b610497600480360381019061049291906121b8565b610dab565b005b6104a1610db7565b6040516104ae91906124f3565b60405180910390f35b6104bf610ddd565b6040516104cc9190612537565b60405180910390f35b6104dd610e3c565b6040516104ea91906127d4565b60405180910390f35b6104fb610e43565b60405161050891906127d4565b60405180910390f35b61052b60048036038101906105269190612165565b610e50565b005b610535610f73565b60405161054291906124f3565b60405180910390f35b610553610f9d565b60405161056091906127d4565b60405180910390f35b610583600480360381019061057e919061200b565b610faa565b60405161059091906127d4565b60405180910390f35b6105a1610ff2565b005b6105ab611006565b6040516105b891906127d4565b60405180910390f35b6105c9611013565b6040516105d691906127d4565b60405180910390f35b6105f960048036038101906105f491906120cb565b611019565b005b610603611039565b60405161061091906124f3565b60405180910390f35b610621611063565b60405161062e9190612552565b60405180910390f35b610651600480360381019061064c91906120cb565b6110f5565b60405161065e9190612537565b60405180910390f35b610681600480360381019061067c91906120cb565b61116c565b60405161068e9190612537565b60405180910390f35b6106b160048036038101906106ac919061200b565b61118f565b005b6106cd60048036038101906106c89190612038565b6112d3565b6040516106da91906127d4565b60405180910390f35b6106eb61135a565b6040516106f891906124f3565b60405180910390f35b610709611380565b6040516107169190612537565b60405180910390f35b610727611393565b60405161073491906127d4565b60405180910390f35b6107576004803603810190610752919061200b565b611399565b005b610773600480360381019061076e919061200b565b61141d565b005b61077d6114cf565b60405161078a91906127d4565b60405180910390f35b600e5481565b600d5481565b6060600380546107ae906129d5565b80601f01602080910402602001604051908101604052809291908181526020018280546107da906129d5565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b60008061083c6114f3565b90506108498185856114fb565b600191505092915050565b60008042905060085481111561086a5760085490505b80600d541061087d5760009150506108aa565b6108a6600954610898600d54846116c690919063ffffffff16565b6116dc90919063ffffffff16565b9150505b90565b6000600254905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461094d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610944906126f4565b60405180910390fd5b610962816010546116f290919063ffffffff16565b60108190555069017434e41e5f7808000060105411156109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae90612594565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e906126d4565b60405180910390fd5b610a318282611708565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc906126f4565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600080610aed6114f3565b9050610afa85828561185f565b610b058585856118eb565b60019150509392505050565b610b19611b63565b610b2281611be1565b50565b600080429050600854811115610b3b5760085490505b80600e5410610b4e576000915050610b7b565b610b77600a54610b69600e54846116c690919063ffffffff16565b6116dc90919063ffffffff16565b9150505b90565b600a5481565b60006012905090565b60085481565b6000610b9d610854565b9050600081118015610bfe5750600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610c3757610c2f600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611708565b42600d819055505b610c3f610b25565b9050600081118015610ca05750600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610d7157610cd1600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611708565b42600e81905550600f60009054906101000a900460ff1615610d7057600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d5757600080fd5b505af1158015610d6b573d6000803e3d6000fd5b505050505b5b50565b600080610d7f6114f3565b9050610da0818585610d9185896112d3565b610d9b9190612826565b6114fb565b600191505092915050565b610db481611cf0565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e206114f3565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b629e340081565b682a1f0a87470e84000081565b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed7906126f4565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401610f1b92919061250e565b602060405180830381600087803b158015610f3557600080fd5b505af1158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6d9190612138565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6836ce71877e0fec000081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ffa611b63565b6110046000611d04565b565b6806124fee993bc0000081565b60075481565b61102b826110256114f3565b8361185f565b6110358282611dca565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611072906129d5565b80601f016020809104026020016040519081016040528092919081815260200182805461109e906129d5565b80156110eb5780601f106110c0576101008083540402835291602001916110eb565b820191906000526020600020905b8154815290600101906020018083116110ce57829003601f168201915b5050505050905090565b6000806111006114f3565b9050600061110e82866112d3565b905083811015611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90612794565b60405180910390fd5b61116082868684036114fb565b60019250505092915050565b6000806111776114f3565b90506111848185856118eb565b600191505092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690612674565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128690612614565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b60105481565b6113a1611b63565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906125d4565b60405180910390fd5b61141a81611d04565b50565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290612754565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b69017434e41e5f7808000081565b600081836114eb919061287c565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290612774565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906125f4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116b991906127d4565b60405180910390a3505050565b600081836116d49190612907565b905092915050565b600081836116ea91906128ad565b905092915050565b600081836117009190612826565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f906127b4565b60405180910390fd5b61178460008383611f98565b80600260008282546117969190612826565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161184791906127d4565b60405180910390a361185b60008383611f9d565b5050565b600061186b84846112d3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118e557818110156118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90612634565b60405180910390fd5b6118e484848484036114fb565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290612734565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c290612574565b60405180910390fd5b6119d6838383611f98565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5390612654565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b4a91906127d4565b60405180910390a3611b5d848484611f9d565b50505050565b611b6b6114f3565b73ffffffffffffffffffffffffffffffffffffffff16611b89611039565b73ffffffffffffffffffffffffffffffffffffffff1614611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd6906126b4565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890612694565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d01611cfb6114f3565b82611dca565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190612714565b60405180910390fd5b611e4682600083611f98565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec3906125b4565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f7f91906127d4565b60405180910390a3611f9383600084611f9d565b505050565b505050565b505050565b600081359050611fb181612f57565b92915050565b600081359050611fc681612f6e565b92915050565b600081519050611fdb81612f6e565b92915050565b600081359050611ff081612f85565b92915050565b60008135905061200581612f9c565b92915050565b60006020828403121561202157612020612a94565b5b600061202f84828501611fa2565b91505092915050565b6000806040838503121561204f5761204e612a94565b5b600061205d85828601611fa2565b925050602061206e85828601611fa2565b9150509250929050565b60008060006060848603121561209157612090612a94565b5b600061209f86828701611fa2565b93505060206120b086828701611fa2565b92505060406120c186828701611ff6565b9150509250925092565b600080604083850312156120e2576120e1612a94565b5b60006120f085828601611fa2565b925050602061210185828601611ff6565b9150509250929050565b60006020828403121561212157612120612a94565b5b600061212f84828501611fb7565b91505092915050565b60006020828403121561214e5761214d612a94565b5b600061215c84828501611fcc565b91505092915050565b60008060006060848603121561217e5761217d612a94565b5b600061218c86828701611fe1565b935050602061219d86828701611ff6565b92505060406121ae86828701611fa2565b9150509250925092565b6000602082840312156121ce576121cd612a94565b5b60006121dc84828501611ff6565b91505092915050565b6121ee8161293b565b82525050565b6121fd8161294d565b82525050565b600061220e8261280a565b6122188185612815565b93506122288185602086016129a2565b61223181612a99565b840191505092915050565b6000612249602383612815565b915061225482612aaa565b604082019050919050565b600061226c600783612815565b915061227782612af9565b602082019050919050565b600061228f602283612815565b915061229a82612b22565b604082019050919050565b60006122b2602683612815565b91506122bd82612b71565b604082019050919050565b60006122d5602283612815565b91506122e082612bc0565b604082019050919050565b60006122f8600483612815565b915061230382612c0f565b602082019050919050565b600061231b601d83612815565b915061232682612c38565b602082019050919050565b600061233e602683612815565b915061234982612c61565b604082019050919050565b6000612361600483612815565b915061236c82612cb0565b602082019050919050565b6000612384602d83612815565b915061238f82612cd9565b604082019050919050565b60006123a7602083612815565b91506123b282612d28565b602082019050919050565b60006123ca600c83612815565b91506123d582612d51565b602082019050919050565b60006123ed602483612815565b91506123f882612d7a565b604082019050919050565b6000612410602183612815565b915061241b82612dc9565b604082019050919050565b6000612433602583612815565b915061243e82612e18565b604082019050919050565b6000612456600983612815565b915061246182612e67565b602082019050919050565b6000612479602483612815565b915061248482612e90565b604082019050919050565b600061249c602583612815565b91506124a782612edf565b604082019050919050565b60006124bf601f83612815565b91506124ca82612f2e565b602082019050919050565b6124de8161298b565b82525050565b6124ed81612995565b82525050565b600060208201905061250860008301846121e5565b92915050565b600060408201905061252360008301856121e5565b61253060208301846124d5565b9392505050565b600060208201905061254c60008301846121f4565b92915050565b6000602082019050818103600083015261256c8184612203565b905092915050565b6000602082019050818103600083015261258d8161223c565b9050919050565b600060208201905081810360008301526125ad8161225f565b9050919050565b600060208201905081810360008301526125cd81612282565b9050919050565b600060208201905081810360008301526125ed816122a5565b9050919050565b6000602082019050818103600083015261260d816122c8565b9050919050565b6000602082019050818103600083015261262d816122eb565b9050919050565b6000602082019050818103600083015261264d8161230e565b9050919050565b6000602082019050818103600083015261266d81612331565b9050919050565b6000602082019050818103600083015261268d81612354565b9050919050565b600060208201905081810360008301526126ad81612377565b9050919050565b600060208201905081810360008301526126cd8161239a565b9050919050565b600060208201905081810360008301526126ed816123bd565b9050919050565b6000602082019050818103600083015261270d816123e0565b9050919050565b6000602082019050818103600083015261272d81612403565b9050919050565b6000602082019050818103600083015261274d81612426565b9050919050565b6000602082019050818103600083015261276d81612449565b9050919050565b6000602082019050818103600083015261278d8161246c565b9050919050565b600060208201905081810360008301526127ad8161248f565b9050919050565b600060208201905081810360008301526127cd816124b2565b9050919050565b60006020820190506127e960008301846124d5565b92915050565b600060208201905061280460008301846124e4565b92915050565b600081519050919050565b600082825260208201905092915050565b60006128318261298b565b915061283c8361298b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561287157612870612a07565b5b828201905092915050565b60006128878261298b565b91506128928361298b565b9250826128a2576128a1612a36565b5b828204905092915050565b60006128b88261298b565b91506128c38361298b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128fc576128fb612a07565b5b828202905092915050565b60006129128261298b565b915061291d8361298b565b9250828210156129305761292f612a07565b5b828203905092915050565b60006129468261296b565b9050919050565b60008115159050919050565b60006129648261293b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156129c05780820151818401526020810190506129a5565b838111156129cf576000848401525b50505050565b600060028204905060018216806129ed57607f821691505b60208210811415612a0157612a00612a65565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f21737570706c7900000000000000000000000000000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7a65726f00000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f2164657600000000000000000000000000000000000000000000000000000000600082015250565b7f6f70657261746f723a207a65726f206164647265737320676976656e20666f7260008201527f206e6577206f70657261746f7200000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f216661726d696e6746756e640000000000000000000000000000000000000000600082015250565b7f6f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f2174726561737572790000000000000000000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612f608161293b565b8114612f6b57600080fd5b50565b612f778161294d565b8114612f8257600080fd5b50565b612f8e81612959565b8114612f9957600080fd5b50565b612fa58161298b565b8114612fb057600080fd5b5056fea26469706673582212209ad394094b2fa7ff54266a92787248cd72088bc7d872f0e8065ac9f80c3f48a964736f6c6343000807003300000000000000000000000000000000000000000000000000000000639cc03000000000000000000000000013d423e789f614c3d3e06f47895611c2bb6c2e910000000000000000000000006c77b1284165e20f6fefa55e854d2a9103effa9f

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000639cc03000000000000000000000000013d423e789f614c3d3e06f47895611c2bb6c2e910000000000000000000000006c77b1284165e20f6fefa55e854d2a9103effa9f

-----Decoded View---------------
Arg [0] : _startTime (uint256): 1671217200
Arg [1] : _treasuryFund (address): 0x13d423e789f614c3d3e06f47895611c2bb6c2e91
Arg [2] : _devFund (address): 0x6c77b1284165e20f6fefa55e854d2a9103effa9f

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000639cc030
Arg [1] : 00000000000000000000000013d423e789f614c3d3e06f47895611c2bb6c2e91
Arg [2] : 0000000000000000000000006c77b1284165e20f6fefa55e854d2a9103effa9f


Deployed ByteCode Sourcemap

30041:4058:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30863:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30818:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10575:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12926:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32214:305;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11695:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30668:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33467:343;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32088:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13707:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4430:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32527:285;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30712:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11537:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30637:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32898:561;;;:::i;:::-;;14411:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33818:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30787:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4322:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30548:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30481:60;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33909:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4094:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30269:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11866:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2911:103;;;:::i;:::-;;30409:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30606:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22756:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2263:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10794:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15152:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12199:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31897:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12455:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30753:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30903:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30944:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3169:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31725:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30152:68;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30863:33;;;;:::o;30818:38::-;;;;:::o;10575:100::-;10629:13;10662:5;10655:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10575:100;:::o;12926:201::-;13009:4;13026:13;13042:12;:10;:12::i;:::-;13026:28;;13065:32;13074:5;13081:7;13090:6;13065:8;:32::i;:::-;13115:4;13108:11;;;12926:201;;;;:::o;32214:305::-;32268:16;32297:12;32312:15;32297:30;;32349:7;;32342:4;:14;32338:34;;;32365:7;;32358:14;;32338:34;32414:4;32387:23;;:31;32383:45;;32427:1;32420:8;;;;;32383:45;32450:61;32488:22;;32450:33;32459:23;;32450:4;:8;;:33;;;;:::i;:::-;:37;;:61;;;;:::i;:::-;32439:72;;32286:233;32214:305;;:::o;11695:108::-;11756:7;11783:12;;11776:19;;11695:108;:::o;30668:37::-;;;;:::o;33467:343::-;4243:10;4230:23;;:9;;;;;;;;;;;:23;;;4222:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;33586:31:::1;33609:7;33586:18;;:22;;:31;;;;:::i;:::-;33565:18;:52;;;;30210:10;33636:18;;:53;;33628:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33744:1;33720:26;;:12;:26;;;;33712:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;33774:28;33780:12;33794:7;33774:5;:28::i;:::-;33467:343:::0;;:::o;32088:118::-;4243:10;4230:23;;:9;;;;;;;;;;;:23;;;4222:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32184:14:::1;32168:13;;:30;;;;;;;;;;;;;;;;;;32088:118:::0;:::o;13707:295::-;13838:4;13855:15;13873:12;:10;:12::i;:::-;13855:30;;13896:38;13912:4;13918:7;13927:6;13896:15;:38::i;:::-;13945:27;13955:4;13961:2;13965:6;13945:9;:27::i;:::-;13990:4;13983:11;;;13707:295;;;;;:::o;4430:115::-;2149:13;:11;:13::i;:::-;4506:31:::1;4524:12;4506:17;:31::i;:::-;4430:115:::0;:::o;32527:285::-;32576:16;32605:12;32620:15;32605:30;;32657:7;;32650:4;:14;32646:34;;;32673:7;;32666:14;;32646:34;32717:4;32695:18;;:26;32691:40;;32730:1;32723:8;;;;;32691:40;32753:51;32786:17;;32753:28;32762:18;;32753:4;:8;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;32742:62;;32594:218;32527:285;;:::o;30712:32::-;;;;:::o;11537:93::-;11595:5;11620:2;11613:9;;11537:93;:::o;30637:22::-;;;;:::o;32898:561::-;32942:16;32961:23;:21;:23::i;:::-;32942:42;;33010:1;32999:8;:12;:42;;;;;33039:1;33015:26;;:12;;;;;;;;;;;:26;;;;32999:42;32995:160;;;33058:29;33064:12;;;;;;;;;;;33078:8;33058:5;:29::i;:::-;33128:15;33102:23;:41;;;;32995:160;33176:18;:16;:18::i;:::-;33165:29;;33220:1;33209:8;:12;:37;;;;;33244:1;33225:21;;:7;;;;;;;;;;;:21;;;;33209:37;33205:247;;;33263:24;33269:7;;;;;;;;;;;33278:8;33263:5;:24::i;:::-;33323:15;33302:18;:36;;;;33357:13;;;;;;;;;;;33353:88;;;33404:7;;;;;;;;;;;33391:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33353:88;33205:247;32931:528;32898:561::o;14411:238::-;14499:4;14516:13;14532:12;:10;:12::i;:::-;14516:28;;14555:64;14564:5;14571:7;14608:10;14580:25;14590:5;14597:7;14580:9;:25::i;:::-;:38;;;;:::i;:::-;14555:8;:64::i;:::-;14637:4;14630:11;;;14411:238;;;;:::o;33818:83::-;33875:18;33886:6;33875:10;:18::i;:::-;33818:83;:::o;30787:22::-;;;;;;;;;;;;;:::o;4322:100::-;4365:4;4405:9;;;;;;;;;;;4389:25;;:12;:10;:12::i;:::-;:25;;;4382:32;;4322:100;:::o;30548:51::-;30591:8;30548:51;:::o;30481:60::-;30532:9;30481:60;:::o;33909:187::-;4243:10;4230:23;;:9;;;;;;;;;;;:23;;;4222:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;34059:6:::1;:15;;;34075:3;34080:7;34059:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33909:187:::0;;;:::o;4094:85::-;4135:7;4162:9;;;;;;;;;;;4155:16;;4094:85;:::o;30269:71::-;30330:10;30269:71;:::o;11866:127::-;11940:7;11967:9;:18;11977:7;11967:18;;;;;;;;;;;;;;;;11960:25;;11866:127;;;:::o;2911:103::-;2149:13;:11;:13::i;:::-;2976:30:::1;3003:1;2976:18;:30::i;:::-;2911:103::o:0;30409:65::-;30465:9;30409:65;:::o;30606:24::-;;;;:::o;22756:164::-;22833:46;22849:7;22858:12;:10;:12::i;:::-;22872:6;22833:15;:46::i;:::-;22890:22;22896:7;22905:6;22890:5;:22::i;:::-;22756:164;;:::o;2263:87::-;2309:7;2336:6;;;;;;;;;;;2329:13;;2263:87;:::o;10794:104::-;10850:13;10883:7;10876:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10794:104;:::o;15152:436::-;15245:4;15262:13;15278:12;:10;:12::i;:::-;15262:28;;15301:24;15328:25;15338:5;15345:7;15328:9;:25::i;:::-;15301:52;;15392:15;15372:16;:35;;15364:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15485:60;15494:5;15501:7;15529:15;15510:16;:34;15485:8;:60::i;:::-;15576:4;15569:11;;;;15152:436;;;;:::o;12199:193::-;12278:4;12295:13;12311:12;:10;:12::i;:::-;12295:28;;12334;12344:5;12351:2;12355:6;12334:9;:28::i;:::-;12380:4;12373:11;;;12199:193;;;;:::o;31897:183::-;31977:7;;;;;;;;;;;31963:21;;:10;:21;;;31955:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32032:1;32012:22;;:8;:22;;;;32004:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;32064:8;32054:7;;:18;;;;;;;;;;;;;;;;;;31897:183;:::o;12455:151::-;12544:7;12571:11;:18;12583:5;12571:18;;;;;;;;;;;;;;;:27;12590:7;12571:27;;;;;;;;;;;;;;;;12564:34;;12455:151;;;;:::o;30753:27::-;;;;;;;;;;;;;:::o;30903:32::-;;;;;;;;;;;;;:::o;30944:33::-;;;;:::o;3169:201::-;2149:13;:11;:13::i;:::-;3278:1:::1;3258:22;;:8;:22;;;;3250:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3334:28;3353:8;3334:18;:28::i;:::-;3169:201:::0;:::o;31725:164::-;31815:13;31801:27;;:10;:27;;;31793:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;31868:13;31853:12;;:28;;;;;;;;;;;;;;;;;;31725:164;:::o;30152:68::-;30210:10;30152:68;:::o;26940:98::-;26998:7;27029:1;27025;:5;;;;:::i;:::-;27018:12;;26940:98;;;;:::o;814:::-;867:7;894:10;887:17;;814:98;:::o;19179:380::-;19332:1;19315:19;;:5;:19;;;;19307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19413:1;19394:21;;:7;:21;;;;19386:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19497:6;19467:11;:18;19479:5;19467:18;;;;;;;;;;;;;;;:27;19486:7;19467:27;;;;;;;;;;;;;;;:36;;;;19535:7;19519:32;;19528:5;19519:32;;;19544:6;19519:32;;;;;;:::i;:::-;;;;;;;;19179:380;;;:::o;26184:98::-;26242:7;26273:1;26269;:5;;;;:::i;:::-;26262:12;;26184:98;;;;:::o;26541:::-;26599:7;26630:1;26626;:5;;;;:::i;:::-;26619:12;;26541:98;;;;:::o;25803:::-;25861:7;25892:1;25888;:5;;;;:::i;:::-;25881:12;;25803:98;;;;:::o;17185:548::-;17288:1;17269:21;;:7;:21;;;;17261:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;17339:49;17368:1;17372:7;17381:6;17339:20;:49::i;:::-;17417:6;17401:12;;:22;;;;;;;:::i;:::-;;;;;;;;17594:6;17572:9;:18;17582:7;17572:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;17648:7;17627:37;;17644:1;17627:37;;;17657:6;17627:37;;;;;;:::i;:::-;;;;;;;;17677:48;17705:1;17709:7;17718:6;17677:19;:48::i;:::-;17185:548;;:::o;19850:453::-;19985:24;20012:25;20022:5;20029:7;20012:9;:25::i;:::-;19985:52;;20072:17;20052:16;:37;20048:248;;20134:6;20114:16;:26;;20106:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20218:51;20227:5;20234:7;20262:6;20243:16;:25;20218:8;:51::i;:::-;20048:248;19974:329;19850:453;;;:::o;16058:840::-;16205:1;16189:18;;:4;:18;;;;16181:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16282:1;16268:16;;:2;:16;;;;16260:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16337:38;16358:4;16364:2;16368:6;16337:20;:38::i;:::-;16388:19;16410:9;:15;16420:4;16410:15;;;;;;;;;;;;;;;;16388:37;;16459:6;16444:11;:21;;16436:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;16576:6;16562:11;:20;16544:9;:15;16554:4;16544:15;;;;;;;;;;;;;;;:38;;;;16779:6;16762:9;:13;16772:2;16762:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16829:2;16814:26;;16823:4;16814:26;;;16833:6;16814:26;;;;;;:::i;:::-;;;;;;;;16853:37;16873:4;16879:2;16883:6;16853:19;:37::i;:::-;16170:728;16058:840;;;:::o;2428:132::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2428:132::o;4553:257::-;4654:1;4630:26;;:12;:26;;;;4622:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;4754:12;4722:45;;4750:1;4722:45;;;;;;;;;;;;4790:12;4778:9;;:24;;;;;;;;;;;;;;;;;;4553:257;:::o;22346:91::-;22402:27;22408:12;:10;:12::i;:::-;22422:6;22402:5;:27::i;:::-;22346:91;:::o;3530:191::-;3604:16;3623:6;;;;;;;;;;;3604:25;;3649:8;3640:6;;:17;;;;;;;;;;;;;;;;;;3704:8;3673:40;;3694:8;3673:40;;;;;;;;;;;;3593:128;3530:191;:::o;18066:675::-;18169:1;18150:21;;:7;:21;;;;18142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18222:49;18243:7;18260:1;18264:6;18222:20;:49::i;:::-;18284:22;18309:9;:18;18319:7;18309:18;;;;;;;;;;;;;;;;18284:43;;18364:6;18346:14;:24;;18338:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18483:6;18466:14;:23;18445:9;:18;18455:7;18445:18;;;;;;;;;;;;;;;:44;;;;18600:6;18584:12;;:22;;;;;;;;;;;18661:1;18635:37;;18644:7;18635:37;;;18665:6;18635:37;;;;;;:::i;:::-;;;;;;;;18685:48;18705:7;18722:1;18726:6;18685:19;:48::i;:::-;18131:610;18066:675;;:::o;20903:125::-;;;;:::o;21632:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;152:133;;;;:::o;291:137::-;345:5;376:6;370:13;361:22;;392:30;416:5;392:30;:::i;:::-;291:137;;;;:::o;434:167::-;494:5;532:6;519:20;510:29;;548:47;589:5;548:47;:::i;:::-;434:167;;;;:::o;607:139::-;653:5;691:6;678:20;669:29;;707:33;734:5;707:33;:::i;:::-;607:139;;;;:::o;752:329::-;811:6;860:2;848:9;839:7;835:23;831:32;828:119;;;866:79;;:::i;:::-;828:119;986:1;1011:53;1056:7;1047:6;1036:9;1032:22;1011:53;:::i;:::-;1001:63;;957:117;752:329;;;;:::o;1087:474::-;1155:6;1163;1212:2;1200:9;1191:7;1187:23;1183:32;1180:119;;;1218:79;;:::i;:::-;1180:119;1338:1;1363:53;1408:7;1399:6;1388:9;1384:22;1363:53;:::i;:::-;1353:63;;1309:117;1465:2;1491:53;1536:7;1527:6;1516:9;1512:22;1491:53;:::i;:::-;1481:63;;1436:118;1087:474;;;;;:::o;1567:619::-;1644:6;1652;1660;1709:2;1697:9;1688:7;1684:23;1680:32;1677:119;;;1715:79;;:::i;:::-;1677:119;1835:1;1860:53;1905:7;1896:6;1885:9;1881:22;1860:53;:::i;:::-;1850:63;;1806:117;1962:2;1988:53;2033:7;2024:6;2013:9;2009:22;1988:53;:::i;:::-;1978:63;;1933:118;2090:2;2116:53;2161:7;2152:6;2141:9;2137:22;2116:53;:::i;:::-;2106:63;;2061:118;1567:619;;;;;:::o;2192:474::-;2260:6;2268;2317:2;2305:9;2296:7;2292:23;2288:32;2285:119;;;2323:79;;:::i;:::-;2285:119;2443:1;2468:53;2513:7;2504:6;2493:9;2489:22;2468:53;:::i;:::-;2458:63;;2414:117;2570:2;2596:53;2641:7;2632:6;2621:9;2617:22;2596:53;:::i;:::-;2586:63;;2541:118;2192:474;;;;;:::o;2672:323::-;2728:6;2777:2;2765:9;2756:7;2752:23;2748:32;2745:119;;;2783:79;;:::i;:::-;2745:119;2903:1;2928:50;2970:7;2961:6;2950:9;2946:22;2928:50;:::i;:::-;2918:60;;2874:114;2672:323;;;;:::o;3001:345::-;3068:6;3117:2;3105:9;3096:7;3092:23;3088:32;3085:119;;;3123:79;;:::i;:::-;3085:119;3243:1;3268:61;3321:7;3312:6;3301:9;3297:22;3268:61;:::i;:::-;3258:71;;3214:125;3001:345;;;;:::o;3352:647::-;3443:6;3451;3459;3508:2;3496:9;3487:7;3483:23;3479:32;3476:119;;;3514:79;;:::i;:::-;3476:119;3634:1;3659:67;3718:7;3709:6;3698:9;3694:22;3659:67;:::i;:::-;3649:77;;3605:131;3775:2;3801:53;3846:7;3837:6;3826:9;3822:22;3801:53;:::i;:::-;3791:63;;3746:118;3903:2;3929:53;3974:7;3965:6;3954:9;3950:22;3929:53;:::i;:::-;3919:63;;3874:118;3352:647;;;;;:::o;4005:329::-;4064:6;4113:2;4101:9;4092:7;4088:23;4084:32;4081:119;;;4119:79;;:::i;:::-;4081:119;4239:1;4264:53;4309:7;4300:6;4289:9;4285:22;4264:53;:::i;:::-;4254:63;;4210:117;4005:329;;;;:::o;4340:118::-;4427:24;4445:5;4427:24;:::i;:::-;4422:3;4415:37;4340:118;;:::o;4464:109::-;4545:21;4560:5;4545:21;:::i;:::-;4540:3;4533:34;4464:109;;:::o;4579:364::-;4667:3;4695:39;4728:5;4695:39;:::i;:::-;4750:71;4814:6;4809:3;4750:71;:::i;:::-;4743:78;;4830:52;4875:6;4870:3;4863:4;4856:5;4852:16;4830:52;:::i;:::-;4907:29;4929:6;4907:29;:::i;:::-;4902:3;4898:39;4891:46;;4671:272;4579:364;;;;:::o;4949:366::-;5091:3;5112:67;5176:2;5171:3;5112:67;:::i;:::-;5105:74;;5188:93;5277:3;5188:93;:::i;:::-;5306:2;5301:3;5297:12;5290:19;;4949:366;;;:::o;5321:365::-;5463:3;5484:66;5548:1;5543:3;5484:66;:::i;:::-;5477:73;;5559:93;5648:3;5559:93;:::i;:::-;5677:2;5672:3;5668:12;5661:19;;5321:365;;;:::o;5692:366::-;5834:3;5855:67;5919:2;5914:3;5855:67;:::i;:::-;5848:74;;5931:93;6020:3;5931:93;:::i;:::-;6049:2;6044:3;6040:12;6033:19;;5692:366;;;:::o;6064:::-;6206:3;6227:67;6291:2;6286:3;6227:67;:::i;:::-;6220:74;;6303:93;6392:3;6303:93;:::i;:::-;6421:2;6416:3;6412:12;6405:19;;6064:366;;;:::o;6436:::-;6578:3;6599:67;6663:2;6658:3;6599:67;:::i;:::-;6592:74;;6675:93;6764:3;6675:93;:::i;:::-;6793:2;6788:3;6784:12;6777:19;;6436:366;;;:::o;6808:365::-;6950:3;6971:66;7035:1;7030:3;6971:66;:::i;:::-;6964:73;;7046:93;7135:3;7046:93;:::i;:::-;7164:2;7159:3;7155:12;7148:19;;6808:365;;;:::o;7179:366::-;7321:3;7342:67;7406:2;7401:3;7342:67;:::i;:::-;7335:74;;7418:93;7507:3;7418:93;:::i;:::-;7536:2;7531:3;7527:12;7520:19;;7179:366;;;:::o;7551:::-;7693:3;7714:67;7778:2;7773:3;7714:67;:::i;:::-;7707:74;;7790:93;7879:3;7790:93;:::i;:::-;7908:2;7903:3;7899:12;7892:19;;7551:366;;;:::o;7923:365::-;8065:3;8086:66;8150:1;8145:3;8086:66;:::i;:::-;8079:73;;8161:93;8250:3;8161:93;:::i;:::-;8279:2;8274:3;8270:12;8263:19;;7923:365;;;:::o;8294:366::-;8436:3;8457:67;8521:2;8516:3;8457:67;:::i;:::-;8450:74;;8533:93;8622:3;8533:93;:::i;:::-;8651:2;8646:3;8642:12;8635:19;;8294:366;;;:::o;8666:::-;8808:3;8829:67;8893:2;8888:3;8829:67;:::i;:::-;8822:74;;8905:93;8994:3;8905:93;:::i;:::-;9023:2;9018:3;9014:12;9007:19;;8666:366;;;:::o;9038:::-;9180:3;9201:67;9265:2;9260:3;9201:67;:::i;:::-;9194:74;;9277:93;9366:3;9277:93;:::i;:::-;9395:2;9390:3;9386:12;9379:19;;9038:366;;;:::o;9410:::-;9552:3;9573:67;9637:2;9632:3;9573:67;:::i;:::-;9566:74;;9649:93;9738:3;9649:93;:::i;:::-;9767:2;9762:3;9758:12;9751:19;;9410:366;;;:::o;9782:::-;9924:3;9945:67;10009:2;10004:3;9945:67;:::i;:::-;9938:74;;10021:93;10110:3;10021:93;:::i;:::-;10139:2;10134:3;10130:12;10123:19;;9782:366;;;:::o;10154:::-;10296:3;10317:67;10381:2;10376:3;10317:67;:::i;:::-;10310:74;;10393:93;10482:3;10393:93;:::i;:::-;10511:2;10506:3;10502:12;10495:19;;10154:366;;;:::o;10526:365::-;10668:3;10689:66;10753:1;10748:3;10689:66;:::i;:::-;10682:73;;10764:93;10853:3;10764:93;:::i;:::-;10882:2;10877:3;10873:12;10866:19;;10526:365;;;:::o;10897:366::-;11039:3;11060:67;11124:2;11119:3;11060:67;:::i;:::-;11053:74;;11136:93;11225:3;11136:93;:::i;:::-;11254:2;11249:3;11245:12;11238:19;;10897:366;;;:::o;11269:::-;11411:3;11432:67;11496:2;11491:3;11432:67;:::i;:::-;11425:74;;11508:93;11597:3;11508:93;:::i;:::-;11626:2;11621:3;11617:12;11610:19;;11269:366;;;:::o;11641:::-;11783:3;11804:67;11868:2;11863:3;11804:67;:::i;:::-;11797:74;;11880:93;11969:3;11880:93;:::i;:::-;11998:2;11993:3;11989:12;11982:19;;11641:366;;;:::o;12013:118::-;12100:24;12118:5;12100:24;:::i;:::-;12095:3;12088:37;12013:118;;:::o;12137:112::-;12220:22;12236:5;12220:22;:::i;:::-;12215:3;12208:35;12137:112;;:::o;12255:222::-;12348:4;12386:2;12375:9;12371:18;12363:26;;12399:71;12467:1;12456:9;12452:17;12443:6;12399:71;:::i;:::-;12255:222;;;;:::o;12483:332::-;12604:4;12642:2;12631:9;12627:18;12619:26;;12655:71;12723:1;12712:9;12708:17;12699:6;12655:71;:::i;:::-;12736:72;12804:2;12793:9;12789:18;12780:6;12736:72;:::i;:::-;12483:332;;;;;:::o;12821:210::-;12908:4;12946:2;12935:9;12931:18;12923:26;;12959:65;13021:1;13010:9;13006:17;12997:6;12959:65;:::i;:::-;12821:210;;;;:::o;13037:313::-;13150:4;13188:2;13177:9;13173:18;13165:26;;13237:9;13231:4;13227:20;13223:1;13212:9;13208:17;13201:47;13265:78;13338:4;13329:6;13265:78;:::i;:::-;13257:86;;13037:313;;;;:::o;13356:419::-;13522:4;13560:2;13549:9;13545:18;13537:26;;13609:9;13603:4;13599:20;13595:1;13584:9;13580:17;13573:47;13637:131;13763:4;13637:131;:::i;:::-;13629:139;;13356:419;;;:::o;13781:::-;13947:4;13985:2;13974:9;13970:18;13962:26;;14034:9;14028:4;14024:20;14020:1;14009:9;14005:17;13998:47;14062:131;14188:4;14062:131;:::i;:::-;14054:139;;13781:419;;;:::o;14206:::-;14372:4;14410:2;14399:9;14395:18;14387:26;;14459:9;14453:4;14449:20;14445:1;14434:9;14430:17;14423:47;14487:131;14613:4;14487:131;:::i;:::-;14479:139;;14206:419;;;:::o;14631:::-;14797:4;14835:2;14824:9;14820:18;14812:26;;14884:9;14878:4;14874:20;14870:1;14859:9;14855:17;14848:47;14912:131;15038:4;14912:131;:::i;:::-;14904:139;;14631:419;;;:::o;15056:::-;15222:4;15260:2;15249:9;15245:18;15237:26;;15309:9;15303:4;15299:20;15295:1;15284:9;15280:17;15273:47;15337:131;15463:4;15337:131;:::i;:::-;15329:139;;15056:419;;;:::o;15481:::-;15647:4;15685:2;15674:9;15670:18;15662:26;;15734:9;15728:4;15724:20;15720:1;15709:9;15705:17;15698:47;15762:131;15888:4;15762:131;:::i;:::-;15754:139;;15481:419;;;:::o;15906:::-;16072:4;16110:2;16099:9;16095:18;16087:26;;16159:9;16153:4;16149:20;16145:1;16134:9;16130:17;16123:47;16187:131;16313:4;16187:131;:::i;:::-;16179:139;;15906:419;;;:::o;16331:::-;16497:4;16535:2;16524:9;16520:18;16512:26;;16584:9;16578:4;16574:20;16570:1;16559:9;16555:17;16548:47;16612:131;16738:4;16612:131;:::i;:::-;16604:139;;16331:419;;;:::o;16756:::-;16922:4;16960:2;16949:9;16945:18;16937:26;;17009:9;17003:4;16999:20;16995:1;16984:9;16980:17;16973:47;17037:131;17163:4;17037:131;:::i;:::-;17029:139;;16756:419;;;:::o;17181:::-;17347:4;17385:2;17374:9;17370:18;17362:26;;17434:9;17428:4;17424:20;17420:1;17409:9;17405:17;17398:47;17462:131;17588:4;17462:131;:::i;:::-;17454:139;;17181:419;;;:::o;17606:::-;17772:4;17810:2;17799:9;17795:18;17787:26;;17859:9;17853:4;17849:20;17845:1;17834:9;17830:17;17823:47;17887:131;18013:4;17887:131;:::i;:::-;17879:139;;17606:419;;;:::o;18031:::-;18197:4;18235:2;18224:9;18220:18;18212:26;;18284:9;18278:4;18274:20;18270:1;18259:9;18255:17;18248:47;18312:131;18438:4;18312:131;:::i;:::-;18304:139;;18031:419;;;:::o;18456:::-;18622:4;18660:2;18649:9;18645:18;18637:26;;18709:9;18703:4;18699:20;18695:1;18684:9;18680:17;18673:47;18737:131;18863:4;18737:131;:::i;:::-;18729:139;;18456:419;;;:::o;18881:::-;19047:4;19085:2;19074:9;19070:18;19062:26;;19134:9;19128:4;19124:20;19120:1;19109:9;19105:17;19098:47;19162:131;19288:4;19162:131;:::i;:::-;19154:139;;18881:419;;;:::o;19306:::-;19472:4;19510:2;19499:9;19495:18;19487:26;;19559:9;19553:4;19549:20;19545:1;19534:9;19530:17;19523:47;19587:131;19713:4;19587:131;:::i;:::-;19579:139;;19306:419;;;:::o;19731:::-;19897:4;19935:2;19924:9;19920:18;19912:26;;19984:9;19978:4;19974:20;19970:1;19959:9;19955:17;19948:47;20012:131;20138:4;20012:131;:::i;:::-;20004:139;;19731:419;;;:::o;20156:::-;20322:4;20360:2;20349:9;20345:18;20337:26;;20409:9;20403:4;20399:20;20395:1;20384:9;20380:17;20373:47;20437:131;20563:4;20437:131;:::i;:::-;20429:139;;20156:419;;;:::o;20581:::-;20747:4;20785:2;20774:9;20770:18;20762:26;;20834:9;20828:4;20824:20;20820:1;20809:9;20805:17;20798:47;20862:131;20988:4;20862:131;:::i;:::-;20854:139;;20581:419;;;:::o;21006:::-;21172:4;21210:2;21199:9;21195:18;21187:26;;21259:9;21253:4;21249:20;21245:1;21234:9;21230:17;21223:47;21287:131;21413:4;21287:131;:::i;:::-;21279:139;;21006:419;;;:::o;21431:222::-;21524:4;21562:2;21551:9;21547:18;21539:26;;21575:71;21643:1;21632:9;21628:17;21619:6;21575:71;:::i;:::-;21431:222;;;;:::o;21659:214::-;21748:4;21786:2;21775:9;21771:18;21763:26;;21799:67;21863:1;21852:9;21848:17;21839:6;21799:67;:::i;:::-;21659:214;;;;:::o;21960:99::-;22012:6;22046:5;22040:12;22030:22;;21960:99;;;:::o;22065:169::-;22149:11;22183:6;22178:3;22171:19;22223:4;22218:3;22214:14;22199:29;;22065:169;;;;:::o;22240:305::-;22280:3;22299:20;22317:1;22299:20;:::i;:::-;22294:25;;22333:20;22351:1;22333:20;:::i;:::-;22328:25;;22487:1;22419:66;22415:74;22412:1;22409:81;22406:107;;;22493:18;;:::i;:::-;22406:107;22537:1;22534;22530:9;22523:16;;22240:305;;;;:::o;22551:185::-;22591:1;22608:20;22626:1;22608:20;:::i;:::-;22603:25;;22642:20;22660:1;22642:20;:::i;:::-;22637:25;;22681:1;22671:35;;22686:18;;:::i;:::-;22671:35;22728:1;22725;22721:9;22716:14;;22551:185;;;;:::o;22742:348::-;22782:7;22805:20;22823:1;22805:20;:::i;:::-;22800:25;;22839:20;22857:1;22839:20;:::i;:::-;22834:25;;23027:1;22959:66;22955:74;22952:1;22949:81;22944:1;22937:9;22930:17;22926:105;22923:131;;;23034:18;;:::i;:::-;22923:131;23082:1;23079;23075:9;23064:20;;22742:348;;;;:::o;23096:191::-;23136:4;23156:20;23174:1;23156:20;:::i;:::-;23151:25;;23190:20;23208:1;23190:20;:::i;:::-;23185:25;;23229:1;23226;23223:8;23220:34;;;23234:18;;:::i;:::-;23220:34;23279:1;23276;23272:9;23264:17;;23096:191;;;;:::o;23293:96::-;23330:7;23359:24;23377:5;23359:24;:::i;:::-;23348:35;;23293:96;;;:::o;23395:90::-;23429:7;23472:5;23465:13;23458:21;23447:32;;23395:90;;;:::o;23491:110::-;23542:7;23571:24;23589:5;23571:24;:::i;:::-;23560:35;;23491:110;;;:::o;23607:126::-;23644:7;23684:42;23677:5;23673:54;23662:65;;23607:126;;;:::o;23739:77::-;23776:7;23805:5;23794:16;;23739:77;;;:::o;23822:86::-;23857:7;23897:4;23890:5;23886:16;23875:27;;23822:86;;;:::o;23914:307::-;23982:1;23992:113;24006:6;24003:1;24000:13;23992:113;;;24091:1;24086:3;24082:11;24076:18;24072:1;24067:3;24063:11;24056:39;24028:2;24025:1;24021:10;24016:15;;23992:113;;;24123:6;24120:1;24117:13;24114:101;;;24203:1;24194:6;24189:3;24185:16;24178:27;24114:101;23963:258;23914:307;;;:::o;24227:320::-;24271:6;24308:1;24302:4;24298:12;24288:22;;24355:1;24349:4;24345:12;24376:18;24366:81;;24432:4;24424:6;24420:17;24410:27;;24366:81;24494:2;24486:6;24483:14;24463:18;24460:38;24457:84;;;24513:18;;:::i;:::-;24457:84;24278:269;24227:320;;;:::o;24553:180::-;24601:77;24598:1;24591:88;24698:4;24695:1;24688:15;24722:4;24719:1;24712:15;24739:180;24787:77;24784:1;24777:88;24884:4;24881:1;24874:15;24908:4;24905:1;24898:15;24925:180;24973:77;24970:1;24963:88;25070:4;25067:1;25060:15;25094:4;25091:1;25084:15;25234:117;25343:1;25340;25333:12;25357:102;25398:6;25449:2;25445:7;25440:2;25433:5;25429:14;25425:28;25415:38;;25357:102;;;:::o;25465:222::-;25605:34;25601:1;25593:6;25589:14;25582:58;25674:5;25669:2;25661:6;25657:15;25650:30;25465:222;:::o;25693:157::-;25833:9;25829:1;25821:6;25817:14;25810:33;25693:157;:::o;25856:221::-;25996:34;25992:1;25984:6;25980:14;25973:58;26065:4;26060:2;26052:6;26048:15;26041:29;25856:221;:::o;26083:225::-;26223:34;26219:1;26211:6;26207:14;26200:58;26292:8;26287:2;26279:6;26275:15;26268:33;26083:225;:::o;26314:221::-;26454:34;26450:1;26442:6;26438:14;26431:58;26523:4;26518:2;26510:6;26506:15;26499:29;26314:221;:::o;26541:154::-;26681:6;26677:1;26669:6;26665:14;26658:30;26541:154;:::o;26701:179::-;26841:31;26837:1;26829:6;26825:14;26818:55;26701:179;:::o;26886:225::-;27026:34;27022:1;27014:6;27010:14;27003:58;27095:8;27090:2;27082:6;27078:15;27071:33;26886:225;:::o;27117:154::-;27257:6;27253:1;27245:6;27241:14;27234:30;27117:154;:::o;27277:232::-;27417:34;27413:1;27405:6;27401:14;27394:58;27486:15;27481:2;27473:6;27469:15;27462:40;27277:232;:::o;27515:182::-;27655:34;27651:1;27643:6;27639:14;27632:58;27515:182;:::o;27703:162::-;27843:14;27839:1;27831:6;27827:14;27820:38;27703:162;:::o;27871:223::-;28011:34;28007:1;27999:6;27995:14;27988:58;28080:6;28075:2;28067:6;28063:15;28056:31;27871:223;:::o;28100:220::-;28240:34;28236:1;28228:6;28224:14;28217:58;28309:3;28304:2;28296:6;28292:15;28285:28;28100:220;:::o;28326:224::-;28466:34;28462:1;28454:6;28450:14;28443:58;28535:7;28530:2;28522:6;28518:15;28511:32;28326:224;:::o;28556:159::-;28696:11;28692:1;28684:6;28680:14;28673:35;28556:159;:::o;28721:223::-;28861:34;28857:1;28849:6;28845:14;28838:58;28930:6;28925:2;28917:6;28913:15;28906:31;28721:223;:::o;28950:224::-;29090:34;29086:1;29078:6;29074:14;29067:58;29159:7;29154:2;29146:6;29142:15;29135:32;28950:224;:::o;29180:181::-;29320:33;29316:1;29308:6;29304:14;29297:57;29180:181;:::o;29367:122::-;29440:24;29458:5;29440:24;:::i;:::-;29433:5;29430:35;29420:63;;29479:1;29476;29469:12;29420:63;29367:122;:::o;29495:116::-;29565:21;29580:5;29565:21;:::i;:::-;29558:5;29555:32;29545:60;;29601:1;29598;29591:12;29545:60;29495:116;:::o;29617:150::-;29704:38;29736:5;29704:38;:::i;:::-;29697:5;29694:49;29684:77;;29757:1;29754;29747:12;29684:77;29617:150;:::o;29773:122::-;29846:24;29864:5;29846:24;:::i;:::-;29839:5;29836:35;29826:63;;29885:1;29882;29875:12;29826:63;29773:122;:::o

Swarm Source

ipfs://9ad394094b2fa7ff54266a92787248cd72088bc7d872f0e8065ac9f80c3f48a9
Loading