Token Monsoon Finance

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
100,000,000 MCASH

Holders:
1,286 addresses
Contract:
0xa25610a77077390a75ad9072a084c5fbc7d43a0d0xa25610a77077390A75aD9072A084c5FbC7d43A0d

Decimals:
18

Social Profiles:
Not Available, Update ?

 
Balance
0 MCASH

Value
$0.00
0x0e43245f7af3cfb1d4838e6704f27d09a8b4b072
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MonsoonTokenWithPermit

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-22
*/

pragma solidity ^0.8.7;

/**
 * @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 {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. 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.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // 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) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @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) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // 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 (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): 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.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @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) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @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 nameHash,
        bytes32 versionHash
    ) private view returns (bytes32) {
        return keccak256(abi.encode(typeHash, nameHash, versionHash, 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 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 Implementation of the {IERC20} interface for Monsoon Finance (monsoon.finance). 
 * Monsoon Finance is a multi-chain privacy protocol that provides privacy services for every smart contracts blockchain.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract MonsoonTokenWithPermit is EIP712 {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    
    using Counters for Counters.Counter;

    mapping(address => Counters.Counter) private _nonces;
    
     // solhint-disable-next-line var-name-mixedcase
    bytes32 private immutable _PERMIT_TYPEHASH =
        keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    
    /**
     * @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 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_) EIP712(name_, "1") {
        _name = name_;
        _symbol = symbol_;
        _totalSupply = 100000000E18; // 100 million tokens
        _balances[msg.sender] = _totalSupply;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }
    
    /**
     * @dev See {IERC20Permit-permit}.
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(block.timestamp <= deadline, "ERC20Permit: expired deadline");

        bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline));

        bytes32 hash = _hashTypedDataV4(structHash);

        address signer = ECDSA.recover(hash, v, r, s);
        require(signer == owner, "ERC20Permit: invalid signature");

        _approve(owner, spender, value);
    }

    /**
     * @dev See {IERC20Permit-nonces}.
     */
    function nonces(address owner) public view virtual returns (uint256) {
        return _nonces[owner].current();
    }

    /**
     * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32) {
        return _domainSeparatorV4();
    }

    /**
     * @dev "Consume a nonce": return the current value and increment.
     *
     * _Available since v4.1._
     */
    function _useNonce(address owner) internal virtual returns (uint256 current) {
        Counters.Counter storage nonce = _nonces[owner];
        current = nonce.current();
        nonce.increment();
    }

    /**
     * @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 returns (uint8) {
        return 18;
    }

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

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

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

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, msg.sender, 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(msg.sender, spender, _allowances[msg.sender][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[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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


        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 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");


        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);

    }
    
    
    function burn(uint amount) external {
        _burn(msg.sender, 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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","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"}]

6101406040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120908152503480156200003a57600080fd5b5060405162002a0f38038062002a0f83398181016040528101906200006091906200030f565b816040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260c081815250508160e081815250504660a08181525050620000ff818484620001a560201b60201c565b60808181525050806101008181525050505050505081600390805190602001906200012c929190620001e1565b50806004908051906020019062000145929190620001e1565b506a52b7d2dcc80cd2e40000006002819055506002546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050620005f0565b60008383834630604051602001620001c2959493929190620003c7565b6040516020818303038152906040528051906020012090509392505050565b828054620001ef9062000501565b90600052602060002090601f0160209004810192826200021357600085556200025f565b82601f106200022e57805160ff19168380011785556200025f565b828001600101855582156200025f579182015b828111156200025e57825182559160200191906001019062000241565b5b5090506200026e919062000272565b5090565b5b808211156200028d57600081600090555060010162000273565b5090565b6000620002a8620002a2846200044d565b62000424565b905082815260208101848484011115620002c757620002c6620005d0565b5b620002d4848285620004cb565b509392505050565b600082601f830112620002f457620002f3620005cb565b5b81516200030684826020860162000291565b91505092915050565b60008060408385031215620003295762000328620005da565b5b600083015167ffffffffffffffff8111156200034a5762000349620005d5565b5b6200035885828601620002dc565b925050602083015167ffffffffffffffff8111156200037c576200037b620005d5565b5b6200038a85828601620002dc565b9150509250929050565b6200039f8162000483565b82525050565b620003b08162000497565b82525050565b620003c181620004c1565b82525050565b600060a082019050620003de6000830188620003a5565b620003ed6020830187620003a5565b620003fc6040830186620003a5565b6200040b6060830185620003b6565b6200041a608083018462000394565b9695505050505050565b60006200043062000443565b90506200043e828262000537565b919050565b6000604051905090565b600067ffffffffffffffff8211156200046b576200046a6200059c565b5b6200047682620005df565b9050602081019050919050565b60006200049082620004a1565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620004eb578082015181840152602081019050620004ce565b83811115620004fb576000848401525b50505050565b600060028204905060018216806200051a57607f821691505b602082108114156200053157620005306200056d565b5b50919050565b6200054282620005df565b810181811067ffffffffffffffff821117156200056457620005636200059c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60805160a05160c05160e05161010051610120516123cf62000640600039600061080d01526000610e1c01526000610e5e01526000610e3d01526000610dc901526000610df101526123cf6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806342966c6811610097578063a457c2d711610066578063a457c2d71461029c578063a9059cbb146102cc578063d505accf146102fc578063dd62ed3e14610318576100f5565b806342966c681461020257806370a082311461021e5780637ecebe001461024e57806395d89b411461027e576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce567146101965780633644e515146101b457806339509351146101d2576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610348565b60405161010f9190611ab1565b60405180910390f35b610132600480360381019061012d9190611613565b6103da565b60405161013f9190611982565b60405180910390f35b6101506103f1565b60405161015d9190611cb3565b60405180910390f35b610180600480360381019061017b919061151e565b6103fb565b60405161018d9190611982565b60405180910390f35b61019e6104e5565b6040516101ab9190611cce565b60405180910390f35b6101bc6104ee565b6040516101c9919061199d565b60405180910390f35b6101ec60048036038101906101e79190611613565b6104fd565b6040516101f99190611982565b60405180910390f35b61021c60048036038101906102179190611653565b61059b565b005b610238600480360381019061023391906114b1565b6105a8565b6040516102459190611cb3565b60405180910390f35b610268600480360381019061026391906114b1565b6105f0565b6040516102759190611cb3565b60405180910390f35b610286610640565b6040516102939190611ab1565b60405180910390f35b6102b660048036038101906102b19190611613565b6106d2565b6040516102c39190611982565b60405180910390f35b6102e660048036038101906102e19190611613565b6107af565b6040516102f39190611982565b60405180910390f35b61031660048036038101906103119190611571565b6107c6565b005b610332600480360381019061032d91906114de565b610908565b60405161033f9190611cb3565b60405180910390f35b60606003805461035790611e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461038390611e2c565b80156103d05780601f106103a5576101008083540402835291602001916103d0565b820191906000526020600020905b8154815290600101906020018083116103b357829003601f168201915b5050505050905090565b60006103e733848461098f565b6001905092915050565b6000600254905090565b6000610408848484610b5a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156104cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c390611c13565b60405180910390fd5b6104d9853385840361098f565b60019150509392505050565b60006012905090565b60006104f8610dc5565b905090565b6000610591338484600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461058c9190611d10565b61098f565b6001905092915050565b6105a53382610e88565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610639600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611047565b9050919050565b60606004805461064f90611e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461067b90611e2c565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b5050505050905090565b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078e90611c93565b60405180910390fd5b6107a4338585840361098f565b600191505092915050565b60006107bc338484610b5a565b6001905092915050565b83421115610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611b73565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008888886108388c611055565b8960405160200161084e969594939291906119b8565b6040516020818303038152906040528051906020012090506000610871826110b3565b90506000610881828787876110cd565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e890611bf3565b60405180910390fd5b6108fc8a8a8a61098f565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f690611c73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690611b53565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b4d9190611cb3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc190611c53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190611af3565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb790611b93565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d539190611d10565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610db79190611cb3565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610e17577f00000000000000000000000000000000000000000000000000000000000000009050610e85565b610e827f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006110f8565b90505b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90611c33565b60405180910390fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590611b13565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254610fd59190611d66565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161103a9190611cb3565b60405180910390a3505050565b600081600001549050919050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506110a281611047565b91506110ad81611132565b50919050565b60006110c66110c0610dc5565b83611148565b9050919050565b60008060006110de8787878761117b565b915091506110eb81611288565b8192505050949350505050565b60008383834630604051602001611113959493929190611a19565b6040516020818303038152906040528051906020012090509392505050565b6001816000016000828254019250508190555050565b6000828260405160200161115d92919061194b565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156111b657600060039150915061127f565b601b8560ff16141580156111ce5750601c8560ff1614155b156111e057600060049150915061127f565b6000600187878787604051600081526020016040526040516112059493929190611a6c565b6020604051602081039080840390855afa158015611227573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112765760006001925092505061127f565b80600092509250505b94509492505050565b6000600481111561129c5761129b611e97565b5b8160048111156112af576112ae611e97565b5b14156112ba5761145a565b600160048111156112ce576112cd611e97565b5b8160048111156112e1576112e0611e97565b5b1415611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990611ad3565b60405180910390fd5b6002600481111561133657611335611e97565b5b81600481111561134957611348611e97565b5b141561138a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138190611b33565b60405180910390fd5b6003600481111561139e5761139d611e97565b5b8160048111156113b1576113b0611e97565b5b14156113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e990611bb3565b60405180910390fd5b60048081111561140557611404611e97565b5b81600481111561141857611417611e97565b5b1415611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090611bd3565b60405180910390fd5b5b50565b60008135905061146c8161233d565b92915050565b60008135905061148181612354565b92915050565b6000813590506114968161236b565b92915050565b6000813590506114ab81612382565b92915050565b6000602082840312156114c7576114c6611ef5565b5b60006114d58482850161145d565b91505092915050565b600080604083850312156114f5576114f4611ef5565b5b60006115038582860161145d565b92505060206115148582860161145d565b9150509250929050565b60008060006060848603121561153757611536611ef5565b5b60006115458682870161145d565b93505060206115568682870161145d565b925050604061156786828701611487565b9150509250925092565b600080600080600080600060e0888a0312156115905761158f611ef5565b5b600061159e8a828b0161145d565b97505060206115af8a828b0161145d565b96505060406115c08a828b01611487565b95505060606115d18a828b01611487565b94505060806115e28a828b0161149c565b93505060a06115f38a828b01611472565b92505060c06116048a828b01611472565b91505092959891949750929550565b6000806040838503121561162a57611629611ef5565b5b60006116388582860161145d565b925050602061164985828601611487565b9150509250929050565b60006020828403121561166957611668611ef5565b5b600061167784828501611487565b91505092915050565b61168981611d9a565b82525050565b61169881611dac565b82525050565b6116a781611db8565b82525050565b6116be6116b982611db8565b611e5e565b82525050565b60006116cf82611ce9565b6116d98185611cf4565b93506116e9818560208601611df9565b6116f281611efa565b840191505092915050565b600061170a601883611cf4565b915061171582611f0b565b602082019050919050565b600061172d602383611cf4565b915061173882611f34565b604082019050919050565b6000611750602283611cf4565b915061175b82611f83565b604082019050919050565b6000611773601f83611cf4565b915061177e82611fd2565b602082019050919050565b6000611796602283611cf4565b91506117a182611ffb565b604082019050919050565b60006117b9600283611d05565b91506117c48261204a565b600282019050919050565b60006117dc601d83611cf4565b91506117e782612073565b602082019050919050565b60006117ff602683611cf4565b915061180a8261209c565b604082019050919050565b6000611822602283611cf4565b915061182d826120eb565b604082019050919050565b6000611845602283611cf4565b91506118508261213a565b604082019050919050565b6000611868601e83611cf4565b915061187382612189565b602082019050919050565b600061188b602883611cf4565b9150611896826121b2565b604082019050919050565b60006118ae602183611cf4565b91506118b982612201565b604082019050919050565b60006118d1602583611cf4565b91506118dc82612250565b604082019050919050565b60006118f4602483611cf4565b91506118ff8261229f565b604082019050919050565b6000611917602583611cf4565b9150611922826122ee565b604082019050919050565b61193681611de2565b82525050565b61194581611dec565b82525050565b6000611956826117ac565b915061196282856116ad565b60208201915061197282846116ad565b6020820191508190509392505050565b6000602082019050611997600083018461168f565b92915050565b60006020820190506119b2600083018461169e565b92915050565b600060c0820190506119cd600083018961169e565b6119da6020830188611680565b6119e76040830187611680565b6119f4606083018661192d565b611a01608083018561192d565b611a0e60a083018461192d565b979650505050505050565b600060a082019050611a2e600083018861169e565b611a3b602083018761169e565b611a48604083018661169e565b611a55606083018561192d565b611a626080830184611680565b9695505050505050565b6000608082019050611a81600083018761169e565b611a8e602083018661193c565b611a9b604083018561169e565b611aa8606083018461169e565b95945050505050565b60006020820190508181036000830152611acb81846116c4565b905092915050565b60006020820190508181036000830152611aec816116fd565b9050919050565b60006020820190508181036000830152611b0c81611720565b9050919050565b60006020820190508181036000830152611b2c81611743565b9050919050565b60006020820190508181036000830152611b4c81611766565b9050919050565b60006020820190508181036000830152611b6c81611789565b9050919050565b60006020820190508181036000830152611b8c816117cf565b9050919050565b60006020820190508181036000830152611bac816117f2565b9050919050565b60006020820190508181036000830152611bcc81611815565b9050919050565b60006020820190508181036000830152611bec81611838565b9050919050565b60006020820190508181036000830152611c0c8161185b565b9050919050565b60006020820190508181036000830152611c2c8161187e565b9050919050565b60006020820190508181036000830152611c4c816118a1565b9050919050565b60006020820190508181036000830152611c6c816118c4565b9050919050565b60006020820190508181036000830152611c8c816118e7565b9050919050565b60006020820190508181036000830152611cac8161190a565b9050919050565b6000602082019050611cc8600083018461192d565b92915050565b6000602082019050611ce3600083018461193c565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611d1b82611de2565b9150611d2683611de2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d5b57611d5a611e68565b5b828201905092915050565b6000611d7182611de2565b9150611d7c83611de2565b925082821015611d8f57611d8e611e68565b5b828203905092915050565b6000611da582611dc2565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611e17578082015181840152602081019050611dfc565b83811115611e26576000848401525b50505050565b60006002820490506001821680611e4457607f821691505b60208210811415611e5857611e57611ec6565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61234681611d9a565b811461235157600080fd5b50565b61235d81611db8565b811461236857600080fd5b50565b61237481611de2565b811461237f57600080fd5b50565b61238b81611dec565b811461239657600080fd5b5056fea264697066735822122066c5140b5b71ea521c0faac82bae2e9cbc2316633266e72bae120d39c1628f9364736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000f4d6f6e736f6f6e2046696e616e6365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d43415348000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000f4d6f6e736f6f6e2046696e616e6365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d43415348000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Monsoon Finance
Arg [1] : symbol_ (string): MCASH

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [3] : 4d6f6e736f6f6e2046696e616e63650000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 4d43415348000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

15960:10776:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17679:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21253:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20244:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21893:479;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20095:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19005:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22781:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25835:80;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20406:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18756:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17889:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23495:409;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20737:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18054:636;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20964:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17679:91;17724:13;17757:5;17750:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17679:91;:::o;21253:158::-;21327:4;21344:37;21353:10;21365:7;21374:6;21344:8;:37::i;:::-;21399:4;21392:11;;21253:158;;;;:::o;20244:99::-;20296:7;20323:12;;20316:19;;20244:99;:::o;21893:479::-;22024:4;22041:36;22051:6;22059:9;22070:6;22041:9;:36::i;:::-;22090:24;22117:11;:19;22129:6;22117:19;;;;;;;;;;;;;;;:31;22137:10;22117:31;;;;;;;;;;;;;;;;22090:58;;22187:6;22167:16;:26;;22159:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22274:55;22283:6;22291:10;22322:6;22303:16;:25;22274:8;:55::i;:::-;22360:4;22353:11;;;21893:479;;;;;:::o;20095:84::-;20144:5;20169:2;20162:9;;20095:84;:::o;19005:106::-;19056:7;19083:20;:18;:20::i;:::-;19076:27;;19005:106;:::o;22781:211::-;22869:4;22886:76;22895:10;22907:7;22951:10;22916:11;:23;22928:10;22916:23;;;;;;;;;;;;;;;:32;22940:7;22916:32;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;22886:8;:76::i;:::-;22980:4;22973:11;;22781:211;;;;:::o;25835:80::-;25882:25;25888:10;25900:6;25882:5;:25::i;:::-;25835:80;:::o;20406:118::-;20471:7;20498:9;:18;20508:7;20498:18;;;;;;;;;;;;;;;;20491:25;;20406:118;;;:::o;18756:119::-;18816:7;18843:24;:7;:14;18851:5;18843:14;;;;;;;;;;;;;;;:22;:24::i;:::-;18836:31;;18756:119;;;:::o;17889:95::-;17936:13;17969:7;17962:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17889:95;:::o;23495:409::-;23588:4;23605:24;23632:11;:23;23644:10;23632:23;;;;;;;;;;;;;;;:32;23656:7;23632:32;;;;;;;;;;;;;;;;23605:59;;23703:15;23683:16;:35;;23675:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23796:65;23805:10;23817:7;23845:15;23826:16;:34;23796:8;:65::i;:::-;23892:4;23885:11;;;23495:409;;;;:::o;20737:164::-;20814:4;20831:40;20841:10;20853:9;20864:6;20831:9;:40::i;:::-;20889:4;20882:11;;20737:164;;;;:::o;18054:636::-;18289:8;18270:15;:27;;18262:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;18344:18;18386:16;18404:5;18411:7;18420:5;18427:16;18437:5;18427:9;:16::i;:::-;18445:8;18375:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18365:90;;;;;;18344:111;;18468:12;18483:28;18500:10;18483:16;:28::i;:::-;18468:43;;18524:14;18541:28;18555:4;18561:1;18564;18567;18541:13;:28::i;:::-;18524:45;;18598:5;18588:15;;:6;:15;;;18580:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;18651:31;18660:5;18667:7;18676:5;18651:8;:31::i;:::-;18251:439;;;18054:636;;;;;;;:::o;20964:142::-;21044:7;21071:11;:18;21083:5;21071:18;;;;;;;;;;;;;;;:27;21090:7;21071:27;;;;;;;;;;;;;;;;21064:34;;20964:142;;;;:::o;26353:380::-;26506:1;26489:19;;:5;:19;;;;26481:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26587:1;26568:21;;:7;:21;;;;26560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26671:6;26641:11;:18;26653:5;26641:18;;;;;;;;;;;;;;;:27;26660:7;26641:27;;;;;;;;;;;;;;;:36;;;;26709:7;26693:32;;26702:5;26693:32;;;26718:6;26693:32;;;;;;:::i;:::-;;;;;;;;26353:380;;;:::o;24394:616::-;24552:1;24534:20;;:6;:20;;;;24526:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24636:1;24615:23;;:9;:23;;;;24607:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24693:21;24717:9;:17;24727:6;24717:17;;;;;;;;;;;;;;;;24693:41;;24770:6;24753:13;:23;;24745:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24891:6;24875:13;:22;24855:9;:17;24865:6;24855:17;;;;;;;;;;;;;;;:42;;;;24943:6;24919:9;:20;24929:9;24919:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;24984:9;24967:35;;24976:6;24967:35;;;24995:6;24967:35;;;;;;:::i;:::-;;;;;;;;24515:495;24394:616;;;:::o;11906:281::-;11959:7;12000:16;11983:13;:33;11979:201;;;12040:24;12033:31;;;;11979:201;12104:64;12126:10;12138:12;12152:15;12104:21;:64::i;:::-;12097:71;;11906:281;;:::o;25345:472::-;25448:1;25429:21;;:7;:21;;;;25421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25503:22;25528:9;:18;25538:7;25528:18;;;;;;;;;;;;;;;;25503:43;;25583:6;25565:14;:24;;25557:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25702:6;25685:14;:23;25664:9;:18;25674:7;25664:18;;;;;;;;;;;;;;;:44;;;;25746:6;25730:12;;:22;;;;;;;:::i;:::-;;;;;;;;25796:1;25770:37;;25779:7;25770:37;;;25800:6;25770:37;;;;;;:::i;:::-;;;;;;;;25410:407;25345:472;;:::o;14005:114::-;14070:7;14097;:14;;;14090:21;;14005:114;;;:::o;19249:207::-;19309:15;19337:30;19370:7;:14;19378:5;19370:14;;;;;;;;;;;;;;;19337:47;;19405:15;:5;:13;:15::i;:::-;19395:25;;19431:17;:5;:15;:17::i;:::-;19326:130;19249:207;;;:::o;13100:167::-;13177:7;13204:55;13226:20;:18;:20::i;:::-;13248:10;13204:21;:55::i;:::-;13197:62;;13100:167;;;:::o;7536:279::-;7664:7;7685:17;7704:18;7726:25;7737:4;7743:1;7746;7749;7726:10;:25::i;:::-;7684:67;;;;7762:18;7774:5;7762:11;:18::i;:::-;7798:9;7791:16;;;;7536:279;;;;;;:::o;12195:263::-;12339:7;12387:8;12397;12407:11;12420:13;12443:4;12376:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12366:84;;;;;;12359:91;;12195:263;;;;;:::o;14127:127::-;14234:1;14216:7;:14;;;:19;;;;;;;;;;;14127:127;:::o;8734:196::-;8827:7;8893:15;8910:10;8864:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8854:68;;;;;;8847:75;;8734:196;;;;:::o;5765:1632::-;5896:7;5905:12;6830:66;6825:1;6817:10;;:79;6813:163;;;6929:1;6933:30;6913:51;;;;;;6813:163;6995:2;6990:1;:7;;;;:18;;;;;7006:2;7001:1;:7;;;;6990:18;6986:102;;;7041:1;7045:30;7025:51;;;;;;6986:102;7185:14;7202:24;7212:4;7218:1;7221;7224;7202:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7185:41;;7259:1;7241:20;;:6;:20;;;7237:103;;;7294:1;7298:29;7278:50;;;;;;;7237:103;7360:6;7368:20;7352:37;;;;;5765:1632;;;;;;;;:::o;427:643::-;505:20;496:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;492:571;;;542:7;;492:571;603:29;594:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;590:473;;;649:34;;;;;;;;;;:::i;:::-;;;;;;;;590:473;714:35;705:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;701:362;;;766:41;;;;;;;;;;:::i;:::-;;;;;;;;701:362;838:30;829:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;825:238;;;885:44;;;;;;;;;;:::i;:::-;;;;;;;;825:238;960:30;951:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;947:116;;;1007:44;;;;;;;;;;:::i;:::-;;;;;;;;947:116;427:643;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;152:139;;;;:::o;297:::-;343:5;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;297:139;;;;:::o;442:135::-;486:5;524:6;511:20;502:29;;540:31;565:5;540:31;:::i;:::-;442:135;;;;:::o;583:329::-;642:6;691:2;679:9;670:7;666:23;662:32;659:119;;;697:79;;:::i;:::-;659:119;817:1;842:53;887:7;878:6;867:9;863:22;842:53;:::i;:::-;832:63;;788:117;583:329;;;;:::o;918:474::-;986:6;994;1043:2;1031:9;1022:7;1018:23;1014:32;1011:119;;;1049:79;;:::i;:::-;1011:119;1169:1;1194:53;1239:7;1230:6;1219:9;1215:22;1194:53;:::i;:::-;1184:63;;1140:117;1296:2;1322:53;1367:7;1358:6;1347:9;1343:22;1322:53;:::i;:::-;1312:63;;1267:118;918:474;;;;;:::o;1398:619::-;1475:6;1483;1491;1540:2;1528:9;1519:7;1515:23;1511:32;1508:119;;;1546:79;;:::i;:::-;1508:119;1666:1;1691:53;1736:7;1727:6;1716:9;1712:22;1691:53;:::i;:::-;1681:63;;1637:117;1793:2;1819:53;1864:7;1855:6;1844:9;1840:22;1819:53;:::i;:::-;1809:63;;1764:118;1921:2;1947:53;1992:7;1983:6;1972:9;1968:22;1947:53;:::i;:::-;1937:63;;1892:118;1398:619;;;;;:::o;2023:1199::-;2134:6;2142;2150;2158;2166;2174;2182;2231:3;2219:9;2210:7;2206:23;2202:33;2199:120;;;2238:79;;:::i;:::-;2199:120;2358:1;2383:53;2428:7;2419:6;2408:9;2404:22;2383:53;:::i;:::-;2373:63;;2329:117;2485:2;2511:53;2556:7;2547:6;2536:9;2532:22;2511:53;:::i;:::-;2501:63;;2456:118;2613:2;2639:53;2684:7;2675:6;2664:9;2660:22;2639:53;:::i;:::-;2629:63;;2584:118;2741:2;2767:53;2812:7;2803:6;2792:9;2788:22;2767:53;:::i;:::-;2757:63;;2712:118;2869:3;2896:51;2939:7;2930:6;2919:9;2915:22;2896:51;:::i;:::-;2886:61;;2840:117;2996:3;3023:53;3068:7;3059:6;3048:9;3044:22;3023:53;:::i;:::-;3013:63;;2967:119;3125:3;3152:53;3197:7;3188:6;3177:9;3173:22;3152:53;:::i;:::-;3142:63;;3096:119;2023:1199;;;;;;;;;;:::o;3228:474::-;3296:6;3304;3353:2;3341:9;3332:7;3328:23;3324:32;3321:119;;;3359:79;;:::i;:::-;3321:119;3479:1;3504:53;3549:7;3540:6;3529:9;3525:22;3504:53;:::i;:::-;3494:63;;3450:117;3606:2;3632:53;3677:7;3668:6;3657:9;3653:22;3632:53;:::i;:::-;3622:63;;3577:118;3228:474;;;;;:::o;3708:329::-;3767:6;3816:2;3804:9;3795:7;3791:23;3787:32;3784:119;;;3822:79;;:::i;:::-;3784:119;3942:1;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3913:117;3708:329;;;;:::o;4043:118::-;4130:24;4148:5;4130:24;:::i;:::-;4125:3;4118:37;4043:118;;:::o;4167:109::-;4248:21;4263:5;4248:21;:::i;:::-;4243:3;4236:34;4167:109;;:::o;4282:118::-;4369:24;4387:5;4369:24;:::i;:::-;4364:3;4357:37;4282:118;;:::o;4406:157::-;4511:45;4531:24;4549:5;4531:24;:::i;:::-;4511:45;:::i;:::-;4506:3;4499:58;4406:157;;:::o;4569:364::-;4657:3;4685:39;4718:5;4685:39;:::i;:::-;4740:71;4804:6;4799:3;4740:71;:::i;:::-;4733:78;;4820:52;4865:6;4860:3;4853:4;4846:5;4842:16;4820:52;:::i;:::-;4897:29;4919:6;4897:29;:::i;:::-;4892:3;4888:39;4881:46;;4661:272;4569:364;;;;:::o;4939:366::-;5081:3;5102:67;5166:2;5161:3;5102:67;:::i;:::-;5095:74;;5178:93;5267:3;5178:93;:::i;:::-;5296:2;5291:3;5287:12;5280:19;;4939:366;;;:::o;5311:::-;5453:3;5474:67;5538:2;5533:3;5474:67;:::i;:::-;5467:74;;5550:93;5639:3;5550:93;:::i;:::-;5668:2;5663:3;5659:12;5652:19;;5311:366;;;:::o;5683:::-;5825:3;5846:67;5910:2;5905:3;5846:67;:::i;:::-;5839:74;;5922:93;6011:3;5922:93;:::i;:::-;6040:2;6035:3;6031:12;6024:19;;5683:366;;;:::o;6055:::-;6197:3;6218:67;6282:2;6277:3;6218:67;:::i;:::-;6211:74;;6294:93;6383:3;6294:93;:::i;:::-;6412:2;6407:3;6403:12;6396:19;;6055:366;;;:::o;6427:::-;6569:3;6590:67;6654:2;6649:3;6590:67;:::i;:::-;6583:74;;6666:93;6755:3;6666:93;:::i;:::-;6784:2;6779:3;6775:12;6768:19;;6427:366;;;:::o;6799:400::-;6959:3;6980:84;7062:1;7057:3;6980:84;:::i;:::-;6973:91;;7073:93;7162:3;7073:93;:::i;:::-;7191:1;7186:3;7182:11;7175:18;;6799:400;;;:::o;7205:366::-;7347:3;7368:67;7432:2;7427:3;7368:67;:::i;:::-;7361:74;;7444:93;7533:3;7444:93;:::i;:::-;7562:2;7557:3;7553:12;7546:19;;7205:366;;;:::o;7577:::-;7719:3;7740:67;7804:2;7799:3;7740:67;:::i;:::-;7733:74;;7816:93;7905:3;7816:93;:::i;:::-;7934:2;7929:3;7925:12;7918:19;;7577:366;;;:::o;7949:::-;8091:3;8112:67;8176:2;8171:3;8112:67;:::i;:::-;8105:74;;8188:93;8277:3;8188:93;:::i;:::-;8306:2;8301:3;8297:12;8290:19;;7949:366;;;:::o;8321:::-;8463:3;8484:67;8548:2;8543:3;8484:67;:::i;:::-;8477:74;;8560:93;8649:3;8560:93;:::i;:::-;8678:2;8673:3;8669:12;8662:19;;8321:366;;;:::o;8693:::-;8835:3;8856:67;8920:2;8915:3;8856:67;:::i;:::-;8849:74;;8932:93;9021:3;8932:93;:::i;:::-;9050:2;9045:3;9041:12;9034:19;;8693:366;;;:::o;9065:::-;9207:3;9228:67;9292:2;9287:3;9228:67;:::i;:::-;9221:74;;9304:93;9393:3;9304:93;:::i;:::-;9422:2;9417:3;9413:12;9406:19;;9065:366;;;:::o;9437:::-;9579:3;9600:67;9664:2;9659:3;9600:67;:::i;:::-;9593:74;;9676:93;9765:3;9676:93;:::i;:::-;9794:2;9789:3;9785:12;9778:19;;9437:366;;;:::o;9809:::-;9951:3;9972:67;10036:2;10031:3;9972:67;:::i;:::-;9965:74;;10048:93;10137:3;10048:93;:::i;:::-;10166:2;10161:3;10157:12;10150:19;;9809:366;;;:::o;10181:::-;10323:3;10344:67;10408:2;10403:3;10344:67;:::i;:::-;10337:74;;10420:93;10509:3;10420:93;:::i;:::-;10538:2;10533:3;10529:12;10522:19;;10181:366;;;:::o;10553:::-;10695:3;10716:67;10780:2;10775:3;10716:67;:::i;:::-;10709:74;;10792:93;10881:3;10792:93;:::i;:::-;10910:2;10905:3;10901:12;10894:19;;10553:366;;;:::o;10925:118::-;11012:24;11030:5;11012:24;:::i;:::-;11007:3;11000:37;10925:118;;:::o;11049:112::-;11132:22;11148:5;11132:22;:::i;:::-;11127:3;11120:35;11049:112;;:::o;11167:663::-;11408:3;11430:148;11574:3;11430:148;:::i;:::-;11423:155;;11588:75;11659:3;11650:6;11588:75;:::i;:::-;11688:2;11683:3;11679:12;11672:19;;11701:75;11772:3;11763:6;11701:75;:::i;:::-;11801:2;11796:3;11792:12;11785:19;;11821:3;11814:10;;11167:663;;;;;:::o;11836:210::-;11923:4;11961:2;11950:9;11946:18;11938:26;;11974:65;12036:1;12025:9;12021:17;12012:6;11974:65;:::i;:::-;11836:210;;;;:::o;12052:222::-;12145:4;12183:2;12172:9;12168:18;12160:26;;12196:71;12264:1;12253:9;12249:17;12240:6;12196:71;:::i;:::-;12052:222;;;;:::o;12280:775::-;12513:4;12551:3;12540:9;12536:19;12528:27;;12565:71;12633:1;12622:9;12618:17;12609:6;12565:71;:::i;:::-;12646:72;12714:2;12703:9;12699:18;12690:6;12646:72;:::i;:::-;12728;12796:2;12785:9;12781:18;12772:6;12728:72;:::i;:::-;12810;12878:2;12867:9;12863:18;12854:6;12810:72;:::i;:::-;12892:73;12960:3;12949:9;12945:19;12936:6;12892:73;:::i;:::-;12975;13043:3;13032:9;13028:19;13019:6;12975:73;:::i;:::-;12280:775;;;;;;;;;:::o;13061:664::-;13266:4;13304:3;13293:9;13289:19;13281:27;;13318:71;13386:1;13375:9;13371:17;13362:6;13318:71;:::i;:::-;13399:72;13467:2;13456:9;13452:18;13443:6;13399:72;:::i;:::-;13481;13549:2;13538:9;13534:18;13525:6;13481:72;:::i;:::-;13563;13631:2;13620:9;13616:18;13607:6;13563:72;:::i;:::-;13645:73;13713:3;13702:9;13698:19;13689:6;13645:73;:::i;:::-;13061:664;;;;;;;;:::o;13731:545::-;13904:4;13942:3;13931:9;13927:19;13919:27;;13956:71;14024:1;14013:9;14009:17;14000:6;13956:71;:::i;:::-;14037:68;14101:2;14090:9;14086:18;14077:6;14037:68;:::i;:::-;14115:72;14183:2;14172:9;14168:18;14159:6;14115:72;:::i;:::-;14197;14265:2;14254:9;14250:18;14241:6;14197:72;:::i;:::-;13731:545;;;;;;;:::o;14282:313::-;14395:4;14433:2;14422:9;14418:18;14410:26;;14482:9;14476:4;14472:20;14468:1;14457:9;14453:17;14446:47;14510:78;14583:4;14574:6;14510:78;:::i;:::-;14502:86;;14282:313;;;;:::o;14601:419::-;14767:4;14805:2;14794:9;14790:18;14782:26;;14854:9;14848:4;14844:20;14840:1;14829:9;14825:17;14818:47;14882:131;15008:4;14882:131;:::i;:::-;14874:139;;14601:419;;;:::o;15026:::-;15192:4;15230:2;15219:9;15215:18;15207:26;;15279:9;15273:4;15269:20;15265:1;15254:9;15250:17;15243:47;15307:131;15433:4;15307:131;:::i;:::-;15299:139;;15026:419;;;:::o;15451:::-;15617:4;15655:2;15644:9;15640:18;15632:26;;15704:9;15698:4;15694:20;15690:1;15679:9;15675:17;15668:47;15732:131;15858:4;15732:131;:::i;:::-;15724:139;;15451:419;;;:::o;15876:::-;16042:4;16080:2;16069:9;16065:18;16057:26;;16129:9;16123:4;16119:20;16115:1;16104:9;16100:17;16093:47;16157:131;16283:4;16157:131;:::i;:::-;16149:139;;15876:419;;;:::o;16301:::-;16467:4;16505:2;16494:9;16490:18;16482:26;;16554:9;16548:4;16544:20;16540:1;16529:9;16525:17;16518:47;16582:131;16708:4;16582:131;:::i;:::-;16574:139;;16301:419;;;:::o;16726:::-;16892:4;16930:2;16919:9;16915:18;16907:26;;16979:9;16973:4;16969:20;16965:1;16954:9;16950:17;16943:47;17007:131;17133:4;17007:131;:::i;:::-;16999:139;;16726:419;;;:::o;17151:::-;17317:4;17355:2;17344:9;17340:18;17332:26;;17404:9;17398:4;17394:20;17390:1;17379:9;17375:17;17368:47;17432:131;17558:4;17432:131;:::i;:::-;17424:139;;17151:419;;;:::o;17576:::-;17742:4;17780:2;17769:9;17765:18;17757:26;;17829:9;17823:4;17819:20;17815:1;17804:9;17800:17;17793:47;17857:131;17983:4;17857:131;:::i;:::-;17849:139;;17576:419;;;:::o;18001:::-;18167:4;18205:2;18194:9;18190:18;18182:26;;18254:9;18248:4;18244:20;18240:1;18229:9;18225:17;18218:47;18282:131;18408:4;18282:131;:::i;:::-;18274:139;;18001:419;;;:::o;18426:::-;18592:4;18630:2;18619:9;18615:18;18607:26;;18679:9;18673:4;18669:20;18665:1;18654:9;18650:17;18643:47;18707:131;18833:4;18707:131;:::i;:::-;18699:139;;18426:419;;;:::o;18851:::-;19017:4;19055:2;19044:9;19040:18;19032:26;;19104:9;19098:4;19094:20;19090:1;19079:9;19075:17;19068:47;19132:131;19258:4;19132:131;:::i;:::-;19124:139;;18851:419;;;:::o;19276:::-;19442:4;19480:2;19469:9;19465:18;19457:26;;19529:9;19523:4;19519:20;19515:1;19504:9;19500:17;19493:47;19557:131;19683:4;19557:131;:::i;:::-;19549:139;;19276:419;;;:::o;19701:::-;19867:4;19905:2;19894:9;19890:18;19882:26;;19954:9;19948:4;19944:20;19940:1;19929:9;19925:17;19918:47;19982:131;20108:4;19982:131;:::i;:::-;19974:139;;19701:419;;;:::o;20126:::-;20292:4;20330:2;20319:9;20315:18;20307:26;;20379:9;20373:4;20369:20;20365:1;20354:9;20350:17;20343:47;20407:131;20533:4;20407:131;:::i;:::-;20399:139;;20126:419;;;:::o;20551:::-;20717:4;20755:2;20744:9;20740:18;20732:26;;20804:9;20798:4;20794:20;20790:1;20779:9;20775:17;20768:47;20832:131;20958:4;20832:131;:::i;:::-;20824:139;;20551:419;;;:::o;20976:222::-;21069:4;21107:2;21096:9;21092:18;21084:26;;21120:71;21188:1;21177:9;21173:17;21164:6;21120:71;:::i;:::-;20976:222;;;;:::o;21204:214::-;21293:4;21331:2;21320:9;21316:18;21308:26;;21344:67;21408:1;21397:9;21393:17;21384:6;21344:67;:::i;:::-;21204:214;;;;:::o;21505:99::-;21557:6;21591:5;21585:12;21575:22;;21505:99;;;:::o;21610:169::-;21694:11;21728:6;21723:3;21716:19;21768:4;21763:3;21759:14;21744:29;;21610:169;;;;:::o;21785:148::-;21887:11;21924:3;21909:18;;21785:148;;;;:::o;21939:305::-;21979:3;21998:20;22016:1;21998:20;:::i;:::-;21993:25;;22032:20;22050:1;22032:20;:::i;:::-;22027:25;;22186:1;22118:66;22114:74;22111:1;22108:81;22105:107;;;22192:18;;:::i;:::-;22105:107;22236:1;22233;22229:9;22222:16;;21939:305;;;;:::o;22250:191::-;22290:4;22310:20;22328:1;22310:20;:::i;:::-;22305:25;;22344:20;22362:1;22344:20;:::i;:::-;22339:25;;22383:1;22380;22377:8;22374:34;;;22388:18;;:::i;:::-;22374:34;22433:1;22430;22426:9;22418:17;;22250:191;;;;:::o;22447:96::-;22484:7;22513:24;22531:5;22513:24;:::i;:::-;22502:35;;22447:96;;;:::o;22549:90::-;22583:7;22626:5;22619:13;22612:21;22601:32;;22549:90;;;:::o;22645:77::-;22682:7;22711:5;22700:16;;22645:77;;;:::o;22728:126::-;22765:7;22805:42;22798:5;22794:54;22783:65;;22728:126;;;:::o;22860:77::-;22897:7;22926:5;22915:16;;22860:77;;;:::o;22943:86::-;22978:7;23018:4;23011:5;23007:16;22996:27;;22943:86;;;:::o;23035:307::-;23103:1;23113:113;23127:6;23124:1;23121:13;23113:113;;;23212:1;23207:3;23203:11;23197:18;23193:1;23188:3;23184:11;23177:39;23149:2;23146:1;23142:10;23137:15;;23113:113;;;23244:6;23241:1;23238:13;23235:101;;;23324:1;23315:6;23310:3;23306:16;23299:27;23235:101;23084:258;23035:307;;;:::o;23348:320::-;23392:6;23429:1;23423:4;23419:12;23409:22;;23476:1;23470:4;23466:12;23497:18;23487:81;;23553:4;23545:6;23541:17;23531:27;;23487:81;23615:2;23607:6;23604:14;23584:18;23581:38;23578:84;;;23634:18;;:::i;:::-;23578:84;23399:269;23348:320;;;:::o;23674:79::-;23713:7;23742:5;23731:16;;23674:79;;;:::o;23759:180::-;23807:77;23804:1;23797:88;23904:4;23901:1;23894:15;23928:4;23925:1;23918:15;23945:180;23993:77;23990:1;23983:88;24090:4;24087:1;24080:15;24114:4;24111:1;24104:15;24131:180;24179:77;24176:1;24169:88;24276:4;24273:1;24266:15;24300:4;24297:1;24290:15;24440:117;24549:1;24546;24539:12;24563:102;24604:6;24655:2;24651:7;24646:2;24639:5;24635:14;24631:28;24621:38;;24563:102;;;:::o;24671:174::-;24811:26;24807:1;24799:6;24795:14;24788:50;24671:174;:::o;24851:222::-;24991:34;24987:1;24979:6;24975:14;24968:58;25060:5;25055:2;25047:6;25043:15;25036:30;24851:222;:::o;25079:221::-;25219:34;25215:1;25207:6;25203:14;25196:58;25288:4;25283:2;25275:6;25271:15;25264:29;25079:221;:::o;25306:181::-;25446:33;25442:1;25434:6;25430:14;25423:57;25306:181;:::o;25493:221::-;25633:34;25629:1;25621:6;25617:14;25610:58;25702:4;25697:2;25689:6;25685:15;25678:29;25493:221;:::o;25720:214::-;25860:66;25856:1;25848:6;25844:14;25837:90;25720:214;:::o;25940:179::-;26080:31;26076:1;26068:6;26064:14;26057:55;25940:179;:::o;26125:225::-;26265:34;26261:1;26253:6;26249:14;26242:58;26334:8;26329:2;26321:6;26317:15;26310:33;26125:225;:::o;26356:221::-;26496:34;26492:1;26484:6;26480:14;26473:58;26565:4;26560:2;26552:6;26548:15;26541:29;26356:221;:::o;26583:::-;26723:34;26719:1;26711:6;26707:14;26700:58;26792:4;26787:2;26779:6;26775:15;26768:29;26583:221;:::o;26810:180::-;26950:32;26946:1;26938:6;26934:14;26927:56;26810:180;:::o;26996:227::-;27136:34;27132:1;27124:6;27120:14;27113:58;27205:10;27200:2;27192:6;27188:15;27181:35;26996:227;:::o;27229:220::-;27369:34;27365:1;27357:6;27353:14;27346:58;27438:3;27433:2;27425:6;27421:15;27414:28;27229:220;:::o;27455:224::-;27595:34;27591:1;27583:6;27579:14;27572:58;27664:7;27659:2;27651:6;27647:15;27640:32;27455:224;:::o;27685:223::-;27825:34;27821:1;27813:6;27809:14;27802:58;27894:6;27889:2;27881:6;27877:15;27870:31;27685:223;:::o;27914:224::-;28054:34;28050:1;28042:6;28038:14;28031:58;28123:7;28118:2;28110:6;28106:15;28099:32;27914:224;:::o;28144:122::-;28217:24;28235:5;28217:24;:::i;:::-;28210:5;28207:35;28197:63;;28256:1;28253;28246:12;28197:63;28144:122;:::o;28272:::-;28345:24;28363:5;28345:24;:::i;:::-;28338:5;28335:35;28325:63;;28384:1;28381;28374:12;28325:63;28272:122;:::o;28400:::-;28473:24;28491:5;28473:24;:::i;:::-;28466:5;28463:35;28453:63;;28512:1;28509;28502:12;28453:63;28400:122;:::o;28528:118::-;28599:22;28615:5;28599:22;:::i;:::-;28592:5;28589:33;28579:61;;28636:1;28633;28626:12;28579:61;28528:118;:::o

Swarm Source

ipfs://66c5140b5b71ea521c0faac82bae2e9cbc2316633266e72bae120d39c1628f93
Loading