Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 509 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Admin_mint | 15329052 | 818 days ago | IN | 0 ETH | 0.19030061 | ||||
Admin_mint | 15329025 | 818 days ago | IN | 0 ETH | 0.15944262 | ||||
Admin_mint | 15329001 | 818 days ago | IN | 0 ETH | 0.15588486 | ||||
Admin_mint | 15327693 | 818 days ago | IN | 0 ETH | 0.00468945 | ||||
Admin_mint | 15327693 | 818 days ago | IN | 0 ETH | 0.00476912 | ||||
Admin_mint | 15327690 | 818 days ago | IN | 0 ETH | 0.00340003 | ||||
Admin_mint | 15327683 | 818 days ago | IN | 0 ETH | 0.00452138 | ||||
Admin_mint | 15327679 | 818 days ago | IN | 0 ETH | 0.0054236 | ||||
Admin_mint | 15327679 | 818 days ago | IN | 0 ETH | 0.00542321 | ||||
Admin_mint | 15327672 | 818 days ago | IN | 0 ETH | 0.00371726 | ||||
Admin_mint | 15327665 | 818 days ago | IN | 0 ETH | 0.00474623 | ||||
Admin_mint | 15327661 | 818 days ago | IN | 0 ETH | 0.00535965 | ||||
Admin_mint | 15327655 | 818 days ago | IN | 0 ETH | 0.00736185 | ||||
Admin_mint | 15327652 | 818 days ago | IN | 0 ETH | 0.00653667 | ||||
Admin_mint | 15327648 | 818 days ago | IN | 0 ETH | 0.006472 | ||||
Admin_mint | 15327643 | 818 days ago | IN | 0 ETH | 0.00702324 | ||||
Admin_mint | 15327637 | 818 days ago | IN | 0 ETH | 0.00640252 | ||||
Admin_mint | 15327631 | 818 days ago | IN | 0 ETH | 0.0041675 | ||||
Admin_mint | 15327622 | 818 days ago | IN | 0 ETH | 0.00622672 | ||||
Admin_mint | 15327524 | 818 days ago | IN | 0 ETH | 0.009145 | ||||
Admin_mint | 15327510 | 818 days ago | IN | 0 ETH | 0.00687939 | ||||
Mint_approved | 15276363 | 826 days ago | IN | 1 wei | 0.00208841 | ||||
Mint_approved | 15275908 | 826 days ago | IN | 1 wei | 0.00312124 | ||||
Mint_approved | 15274507 | 827 days ago | IN | 1 wei | 0.0045404 | ||||
Mint_approved | 15274112 | 827 days ago | IN | 1 wei | 0.00227468 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15276363 | 826 days ago | 1 wei | ||||
15275908 | 826 days ago | 1 wei | ||||
15274507 | 827 days ago | 1 wei | ||||
15274112 | 827 days ago | 1 wei | ||||
15269323 | 827 days ago | 1 wei | ||||
15269274 | 827 days ago | 1 wei | ||||
15263361 | 828 days ago | 1 wei | ||||
15261493 | 829 days ago | 1 wei | ||||
15261421 | 829 days ago | 1 wei | ||||
15261206 | 829 days ago | 1 wei | ||||
15260878 | 829 days ago | 1 wei | ||||
15258422 | 829 days ago | 1 wei | ||||
15256619 | 829 days ago | 1 wei | ||||
15256372 | 830 days ago | 1 wei | ||||
15255143 | 830 days ago | 1 wei | ||||
15254452 | 830 days ago | 1 wei | ||||
15254271 | 830 days ago | 1 wei | ||||
15252493 | 830 days ago | 1 wei | ||||
15252453 | 830 days ago | 1 wei | ||||
15250691 | 830 days ago | 1 wei | ||||
15250016 | 830 days ago | 1 wei | ||||
15246674 | 831 days ago | 1 wei | ||||
15246171 | 831 days ago | 1 wei | ||||
15245606 | 831 days ago | 1 wei | ||||
15244988 | 831 days ago | 1 wei |
Loading...
Loading
Contract Name:
sale
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.13; import "../sale/SaleContract.sol"; contract sale is SaleContract { constructor(SaleConfiguration memory config) SaleContract(config) {} }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.13; import "./ISaleContract.sol"; import "../token/IToken.sol"; import "../extras/recovery/BlackHolePrevention.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "hardhat/console.sol"; struct SaleConfiguration { uint256 projectID; address token; address payable[] wallets; uint16[] shares; uint256 maxMintPerTransaction; // How many tokens a transaction can mint uint256 maxPresale; // Max sold in presale across presale eth uint256 maxPresalePerAddress; // Limit discounts per address uint256 maxSalePerAddress; uint256 presaleStart; uint256 presaleEnd; uint256 saleStart; uint256 saleEnd; uint256 fullPrice; uint256 MaxUserMintable; address signer; } struct SaleInfo { SaleConfiguration config; TokenInfo token; uint256 _userMinted; // bool _the25Minted; bool _presaleIsActive; bool _saleIsActive; } contract SaleContract is ISaleContract, Ownable, BlackHolePrevention { using SafeMath for uint256; using Strings for uint256; uint256 immutable public projectID; IToken immutable public token; address payable [] _wallets; uint16[] _shares; uint256 _maxMintPerTransaction; uint256 _maxPresale; uint256 _maxMintPerAddress; uint256 _maxPresalePerAddress; uint256 _maxSalePerAddress; address _projectSigner; uint256 _presaleStart; uint256 _presaleEnd; uint256 _saleStart; uint256 _saleEnd; uint256 _fullPrice; uint256 immutable _MaxUserMintable; uint256 _userMinted; // bool _the25Minted; mapping(address => uint256) public _mintedByWallet; event PreSale(address _buyer, address _receiver, uint256 _number_of_items, uint256 _amount); event Sale (address _buyer, address _receiver, uint256 _number_of_items, uint256 _amount); constructor(SaleConfiguration memory config) { require(config.projectID > 0, "Sale: Project id must be higher than 0"); require(config.token != address(0), "Sale: Token address can not be address(0)"); projectID = config.projectID; token = IToken(config.token); TokenInfoForSale memory tinfo = token.getTokenInfoForSale(); require(config.projectID == tinfo._projectID, "Sale: Project id must match"); // Calculate how many tokens can be minted through the sale contract by normal users // _MaxUserMintable = tinfo._maxSupply - tinfo._reservedSupply; // GRD overrides this so we can deploy a DUST "sale" starting at 3k upto 9k _MaxUserMintable = config.MaxUserMintable; UpdateSaleConfiguration(config); UpdateWalletsAndShares(config.wallets, config.shares); } function UpdateSaleConfiguration(SaleConfiguration memory config) public onlyAllowed { // How many tokens a transaction can mint _maxMintPerTransaction = config.maxMintPerTransaction; // Number of tokens to be sold in presale _maxPresale = config.maxPresale; // Limit presale mints per address _maxPresalePerAddress = config.maxPresalePerAddress; // Limit sale mints per address ( must include _maxPresalePerAddress value ) _maxSalePerAddress = config.maxSalePerAddress; _presaleStart = config.presaleStart; _presaleEnd = config.presaleEnd; _saleStart = config.saleStart; _saleEnd = config.saleEnd; _fullPrice = config.fullPrice; // Signed data signer address _projectSigner = config.signer; } /** * @dev Admin: Update wallets and shares */ function UpdateWalletsAndShares( address payable[] memory _newWallets, uint16[] memory _newShares ) public onlyAllowed { require(_newWallets.length == _newShares.length && _newWallets.length > 0, "Sale: Must have at least 1 output wallet"); uint16 totalShares = 0; for (uint8 j = 0; j < _newShares.length; j++) { totalShares+= _newShares[j]; } require(totalShares == 10000, "Sale: Shares total must be 10000"); _shares = _newShares; _wallets = _newWallets; } /** * @dev Admin mint tokens */ function admin_mint(address _destination, uint8 _count) external onlyAllowed { _mintCards(_count, _destination); } /** * @dev Public Sale minting */ function mint(uint256 _numberOfCards) external payable { _internalMint(_numberOfCards, msg.sender); } /** * @dev Public Sale cross mint */ function crossmint(uint256 _numberOfCards, address _receiver) external payable { _internalMint(_numberOfCards, _receiver); } /** * @dev internal minting */ function _internalMint(uint256 _numberOfCards, address _receiver) internal { require(checkSaleIsActive(), "Sale: Sale is not open"); require(_numberOfCards <= _maxMintPerTransaction, "Sale: Over maximum number per transaction"); uint256 number_of_items = msg.value / _fullPrice; require(number_of_items == _numberOfCards, "Sale: ETH sent does not match items requested"); require(number_of_items * _fullPrice == msg.value, "Sale: Incorrect ETH amount sent"); uint256 _sold = _mintedByWallet[_receiver]; require(_sold < _maxSalePerAddress, "Sale: You have already minted your allowance"); require(_sold + number_of_items <= _maxSalePerAddress, "Sale: That would put you over your presale limit"); _mintedByWallet[_receiver]+= number_of_items; _mintCards(number_of_items, _receiver); _split(msg.value); emit Sale(msg.sender, _receiver, number_of_items, msg.value); } /** * @dev Internal mint method */ function _mintCards(uint256 numberOfCards, address recipient) internal { _userMinted+= numberOfCards; require( _userMinted <= _MaxUserMintable, "Sale: Exceeds maximum number of user mintable cards" ); token.mintIncrementalCards(numberOfCards, recipient); } /** * @dev Mint tokens as specified in the signed payload */ struct SignedPayload { uint256 projectID; bool free; uint16 max_mint; address receiver; uint256 valid_from; uint256 valid_to; uint256 eth_price; uint256 dust_price; bytes signature; } function mint_approved(SignedPayload memory _payload, uint256 _numberOfCards) external payable { require(_numberOfCards <= _maxMintPerTransaction, "Sale: Over maximum number per transaction"); require(_numberOfCards + _userMinted <= _maxPresale, "Sale: Presale maximum reached"); // Make sure it can only be called if presale is active require(checkPresaleIsActive(), "Sale: Presale is not active"); // First make sure the received payload was signed by _projectSigner require(verify(_payload), "Sale: SignedPayload verification failed"); // Make sure that msg.sender is actually the intended receiver require(_payload.receiver == msg.sender, "Sale Verify: Invalid receiver"); // Make sure in date range require(_payload.valid_from < _payload.valid_to, "Sale: Invalid from/to range in payload"); require( getBlockTimestamp() >= _payload.valid_from && getBlockTimestamp() <= _payload.valid_to, "Sale: Contract time outside from/to range" ); uint256 number_of_items = msg.value / _payload.eth_price; require(number_of_items == _numberOfCards, "Sale: ETH sent does not match items requested"); require(number_of_items * _payload.eth_price == msg.value, "Sale: Incorrect ETH amount sent"); uint256 _presold = _mintedByWallet[msg.sender]; require(_presold < _payload.max_mint, "Sale: You have already minted your allowance"); require(_presold + number_of_items <= _payload.max_mint, "Sale: That would put you over your presale limit"); _mintedByWallet[msg.sender]+= number_of_items; // Cards will be minted into the specified receiver _mintCards(number_of_items, msg.sender); _split(msg.value); emit PreSale(msg.sender, msg.sender, number_of_items, msg.value); } /** * @dev Verify signed payload */ function verify(SignedPayload memory info) public view returns (bool) { require(info.signature.length == 65, "Sale Verify: Invalid signature length"); bytes memory encodedPayload = abi.encode( info.projectID, info.free, info.max_mint, info.receiver, info.valid_from, info.valid_to, info.eth_price, info.dust_price ); bytes32 hash = keccak256(encodedPayload); bytes32 sigR; bytes32 sigS; uint8 sigV; bytes memory signature = info.signature; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { sigR := mload(add(signature, 0x20)) sigS := mload(add(signature, 0x40)) sigV := byte(0, mload(add(signature, 0x60))) } bytes32 data = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); address recovered = ecrecover(data, sigV, sigR, sigS); return recovered == _projectSigner; } /** * @dev Is presale active? */ function checkPresaleIsActive() public view returns (bool) { if ( (_presaleStart <= getBlockTimestamp()) && (_presaleEnd >= getBlockTimestamp())) { return true; } return false; } /** * @dev Is sale active? */ function checkSaleIsActive() public view returns (bool) { if ((_saleStart <= getBlockTimestamp()) && (_saleEnd >= getBlockTimestamp())) { return true; } return false; } /** * @dev Royalties splitter */ // receive() external payable { // _split(msg.value); // } /** * @dev Internal output splitter */ function _split(uint256 amount) internal { bool sent; uint256 _total; for (uint256 j = 0; j < _wallets.length; j++) { uint256 _amount = (amount * _shares[j]) / 10000; if (j == _wallets.length - 1) { _amount = amount - _total; } else { _total += _amount; } (sent,) = _wallets[j].call{value: _amount}(""); require(sent, "Sale: Splitter failed to send ether"); } } modifier onlyAllowed() { require(token.isAllowed(msg.sender) || msg.sender == owner(), "Sale: Unauthorised"); _; } function tellEverything() external view returns (SaleInfo memory) { return SaleInfo( SaleConfiguration( projectID, address(token), _wallets, _shares, _maxMintPerTransaction, _maxPresale, _maxPresalePerAddress, _maxSalePerAddress, _presaleStart, _presaleEnd, _saleStart, _saleEnd, _fullPrice, _MaxUserMintable, _projectSigner ), token.tellEverything(), _userMinted, // _the25Minted, checkPresaleIsActive(), checkSaleIsActive() ); } function getBlockTimestamp() public view virtual returns(uint256) { return block.timestamp; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.13; interface ISaleContract { function getBlockTimestamp() external view returns(uint256); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.13; struct revealStruct { bytes32 REQUEST_ID; uint256 RANDOM_NUM; uint256 SHIFT; uint256 RANGE_START; uint256 RANGE_END; } struct TokenInfoForSale { uint256 _projectID; uint256 _maxSupply; uint256 _reservedSupply; } struct TokenInfo { string _name; string _symbol; uint256 _projectID; uint256 _maxSupply; uint256 _mintedSupply; uint256 _mintedReserve; uint256 _reservedSupply; uint256 _giveawaySupply; string _tokenPreRevealURI; string _tokenRevealURI; bool _transferLocked; bool _lastRevealRequested; uint256 _totalSupply; revealStruct[] _reveals; } interface IToken { function mintIncrementalCards(uint256, address) external; function mintReservedCards(uint256, address) external; function mintGiveawayCard(uint256, address) external; function setPreRevealURI(string calldata) external; function setRevealURI(string calldata) external; function revealAtCurrentSupply() external; function lastReveal() external; function process(uint256, bytes32) external; function uri(uint256) external view returns (uint256); function tokenURI(uint256) external view returns (string memory); function setTransferLock(bool) external; function setAllowed(address, bool) external; function isAllowed(address) external view returns(bool); function getFirstGiveawayCardId() external view returns (uint256); function tellEverything() external view returns (TokenInfo memory); function getTokenInfoForSale() external view returns (TokenInfoForSale memory); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.13; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract BlackHolePrevention is Ownable { // blackhole prevention methods function retrieveETH() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } function retrieveERC20(address _tracker, uint256 amount) external onlyOwner { IERC20(_tracker).transfer(msg.sender, amount); } function retrieve721(address _tracker, uint256 id) external onlyOwner { IERC721(_tracker).transferFrom(address(this), msg.sender, id); } }
// SPDX-License-Identifier: MIT // 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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 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); }
// SPDX-License-Identifier: MIT // 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); }
// SPDX-License-Identifier: MIT // 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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"uint256","name":"projectID","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable[]","name":"wallets","type":"address[]"},{"internalType":"uint16[]","name":"shares","type":"uint16[]"},{"internalType":"uint256","name":"maxMintPerTransaction","type":"uint256"},{"internalType":"uint256","name":"maxPresale","type":"uint256"},{"internalType":"uint256","name":"maxPresalePerAddress","type":"uint256"},{"internalType":"uint256","name":"maxSalePerAddress","type":"uint256"},{"internalType":"uint256","name":"presaleStart","type":"uint256"},{"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"internalType":"uint256","name":"saleStart","type":"uint256"},{"internalType":"uint256","name":"saleEnd","type":"uint256"},{"internalType":"uint256","name":"fullPrice","type":"uint256"},{"internalType":"uint256","name":"MaxUserMintable","type":"uint256"},{"internalType":"address","name":"signer","type":"address"}],"internalType":"struct SaleConfiguration","name":"config","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_buyer","type":"address"},{"indexed":false,"internalType":"address","name":"_receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"_number_of_items","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"PreSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_buyer","type":"address"},{"indexed":false,"internalType":"address","name":"_receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"_number_of_items","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Sale","type":"event"},{"inputs":[{"components":[{"internalType":"uint256","name":"projectID","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable[]","name":"wallets","type":"address[]"},{"internalType":"uint16[]","name":"shares","type":"uint16[]"},{"internalType":"uint256","name":"maxMintPerTransaction","type":"uint256"},{"internalType":"uint256","name":"maxPresale","type":"uint256"},{"internalType":"uint256","name":"maxPresalePerAddress","type":"uint256"},{"internalType":"uint256","name":"maxSalePerAddress","type":"uint256"},{"internalType":"uint256","name":"presaleStart","type":"uint256"},{"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"internalType":"uint256","name":"saleStart","type":"uint256"},{"internalType":"uint256","name":"saleEnd","type":"uint256"},{"internalType":"uint256","name":"fullPrice","type":"uint256"},{"internalType":"uint256","name":"MaxUserMintable","type":"uint256"},{"internalType":"address","name":"signer","type":"address"}],"internalType":"struct SaleConfiguration","name":"config","type":"tuple"}],"name":"UpdateSaleConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"_newWallets","type":"address[]"},{"internalType":"uint16[]","name":"_newShares","type":"uint16[]"}],"name":"UpdateWalletsAndShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mintedByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint8","name":"_count","type":"uint8"}],"name":"admin_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkPresaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfCards","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"crossmint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfCards","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"projectID","type":"uint256"},{"internalType":"bool","name":"free","type":"bool"},{"internalType":"uint16","name":"max_mint","type":"uint16"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"valid_from","type":"uint256"},{"internalType":"uint256","name":"valid_to","type":"uint256"},{"internalType":"uint256","name":"eth_price","type":"uint256"},{"internalType":"uint256","name":"dust_price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct SaleContract.SignedPayload","name":"_payload","type":"tuple"},{"internalType":"uint256","name":"_numberOfCards","type":"uint256"}],"name":"mint_approved","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tracker","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"retrieve721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tracker","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"retrieveERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retrieveETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tellEverything","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"projectID","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable[]","name":"wallets","type":"address[]"},{"internalType":"uint16[]","name":"shares","type":"uint16[]"},{"internalType":"uint256","name":"maxMintPerTransaction","type":"uint256"},{"internalType":"uint256","name":"maxPresale","type":"uint256"},{"internalType":"uint256","name":"maxPresalePerAddress","type":"uint256"},{"internalType":"uint256","name":"maxSalePerAddress","type":"uint256"},{"internalType":"uint256","name":"presaleStart","type":"uint256"},{"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"internalType":"uint256","name":"saleStart","type":"uint256"},{"internalType":"uint256","name":"saleEnd","type":"uint256"},{"internalType":"uint256","name":"fullPrice","type":"uint256"},{"internalType":"uint256","name":"MaxUserMintable","type":"uint256"},{"internalType":"address","name":"signer","type":"address"}],"internalType":"struct SaleConfiguration","name":"config","type":"tuple"},{"components":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_projectID","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_mintedSupply","type":"uint256"},{"internalType":"uint256","name":"_mintedReserve","type":"uint256"},{"internalType":"uint256","name":"_reservedSupply","type":"uint256"},{"internalType":"uint256","name":"_giveawaySupply","type":"uint256"},{"internalType":"string","name":"_tokenPreRevealURI","type":"string"},{"internalType":"string","name":"_tokenRevealURI","type":"string"},{"internalType":"bool","name":"_transferLocked","type":"bool"},{"internalType":"bool","name":"_lastRevealRequested","type":"bool"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"components":[{"internalType":"bytes32","name":"REQUEST_ID","type":"bytes32"},{"internalType":"uint256","name":"RANDOM_NUM","type":"uint256"},{"internalType":"uint256","name":"SHIFT","type":"uint256"},{"internalType":"uint256","name":"RANGE_START","type":"uint256"},{"internalType":"uint256","name":"RANGE_END","type":"uint256"}],"internalType":"struct revealStruct[]","name":"_reveals","type":"tuple[]"}],"internalType":"struct TokenInfo","name":"token","type":"tuple"},{"internalType":"uint256","name":"_userMinted","type":"uint256"},{"internalType":"bool","name":"_presaleIsActive","type":"bool"},{"internalType":"bool","name":"_saleIsActive","type":"bool"}],"internalType":"struct SaleInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"projectID","type":"uint256"},{"internalType":"bool","name":"free","type":"bool"},{"internalType":"uint16","name":"max_mint","type":"uint16"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"valid_from","type":"uint256"},{"internalType":"uint256","name":"valid_to","type":"uint256"},{"internalType":"uint256","name":"eth_price","type":"uint256"},{"internalType":"uint256","name":"dust_price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct SaleContract.SignedPayload","name":"info","type":"tuple"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b50604051620033bd380380620033bd833981016040819052620000349162000895565b8062000040336200021b565b8051620000a35760405162461bcd60e51b815260206004820152602660248201527f53616c653a2050726f6a656374206964206d757374206265206869676865722060448201526507468616e20360d41b60648201526084015b60405180910390fd5b60208101516001600160a01b0316620001115760405162461bcd60e51b815260206004820152602960248201527f53616c653a20546f6b656e20616464726573732063616e206e6f74206265206160448201526864647265737328302960b81b60648201526084016200009a565b805160805260208101516001600160a01b031660a0819052604080516373b89dd560e11b815290516000929163e7713baa9160048083019260609291908290030181865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e9190620009d0565b8051835191925014620001e45760405162461bcd60e51b815260206004820152601b60248201527f53616c653a2050726f6a656374206964206d757374206d61746368000000000060448201526064016200009a565b6101a082015160c052620001f8826200026b565b6200021282604001518360600151620003a660201b60201c565b50505062000ad1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a05160405163babcc53960e01b81523360048201526001600160a01b039091169063babcc53990602401602060405180830381865afa158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000a2f565b80620002f057506000546001600160a01b031633145b620003335760405162461bcd60e51b815260206004820152601260248201527114d85b194e88155b985d5d1a1bdc9a5cd95960721b60448201526064016200009a565b608081015160035560a081015160045560c081015160065560e0810151600755610100810151600955610120810151600a55610140810151600b55610160810151600c55610180810151600d556101c00151600880546001600160a01b0319166001600160a01b03909216919091179055565b60a05160405163babcc53960e01b81523360048201526001600160a01b039091169063babcc53990602401602060405180830381865afa158015620003ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000415919062000a2f565b806200042b57506000546001600160a01b031633145b6200046e5760405162461bcd60e51b815260206004820152601260248201527114d85b194e88155b985d5d1a1bdc9a5cd95960721b60448201526064016200009a565b8051825114801562000481575060008251115b620004e05760405162461bcd60e51b815260206004820152602860248201527f53616c653a204d7573742068617665206174206c656173742031206f757470756044820152671d081dd85b1b195d60c21b60648201526084016200009a565b6000805b82518160ff1610156200053557828160ff168151811062000509576200050962000a5a565b6020026020010151826200051e919062000a86565b9150806200052c8162000aaf565b915050620004e4565b508061ffff16612710146200058d5760405162461bcd60e51b815260206004820181905260248201527f53616c653a2053686172657320746f74616c206d75737420626520313030303060448201526064016200009a565b8151620005a2906002906020850190620005be565b508251620005b89060019060208601906200066e565b50505050565b82805482825590600052602060002090600f016010900481019282156200065c5791602002820160005b838211156200062a57835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302620005e8565b80156200065a5782816101000a81549061ffff02191690556002016020816001010492830192600103026200062a565b505b506200066a929150620006c6565b5090565b8280548282559060005260206000209081019282156200065c579160200282015b828111156200065c57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200068f565b5b808211156200066a5760008155600101620006c7565b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b0381118282101715620007195762000719620006dd565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200074a576200074a620006dd565b604052919050565b6001600160a01b03811681146200076857600080fd5b50565b8051620007788162000752565b919050565b60006001600160401b03821115620007995762000799620006dd565b5060051b60200190565b600082601f830112620007b557600080fd5b81516020620007ce620007c8836200077d565b6200071f565b82815260059290921b84018101918181019086841115620007ee57600080fd5b8286015b8481101562000816578051620008088162000752565b8352918301918301620007f2565b509695505050505050565b600082601f8301126200083357600080fd5b8151602062000846620007c8836200077d565b82815260059290921b840181019181810190868411156200086657600080fd5b8286015b848110156200081657805161ffff81168114620008875760008081fd5b83529183019183016200086a565b600060208284031215620008a857600080fd5b81516001600160401b0380821115620008c057600080fd5b908301906101e08286031215620008d657600080fd5b620008e0620006f3565b82518152620008f2602084016200076b565b60208201526040830151828111156200090a57600080fd5b6200091887828601620007a3565b6040830152506060830151828111156200093157600080fd5b6200093f8782860162000821565b6060830152506080838101519082015260a0808401519082015260c0808401519082015260e08084015190820152610100808401519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a080840151908201526101c09150620009c18284016200076b565b91810191909152949350505050565b600060608284031215620009e357600080fd5b604051606081016001600160401b038111828210171562000a085762000a08620006dd565b80604052508251815260208301516020820152604083015160408201528091505092915050565b60006020828403121562000a4257600080fd5b8151801515811462000a5357600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111562000aa65762000aa662000a70565b01949350505050565b600060ff821660ff810362000ac85762000ac862000a70565b60010192915050565b60805160a05160c05161288462000b39600039600081816105f7015261151c015260008181610390015281816104a201528181610644015281816107750152818161096c01528181610a3201526115cb0152600081816102bf015261047c01526128846000f3fe60806040526004361061011f5760003560e01c80638da5cb5b116100a0578063b0c77f3511610064578063b0c77f3514610314578063d5b014c314610329578063f0b01d6b1461033e578063f2fde38b1461035e578063fc0c546a1461037e57600080fd5b80638da5cb5b146102685780638f871c731461029a5780639c30ea51146102ad578063a0712d68146102e1578063a5b3abfb146102f457600080fd5b80637b2e64d8116100e75780637b2e64d8146101c85780637d9c059b146101db578063824701c414610208578063879b38e51461022857806388c4814e1461024857600080fd5b806317fd1e2f146101245780632f151b76146101465780636f219bd614610171578063715018a614610196578063796b89b9146101ab575b600080fd5b34801561013057600080fd5b5061014461013f3660046119cc565b6103b2565b005b34801561015257600080fd5b5061015b61045b565b6040516101689190611c19565b60405180910390f35b34801561017d57600080fd5b506101866106f5565b6040519015158152602001610168565b3480156101a257600080fd5b5061014461071c565b3480156101b757600080fd5b50425b604051908152602001610168565b6101446101d6366004611d6a565b610752565b3480156101e757600080fd5b506101ba6101f6366004611d9a565b600f6020526000908152604090205481565b34801561021457600080fd5b50610144610223366004611fa0565b610760565b34801561023457600080fd5b50610144610243366004612003565b610957565b34801561025457600080fd5b50610144610263366004612037565b610a1d565b34801561027457600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610168565b6101446102a83660046122a3565b610b49565b3480156102b957600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6101446102ef3660046122e7565b610f39565b34801561030057600080fd5b5061014461030f3660046119cc565b610f46565b34801561032057600080fd5b50610186610fdb565b34801561033557600080fd5b50610144610ff9565b34801561034a57600080fd5b50610186610359366004612300565b61104f565b34801561036a57600080fd5b50610144610379366004611d9a565b61122e565b34801561038a57600080fd5b506102827f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146103e55760405162461bcd60e51b81526004016103dc9061233c565b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610432573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610456919061237c565b505050565b610463611768565b6040518060a00160405280604051806101e001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001600180548060200260200160405190810160405280929190818152602001828054801561052557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610507575b5050505050815260200160028054806020026020016040519081016040528092919081815260200182805480156105a357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161056a5790505b5050505050815260200160035481526020016004548152602001600654815260200160075481526020016009548152602001600a548152602001600b548152602001600c548152602001600d5481526020017f00000000000000000000000000000000000000000000000000000000000000008152602001600860009054906101000a90046001600160a01b03166001600160a01b031681525081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632f151b766040518163ffffffff1660e01b8152600401600060405180830381865afa1580156106a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c89190810190612486565b8152602001600e5481526020016106dd610fdb565b151581526020016106ec6106f5565b15159052919050565b600042600b541115801561070b575042600c5410155b156107165750600190565b50600090565b6000546001600160a01b031633146107465760405162461bcd60e51b81526004016103dc9061233c565b61075060006112c2565b565b61075c8282611312565b5050565b60405163babcc53960e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063babcc53990602401602060405180830381865afa1580156107c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e8919061237c565b806107fd57506000546001600160a01b031633145b6108195760405162461bcd60e51b81526004016103dc906125f6565b8051825114801561082b575060008251115b6108885760405162461bcd60e51b815260206004820152602860248201527f53616c653a204d7573742068617665206174206c656173742031206f757470756044820152671d081dd85b1b195d60c21b60648201526084016103dc565b6000805b82518160ff1610156108d457828160ff16815181106108ad576108ad612622565b6020026020010151826108c0919061264e565b9150806108cc81612674565b91505061088c565b508061ffff166127101461092a5760405162461bcd60e51b815260206004820181905260248201527f53616c653a2053686172657320746f74616c206d75737420626520313030303060448201526064016103dc565b815161093d906002906020850190611894565b50825161095190600190602086019061193d565b50505050565b60405163babcc53960e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063babcc53990602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061237c565b806109f457506000546001600160a01b031633145b610a105760405162461bcd60e51b81526004016103dc906125f6565b61075c8160ff1683611500565b60405163babcc53960e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063babcc53990602401602060405180830381865afa158015610a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa5919061237c565b80610aba57506000546001600160a01b031633145b610ad65760405162461bcd60e51b81526004016103dc906125f6565b608081015160035560a081015160045560c081015160065560e0810151600755610100810151600955610120810151600a55610140810151600b55610160810151600c55610180810151600d556101c00151600880546001600160a01b0319166001600160a01b03909216919091179055565b600354811115610b6b5760405162461bcd60e51b81526004016103dc90612693565b600454600e54610b7b90836126dc565b1115610bc95760405162461bcd60e51b815260206004820152601d60248201527f53616c653a2050726573616c65206d6178696d756d207265616368656400000060448201526064016103dc565b610bd1610fdb565b610c1d5760405162461bcd60e51b815260206004820152601b60248201527f53616c653a2050726573616c65206973206e6f7420616374697665000000000060448201526064016103dc565b610c268261104f565b610c825760405162461bcd60e51b815260206004820152602760248201527f53616c653a205369676e65645061796c6f616420766572696669636174696f6e6044820152660819985a5b195960ca1b60648201526084016103dc565b60608201516001600160a01b03163314610cde5760405162461bcd60e51b815260206004820152601d60248201527f53616c65205665726966793a20496e76616c696420726563656976657200000060448201526064016103dc565b8160a00151826080015110610d445760405162461bcd60e51b815260206004820152602660248201527f53616c653a20496e76616c69642066726f6d2f746f2072616e676520696e2070604482015265185e5b1bd85960d21b60648201526084016103dc565b60808201514210158015610d5c575060a08201514211155b610dba5760405162461bcd60e51b815260206004820152602960248201527f53616c653a20436f6e74726163742074696d65206f7574736964652066726f6d6044820152682f746f2072616e676560b81b60648201526084016103dc565b60008260c0015134610dcc91906126f4565b9050818114610ded5760405162461bcd60e51b81526004016103dc90612716565b348360c0015182610dfe9190612763565b14610e4b5760405162461bcd60e51b815260206004820152601f60248201527f53616c653a20496e636f72726563742045544820616d6f756e742073656e740060448201526064016103dc565b336000908152600f602052604090819020549084015161ffff168110610e835760405162461bcd60e51b81526004016103dc90612782565b604084015161ffff16610e9683836126dc565b1115610eb45760405162461bcd60e51b81526004016103dc906127ce565b336000908152600f602052604081208054849290610ed39084906126dc565b90915550610ee390508233611500565b610eec346115fa565b604080513380825260208201529081018390523460608201527f86137a9de2426639b92798b8d88fdffba9ec25ced6206a4de472ab77cc931ad5906080015b60405180910390a150505050565b610f438133611312565b50565b6000546001600160a01b03163314610f705760405162461bcd60e51b81526004016103dc9061233c565b6040516323b872dd60e01b8152306004820152336024820152604481018290526001600160a01b038316906323b872dd906064015b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050505050565b6000426009541115801561070b575042600a54106107165750600190565b6000546001600160a01b031633146110235760405162461bcd60e51b81526004016103dc9061233c565b60405133904780156108fc02916000818181858888f19350505050158015610f43573d6000803e3d6000fd5b6000816101000151516041146110b55760405162461bcd60e51b815260206004820152602560248201527f53616c65205665726966793a20496e76616c6964207369676e6174757265206c6044820152640cadccee8d60db1b60648201526084016103dc565b81516020808401516040808601516060870151608088015160a089015160c08a015160e08b0151955160009961112d999098979101978852951515602088015261ffff9490941660408701526001600160a01b03929092166060860152608085015260a084015260c083015260e08201526101000190565b60408051808303601f190181528282528051602080830191909120610100880151808301519481015160608201517f19457468657265756d205369676e6564204d6573736167653a0a33320000000094880194909452603c87018390529396509094600092831a9290605c0160408051601f198184030181528282528051602091820120600080855291840180845281905260ff87169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611204573d6000803e3d6000fd5b5050604051601f1901516008546001600160a01b039182169116149b9a5050505050505050505050565b6000546001600160a01b031633146112585760405162461bcd60e51b81526004016103dc9061233c565b6001600160a01b0381166112bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103dc565b610f43815b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61131a6106f5565b61135f5760405162461bcd60e51b815260206004820152601660248201527529b0b6329d1029b0b6329034b9903737ba1037b832b760511b60448201526064016103dc565b6003548211156113815760405162461bcd60e51b81526004016103dc90612693565b6000600d543461139191906126f4565b90508281146113b25760405162461bcd60e51b81526004016103dc90612716565b34600d54826113c19190612763565b1461140e5760405162461bcd60e51b815260206004820152601f60248201527f53616c653a20496e636f72726563742045544820616d6f756e742073656e740060448201526064016103dc565b6001600160a01b0382166000908152600f602052604090205460075481106114485760405162461bcd60e51b81526004016103dc90612782565b60075461145583836126dc565b11156114735760405162461bcd60e51b81526004016103dc906127ce565b6001600160a01b0383166000908152600f60205260408120805484929061149b9084906126dc565b909155506114ab90508284611500565b6114b4346115fa565b604080513381526001600160a01b03851660208201529081018390523460608201527f681ddc67ea8796d2489979f5fc2ea2eb0f2d44ff3f11f061a191928a1f3d9a0690608001610f2b565b81600e600082825461151291906126dc565b9091555050600e547f000000000000000000000000000000000000000000000000000000000000000010156115a55760405162461bcd60e51b815260206004820152603360248201527f53616c653a2045786365656473206d6178696d756d206e756d626572206f662060448201527275736572206d696e7461626c6520636172647360681b60648201526084016103dc565b6040516369b2b9a760e01b8152600481018390526001600160a01b0382811660248301527f000000000000000000000000000000000000000000000000000000000000000016906369b2b9a790604401610fa5565b60008060005b6001548110156109515760006127106002838154811061162257611622612622565b6000918252602090912060108204015461164c91600f166002026101000a900461ffff1687612763565b61165691906126f4565b600180549192506116669161281e565b820361167d57611676838661281e565b905061168a565b61168781846126dc565b92505b6001828154811061169d5761169d612622565b60009182526020822001546040516001600160a01b039091169183919081818185875af1925050503d80600081146116f1576040519150601f19603f3d011682016040523d82523d6000602084013e6116f6565b606091505b505080945050836117555760405162461bcd60e51b815260206004820152602360248201527f53616c653a2053706c6974746572206661696c656420746f2073656e642065746044820152623432b960e91b60648201526084016103dc565b508061176081612835565b915050611600565b6040518060a001604052806117fe604051806101e001604052806000815260200160006001600160a01b0316815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b8152602001611879604051806101c001604052806060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160001515815260200160001515815260200160008152602001606081525090565b81526000602082018190526040820181905260609091015290565b82805482825590600052602060002090600f0160109004810192821561192d5791602002820160005b838211156118fd57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026118bd565b801561192b5782816101000a81549061ffff02191690556002016020816001010492830192600103026118fd565b505b50611939929150611992565b5090565b82805482825590600052602060002090810192821561192d579160200282015b8281111561192d57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061195d565b5b808211156119395760008155600101611993565b6001600160a01b0381168114610f4357600080fd5b80356119c7816119a7565b919050565b600080604083850312156119df57600080fd5b82356119ea816119a7565b946020939093013593505050565b600081518084526020808501945080840160005b83811015611a315781516001600160a01b031687529582019590820190600101611a0c565b509495945050505050565b600081518084526020808501945080840160005b83811015611a3157815161ffff1687529582019590820190600101611a50565b60005b83811015611a8b578181015183820152602001611a73565b838111156109515750506000910152565b60008151808452611ab4816020860160208601611a70565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015611a3157815180518852838101518489015260408082015190890152606080820151908901526080908101519088015260a09096019590820190600101611adc565b60006101c08251818552611b3882860182611a9c565b91505060208301518482036020860152611b528282611a9c565b91505060408301516040850152606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015185830382870152611ba98382611a9c565b925050506101208084015185830382870152611bc58382611a9c565b9250505061014080840151611bdd8287018215159052565b50506101608381015115159085015261018080840151908501526101a08084015185830382870152611c0f8382611ac8565b9695505050505050565b602081526000825160a06020840152805160c08401526020810151611c4960e08501826001600160a01b03169052565b5060408101516101e06101008181870152611c686102a08701846119f8565b9250606084015161012060bf198886030181890152611c878583611a3c565b60808701516101408a81019190915260a0880151610160808c019190915260c0890151610180808d019190915260e08a01516101a0808e0191909152968a01516101c0808e0191909152948a0151978c0197909752908801516102008b01528701516102208a0152938601516102408901529185015161026088015250909201516001600160a01b0316610280850152506020840151838203601f1901604085015290611d348183611b22565b915050604084015160608401526060840151611d54608085018215159052565b50608084015180151560a0850152509392505050565b60008060408385031215611d7d57600080fd5b823591506020830135611d8f816119a7565b809150509250929050565b600060208284031215611dac57600080fd5b8135611db7816119a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b0381118282101715611df757611df7611dbe565b60405290565b60405161012081016001600160401b0381118282101715611df757611df7611dbe565b60405160a081016001600160401b0381118282101715611df757611df7611dbe565b6040516101c081016001600160401b0381118282101715611df757611df7611dbe565b604051601f8201601f191681016001600160401b0381118282101715611e8d57611e8d611dbe565b604052919050565b60006001600160401b03821115611eae57611eae611dbe565b5060051b60200190565b600082601f830112611ec957600080fd5b81356020611ede611ed983611e95565b611e65565b82815260059290921b84018101918181019086841115611efd57600080fd5b8286015b84811015611f21578035611f14816119a7565b8352918301918301611f01565b509695505050505050565b803561ffff811681146119c757600080fd5b600082601f830112611f4f57600080fd5b81356020611f5f611ed983611e95565b82815260059290921b84018101918181019086841115611f7e57600080fd5b8286015b84811015611f2157611f9381611f2c565b8352918301918301611f82565b60008060408385031215611fb357600080fd5b82356001600160401b0380821115611fca57600080fd5b611fd686838701611eb8565b93506020850135915080821115611fec57600080fd5b50611ff985828601611f3e565b9150509250929050565b6000806040838503121561201657600080fd5b8235612021816119a7565b9150602083013560ff81168114611d8f57600080fd5b60006020828403121561204957600080fd5b81356001600160401b038082111561206057600080fd5b908301906101e0828603121561207557600080fd5b61207d611dd4565b8235815261208d602084016119bc565b60208201526040830135828111156120a457600080fd5b6120b087828601611eb8565b6040830152506060830135828111156120c857600080fd5b6120d487828601611f3e565b6060830152506080838101359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c091506121548284016119bc565b91810191909152949350505050565b8015158114610f4357600080fd5b80356119c781612163565b60006001600160401b0382111561219557612195611dbe565b50601f01601f191660200190565b600082601f8301126121b457600080fd5b81356121c2611ed98261217c565b8181528460208386010111156121d757600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120828403121561220757600080fd5b61220f611dfd565b90508135815261222160208301612171565b602082015261223260408301611f2c565b6040820152612243606083016119bc565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301356001600160401b0381111561228b57600080fd5b612297858286016121a3565b82840152505092915050565b600080604083850312156122b657600080fd5b82356001600160401b038111156122cc57600080fd5b6122d8858286016121f4565b95602094909401359450505050565b6000602082840312156122f957600080fd5b5035919050565b60006020828403121561231257600080fd5b81356001600160401b0381111561232857600080fd5b612334848285016121f4565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80516119c781612163565b60006020828403121561238e57600080fd5b8151611db781612163565b600082601f8301126123aa57600080fd5b81516123b8611ed98261217c565b8181528460208386010111156123cd57600080fd5b612334826020830160208701611a70565b600082601f8301126123ef57600080fd5b815160206123ff611ed983611e95565b82815260a0928302850182019282820191908785111561241e57600080fd5b8387015b858110156124795781818a03121561243a5760008081fd5b612442611e20565b8151815285820151868201526040808301519082015260608083015190820152608080830151908201528452928401928101612422565b5090979650505050505050565b60006020828403121561249857600080fd5b81516001600160401b03808211156124af57600080fd5b908301906101c082860312156124c457600080fd5b6124cc611e42565b8251828111156124db57600080fd5b6124e787828601612399565b8252506020830151828111156124fc57600080fd5b61250887828601612399565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518381111561255e57600080fd5b61256a88828701612399565b828401525050610120808401518381111561258457600080fd5b61259088828701612399565b8284015250506101406125a4818501612371565b908201526101606125b6848201612371565b9082015261018083810151908201526101a080840151838111156125d957600080fd5b6125e5888287016123de565b918301919091525095945050505050565b60208082526012908201527114d85b194e88155b985d5d1a1bdc9a5cd95960721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111561266b5761266b612638565b01949350505050565b600060ff821660ff810361268a5761268a612638565b60010192915050565b60208082526029908201527f53616c653a204f766572206d6178696d756d206e756d6265722070657220747260408201526830b739b0b1ba34b7b760b91b606082015260800190565b600082198211156126ef576126ef612638565b500190565b60008261271157634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602d908201527f53616c653a204554482073656e7420646f6573206e6f74206d6174636820697460408201526c195b5cc81c995c5d595cdd1959609a1b606082015260800190565b600081600019048311821515161561277d5761277d612638565b500290565b6020808252602c908201527f53616c653a20596f75206861766520616c7265616479206d696e74656420796f60408201526b757220616c6c6f77616e636560a01b606082015260800190565b60208082526030908201527f53616c653a205468617420776f756c642070757420796f75206f76657220796f60408201526f1d5c881c1c995cd85b19481b1a5b5a5d60821b606082015260800190565b60008282101561283057612830612638565b500390565b60006001820161284757612847612638565b506001019056fea2646970667358221220daab4006676f7d4069d42a0dedfacd5332f61fde828109de78305ad8af062d4864736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a41500000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000629dfa5000000000000000000000000000000000000000000000000000000000629f4bd000000000000000000000000000000000000000000000000000000000629f4bd00000000000000000000000000000000000000000000000000000000062bafb5000000000000000000000000000000000000000000000000000f8b0a10e4700000000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000d25f03bdc4727b43bf09ace9cf25c5dea21d1532000000000000000000000000000000000000000000000000000000000000000200000000000000000000000096b84cd0121f875175e13cc1f2679d674f9e505b000000000000000000000000a91a899ec4b66c1973ee143f50feb0d91f373e54000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000001f40
Deployed Bytecode
0x60806040526004361061011f5760003560e01c80638da5cb5b116100a0578063b0c77f3511610064578063b0c77f3514610314578063d5b014c314610329578063f0b01d6b1461033e578063f2fde38b1461035e578063fc0c546a1461037e57600080fd5b80638da5cb5b146102685780638f871c731461029a5780639c30ea51146102ad578063a0712d68146102e1578063a5b3abfb146102f457600080fd5b80637b2e64d8116100e75780637b2e64d8146101c85780637d9c059b146101db578063824701c414610208578063879b38e51461022857806388c4814e1461024857600080fd5b806317fd1e2f146101245780632f151b76146101465780636f219bd614610171578063715018a614610196578063796b89b9146101ab575b600080fd5b34801561013057600080fd5b5061014461013f3660046119cc565b6103b2565b005b34801561015257600080fd5b5061015b61045b565b6040516101689190611c19565b60405180910390f35b34801561017d57600080fd5b506101866106f5565b6040519015158152602001610168565b3480156101a257600080fd5b5061014461071c565b3480156101b757600080fd5b50425b604051908152602001610168565b6101446101d6366004611d6a565b610752565b3480156101e757600080fd5b506101ba6101f6366004611d9a565b600f6020526000908152604090205481565b34801561021457600080fd5b50610144610223366004611fa0565b610760565b34801561023457600080fd5b50610144610243366004612003565b610957565b34801561025457600080fd5b50610144610263366004612037565b610a1d565b34801561027457600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610168565b6101446102a83660046122a3565b610b49565b3480156102b957600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000181565b6101446102ef3660046122e7565b610f39565b34801561030057600080fd5b5061014461030f3660046119cc565b610f46565b34801561032057600080fd5b50610186610fdb565b34801561033557600080fd5b50610144610ff9565b34801561034a57600080fd5b50610186610359366004612300565b61104f565b34801561036a57600080fd5b50610144610379366004611d9a565b61122e565b34801561038a57600080fd5b506102827f0000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a41581565b6000546001600160a01b031633146103e55760405162461bcd60e51b81526004016103dc9061233c565b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610432573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610456919061237c565b505050565b610463611768565b6040518060a00160405280604051806101e001604052807f000000000000000000000000000000000000000000000000000000000000000181526020017f0000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a4156001600160a01b03168152602001600180548060200260200160405190810160405280929190818152602001828054801561052557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610507575b5050505050815260200160028054806020026020016040519081016040528092919081815260200182805480156105a357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161056a5790505b5050505050815260200160035481526020016004548152602001600654815260200160075481526020016009548152602001600a548152602001600b548152602001600c548152602001600d5481526020017f0000000000000000000000000000000000000000000000000000000000000bb88152602001600860009054906101000a90046001600160a01b03166001600160a01b031681525081526020017f0000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a4156001600160a01b0316632f151b766040518163ffffffff1660e01b8152600401600060405180830381865afa1580156106a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c89190810190612486565b8152602001600e5481526020016106dd610fdb565b151581526020016106ec6106f5565b15159052919050565b600042600b541115801561070b575042600c5410155b156107165750600190565b50600090565b6000546001600160a01b031633146107465760405162461bcd60e51b81526004016103dc9061233c565b61075060006112c2565b565b61075c8282611312565b5050565b60405163babcc53960e01b81523360048201527f0000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a4156001600160a01b03169063babcc53990602401602060405180830381865afa1580156107c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e8919061237c565b806107fd57506000546001600160a01b031633145b6108195760405162461bcd60e51b81526004016103dc906125f6565b8051825114801561082b575060008251115b6108885760405162461bcd60e51b815260206004820152602860248201527f53616c653a204d7573742068617665206174206c656173742031206f757470756044820152671d081dd85b1b195d60c21b60648201526084016103dc565b6000805b82518160ff1610156108d457828160ff16815181106108ad576108ad612622565b6020026020010151826108c0919061264e565b9150806108cc81612674565b91505061088c565b508061ffff166127101461092a5760405162461bcd60e51b815260206004820181905260248201527f53616c653a2053686172657320746f74616c206d75737420626520313030303060448201526064016103dc565b815161093d906002906020850190611894565b50825161095190600190602086019061193d565b50505050565b60405163babcc53960e01b81523360048201527f0000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a4156001600160a01b03169063babcc53990602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061237c565b806109f457506000546001600160a01b031633145b610a105760405162461bcd60e51b81526004016103dc906125f6565b61075c8160ff1683611500565b60405163babcc53960e01b81523360048201527f0000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a4156001600160a01b03169063babcc53990602401602060405180830381865afa158015610a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa5919061237c565b80610aba57506000546001600160a01b031633145b610ad65760405162461bcd60e51b81526004016103dc906125f6565b608081015160035560a081015160045560c081015160065560e0810151600755610100810151600955610120810151600a55610140810151600b55610160810151600c55610180810151600d556101c00151600880546001600160a01b0319166001600160a01b03909216919091179055565b600354811115610b6b5760405162461bcd60e51b81526004016103dc90612693565b600454600e54610b7b90836126dc565b1115610bc95760405162461bcd60e51b815260206004820152601d60248201527f53616c653a2050726573616c65206d6178696d756d207265616368656400000060448201526064016103dc565b610bd1610fdb565b610c1d5760405162461bcd60e51b815260206004820152601b60248201527f53616c653a2050726573616c65206973206e6f7420616374697665000000000060448201526064016103dc565b610c268261104f565b610c825760405162461bcd60e51b815260206004820152602760248201527f53616c653a205369676e65645061796c6f616420766572696669636174696f6e6044820152660819985a5b195960ca1b60648201526084016103dc565b60608201516001600160a01b03163314610cde5760405162461bcd60e51b815260206004820152601d60248201527f53616c65205665726966793a20496e76616c696420726563656976657200000060448201526064016103dc565b8160a00151826080015110610d445760405162461bcd60e51b815260206004820152602660248201527f53616c653a20496e76616c69642066726f6d2f746f2072616e676520696e2070604482015265185e5b1bd85960d21b60648201526084016103dc565b60808201514210158015610d5c575060a08201514211155b610dba5760405162461bcd60e51b815260206004820152602960248201527f53616c653a20436f6e74726163742074696d65206f7574736964652066726f6d6044820152682f746f2072616e676560b81b60648201526084016103dc565b60008260c0015134610dcc91906126f4565b9050818114610ded5760405162461bcd60e51b81526004016103dc90612716565b348360c0015182610dfe9190612763565b14610e4b5760405162461bcd60e51b815260206004820152601f60248201527f53616c653a20496e636f72726563742045544820616d6f756e742073656e740060448201526064016103dc565b336000908152600f602052604090819020549084015161ffff168110610e835760405162461bcd60e51b81526004016103dc90612782565b604084015161ffff16610e9683836126dc565b1115610eb45760405162461bcd60e51b81526004016103dc906127ce565b336000908152600f602052604081208054849290610ed39084906126dc565b90915550610ee390508233611500565b610eec346115fa565b604080513380825260208201529081018390523460608201527f86137a9de2426639b92798b8d88fdffba9ec25ced6206a4de472ab77cc931ad5906080015b60405180910390a150505050565b610f438133611312565b50565b6000546001600160a01b03163314610f705760405162461bcd60e51b81526004016103dc9061233c565b6040516323b872dd60e01b8152306004820152336024820152604481018290526001600160a01b038316906323b872dd906064015b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050505050565b6000426009541115801561070b575042600a54106107165750600190565b6000546001600160a01b031633146110235760405162461bcd60e51b81526004016103dc9061233c565b60405133904780156108fc02916000818181858888f19350505050158015610f43573d6000803e3d6000fd5b6000816101000151516041146110b55760405162461bcd60e51b815260206004820152602560248201527f53616c65205665726966793a20496e76616c6964207369676e6174757265206c6044820152640cadccee8d60db1b60648201526084016103dc565b81516020808401516040808601516060870151608088015160a089015160c08a015160e08b0151955160009961112d999098979101978852951515602088015261ffff9490941660408701526001600160a01b03929092166060860152608085015260a084015260c083015260e08201526101000190565b60408051808303601f190181528282528051602080830191909120610100880151808301519481015160608201517f19457468657265756d205369676e6564204d6573736167653a0a33320000000094880194909452603c87018390529396509094600092831a9290605c0160408051601f198184030181528282528051602091820120600080855291840180845281905260ff87169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611204573d6000803e3d6000fd5b5050604051601f1901516008546001600160a01b039182169116149b9a5050505050505050505050565b6000546001600160a01b031633146112585760405162461bcd60e51b81526004016103dc9061233c565b6001600160a01b0381166112bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103dc565b610f43815b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61131a6106f5565b61135f5760405162461bcd60e51b815260206004820152601660248201527529b0b6329d1029b0b6329034b9903737ba1037b832b760511b60448201526064016103dc565b6003548211156113815760405162461bcd60e51b81526004016103dc90612693565b6000600d543461139191906126f4565b90508281146113b25760405162461bcd60e51b81526004016103dc90612716565b34600d54826113c19190612763565b1461140e5760405162461bcd60e51b815260206004820152601f60248201527f53616c653a20496e636f72726563742045544820616d6f756e742073656e740060448201526064016103dc565b6001600160a01b0382166000908152600f602052604090205460075481106114485760405162461bcd60e51b81526004016103dc90612782565b60075461145583836126dc565b11156114735760405162461bcd60e51b81526004016103dc906127ce565b6001600160a01b0383166000908152600f60205260408120805484929061149b9084906126dc565b909155506114ab90508284611500565b6114b4346115fa565b604080513381526001600160a01b03851660208201529081018390523460608201527f681ddc67ea8796d2489979f5fc2ea2eb0f2d44ff3f11f061a191928a1f3d9a0690608001610f2b565b81600e600082825461151291906126dc565b9091555050600e547f0000000000000000000000000000000000000000000000000000000000000bb810156115a55760405162461bcd60e51b815260206004820152603360248201527f53616c653a2045786365656473206d6178696d756d206e756d626572206f662060448201527275736572206d696e7461626c6520636172647360681b60648201526084016103dc565b6040516369b2b9a760e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a41516906369b2b9a790604401610fa5565b60008060005b6001548110156109515760006127106002838154811061162257611622612622565b6000918252602090912060108204015461164c91600f166002026101000a900461ffff1687612763565b61165691906126f4565b600180549192506116669161281e565b820361167d57611676838661281e565b905061168a565b61168781846126dc565b92505b6001828154811061169d5761169d612622565b60009182526020822001546040516001600160a01b039091169183919081818185875af1925050503d80600081146116f1576040519150601f19603f3d011682016040523d82523d6000602084013e6116f6565b606091505b505080945050836117555760405162461bcd60e51b815260206004820152602360248201527f53616c653a2053706c6974746572206661696c656420746f2073656e642065746044820152623432b960e91b60648201526084016103dc565b508061176081612835565b915050611600565b6040518060a001604052806117fe604051806101e001604052806000815260200160006001600160a01b0316815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b8152602001611879604051806101c001604052806060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160001515815260200160001515815260200160008152602001606081525090565b81526000602082018190526040820181905260609091015290565b82805482825590600052602060002090600f0160109004810192821561192d5791602002820160005b838211156118fd57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026118bd565b801561192b5782816101000a81549061ffff02191690556002016020816001010492830192600103026118fd565b505b50611939929150611992565b5090565b82805482825590600052602060002090810192821561192d579160200282015b8281111561192d57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061195d565b5b808211156119395760008155600101611993565b6001600160a01b0381168114610f4357600080fd5b80356119c7816119a7565b919050565b600080604083850312156119df57600080fd5b82356119ea816119a7565b946020939093013593505050565b600081518084526020808501945080840160005b83811015611a315781516001600160a01b031687529582019590820190600101611a0c565b509495945050505050565b600081518084526020808501945080840160005b83811015611a3157815161ffff1687529582019590820190600101611a50565b60005b83811015611a8b578181015183820152602001611a73565b838111156109515750506000910152565b60008151808452611ab4816020860160208601611a70565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015611a3157815180518852838101518489015260408082015190890152606080820151908901526080908101519088015260a09096019590820190600101611adc565b60006101c08251818552611b3882860182611a9c565b91505060208301518482036020860152611b528282611a9c565b91505060408301516040850152606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015185830382870152611ba98382611a9c565b925050506101208084015185830382870152611bc58382611a9c565b9250505061014080840151611bdd8287018215159052565b50506101608381015115159085015261018080840151908501526101a08084015185830382870152611c0f8382611ac8565b9695505050505050565b602081526000825160a06020840152805160c08401526020810151611c4960e08501826001600160a01b03169052565b5060408101516101e06101008181870152611c686102a08701846119f8565b9250606084015161012060bf198886030181890152611c878583611a3c565b60808701516101408a81019190915260a0880151610160808c019190915260c0890151610180808d019190915260e08a01516101a0808e0191909152968a01516101c0808e0191909152948a0151978c0197909752908801516102008b01528701516102208a0152938601516102408901529185015161026088015250909201516001600160a01b0316610280850152506020840151838203601f1901604085015290611d348183611b22565b915050604084015160608401526060840151611d54608085018215159052565b50608084015180151560a0850152509392505050565b60008060408385031215611d7d57600080fd5b823591506020830135611d8f816119a7565b809150509250929050565b600060208284031215611dac57600080fd5b8135611db7816119a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b0381118282101715611df757611df7611dbe565b60405290565b60405161012081016001600160401b0381118282101715611df757611df7611dbe565b60405160a081016001600160401b0381118282101715611df757611df7611dbe565b6040516101c081016001600160401b0381118282101715611df757611df7611dbe565b604051601f8201601f191681016001600160401b0381118282101715611e8d57611e8d611dbe565b604052919050565b60006001600160401b03821115611eae57611eae611dbe565b5060051b60200190565b600082601f830112611ec957600080fd5b81356020611ede611ed983611e95565b611e65565b82815260059290921b84018101918181019086841115611efd57600080fd5b8286015b84811015611f21578035611f14816119a7565b8352918301918301611f01565b509695505050505050565b803561ffff811681146119c757600080fd5b600082601f830112611f4f57600080fd5b81356020611f5f611ed983611e95565b82815260059290921b84018101918181019086841115611f7e57600080fd5b8286015b84811015611f2157611f9381611f2c565b8352918301918301611f82565b60008060408385031215611fb357600080fd5b82356001600160401b0380821115611fca57600080fd5b611fd686838701611eb8565b93506020850135915080821115611fec57600080fd5b50611ff985828601611f3e565b9150509250929050565b6000806040838503121561201657600080fd5b8235612021816119a7565b9150602083013560ff81168114611d8f57600080fd5b60006020828403121561204957600080fd5b81356001600160401b038082111561206057600080fd5b908301906101e0828603121561207557600080fd5b61207d611dd4565b8235815261208d602084016119bc565b60208201526040830135828111156120a457600080fd5b6120b087828601611eb8565b6040830152506060830135828111156120c857600080fd5b6120d487828601611f3e565b6060830152506080838101359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c091506121548284016119bc565b91810191909152949350505050565b8015158114610f4357600080fd5b80356119c781612163565b60006001600160401b0382111561219557612195611dbe565b50601f01601f191660200190565b600082601f8301126121b457600080fd5b81356121c2611ed98261217c565b8181528460208386010111156121d757600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120828403121561220757600080fd5b61220f611dfd565b90508135815261222160208301612171565b602082015261223260408301611f2c565b6040820152612243606083016119bc565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301356001600160401b0381111561228b57600080fd5b612297858286016121a3565b82840152505092915050565b600080604083850312156122b657600080fd5b82356001600160401b038111156122cc57600080fd5b6122d8858286016121f4565b95602094909401359450505050565b6000602082840312156122f957600080fd5b5035919050565b60006020828403121561231257600080fd5b81356001600160401b0381111561232857600080fd5b612334848285016121f4565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80516119c781612163565b60006020828403121561238e57600080fd5b8151611db781612163565b600082601f8301126123aa57600080fd5b81516123b8611ed98261217c565b8181528460208386010111156123cd57600080fd5b612334826020830160208701611a70565b600082601f8301126123ef57600080fd5b815160206123ff611ed983611e95565b82815260a0928302850182019282820191908785111561241e57600080fd5b8387015b858110156124795781818a03121561243a5760008081fd5b612442611e20565b8151815285820151868201526040808301519082015260608083015190820152608080830151908201528452928401928101612422565b5090979650505050505050565b60006020828403121561249857600080fd5b81516001600160401b03808211156124af57600080fd5b908301906101c082860312156124c457600080fd5b6124cc611e42565b8251828111156124db57600080fd5b6124e787828601612399565b8252506020830151828111156124fc57600080fd5b61250887828601612399565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518381111561255e57600080fd5b61256a88828701612399565b828401525050610120808401518381111561258457600080fd5b61259088828701612399565b8284015250506101406125a4818501612371565b908201526101606125b6848201612371565b9082015261018083810151908201526101a080840151838111156125d957600080fd5b6125e5888287016123de565b918301919091525095945050505050565b60208082526012908201527114d85b194e88155b985d5d1a1bdc9a5cd95960721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111561266b5761266b612638565b01949350505050565b600060ff821660ff810361268a5761268a612638565b60010192915050565b60208082526029908201527f53616c653a204f766572206d6178696d756d206e756d6265722070657220747260408201526830b739b0b1ba34b7b760b91b606082015260800190565b600082198211156126ef576126ef612638565b500190565b60008261271157634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602d908201527f53616c653a204554482073656e7420646f6573206e6f74206d6174636820697460408201526c195b5cc81c995c5d595cdd1959609a1b606082015260800190565b600081600019048311821515161561277d5761277d612638565b500290565b6020808252602c908201527f53616c653a20596f75206861766520616c7265616479206d696e74656420796f60408201526b757220616c6c6f77616e636560a01b606082015260800190565b60208082526030908201527f53616c653a205468617420776f756c642070757420796f75206f76657220796f60408201526f1d5c881c1c995cd85b19481b1a5b5a5d60821b606082015260800190565b60008282101561283057612830612638565b500390565b60006001820161284757612847612638565b506001019056fea2646970667358221220daab4006676f7d4069d42a0dedfacd5332f61fde828109de78305ad8af062d4864736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a41500000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000629dfa5000000000000000000000000000000000000000000000000000000000629f4bd000000000000000000000000000000000000000000000000000000000629f4bd00000000000000000000000000000000000000000000000000000000062bafb5000000000000000000000000000000000000000000000000000f8b0a10e4700000000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000d25f03bdc4727b43bf09ace9cf25c5dea21d1532000000000000000000000000000000000000000000000000000000000000000200000000000000000000000096b84cd0121f875175e13cc1f2679d674f9e505b000000000000000000000000a91a899ec4b66c1973ee143f50feb0d91f373e54000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000001f40
-----Decoded View---------------
Arg [0] : config (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
22 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 0000000000000000000000000847d1fb2adc3d1c19b233afb7d01a631728a415
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000bb8
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [9] : 00000000000000000000000000000000000000000000000000000000629dfa50
Arg [10] : 00000000000000000000000000000000000000000000000000000000629f4bd0
Arg [11] : 00000000000000000000000000000000000000000000000000000000629f4bd0
Arg [12] : 0000000000000000000000000000000000000000000000000000000062bafb50
Arg [13] : 00000000000000000000000000000000000000000000000000f8b0a10e470000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000bb8
Arg [15] : 000000000000000000000000d25f03bdc4727b43bf09ace9cf25c5dea21d1532
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [17] : 00000000000000000000000096b84cd0121f875175e13cc1f2679d674f9e505b
Arg [18] : 000000000000000000000000a91a899ec4b66c1973ee143f50feb0d91f373e54
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [20] : 00000000000000000000000000000000000000000000000000000000000007d0
Arg [21] : 0000000000000000000000000000000000000000000000000000000000001f40
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.