Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 954 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Airdrop | 15192027 | 855 days ago | IN | 0 ETH | 0.00015 | ||||
Claim Airdrop | 14234665 | 1008 days ago | IN | 0 ETH | 0.0009975 | ||||
Claim Airdrop | 14174647 | 1017 days ago | IN | 0 ETH | 0.00923049 | ||||
Claim Airdrop | 14170735 | 1018 days ago | IN | 0 ETH | 0.0027915 | ||||
Claim Airdrop | 14168305 | 1018 days ago | IN | 0 ETH | 0.01284321 | ||||
Claim Airdrop | 14167307 | 1019 days ago | IN | 0 ETH | 0.00233849 | ||||
Claim Airdrop | 14167307 | 1019 days ago | IN | 0 ETH | 0.00236149 | ||||
Withdraw | 14160425 | 1020 days ago | IN | 0 ETH | 0.00502094 | ||||
Claim Airdrop | 14160409 | 1020 days ago | IN | 0 ETH | 0.01644844 | ||||
Claim Airdrop | 14160276 | 1020 days ago | IN | 0 ETH | 0.0164365 | ||||
Claim Airdrop | 14160188 | 1020 days ago | IN | 0 ETH | 0.01649516 | ||||
Claim Airdrop | 14160059 | 1020 days ago | IN | 0 ETH | 0.01658726 | ||||
Claim Airdrop | 14160008 | 1020 days ago | IN | 0 ETH | 0.01561102 | ||||
Claim Airdrop | 14160004 | 1020 days ago | IN | 0 ETH | 0.01875146 | ||||
Claim Airdrop | 14159987 | 1020 days ago | IN | 0 ETH | 0.01358737 | ||||
Claim Airdrop | 14159970 | 1020 days ago | IN | 0 ETH | 0.01775751 | ||||
Claim Airdrop | 14159966 | 1020 days ago | IN | 0 ETH | 0.02089227 | ||||
Claim Airdrop | 14159961 | 1020 days ago | IN | 0 ETH | 0.01983151 | ||||
Claim Airdrop | 14159942 | 1020 days ago | IN | 0 ETH | 0.01452062 | ||||
Claim Airdrop | 14159934 | 1020 days ago | IN | 0 ETH | 0.01573903 | ||||
Claim Airdrop | 14159934 | 1020 days ago | IN | 0 ETH | 0.01592274 | ||||
Claim Airdrop | 14159931 | 1020 days ago | IN | 0 ETH | 0.01787173 | ||||
Claim Airdrop | 14159677 | 1020 days ago | IN | 0 ETH | 0.01037416 | ||||
Claim Airdrop | 14159672 | 1020 days ago | IN | 0 ETH | 0.01067623 | ||||
Claim Airdrop | 14159671 | 1020 days ago | IN | 0 ETH | 0.01204032 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
FeeTokenAirdrop
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-26 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.10; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @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 External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } /** * @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); } } contract FeeTokenAirdrop is AccessControl, EIP712 { IERC20 public immutable FeeToken; bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); uint256 public rewardsPool; uint256 private constant _airdropExpiryBlock = 14292200; mapping(address /* account */ => bool /* airdrop claim status */) public airdrops; event Airdropped(address indexed account, uint256 indexed amount); constructor(IERC20 _feeToken) EIP712("FeeTokenAirdrop", "1") { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); FeeToken = _feeToken; } function deposit(uint256 _amount) external { FeeToken.transferFrom(_msgSender(), address(this), _amount); rewardsPool += _amount; } function withdraw(uint256 _amount) external { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "FeeToken: Caller doesn't have ADMIN role"); rewardsPool -= _amount; FeeToken.transfer(_msgSender(), _amount); } function sync() external { uint256 _diff = FeeToken.balanceOf(address(this)) - rewardsPool; rewardsPool += _diff; } function claimAirdrop(bytes calldata _signature, uint256 _amount, uint256 _deadline) external { address _signer = _getSigner(_signature, _amount, _deadline); require(block.number <= _airdropExpiryBlock, "FeeToken: Airdrop ended"); // should reject claiming if current block is greater than _airdropExpiryBlock require(!airdrops[_msgSender()], "FeeToken: Airdrop have already been claimed"); // reject if airdrop have already been claimed require(hasRole(MINTER_ROLE, _signer), "FeeToken: Invalid signature"); // reject if signer is does not have MINTER_ROLE require(_deadline >= block.timestamp, "FeeToken: Signature expired"); // reject if current time is greater than signature deadline require(_amount > 0, "FeeToken: Amount must be greater than zero"); // should only allow claiming of amount greater than zero airdrops[_msgSender()] = true; // tracks airdrops claimers emit Airdropped(_msgSender(), _amount); rewardsPool -= _amount; FeeToken.transfer(_msgSender(), _amount); } function getChainId() external view returns(uint256) { return block.chainid; } function _getSigner(bytes calldata _signature, uint256 _amount, uint256 _deadline) private view returns(address _signer) { bytes32 _digest = _hashTypedDataV4( keccak256( abi.encode( keccak256("Airdrop(address to,string amount,string deadline)"), _msgSender(), keccak256( bytes(Strings.toString(_amount)) ), keccak256( bytes(Strings.toString(_deadline)) ) ) ) ); _signer = ECDSA.recover(_digest, _signature); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_feeToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FeeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"airdrops","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"claimAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101406040523480156200001257600080fd5b5060405162002e4138038062002e418339818101604052810190620000389190620003f5565b6040518060400160405280600f81526020017f466565546f6b656e41697264726f7000000000000000000000000000000000008152506040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260c081815250508160e081815250504660a081815250506200010c818484620001c260201b60201c565b608081815250508061010081815250505050505050620001456000801b62000139620001fe60201b60201c565b6200020660201b60201c565b620001867f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66200017a620001fe60201b60201c565b6200020660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff168152505050620004cb565b60008383834630604051602001620001df9594939291906200046e565b6040516020818303038152906040528051906020012090509392505050565b600033905090565b6200021882826200021c60201b60201c565b5050565b6200022e82826200030d60201b60201c565b6200030957600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002ae620001fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003a9826200037c565b9050919050565b6000620003bd826200039c565b9050919050565b620003cf81620003b0565b8114620003db57600080fd5b50565b600081519050620003ef81620003c4565b92915050565b6000602082840312156200040e576200040d62000377565b5b60006200041e84828501620003de565b91505092915050565b6000819050919050565b6200043c8162000427565b82525050565b6000819050919050565b620004578162000442565b82525050565b62000468816200039c565b82525050565b600060a08201905062000485600083018862000431565b62000494602083018762000431565b620004a3604083018662000431565b620004b260608301856200044c565b620004c160808301846200045d565b9695505050505050565b60805160a05160c05160e051610100516101205161290a620005376000396000818161062b01528181610763015281816108c0015281816109750152610a8b015260006113280152600061136a01526000611349015260006112d5015260006112fd015261290a6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063481531e911610097578063b6b55f2511610066578063b6b55f25146102ad578063d5391393146102c9578063d547741f146102e7578063fff6cae91461030357610100565b8063481531e9146102115780638c86f0a71461022f57806391d148541461025f578063a217fddf1461028f57610100565b80632e1a7d4d116100d35780632e1a7d4d1461019f5780632f2ff15d146101bb5780633408e470146101d757806336568abe146101f557610100565b806301ffc9a7146101055780630359fea914610135578063190df0aa14610153578063248a9ca31461016f575b600080fd5b61011f600480360381019061011a9190611816565b61030d565b60405161012c919061185e565b60405180910390f35b61013d610387565b60405161014a9190611892565b60405180910390f35b61016d6004803603810190610168919061193e565b61038d565b005b610189600480360381019061018491906119e8565b6106d6565b6040516101969190611a24565b60405180910390f35b6101b960048036038101906101b49190611a3f565b6106f5565b005b6101d560048036038101906101d09190611aca565b61080a565b005b6101df610833565b6040516101ec9190611892565b60405180910390f35b61020f600480360381019061020a9190611aca565b61083b565b005b6102196108be565b6040516102269190611b69565b60405180910390f35b61024960048036038101906102449190611b84565b6108e2565b604051610256919061185e565b60405180910390f35b61027960048036038101906102749190611aca565b610902565b604051610286919061185e565b60405180910390f35b61029761096c565b6040516102a49190611a24565b60405180910390f35b6102c760048036038101906102c29190611a3f565b610973565b005b6102d1610a37565b6040516102de9190611a24565b60405180910390f35b61030160048036038101906102fc9190611aca565b610a5b565b005b61030b610a84565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610380575061037f82610b4b565b5b9050919050565b60015481565b600061039b85858585610bb5565b905062da14e84311156103e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103da90611c0e565b60405180910390fd5b600260006103ef610c8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046e90611ca0565b60405180910390fd5b6104a17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610902565b6104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d790611d0c565b60405180910390fd5b42821015610523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051a90611d78565b60405180910390fd5b60008311610566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055d90611e0a565b60405180910390fd5b600160026000610574610c8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550826105ce610c8d565b73ffffffffffffffffffffffffffffffffffffffff167f7bd6d4be1decdc27a9ed9c7ccdf5bb7cc38e31b3647b958c6b37162a2296c0fa60405160405180910390a382600160008282546106229190611e59565b925050819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61066d610c8d565b856040518363ffffffff1660e01b815260040161068b929190611e9c565b6020604051808303816000875af11580156106aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ce9190611ef1565b505050505050565b6000806000838152602001908152602001600020600101549050919050565b6107096000801b610704610c8d565b610902565b610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073f90611f90565b60405180910390fd5b806001600082825461075a9190611e59565b925050819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6107a5610c8d565b836040518363ffffffff1660e01b81526004016107c3929190611e9c565b6020604051808303816000875af11580156107e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108069190611ef1565b5050565b610813826106d6565b6108248161081f610c8d565b610c95565b61082e8383610d32565b505050565b600046905090565b610843610c8d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790612022565b60405180910390fd5b6108ba8282610e12565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd6109b7610c8d565b30846040518463ffffffff1660e01b81526004016109d793929190612042565b6020604051808303816000875af11580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1a9190611ef1565b508060016000828254610a2d9190612079565b9250508190555050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610a64826106d6565b610a7581610a70610c8d565b610c95565b610a7f8383610e12565b505050565b60006001547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ae291906120cf565b602060405180830381865afa158015610aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2391906120ff565b610b2d9190611e59565b90508060016000828254610b419190612079565b9250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080610c327f72e852d5b602e2ddcd00f60a9ea09994bc2d416af3bfdd38a247b0298f65327e610be4610c8d565b610bed87610ef3565b80519060200120610bfd87610ef3565b80519060200120604051602001610c17949392919061212c565b60405160208183030381529060405280519060200120611054565b9050610c828187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061106e565b915050949350505050565b600033905090565b610c9f8282610902565b610d2e57610cc48173ffffffffffffffffffffffffffffffffffffffff166014611095565b610cd28360001c6020611095565b604051602001610ce3929190612283565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d259190612307565b60405180910390fd5b5050565b610d3c8282610902565b610e0e57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610db3610c8d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b610e1c8282610902565b15610eef57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610e94610c8d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60606000821415610f3b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061104f565b600082905060005b60008214610f6d578080610f5690612329565b915050600a82610f6691906123a1565b9150610f43565b60008167ffffffffffffffff811115610f8957610f886123d2565b5b6040519080825280601f01601f191660200182016040528015610fbb5781602001600182028036833780820191505090505b5090505b6000851461104857600182610fd49190611e59565b9150600a85610fe39190612401565b6030610fef9190612079565b60f81b81838151811061100557611004612432565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561104191906123a1565b9450610fbf565b8093505050505b919050565b60006110676110616112d1565b83611394565b9050919050565b600080600061107d85856113c7565b9150915061108a8161144a565b819250505092915050565b6060600060028360026110a89190612461565b6110b29190612079565b67ffffffffffffffff8111156110cb576110ca6123d2565b5b6040519080825280601f01601f1916602001820160405280156110fd5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061113557611134612432565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061119957611198612432565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026111d99190612461565b6111e39190612079565b90505b6001811115611283577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061122557611224612432565b5b1a60f81b82828151811061123c5761123b612432565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061127c906124bb565b90506111e6565b50600084146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90612531565b60405180910390fd5b8091505092915050565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611323577f00000000000000000000000000000000000000000000000000000000000000009050611391565b61138e7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061161f565b90505b90565b600082826040516020016113a99291906125be565b60405160208183030381529060405280519060200120905092915050565b6000806041835114156114095760008060006020860151925060408601519150606086015160001a90506113fd87828585611659565b94509450505050611443565b60408351141561143a57600080602085015191506040850151905061142f868383611766565b935093505050611443565b60006002915091505b9250929050565b6000600481111561145e5761145d6125f5565b5b816004811115611471576114706125f5565b5b141561147c5761161c565b600160048111156114905761148f6125f5565b5b8160048111156114a3576114a26125f5565b5b14156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90612670565b60405180910390fd5b600260048111156114f8576114f76125f5565b5b81600481111561150b5761150a6125f5565b5b141561154c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611543906126dc565b60405180910390fd5b600360048111156115605761155f6125f5565b5b816004811115611573576115726125f5565b5b14156115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab9061276e565b60405180910390fd5b6004808111156115c7576115c66125f5565b5b8160048111156115da576115d96125f5565b5b141561161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290612800565b60405180910390fd5b5b50565b6000838383463060405160200161163a959493929190612820565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561169457600060039150915061175d565b601b8560ff16141580156116ac5750601c8560ff1614155b156116be57600060049150915061175d565b6000600187878787604051600081526020016040526040516116e3949392919061288f565b6020604051602081039080840390855afa158015611705573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117545760006001925092505061175d565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c0190506117a687828885611659565b935093505050935093915050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117f3816117be565b81146117fe57600080fd5b50565b600081359050611810816117ea565b92915050565b60006020828403121561182c5761182b6117b4565b5b600061183a84828501611801565b91505092915050565b60008115159050919050565b61185881611843565b82525050565b6000602082019050611873600083018461184f565b92915050565b6000819050919050565b61188c81611879565b82525050565b60006020820190506118a76000830184611883565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126118d2576118d16118ad565b5b8235905067ffffffffffffffff8111156118ef576118ee6118b2565b5b60208301915083600182028301111561190b5761190a6118b7565b5b9250929050565b61191b81611879565b811461192657600080fd5b50565b60008135905061193881611912565b92915050565b60008060008060608587031215611958576119576117b4565b5b600085013567ffffffffffffffff811115611976576119756117b9565b5b611982878288016118bc565b9450945050602061199587828801611929565b92505060406119a687828801611929565b91505092959194509250565b6000819050919050565b6119c5816119b2565b81146119d057600080fd5b50565b6000813590506119e2816119bc565b92915050565b6000602082840312156119fe576119fd6117b4565b5b6000611a0c848285016119d3565b91505092915050565b611a1e816119b2565b82525050565b6000602082019050611a396000830184611a15565b92915050565b600060208284031215611a5557611a546117b4565b5b6000611a6384828501611929565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a9782611a6c565b9050919050565b611aa781611a8c565b8114611ab257600080fd5b50565b600081359050611ac481611a9e565b92915050565b60008060408385031215611ae157611ae06117b4565b5b6000611aef858286016119d3565b9250506020611b0085828601611ab5565b9150509250929050565b6000819050919050565b6000611b2f611b2a611b2584611a6c565b611b0a565b611a6c565b9050919050565b6000611b4182611b14565b9050919050565b6000611b5382611b36565b9050919050565b611b6381611b48565b82525050565b6000602082019050611b7e6000830184611b5a565b92915050565b600060208284031215611b9a57611b996117b4565b5b6000611ba884828501611ab5565b91505092915050565b600082825260208201905092915050565b7f466565546f6b656e3a2041697264726f7020656e646564000000000000000000600082015250565b6000611bf8601783611bb1565b9150611c0382611bc2565b602082019050919050565b60006020820190508181036000830152611c2781611beb565b9050919050565b7f466565546f6b656e3a2041697264726f70206861766520616c7265616479206260008201527f65656e20636c61696d6564000000000000000000000000000000000000000000602082015250565b6000611c8a602b83611bb1565b9150611c9582611c2e565b604082019050919050565b60006020820190508181036000830152611cb981611c7d565b9050919050565b7f466565546f6b656e3a20496e76616c6964207369676e61747572650000000000600082015250565b6000611cf6601b83611bb1565b9150611d0182611cc0565b602082019050919050565b60006020820190508181036000830152611d2581611ce9565b9050919050565b7f466565546f6b656e3a205369676e617475726520657870697265640000000000600082015250565b6000611d62601b83611bb1565b9150611d6d82611d2c565b602082019050919050565b60006020820190508181036000830152611d9181611d55565b9050919050565b7f466565546f6b656e3a20416d6f756e74206d757374206265206772656174657260008201527f207468616e207a65726f00000000000000000000000000000000000000000000602082015250565b6000611df4602a83611bb1565b9150611dff82611d98565b604082019050919050565b60006020820190508181036000830152611e2381611de7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e6482611879565b9150611e6f83611879565b925082821015611e8257611e81611e2a565b5b828203905092915050565b611e9681611a8c565b82525050565b6000604082019050611eb16000830185611e8d565b611ebe6020830184611883565b9392505050565b611ece81611843565b8114611ed957600080fd5b50565b600081519050611eeb81611ec5565b92915050565b600060208284031215611f0757611f066117b4565b5b6000611f1584828501611edc565b91505092915050565b7f466565546f6b656e3a2043616c6c657220646f65736e2774206861766520414460008201527f4d494e20726f6c65000000000000000000000000000000000000000000000000602082015250565b6000611f7a602883611bb1565b9150611f8582611f1e565b604082019050919050565b60006020820190508181036000830152611fa981611f6d565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061200c602f83611bb1565b915061201782611fb0565b604082019050919050565b6000602082019050818103600083015261203b81611fff565b9050919050565b60006060820190506120576000830186611e8d565b6120646020830185611e8d565b6120716040830184611883565b949350505050565b600061208482611879565b915061208f83611879565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156120c4576120c3611e2a565b5b828201905092915050565b60006020820190506120e46000830184611e8d565b92915050565b6000815190506120f981611912565b92915050565b600060208284031215612115576121146117b4565b5b6000612123848285016120ea565b91505092915050565b60006080820190506121416000830187611a15565b61214e6020830186611e8d565b61215b6040830185611a15565b6121686060830184611a15565b95945050505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006121b2601783612171565b91506121bd8261217c565b601782019050919050565b600081519050919050565b60005b838110156121f15780820151818401526020810190506121d6565b83811115612200576000848401525b50505050565b6000612211826121c8565b61221b8185612171565b935061222b8185602086016121d3565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600061226d601183612171565b915061227882612237565b601182019050919050565b600061228e826121a5565b915061229a8285612206565b91506122a582612260565b91506122b18284612206565b91508190509392505050565b6000601f19601f8301169050919050565b60006122d9826121c8565b6122e38185611bb1565b93506122f38185602086016121d3565b6122fc816122bd565b840191505092915050565b6000602082019050818103600083015261232181846122ce565b905092915050565b600061233482611879565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561236757612366611e2a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006123ac82611879565b91506123b783611879565b9250826123c7576123c6612372565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061240c82611879565b915061241783611879565b92508261242757612426612372565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061246c82611879565b915061247783611879565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124b0576124af611e2a565b5b828202905092915050565b60006124c682611879565b915060008214156124da576124d9611e2a565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061251b602083611bb1565b9150612526826124e5565b602082019050919050565b6000602082019050818103600083015261254a8161250e565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612587600283612171565b915061259282612551565b600282019050919050565b6000819050919050565b6125b86125b3826119b2565b61259d565b82525050565b60006125c98261257a565b91506125d582856125a7565b6020820191506125e582846125a7565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061265a601883611bb1565b915061266582612624565b602082019050919050565b600060208201905081810360008301526126898161264d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006126c6601f83611bb1565b91506126d182612690565b602082019050919050565b600060208201905081810360008301526126f5816126b9565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612758602283611bb1565b9150612763826126fc565b604082019050919050565b600060208201905081810360008301526127878161274b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006127ea602283611bb1565b91506127f58261278e565b604082019050919050565b60006020820190508181036000830152612819816127dd565b9050919050565b600060a0820190506128356000830188611a15565b6128426020830187611a15565b61284f6040830186611a15565b61285c6060830185611883565b6128696080830184611e8d565b9695505050505050565b600060ff82169050919050565b61288981612873565b82525050565b60006080820190506128a46000830187611a15565b6128b16020830186612880565b6128be6040830185611a15565b6128cb6060830184611a15565b9594505050505056fea26469706673582212200e71598940b37f55fa95eeb5e60359379aafb1c06bc642cebca18741399ab3f664736f6c634300080a0033000000000000000000000000985572429deb3acc47e019af6b3da4620175e553
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063481531e911610097578063b6b55f2511610066578063b6b55f25146102ad578063d5391393146102c9578063d547741f146102e7578063fff6cae91461030357610100565b8063481531e9146102115780638c86f0a71461022f57806391d148541461025f578063a217fddf1461028f57610100565b80632e1a7d4d116100d35780632e1a7d4d1461019f5780632f2ff15d146101bb5780633408e470146101d757806336568abe146101f557610100565b806301ffc9a7146101055780630359fea914610135578063190df0aa14610153578063248a9ca31461016f575b600080fd5b61011f600480360381019061011a9190611816565b61030d565b60405161012c919061185e565b60405180910390f35b61013d610387565b60405161014a9190611892565b60405180910390f35b61016d6004803603810190610168919061193e565b61038d565b005b610189600480360381019061018491906119e8565b6106d6565b6040516101969190611a24565b60405180910390f35b6101b960048036038101906101b49190611a3f565b6106f5565b005b6101d560048036038101906101d09190611aca565b61080a565b005b6101df610833565b6040516101ec9190611892565b60405180910390f35b61020f600480360381019061020a9190611aca565b61083b565b005b6102196108be565b6040516102269190611b69565b60405180910390f35b61024960048036038101906102449190611b84565b6108e2565b604051610256919061185e565b60405180910390f35b61027960048036038101906102749190611aca565b610902565b604051610286919061185e565b60405180910390f35b61029761096c565b6040516102a49190611a24565b60405180910390f35b6102c760048036038101906102c29190611a3f565b610973565b005b6102d1610a37565b6040516102de9190611a24565b60405180910390f35b61030160048036038101906102fc9190611aca565b610a5b565b005b61030b610a84565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610380575061037f82610b4b565b5b9050919050565b60015481565b600061039b85858585610bb5565b905062da14e84311156103e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103da90611c0e565b60405180910390fd5b600260006103ef610c8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046e90611ca0565b60405180910390fd5b6104a17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610902565b6104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d790611d0c565b60405180910390fd5b42821015610523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051a90611d78565b60405180910390fd5b60008311610566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055d90611e0a565b60405180910390fd5b600160026000610574610c8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550826105ce610c8d565b73ffffffffffffffffffffffffffffffffffffffff167f7bd6d4be1decdc27a9ed9c7ccdf5bb7cc38e31b3647b958c6b37162a2296c0fa60405160405180910390a382600160008282546106229190611e59565b925050819055507f000000000000000000000000985572429deb3acc47e019af6b3da4620175e55373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61066d610c8d565b856040518363ffffffff1660e01b815260040161068b929190611e9c565b6020604051808303816000875af11580156106aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ce9190611ef1565b505050505050565b6000806000838152602001908152602001600020600101549050919050565b6107096000801b610704610c8d565b610902565b610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073f90611f90565b60405180910390fd5b806001600082825461075a9190611e59565b925050819055507f000000000000000000000000985572429deb3acc47e019af6b3da4620175e55373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6107a5610c8d565b836040518363ffffffff1660e01b81526004016107c3929190611e9c565b6020604051808303816000875af11580156107e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108069190611ef1565b5050565b610813826106d6565b6108248161081f610c8d565b610c95565b61082e8383610d32565b505050565b600046905090565b610843610c8d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790612022565b60405180910390fd5b6108ba8282610e12565b5050565b7f000000000000000000000000985572429deb3acc47e019af6b3da4620175e55381565b60026020528060005260406000206000915054906101000a900460ff1681565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b7f000000000000000000000000985572429deb3acc47e019af6b3da4620175e55373ffffffffffffffffffffffffffffffffffffffff166323b872dd6109b7610c8d565b30846040518463ffffffff1660e01b81526004016109d793929190612042565b6020604051808303816000875af11580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1a9190611ef1565b508060016000828254610a2d9190612079565b9250508190555050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610a64826106d6565b610a7581610a70610c8d565b610c95565b610a7f8383610e12565b505050565b60006001547f000000000000000000000000985572429deb3acc47e019af6b3da4620175e55373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ae291906120cf565b602060405180830381865afa158015610aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2391906120ff565b610b2d9190611e59565b90508060016000828254610b419190612079565b9250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080610c327f72e852d5b602e2ddcd00f60a9ea09994bc2d416af3bfdd38a247b0298f65327e610be4610c8d565b610bed87610ef3565b80519060200120610bfd87610ef3565b80519060200120604051602001610c17949392919061212c565b60405160208183030381529060405280519060200120611054565b9050610c828187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061106e565b915050949350505050565b600033905090565b610c9f8282610902565b610d2e57610cc48173ffffffffffffffffffffffffffffffffffffffff166014611095565b610cd28360001c6020611095565b604051602001610ce3929190612283565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d259190612307565b60405180910390fd5b5050565b610d3c8282610902565b610e0e57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610db3610c8d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b610e1c8282610902565b15610eef57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610e94610c8d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60606000821415610f3b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061104f565b600082905060005b60008214610f6d578080610f5690612329565b915050600a82610f6691906123a1565b9150610f43565b60008167ffffffffffffffff811115610f8957610f886123d2565b5b6040519080825280601f01601f191660200182016040528015610fbb5781602001600182028036833780820191505090505b5090505b6000851461104857600182610fd49190611e59565b9150600a85610fe39190612401565b6030610fef9190612079565b60f81b81838151811061100557611004612432565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561104191906123a1565b9450610fbf565b8093505050505b919050565b60006110676110616112d1565b83611394565b9050919050565b600080600061107d85856113c7565b9150915061108a8161144a565b819250505092915050565b6060600060028360026110a89190612461565b6110b29190612079565b67ffffffffffffffff8111156110cb576110ca6123d2565b5b6040519080825280601f01601f1916602001820160405280156110fd5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061113557611134612432565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061119957611198612432565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026111d99190612461565b6111e39190612079565b90505b6001811115611283577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061122557611224612432565b5b1a60f81b82828151811061123c5761123b612432565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061127c906124bb565b90506111e6565b50600084146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90612531565b60405180910390fd5b8091505092915050565b60007f0000000000000000000000000000000000000000000000000000000000000001461415611323577fb5c77873cebeebdbc606263de1c1592e0f5b74ba9d565da8b1de1773147227b49050611391565b61138e7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f7d0e2e6c7b962a695f143434d21647d2432ebfaef8d420da0ec0f97f53e473f67fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc661161f565b90505b90565b600082826040516020016113a99291906125be565b60405160208183030381529060405280519060200120905092915050565b6000806041835114156114095760008060006020860151925060408601519150606086015160001a90506113fd87828585611659565b94509450505050611443565b60408351141561143a57600080602085015191506040850151905061142f868383611766565b935093505050611443565b60006002915091505b9250929050565b6000600481111561145e5761145d6125f5565b5b816004811115611471576114706125f5565b5b141561147c5761161c565b600160048111156114905761148f6125f5565b5b8160048111156114a3576114a26125f5565b5b14156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90612670565b60405180910390fd5b600260048111156114f8576114f76125f5565b5b81600481111561150b5761150a6125f5565b5b141561154c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611543906126dc565b60405180910390fd5b600360048111156115605761155f6125f5565b5b816004811115611573576115726125f5565b5b14156115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab9061276e565b60405180910390fd5b6004808111156115c7576115c66125f5565b5b8160048111156115da576115d96125f5565b5b141561161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290612800565b60405180910390fd5b5b50565b6000838383463060405160200161163a959493929190612820565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561169457600060039150915061175d565b601b8560ff16141580156116ac5750601c8560ff1614155b156116be57600060049150915061175d565b6000600187878787604051600081526020016040526040516116e3949392919061288f565b6020604051602081039080840390855afa158015611705573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117545760006001925092505061175d565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c0190506117a687828885611659565b935093505050935093915050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117f3816117be565b81146117fe57600080fd5b50565b600081359050611810816117ea565b92915050565b60006020828403121561182c5761182b6117b4565b5b600061183a84828501611801565b91505092915050565b60008115159050919050565b61185881611843565b82525050565b6000602082019050611873600083018461184f565b92915050565b6000819050919050565b61188c81611879565b82525050565b60006020820190506118a76000830184611883565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126118d2576118d16118ad565b5b8235905067ffffffffffffffff8111156118ef576118ee6118b2565b5b60208301915083600182028301111561190b5761190a6118b7565b5b9250929050565b61191b81611879565b811461192657600080fd5b50565b60008135905061193881611912565b92915050565b60008060008060608587031215611958576119576117b4565b5b600085013567ffffffffffffffff811115611976576119756117b9565b5b611982878288016118bc565b9450945050602061199587828801611929565b92505060406119a687828801611929565b91505092959194509250565b6000819050919050565b6119c5816119b2565b81146119d057600080fd5b50565b6000813590506119e2816119bc565b92915050565b6000602082840312156119fe576119fd6117b4565b5b6000611a0c848285016119d3565b91505092915050565b611a1e816119b2565b82525050565b6000602082019050611a396000830184611a15565b92915050565b600060208284031215611a5557611a546117b4565b5b6000611a6384828501611929565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a9782611a6c565b9050919050565b611aa781611a8c565b8114611ab257600080fd5b50565b600081359050611ac481611a9e565b92915050565b60008060408385031215611ae157611ae06117b4565b5b6000611aef858286016119d3565b9250506020611b0085828601611ab5565b9150509250929050565b6000819050919050565b6000611b2f611b2a611b2584611a6c565b611b0a565b611a6c565b9050919050565b6000611b4182611b14565b9050919050565b6000611b5382611b36565b9050919050565b611b6381611b48565b82525050565b6000602082019050611b7e6000830184611b5a565b92915050565b600060208284031215611b9a57611b996117b4565b5b6000611ba884828501611ab5565b91505092915050565b600082825260208201905092915050565b7f466565546f6b656e3a2041697264726f7020656e646564000000000000000000600082015250565b6000611bf8601783611bb1565b9150611c0382611bc2565b602082019050919050565b60006020820190508181036000830152611c2781611beb565b9050919050565b7f466565546f6b656e3a2041697264726f70206861766520616c7265616479206260008201527f65656e20636c61696d6564000000000000000000000000000000000000000000602082015250565b6000611c8a602b83611bb1565b9150611c9582611c2e565b604082019050919050565b60006020820190508181036000830152611cb981611c7d565b9050919050565b7f466565546f6b656e3a20496e76616c6964207369676e61747572650000000000600082015250565b6000611cf6601b83611bb1565b9150611d0182611cc0565b602082019050919050565b60006020820190508181036000830152611d2581611ce9565b9050919050565b7f466565546f6b656e3a205369676e617475726520657870697265640000000000600082015250565b6000611d62601b83611bb1565b9150611d6d82611d2c565b602082019050919050565b60006020820190508181036000830152611d9181611d55565b9050919050565b7f466565546f6b656e3a20416d6f756e74206d757374206265206772656174657260008201527f207468616e207a65726f00000000000000000000000000000000000000000000602082015250565b6000611df4602a83611bb1565b9150611dff82611d98565b604082019050919050565b60006020820190508181036000830152611e2381611de7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e6482611879565b9150611e6f83611879565b925082821015611e8257611e81611e2a565b5b828203905092915050565b611e9681611a8c565b82525050565b6000604082019050611eb16000830185611e8d565b611ebe6020830184611883565b9392505050565b611ece81611843565b8114611ed957600080fd5b50565b600081519050611eeb81611ec5565b92915050565b600060208284031215611f0757611f066117b4565b5b6000611f1584828501611edc565b91505092915050565b7f466565546f6b656e3a2043616c6c657220646f65736e2774206861766520414460008201527f4d494e20726f6c65000000000000000000000000000000000000000000000000602082015250565b6000611f7a602883611bb1565b9150611f8582611f1e565b604082019050919050565b60006020820190508181036000830152611fa981611f6d565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061200c602f83611bb1565b915061201782611fb0565b604082019050919050565b6000602082019050818103600083015261203b81611fff565b9050919050565b60006060820190506120576000830186611e8d565b6120646020830185611e8d565b6120716040830184611883565b949350505050565b600061208482611879565b915061208f83611879565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156120c4576120c3611e2a565b5b828201905092915050565b60006020820190506120e46000830184611e8d565b92915050565b6000815190506120f981611912565b92915050565b600060208284031215612115576121146117b4565b5b6000612123848285016120ea565b91505092915050565b60006080820190506121416000830187611a15565b61214e6020830186611e8d565b61215b6040830185611a15565b6121686060830184611a15565b95945050505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006121b2601783612171565b91506121bd8261217c565b601782019050919050565b600081519050919050565b60005b838110156121f15780820151818401526020810190506121d6565b83811115612200576000848401525b50505050565b6000612211826121c8565b61221b8185612171565b935061222b8185602086016121d3565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600061226d601183612171565b915061227882612237565b601182019050919050565b600061228e826121a5565b915061229a8285612206565b91506122a582612260565b91506122b18284612206565b91508190509392505050565b6000601f19601f8301169050919050565b60006122d9826121c8565b6122e38185611bb1565b93506122f38185602086016121d3565b6122fc816122bd565b840191505092915050565b6000602082019050818103600083015261232181846122ce565b905092915050565b600061233482611879565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561236757612366611e2a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006123ac82611879565b91506123b783611879565b9250826123c7576123c6612372565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061240c82611879565b915061241783611879565b92508261242757612426612372565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061246c82611879565b915061247783611879565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124b0576124af611e2a565b5b828202905092915050565b60006124c682611879565b915060008214156124da576124d9611e2a565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061251b602083611bb1565b9150612526826124e5565b602082019050919050565b6000602082019050818103600083015261254a8161250e565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612587600283612171565b915061259282612551565b600282019050919050565b6000819050919050565b6125b86125b3826119b2565b61259d565b82525050565b60006125c98261257a565b91506125d582856125a7565b6020820191506125e582846125a7565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061265a601883611bb1565b915061266582612624565b602082019050919050565b600060208201905081810360008301526126898161264d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006126c6601f83611bb1565b91506126d182612690565b602082019050919050565b600060208201905081810360008301526126f5816126b9565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612758602283611bb1565b9150612763826126fc565b604082019050919050565b600060208201905081810360008301526127878161274b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006127ea602283611bb1565b91506127f58261278e565b604082019050919050565b60006020820190508181036000830152612819816127dd565b9050919050565b600060a0820190506128356000830188611a15565b6128426020830187611a15565b61284f6040830186611a15565b61285c6060830185611883565b6128696080830184611e8d565b9695505050505050565b600060ff82169050919050565b61288981612873565b82525050565b60006080820190506128a46000830187611a15565b6128b16020830186612880565b6128be6040830185611a15565b6128cb6060830184611a15565b9594505050505056fea26469706673582212200e71598940b37f55fa95eeb5e60359379aafb1c06bc642cebca18741399ab3f664736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000985572429deb3acc47e019af6b3da4620175e553
-----Decoded View---------------
Arg [0] : _feeToken (address): 0x985572429DEb3AcC47E019Af6b3Da4620175E553
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000985572429deb3acc47e019af6b3da4620175e553
Deployed Bytecode Sourcemap
30328:3067:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12459:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30493:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31525:1080;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13870:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31129:242;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14255:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32613:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15303:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30385:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30590:81;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12755:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11846:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30967:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30424:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14647:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31379:138;;;:::i;:::-;;12459:204;12544:4;12583:32;12568:47;;;:11;:47;;;;:87;;;;12619:36;12643:11;12619:23;:36::i;:::-;12568:87;12561:94;;12459:204;;;:::o;30493:26::-;;;;:::o;31525:1080::-;31630:15;31648:42;31659:10;;31671:7;31680:9;31648:10;:42::i;:::-;31630:60;;30573:8;31711:12;:35;;31703:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31873:8;:22;31882:12;:10;:12::i;:::-;31873:22;;;;;;;;;;;;;;;;;;;;;;;;;31872:23;31864:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;32009:29;30462:24;32030:7;32009;:29::i;:::-;32001:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32151:15;32138:9;:28;;32130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32288:1;32278:7;:11;32270:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32432:4;32407:8;:22;32416:12;:10;:12::i;:::-;32407:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32505:7;32491:12;:10;:12::i;:::-;32480:33;;;;;;;;;;;;32539:7;32524:11;;:22;;;;;;;:::i;:::-;;;;;;;;32557:8;:17;;;32575:12;:10;:12::i;:::-;32589:7;32557:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31619:986;31525:1080;;;;:::o;13870:123::-;13936:7;13963:6;:12;13970:4;13963:12;;;;;;;;;;;:22;;;13956:29;;13870:123;;;:::o;31129:242::-;31193:41;11891:4;31201:18;;31221:12;:10;:12::i;:::-;31193:7;:41::i;:::-;31185:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;31305:7;31290:11;;:22;;;;;;;:::i;:::-;;;;;;;;31323:8;:17;;;31341:12;:10;:12::i;:::-;31355:7;31323:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31129:242;:::o;14255:147::-;14338:18;14351:4;14338:12;:18::i;:::-;12337:30;12348:4;12354:12;:10;:12::i;:::-;12337:10;:30::i;:::-;14369:25:::1;14380:4;14386:7;14369:10;:25::i;:::-;14255:147:::0;;;:::o;32613:92::-;32657:7;32684:13;32677:20;;32613:92;:::o;15303:218::-;15410:12;:10;:12::i;:::-;15399:23;;:7;:23;;;15391:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;15487:26;15499:4;15505:7;15487:11;:26::i;:::-;15303:218;;:::o;30385:32::-;;;:::o;30590:81::-;;;;;;;;;;;;;;;;;;;;;;:::o;12755:139::-;12833:4;12857:6;:12;12864:4;12857:12;;;;;;;;;;;:20;;:29;12878:7;12857:29;;;;;;;;;;;;;;;;;;;;;;;;;12850:36;;12755:139;;;;:::o;11846:49::-;11891:4;11846:49;;;:::o;30967:154::-;31021:8;:21;;;31043:12;:10;:12::i;:::-;31065:4;31072:7;31021:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31106:7;31091:11;;:22;;;;;;;:::i;:::-;;;;;;;;30967:154;:::o;30424:62::-;30462:24;30424:62;:::o;14647:149::-;14731:18;14744:4;14731:12;:18::i;:::-;12337:30;12348:4;12354:12;:10;:12::i;:::-;12337:10;:30::i;:::-;14762:26:::1;14774:4;14780:7;14762:11;:26::i;:::-;14647:149:::0;;;:::o;31379:138::-;31415:13;31467:11;;31431:8;:18;;;31458:4;31431:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;31415:63;;31504:5;31489:11;;:20;;;;;;;:::i;:::-;;;;;;;;31404:113;31379:138::o;9880:157::-;9965:4;10004:25;9989:40;;;:11;:40;;;;9982:47;;9880:157;;;:::o;32713:679::-;32817:15;32845;32863:466;32955:62;33041:12;:10;:12::i;:::-;33119:25;33136:7;33119:16;:25::i;:::-;33077:91;;;;;;33233:27;33250:9;33233:16;:27::i;:::-;33191:93;;;;;;32922:381;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32894:424;;;;;;32863:16;:466::i;:::-;32845:484;;33350:34;33364:7;33373:10;;33350:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:34::i;:::-;33340:44;;32834:558;32713:679;;;;;;:::o;8218:98::-;8271:7;8298:10;8291:17;;8218:98;:::o;13184:497::-;13265:22;13273:4;13279:7;13265;:22::i;:::-;13260:414;;13453:41;13481:7;13453:41;;13491:2;13453:19;:41::i;:::-;13567:38;13595:4;13587:13;;13602:2;13567:19;:38::i;:::-;13358:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13304:358;;;;;;;;;;;:::i;:::-;;;;;;;;13260:414;13184:497;;:::o;16607:229::-;16682:22;16690:4;16696:7;16682;:22::i;:::-;16677:152;;16753:4;16721:6;:12;16728:4;16721:12;;;;;;;;;;;:20;;:29;16742:7;16721:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;16804:12;:10;:12::i;:::-;16777:40;;16795:7;16777:40;;16789:4;16777:40;;;;;;;;;;16677:152;16607:229;;:::o;16844:230::-;16919:22;16927:4;16933:7;16919;:22::i;:::-;16915:152;;;16990:5;16958:6;:12;16965:4;16958:12;;;;;;;;;;;:20;;:29;16979:7;16958:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;17042:12;:10;:12::i;:::-;17015:40;;17033:7;17015:40;;17027:4;17015:40;;;;;;;;;;16915:152;16844:230;;:::o;286:723::-;342:13;572:1;563:5;:10;559:53;;;590:10;;;;;;;;;;;;;;;;;;;;;559:53;622:12;637:5;622:20;;653:14;678:78;693:1;685:4;:9;678:78;;711:8;;;;;:::i;:::-;;;;742:2;734:10;;;;;:::i;:::-;;;678:78;;;766:19;798:6;788:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;766:39;;816:154;832:1;823:5;:10;816:154;;860:1;850:11;;;;;:::i;:::-;;;927:2;919:5;:10;;;;:::i;:::-;906:2;:24;;;;:::i;:::-;893:39;;876:6;883;876:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;956:2;947:11;;;;;:::i;:::-;;;816:154;;;994:6;980:21;;;;;286:723;;;;:::o;30154:167::-;30231:7;30258:55;30280:20;:18;:20::i;:::-;30302:10;30258:21;:55::i;:::-;30251:62;;30154:167;;;:::o;21320:231::-;21398:7;21419:17;21438:18;21460:27;21471:4;21477:9;21460:10;:27::i;:::-;21418:69;;;;21498:18;21510:5;21498:11;:18::i;:::-;21534:9;21527:16;;;;21320:231;;;;:::o;1587:451::-;1662:13;1688:19;1733:1;1724:6;1720:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1710:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1688:47;;1746:15;:6;1753:1;1746:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1772;:6;1779:1;1772:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1803:9;1828:1;1819:6;1815:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1803:26;;1798:135;1835:1;1831;:5;1798:135;;;1870:12;1891:3;1883:5;:11;1870:25;;;;;;;:::i;:::-;;;;;1858:6;1865:1;1858:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;1920:1;1910:11;;;;;1838:3;;;;:::i;:::-;;;1798:135;;;;1960:1;1951:5;:10;1943:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2023:6;2009:21;;;1587:451;;;;:::o;28960:281::-;29013:7;29054:16;29037:13;:33;29033:201;;;29094:24;29087:31;;;;29033:201;29158:64;29180:10;29192:12;29206:15;29158:21;:64::i;:::-;29151:71;;28960:281;;:::o;25788:196::-;25881:7;25947:15;25964:10;25918:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25908:68;;;;;;25901:75;;25788:196;;;;:::o;19210:1308::-;19291:7;19300:12;19545:2;19525:9;:16;:22;19521:990;;;19564:9;19588;19612:7;19821:4;19810:9;19806:20;19800:27;19795:32;;19871:4;19860:9;19856:20;19850:27;19845:32;;19929:4;19918:9;19914:20;19908:27;19905:1;19900:36;19895:41;;19972:25;19983:4;19989:1;19992;19995;19972:10;:25::i;:::-;19965:32;;;;;;;;;19521:990;20039:2;20019:9;:16;:22;20015:496;;;20058:9;20082:10;20294:4;20283:9;20279:20;20273:27;20268:32;;20345:4;20334:9;20330:20;20324:27;20318:33;;20387:23;20398:4;20404:1;20407:2;20387:10;:23::i;:::-;20380:30;;;;;;;;20015:496;20459:1;20463:35;20443:56;;;;19210:1308;;;;;;:::o;17481:643::-;17559:20;17550:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;17546:571;;;17596:7;;17546:571;17657:29;17648:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;17644:473;;;17703:34;;;;;;;;;;:::i;:::-;;;;;;;;17644:473;17768:35;17759:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;17755:362;;;17820:41;;;;;;;;;;:::i;:::-;;;;;;;;17755:362;17892:30;17883:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;17879:238;;;17939:44;;;;;;;;;;:::i;:::-;;;;;;;;17879:238;18014:30;18005:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;18001:116;;;18061:44;;;;;;;;;;:::i;:::-;;;;;;;;18001:116;17481:643;;:::o;29249:263::-;29393:7;29441:8;29451;29461:11;29474:13;29497:4;29430:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29420:84;;;;;;29413:91;;29249:263;;;;;:::o;22819:1632::-;22950:7;22959:12;23884:66;23879:1;23871:10;;:79;23867:163;;;23983:1;23987:30;23967:51;;;;;;23867:163;24049:2;24044:1;:7;;;;:18;;;;;24060:2;24055:1;:7;;;;24044:18;24040:102;;;24095:1;24099:30;24079:51;;;;;;24040:102;24239:14;24256:24;24266:4;24272:1;24275;24278;24256:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24239:41;;24313:1;24295:20;;:6;:20;;;24291:103;;;24348:1;24352:29;24332:50;;;;;;;24291:103;24414:6;24422:20;24406:37;;;;;22819:1632;;;;;;;;:::o;21814:391::-;21928:7;21937:12;21962:9;21982:7;22037:66;22033:2;22029:75;22024:80;;22141:2;22136;22131:3;22127:12;22123:21;22118:26;;22172:25;22183:4;22189:1;22192;22195;22172:10;:25::i;:::-;22165:32;;;;;;21814:391;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:117::-;2062:1;2059;2052:12;2076:117;2185:1;2182;2175:12;2199:117;2308:1;2305;2298:12;2335:552;2392:8;2402:6;2452:3;2445:4;2437:6;2433:17;2429:27;2419:122;;2460:79;;:::i;:::-;2419:122;2573:6;2560:20;2550:30;;2603:18;2595:6;2592:30;2589:117;;;2625:79;;:::i;:::-;2589:117;2739:4;2731:6;2727:17;2715:29;;2793:3;2785:4;2777:6;2773:17;2763:8;2759:32;2756:41;2753:128;;;2800:79;;:::i;:::-;2753:128;2335:552;;;;;:::o;2893:122::-;2966:24;2984:5;2966:24;:::i;:::-;2959:5;2956:35;2946:63;;3005:1;3002;2995:12;2946:63;2893:122;:::o;3021:139::-;3067:5;3105:6;3092:20;3083:29;;3121:33;3148:5;3121:33;:::i;:::-;3021:139;;;;:::o;3166:817::-;3254:6;3262;3270;3278;3327:2;3315:9;3306:7;3302:23;3298:32;3295:119;;;3333:79;;:::i;:::-;3295:119;3481:1;3470:9;3466:17;3453:31;3511:18;3503:6;3500:30;3497:117;;;3533:79;;:::i;:::-;3497:117;3646:64;3702:7;3693:6;3682:9;3678:22;3646:64;:::i;:::-;3628:82;;;;3424:296;3759:2;3785:53;3830:7;3821:6;3810:9;3806:22;3785:53;:::i;:::-;3775:63;;3730:118;3887:2;3913:53;3958:7;3949:6;3938:9;3934:22;3913:53;:::i;:::-;3903:63;;3858:118;3166:817;;;;;;;:::o;3989:77::-;4026:7;4055:5;4044:16;;3989:77;;;:::o;4072:122::-;4145:24;4163:5;4145:24;:::i;:::-;4138:5;4135:35;4125:63;;4184:1;4181;4174:12;4125:63;4072:122;:::o;4200:139::-;4246:5;4284:6;4271:20;4262:29;;4300:33;4327:5;4300:33;:::i;:::-;4200:139;;;;:::o;4345:329::-;4404:6;4453:2;4441:9;4432:7;4428:23;4424:32;4421:119;;;4459:79;;:::i;:::-;4421:119;4579:1;4604:53;4649:7;4640:6;4629:9;4625:22;4604:53;:::i;:::-;4594:63;;4550:117;4345:329;;;;:::o;4680:118::-;4767:24;4785:5;4767:24;:::i;:::-;4762:3;4755:37;4680:118;;:::o;4804:222::-;4897:4;4935:2;4924:9;4920:18;4912:26;;4948:71;5016:1;5005:9;5001:17;4992:6;4948:71;:::i;:::-;4804:222;;;;:::o;5032:329::-;5091:6;5140:2;5128:9;5119:7;5115:23;5111:32;5108:119;;;5146:79;;:::i;:::-;5108:119;5266:1;5291:53;5336:7;5327:6;5316:9;5312:22;5291:53;:::i;:::-;5281:63;;5237:117;5032:329;;;;:::o;5367:126::-;5404:7;5444:42;5437:5;5433:54;5422:65;;5367:126;;;:::o;5499:96::-;5536:7;5565:24;5583:5;5565:24;:::i;:::-;5554:35;;5499:96;;;:::o;5601:122::-;5674:24;5692:5;5674:24;:::i;:::-;5667:5;5664:35;5654:63;;5713:1;5710;5703:12;5654:63;5601:122;:::o;5729:139::-;5775:5;5813:6;5800:20;5791:29;;5829:33;5856:5;5829:33;:::i;:::-;5729:139;;;;:::o;5874:474::-;5942:6;5950;5999:2;5987:9;5978:7;5974:23;5970:32;5967:119;;;6005:79;;:::i;:::-;5967:119;6125:1;6150:53;6195:7;6186:6;6175:9;6171:22;6150:53;:::i;:::-;6140:63;;6096:117;6252:2;6278:53;6323:7;6314:6;6303:9;6299:22;6278:53;:::i;:::-;6268:63;;6223:118;5874:474;;;;;:::o;6354:60::-;6382:3;6403:5;6396:12;;6354:60;;;:::o;6420:142::-;6470:9;6503:53;6521:34;6530:24;6548:5;6530:24;:::i;:::-;6521:34;:::i;:::-;6503:53;:::i;:::-;6490:66;;6420:142;;;:::o;6568:126::-;6618:9;6651:37;6682:5;6651:37;:::i;:::-;6638:50;;6568:126;;;:::o;6700:140::-;6764:9;6797:37;6828:5;6797:37;:::i;:::-;6784:50;;6700:140;;;:::o;6846:159::-;6947:51;6992:5;6947:51;:::i;:::-;6942:3;6935:64;6846:159;;:::o;7011:250::-;7118:4;7156:2;7145:9;7141:18;7133:26;;7169:85;7251:1;7240:9;7236:17;7227:6;7169:85;:::i;:::-;7011:250;;;;:::o;7267:329::-;7326:6;7375:2;7363:9;7354:7;7350:23;7346:32;7343:119;;;7381:79;;:::i;:::-;7343:119;7501:1;7526:53;7571:7;7562:6;7551:9;7547:22;7526:53;:::i;:::-;7516:63;;7472:117;7267:329;;;;:::o;7602:169::-;7686:11;7720:6;7715:3;7708:19;7760:4;7755:3;7751:14;7736:29;;7602:169;;;;:::o;7777:173::-;7917:25;7913:1;7905:6;7901:14;7894:49;7777:173;:::o;7956:366::-;8098:3;8119:67;8183:2;8178:3;8119:67;:::i;:::-;8112:74;;8195:93;8284:3;8195:93;:::i;:::-;8313:2;8308:3;8304:12;8297:19;;7956:366;;;:::o;8328:419::-;8494:4;8532:2;8521:9;8517:18;8509:26;;8581:9;8575:4;8571:20;8567:1;8556:9;8552:17;8545:47;8609:131;8735:4;8609:131;:::i;:::-;8601:139;;8328:419;;;:::o;8753:230::-;8893:34;8889:1;8881:6;8877:14;8870:58;8962:13;8957:2;8949:6;8945:15;8938:38;8753:230;:::o;8989:366::-;9131:3;9152:67;9216:2;9211:3;9152:67;:::i;:::-;9145:74;;9228:93;9317:3;9228:93;:::i;:::-;9346:2;9341:3;9337:12;9330:19;;8989:366;;;:::o;9361:419::-;9527:4;9565:2;9554:9;9550:18;9542:26;;9614:9;9608:4;9604:20;9600:1;9589:9;9585:17;9578:47;9642:131;9768:4;9642:131;:::i;:::-;9634:139;;9361:419;;;:::o;9786:177::-;9926:29;9922:1;9914:6;9910:14;9903:53;9786:177;:::o;9969:366::-;10111:3;10132:67;10196:2;10191:3;10132:67;:::i;:::-;10125:74;;10208:93;10297:3;10208:93;:::i;:::-;10326:2;10321:3;10317:12;10310:19;;9969:366;;;:::o;10341:419::-;10507:4;10545:2;10534:9;10530:18;10522:26;;10594:9;10588:4;10584:20;10580:1;10569:9;10565:17;10558:47;10622:131;10748:4;10622:131;:::i;:::-;10614:139;;10341:419;;;:::o;10766:177::-;10906:29;10902:1;10894:6;10890:14;10883:53;10766:177;:::o;10949:366::-;11091:3;11112:67;11176:2;11171:3;11112:67;:::i;:::-;11105:74;;11188:93;11277:3;11188:93;:::i;:::-;11306:2;11301:3;11297:12;11290:19;;10949:366;;;:::o;11321:419::-;11487:4;11525:2;11514:9;11510:18;11502:26;;11574:9;11568:4;11564:20;11560:1;11549:9;11545:17;11538:47;11602:131;11728:4;11602:131;:::i;:::-;11594:139;;11321:419;;;:::o;11746:229::-;11886:34;11882:1;11874:6;11870:14;11863:58;11955:12;11950:2;11942:6;11938:15;11931:37;11746:229;:::o;11981:366::-;12123:3;12144:67;12208:2;12203:3;12144:67;:::i;:::-;12137:74;;12220:93;12309:3;12220:93;:::i;:::-;12338:2;12333:3;12329:12;12322:19;;11981:366;;;:::o;12353:419::-;12519:4;12557:2;12546:9;12542:18;12534:26;;12606:9;12600:4;12596:20;12592:1;12581:9;12577:17;12570:47;12634:131;12760:4;12634:131;:::i;:::-;12626:139;;12353:419;;;:::o;12778:180::-;12826:77;12823:1;12816:88;12923:4;12920:1;12913:15;12947:4;12944:1;12937:15;12964:191;13004:4;13024:20;13042:1;13024:20;:::i;:::-;13019:25;;13058:20;13076:1;13058:20;:::i;:::-;13053:25;;13097:1;13094;13091:8;13088:34;;;13102:18;;:::i;:::-;13088:34;13147:1;13144;13140:9;13132:17;;12964:191;;;;:::o;13161:118::-;13248:24;13266:5;13248:24;:::i;:::-;13243:3;13236:37;13161:118;;:::o;13285:332::-;13406:4;13444:2;13433:9;13429:18;13421:26;;13457:71;13525:1;13514:9;13510:17;13501:6;13457:71;:::i;:::-;13538:72;13606:2;13595:9;13591:18;13582:6;13538:72;:::i;:::-;13285:332;;;;;:::o;13623:116::-;13693:21;13708:5;13693:21;:::i;:::-;13686:5;13683:32;13673:60;;13729:1;13726;13719:12;13673:60;13623:116;:::o;13745:137::-;13799:5;13830:6;13824:13;13815:22;;13846:30;13870:5;13846:30;:::i;:::-;13745:137;;;;:::o;13888:345::-;13955:6;14004:2;13992:9;13983:7;13979:23;13975:32;13972:119;;;14010:79;;:::i;:::-;13972:119;14130:1;14155:61;14208:7;14199:6;14188:9;14184:22;14155:61;:::i;:::-;14145:71;;14101:125;13888:345;;;;:::o;14239:227::-;14379:34;14375:1;14367:6;14363:14;14356:58;14448:10;14443:2;14435:6;14431:15;14424:35;14239:227;:::o;14472:366::-;14614:3;14635:67;14699:2;14694:3;14635:67;:::i;:::-;14628:74;;14711:93;14800:3;14711:93;:::i;:::-;14829:2;14824:3;14820:12;14813:19;;14472:366;;;:::o;14844:419::-;15010:4;15048:2;15037:9;15033:18;15025:26;;15097:9;15091:4;15087:20;15083:1;15072:9;15068:17;15061:47;15125:131;15251:4;15125:131;:::i;:::-;15117:139;;14844:419;;;:::o;15269:234::-;15409:34;15405:1;15397:6;15393:14;15386:58;15478:17;15473:2;15465:6;15461:15;15454:42;15269:234;:::o;15509:366::-;15651:3;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15748:93;15837:3;15748:93;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15509:366;;;:::o;15881:419::-;16047:4;16085:2;16074:9;16070:18;16062:26;;16134:9;16128:4;16124:20;16120:1;16109:9;16105:17;16098:47;16162:131;16288:4;16162:131;:::i;:::-;16154:139;;15881:419;;;:::o;16306:442::-;16455:4;16493:2;16482:9;16478:18;16470:26;;16506:71;16574:1;16563:9;16559:17;16550:6;16506:71;:::i;:::-;16587:72;16655:2;16644:9;16640:18;16631:6;16587:72;:::i;:::-;16669;16737:2;16726:9;16722:18;16713:6;16669:72;:::i;:::-;16306:442;;;;;;:::o;16754:305::-;16794:3;16813:20;16831:1;16813:20;:::i;:::-;16808:25;;16847:20;16865:1;16847:20;:::i;:::-;16842:25;;17001:1;16933:66;16929:74;16926:1;16923:81;16920:107;;;17007:18;;:::i;:::-;16920:107;17051:1;17048;17044:9;17037:16;;16754:305;;;;:::o;17065:222::-;17158:4;17196:2;17185:9;17181:18;17173:26;;17209:71;17277:1;17266:9;17262:17;17253:6;17209:71;:::i;:::-;17065:222;;;;:::o;17293:143::-;17350:5;17381:6;17375:13;17366:22;;17397:33;17424:5;17397:33;:::i;:::-;17293:143;;;;:::o;17442:351::-;17512:6;17561:2;17549:9;17540:7;17536:23;17532:32;17529:119;;;17567:79;;:::i;:::-;17529:119;17687:1;17712:64;17768:7;17759:6;17748:9;17744:22;17712:64;:::i;:::-;17702:74;;17658:128;17442:351;;;;:::o;17799:553::-;17976:4;18014:3;18003:9;17999:19;17991:27;;18028:71;18096:1;18085:9;18081:17;18072:6;18028:71;:::i;:::-;18109:72;18177:2;18166:9;18162:18;18153:6;18109:72;:::i;:::-;18191;18259:2;18248:9;18244:18;18235:6;18191:72;:::i;:::-;18273;18341:2;18330:9;18326:18;18317:6;18273:72;:::i;:::-;17799:553;;;;;;;:::o;18358:148::-;18460:11;18497:3;18482:18;;18358:148;;;;:::o;18512:173::-;18652:25;18648:1;18640:6;18636:14;18629:49;18512:173;:::o;18691:402::-;18851:3;18872:85;18954:2;18949:3;18872:85;:::i;:::-;18865:92;;18966:93;19055:3;18966:93;:::i;:::-;19084:2;19079:3;19075:12;19068:19;;18691:402;;;:::o;19099:99::-;19151:6;19185:5;19179:12;19169:22;;19099:99;;;:::o;19204:307::-;19272:1;19282:113;19296:6;19293:1;19290:13;19282:113;;;19381:1;19376:3;19372:11;19366:18;19362:1;19357:3;19353:11;19346:39;19318:2;19315:1;19311:10;19306:15;;19282:113;;;19413:6;19410:1;19407:13;19404:101;;;19493:1;19484:6;19479:3;19475:16;19468:27;19404:101;19253:258;19204:307;;;:::o;19517:377::-;19623:3;19651:39;19684:5;19651:39;:::i;:::-;19706:89;19788:6;19783:3;19706:89;:::i;:::-;19699:96;;19804:52;19849:6;19844:3;19837:4;19830:5;19826:16;19804:52;:::i;:::-;19881:6;19876:3;19872:16;19865:23;;19627:267;19517:377;;;;:::o;19900:167::-;20040:19;20036:1;20028:6;20024:14;20017:43;19900:167;:::o;20073:402::-;20233:3;20254:85;20336:2;20331:3;20254:85;:::i;:::-;20247:92;;20348:93;20437:3;20348:93;:::i;:::-;20466:2;20461:3;20457:12;20450:19;;20073:402;;;:::o;20481:967::-;20863:3;20885:148;21029:3;20885:148;:::i;:::-;20878:155;;21050:95;21141:3;21132:6;21050:95;:::i;:::-;21043:102;;21162:148;21306:3;21162:148;:::i;:::-;21155:155;;21327:95;21418:3;21409:6;21327:95;:::i;:::-;21320:102;;21439:3;21432:10;;20481:967;;;;;:::o;21454:102::-;21495:6;21546:2;21542:7;21537:2;21530:5;21526:14;21522:28;21512:38;;21454:102;;;:::o;21562:364::-;21650:3;21678:39;21711:5;21678:39;:::i;:::-;21733:71;21797:6;21792:3;21733:71;:::i;:::-;21726:78;;21813:52;21858:6;21853:3;21846:4;21839:5;21835:16;21813:52;:::i;:::-;21890:29;21912:6;21890:29;:::i;:::-;21885:3;21881:39;21874:46;;21654:272;21562:364;;;;:::o;21932:313::-;22045:4;22083:2;22072:9;22068:18;22060:26;;22132:9;22126:4;22122:20;22118:1;22107:9;22103:17;22096:47;22160:78;22233:4;22224:6;22160:78;:::i;:::-;22152:86;;21932:313;;;;:::o;22251:233::-;22290:3;22313:24;22331:5;22313:24;:::i;:::-;22304:33;;22359:66;22352:5;22349:77;22346:103;;;22429:18;;:::i;:::-;22346:103;22476:1;22469:5;22465:13;22458:20;;22251:233;;;:::o;22490:180::-;22538:77;22535:1;22528:88;22635:4;22632:1;22625:15;22659:4;22656:1;22649:15;22676:185;22716:1;22733:20;22751:1;22733:20;:::i;:::-;22728:25;;22767:20;22785:1;22767:20;:::i;:::-;22762:25;;22806:1;22796:35;;22811:18;;:::i;:::-;22796:35;22853:1;22850;22846:9;22841:14;;22676:185;;;;:::o;22867:180::-;22915:77;22912:1;22905:88;23012:4;23009:1;23002:15;23036:4;23033:1;23026:15;23053:176;23085:1;23102:20;23120:1;23102:20;:::i;:::-;23097:25;;23136:20;23154:1;23136:20;:::i;:::-;23131:25;;23175:1;23165:35;;23180:18;;:::i;:::-;23165:35;23221:1;23218;23214:9;23209:14;;23053:176;;;;:::o;23235:180::-;23283:77;23280:1;23273:88;23380:4;23377:1;23370:15;23404:4;23401:1;23394:15;23421:348;23461:7;23484:20;23502:1;23484:20;:::i;:::-;23479:25;;23518:20;23536:1;23518:20;:::i;:::-;23513:25;;23706:1;23638:66;23634:74;23631:1;23628:81;23623:1;23616:9;23609:17;23605:105;23602:131;;;23713:18;;:::i;:::-;23602:131;23761:1;23758;23754:9;23743:20;;23421:348;;;;:::o;23775:171::-;23814:3;23837:24;23855:5;23837:24;:::i;:::-;23828:33;;23883:4;23876:5;23873:15;23870:41;;;23891:18;;:::i;:::-;23870:41;23938:1;23931:5;23927:13;23920:20;;23775:171;;;:::o;23952:182::-;24092:34;24088:1;24080:6;24076:14;24069:58;23952:182;:::o;24140:366::-;24282:3;24303:67;24367:2;24362:3;24303:67;:::i;:::-;24296:74;;24379:93;24468:3;24379:93;:::i;:::-;24497:2;24492:3;24488:12;24481:19;;24140:366;;;:::o;24512:419::-;24678:4;24716:2;24705:9;24701:18;24693:26;;24765:9;24759:4;24755:20;24751:1;24740:9;24736:17;24729:47;24793:131;24919:4;24793:131;:::i;:::-;24785:139;;24512:419;;;:::o;24937:214::-;25077:66;25073:1;25065:6;25061:14;25054:90;24937:214;:::o;25157:400::-;25317:3;25338:84;25420:1;25415:3;25338:84;:::i;:::-;25331:91;;25431:93;25520:3;25431:93;:::i;:::-;25549:1;25544:3;25540:11;25533:18;;25157:400;;;:::o;25563:79::-;25602:7;25631:5;25620:16;;25563:79;;;:::o;25648:157::-;25753:45;25773:24;25791:5;25773:24;:::i;:::-;25753:45;:::i;:::-;25748:3;25741:58;25648:157;;:::o;25811:663::-;26052:3;26074:148;26218:3;26074:148;:::i;:::-;26067:155;;26232:75;26303:3;26294:6;26232:75;:::i;:::-;26332:2;26327:3;26323:12;26316:19;;26345:75;26416:3;26407:6;26345:75;:::i;:::-;26445:2;26440:3;26436:12;26429:19;;26465:3;26458:10;;25811:663;;;;;:::o;26480:180::-;26528:77;26525:1;26518:88;26625:4;26622:1;26615:15;26649:4;26646:1;26639:15;26666:174;26806:26;26802:1;26794:6;26790:14;26783:50;26666:174;:::o;26846:366::-;26988:3;27009:67;27073:2;27068:3;27009:67;:::i;:::-;27002:74;;27085:93;27174:3;27085:93;:::i;:::-;27203:2;27198:3;27194:12;27187:19;;26846:366;;;:::o;27218:419::-;27384:4;27422:2;27411:9;27407:18;27399:26;;27471:9;27465:4;27461:20;27457:1;27446:9;27442:17;27435:47;27499:131;27625:4;27499:131;:::i;:::-;27491:139;;27218:419;;;:::o;27643:181::-;27783:33;27779:1;27771:6;27767:14;27760:57;27643:181;:::o;27830:366::-;27972:3;27993:67;28057:2;28052:3;27993:67;:::i;:::-;27986:74;;28069:93;28158:3;28069:93;:::i;:::-;28187:2;28182:3;28178:12;28171:19;;27830:366;;;:::o;28202:419::-;28368:4;28406:2;28395:9;28391:18;28383:26;;28455:9;28449:4;28445:20;28441:1;28430:9;28426:17;28419:47;28483:131;28609:4;28483:131;:::i;:::-;28475:139;;28202:419;;;:::o;28627:221::-;28767:34;28763:1;28755:6;28751:14;28744:58;28836:4;28831:2;28823:6;28819:15;28812:29;28627:221;:::o;28854:366::-;28996:3;29017:67;29081:2;29076:3;29017:67;:::i;:::-;29010:74;;29093:93;29182:3;29093:93;:::i;:::-;29211:2;29206:3;29202:12;29195:19;;28854:366;;;:::o;29226:419::-;29392:4;29430:2;29419:9;29415:18;29407:26;;29479:9;29473:4;29469:20;29465:1;29454:9;29450:17;29443:47;29507:131;29633:4;29507:131;:::i;:::-;29499:139;;29226:419;;;:::o;29651:221::-;29791:34;29787:1;29779:6;29775:14;29768:58;29860:4;29855:2;29847:6;29843:15;29836:29;29651:221;:::o;29878:366::-;30020:3;30041:67;30105:2;30100:3;30041:67;:::i;:::-;30034:74;;30117:93;30206:3;30117:93;:::i;:::-;30235:2;30230:3;30226:12;30219:19;;29878:366;;;:::o;30250:419::-;30416:4;30454:2;30443:9;30439:18;30431:26;;30503:9;30497:4;30493:20;30489:1;30478:9;30474:17;30467:47;30531:131;30657:4;30531:131;:::i;:::-;30523:139;;30250:419;;;:::o;30675:664::-;30880:4;30918:3;30907:9;30903:19;30895:27;;30932:71;31000:1;30989:9;30985:17;30976:6;30932:71;:::i;:::-;31013:72;31081:2;31070:9;31066:18;31057:6;31013:72;:::i;:::-;31095;31163:2;31152:9;31148:18;31139:6;31095:72;:::i;:::-;31177;31245:2;31234:9;31230:18;31221:6;31177:72;:::i;:::-;31259:73;31327:3;31316:9;31312:19;31303:6;31259:73;:::i;:::-;30675:664;;;;;;;;:::o;31345:86::-;31380:7;31420:4;31413:5;31409:16;31398:27;;31345:86;;;:::o;31437:112::-;31520:22;31536:5;31520:22;:::i;:::-;31515:3;31508:35;31437:112;;:::o;31555:545::-;31728:4;31766:3;31755:9;31751:19;31743:27;;31780:71;31848:1;31837:9;31833:17;31824:6;31780:71;:::i;:::-;31861:68;31925:2;31914:9;31910:18;31901:6;31861:68;:::i;:::-;31939:72;32007:2;31996:9;31992:18;31983:6;31939:72;:::i;:::-;32021;32089:2;32078:9;32074:18;32065:6;32021:72;:::i;:::-;31555:545;;;;;;;:::o
Swarm Source
ipfs://0e71598940b37f55fa95eeb5e60359379aafb1c06bc642cebca18741399ab3f6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.