Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 519 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Balance | 19379058 | 269 days ago | IN | 0 ETH | 0.00307684 | ||||
Buy With ETH | 19378738 | 269 days ago | IN | 0.06 ETH | 0.00688389 | ||||
Update Rate | 19378618 | 269 days ago | IN | 0 ETH | 0.00408271 | ||||
Buy With ETH | 19377681 | 269 days ago | IN | 0.01734 ETH | 0.00401643 | ||||
Buy With ETH | 19377247 | 269 days ago | IN | 0.2 ETH | 0.00600057 | ||||
Buy With ETH | 19377199 | 269 days ago | IN | 0.2 ETH | 0.00643253 | ||||
Buy With ETH | 19377143 | 269 days ago | IN | 0.15 ETH | 0.00412899 | ||||
Buy With ETH | 19377139 | 269 days ago | IN | 0 ETH | 0.00339338 | ||||
Buy With ETH | 19376893 | 269 days ago | IN | 0.097 ETH | 0.00518678 | ||||
Buy With ETH | 19376888 | 269 days ago | IN | 0.5 ETH | 0.00524129 | ||||
Buy With ETH | 19376886 | 269 days ago | IN | 0.13034 ETH | 0.00640069 | ||||
Buy With ETH | 19376883 | 269 days ago | IN | 1 ETH | 0.00447318 | ||||
Buy With ETH | 19376828 | 269 days ago | IN | 0.1 ETH | 0.00713244 | ||||
Update Rate | 19376822 | 269 days ago | IN | 0 ETH | 0.00396554 | ||||
Buy With ETH | 19376161 | 269 days ago | IN | 0.05 ETH | 0.00391703 | ||||
Buy With ETH | 19370917 | 270 days ago | IN | 0.156 ETH | 0.00591096 | ||||
Buy With ETH | 19367565 | 270 days ago | IN | 0.01 ETH | 0.00398039 | ||||
Buy With ETH | 19365124 | 271 days ago | IN | 0.14775 ETH | 0.00516038 | ||||
Buy With ETH | 19364263 | 271 days ago | IN | 0.002 ETH | 0.00617007 | ||||
Buy With ETH | 19361871 | 271 days ago | IN | 0.026 ETH | 0.00458407 | ||||
Buy With ETH | 19361680 | 271 days ago | IN | 0.0073 ETH | 0.00290906 | ||||
Buy With ETH | 19361668 | 271 days ago | IN | 0.0073 ETH | 0.00328244 | ||||
Buy With ETH | 19361664 | 271 days ago | IN | 0.0073 ETH | 0.00465872 | ||||
Buy With ETH | 19342624 | 274 days ago | IN | 0.05 ETH | 0.00349041 | ||||
Buy With ETH | 19342070 | 274 days ago | IN | 0.14 ETH | 0.00308216 |
Loading...
Loading
Contract Name:
HumanizedAiPresale
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-01-29 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.20; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ```solidity * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Storage of the initializable contract. * * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions * when using with upgradeable contracts. * * @custom:storage-location erc7201:openzeppelin.storage.Initializable */ struct InitializableStorage { /** * @dev Indicates that the contract has been initialized. */ uint64 _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool _initializing; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; /** * @dev The contract is already initialized. */ error InvalidInitialization(); /** * @dev The contract is not initializing. */ error NotInitializing(); /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint64 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in * production. * * Emits an {Initialized} event. */ modifier initializer() { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); // Cache values to avoid duplicated sloads bool isTopLevelCall = !$._initializing; uint64 initialized = $._initialized; // Allowed calls: // - initialSetup: the contract is not in the initializing state and no previous version was // initialized // - construction: the contract is initialized at version 1 (no reininitialization) and the // current contract is just being deployed bool initialSetup = initialized == 0 && isTopLevelCall; bool construction = initialized == 1 && address(this).code.length == 0; if (!initialSetup && !construction) { revert InvalidInitialization(); } $._initialized = 1; if (isTopLevelCall) { $._initializing = true; } _; if (isTopLevelCall) { $._initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint64 version) { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing || $._initialized >= version) { revert InvalidInitialization(); } $._initialized = version; $._initializing = true; _; $._initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { _checkInitializing(); _; } /** * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. */ function _checkInitializing() internal view virtual { if (!_isInitializing()) { revert NotInitializing(); } } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing) { revert InvalidInitialization(); } if ($._initialized != type(uint64).max) { $._initialized = type(uint64).max; emit Initialized(type(uint64).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint64) { return _getInitializableStorage()._initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _getInitializableStorage()._initializing; } /** * @dev Returns a pointer to the storage namespace. */ // solhint-disable-next-line var-name-mixedcase function _getInitializableStorage() private pure returns (InitializableStorage storage $) { assembly { $.slot := INITIALIZABLE_STORAGE } } } // File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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 ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { /// @custom:storage-location erc7201:openzeppelin.storage.Ownable struct OwnableStorage { address _owner; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Ownable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300; function _getOwnableStorage() private pure returns (OwnableStorage storage $) { assembly { $.slot := OwnableStorageLocation } } /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ function __Ownable_init(address initialOwner) internal onlyInitializing { __Ownable_init_unchained(initialOwner); } function __Ownable_init_unchained(address initialOwner) internal onlyInitializing { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { OwnableStorage storage $ = _getOwnableStorage(); return $._owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { OwnableStorage storage $ = _getOwnableStorage(); address oldOwner = $._owner; $._owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File: HMZ_PRESALE.sol pragma solidity ^0.8.20; contract HumanizedAiPresale is ReentrancyGuard { using SafeMath for uint256; address public owner; IERC20 public token; uint256 public rate; // If rate = 100, then tokensPerETH is 100 uint256 public tokensPerUSDT; bool public saleState; //sale state IERC20 USDT = IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7); // USDT address on Ethereum constructor() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner, "Only the owner can call this function."); _; } function setInitial(address _tokenAddress, uint256 _rate, uint256 _tokensPerUSDT) external onlyOwner() { token = IERC20(_tokenAddress); rate = _rate; tokensPerUSDT = _tokensPerUSDT; } function updateRate(uint256 newRate, uint256 newTokensPerUSDT) external onlyOwner() { rate = newRate; tokensPerUSDT = newTokensPerUSDT; } function startPreSale() external onlyOwner() { saleState = true; } function endPreSale() external onlyOwner() { saleState = false; } receive() external payable {} function buyWithETH() external payable { require(saleState, "NOT_PRESALE_STATE"); uint256 bnbAmountToBuy = msg.value; uint256 tokenAmount = bnbAmountToBuy.mul(rate); require(token.balanceOf(address(this)) >= tokenAmount, "INSUFFICIENT_BALANCE_IN_CONTRACT"); (bool sent) = token.transfer(msg.sender, tokenAmount); require(sent, "FAILED_TO_TRANSFER_TOKENS_TO_BUYER"); } function buyWithUSDT(uint256 _USDTAmount) external { require(saleState, "NOT_PRESALE_STATE"); uint256 tokenAmount = _USDTAmount.mul(tokensPerUSDT * (10**18)).div(10**6); USDT.transferFrom(msg.sender, address(this), _USDTAmount); require(token.balanceOf(address(this)) >= tokenAmount, "INSUFFICIENT_BALANCE_IN_CONTRACT"); (bool sent) = token.transfer(msg.sender, tokenAmount); require(sent, "FAILED_TO_TRANSFER_TOKENS_TO_BUYER"); } function withdrawToken(address withdrawer) external onlyOwner() { uint256 tokenBalance = token.balanceOf(address(this)); require(tokenBalance > 0, "No tokens to withdraw"); bool success = token.transfer(withdrawer, tokenBalance); require(success, "Token transfer failed"); } function withdrawBalance(address withdrawer) external onlyOwner(){ uint256 contractBalance = address(this).balance; require(contractBalance > 0, "No ETH balance to withdraw"); (bool success, ) = payable(withdrawer).call{value: contractBalance}(""); require(success, "ETH withdrawal failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"buyWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_USDTAmount","type":"uint256"}],"name":"buyWithUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"uint256","name":"_tokensPerUSDT","type":"uint256"}],"name":"setInitial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensPerUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"},{"internalType":"uint256","name":"newTokensPerUSDT","type":"uint256"}],"name":"updateRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawer","type":"address"}],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawer","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405273dac17f958d2ee523a2206206994597c13d831ec7600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015610064575f80fd5b5060015f819055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061172d806100b95f395ff3fe6080604052600436106100c5575f3560e01c8063603f4d521161007e5780638da5cb5b116100585780638da5cb5b1461020e578063a7c6016014610238578063ee889ed014610260578063fc0c546a14610276576100cc565b8063603f4d5214610194578063756af45f146101be57806389476069146101e6576100cc565b8063150d283d146100d05780631a1986e0146100da5780632c4e722e14610104578063405abb411461012e57806355dd574c146101565780635e4a5e5f1461016c576100cc565b366100cc57005b5f80fd5b6100d86102a0565b005b3480156100e5575f80fd5b506100ee6104c9565b6040516100fb9190610f0b565b60405180910390f35b34801561010f575f80fd5b506101186104cf565b6040516101259190610f0b565b60405180910390f35b348015610139575f80fd5b50610154600480360381019061014f9190610f52565b6104d5565b005b348015610161575f80fd5b5061016a610576565b005b348015610177575f80fd5b50610192600480360381019061018d9190610fea565b610621565b005b34801561019f575f80fd5b506101a8610703565b6040516101b59190611054565b60405180910390f35b3480156101c9575f80fd5b506101e460048036038101906101df919061106d565b610715565b005b3480156101f1575f80fd5b5061020c6004803603810190610207919061106d565b610897565b005b348015610219575f80fd5b50610222610ae8565b60405161022f91906110a7565b60405180910390f35b348015610243575f80fd5b5061025e600480360381019061025991906110c0565b610b0d565b005b34801561026b575f80fd5b50610274610dfa565b005b348015610281575f80fd5b5061028a610ea4565b6040516102979190611146565b60405180910390f35b60055f9054906101000a900460ff166102ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e5906111b9565b60405180910390fd5b5f3490505f61030860035483610ec990919063ffffffff16565b90508060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161036591906110a7565b602060405180830381865afa158015610380573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a491906111eb565b10156103e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103dc90611260565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161044292919061127e565b6020604051808303815f875af115801561045e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048291906112cf565b9050806104c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bb9061136a565b60405180910390fd5b505050565b60045481565b60035481565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055b906113f8565b60405180910390fd5b81600381905550806004819055505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fc906113f8565b60405180910390fd5b600160055f6101000a81548160ff021916908315150217905550565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a7906113f8565b60405180910390fd5b8260025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160038190555080600481905550505050565b60055f9054906101000a900460ff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079b906113f8565b60405180910390fd5b5f4790505f81116107ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e190611460565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161080f906114ab565b5f6040518083038185875af1925050503d805f8114610849576040519150601f19603f3d011682016040523d82523d5f602084013e61084e565b606091505b5050905080610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990611509565b60405180910390fd5b505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091d906113f8565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161098191906110a7565b602060405180830381865afa15801561099c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c091906111eb565b90505f8111610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb90611571565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610a6192919061127e565b6020604051808303815f875af1158015610a7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa191906112cf565b905080610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada906115d9565b60405180910390fd5b505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900460ff16610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b52906111b9565b60405180910390fd5b5f610b99620f4240610b8b670de0b6b3a7640000600454610b7c9190611624565b85610ec990919063ffffffff16565b610ede90919063ffffffff16565b9050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610bfa93929190611665565b6020604051808303815f875af1158015610c16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3a91906112cf565b508060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c9691906110a7565b602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd591906111eb565b1015610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90611260565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610d7392919061127e565b6020604051808303815f875af1158015610d8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db391906112cf565b905080610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec9061136a565b60405180910390fd5b505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906113f8565b60405180910390fd5b5f60055f6101000a81548160ff021916908315150217905550565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8183610ed69190611624565b905092915050565b5f8183610eeb91906116c7565b905092915050565b5f819050919050565b610f0581610ef3565b82525050565b5f602082019050610f1e5f830184610efc565b92915050565b5f80fd5b610f3181610ef3565b8114610f3b575f80fd5b50565b5f81359050610f4c81610f28565b92915050565b5f8060408385031215610f6857610f67610f24565b5b5f610f7585828601610f3e565b9250506020610f8685828601610f3e565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610fb982610f90565b9050919050565b610fc981610faf565b8114610fd3575f80fd5b50565b5f81359050610fe481610fc0565b92915050565b5f805f6060848603121561100157611000610f24565b5b5f61100e86828701610fd6565b935050602061101f86828701610f3e565b925050604061103086828701610f3e565b9150509250925092565b5f8115159050919050565b61104e8161103a565b82525050565b5f6020820190506110675f830184611045565b92915050565b5f6020828403121561108257611081610f24565b5b5f61108f84828501610fd6565b91505092915050565b6110a181610faf565b82525050565b5f6020820190506110ba5f830184611098565b92915050565b5f602082840312156110d5576110d4610f24565b5b5f6110e284828501610f3e565b91505092915050565b5f819050919050565b5f61110e61110961110484610f90565b6110eb565b610f90565b9050919050565b5f61111f826110f4565b9050919050565b5f61113082611115565b9050919050565b61114081611126565b82525050565b5f6020820190506111595f830184611137565b92915050565b5f82825260208201905092915050565b7f4e4f545f50524553414c455f53544154450000000000000000000000000000005f82015250565b5f6111a360118361115f565b91506111ae8261116f565b602082019050919050565b5f6020820190508181035f8301526111d081611197565b9050919050565b5f815190506111e581610f28565b92915050565b5f60208284031215611200576111ff610f24565b5b5f61120d848285016111d7565b91505092915050565b7f494e53554646494349454e545f42414c414e43455f494e5f434f4e54524143545f82015250565b5f61124a60208361115f565b915061125582611216565b602082019050919050565b5f6020820190508181035f8301526112778161123e565b9050919050565b5f6040820190506112915f830185611098565b61129e6020830184610efc565b9392505050565b6112ae8161103a565b81146112b8575f80fd5b50565b5f815190506112c9816112a5565b92915050565b5f602082840312156112e4576112e3610f24565b5b5f6112f1848285016112bb565b91505092915050565b7f4641494c45445f544f5f5452414e534645525f544f4b454e535f544f5f4255595f8201527f4552000000000000000000000000000000000000000000000000000000000000602082015250565b5f61135460228361115f565b915061135f826112fa565b604082019050919050565b5f6020820190508181035f83015261138181611348565b9050919050565b7f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e5f8201527f6374696f6e2e0000000000000000000000000000000000000000000000000000602082015250565b5f6113e260268361115f565b91506113ed82611388565b604082019050919050565b5f6020820190508181035f83015261140f816113d6565b9050919050565b7f4e6f204554482062616c616e636520746f2077697468647261770000000000005f82015250565b5f61144a601a8361115f565b915061145582611416565b602082019050919050565b5f6020820190508181035f8301526114778161143e565b9050919050565b5f81905092915050565b50565b5f6114965f8361147e565b91506114a182611488565b5f82019050919050565b5f6114b58261148b565b9150819050919050565b7f455448207769746864726177616c206661696c656400000000000000000000005f82015250565b5f6114f360158361115f565b91506114fe826114bf565b602082019050919050565b5f6020820190508181035f830152611520816114e7565b9050919050565b7f4e6f20746f6b656e7320746f20776974686472617700000000000000000000005f82015250565b5f61155b60158361115f565b915061156682611527565b602082019050919050565b5f6020820190508181035f8301526115888161154f565b9050919050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6115c360158361115f565b91506115ce8261158f565b602082019050919050565b5f6020820190508181035f8301526115f0816115b7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61162e82610ef3565b915061163983610ef3565b925082820261164781610ef3565b9150828204841483151761165e5761165d6115f7565b5b5092915050565b5f6060820190506116785f830186611098565b6116856020830185611098565b6116926040830184610efc565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6116d182610ef3565b91506116dc83610ef3565b9250826116ec576116eb61169a565b5b82820490509291505056fea2646970667358221220198d05a0800a948d730189dacd1fc59ae170b4ac4aab9ba0130442dfb4d1cefc64736f6c63430008140033
Deployed Bytecode
0x6080604052600436106100c5575f3560e01c8063603f4d521161007e5780638da5cb5b116100585780638da5cb5b1461020e578063a7c6016014610238578063ee889ed014610260578063fc0c546a14610276576100cc565b8063603f4d5214610194578063756af45f146101be57806389476069146101e6576100cc565b8063150d283d146100d05780631a1986e0146100da5780632c4e722e14610104578063405abb411461012e57806355dd574c146101565780635e4a5e5f1461016c576100cc565b366100cc57005b5f80fd5b6100d86102a0565b005b3480156100e5575f80fd5b506100ee6104c9565b6040516100fb9190610f0b565b60405180910390f35b34801561010f575f80fd5b506101186104cf565b6040516101259190610f0b565b60405180910390f35b348015610139575f80fd5b50610154600480360381019061014f9190610f52565b6104d5565b005b348015610161575f80fd5b5061016a610576565b005b348015610177575f80fd5b50610192600480360381019061018d9190610fea565b610621565b005b34801561019f575f80fd5b506101a8610703565b6040516101b59190611054565b60405180910390f35b3480156101c9575f80fd5b506101e460048036038101906101df919061106d565b610715565b005b3480156101f1575f80fd5b5061020c6004803603810190610207919061106d565b610897565b005b348015610219575f80fd5b50610222610ae8565b60405161022f91906110a7565b60405180910390f35b348015610243575f80fd5b5061025e600480360381019061025991906110c0565b610b0d565b005b34801561026b575f80fd5b50610274610dfa565b005b348015610281575f80fd5b5061028a610ea4565b6040516102979190611146565b60405180910390f35b60055f9054906101000a900460ff166102ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e5906111b9565b60405180910390fd5b5f3490505f61030860035483610ec990919063ffffffff16565b90508060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161036591906110a7565b602060405180830381865afa158015610380573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a491906111eb565b10156103e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103dc90611260565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161044292919061127e565b6020604051808303815f875af115801561045e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048291906112cf565b9050806104c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bb9061136a565b60405180910390fd5b505050565b60045481565b60035481565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055b906113f8565b60405180910390fd5b81600381905550806004819055505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fc906113f8565b60405180910390fd5b600160055f6101000a81548160ff021916908315150217905550565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a7906113f8565b60405180910390fd5b8260025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160038190555080600481905550505050565b60055f9054906101000a900460ff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079b906113f8565b60405180910390fd5b5f4790505f81116107ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e190611460565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161080f906114ab565b5f6040518083038185875af1925050503d805f8114610849576040519150601f19603f3d011682016040523d82523d5f602084013e61084e565b606091505b5050905080610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990611509565b60405180910390fd5b505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091d906113f8565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161098191906110a7565b602060405180830381865afa15801561099c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c091906111eb565b90505f8111610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb90611571565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610a6192919061127e565b6020604051808303815f875af1158015610a7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa191906112cf565b905080610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada906115d9565b60405180910390fd5b505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900460ff16610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b52906111b9565b60405180910390fd5b5f610b99620f4240610b8b670de0b6b3a7640000600454610b7c9190611624565b85610ec990919063ffffffff16565b610ede90919063ffffffff16565b9050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610bfa93929190611665565b6020604051808303815f875af1158015610c16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3a91906112cf565b508060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c9691906110a7565b602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd591906111eb565b1015610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90611260565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610d7392919061127e565b6020604051808303815f875af1158015610d8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db391906112cf565b905080610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec9061136a565b60405180910390fd5b505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906113f8565b60405180910390fd5b5f60055f6101000a81548160ff021916908315150217905550565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8183610ed69190611624565b905092915050565b5f8183610eeb91906116c7565b905092915050565b5f819050919050565b610f0581610ef3565b82525050565b5f602082019050610f1e5f830184610efc565b92915050565b5f80fd5b610f3181610ef3565b8114610f3b575f80fd5b50565b5f81359050610f4c81610f28565b92915050565b5f8060408385031215610f6857610f67610f24565b5b5f610f7585828601610f3e565b9250506020610f8685828601610f3e565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610fb982610f90565b9050919050565b610fc981610faf565b8114610fd3575f80fd5b50565b5f81359050610fe481610fc0565b92915050565b5f805f6060848603121561100157611000610f24565b5b5f61100e86828701610fd6565b935050602061101f86828701610f3e565b925050604061103086828701610f3e565b9150509250925092565b5f8115159050919050565b61104e8161103a565b82525050565b5f6020820190506110675f830184611045565b92915050565b5f6020828403121561108257611081610f24565b5b5f61108f84828501610fd6565b91505092915050565b6110a181610faf565b82525050565b5f6020820190506110ba5f830184611098565b92915050565b5f602082840312156110d5576110d4610f24565b5b5f6110e284828501610f3e565b91505092915050565b5f819050919050565b5f61110e61110961110484610f90565b6110eb565b610f90565b9050919050565b5f61111f826110f4565b9050919050565b5f61113082611115565b9050919050565b61114081611126565b82525050565b5f6020820190506111595f830184611137565b92915050565b5f82825260208201905092915050565b7f4e4f545f50524553414c455f53544154450000000000000000000000000000005f82015250565b5f6111a360118361115f565b91506111ae8261116f565b602082019050919050565b5f6020820190508181035f8301526111d081611197565b9050919050565b5f815190506111e581610f28565b92915050565b5f60208284031215611200576111ff610f24565b5b5f61120d848285016111d7565b91505092915050565b7f494e53554646494349454e545f42414c414e43455f494e5f434f4e54524143545f82015250565b5f61124a60208361115f565b915061125582611216565b602082019050919050565b5f6020820190508181035f8301526112778161123e565b9050919050565b5f6040820190506112915f830185611098565b61129e6020830184610efc565b9392505050565b6112ae8161103a565b81146112b8575f80fd5b50565b5f815190506112c9816112a5565b92915050565b5f602082840312156112e4576112e3610f24565b5b5f6112f1848285016112bb565b91505092915050565b7f4641494c45445f544f5f5452414e534645525f544f4b454e535f544f5f4255595f8201527f4552000000000000000000000000000000000000000000000000000000000000602082015250565b5f61135460228361115f565b915061135f826112fa565b604082019050919050565b5f6020820190508181035f83015261138181611348565b9050919050565b7f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e5f8201527f6374696f6e2e0000000000000000000000000000000000000000000000000000602082015250565b5f6113e260268361115f565b91506113ed82611388565b604082019050919050565b5f6020820190508181035f83015261140f816113d6565b9050919050565b7f4e6f204554482062616c616e636520746f2077697468647261770000000000005f82015250565b5f61144a601a8361115f565b915061145582611416565b602082019050919050565b5f6020820190508181035f8301526114778161143e565b9050919050565b5f81905092915050565b50565b5f6114965f8361147e565b91506114a182611488565b5f82019050919050565b5f6114b58261148b565b9150819050919050565b7f455448207769746864726177616c206661696c656400000000000000000000005f82015250565b5f6114f360158361115f565b91506114fe826114bf565b602082019050919050565b5f6020820190508181035f830152611520816114e7565b9050919050565b7f4e6f20746f6b656e7320746f20776974686472617700000000000000000000005f82015250565b5f61155b60158361115f565b915061156682611527565b602082019050919050565b5f6020820190508181035f8301526115888161154f565b9050919050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6115c360158361115f565b91506115ce8261158f565b602082019050919050565b5f6020820190508181035f8301526115f0816115b7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61162e82610ef3565b915061163983610ef3565b925082820261164781610ef3565b9150828204841483151761165e5761165d6115f7565b5b5092915050565b5f6060820190506116785f830186611098565b6116856020830185611098565b6116926040830184610efc565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6116d182610ef3565b91506116dc83610ef3565b9250826116ec576116eb61169a565b5b82820490509291505056fea2646970667358221220198d05a0800a948d730189dacd1fc59ae170b4ac4aab9ba0130442dfb4d1cefc64736f6c63430008140033
Deployed Bytecode Sourcemap
27594:2795:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28783:438;;;:::i;:::-;;27808:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27736:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28403:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28571:80;;;;;;;;;;;;;:::i;:::-;;28179:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27843:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30049:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29726:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27681:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29229:489;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28659:79;;;;;;;;;;;;;:::i;:::-;;27708:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28783:438;28841:9;;;;;;;;;;;28833:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;28883:22;28908:9;28883:34;;28930:19;28952:24;28971:4;;28952:14;:18;;:24;;;;:::i;:::-;28930:46;;29029:11;28995:5;;;;;;;;;;;:15;;;29019:4;28995:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;28987:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;29089:9;29102:5;;;;;;;;;;;:14;;;29117:10;29129:11;29102:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29088:53;;29160:4;29152:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;28822:399;;;28783:438::o;27808:28::-;;;;:::o;27736:19::-;;;;:::o;28403:160::-;28103:5;;;;;;;;;;;28089:19;;:10;:19;;;28081:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28505:7:::1;28498:4;:14;;;;28539:16;28523:13;:32;;;;28403:160:::0;;:::o;28571:80::-;28103:5;;;;;;;;;;;28089:19;;:10;:19;;;28081:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28639:4:::1;28627:9;;:16;;;;;;;;;;;;;;;;;;28571:80::o:0;28179:216::-;28103:5;;;;;;;;;;;28089:19;;:10;:19;;;28081:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28308:13:::1;28293:5;;:29;;;;;;;;;;;;;;;;;;28340:5;28333:4;:12;;;;28373:14;28357:13;:30;;;;28179:216:::0;;;:::o;27843:21::-;;;;;;;;;;;;;:::o;30049:335::-;28103:5;;;;;;;;;;;28089:19;;:10;:19;;;28081:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30126:23:::1;30152:21;30126:47;;30210:1;30192:15;:19;30184:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30254:12;30280:10;30272:24;;30304:15;30272:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30253:71;;;30343:7;30335:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;30115:269;;30049:335:::0;:::o;29726:315::-;28103:5;;;;;;;;;;;28089:19;;:10;:19;;;28081:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29801:20:::1;29824:5;;;;;;;;;;;:15;;;29848:4;29824:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29801:53;;29888:1;29873:12;:16;29865:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;29926:12;29941:5;;;;;;;;;;;:14;;;29956:10;29968:12;29941:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29926:55;;30000:7;29992:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;29790:251;;29726:315:::0;:::o;27681:20::-;;;;;;;;;;;;;:::o;29229:489::-;29299:9;;;;;;;;;;;29291:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;29341:19;29363:52;29409:5;29363:41;29396:6;29379:13;;:24;;;;:::i;:::-;29363:11;:15;;:41;;;;:::i;:::-;:45;;:52;;;;:::i;:::-;29341:74;;29426:4;;;;;;;;;;;:17;;;29444:10;29464:4;29471:11;29426:57;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29536:11;29502:5;;;;;;;;;;;:15;;;29526:4;29502:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;29494:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;29596:9;29609:5;;;;;;;;;;;:14;;;29624:10;29636:11;29609:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29595:53;;29667:4;29659:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;29280:438;;29229:489;:::o;28659:79::-;28103:5;;;;;;;;;;;28089:19;;:10;:19;;;28081:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28725:5:::1;28713:9;;:17;;;;;;;;;;;;;;;;;;28659:79::o:0;27708:21::-;;;;;;;;;;;;;:::o;21315:98::-;21373:7;21404:1;21400;:5;;;;:::i;:::-;21393:12;;21315:98;;;;:::o;21714:::-;21772:7;21803:1;21799;:5;;;;:::i;:::-;21792:12;;21714:98;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:474::-;1110:6;1118;1167:2;1155:9;1146:7;1142:23;1138:32;1135:119;;;1173:79;;:::i;:::-;1135:119;1293:1;1318:53;1363:7;1354:6;1343:9;1339:22;1318:53;:::i;:::-;1308:63;;1264:117;1420:2;1446:53;1491:7;1482:6;1471:9;1467:22;1446:53;:::i;:::-;1436:63;;1391:118;1042:474;;;;;:::o;1522:126::-;1559:7;1599:42;1592:5;1588:54;1577:65;;1522:126;;;:::o;1654:96::-;1691:7;1720:24;1738:5;1720:24;:::i;:::-;1709:35;;1654:96;;;:::o;1756:122::-;1829:24;1847:5;1829:24;:::i;:::-;1822:5;1819:35;1809:63;;1868:1;1865;1858:12;1809:63;1756:122;:::o;1884:139::-;1930:5;1968:6;1955:20;1946:29;;1984:33;2011:5;1984:33;:::i;:::-;1884:139;;;;:::o;2029:619::-;2106:6;2114;2122;2171:2;2159:9;2150:7;2146:23;2142:32;2139:119;;;2177:79;;:::i;:::-;2139:119;2297:1;2322:53;2367:7;2358:6;2347:9;2343:22;2322:53;:::i;:::-;2312:63;;2268:117;2424:2;2450:53;2495:7;2486:6;2475:9;2471:22;2450:53;:::i;:::-;2440:63;;2395:118;2552:2;2578:53;2623:7;2614:6;2603:9;2599:22;2578:53;:::i;:::-;2568:63;;2523:118;2029:619;;;;;:::o;2654:90::-;2688:7;2731:5;2724:13;2717:21;2706:32;;2654:90;;;:::o;2750:109::-;2831:21;2846:5;2831:21;:::i;:::-;2826:3;2819:34;2750:109;;:::o;2865:210::-;2952:4;2990:2;2979:9;2975:18;2967:26;;3003:65;3065:1;3054:9;3050:17;3041:6;3003:65;:::i;:::-;2865:210;;;;:::o;3081:329::-;3140:6;3189:2;3177:9;3168:7;3164:23;3160:32;3157:119;;;3195:79;;:::i;:::-;3157:119;3315:1;3340:53;3385:7;3376:6;3365:9;3361:22;3340:53;:::i;:::-;3330:63;;3286:117;3081:329;;;;:::o;3416:118::-;3503:24;3521:5;3503:24;:::i;:::-;3498:3;3491:37;3416:118;;:::o;3540:222::-;3633:4;3671:2;3660:9;3656:18;3648:26;;3684:71;3752:1;3741:9;3737:17;3728:6;3684:71;:::i;:::-;3540:222;;;;:::o;3768:329::-;3827:6;3876:2;3864:9;3855:7;3851:23;3847:32;3844:119;;;3882:79;;:::i;:::-;3844:119;4002:1;4027:53;4072:7;4063:6;4052:9;4048:22;4027:53;:::i;:::-;4017:63;;3973:117;3768:329;;;;:::o;4103:60::-;4131:3;4152:5;4145:12;;4103:60;;;:::o;4169:142::-;4219:9;4252:53;4270:34;4279:24;4297:5;4279:24;:::i;:::-;4270:34;:::i;:::-;4252:53;:::i;:::-;4239:66;;4169:142;;;:::o;4317:126::-;4367:9;4400:37;4431:5;4400:37;:::i;:::-;4387:50;;4317:126;;;:::o;4449:140::-;4513:9;4546:37;4577:5;4546:37;:::i;:::-;4533:50;;4449:140;;;:::o;4595:159::-;4696:51;4741:5;4696:51;:::i;:::-;4691:3;4684:64;4595:159;;:::o;4760:250::-;4867:4;4905:2;4894:9;4890:18;4882:26;;4918:85;5000:1;4989:9;4985:17;4976:6;4918:85;:::i;:::-;4760:250;;;;:::o;5016:169::-;5100:11;5134:6;5129:3;5122:19;5174:4;5169:3;5165:14;5150:29;;5016:169;;;;:::o;5191:167::-;5331:19;5327:1;5319:6;5315:14;5308:43;5191:167;:::o;5364:366::-;5506:3;5527:67;5591:2;5586:3;5527:67;:::i;:::-;5520:74;;5603:93;5692:3;5603:93;:::i;:::-;5721:2;5716:3;5712:12;5705:19;;5364:366;;;:::o;5736:419::-;5902:4;5940:2;5929:9;5925:18;5917:26;;5989:9;5983:4;5979:20;5975:1;5964:9;5960:17;5953:47;6017:131;6143:4;6017:131;:::i;:::-;6009:139;;5736:419;;;:::o;6161:143::-;6218:5;6249:6;6243:13;6234:22;;6265:33;6292:5;6265:33;:::i;:::-;6161:143;;;;:::o;6310:351::-;6380:6;6429:2;6417:9;6408:7;6404:23;6400:32;6397:119;;;6435:79;;:::i;:::-;6397:119;6555:1;6580:64;6636:7;6627:6;6616:9;6612:22;6580:64;:::i;:::-;6570:74;;6526:128;6310:351;;;;:::o;6667:182::-;6807:34;6803:1;6795:6;6791:14;6784:58;6667:182;:::o;6855:366::-;6997:3;7018:67;7082:2;7077:3;7018:67;:::i;:::-;7011:74;;7094:93;7183:3;7094:93;:::i;:::-;7212:2;7207:3;7203:12;7196:19;;6855:366;;;:::o;7227:419::-;7393:4;7431:2;7420:9;7416:18;7408:26;;7480:9;7474:4;7470:20;7466:1;7455:9;7451:17;7444:47;7508:131;7634:4;7508:131;:::i;:::-;7500:139;;7227:419;;;:::o;7652:332::-;7773:4;7811:2;7800:9;7796:18;7788:26;;7824:71;7892:1;7881:9;7877:17;7868:6;7824:71;:::i;:::-;7905:72;7973:2;7962:9;7958:18;7949:6;7905:72;:::i;:::-;7652:332;;;;;:::o;7990:116::-;8060:21;8075:5;8060:21;:::i;:::-;8053:5;8050:32;8040:60;;8096:1;8093;8086:12;8040:60;7990:116;:::o;8112:137::-;8166:5;8197:6;8191:13;8182:22;;8213:30;8237:5;8213:30;:::i;:::-;8112:137;;;;:::o;8255:345::-;8322:6;8371:2;8359:9;8350:7;8346:23;8342:32;8339:119;;;8377:79;;:::i;:::-;8339:119;8497:1;8522:61;8575:7;8566:6;8555:9;8551:22;8522:61;:::i;:::-;8512:71;;8468:125;8255:345;;;;:::o;8606:221::-;8746:34;8742:1;8734:6;8730:14;8723:58;8815:4;8810:2;8802:6;8798:15;8791:29;8606:221;:::o;8833:366::-;8975:3;8996:67;9060:2;9055:3;8996:67;:::i;:::-;8989:74;;9072:93;9161:3;9072:93;:::i;:::-;9190:2;9185:3;9181:12;9174:19;;8833:366;;;:::o;9205:419::-;9371:4;9409:2;9398:9;9394:18;9386:26;;9458:9;9452:4;9448:20;9444:1;9433:9;9429:17;9422:47;9486:131;9612:4;9486:131;:::i;:::-;9478:139;;9205:419;;;:::o;9630:225::-;9770:34;9766:1;9758:6;9754:14;9747:58;9839:8;9834:2;9826:6;9822:15;9815:33;9630:225;:::o;9861:366::-;10003:3;10024:67;10088:2;10083:3;10024:67;:::i;:::-;10017:74;;10100:93;10189:3;10100:93;:::i;:::-;10218:2;10213:3;10209:12;10202:19;;9861:366;;;:::o;10233:419::-;10399:4;10437:2;10426:9;10422:18;10414:26;;10486:9;10480:4;10476:20;10472:1;10461:9;10457:17;10450:47;10514:131;10640:4;10514:131;:::i;:::-;10506:139;;10233:419;;;:::o;10658:176::-;10798:28;10794:1;10786:6;10782:14;10775:52;10658:176;:::o;10840:366::-;10982:3;11003:67;11067:2;11062:3;11003:67;:::i;:::-;10996:74;;11079:93;11168:3;11079:93;:::i;:::-;11197:2;11192:3;11188:12;11181:19;;10840:366;;;:::o;11212:419::-;11378:4;11416:2;11405:9;11401:18;11393:26;;11465:9;11459:4;11455:20;11451:1;11440:9;11436:17;11429:47;11493:131;11619:4;11493:131;:::i;:::-;11485:139;;11212:419;;;:::o;11637:147::-;11738:11;11775:3;11760:18;;11637:147;;;;:::o;11790:114::-;;:::o;11910:398::-;12069:3;12090:83;12171:1;12166:3;12090:83;:::i;:::-;12083:90;;12182:93;12271:3;12182:93;:::i;:::-;12300:1;12295:3;12291:11;12284:18;;11910:398;;;:::o;12314:379::-;12498:3;12520:147;12663:3;12520:147;:::i;:::-;12513:154;;12684:3;12677:10;;12314:379;;;:::o;12699:171::-;12839:23;12835:1;12827:6;12823:14;12816:47;12699:171;:::o;12876:366::-;13018:3;13039:67;13103:2;13098:3;13039:67;:::i;:::-;13032:74;;13115:93;13204:3;13115:93;:::i;:::-;13233:2;13228:3;13224:12;13217:19;;12876:366;;;:::o;13248:419::-;13414:4;13452:2;13441:9;13437:18;13429:26;;13501:9;13495:4;13491:20;13487:1;13476:9;13472:17;13465:47;13529:131;13655:4;13529:131;:::i;:::-;13521:139;;13248:419;;;:::o;13673:171::-;13813:23;13809:1;13801:6;13797:14;13790:47;13673:171;:::o;13850:366::-;13992:3;14013:67;14077:2;14072:3;14013:67;:::i;:::-;14006:74;;14089:93;14178:3;14089:93;:::i;:::-;14207:2;14202:3;14198:12;14191:19;;13850:366;;;:::o;14222:419::-;14388:4;14426:2;14415:9;14411:18;14403:26;;14475:9;14469:4;14465:20;14461:1;14450:9;14446:17;14439:47;14503:131;14629:4;14503:131;:::i;:::-;14495:139;;14222:419;;;:::o;14647:171::-;14787:23;14783:1;14775:6;14771:14;14764:47;14647:171;:::o;14824:366::-;14966:3;14987:67;15051:2;15046:3;14987:67;:::i;:::-;14980:74;;15063:93;15152:3;15063:93;:::i;:::-;15181:2;15176:3;15172:12;15165:19;;14824:366;;;:::o;15196:419::-;15362:4;15400:2;15389:9;15385:18;15377:26;;15449:9;15443:4;15439:20;15435:1;15424:9;15420:17;15413:47;15477:131;15603:4;15477:131;:::i;:::-;15469:139;;15196:419;;;:::o;15621:180::-;15669:77;15666:1;15659:88;15766:4;15763:1;15756:15;15790:4;15787:1;15780:15;15807:410;15847:7;15870:20;15888:1;15870:20;:::i;:::-;15865:25;;15904:20;15922:1;15904:20;:::i;:::-;15899:25;;15959:1;15956;15952:9;15981:30;15999:11;15981:30;:::i;:::-;15970:41;;16160:1;16151:7;16147:15;16144:1;16141:22;16121:1;16114:9;16094:83;16071:139;;16190:18;;:::i;:::-;16071:139;15855:362;15807:410;;;;:::o;16223:442::-;16372:4;16410:2;16399:9;16395:18;16387:26;;16423:71;16491:1;16480:9;16476:17;16467:6;16423:71;:::i;:::-;16504:72;16572:2;16561:9;16557:18;16548:6;16504:72;:::i;:::-;16586;16654:2;16643:9;16639:18;16630:6;16586:72;:::i;:::-;16223:442;;;;;;:::o;16671:180::-;16719:77;16716:1;16709:88;16816:4;16813:1;16806:15;16840:4;16837:1;16830:15;16857:185;16897:1;16914:20;16932:1;16914:20;:::i;:::-;16909:25;;16948:20;16966:1;16948:20;:::i;:::-;16943:25;;16987:1;16977:35;;16992:18;;:::i;:::-;16977:35;17034:1;17031;17027:9;17022:14;;16857:185;;;;:::o
Swarm Source
ipfs://198d05a0800a948d730189dacd1fc59ae170b4ac4aab9ba0130442dfb4d1cefc
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.