Token YEL Token

 

Overview ERC-20

Price
$0.00 @ 0.003694 MATIC (+1.60%)
Fully Diluted Market Cap
Total Supply:
53,086,789.959239 YEL

Holders:
3,580 addresses

Transfers:
-

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

OVERVIEW

Yield Enhancement Labs (YEL) is a multi-chain yield enhancement protocol who’s core mission is to help projects gain liquidity across multiple chains while building self-sustainable token economics with automated farming strategies.

Market

Volume (24H):$22,087.00
Market Capitalization:$1,073,964.00
Circulating Supply:263,791,016.00 YEL
Market Data Source: Coinmarketcap


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

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x777fa2f260f1d8b4c163875c5a5cc92391ed86e8

Contract Name:
YELToken

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-29
*/

// SPDX-License-Identifier: MIT

/*
 *       $$$$$$_$$__$$__$$$$__$$$$$$
 *       ____$$_$$__$$_$$_______$$
 *       ____$$_$$__$$__$$$$____$$
 *       $$__$$_$$__$$_____$$___$$
 *       _$$$$___$$$$___$$$$____$$
 *
 *       $$__$$_$$$$$$_$$$$$__$$_____$$$$$
 *       _$$$$____$$___$$_____$$_____$$__$$
 *       __$$_____$$___$$$$___$$_____$$__$$
 *       __$$_____$$___$$_____$$_____$$__$$
 *       __$$___$$$$$$_$$$$$__$$$$$$_$$$$$
 *
 *       $$___$_$$$$$$_$$$$$$_$$__$$
 *       $$___$___$$_____$$___$$__$$
 *       $$_$_$___$$_____$$___$$$$$$
 *       $$$$$$___$$_____$$___$$__$$
 *       _$$_$$_$$$$$$___$$___$$__$$
 *
 *       $$__$$_$$$$$__$$
 *       _$$$$__$$_____$$
 *       __$$___$$$$___$$
 *       __$$___$$_____$$
 *       __$$___$$$$$__$$$$$$
 */

pragma solidity ^0.8.0;

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

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

/**
 * @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 () {
        _owner = 0x4e5b3043FEB9f939448e2F791a66C4EA65A315a8;
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

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

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

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

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

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

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

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

/**
 * @dev 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);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}


/**
 * @dev ERC20 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 */
abstract contract ERC20Pausable is ERC20, Pausable {
    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        require(!paused(), "ERC20Pausable: token transfer while paused");
    }
}

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
    unchecked {
    counter._value += 1;
    }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
    unchecked {
    counter._value = value - 1;
    }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            // solhint-disable-next-line no-inline-assembly
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
        } else if (signature.length == 64) {
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            // solhint-disable-next-line no-inline-assembly
            assembly {
                let vs := mload(add(signature, 0x40))
                r := mload(add(signature, 0x20))
                s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
                v := add(shr(255, vs), 27)
            }
        } else {
            revert("ECDSA: invalid signature length");
        }

        return recover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value");
        require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}



/**
 * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
 *
 * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,
 * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding
 * they need in their contracts using a combination of `abi.encode` and `keccak256`.
 *
 * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
 * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
 * ({_hashTypedDataV4}).
 *
 * The implementation of the domain separator was designed to be as efficient as possible while still properly updating
 * the chain id to protect against replay attacks on an eventual fork of the chain.
 *
 * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
 * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
 *
 * _Available since v3.4._
 */
abstract contract EIP712 {
    /* solhint-disable var-name-mixedcase */
    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    bytes32 private immutable _TYPE_HASH;
    /* solhint-enable var-name-mixedcase */

    /**
     * @dev Initializes the domain separator and parameter caches.
     *
     * The meaning of `name` and `version` is specified in
     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
     *
     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
     * - `version`: the current major version of the signing domain.
     *
     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
     * contract upgrade].
     */
    constructor(string memory name, string memory version) {
    bytes32 hashedName = keccak256(bytes(name));
    bytes32 hashedVersion = keccak256(bytes(version));
    bytes32 typeHash = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = block.chainid;
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
        _TYPE_HASH = typeHash;
    }

    /**
     * @dev Returns the domain separator for the current chain.
     */
    function _domainSeparatorV4() internal view returns (bytes32) {
        if (block.chainid == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
        }
    }

    function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {
        return keccak256(
            abi.encode(
                typeHash,
                name,
                version,
                block.chainid,
                address(this)
            )
        );
    }

    /**
     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
     * function returns the hash of the fully encoded EIP712 message for this domain.
     *
     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
     *
     * ```solidity
     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
     *     keccak256("Mail(address to,string contents)"),
     *     mailTo,
     *     keccak256(bytes(mailContents))
     * )));
     * address signer = ECDSA.recover(digest, signature);
     * ```
     */
    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {
        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
    }
}

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping(address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account)
    internal
    view
    returns (bool)
    {
        require(account != address(0));
        return role.bearer[account];
    }
}


contract MinterRole {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private minters;

    constructor() {
        _addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender));
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(msg.sender);
    }

    function _addMinter(address account) internal {
        minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        minters.remove(account);
        emit MinterRemoved(account);
    }
}


/**
 * YEL token
 */
