Token Mars1982Coin
Overview ERC-20
Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
57,740,000 MARTEX
Holders:
35 addresses
Transfers:
-
Contract:
Decimals:
18
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Mars1982Coin
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-10 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @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); } } // File: @openzeppelin/contracts/access/IAccessControl.sol // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @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; } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/AccessControl.sol // OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @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 virtual 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 virtual { 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 virtual 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 revoked `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}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ 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); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @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); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: contracts/TokenNonUpgradable.sol pragma solidity ^0.8.4; /// @custom:security-contact [email protected] contract Mars1982Coin is ERC20, AccessControl { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); constructor() ERC20("Mars1982Coin", "MARTEX") { _mint(msg.sender, 25200000 * 10 ** decimals()); _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(MINTER_ROLE, msg.sender); } function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) { _mint(to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f4d61727331393832436f696e00000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d4152544558000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000430565b508060049080519060200190620000af92919062000430565b505050620000f233620000c76200013f60201b60201c565b600a620000d5919062000620565b6301808580620000e691906200075d565b6200014860201b60201c565b620001076000801b33620002c160201b60201c565b620001397f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620002c160201b60201c565b6200089f565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b29062000518565b60405180910390fd5b620001cf60008383620003b360201b60201c565b8060026000828254620001e3919062000568565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200023a919062000568565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002a191906200053a565b60405180910390a3620002bd60008383620003b860201b60201c565b5050565b620002d38282620003bd60201b60201c565b620003af5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003546200042860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b505050565b505050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b8280546200043e90620007d5565b90600052602060002090601f016020900481019282620004625760008555620004ae565b82601f106200047d57805160ff1916838001178555620004ae565b82800160010185558215620004ae579182015b82811115620004ad57825182559160200191906001019062000490565b5b509050620004bd9190620004c1565b5090565b5b80821115620004dc576000816000905550600101620004c2565b5090565b6000620004ef601f8362000557565b9150620004fc8262000876565b602082019050919050565b6200051281620007be565b82525050565b600060208201905081810360008301526200053381620004e0565b9050919050565b600060208201905062000551600083018462000507565b92915050565b600082825260208201905092915050565b60006200057582620007be565b91506200058283620007be565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620005ba57620005b96200080b565b5b828201905092915050565b6000808291508390505b60018511156200061757808604811115620005ef57620005ee6200080b565b5b6001851615620005ff5780820291505b80810290506200060f8562000869565b9450620005cf565b94509492505050565b60006200062d82620007be565b91506200063a83620007c8565b9250620006697fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000671565b905092915050565b60008262000683576001905062000756565b8162000693576000905062000756565b8160018114620006ac5760028114620006b757620006ed565b600191505062000756565b60ff841115620006cc57620006cb6200080b565b5b8360020a915084821115620006e657620006e56200080b565b5b5062000756565b5060208310610133831016604e8410600b8410161715620007275782820a9050838111156200072157620007206200080b565b5b62000756565b620007368484846001620005c5565b9250905081840481111562000750576200074f6200080b565b5b81810290505b9392505050565b60006200076a82620007be565b91506200077783620007be565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007b357620007b26200080b565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b60006002820490506001821680620007ee57607f821691505b602082108114156200080557620008046200083a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6122a480620008af6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806340c10f19116100ad578063a457c2d711610071578063a457c2d71461036b578063a9059cbb1461039b578063d5391393146103cb578063d547741f146103e9578063dd62ed3e146104055761012c565b806340c10f19146102b357806370a08231146102cf57806391d14854146102ff57806395d89b411461032f578063a217fddf1461034d5761012c565b8063248a9ca3116100f4578063248a9ca3146101fd5780632f2ff15d1461022d578063313ce5671461024957806336568abe1461026757806339509351146102835761012c565b806301ffc9a71461013157806306fdde0314610161578063095ea7b31461017f57806318160ddd146101af57806323b872dd146101cd575b600080fd5b61014b60048036038101906101469190611841565b610435565b6040516101589190611aee565b60405180910390f35b6101696104af565b6040516101769190611b24565b60405180910390f35b610199600480360381019061019491906117a0565b610541565b6040516101a69190611aee565b60405180910390f35b6101b7610564565b6040516101c49190611c86565b60405180910390f35b6101e760048036038101906101e29190611751565b61056e565b6040516101f49190611aee565b60405180910390f35b610217600480360381019061021291906117dc565b61059d565b6040516102249190611b09565b60405180910390f35b61024760048036038101906102429190611805565b6105bd565b005b6102516105e6565b60405161025e9190611ca1565b60405180910390f35b610281600480360381019061027c9190611805565b6105ef565b005b61029d600480360381019061029891906117a0565b610672565b6040516102aa9190611aee565b60405180910390f35b6102cd60048036038101906102c891906117a0565b61071c565b005b6102e960048036038101906102e491906116ec565b61075d565b6040516102f69190611c86565b60405180910390f35b61031960048036038101906103149190611805565b6107a5565b6040516103269190611aee565b60405180910390f35b610337610810565b6040516103449190611b24565b60405180910390f35b6103556108a2565b6040516103629190611b09565b60405180910390f35b610385600480360381019061038091906117a0565b6108a9565b6040516103929190611aee565b60405180910390f35b6103b560048036038101906103b091906117a0565b610993565b6040516103c29190611aee565b60405180910390f35b6103d36109b6565b6040516103e09190611b09565b60405180910390f35b61040360048036038101906103fe9190611805565b6109da565b005b61041f600480360381019061041a9190611715565b610a03565b60405161042c9190611c86565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104a857506104a782610a8a565b5b9050919050565b6060600380546104be90611e7b565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea90611e7b565b80156105375780601f1061050c57610100808354040283529160200191610537565b820191906000526020600020905b81548152906001019060200180831161051a57829003601f168201915b5050505050905090565b60008061054c610af4565b9050610559818585610afc565b600191505092915050565b6000600254905090565b600080610579610af4565b9050610586858285610cc7565b610591858585610d53565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b6105c68261059d565b6105d7816105d2610af4565b610fd4565b6105e18383611071565b505050565b60006012905090565b6105f7610af4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b90611c46565b60405180910390fd5b61066e8282611152565b5050565b60008061067d610af4565b9050610711818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461070c9190611ce3565b610afc565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661074e81610749610af4565b610fd4565b6107588383611234565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805461081f90611e7b565b80601f016020809104026020016040519081016040528092919081815260200182805461084b90611e7b565b80156108985780601f1061086d57610100808354040283529160200191610898565b820191906000526020600020905b81548152906001019060200180831161087b57829003601f168201915b5050505050905090565b6000801b81565b6000806108b4610af4565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097190611c26565b60405180910390fd5b6109878286868403610afc565b60019250505092915050565b60008061099e610af4565b90506109ab818585610d53565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6109e38261059d565b6109f4816109ef610af4565b610fd4565b6109fe8383611152565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6390611c06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390611b86565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cba9190611c86565b60405180910390a3505050565b6000610cd38484610a03565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d4d5781811015610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690611ba6565b60405180910390fd5b610d4c8484848403610afc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90611be6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a90611b66565b60405180910390fd5b610e3e838383611394565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90611bc6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f579190611ce3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fbb9190611c86565b60405180910390a3610fce848484611399565b50505050565b610fde82826107a5565b61106d576110038173ffffffffffffffffffffffffffffffffffffffff16601461139e565b6110118360001c602061139e565b604051602001611022929190611ab4565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110649190611b24565b60405180910390fd5b5050565b61107b82826107a5565b61114e5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506110f3610af4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61115c82826107a5565b156112305760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506111d5610af4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90611c66565b60405180910390fd5b6112b060008383611394565b80600260008282546112c29190611ce3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113179190611ce3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161137c9190611c86565b60405180910390a361139060008383611399565b5050565b505050565b505050565b6060600060028360026113b19190611d39565b6113bb9190611ce3565b67ffffffffffffffff8111156113fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561142c5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061148a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611514577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026115549190611d39565b61155e9190611ce3565b90505b600181111561164a577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106115c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611603577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061164390611e51565b9050611561565b506000841461168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590611b46565b60405180910390fd5b8091505092915050565b6000813590506116a781612212565b92915050565b6000813590506116bc81612229565b92915050565b6000813590506116d181612240565b92915050565b6000813590506116e681612257565b92915050565b6000602082840312156116fe57600080fd5b600061170c84828501611698565b91505092915050565b6000806040838503121561172857600080fd5b600061173685828601611698565b925050602061174785828601611698565b9150509250929050565b60008060006060848603121561176657600080fd5b600061177486828701611698565b935050602061178586828701611698565b9250506040611796868287016116d7565b9150509250925092565b600080604083850312156117b357600080fd5b60006117c185828601611698565b92505060206117d2858286016116d7565b9150509250929050565b6000602082840312156117ee57600080fd5b60006117fc848285016116ad565b91505092915050565b6000806040838503121561181857600080fd5b6000611826858286016116ad565b925050602061183785828601611698565b9150509250929050565b60006020828403121561185357600080fd5b6000611861848285016116c2565b91505092915050565b61187381611da5565b82525050565b61188281611db1565b82525050565b600061189382611cbc565b61189d8185611cc7565b93506118ad818560208601611e1e565b6118b681611f0b565b840191505092915050565b60006118cc82611cbc565b6118d68185611cd8565b93506118e6818560208601611e1e565b80840191505092915050565b60006118ff602083611cc7565b915061190a82611f1c565b602082019050919050565b6000611922602383611cc7565b915061192d82611f45565b604082019050919050565b6000611945602283611cc7565b915061195082611f94565b604082019050919050565b6000611968601d83611cc7565b915061197382611fe3565b602082019050919050565b600061198b602683611cc7565b91506119968261200c565b604082019050919050565b60006119ae602583611cc7565b91506119b98261205b565b604082019050919050565b60006119d1602483611cc7565b91506119dc826120aa565b604082019050919050565b60006119f4601783611cd8565b91506119ff826120f9565b601782019050919050565b6000611a17602583611cc7565b9150611a2282612122565b604082019050919050565b6000611a3a601183611cd8565b9150611a4582612171565b601182019050919050565b6000611a5d602f83611cc7565b9150611a688261219a565b604082019050919050565b6000611a80601f83611cc7565b9150611a8b826121e9565b602082019050919050565b611a9f81611e07565b82525050565b611aae81611e11565b82525050565b6000611abf826119e7565b9150611acb82856118c1565b9150611ad682611a2d565b9150611ae282846118c1565b91508190509392505050565b6000602082019050611b03600083018461186a565b92915050565b6000602082019050611b1e6000830184611879565b92915050565b60006020820190508181036000830152611b3e8184611888565b905092915050565b60006020820190508181036000830152611b5f816118f2565b9050919050565b60006020820190508181036000830152611b7f81611915565b9050919050565b60006020820190508181036000830152611b9f81611938565b9050919050565b60006020820190508181036000830152611bbf8161195b565b9050919050565b60006020820190508181036000830152611bdf8161197e565b9050919050565b60006020820190508181036000830152611bff816119a1565b9050919050565b60006020820190508181036000830152611c1f816119c4565b9050919050565b60006020820190508181036000830152611c3f81611a0a565b9050919050565b60006020820190508181036000830152611c5f81611a50565b9050919050565b60006020820190508181036000830152611c7f81611a73565b9050919050565b6000602082019050611c9b6000830184611a96565b92915050565b6000602082019050611cb66000830184611aa5565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611cee82611e07565b9150611cf983611e07565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d2e57611d2d611ead565b5b828201905092915050565b6000611d4482611e07565b9150611d4f83611e07565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d8857611d87611ead565b5b828202905092915050565b6000611d9e82611de7565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611e3c578082015181840152602081019050611e21565b83811115611e4b576000848401525b50505050565b6000611e5c82611e07565b91506000821415611e7057611e6f611ead565b5b600182039050919050565b60006002820490506001821680611e9357607f821691505b60208210811415611ea757611ea6611edc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61221b81611d93565b811461222657600080fd5b50565b61223281611db1565b811461223d57600080fd5b50565b61224981611dbb565b811461225457600080fd5b50565b61226081611e07565b811461226b57600080fd5b5056fea264697066735822122096bd5d773c1c8d5249fd8a55563628edf58016bc5ec61f23013fdddf54613a1964736f6c63430008040033
Deployed ByteCode Sourcemap
32262:452:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10595:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21340:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23691:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22460:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24472:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12022:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12415:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22302:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13463:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25176:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32604:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22631:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10891:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21559:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9982:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25919:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22964:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32315:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12807:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23220:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10595:204;10680:4;10719:32;10704:47;;;:11;:47;;;;:87;;;;10755:36;10779:11;10755:23;:36::i;:::-;10704:87;10697:94;;10595:204;;;:::o;21340:100::-;21394:13;21427:5;21420:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21340:100;:::o;23691:201::-;23774:4;23791:13;23807:12;:10;:12::i;:::-;23791:28;;23830:32;23839:5;23846:7;23855:6;23830:8;:32::i;:::-;23880:4;23873:11;;;23691:201;;;;:::o;22460:108::-;22521:7;22548:12;;22541:19;;22460:108;:::o;24472:295::-;24603:4;24620:15;24638:12;:10;:12::i;:::-;24620:30;;24661:38;24677:4;24683:7;24692:6;24661:15;:38::i;:::-;24710:27;24720:4;24726:2;24730:6;24710:9;:27::i;:::-;24755:4;24748:11;;;24472:295;;;;;:::o;12022:131::-;12096:7;12123:6;:12;12130:4;12123:12;;;;;;;;;;;:22;;;12116:29;;12022:131;;;:::o;12415:147::-;12498:18;12511:4;12498:12;:18::i;:::-;10473:30;10484:4;10490:12;:10;:12::i;:::-;10473:10;:30::i;:::-;12529:25:::1;12540:4;12546:7;12529:10;:25::i;:::-;12415:147:::0;;;:::o;22302:93::-;22360:5;22385:2;22378:9;;22302:93;:::o;13463:218::-;13570:12;:10;:12::i;:::-;13559:23;;:7;:23;;;13551:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;13647:26;13659:4;13665:7;13647:11;:26::i;:::-;13463:218;;:::o;25176:240::-;25264:4;25281:13;25297:12;:10;:12::i;:::-;25281:28;;25320:66;25329:5;25336:7;25375:10;25345:11;:18;25357:5;25345:18;;;;;;;;;;;;;;;:27;25364:7;25345:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;25320:8;:66::i;:::-;25404:4;25397:11;;;25176:240;;;;:::o;32604:107::-;32353:24;10473:30;10484:4;10490:12;:10;:12::i;:::-;10473:10;:30::i;:::-;32686:17:::1;32692:2;32696:6;32686:5;:17::i;:::-;32604:107:::0;;;:::o;22631:127::-;22705:7;22732:9;:18;22742:7;22732:18;;;;;;;;;;;;;;;;22725:25;;22631:127;;;:::o;10891:147::-;10977:4;11001:6;:12;11008:4;11001:12;;;;;;;;;;;:20;;:29;11022:7;11001:29;;;;;;;;;;;;;;;;;;;;;;;;;10994:36;;10891:147;;;;:::o;21559:104::-;21615:13;21648:7;21641:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21559:104;:::o;9982:49::-;10027:4;9982:49;;;:::o;25919:438::-;26012:4;26029:13;26045:12;:10;:12::i;:::-;26029:28;;26068:24;26095:11;:18;26107:5;26095:18;;;;;;;;;;;;;;;:27;26114:7;26095:27;;;;;;;;;;;;;;;;26068:54;;26161:15;26141:16;:35;;26133:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26254:60;26263:5;26270:7;26298:15;26279:16;:34;26254:8;:60::i;:::-;26345:4;26338:11;;;;25919:438;;;;:::o;22964:193::-;23043:4;23060:13;23076:12;:10;:12::i;:::-;23060:28;;23099;23109:5;23116:2;23120:6;23099:9;:28::i;:::-;23145:4;23138:11;;;22964:193;;;;:::o;32315:62::-;32353:24;32315:62;:::o;12807:149::-;12891:18;12904:4;12891:12;:18::i;:::-;10473:30;10484:4;10490:12;:10;:12::i;:::-;10473:10;:30::i;:::-;12922:26:::1;12934:4;12940:7;12922:11;:26::i;:::-;12807:149:::0;;;:::o;23220:151::-;23309:7;23336:11;:18;23348:5;23336:18;;;;;;;;;;;;;;;:27;23355:7;23336:27;;;;;;;;;;;;;;;;23329:34;;23220:151;;;;:::o;1782:157::-;1867:4;1906:25;1891:40;;;:11;:40;;;;1884:47;;1782:157;;;:::o;7790:98::-;7843:7;7870:10;7863:17;;7790:98;:::o;29555:380::-;29708:1;29691:19;;:5;:19;;;;29683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29789:1;29770:21;;:7;:21;;;;29762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29873:6;29843:11;:18;29855:5;29843:18;;;;;;;;;;;;;;;:27;29862:7;29843:27;;;;;;;;;;;;;;;:36;;;;29911:7;29895:32;;29904:5;29895:32;;;29920:6;29895:32;;;;;;:::i;:::-;;;;;;;;29555:380;;;:::o;30222:453::-;30357:24;30384:25;30394:5;30401:7;30384:9;:25::i;:::-;30357:52;;30444:17;30424:16;:37;30420:248;;30506:6;30486:16;:26;;30478:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30590:51;30599:5;30606:7;30634:6;30615:16;:25;30590:8;:51::i;:::-;30420:248;30222:453;;;;:::o;26836:671::-;26983:1;26967:18;;:4;:18;;;;26959:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27060:1;27046:16;;:2;:16;;;;27038:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27115:38;27136:4;27142:2;27146:6;27115:20;:38::i;:::-;27166:19;27188:9;:15;27198:4;27188:15;;;;;;;;;;;;;;;;27166:37;;27237:6;27222:11;:21;;27214:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;27354:6;27340:11;:20;27322:9;:15;27332:4;27322:15;;;;;;;;;;;;;;;:38;;;;27399:6;27382:9;:13;27392:2;27382:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;27438:2;27423:26;;27432:4;27423:26;;;27442:6;27423:26;;;;;;:::i;:::-;;;;;;;;27462:37;27482:4;27488:2;27492:6;27462:19;:37::i;:::-;26836:671;;;;:::o;11328:505::-;11417:22;11425:4;11431:7;11417;:22::i;:::-;11412:414;;11605:41;11633:7;11605:41;;11643:2;11605:19;:41::i;:::-;11719:38;11747:4;11739:13;;11754:2;11719:19;:38::i;:::-;11510:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11456:358;;;;;;;;;;;:::i;:::-;;;;;;;;11412:414;11328:505;;:::o;14964:238::-;15048:22;15056:4;15062:7;15048;:22::i;:::-;15043:152;;15119:4;15087:6;:12;15094:4;15087:12;;;;;;;;;;;:20;;:29;15108:7;15087:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;15170:12;:10;:12::i;:::-;15143:40;;15161:7;15143:40;;15155:4;15143:40;;;;;;;;;;15043:152;14964:238;;:::o;15334:239::-;15418:22;15426:4;15432:7;15418;:22::i;:::-;15414:152;;;15489:5;15457:6;:12;15464:4;15457:12;;;;;;;;;;;:20;;:29;15478:7;15457:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;15541:12;:10;:12::i;:::-;15514:40;;15532:7;15514:40;;15526:4;15514:40;;;;;;;;;;15414:152;15334:239;;:::o;27794:399::-;27897:1;27878:21;;:7;:21;;;;27870:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27948:49;27977:1;27981:7;27990:6;27948:20;:49::i;:::-;28026:6;28010:12;;:22;;;;;;;:::i;:::-;;;;;;;;28065:6;28043:9;:18;28053:7;28043:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;28108:7;28087:37;;28104:1;28087:37;;;28117:6;28087:37;;;;;;:::i;:::-;;;;;;;;28137:48;28165:1;28169:7;28178:6;28137:19;:48::i;:::-;27794:399;;:::o;31275:125::-;;;;:::o;32004:124::-;;;;:::o;3612:451::-;3687:13;3713:19;3758:1;3749:6;3745:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;3735:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3713:47;;3771:15;:6;3778:1;3771:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;3797;:6;3804:1;3797:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;3828:9;3853:1;3844:6;3840:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;3828:26;;3823:135;3860:1;3856;:5;3823:135;;;3895:12;3916:3;3908:5;:11;3895:25;;;;;;;;;;;;;;;;;;3883:6;3890:1;3883:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;3945:1;3935:11;;;;;3863:3;;;;:::i;:::-;;;3823:135;;;;3985:1;3976:5;:10;3968:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4048:6;4034:21;;;3612:451;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;342:5;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:407::-;921:6;929;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:53;1107:7;1098:6;1087:9;1083:22;1062:53;:::i;:::-;1052:63;;1008:117;1164:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;:::i;:::-;1180:63;;1135:118;936:324;;;;;:::o;1266:552::-;1343:6;1351;1359;1408:2;1396:9;1387:7;1383:23;1379:32;1376:2;;;1424:1;1421;1414:12;1376:2;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:53;1665:7;1656:6;1645:9;1641:22;1620:53;:::i;:::-;1610:63;;1565:118;1722:2;1748:53;1793:7;1784:6;1773:9;1769:22;1748:53;:::i;:::-;1738:63;;1693:118;1366:452;;;;;:::o;1824:407::-;1892:6;1900;1949:2;1937:9;1928:7;1924:23;1920:32;1917:2;;;1965:1;1962;1955:12;1917:2;2008:1;2033:53;2078:7;2069:6;2058:9;2054:22;2033:53;:::i;:::-;2023:63;;1979:117;2135:2;2161:53;2206:7;2197:6;2186:9;2182:22;2161:53;:::i;:::-;2151:63;;2106:118;1907:324;;;;;:::o;2237:262::-;2296:6;2345:2;2333:9;2324:7;2320:23;2316:32;2313:2;;;2361:1;2358;2351:12;2313:2;2404:1;2429:53;2474:7;2465:6;2454:9;2450:22;2429:53;:::i;:::-;2419:63;;2375:117;2303:196;;;;:::o;2505:407::-;2573:6;2581;2630:2;2618:9;2609:7;2605:23;2601:32;2598:2;;;2646:1;2643;2636:12;2598:2;2689:1;2714:53;2759:7;2750:6;2739:9;2735:22;2714:53;:::i;:::-;2704:63;;2660:117;2816:2;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2787:118;2588:324;;;;;:::o;2918:260::-;2976:6;3025:2;3013:9;3004:7;3000:23;2996:32;2993:2;;;3041:1;3038;3031:12;2993:2;3084:1;3109:52;3153:7;3144:6;3133:9;3129:22;3109:52;:::i;:::-;3099:62;;3055:116;2983:195;;;;:::o;3184:109::-;3265:21;3280:5;3265:21;:::i;:::-;3260:3;3253:34;3243:50;;:::o;3299:118::-;3386:24;3404:5;3386:24;:::i;:::-;3381:3;3374:37;3364:53;;:::o;3423:364::-;3511:3;3539:39;3572:5;3539:39;:::i;:::-;3594:71;3658:6;3653:3;3594:71;:::i;:::-;3587:78;;3674:52;3719:6;3714:3;3707:4;3700:5;3696:16;3674:52;:::i;:::-;3751:29;3773:6;3751:29;:::i;:::-;3746:3;3742:39;3735:46;;3515:272;;;;;:::o;3793:377::-;3899:3;3927:39;3960:5;3927:39;:::i;:::-;3982:89;4064:6;4059:3;3982:89;:::i;:::-;3975:96;;4080:52;4125:6;4120:3;4113:4;4106:5;4102:16;4080:52;:::i;:::-;4157:6;4152:3;4148:16;4141:23;;3903:267;;;;;:::o;4176:366::-;4318:3;4339:67;4403:2;4398:3;4339:67;:::i;:::-;4332:74;;4415:93;4504:3;4415:93;:::i;:::-;4533:2;4528:3;4524:12;4517:19;;4322:220;;;:::o;4548:366::-;4690:3;4711:67;4775:2;4770:3;4711:67;:::i;:::-;4704:74;;4787:93;4876:3;4787:93;:::i;:::-;4905:2;4900:3;4896:12;4889:19;;4694:220;;;:::o;4920:366::-;5062:3;5083:67;5147:2;5142:3;5083:67;:::i;:::-;5076:74;;5159:93;5248:3;5159:93;:::i;:::-;5277:2;5272:3;5268:12;5261:19;;5066:220;;;:::o;5292:366::-;5434:3;5455:67;5519:2;5514:3;5455:67;:::i;:::-;5448:74;;5531:93;5620:3;5531:93;:::i;:::-;5649:2;5644:3;5640:12;5633:19;;5438:220;;;:::o;5664:366::-;5806:3;5827:67;5891:2;5886:3;5827:67;:::i;:::-;5820:74;;5903:93;5992:3;5903:93;:::i;:::-;6021:2;6016:3;6012:12;6005:19;;5810:220;;;:::o;6036:366::-;6178:3;6199:67;6263:2;6258:3;6199:67;:::i;:::-;6192:74;;6275:93;6364:3;6275:93;:::i;:::-;6393:2;6388:3;6384:12;6377:19;;6182:220;;;:::o;6408:366::-;6550:3;6571:67;6635:2;6630:3;6571:67;:::i;:::-;6564:74;;6647:93;6736:3;6647:93;:::i;:::-;6765:2;6760:3;6756:12;6749:19;;6554:220;;;:::o;6780:402::-;6940:3;6961:85;7043:2;7038:3;6961:85;:::i;:::-;6954:92;;7055:93;7144:3;7055:93;:::i;:::-;7173:2;7168:3;7164:12;7157:19;;6944:238;;;:::o;7188:366::-;7330:3;7351:67;7415:2;7410:3;7351:67;:::i;:::-;7344:74;;7427:93;7516:3;7427:93;:::i;:::-;7545:2;7540:3;7536:12;7529:19;;7334:220;;;:::o;7560:402::-;7720:3;7741:85;7823:2;7818:3;7741:85;:::i;:::-;7734:92;;7835:93;7924:3;7835:93;:::i;:::-;7953:2;7948:3;7944:12;7937:19;;7724:238;;;:::o;7968:366::-;8110:3;8131:67;8195:2;8190:3;8131:67;:::i;:::-;8124:74;;8207:93;8296:3;8207:93;:::i;:::-;8325:2;8320:3;8316:12;8309:19;;8114:220;;;:::o;8340:366::-;8482:3;8503:67;8567:2;8562:3;8503:67;:::i;:::-;8496:74;;8579:93;8668:3;8579:93;:::i;:::-;8697:2;8692:3;8688:12;8681:19;;8486:220;;;:::o;8712:118::-;8799:24;8817:5;8799:24;:::i;:::-;8794:3;8787:37;8777:53;;:::o;8836:112::-;8919:22;8935:5;8919:22;:::i;:::-;8914:3;8907:35;8897:51;;:::o;8954:967::-;9336:3;9358:148;9502:3;9358:148;:::i;:::-;9351:155;;9523:95;9614:3;9605:6;9523:95;:::i;:::-;9516:102;;9635:148;9779:3;9635:148;:::i;:::-;9628:155;;9800:95;9891:3;9882:6;9800:95;:::i;:::-;9793:102;;9912:3;9905:10;;9340:581;;;;;:::o;9927:210::-;10014:4;10052:2;10041:9;10037:18;10029:26;;10065:65;10127:1;10116:9;10112:17;10103:6;10065:65;:::i;:::-;10019:118;;;;:::o;10143:222::-;10236:4;10274:2;10263:9;10259:18;10251:26;;10287:71;10355:1;10344:9;10340:17;10331:6;10287:71;:::i;:::-;10241:124;;;;:::o;10371:313::-;10484:4;10522:2;10511:9;10507:18;10499:26;;10571:9;10565:4;10561:20;10557:1;10546:9;10542:17;10535:47;10599:78;10672:4;10663:6;10599:78;:::i;:::-;10591:86;;10489:195;;;;:::o;10690:419::-;10856:4;10894:2;10883:9;10879:18;10871:26;;10943:9;10937:4;10933:20;10929:1;10918:9;10914:17;10907:47;10971:131;11097:4;10971:131;:::i;:::-;10963:139;;10861:248;;;:::o;11115:419::-;11281:4;11319:2;11308:9;11304:18;11296:26;;11368:9;11362:4;11358:20;11354:1;11343:9;11339:17;11332:47;11396:131;11522:4;11396:131;:::i;:::-;11388:139;;11286:248;;;:::o;11540:419::-;11706:4;11744:2;11733:9;11729:18;11721:26;;11793:9;11787:4;11783:20;11779:1;11768:9;11764:17;11757:47;11821:131;11947:4;11821:131;:::i;:::-;11813:139;;11711:248;;;:::o;11965:419::-;12131:4;12169:2;12158:9;12154:18;12146:26;;12218:9;12212:4;12208:20;12204:1;12193:9;12189:17;12182:47;12246:131;12372:4;12246:131;:::i;:::-;12238:139;;12136:248;;;:::o;12390:419::-;12556:4;12594:2;12583:9;12579:18;12571:26;;12643:9;12637:4;12633:20;12629:1;12618:9;12614:17;12607:47;12671:131;12797:4;12671:131;:::i;:::-;12663:139;;12561:248;;;:::o;12815:419::-;12981:4;13019:2;13008:9;13004:18;12996:26;;13068:9;13062:4;13058:20;13054:1;13043:9;13039:17;13032:47;13096:131;13222:4;13096:131;:::i;:::-;13088:139;;12986:248;;;:::o;13240:419::-;13406:4;13444:2;13433:9;13429:18;13421:26;;13493:9;13487:4;13483:20;13479:1;13468:9;13464:17;13457:47;13521:131;13647:4;13521:131;:::i;:::-;13513:139;;13411:248;;;:::o;13665:419::-;13831:4;13869:2;13858:9;13854:18;13846:26;;13918:9;13912:4;13908:20;13904:1;13893:9;13889:17;13882:47;13946:131;14072:4;13946:131;:::i;:::-;13938:139;;13836:248;;;:::o;14090:419::-;14256:4;14294:2;14283:9;14279:18;14271:26;;14343:9;14337:4;14333:20;14329:1;14318:9;14314:17;14307:47;14371:131;14497:4;14371:131;:::i;:::-;14363:139;;14261:248;;;:::o;14515:419::-;14681:4;14719:2;14708:9;14704:18;14696:26;;14768:9;14762:4;14758:20;14754:1;14743:9;14739:17;14732:47;14796:131;14922:4;14796:131;:::i;:::-;14788:139;;14686:248;;;:::o;14940:222::-;15033:4;15071:2;15060:9;15056:18;15048:26;;15084:71;15152:1;15141:9;15137:17;15128:6;15084:71;:::i;:::-;15038:124;;;;:::o;15168:214::-;15257:4;15295:2;15284:9;15280:18;15272:26;;15308:67;15372:1;15361:9;15357:17;15348:6;15308:67;:::i;:::-;15262:120;;;;:::o;15388:99::-;15440:6;15474:5;15468:12;15458:22;;15447:40;;;:::o;15493:169::-;15577:11;15611:6;15606:3;15599:19;15651:4;15646:3;15642:14;15627:29;;15589:73;;;;:::o;15668:148::-;15770:11;15807:3;15792:18;;15782:34;;;;:::o;15822:305::-;15862:3;15881:20;15899:1;15881:20;:::i;:::-;15876:25;;15915:20;15933:1;15915:20;:::i;:::-;15910:25;;16069:1;16001:66;15997:74;15994:1;15991:81;15988:2;;;16075:18;;:::i;:::-;15988:2;16119:1;16116;16112:9;16105:16;;15866:261;;;;:::o;16133:348::-;16173:7;16196:20;16214:1;16196:20;:::i;:::-;16191:25;;16230:20;16248:1;16230:20;:::i;:::-;16225:25;;16418:1;16350:66;16346:74;16343:1;16340:81;16335:1;16328:9;16321:17;16317:105;16314:2;;;16425:18;;:::i;:::-;16314:2;16473:1;16470;16466:9;16455:20;;16181:300;;;;:::o;16487:96::-;16524:7;16553:24;16571:5;16553:24;:::i;:::-;16542:35;;16532:51;;;:::o;16589:90::-;16623:7;16666:5;16659:13;16652:21;16641:32;;16631:48;;;:::o;16685:77::-;16722:7;16751:5;16740:16;;16730:32;;;:::o;16768:149::-;16804:7;16844:66;16837:5;16833:78;16822:89;;16812:105;;;:::o;16923:126::-;16960:7;17000:42;16993:5;16989:54;16978:65;;16968:81;;;:::o;17055:77::-;17092:7;17121:5;17110:16;;17100:32;;;:::o;17138:86::-;17173:7;17213:4;17206:5;17202:16;17191:27;;17181:43;;;:::o;17230:307::-;17298:1;17308:113;17322:6;17319:1;17316:13;17308:113;;;17407:1;17402:3;17398:11;17392:18;17388:1;17383:3;17379:11;17372:39;17344:2;17341:1;17337:10;17332:15;;17308:113;;;17439:6;17436:1;17433:13;17430:2;;;17519:1;17510:6;17505:3;17501:16;17494:27;17430:2;17279:258;;;;:::o;17543:171::-;17582:3;17605:24;17623:5;17605:24;:::i;:::-;17596:33;;17651:4;17644:5;17641:15;17638:2;;;17659:18;;:::i;:::-;17638:2;17706:1;17699:5;17695:13;17688:20;;17586:128;;;:::o;17720:320::-;17764:6;17801:1;17795:4;17791:12;17781:22;;17848:1;17842:4;17838:12;17869:18;17859:2;;17925:4;17917:6;17913:17;17903:27;;17859:2;17987;17979:6;17976:14;17956:18;17953:38;17950:2;;;18006:18;;:::i;:::-;17950:2;17771:269;;;;:::o;18046:180::-;18094:77;18091:1;18084:88;18191:4;18188:1;18181:15;18215:4;18212:1;18205:15;18232:180;18280:77;18277:1;18270:88;18377:4;18374:1;18367:15;18401:4;18398:1;18391:15;18418:102;18459:6;18510:2;18506:7;18501:2;18494:5;18490:14;18486:28;18476:38;;18466:54;;;:::o;18526:182::-;18666:34;18662:1;18654:6;18650:14;18643:58;18632:76;:::o;18714:222::-;18854:34;18850:1;18842:6;18838:14;18831:58;18923:5;18918:2;18910:6;18906:15;18899:30;18820:116;:::o;18942:221::-;19082:34;19078:1;19070:6;19066:14;19059:58;19151:4;19146:2;19138:6;19134:15;19127:29;19048:115;:::o;19169:179::-;19309:31;19305:1;19297:6;19293:14;19286:55;19275:73;:::o;19354:225::-;19494:34;19490:1;19482:6;19478:14;19471:58;19563:8;19558:2;19550:6;19546:15;19539:33;19460:119;:::o;19585:224::-;19725:34;19721:1;19713:6;19709:14;19702:58;19794:7;19789:2;19781:6;19777:15;19770:32;19691:118;:::o;19815:223::-;19955:34;19951:1;19943:6;19939:14;19932:58;20024:6;20019:2;20011:6;20007:15;20000:31;19921:117;:::o;20044:173::-;20184:25;20180:1;20172:6;20168:14;20161:49;20150:67;:::o;20223:224::-;20363:34;20359:1;20351:6;20347:14;20340:58;20432:7;20427:2;20419:6;20415:15;20408:32;20329:118;:::o;20453:167::-;20593:19;20589:1;20581:6;20577:14;20570:43;20559:61;:::o;20626:234::-;20766:34;20762:1;20754:6;20750:14;20743:58;20835:17;20830:2;20822:6;20818:15;20811:42;20732:128;:::o;20866:181::-;21006:33;21002:1;20994:6;20990:14;20983:57;20972:75;:::o;21053:122::-;21126:24;21144:5;21126:24;:::i;:::-;21119:5;21116:35;21106:2;;21165:1;21162;21155:12;21106:2;21096:79;:::o;21181:122::-;21254:24;21272:5;21254:24;:::i;:::-;21247:5;21244:35;21234:2;;21293:1;21290;21283:12;21234:2;21224:79;:::o;21309:120::-;21381:23;21398:5;21381:23;:::i;:::-;21374:5;21371:34;21361:2;;21419:1;21416;21409:12;21361:2;21351:78;:::o;21435:122::-;21508:24;21526:5;21508:24;:::i;:::-;21501:5;21498:35;21488:2;;21547:1;21544;21537:12;21488:2;21478:79;:::o
Swarm Source
ipfs://96bd5d773c1c8d5249fd8a55563628edf58016bc5ec61f23013fdddf54613a19