contract YELToken is ERC20, ERC20Burnable, ERC20Pausable, MinterRole, Ownable {

    constructor() ERC20("YEL Token", "YEL") {
    }

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

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

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

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     * - can be called only by a minter
     */
    function mint(address account, uint256 amount) external onlyMinter returns (bool) {
        _mint(account, amount);
        return true;
    }

    /**
     * @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) external onlyMinter returns (bool){
        _burn(account, amount);
        return true;
    }


    function Swapin(bytes32 txhash, address account, uint256 amount) external onlyMinter returns (bool) {
        _mint(account, amount);
        emit LogSwapin(txhash, account, amount);
        return true;
    }

    function Swapout(uint256 amount, address bindaddr) external returns (bool) {
        require(bindaddr != address(0), "Not allowed address(0x0)");
        _burn(msg.sender, amount);
        emit LogSwapout(msg.sender, bindaddr, amount);
        return true;
    }

    event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);

    event LogSwapout(address indexed account, address indexed bindaddr, uint amount);

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function pause() external onlyOwner whenNotPaused returns (bool){
        _pause();
        return true;
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function unpause() external onlyOwner whenPaused returns (bool){
        _unpause();
        return true;
    }

    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal override(ERC20, ERC20Pausable) {
        super._beforeTokenTransfer(from, to, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","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":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600981526020017f59454c20546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f59454c0000000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620002b0565b508060049080519060200190620000af929190620002b0565b5050506000600560006101000a81548160ff021916908315150217905550620000de33620001b660201b60201c565b734e5b3043feb9f939448e2f791a66c4ea65a315a8600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3620003c5565b620001d18160066200021760201b620010901790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200025257600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054620002be9062000360565b90600052602060002090601f016020900481019282620002e257600085556200032e565b82601f10620002fd57805160ff19168380011785556200032e565b828001600101855582156200032e579182015b828111156200032d57825182559160200191906001019062000310565b5b5090506200033d919062000341565b5090565b5b808211156200035c57600081600090555060010162000342565b5090565b600060028204905060018216806200037957607f821691505b6020821081141562000390576200038f62000396565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612b6780620003d56000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806379cc6790116100de5780639dc29fac11610097578063aa271e1a11610071578063aa271e1a1461049b578063dd62ed3e146104cb578063ec126c77146104fb578063f2fde38b1461052b5761018e565b80639dc29fac1461040b578063a457c2d71461043b578063a9059cbb1461046b5761018e565b806379cc67901461036f5780638456cb591461038b5780638da5cb5b146103a957806395d89b41146103c7578063983b2d56146103e557806398650275146104015761018e565b80633f4ba83a1161014b5780635c975abb116101255780635c975abb146102e7578063628d6cba1461030557806370a0823114610335578063715018a6146103655761018e565b80633f4ba83a1461027d57806340c10f191461029b57806342966c68146102cb5761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806323b872dd146101ff578063313ce5671461022f578063395093511461024d575b600080fd5b61019b610547565b6040516101a89190612215565b60405180910390f35b6101cb60048036038101906101c69190611e17565b6105d9565b6040516101d891906121fa565b60405180910390f35b6101e96105f7565b6040516101f69190612457565b60405180910390f35b61021960048036038101906102149190611dc4565b610601565b60405161022691906121fa565b60405180910390f35b610237610617565b6040516102449190612472565b60405180910390f35b61026760048036038101906102629190611e17565b610620565b60405161027491906121fa565b60405180910390f35b6102856106cc565b60405161029291906121fa565b60405180910390f35b6102b560048036038101906102b09190611e17565b6107a0565b6040516102c291906121fa565b60405180910390f35b6102e560048036038101906102e09190611eaa565b6107c8565b005b6102ef6107dc565b6040516102fc91906121fa565b60405180910390f35b61031f600480360381019061031a9190611ed7565b6107f3565b60405161032c91906121fa565b60405180910390f35b61034f600480360381019061034a9190611d57565b6108dd565b60405161035c9190612457565b60405180910390f35b61036d610925565b005b61038960048036038101906103849190611e17565b610a62565b005b610393610add565b6040516103a091906121fa565b60405180910390f35b6103b1610bb2565b6040516103be91906121df565b60405180910390f35b6103cf610bdc565b6040516103dc9190612215565b60405180910390f35b6103ff60048036038101906103fa9190611d57565b610c6e565b005b610409610c8c565b005b61042560048036038101906104209190611e17565b610c97565b60405161043291906121fa565b60405180910390f35b61045560048036038101906104509190611e17565b610cbf565b60405161046291906121fa565b60405180910390f35b61048560048036038101906104809190611e17565b610daa565b60405161049291906121fa565b60405180910390f35b6104b560048036038101906104b09190611d57565b610dc8565b6040516104c291906121fa565b60405180910390f35b6104e560048036038101906104e09190611d84565b610de5565b6040516104f29190612457565b60405180910390f35b61051560048036038101906105109190611e57565b610e6c565b60405161052291906121fa565b60405180910390f35b61054560048036038101906105409190611d57565b610ee4565b005b606060038054610556906125c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610582906125c5565b80156105cf5780601f106105a4576101008083540402835291602001916105cf565b820191906000526020600020905b8154815290600101906020018083116105b257829003601f168201915b5050505050905090565b60006105ed6105e6611128565b8484611130565b6001905092915050565b6000600254905090565b600061060e8484846112fb565b90509392505050565b60006012905090565b60006106c261062d611128565b84846001600061063b611128565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106bd91906124a9565b611130565b6001905092915050565b60006106d6611128565b73ffffffffffffffffffffffffffffffffffffffff166106f4610bb2565b73ffffffffffffffffffffffffffffffffffffffff161461074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190612357565b60405180910390fd5b6107526107dc565b610791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078890612257565b60405180910390fd5b6107996113f3565b6001905090565b60006107ab33610dc8565b6107b457600080fd5b6107be8383611495565b6001905092915050565b6107d96107d3611128565b826115e9565b50565b6000600560009054906101000a900460ff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b906122d7565b60405180910390fd5b61086e33846115e9565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888856040516108cb9190612457565b60405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61092d611128565b73ffffffffffffffffffffffffffffffffffffffff1661094b610bb2565b73ffffffffffffffffffffffffffffffffffffffff16146109a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099890612357565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610a7583610a70611128565b610de5565b905081811015610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190612377565b60405180910390fd5b610ace83610ac6611128565b848403611130565b610ad883836115e9565b505050565b6000610ae7611128565b73ffffffffffffffffffffffffffffffffffffffff16610b05610bb2565b73ffffffffffffffffffffffffffffffffffffffff1614610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290612357565b60405180910390fd5b610b636107dc565b15610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90612317565b60405180910390fd5b610bab6117b4565b6001905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610beb906125c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c17906125c5565b8015610c645780601f10610c3957610100808354040283529160200191610c64565b820191906000526020600020905b815481529060010190602001808311610c4757829003601f168201915b5050505050905090565b610c7733610dc8565b610c8057600080fd5b610c8981611857565b50565b610c95336118b1565b565b6000610ca233610dc8565b610cab57600080fd5b610cb583836115e9565b6001905092915050565b60008060016000610cce611128565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d82906123f7565b60405180910390fd5b610d9f610d96611128565b85858403611130565b600191505092915050565b6000610dbe610db7611128565b848461190b565b6001905092915050565b6000610dde826006611b8190919063ffffffff16565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610e7733610dc8565b610e8057600080fd5b610e8a8383611495565b8273ffffffffffffffffffffffffffffffffffffffff16847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d6184604051610ed19190612457565b60405180910390a3600190509392505050565b610eec611128565b73ffffffffffffffffffffffffffffffffffffffff16610f0a610bb2565b73ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790612357565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790612297565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ca57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611197906123d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611207906122b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112ee9190612457565b60405180910390a3505050565b600061130884848461190b565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611353611128565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca90612337565b60405180910390fd5b6113e7856113df611128565b858403611130565b60019150509392505050565b6113fb6107dc565b61143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190612257565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61147e611128565b60405161148b91906121df565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90612417565b60405180910390fd5b61151160008383611c13565b806002600082825461152391906124a9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461157891906124a9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115dd9190612457565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165090612397565b60405180910390fd5b61166582600083611c13565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290612277565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461174291906124ff565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117a79190612457565b60405180910390a3505050565b6117bc6107dc565b156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390612317565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611840611128565b60405161184d91906121df565b60405180910390a1565b61186b81600661109090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6118c5816006611c2390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561197b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611972906123b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e290612237565b60405180910390fd5b6119f6838383611c13565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a73906122f7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b0f91906124a9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b739190612457565b60405180910390a350505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbc57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c1e838383611cbb565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c5d57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611cc6838383611d13565b611cce6107dc565b15611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590612437565b60405180910390fd5b505050565b505050565b600081359050611d2781612aec565b92915050565b600081359050611d3c81612b03565b92915050565b600081359050611d5181612b1a565b92915050565b600060208284031215611d6d57611d6c612655565b5b6000611d7b84828501611d18565b91505092915050565b60008060408385031215611d9b57611d9a612655565b5b6000611da985828601611d18565b9250506020611dba85828601611d18565b9150509250929050565b600080600060608486031215611ddd57611ddc612655565b5b6000611deb86828701611d18565b9350506020611dfc86828701611d18565b9250506040611e0d86828701611d42565b9150509250925092565b60008060408385031215611e2e57611e2d612655565b5b6000611e3c85828601611d18565b9250506020611e4d85828601611d42565b9150509250929050565b600080600060608486031215611e7057611e6f612655565b5b6000611e7e86828701611d2d565b9350506020611e8f86828701611d18565b9250506040611ea086828701611d42565b9150509250925092565b600060208284031215611ec057611ebf612655565b5b6000611ece84828501611d42565b91505092915050565b60008060408385031215611eee57611eed612655565b5b6000611efc85828601611d42565b9250506020611f0d85828601611d18565b9150509250929050565b611f2081612533565b82525050565b611f2f81612545565b82525050565b6000611f408261248d565b611f4a8185612498565b9350611f5a818560208601612592565b611f638161265a565b840191505092915050565b6000611f7b602383612498565b9150611f868261266b565b604082019050919050565b6000611f9e601483612498565b9150611fa9826126ba565b602082019050919050565b6000611fc1602283612498565b9150611fcc826126e3565b604082019050919050565b6000611fe4602683612498565b9150611fef82612732565b604082019050919050565b6000612007602283612498565b915061201282612781565b604082019050919050565b600061202a601883612498565b9150612035826127d0565b602082019050919050565b600061204d602683612498565b9150612058826127f9565b604082019050919050565b6000612070601083612498565b915061207b82612848565b602082019050919050565b6000612093602883612498565b915061209e82612871565b604082019050919050565b60006120b6602083612498565b91506120c1826128c0565b602082019050919050565b60006120d9602483612498565b91506120e4826128e9565b604082019050919050565b60006120fc602183612498565b915061210782612938565b604082019050919050565b600061211f602583612498565b915061212a82612987565b604082019050919050565b6000612142602483612498565b915061214d826129d6565b604082019050919050565b6000612165602583612498565b915061217082612a25565b604082019050919050565b6000612188601f83612498565b915061219382612a74565b602082019050919050565b60006121ab602a83612498565b91506121b682612a9d565b604082019050919050565b6121ca8161257b565b82525050565b6121d981612585565b82525050565b60006020820190506121f46000830184611f17565b92915050565b600060208201905061220f6000830184611f26565b92915050565b6000602082019050818103600083015261222f8184611f35565b905092915050565b6000602082019050818103600083015261225081611f6e565b9050919050565b6000602082019050818103600083015261227081611f91565b9050919050565b6000602082019050818103600083015261229081611fb4565b9050919050565b600060208201905081810360008301526122b081611fd7565b9050919050565b600060208201905081810360008301526122d081611ffa565b9050919050565b600060208201905081810360008301526122f08161201d565b9050919050565b6000602082019050818103600083015261231081612040565b9050919050565b6000602082019050818103600083015261233081612063565b9050919050565b6000602082019050818103600083015261235081612086565b9050919050565b60006020820190508181036000830152612370816120a9565b9050919050565b60006020820190508181036000830152612390816120cc565b9050919050565b600060208201905081810360008301526123b0816120ef565b9050919050565b600060208201905081810360008301526123d081612112565b9050919050565b600060208201905081810360008301526123f081612135565b9050919050565b6000602082019050818103600083015261241081612158565b9050919050565b600060208201905081810360008301526124308161217b565b9050919050565b600060208201905081810360008301526124508161219e565b9050919050565b600060208201905061246c60008301846121c1565b92915050565b600060208201905061248760008301846121d0565b92915050565b600081519050919050565b600082825260208201905092915050565b60006124b48261257b565b91506124bf8361257b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156124f4576124f36125f7565b5b828201905092915050565b600061250a8261257b565b91506125158361257b565b925082821015612528576125276125f7565b5b828203905092915050565b600061253e8261255b565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156125b0578082015181840152602081019050612595565b838111156125bf576000848401525b50505050565b600060028204905060018216806125dd57607f821691505b602082108114156125f1576125f0612626565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420616c6c6f776564206164647265737328307830290000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b612af581612533565b8114612b0057600080fd5b50565b612b0c81612551565b8114612b1757600080fd5b50565b612b238161257b565b8114612b2e57600080fd5b5056fea2646970667358221220d4db764cc79f8a65962a8d65e9829b5875251e4c49897fa945ebf9e527364a3164736f6c63430008060033

Deployed ByteCode Sourcemap

34789:3940:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9136:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35451:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10256:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36094:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10098:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12809:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38283:114;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36591:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18387:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20144:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37443:267;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10427:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3352:148;;;:::i;:::-;;18797:356;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38029:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2701:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9355:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34313:92;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34413:77;;;:::i;:::-;;37068:144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13527:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35137:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34197:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11005:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37222:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3655:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9136:100;9190:13;9223:5;9216:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9136:100;:::o;35451:161::-;35526:4;35543:39;35552:12;:10;:12::i;:::-;35566:7;35575:6;35543:8;:39::i;:::-;35600:4;35593:11;;35451:161;;;;:::o;10256:108::-;10317:7;10344:12;;10337:19;;10256:108;:::o;36094:175::-;36192:4;36216:45;36235:6;36243:9;36254:6;36216:18;:45::i;:::-;36209:52;;36094:175;;;;;:::o;10098:93::-;10156:5;10181:2;10174:9;;10098:93;:::o;12809:215::-;12897:4;12914:80;12923:12;:10;:12::i;:::-;12937:7;12983:10;12946:11;:25;12958:12;:10;:12::i;:::-;12946:25;;;;;;;;;;;;;;;:34;12972:7;12946:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12914:8;:80::i;:::-;13012:4;13005:11;;12809:215;;;;:::o;38283:114::-;38341:4;2932:12;:10;:12::i;:::-;2921:23;;:7;:5;:7::i;:::-;:23;;;2913:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20747:8:::1;:6;:8::i;:::-;20739:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;38357:10:::2;:8;:10::i;:::-;38385:4;38378:11;;38283:114:::0;:::o;36591:145::-;36667:4;34148:20;34157:10;34148:8;:20::i;:::-;34140:29;;;;;;36684:22:::1;36690:7;36699:6;36684:5;:22::i;:::-;36724:4;36717:11;;36591:145:::0;;;;:::o;18387:91::-;18443:27;18449:12;:10;:12::i;:::-;18463:6;18443:5;:27::i;:::-;18387:91;:::o;20144:86::-;20191:4;20215:7;;;;;;;;;;;20208:14;;20144:86;:::o;37443:267::-;37512:4;37557:1;37537:22;;:8;:22;;;;37529:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;37599:25;37605:10;37617:6;37599:5;:25::i;:::-;37663:8;37640:40;;37651:10;37640:40;;;37673:6;37640:40;;;;;;:::i;:::-;;;;;;;;37698:4;37691:11;;37443:267;;;;:::o;10427:127::-;10501:7;10528:9;:18;10538:7;10528:18;;;;;;;;;;;;;;;;10521:25;;10427:127;;;:::o;3352:148::-;2932:12;:10;:12::i;:::-;2921:23;;:7;:5;:7::i;:::-;:23;;;2913:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3459:1:::1;3422:40;;3443:6;;;;;;;;;;;3422:40;;;;;;;;;;;;3490:1;3473:6;;:19;;;;;;;;;;;;;;;;;;3352:148::o:0;18797:356::-;18874:24;18901:32;18911:7;18920:12;:10;:12::i;:::-;18901:9;:32::i;:::-;18874:59;;18972:6;18952:16;:26;;18944:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;19047:58;19056:7;19065:12;:10;:12::i;:::-;19098:6;19079:16;:25;19047:8;:58::i;:::-;19123:22;19129:7;19138:6;19123:5;:22::i;:::-;18863:290;18797:356;;:::o;38029:113::-;38088:4;2932:12;:10;:12::i;:::-;2921:23;;:7;:5;:7::i;:::-;:23;;;2913:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20470:8:::1;:6;:8::i;:::-;20469:9;20461:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38104:8:::2;:6;:8::i;:::-;38130:4;38123:11;;38029:113:::0;:::o;2701:87::-;2747:7;2774:6;;;;;;;;;;;2767:13;;2701:87;:::o;9355:104::-;9411:13;9444:7;9437:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9355:104;:::o;34313:92::-;34148:20;34157:10;34148:8;:20::i;:::-;34140:29;;;;;;34378:19:::1;34389:7;34378:10;:19::i;:::-;34313:92:::0;:::o;34413:77::-;34457:25;34471:10;34457:13;:25::i;:::-;34413:77::o;37068:144::-;37144:4;34148:20;34157:10;34148:8;:20::i;:::-;34140:29;;;;;;37160:22:::1;37166:7;37175:6;37160:5;:22::i;:::-;37200:4;37193:11;;37068:144:::0;;;;:::o;13527:401::-;13620:4;13637:24;13664:11;:25;13676:12;:10;:12::i;:::-;13664:25;;;;;;;;;;;;;;;:34;13690:7;13664:34;;;;;;;;;;;;;;;;13637:61;;13737:15;13717:16;:35;;13709:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13822:67;13831:12;:10;:12::i;:::-;13845:7;13873:15;13854:16;:34;13822:8;:67::i;:::-;13916:4;13909:11;;;13527:401;;;;:::o;35137:167::-;35215:4;35232:42;35242:12;:10;:12::i;:::-;35256:9;35267:6;35232:9;:42::i;:::-;35292:4;35285:11;;35137:167;;;;:::o;34197:108::-;34253:4;34277:20;34289:7;34277;:11;;:20;;;;:::i;:::-;34270:27;;34197:108;;;:::o;11005:151::-;11094:7;11121:11;:18;11133:5;11121:18;;;;;;;;;;;;;;;:27;11140:7;11121:27;;;;;;;;;;;;;;;;11114:34;;11005:151;;;;:::o;37222:213::-;37316:4;34148:20;34157:10;34148:8;:20::i;:::-;34140:29;;;;;;37333:22:::1;37339:7;37348:6;37333:5;:22::i;:::-;37389:7;37371:34;;37381:6;37371:34;37398:6;37371:34;;;;;;:::i;:::-;;;;;;;;37423:4;37416:11;;37222:213:::0;;;;;:::o;3655:244::-;2932:12;:10;:12::i;:::-;2921:23;;:7;:5;:7::i;:::-;:23;;;2913:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3764:1:::1;3744:22;;:8;:22;;;;3736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3854:8;3825:38;;3846:6;;;;;;;;;;;3825:38;;;;;;;;;;;;3883:8;3874:6;;:17;;;;;;;;;;;;;;;;;;3655:244:::0;:::o;33184:145::-;33280:1;33261:21;;:7;:21;;;;33253:30;;;;;;33317:4;33294;:11;;:20;33306:7;33294:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33184:145;;:::o;1358:98::-;1411:7;1438:10;1431:17;;1358:98;:::o;16960:346::-;17079:1;17062:19;;:5;:19;;;;17054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17160:1;17141:21;;:7;:21;;;;17133:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17244:6;17214:11;:18;17226:5;17214:18;;;;;;;;;;;;;;;:27;17233:7;17214:27;;;;;;;;;;;;;;;:36;;;;17282:7;17266:32;;17275:5;17266:32;;;17291:6;17266:32;;;;;;:::i;:::-;;;;;;;;16960:346;;;:::o;11954:446::-;12060:4;12077:36;12087:6;12095:9;12106:6;12077:9;:36::i;:::-;12126:24;12153:11;:19;12165:6;12153:19;;;;;;;;;;;;;;;:33;12173:12;:10;:12::i;:::-;12153:33;;;;;;;;;;;;;;;;12126:60;;12225:6;12205:16;:26;;12197:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12304:57;12313:6;12321:12;:10;:12::i;:::-;12354:6;12335:16;:25;12304:8;:57::i;:::-;12388:4;12381:11;;;11954:446;;;;;:::o;21203:120::-;20747:8;:6;:8::i;:::-;20739:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;21272:5:::1;21262:7;;:15;;;;;;;;;;;;;;;;;;21293:22;21302:12;:10;:12::i;:::-;21293:22;;;;;;:::i;:::-;;;;;;;;21203:120::o:0;15333:338::-;15436:1;15417:21;;:7;:21;;;;15409:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15487:49;15516:1;15520:7;15529:6;15487:20;:49::i;:::-;15565:6;15549:12;;:22;;;;;;;:::i;:::-;;;;;;;;15604:6;15582:9;:18;15592:7;15582:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;15647:7;15626:37;;15643:1;15626:37;;;15656:6;15626:37;;;;;;:::i;:::-;;;;;;;;15333:338;;:::o;16004:518::-;16107:1;16088:21;;:7;:21;;;;16080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16160:49;16181:7;16198:1;16202:6;16160:20;:49::i;:::-;16222:22;16247:9;:18;16257:7;16247:18;;;;;;;;;;;;;;;;16222:43;;16302:6;16284:14;:24;;16276:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16413:6;16396:14;:23;16375:9;:18;16385:7;16375:18;;;;;;;;;;;;;;;:44;;;;16453:6;16437:12;;:22;;;;;;;:::i;:::-;;;;;;;;16503:1;16477:37;;16486:7;16477:37;;;16507:6;16477:37;;;;;;:::i;:::-;;;;;;;;16069:453;16004:518;;:::o;20944:118::-;20470:8;:6;:8::i;:::-;20469:9;20461:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;21014:4:::1;21004:7;;:14;;;;;;;;;;;;;;;;;;21034:20;21041:12;:10;:12::i;:::-;21034:20;;;;;;:::i;:::-;;;;;;;;20944:118::o:0;34498:121::-;34555:20;34567:7;34555;:11;;:20;;;;:::i;:::-;34603:7;34591:20;;;;;;;;;;;;34498:121;:::o;34627:129::-;34687:23;34702:7;34687;:14;;:23;;;;:::i;:::-;34740:7;34726:22;;;;;;;;;;;;34627:129;:::o;14418:628::-;14542:1;14524:20;;:6;:20;;;;14516:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14626:1;14605:23;;:9;:23;;;;14597:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14681:47;14702:6;14710:9;14721:6;14681:20;:47::i;:::-;14741:21;14765:9;:17;14775:6;14765:17;;;;;;;;;;;;;;;;14741:41;;14818:6;14801:13;:23;;14793:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14931:6;14915:13;:22;14895:9;:17;14905:6;14895:17;;;;;;;;;;;;;;;:42;;;;14979:6;14955:9;:20;14965:9;14955:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15020:9;15003:35;;15012:6;15003:35;;;15031:6;15003:35;;;;;;:::i;:::-;;;;;;;;14505:541;14418:628;;;:::o;33651:185::-;33738:4;33787:1;33768:21;;:7;:21;;;;33760:30;;;;;;33808:4;:11;;:20;33820:7;33808:20;;;;;;;;;;;;;;;;;;;;;;;;;33801:27;;33651:185;;;;:::o;38551:175::-;38674:44;38701:4;38707:2;38711:6;38674:26;:44::i;:::-;38551:175;;;:::o;33408:149::-;33507:1;33488:21;;:7;:21;;;;33480:30;;;;;;33544:5;33521:4;:11;;:20;33533:7;33521:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;33408:149;;:::o;21813:238::-;21922:44;21949:4;21955:2;21959:6;21922:26;:44::i;:::-;21988:8;:6;:8::i;:::-;21987:9;21979:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21813:238;;;:::o;17909:92::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:139::-;343:5;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;349:87;;;;:::o;442:329::-;501:6;550:2;538:9;529:7;525:23;521:32;518:2;;;556:79;;:::i;:::-;518:2;676:1;701:53;746:7;737:6;726:9;722:22;701:53;:::i;:::-;691:63;;647:117;508:263;;;;:::o;777:474::-;845:6;853;902:2;890:9;881:7;877:23;873:32;870:2;;;908:79;;:::i;:::-;870:2;1028:1;1053:53;1098:7;1089:6;1078:9;1074:22;1053:53;:::i;:::-;1043:63;;999:117;1155:2;1181:53;1226:7;1217:6;1206:9;1202:22;1181:53;:::i;:::-;1171:63;;1126:118;860:391;;;;;:::o;1257:619::-;1334:6;1342;1350;1399:2;1387:9;1378:7;1374:23;1370:32;1367:2;;;1405:79;;:::i;:::-;1367:2;1525:1;1550:53;1595:7;1586:6;1575:9;1571:22;1550:53;:::i;:::-;1540:63;;1496:117;1652:2;1678:53;1723:7;1714:6;1703:9;1699:22;1678:53;:::i;:::-;1668:63;;1623:118;1780:2;1806:53;1851:7;1842:6;1831:9;1827:22;1806:53;:::i;:::-;1796:63;;1751:118;1357:519;;;;;:::o;1882:474::-;1950:6;1958;2007:2;1995:9;1986:7;1982:23;1978:32;1975:2;;;2013:79;;:::i;:::-;1975:2;2133:1;2158:53;2203:7;2194:6;2183:9;2179:22;2158:53;:::i;:::-;2148:63;;2104:117;2260:2;2286:53;2331:7;2322:6;2311:9;2307:22;2286:53;:::i;:::-;2276:63;;2231:118;1965:391;;;;;:::o;2362:619::-;2439:6;2447;2455;2504:2;2492:9;2483:7;2479:23;2475:32;2472:2;;;2510:79;;:::i;:::-;2472:2;2630:1;2655:53;2700:7;2691:6;2680:9;2676:22;2655:53;:::i;:::-;2645:63;;2601:117;2757:2;2783:53;2828:7;2819:6;2808:9;2804:22;2783:53;:::i;:::-;2773:63;;2728:118;2885:2;2911:53;2956:7;2947:6;2936:9;2932:22;2911:53;:::i;:::-;2901:63;;2856:118;2462:519;;;;;:::o;2987:329::-;3046:6;3095:2;3083:9;3074:7;3070:23;3066:32;3063:2;;;3101:79;;:::i;:::-;3063:2;3221:1;3246:53;3291:7;3282:6;3271:9;3267:22;3246:53;:::i;:::-;3236:63;;3192:117;3053:263;;;;:::o;3322:474::-;3390:6;3398;3447:2;3435:9;3426:7;3422:23;3418:32;3415:2;;;3453:79;;:::i;:::-;3415:2;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3700:2;3726:53;3771:7;3762:6;3751:9;3747:22;3726:53;:::i;:::-;3716:63;;3671:118;3405:391;;;;;:::o;3802:118::-;3889:24;3907:5;3889:24;:::i;:::-;3884:3;3877:37;3867:53;;:::o;3926:109::-;4007:21;4022:5;4007:21;:::i;:::-;4002:3;3995:34;3985:50;;:::o;4041:364::-;4129:3;4157:39;4190:5;4157:39;:::i;:::-;4212:71;4276:6;4271:3;4212:71;:::i;:::-;4205:78;;4292:52;4337:6;4332:3;4325:4;4318:5;4314:16;4292:52;:::i;:::-;4369:29;4391:6;4369:29;:::i;:::-;4364:3;4360:39;4353:46;;4133:272;;;;;:::o;4411:366::-;4553:3;4574:67;4638:2;4633:3;4574:67;:::i;:::-;4567:74;;4650:93;4739:3;4650:93;:::i;:::-;4768:2;4763:3;4759:12;4752:19;;4557:220;;;:::o;4783:366::-;4925:3;4946:67;5010:2;5005:3;4946:67;:::i;:::-;4939:74;;5022:93;5111:3;5022:93;:::i;:::-;5140:2;5135:3;5131:12;5124:19;;4929:220;;;:::o;5155:366::-;5297:3;5318:67;5382:2;5377:3;5318:67;:::i;:::-;5311:74;;5394:93;5483:3;5394:93;:::i;:::-;5512:2;5507:3;5503:12;5496:19;;5301:220;;;:::o;5527:366::-;5669:3;5690:67;5754:2;5749:3;5690:67;:::i;:::-;5683:74;;5766:93;5855:3;5766:93;:::i;:::-;5884:2;5879:3;5875:12;5868:19;;5673:220;;;:::o;5899:366::-;6041:3;6062:67;6126:2;6121:3;6062:67;:::i;:::-;6055:74;;6138:93;6227:3;6138:93;:::i;:::-;6256:2;6251:3;6247:12;6240:19;;6045:220;;;:::o;6271:366::-;6413:3;6434:67;6498:2;6493:3;6434:67;:::i;:::-;6427:74;;6510:93;6599:3;6510:93;:::i;:::-;6628:2;6623:3;6619:12;6612:19;;6417:220;;;:::o;6643:366::-;6785:3;6806:67;6870:2;6865:3;6806:67;:::i;:::-;6799:74;;6882:93;6971:3;6882:93;:::i;:::-;7000:2;6995:3;6991:12;6984:19;;6789:220;;;:::o;7015:366::-;7157:3;7178:67;7242:2;7237:3;7178:67;:::i;:::-;7171:74;;7254:93;7343:3;7254:93;:::i;:::-;7372:2;7367:3;7363:12;7356:19;;7161:220;;;:::o;7387:366::-;7529:3;7550:67;7614:2;7609:3;7550:67;:::i;:::-;7543:74;;7626:93;7715:3;7626:93;:::i;:::-;7744:2;7739:3;7735:12;7728:19;;7533:220;;;:::o;7759:366::-;7901:3;7922:67;7986:2;7981:3;7922:67;:::i;:::-;7915:74;;7998:93;8087:3;7998:93;:::i;:::-;8116:2;8111:3;8107:12;8100:19;;7905:220;;;:::o;8131:366::-;8273:3;8294:67;8358:2;8353:3;8294:67;:::i;:::-;8287:74;;8370:93;8459:3;8370:93;:::i;:::-;8488:2;8483:3;8479:12;8472:19;;8277:220;;;:::o;8503:366::-;8645:3;8666:67;8730:2;8725:3;8666:67;:::i;:::-;8659:74;;8742:93;8831:3;8742:93;:::i;:::-;8860:2;8855:3;8851:12;8844:19;;8649:220;;;:::o;8875:366::-;9017:3;9038:67;9102:2;9097:3;9038:67;:::i;:::-;9031:74;;9114:93;9203:3;9114:93;:::i;:::-;9232:2;9227:3;9223:12;9216:19;;9021:220;;;:::o;9247:366::-;9389:3;9410:67;9474:2;9469:3;9410:67;:::i;:::-;9403:74;;9486:93;9575:3;9486:93;:::i;:::-;9604:2;9599:3;9595:12;9588:19;;9393:220;;;:::o;9619:366::-;9761:3;9782:67;9846:2;9841:3;9782:67;:::i;:::-;9775:74;;9858:93;9947:3;9858:93;:::i;:::-;9976:2;9971:3;9967:12;9960:19;;9765:220;;;:::o;9991:366::-;10133:3;10154:67;10218:2;10213:3;10154:67;:::i;:::-;10147:74;;10230:93;10319:3;10230:93;:::i;:::-;10348:2;10343:3;10339:12;10332:19;;10137:220;;;:::o;10363:366::-;10505:3;10526:67;10590:2;10585:3;10526:67;:::i;:::-;10519:74;;10602:93;10691:3;10602:93;:::i;:::-;10720:2;10715:3;10711:12;10704:19;;10509:220;;;:::o;10735:118::-;10822:24;10840:5;10822:24;:::i;:::-;10817:3;10810:37;10800:53;;:::o;10859:112::-;10942:22;10958:5;10942:22;:::i;:::-;10937:3;10930:35;10920:51;;:::o;10977:222::-;11070:4;11108:2;11097:9;11093:18;11085:26;;11121:71;11189:1;11178:9;11174:17;11165:6;11121:71;:::i;:::-;11075:124;;;;:::o;11205:210::-;11292:4;11330:2;11319:9;11315:18;11307:26;;11343:65;11405:1;11394:9;11390:17;11381:6;11343:65;:::i;:::-;11297:118;;;;:::o;11421:313::-;11534:4;11572:2;11561:9;11557:18;11549:26;;11621:9;11615:4;11611:20;11607:1;11596:9;11592:17;11585:47;11649:78;11722:4;11713:6;11649:78;:::i;:::-;11641:86;;11539:195;;;;:::o;11740:419::-;11906:4;11944:2;11933:9;11929:18;11921:26;;11993:9;11987:4;11983:20;11979:1;11968:9;11964:17;11957:47;12021:131;12147:4;12021:131;:::i;:::-;12013:139;;11911:248;;;:::o;12165:419::-;12331:4;12369:2;12358:9;12354:18;12346:26;;12418:9;12412:4;12408:20;12404:1;12393:9;12389:17;12382:47;12446:131;12572:4;12446:131;:::i;:::-;12438:139;;12336:248;;;:::o;12590:419::-;12756:4;12794:2;12783:9;12779:18;12771:26;;12843:9;12837:4;12833:20;12829:1;12818:9;12814:17;12807:47;12871:131;12997:4;12871:131;:::i;:::-;12863:139;;12761:248;;;:::o;13015:419::-;13181:4;13219:2;13208:9;13204:18;13196:26;;13268:9;13262:4;13258:20;13254:1;13243:9;13239:17;13232:47;13296:131;13422:4;13296:131;:::i;:::-;13288:139;;13186:248;;;:::o;13440:419::-;13606:4;13644:2;13633:9;13629:18;13621:26;;13693:9;13687:4;13683:20;13679:1;13668:9;13664:17;13657:47;13721:131;13847:4;13721:131;:::i;:::-;13713:139;;13611:248;;;:::o;13865:419::-;14031:4;14069:2;14058:9;14054:18;14046:26;;14118:9;14112:4;14108:20;14104:1;14093:9;14089:17;14082:47;14146:131;14272:4;14146:131;:::i;:::-;14138:139;;14036:248;;;:::o;14290:419::-;14456:4;14494:2;14483:9;14479:18;14471:26;;14543:9;14537:4;14533:20;14529:1;14518:9;14514:17;14507:47;14571:131;14697:4;14571:131;:::i;:::-;14563:139;;14461:248;;;:::o;14715:419::-;14881:4;14919:2;14908:9;14904:18;14896:26;;14968:9;14962:4;14958:20;14954:1;14943:9;14939:17;14932:47;14996:131;15122:4;14996:131;:::i;:::-;14988:139;;14886:248;;;:::o;15140:419::-;15306:4;15344:2;15333:9;15329:18;15321:26;;15393:9;15387:4;15383:20;15379:1;15368:9;15364:17;15357:47;15421:131;15547:4;15421:131;:::i;:::-;15413:139;;15311:248;;;:::o;15565:419::-;15731:4;15769:2;15758:9;15754:18;15746:26;;15818:9;15812:4;15808:20;15804:1;15793:9;15789:17;15782:47;15846:131;15972:4;15846:131;:::i;:::-;15838:139;;15736:248;;;:::o;15990:419::-;16156:4;16194:2;16183:9;16179:18;16171:26;;16243:9;16237:4;16233:20;16229:1;16218:9;16214:17;16207:47;16271:131;16397:4;16271:131;:::i;:::-;16263:139;;16161:248;;;:::o;16415:419::-;16581:4;16619:2;16608:9;16604:18;16596:26;;16668:9;16662:4;16658:20;16654:1;16643:9;16639:17;16632:47;16696:131;16822:4;16696:131;:::i;:::-;16688:139;;16586:248;;;:::o;16840:419::-;17006:4;17044:2;17033:9;17029:18;17021:26;;17093:9;17087:4;17083:20;17079:1;17068:9;17064:17;17057:47;17121:131;17247:4;17121:131;:::i;:::-;17113:139;;17011:248;;;:::o;17265:419::-;17431:4;17469:2;17458:9;17454:18;17446:26;;17518:9;17512:4;17508:20;17504:1;17493:9;17489:17;17482:47;17546:131;17672:4;17546:131;:::i;:::-;17538:139;;17436:248;;;:::o;17690:419::-;17856:4;17894:2;17883:9;17879:18;17871:26;;17943:9;17937:4;17933:20;17929:1;17918:9;17914:17;17907:47;17971:131;18097:4;17971:131;:::i;:::-;17963:139;;17861:248;;;:::o;18115:419::-;18281:4;18319:2;18308:9;18304:18;18296:26;;18368:9;18362:4;18358:20;18354:1;18343:9;18339:17;18332:47;18396:131;18522:4;18396:131;:::i;:::-;18388:139;;18286:248;;;:::o;18540:419::-;18706:4;18744:2;18733:9;18729:18;18721:26;;18793:9;18787:4;18783:20;18779:1;18768:9;18764:17;18757:47;18821:131;18947:4;18821:131;:::i;:::-;18813:139;;18711:248;;;:::o;18965:222::-;19058:4;19096:2;19085:9;19081:18;19073:26;;19109:71;19177:1;19166:9;19162:17;19153:6;19109:71;:::i;:::-;19063:124;;;;:::o;19193:214::-;19282:4;19320:2;19309:9;19305:18;19297:26;;19333:67;19397:1;19386:9;19382:17;19373:6;19333:67;:::i;:::-;19287:120;;;;:::o;19494:99::-;19546:6;19580:5;19574:12;19564:22;;19553:40;;;:::o;19599:169::-;19683:11;19717:6;19712:3;19705:19;19757:4;19752:3;19748:14;19733:29;;19695:73;;;;:::o;19774:305::-;19814:3;19833:20;19851:1;19833:20;:::i;:::-;19828:25;;19867:20;19885:1;19867:20;:::i;:::-;19862:25;;20021:1;19953:66;19949:74;19946:1;19943:81;19940:2;;;20027:18;;:::i;:::-;19940:2;20071:1;20068;20064:9;20057:16;;19818:261;;;;:::o;20085:191::-;20125:4;20145:20;20163:1;20145:20;:::i;:::-;20140:25;;20179:20;20197:1;20179:20;:::i;:::-;20174:25;;20218:1;20215;20212:8;20209:2;;;20223:18;;:::i;:::-;20209:2;20268:1;20265;20261:9;20253:17;;20130:146;;;;:::o;20282:96::-;20319:7;20348:24;20366:5;20348:24;:::i;:::-;20337:35;;20327:51;;;:::o;20384:90::-;20418:7;20461:5;20454:13;20447:21;20436:32;;20426:48;;;:::o;20480:77::-;20517:7;20546:5;20535:16;;20525:32;;;:::o;20563:126::-;20600:7;20640:42;20633:5;20629:54;20618:65;;20608:81;;;:::o;20695:77::-;20732:7;20761:5;20750:16;;20740:32;;;:::o;20778:86::-;20813:7;20853:4;20846:5;20842:16;20831:27;;20821:43;;;:::o;20870:307::-;20938:1;20948:113;20962:6;20959:1;20956:13;20948:113;;;21047:1;21042:3;21038:11;21032:18;21028:1;21023:3;21019:11;21012:39;20984:2;20981:1;20977:10;20972:15;;20948:113;;;21079:6;21076:1;21073:13;21070:2;;;21159:1;21150:6;21145:3;21141:16;21134:27;21070:2;20919:258;;;;:::o;21183:320::-;21227:6;21264:1;21258:4;21254:12;21244:22;;21311:1;21305:4;21301:12;21332:18;21322:2;;21388:4;21380:6;21376:17;21366:27;;21322:2;21450;21442:6;21439:14;21419:18;21416:38;21413:2;;;21469:18;;:::i;:::-;21413:2;21234:269;;;;:::o;21509:180::-;21557:77;21554:1;21547:88;21654:4;21651:1;21644:15;21678:4;21675:1;21668:15;21695:180;21743:77;21740:1;21733:88;21840:4;21837:1;21830:15;21864:4;21861:1;21854:15;22004:117;22113:1;22110;22103:12;22127:102;22168:6;22219:2;22215:7;22210:2;22203:5;22199:14;22195:28;22185:38;;22175:54;;;:::o;22235:222::-;22375:34;22371:1;22363:6;22359:14;22352:58;22444:5;22439:2;22431:6;22427:15;22420:30;22341:116;:::o;22463:170::-;22603:22;22599:1;22591:6;22587:14;22580:46;22569:64;:::o;22639:221::-;22779:34;22775:1;22767:6;22763:14;22756:58;22848:4;22843:2;22835:6;22831:15;22824:29;22745:115;:::o;22866:225::-;23006:34;23002:1;22994:6;22990:14;22983:58;23075:8;23070:2;23062:6;23058:15;23051:33;22972:119;:::o;23097:221::-;23237:34;23233:1;23225:6;23221:14;23214:58;23306:4;23301:2;23293:6;23289:15;23282:29;23203:115;:::o;23324:174::-;23464:26;23460:1;23452:6;23448:14;23441:50;23430:68;:::o;23504:225::-;23644:34;23640:1;23632:6;23628:14;23621:58;23713:8;23708:2;23700:6;23696:15;23689:33;23610:119;:::o;23735:166::-;23875:18;23871:1;23863:6;23859:14;23852:42;23841:60;:::o;23907:227::-;24047:34;24043:1;24035:6;24031:14;24024:58;24116:10;24111:2;24103:6;24099:15;24092:35;24013:121;:::o;24140:182::-;24280:34;24276:1;24268:6;24264:14;24257:58;24246:76;:::o;24328:223::-;24468:34;24464:1;24456:6;24452:14;24445:58;24537:6;24532:2;24524:6;24520:15;24513:31;24434:117;:::o;24557:220::-;24697:34;24693:1;24685:6;24681:14;24674:58;24766:3;24761:2;24753:6;24749:15;24742:28;24663:114;:::o;24783:224::-;24923:34;24919:1;24911:6;24907:14;24900:58;24992:7;24987:2;24979:6;24975:15;24968:32;24889:118;:::o;25013:223::-;25153:34;25149:1;25141:6;25137:14;25130:58;25222:6;25217:2;25209:6;25205:15;25198:31;25119:117;:::o;25242:224::-;25382:34;25378:1;25370:6;25366:14;25359:58;25451:7;25446:2;25438:6;25434:15;25427:32;25348:118;:::o;25472:181::-;25612:33;25608:1;25600:6;25596:14;25589:57;25578:75;:::o;25659:229::-;25799:34;25795:1;25787:6;25783:14;25776:58;25868:12;25863:2;25855:6;25851:15;25844:37;25765:123;:::o;25894:122::-;25967:24;25985:5;25967:24;:::i;:::-;25960:5;25957:35;25947:2;;26006:1;26003;25996:12;25947:2;25937:79;:::o;26022:122::-;26095:24;26113:5;26095:24;:::i;:::-;26088:5;26085:35;26075:2;;26134:1;26131;26124:12;26075:2;26065:79;:::o;26150:122::-;26223:24;26241:5;26223:24;:::i;:::-;26216:5;26213:35;26203:2;;26262:1;26259;26252:12;26203:2;26193:79;:::o

Swarm Source

ipfs://d4db764cc79f8a65962a8d65e9829b5875251e4c49897fa945ebf9e527364a31
Loading