More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 201 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy Token | 21842125 | 1 hr ago | IN | 0.004 ETH | 0.00012623 | ||||
Buy Token | 21842010 | 1 hr ago | IN | 0 ETH | 0.0001162 | ||||
Buy Token | 21839244 | 10 hrs ago | IN | 0.1 ETH | 0.00031799 | ||||
Buy Token | 21838888 | 12 hrs ago | IN | 0.1 ETH | 0.00085334 | ||||
Buy Token | 21828975 | 45 hrs ago | IN | 0.003 ETH | 0.00012219 | ||||
Buy Token | 21826741 | 2 days ago | IN | 0.271 ETH | 0.00023882 | ||||
Buy Token | 21824660 | 2 days ago | IN | 0.069 ETH | 0.00043948 | ||||
Buy Token | 21823693 | 2 days ago | IN | 0.025 ETH | 0.00051989 | ||||
Buy Token | 21823242 | 2 days ago | IN | 0.002 ETH | 0.00019588 | ||||
Buy Token | 21822274 | 2 days ago | IN | 0.003 ETH | 0.00016716 | ||||
Buy Token | 21821296 | 2 days ago | IN | 0.336 ETH | 0.00017284 | ||||
Buy Token | 21819263 | 3 days ago | IN | 0.27 ETH | 0.00026672 | ||||
Buy Token | 21819041 | 3 days ago | IN | 0.031 ETH | 0.00018061 | ||||
Buy Token | 21818356 | 3 days ago | IN | 0.02 ETH | 0.00014084 | ||||
Buy Token | 21818078 | 3 days ago | IN | 0.019 ETH | 0.00017317 | ||||
Buy Token | 21817883 | 3 days ago | IN | 0.005 ETH | 0.00036418 | ||||
Buy Token | 21814747 | 3 days ago | IN | 0.0013 ETH | 0.00012197 | ||||
Buy Token | 21812744 | 4 days ago | IN | 0.4 ETH | 0.00016058 | ||||
Buy Token | 21812248 | 4 days ago | IN | 0.012 ETH | 0.00021334 | ||||
Buy Token | 21811595 | 4 days ago | IN | 0.001652 ETH | 0.00013259 | ||||
Buy Token | 21811309 | 4 days ago | IN | 0.004 ETH | 0.00016232 | ||||
Buy Token | 21810639 | 4 days ago | IN | 0.48 ETH | 0.00012757 | ||||
Buy Token | 21810551 | 4 days ago | IN | 1 ETH | 0.00012481 | ||||
Buy Token | 21810542 | 4 days ago | IN | 1 ETH | 0.00013175 | ||||
Buy Token | 21810090 | 4 days ago | IN | 0.175 ETH | 0.00013868 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21842125 | 1 hr ago | 0.0038 ETH | ||||
21842125 | 1 hr ago | 0.0002 ETH | ||||
21842010 | 1 hr ago | 0 ETH | ||||
21842010 | 1 hr ago | 0 ETH | ||||
21839244 | 10 hrs ago | 0.095 ETH | ||||
21839244 | 10 hrs ago | 0.005 ETH | ||||
21838888 | 12 hrs ago | 0.095 ETH | ||||
21838888 | 12 hrs ago | 0.005 ETH | ||||
21828975 | 45 hrs ago | 0.00285 ETH | ||||
21828975 | 45 hrs ago | 0.00015 ETH | ||||
21826741 | 2 days ago | 0.25745 ETH | ||||
21826741 | 2 days ago | 0.01355 ETH | ||||
21824660 | 2 days ago | 0.06555 ETH | ||||
21824660 | 2 days ago | 0.00345 ETH | ||||
21823693 | 2 days ago | 0.02375 ETH | ||||
21823693 | 2 days ago | 0.00125 ETH | ||||
21823242 | 2 days ago | 0.0019 ETH | ||||
21823242 | 2 days ago | 0.0001 ETH | ||||
21822274 | 2 days ago | 0.00285 ETH | ||||
21822274 | 2 days ago | 0.00015 ETH | ||||
21821296 | 2 days ago | 0.3192 ETH | ||||
21821296 | 2 days ago | 0.0168 ETH | ||||
21819263 | 3 days ago | 0.2565 ETH | ||||
21819263 | 3 days ago | 0.0135 ETH | ||||
21819041 | 3 days ago | 0.02945 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
KaanchPresale
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; // //░░██╗░░░░░░ ██╗░░██╗░█████╗░░█████╗░███╗░░██╗░█████╗░██╗░░██╗ ░░░░░░██╗░░ //░██╔╝░░░░░░ ██║░██╔╝██╔══██╗██╔══██╗████╗░██║██╔══██╗██║░░██║ ░░░░░░╚██╗░ //██╔╝░█████╗ █████═╝░███████║███████║██╔██╗██║██║░░╚═╝███████║ █████╗░╚██╗ //╚██╗░╚════╝ ██╔═██╗░██╔══██║██╔══██║██║╚████║██║░░██╗██╔══██║ ╚════╝░██╔╝ //░╚██╗░░░░░░ ██║░╚██╗██║░░██║██║░░██║██║░╚███║╚█████╔╝██║░░██║ ░░░░░░██╔╝░ //░░╚═╝░░░░░░ ╚═╝░░╚═╝╚═╝░░╚═╝╚═╝░░╚═╝╚═╝░░╚══╝░╚════╝░╚═╝░░╚═╝ ░░░░░░╚═╝░░ //Kaanch.com //New Layer1 Blockchain with 1.4M TPS, 3600 Node, 0.8 Sec Block Timing & Near Zero Gas Fees /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File @openzeppelin/contracts/access/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; abstract contract Ownable is Context { address private immutable _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev Initializes the contract setting the deployer as the owner. */ constructor(address initialOwner) { require(initialOwner != address(0), "Ownable: Invalid owner address"); _owner = initialOwner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { if (_owner != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 value ) external returns (bool); } // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. */ function functionCall( address target, bytes memory data ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall( address target, bytes memory data ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall( address target, bytes memory data ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult( bool success, bytes memory returndata ) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; /** * @dev An operation with an ERC20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance( address spender, uint256 currentAllowance, uint256 requestedDecrease ); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeCall(token.transferFrom, (from, to, value)) ); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance( IERC20 token, address spender, uint256 requestedDecrease ) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance( spender, currentAllowance, requestedDecrease ); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ function forceApprove( IERC20 token, address spender, uint256 value ) internal { bytes memory approvalCall = abi.encodeCall( token.approve, (spender, value) ); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn( token, abi.encodeCall(token.approve, (spender, 0)) ); _callOptionalReturn(token, approvalCall); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool( IERC20 token, bytes memory data ) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } } pragma solidity ^0.8.0; interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } // Original license: SPDX_License_Identifier: MIT pragma solidity ^0.8.20; contract KaanchPresale is Ownable { using SafeERC20 for IERC20; using SafeERC20 for IERC20Metadata; uint256 public rate; address public saleToken; uint public saleTokenDec; uint256 public totalTokensforSale; mapping(address => bool) public payableTokens; mapping(address => uint256) public tokenPrices; bool public saleStatus; address[] public buyers; mapping(address => bool) public buyersExists; mapping(address => uint256) public buyersAmount; uint256 public totalBuyers; uint256 public totalTokensSold; address public ICO; address public DEV; struct BuyerDetails { address buyer; uint amount; } event BuyToken( address indexed buyer, address indexed token, uint256 paidAmount, uint256 purchasedAmount ); constructor( address _ICO, address _DEV ) Ownable(msg.sender) { saleStatus = false; ICO = _ICO; DEV = _DEV; } modifier saleEnabled() { require(saleStatus == true, "Kaanch: is not enabled"); _; } modifier saleStoped() { require(saleStatus == false, "Kaanch: is not stopped"); _; } function setSaleToken( address _saleToken, uint256 _totalTokensforSale, uint256 _rate, bool _saleStatus ) external onlyOwner { require(_rate != 0); rate = _rate; saleToken = _saleToken; saleStatus = _saleStatus; saleTokenDec = IERC20Metadata(_saleToken).decimals(); totalTokensforSale = _totalTokensforSale; IERC20(_saleToken).safeTransferFrom( msg.sender, address(this), _totalTokensforSale ); } function stopSale() external onlyOwner saleEnabled { saleStatus = false; } function resumeSale() external onlyOwner saleStoped { saleStatus = true; } function addPayableTokens( address[] memory _tokens, uint256[] memory _prices ) external onlyOwner { require( _tokens.length == _prices.length, "Kaanch: tokens & prices arrays length mismatch" ); for (uint256 i = 0; i < _tokens.length; i++) { require(_prices[i] != 0); payableTokens[_tokens[i]] = true; tokenPrices[_tokens[i]] = _prices[i]; } } function payableTokenStatus( address _token, bool _status ) external onlyOwner { require(payableTokens[_token] != _status); payableTokens[_token] = _status; } function updateTokenRate( address[] memory _tokens, uint256[] memory _prices, uint256 _rate ) external onlyOwner { require( _tokens.length == _prices.length, "Kaanch: tokens & prices arrays length mismatch" ); if (_rate != 0) { rate = _rate; } for (uint256 i = 0; i < _tokens.length; i += 1) { require(payableTokens[_tokens[i]] == true); require(_prices[i] != 0); tokenPrices[_tokens[i]] = _prices[i]; } } function getTokenAmount( address token, uint256 amount ) public view returns (uint256) { uint256 amtOut; if (token != address(0)) { require( payableTokens[token] == true, "Kaanch: Token not allowed" ); uint256 price = tokenPrices[token]; amtOut = (amount * (10 ** saleTokenDec)) / (price); } else { amtOut = (amount * (10 ** saleTokenDec)) / (rate); } return amtOut; } function getPayAmount( address token, uint256 amount ) public view returns (uint256) { uint256 amtOut; if (token != address(0)) { require( payableTokens[token] == true, "Kaanch: Token not allowed" ); uint256 price = tokenPrices[token]; amtOut = (amount * (price)) / (10 ** saleTokenDec); } else { amtOut = (amount * (rate)) / (10 ** saleTokenDec); } return amtOut; } function transferETH(uint256 _amount) internal { uint256 DEVAmt = (_amount * 5) / 100; payable(DEV).transfer(DEVAmt); payable(ICO).transfer(_amount - DEVAmt); } function transferToken(address _token, uint256 _amount) internal { uint256 DEVAmt = (_amount * 5) / 100; IERC20(_token).safeTransferFrom( msg.sender, DEV, DEVAmt ); IERC20(_token).safeTransferFrom( msg.sender, ICO, _amount - DEVAmt ); } function buyToken( address _token, uint256 _amount ) external payable saleEnabled { uint256 amount = _token != address(0) ? _amount : msg.value; uint256 saleTokenAmt = getTokenAmount(_token, amount); require(saleTokenAmt != 0, "Kaanch: Amount is 0"); require( (totalTokensSold + saleTokenAmt) < totalTokensforSale, "Kaanch: Not enough tokens to be sold" ); if (_token != address(0)) { transferToken(_token, _amount); } else { transferETH(msg.value); } IERC20(saleToken).safeTransfer(msg.sender, saleTokenAmt); totalTokensSold += saleTokenAmt; if (!buyersExists[msg.sender]) { buyers.push(msg.sender); buyersExists[msg.sender] = true; totalBuyers += 1; } buyersAmount[msg.sender] += saleTokenAmt; emit BuyToken(msg.sender, _token, amount, saleTokenAmt); } function buyersDetailsList( uint _from, uint _to ) external view returns (BuyerDetails[] memory) { require(_from < _to, "Kaanch: _from should be less than _to"); uint to = _to > totalBuyers ? totalBuyers : _to; uint from = _from > totalBuyers ? totalBuyers : _from; BuyerDetails[] memory buyersAmt = new BuyerDetails[](to - from); for (uint i = from; i < to; i += 1) { buyersAmt[i] = BuyerDetails(buyers[i], buyersAmount[buyers[i]]); } return buyersAmt; } function withdrawFunds(address token, uint256 amount) external onlyOwner { if (token == address(0)) { // Withdraw Ether uint256 balance = address(this).balance; require( balance >= amount, "KaanchPresale: Insufficient Ether balance" ); payable(owner()).transfer(amount); } else { // Withdraw ERC20 tokens uint256 balance = IERC20(token).balanceOf(address(this)); require( balance >= amount, "KaanchPresale: Insufficient token balance" ); IERC20(token).safeTransfer(owner(), amount); } } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "remappings": [] }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_ICO","type":"address"},{"internalType":"address","name":"_DEV","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"paidAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"purchasedAmount","type":"uint256"}],"name":"BuyToken","type":"event"},{"inputs":[],"name":"DEV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ICO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"}],"name":"addPayableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyersAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"buyersDetailsList","outputs":[{"components":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct KaanchPresale.BuyerDetails[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyersExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPayAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"payableTokenStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payableTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resumeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"uint256","name":"_totalTokensforSale","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"bool","name":"_saleStatus","type":"bool"}],"name":"setSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensforSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561000f575f80fd5b506040516133e73803806133e7833981810160405281019061003191906101d3565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100979061026b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505f60065f6101000a81548160ff02191690831515021790555081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610289565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101a282610179565b9050919050565b6101b281610198565b81146101bc575f80fd5b50565b5f815190506101cd816101a9565b92915050565b5f80604083850312156101e9576101e8610175565b5b5f6101f6858286016101bf565b9250506020610207858286016101bf565b9150509250929050565b5f82825260208201905092915050565b7f4f776e61626c653a20496e76616c6964206f776e6572206164647265737300005f82015250565b5f610255601e83610211565b915061026082610221565b602082019050919050565b5f6020820190508181035f83015261028281610249565b9050919050565b6080516131156102d25f395f81816107d80152818161092b01528181610b4e01528181610c5c01528181610e1a01528181611600015281816117cd0152611a5101526131155ff3fe608060405260043610610180575f3560e01c80636bcedf9c116100d0578063ba41b21011610089578063e36b0b3711610063578063e36b0b3714610572578063e985e36714610588578063f2aa8218146105b2578063f9020e33146105ee57610180565b8063ba41b210146104e4578063c107532914610520578063c1eb5ddd1461054857610180565b80636bcedf9c146103b257806376ca67a5146103dc57806380655eef146104185780638da5cb5b146104545780639344f5c11461047e578063ace1741c146104ba57610180565b806333e364cb1161013d5780635413c1c8116101175780635413c1c81461030857806354a9f1021461033057806363b201171461036c57806368f8fc101461039657610180565b806333e364cb146102a05780633874e325146102b65780633abd0136146102de57610180565b8063115ece4c14610184578063204120bc146101c0578063273ba6bb146101fc57806329d429a8146102265780632c4e722e1461024e5780633115329e14610278575b5f80fd5b34801561018f575f80fd5b506101aa60048036038101906101a59190612186565b610618565b6040516101b791906121d3565b60405180910390f35b3480156101cb575f80fd5b506101e660048036038101906101e191906121ec565b61077e565b6040516101f391906121d3565b60405180910390f35b348015610207575f80fd5b50610210610793565b60405161021d9190612226565b60405180910390f35b348015610231575f80fd5b5061024c60048036038101906102479190612274565b6107b8565b005b348015610259575f80fd5b50610262610906565b60405161026f91906121d3565b60405180910390f35b348015610283575f80fd5b5061029e600480360381019061029991906124c2565b61090b565b005b3480156102ab575f80fd5b506102b4610b2e565b005b3480156102c1575f80fd5b506102dc60048036038101906102d7919061254a565b610c3c565b005b3480156102e9575f80fd5b506102f2610df4565b6040516102ff91906121d3565b60405180910390f35b348015610313575f80fd5b5061032e600480360381019061032991906125ae565b610dfa565b005b34801561033b575f80fd5b50610356600480360381019061035191906121ec565b611003565b60405161036391906121d3565b60405180910390f35b348015610377575f80fd5b50610380611018565b60405161038d91906121d3565b60405180910390f35b6103b060048036038101906103ab9190612186565b61101e565b005b3480156103bd575f80fd5b506103c66113de565b6040516103d391906121d3565b60405180910390f35b3480156103e7575f80fd5b5061040260048036038101906103fd9190612624565b6113e4565b60405161040f9190612755565b60405180910390f35b348015610423575f80fd5b5061043e600480360381019061043991906121ec565b6115e0565b60405161044b9190612784565b60405180910390f35b34801561045f575f80fd5b506104686115fd565b6040516104759190612226565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f9190612186565b611624565b6040516104b191906121d3565b60405180910390f35b3480156104c5575f80fd5b506104ce61178a565b6040516104db91906121d3565b60405180910390f35b3480156104ef575f80fd5b5061050a600480360381019061050591906121ec565b611790565b6040516105179190612784565b60405180910390f35b34801561052b575f80fd5b5061054660048036038101906105419190612186565b6117ad565b005b348015610553575f80fd5b5061055c611a0c565b6040516105699190612226565b60405180910390f35b34801561057d575f80fd5b50610586611a31565b005b348015610593575f80fd5b5061059c611b3f565b6040516105a99190612226565b60405180910390f35b3480156105bd575f80fd5b506105d860048036038101906105d3919061279d565b611b64565b6040516105e59190612226565b60405180910390f35b3480156105f9575f80fd5b50610602611b9f565b60405161060f9190612784565b60405180910390f35b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461074b576001151560045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146106dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d490612822565b60405180910390fd5b5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905080600254600a61072e919061299c565b8561073991906129e6565b6107439190612a54565b915050610774565b5f54600254600a61075c919061299c565b8461076791906129e6565b6107719190612a54565b90505b8091505092915050565b6005602052805f5260405f205f915090505481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107c0611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146108565761081a611bb1565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161084d9190612226565b60405180910390fd5b80151560045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036108ae575f80fd5b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f5481565b610913611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109a95761096d611bb1565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109a09190612226565b60405180910390fd5b81518351146109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612af4565b60405180910390fd5b5f81146109fb57805f819055505b5f5b8351811015610b28576001151560045f868481518110610a2057610a1f612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514610a79575f80fd5b5f838281518110610a8d57610a8c612b12565b5b602002602001015103610a9e575f80fd5b828181518110610ab157610ab0612b12565b5b602002602001015160055f868481518110610acf57610ace612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600181610b219190612b3f565b90506109fd565b50505050565b610b36611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610bcc57610b90611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610bc39190612226565b60405180910390fd5b5f151560065f9054906101000a900460ff16151514610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790612bbc565b60405180910390fd5b600160065f6101000a81548160ff021916908315150217905550565b610c44611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cda57610c9e611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610cd19190612226565b60405180910390fd5b5f8203610ce5575f80fd5b815f819055508360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db19190612c10565b60ff1660028190555082600381905550610dee3330858773ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b50505050565b600a5481565b610e02611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610e9857610e5c611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e8f9190612226565b60405180910390fd5b8051825114610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390612af4565b60405180910390fd5b5f5b8251811015610ffe575f828281518110610efb57610efa612b12565b5b602002602001015103610f0c575f80fd5b600160045f858481518110610f2457610f23612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550818181518110610f8e57610f8d612b12565b5b602002602001015160055f858481518110610fac57610fab612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508080600101915050610ede565b505050565b6009602052805f5260405f205f915090505481565b600b5481565b6001151560065f9054906101000a900460ff16151514611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90612c85565b60405180910390fd5b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110ad57346110af565b815b90505f6110bc8483610618565b90505f8103611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790612ced565b60405180910390fd5b60035481600b546111119190612b3f565b10611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612d7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111935761118e8484611c3a565b61119d565b61119c34611d02565b5b6111e9338260015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611df79092919063ffffffff16565b80600b5f8282546111fa9190612b3f565b9250508190555060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661131e57600733908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f8282546113169190612b3f565b925050819055505b8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461136a9190612b3f565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167facf531ec465d633652ed6f0179042e0f5105d16b2eb45652517eb8f96e3d199784846040516113d0929190612d99565b60405180910390a350505050565b60035481565b6060818310611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90612e30565b60405180910390fd5b5f600a548311611438578261143c565b600a545b90505f600a54851161144e5784611452565b600a545b90505f81836114619190612e4e565b67ffffffffffffffff81111561147a576114796122c6565b5b6040519080825280602002602001820160405280156114b357816020015b6114a06120ba565b8152602001906001900390816114985790505b5090505f8290505b838110156115d3576040518060400160405280600783815481106114e2576114e1612b12565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160095f6007858154811061153c5761153b612b12565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548152508282815181106115b4576115b3612b12565b5b60200260200101819052506001816115cc9190612b3f565b90506114bb565b5080935050505092915050565b6004602052805f5260405f205f915054906101000a900460ff1681565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611757576001151560045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090612822565b60405180910390fd5b5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050600254600a611739919061299c565b818561174591906129e6565b61174f9190612a54565b915050611780565b600254600a611766919061299c565b5f548461177391906129e6565b61177d9190612a54565b90505b8091505092915050565b60025481565b6008602052805f5260405f205f915054906101000a900460ff1681565b6117b5611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461184b5761180f611bb1565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118429190612226565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611916575f479050818110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90612ef1565b60405180910390fd5b6118cd6115fd565b73ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505015801561190f573d5f803e3d5ffd5b5050611a08565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119509190612226565b602060405180830381865afa15801561196b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198f9190612f23565b9050818110156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90612fbe565b60405180910390fd5b611a066119df6115fd565b838573ffffffffffffffffffffffffffffffffffffffff16611df79092919063ffffffff16565b505b5050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a39611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611acf57611a93611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611ac69190612226565b60405180910390fd5b6001151560065f9054906101000a900460ff16151514611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90612c85565b60405180910390fd5b5f60065f6101000a81548160ff021916908315150217905550565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60078181548110611b73575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900460ff1681565b5f33905090565b611c34848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611bed93929190612fdc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e76565b50505050565b5f6064600583611c4a91906129e6565b611c549190612a54565b9050611ca433600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838673ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b611cfd33600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168385611cd69190612e4e565b8673ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b505050565b5f6064600583611d1291906129e6565b611d1c9190612a54565b9050600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611d82573d5f803e3d5ffd5b50600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8284611dca9190612e4e565b90811502906040515f60405180830381858888f19350505050158015611df2573d5f803e3d5ffd5b505050565b611e71838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401611e2a929190613011565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e76565b505050565b5f611ea0828473ffffffffffffffffffffffffffffffffffffffff16611f0b90919063ffffffff16565b90505f815114158015611ec4575080806020019051810190611ec2919061304c565b155b15611f0657826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611efd9190612226565b60405180910390fd5b505050565b6060611f1883835f611f20565b905092915050565b606081471015611f6757306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401611f5e9190612226565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051611f8f91906130c9565b5f6040518083038185875af1925050503d805f8114611fc9576040519150601f19603f3d011682016040523d82523d5f602084013e611fce565b606091505b5091509150611fde868383611fe9565b925050509392505050565b606082611ffe57611ff982612076565b61206e565b5f825114801561202457505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561206657836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161205d9190612226565b60405180910390fd5b81905061206f565b5b9392505050565b5f815111156120885780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612122826120f9565b9050919050565b61213281612118565b811461213c575f80fd5b50565b5f8135905061214d81612129565b92915050565b5f819050919050565b61216581612153565b811461216f575f80fd5b50565b5f813590506121808161215c565b92915050565b5f806040838503121561219c5761219b6120f1565b5b5f6121a98582860161213f565b92505060206121ba85828601612172565b9150509250929050565b6121cd81612153565b82525050565b5f6020820190506121e65f8301846121c4565b92915050565b5f60208284031215612201576122006120f1565b5b5f61220e8482850161213f565b91505092915050565b61222081612118565b82525050565b5f6020820190506122395f830184612217565b92915050565b5f8115159050919050565b6122538161223f565b811461225d575f80fd5b50565b5f8135905061226e8161224a565b92915050565b5f806040838503121561228a576122896120f1565b5b5f6122978582860161213f565b92505060206122a885828601612260565b9150509250929050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6122fc826122b6565b810181811067ffffffffffffffff8211171561231b5761231a6122c6565b5b80604052505050565b5f61232d6120e8565b905061233982826122f3565b919050565b5f67ffffffffffffffff821115612358576123576122c6565b5b602082029050602081019050919050565b5f80fd5b5f61237f61237a8461233e565b612324565b905080838252602082019050602084028301858111156123a2576123a1612369565b5b835b818110156123cb57806123b7888261213f565b8452602084019350506020810190506123a4565b5050509392505050565b5f82601f8301126123e9576123e86122b2565b5b81356123f984826020860161236d565b91505092915050565b5f67ffffffffffffffff82111561241c5761241b6122c6565b5b602082029050602081019050919050565b5f61243f61243a84612402565b612324565b9050808382526020820190506020840283018581111561246257612461612369565b5b835b8181101561248b57806124778882612172565b845260208401935050602081019050612464565b5050509392505050565b5f82601f8301126124a9576124a86122b2565b5b81356124b984826020860161242d565b91505092915050565b5f805f606084860312156124d9576124d86120f1565b5b5f84013567ffffffffffffffff8111156124f6576124f56120f5565b5b612502868287016123d5565b935050602084013567ffffffffffffffff811115612523576125226120f5565b5b61252f86828701612495565b925050604061254086828701612172565b9150509250925092565b5f805f8060808587031215612562576125616120f1565b5b5f61256f8782880161213f565b945050602061258087828801612172565b935050604061259187828801612172565b92505060606125a287828801612260565b91505092959194509250565b5f80604083850312156125c4576125c36120f1565b5b5f83013567ffffffffffffffff8111156125e1576125e06120f5565b5b6125ed858286016123d5565b925050602083013567ffffffffffffffff81111561260e5761260d6120f5565b5b61261a85828601612495565b9150509250929050565b5f806040838503121561263a576126396120f1565b5b5f61264785828601612172565b925050602061265885828601612172565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61269481612118565b82525050565b6126a381612153565b82525050565b604082015f8201516126bd5f85018261268b565b5060208201516126d0602085018261269a565b50505050565b5f6126e183836126a9565b60408301905092915050565b5f602082019050919050565b5f61270382612662565b61270d818561266c565b93506127188361267c565b805f5b8381101561274857815161272f88826126d6565b975061273a836126ed565b92505060018101905061271b565b5085935050505092915050565b5f6020820190508181035f83015261276d81846126f9565b905092915050565b61277e8161223f565b82525050565b5f6020820190506127975f830184612775565b92915050565b5f602082840312156127b2576127b16120f1565b5b5f6127bf84828501612172565b91505092915050565b5f82825260208201905092915050565b7f4b61616e63683a20546f6b656e206e6f7420616c6c6f776564000000000000005f82015250565b5f61280c6019836127c8565b9150612817826127d8565b602082019050919050565b5f6020820190508181035f83015261283981612800565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156128c25780860481111561289e5761289d612840565b5b60018516156128ad5780820291505b80810290506128bb8561286d565b9450612882565b94509492505050565b5f826128da5760019050612995565b816128e7575f9050612995565b81600181146128fd576002811461290757612936565b6001915050612995565b60ff84111561291957612918612840565b5b8360020a9150848211156129305761292f612840565b5b50612995565b5060208310610133831016604e8410600b841016171561296b5782820a90508381111561296657612965612840565b5b612995565b6129788484846001612879565b9250905081840481111561298f5761298e612840565b5b81810290505b9392505050565b5f6129a682612153565b91506129b183612153565b92506129de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846128cb565b905092915050565b5f6129f082612153565b91506129fb83612153565b9250828202612a0981612153565b91508282048414831517612a2057612a1f612840565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a5e82612153565b9150612a6983612153565b925082612a7957612a78612a27565b5b828204905092915050565b7f4b61616e63683a20746f6b656e7320262070726963657320617272617973206c5f8201527f656e677468206d69736d61746368000000000000000000000000000000000000602082015250565b5f612ade602e836127c8565b9150612ae982612a84565b604082019050919050565b5f6020820190508181035f830152612b0b81612ad2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612b4982612153565b9150612b5483612153565b9250828201905080821115612b6c57612b6b612840565b5b92915050565b7f4b61616e63683a206973206e6f742073746f70706564000000000000000000005f82015250565b5f612ba66016836127c8565b9150612bb182612b72565b602082019050919050565b5f6020820190508181035f830152612bd381612b9a565b9050919050565b5f60ff82169050919050565b612bef81612bda565b8114612bf9575f80fd5b50565b5f81519050612c0a81612be6565b92915050565b5f60208284031215612c2557612c246120f1565b5b5f612c3284828501612bfc565b91505092915050565b7f4b61616e63683a206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f612c6f6016836127c8565b9150612c7a82612c3b565b602082019050919050565b5f6020820190508181035f830152612c9c81612c63565b9050919050565b7f4b61616e63683a20416d6f756e742069732030000000000000000000000000005f82015250565b5f612cd76013836127c8565b9150612ce282612ca3565b602082019050919050565b5f6020820190508181035f830152612d0481612ccb565b9050919050565b7f4b61616e63683a204e6f7420656e6f75676820746f6b656e7320746f206265205f8201527f736f6c6400000000000000000000000000000000000000000000000000000000602082015250565b5f612d656024836127c8565b9150612d7082612d0b565b604082019050919050565b5f6020820190508181035f830152612d9281612d59565b9050919050565b5f604082019050612dac5f8301856121c4565b612db960208301846121c4565b9392505050565b7f4b61616e63683a205f66726f6d2073686f756c64206265206c657373207468615f8201527f6e205f746f000000000000000000000000000000000000000000000000000000602082015250565b5f612e1a6025836127c8565b9150612e2582612dc0565b604082019050919050565b5f6020820190508181035f830152612e4781612e0e565b9050919050565b5f612e5882612153565b9150612e6383612153565b9250828203905081811115612e7b57612e7a612840565b5b92915050565b7f4b61616e636850726573616c653a20496e73756666696369656e7420457468655f8201527f722062616c616e63650000000000000000000000000000000000000000000000602082015250565b5f612edb6029836127c8565b9150612ee682612e81565b604082019050919050565b5f6020820190508181035f830152612f0881612ecf565b9050919050565b5f81519050612f1d8161215c565b92915050565b5f60208284031215612f3857612f376120f1565b5b5f612f4584828501612f0f565b91505092915050565b7f4b61616e636850726573616c653a20496e73756666696369656e7420746f6b655f8201527f6e2062616c616e63650000000000000000000000000000000000000000000000602082015250565b5f612fa86029836127c8565b9150612fb382612f4e565b604082019050919050565b5f6020820190508181035f830152612fd581612f9c565b9050919050565b5f606082019050612fef5f830186612217565b612ffc6020830185612217565b61300960408301846121c4565b949350505050565b5f6040820190506130245f830185612217565b61303160208301846121c4565b9392505050565b5f815190506130468161224a565b92915050565b5f60208284031215613061576130606120f1565b5b5f61306e84828501613038565b91505092915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6130a382613077565b6130ad8185613081565b93506130bd81856020860161308b565b80840191505092915050565b5f6130d48284613099565b91508190509291505056fea264697066735822122067a409cb5e4a1f5476a34ce88ce016dfc65d6a595decb6de3d299565ee0fd86964736f6c634300081a0033000000000000000000000000f7777747b4ee21805a4505599376757de72b75ec000000000000000000000000d79fda6832a764aed9a090261950606d66f77777
Deployed Bytecode
0x608060405260043610610180575f3560e01c80636bcedf9c116100d0578063ba41b21011610089578063e36b0b3711610063578063e36b0b3714610572578063e985e36714610588578063f2aa8218146105b2578063f9020e33146105ee57610180565b8063ba41b210146104e4578063c107532914610520578063c1eb5ddd1461054857610180565b80636bcedf9c146103b257806376ca67a5146103dc57806380655eef146104185780638da5cb5b146104545780639344f5c11461047e578063ace1741c146104ba57610180565b806333e364cb1161013d5780635413c1c8116101175780635413c1c81461030857806354a9f1021461033057806363b201171461036c57806368f8fc101461039657610180565b806333e364cb146102a05780633874e325146102b65780633abd0136146102de57610180565b8063115ece4c14610184578063204120bc146101c0578063273ba6bb146101fc57806329d429a8146102265780632c4e722e1461024e5780633115329e14610278575b5f80fd5b34801561018f575f80fd5b506101aa60048036038101906101a59190612186565b610618565b6040516101b791906121d3565b60405180910390f35b3480156101cb575f80fd5b506101e660048036038101906101e191906121ec565b61077e565b6040516101f391906121d3565b60405180910390f35b348015610207575f80fd5b50610210610793565b60405161021d9190612226565b60405180910390f35b348015610231575f80fd5b5061024c60048036038101906102479190612274565b6107b8565b005b348015610259575f80fd5b50610262610906565b60405161026f91906121d3565b60405180910390f35b348015610283575f80fd5b5061029e600480360381019061029991906124c2565b61090b565b005b3480156102ab575f80fd5b506102b4610b2e565b005b3480156102c1575f80fd5b506102dc60048036038101906102d7919061254a565b610c3c565b005b3480156102e9575f80fd5b506102f2610df4565b6040516102ff91906121d3565b60405180910390f35b348015610313575f80fd5b5061032e600480360381019061032991906125ae565b610dfa565b005b34801561033b575f80fd5b50610356600480360381019061035191906121ec565b611003565b60405161036391906121d3565b60405180910390f35b348015610377575f80fd5b50610380611018565b60405161038d91906121d3565b60405180910390f35b6103b060048036038101906103ab9190612186565b61101e565b005b3480156103bd575f80fd5b506103c66113de565b6040516103d391906121d3565b60405180910390f35b3480156103e7575f80fd5b5061040260048036038101906103fd9190612624565b6113e4565b60405161040f9190612755565b60405180910390f35b348015610423575f80fd5b5061043e600480360381019061043991906121ec565b6115e0565b60405161044b9190612784565b60405180910390f35b34801561045f575f80fd5b506104686115fd565b6040516104759190612226565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f9190612186565b611624565b6040516104b191906121d3565b60405180910390f35b3480156104c5575f80fd5b506104ce61178a565b6040516104db91906121d3565b60405180910390f35b3480156104ef575f80fd5b5061050a600480360381019061050591906121ec565b611790565b6040516105179190612784565b60405180910390f35b34801561052b575f80fd5b5061054660048036038101906105419190612186565b6117ad565b005b348015610553575f80fd5b5061055c611a0c565b6040516105699190612226565b60405180910390f35b34801561057d575f80fd5b50610586611a31565b005b348015610593575f80fd5b5061059c611b3f565b6040516105a99190612226565b60405180910390f35b3480156105bd575f80fd5b506105d860048036038101906105d3919061279d565b611b64565b6040516105e59190612226565b60405180910390f35b3480156105f9575f80fd5b50610602611b9f565b60405161060f9190612784565b60405180910390f35b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461074b576001151560045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146106dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d490612822565b60405180910390fd5b5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905080600254600a61072e919061299c565b8561073991906129e6565b6107439190612a54565b915050610774565b5f54600254600a61075c919061299c565b8461076791906129e6565b6107719190612a54565b90505b8091505092915050565b6005602052805f5260405f205f915090505481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107c0611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000059202e0ac77cbc5cfb4668f4fd32d43bbf0b2d6073ffffffffffffffffffffffffffffffffffffffff16146108565761081a611bb1565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161084d9190612226565b60405180910390fd5b80151560045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036108ae575f80fd5b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f5481565b610913611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000059202e0ac77cbc5cfb4668f4fd32d43bbf0b2d6073ffffffffffffffffffffffffffffffffffffffff16146109a95761096d611bb1565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109a09190612226565b60405180910390fd5b81518351146109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612af4565b60405180910390fd5b5f81146109fb57805f819055505b5f5b8351811015610b28576001151560045f868481518110610a2057610a1f612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514610a79575f80fd5b5f838281518110610a8d57610a8c612b12565b5b602002602001015103610a9e575f80fd5b828181518110610ab157610ab0612b12565b5b602002602001015160055f868481518110610acf57610ace612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600181610b219190612b3f565b90506109fd565b50505050565b610b36611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000059202e0ac77cbc5cfb4668f4fd32d43bbf0b2d6073ffffffffffffffffffffffffffffffffffffffff1614610bcc57610b90611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610bc39190612226565b60405180910390fd5b5f151560065f9054906101000a900460ff16151514610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790612bbc565b60405180910390fd5b600160065f6101000a81548160ff021916908315150217905550565b610c44611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000059202e0ac77cbc5cfb4668f4fd32d43bbf0b2d6073ffffffffffffffffffffffffffffffffffffffff1614610cda57610c9e611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610cd19190612226565b60405180910390fd5b5f8203610ce5575f80fd5b815f819055508360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db19190612c10565b60ff1660028190555082600381905550610dee3330858773ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b50505050565b600a5481565b610e02611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000059202e0ac77cbc5cfb4668f4fd32d43bbf0b2d6073ffffffffffffffffffffffffffffffffffffffff1614610e9857610e5c611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e8f9190612226565b60405180910390fd5b8051825114610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390612af4565b60405180910390fd5b5f5b8251811015610ffe575f828281518110610efb57610efa612b12565b5b602002602001015103610f0c575f80fd5b600160045f858481518110610f2457610f23612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550818181518110610f8e57610f8d612b12565b5b602002602001015160055f858481518110610fac57610fab612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508080600101915050610ede565b505050565b6009602052805f5260405f205f915090505481565b600b5481565b6001151560065f9054906101000a900460ff16151514611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90612c85565b60405180910390fd5b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110ad57346110af565b815b90505f6110bc8483610618565b90505f8103611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790612ced565b60405180910390fd5b60035481600b546111119190612b3f565b10611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612d7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111935761118e8484611c3a565b61119d565b61119c34611d02565b5b6111e9338260015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611df79092919063ffffffff16565b80600b5f8282546111fa9190612b3f565b9250508190555060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661131e57600733908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f8282546113169190612b3f565b925050819055505b8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461136a9190612b3f565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167facf531ec465d633652ed6f0179042e0f5105d16b2eb45652517eb8f96e3d199784846040516113d0929190612d99565b60405180910390a350505050565b60035481565b6060818310611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90612e30565b60405180910390fd5b5f600a548311611438578261143c565b600a545b90505f600a54851161144e5784611452565b600a545b90505f81836114619190612e4e565b67ffffffffffffffff81111561147a576114796122c6565b5b6040519080825280602002602001820160405280156114b357816020015b6114a06120ba565b8152602001906001900390816114985790505b5090505f8290505b838110156115d3576040518060400160405280600783815481106114e2576114e1612b12565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160095f6007858154811061153c5761153b612b12565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548152508282815181106115b4576115b3612b12565b5b60200260200101819052506001816115cc9190612b3f565b90506114bb565b5080935050505092915050565b6004602052805f5260405f205f915054906101000a900460ff1681565b5f7f00000000000000000000000059202e0ac77cbc5cfb4668f4fd32d43bbf0b2d60905090565b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611757576001151560045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090612822565b60405180910390fd5b5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050600254600a611739919061299c565b818561174591906129e6565b61174f9190612a54565b915050611780565b600254600a611766919061299c565b5f548461177391906129e6565b61177d9190612a54565b90505b8091505092915050565b60025481565b6008602052805f5260405f205f915054906101000a900460ff1681565b6117b5611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000059202e0ac77cbc5cfb4668f4fd32d43bbf0b2d6073ffffffffffffffffffffffffffffffffffffffff161461184b5761180f611bb1565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118429190612226565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611916575f479050818110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90612ef1565b60405180910390fd5b6118cd6115fd565b73ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505015801561190f573d5f803e3d5ffd5b5050611a08565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119509190612226565b602060405180830381865afa15801561196b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198f9190612f23565b9050818110156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90612fbe565b60405180910390fd5b611a066119df6115fd565b838573ffffffffffffffffffffffffffffffffffffffff16611df79092919063ffffffff16565b505b5050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a39611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000059202e0ac77cbc5cfb4668f4fd32d43bbf0b2d6073ffffffffffffffffffffffffffffffffffffffff1614611acf57611a93611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611ac69190612226565b60405180910390fd5b6001151560065f9054906101000a900460ff16151514611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90612c85565b60405180910390fd5b5f60065f6101000a81548160ff021916908315150217905550565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60078181548110611b73575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900460ff1681565b5f33905090565b611c34848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611bed93929190612fdc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e76565b50505050565b5f6064600583611c4a91906129e6565b611c549190612a54565b9050611ca433600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838673ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b611cfd33600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168385611cd69190612e4e565b8673ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b505050565b5f6064600583611d1291906129e6565b611d1c9190612a54565b9050600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611d82573d5f803e3d5ffd5b50600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8284611dca9190612e4e565b90811502906040515f60405180830381858888f19350505050158015611df2573d5f803e3d5ffd5b505050565b611e71838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401611e2a929190613011565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e76565b505050565b5f611ea0828473ffffffffffffffffffffffffffffffffffffffff16611f0b90919063ffffffff16565b90505f815114158015611ec4575080806020019051810190611ec2919061304c565b155b15611f0657826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611efd9190612226565b60405180910390fd5b505050565b6060611f1883835f611f20565b905092915050565b606081471015611f6757306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401611f5e9190612226565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051611f8f91906130c9565b5f6040518083038185875af1925050503d805f8114611fc9576040519150601f19603f3d011682016040523d82523d5f602084013e611fce565b606091505b5091509150611fde868383611fe9565b925050509392505050565b606082611ffe57611ff982612076565b61206e565b5f825114801561202457505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561206657836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161205d9190612226565b60405180910390fd5b81905061206f565b5b9392505050565b5f815111156120885780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612122826120f9565b9050919050565b61213281612118565b811461213c575f80fd5b50565b5f8135905061214d81612129565b92915050565b5f819050919050565b61216581612153565b811461216f575f80fd5b50565b5f813590506121808161215c565b92915050565b5f806040838503121561219c5761219b6120f1565b5b5f6121a98582860161213f565b92505060206121ba85828601612172565b9150509250929050565b6121cd81612153565b82525050565b5f6020820190506121e65f8301846121c4565b92915050565b5f60208284031215612201576122006120f1565b5b5f61220e8482850161213f565b91505092915050565b61222081612118565b82525050565b5f6020820190506122395f830184612217565b92915050565b5f8115159050919050565b6122538161223f565b811461225d575f80fd5b50565b5f8135905061226e8161224a565b92915050565b5f806040838503121561228a576122896120f1565b5b5f6122978582860161213f565b92505060206122a885828601612260565b9150509250929050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6122fc826122b6565b810181811067ffffffffffffffff8211171561231b5761231a6122c6565b5b80604052505050565b5f61232d6120e8565b905061233982826122f3565b919050565b5f67ffffffffffffffff821115612358576123576122c6565b5b602082029050602081019050919050565b5f80fd5b5f61237f61237a8461233e565b612324565b905080838252602082019050602084028301858111156123a2576123a1612369565b5b835b818110156123cb57806123b7888261213f565b8452602084019350506020810190506123a4565b5050509392505050565b5f82601f8301126123e9576123e86122b2565b5b81356123f984826020860161236d565b91505092915050565b5f67ffffffffffffffff82111561241c5761241b6122c6565b5b602082029050602081019050919050565b5f61243f61243a84612402565b612324565b9050808382526020820190506020840283018581111561246257612461612369565b5b835b8181101561248b57806124778882612172565b845260208401935050602081019050612464565b5050509392505050565b5f82601f8301126124a9576124a86122b2565b5b81356124b984826020860161242d565b91505092915050565b5f805f606084860312156124d9576124d86120f1565b5b5f84013567ffffffffffffffff8111156124f6576124f56120f5565b5b612502868287016123d5565b935050602084013567ffffffffffffffff811115612523576125226120f5565b5b61252f86828701612495565b925050604061254086828701612172565b9150509250925092565b5f805f8060808587031215612562576125616120f1565b5b5f61256f8782880161213f565b945050602061258087828801612172565b935050604061259187828801612172565b92505060606125a287828801612260565b91505092959194509250565b5f80604083850312156125c4576125c36120f1565b5b5f83013567ffffffffffffffff8111156125e1576125e06120f5565b5b6125ed858286016123d5565b925050602083013567ffffffffffffffff81111561260e5761260d6120f5565b5b61261a85828601612495565b9150509250929050565b5f806040838503121561263a576126396120f1565b5b5f61264785828601612172565b925050602061265885828601612172565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61269481612118565b82525050565b6126a381612153565b82525050565b604082015f8201516126bd5f85018261268b565b5060208201516126d0602085018261269a565b50505050565b5f6126e183836126a9565b60408301905092915050565b5f602082019050919050565b5f61270382612662565b61270d818561266c565b93506127188361267c565b805f5b8381101561274857815161272f88826126d6565b975061273a836126ed565b92505060018101905061271b565b5085935050505092915050565b5f6020820190508181035f83015261276d81846126f9565b905092915050565b61277e8161223f565b82525050565b5f6020820190506127975f830184612775565b92915050565b5f602082840312156127b2576127b16120f1565b5b5f6127bf84828501612172565b91505092915050565b5f82825260208201905092915050565b7f4b61616e63683a20546f6b656e206e6f7420616c6c6f776564000000000000005f82015250565b5f61280c6019836127c8565b9150612817826127d8565b602082019050919050565b5f6020820190508181035f83015261283981612800565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156128c25780860481111561289e5761289d612840565b5b60018516156128ad5780820291505b80810290506128bb8561286d565b9450612882565b94509492505050565b5f826128da5760019050612995565b816128e7575f9050612995565b81600181146128fd576002811461290757612936565b6001915050612995565b60ff84111561291957612918612840565b5b8360020a9150848211156129305761292f612840565b5b50612995565b5060208310610133831016604e8410600b841016171561296b5782820a90508381111561296657612965612840565b5b612995565b6129788484846001612879565b9250905081840481111561298f5761298e612840565b5b81810290505b9392505050565b5f6129a682612153565b91506129b183612153565b92506129de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846128cb565b905092915050565b5f6129f082612153565b91506129fb83612153565b9250828202612a0981612153565b91508282048414831517612a2057612a1f612840565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a5e82612153565b9150612a6983612153565b925082612a7957612a78612a27565b5b828204905092915050565b7f4b61616e63683a20746f6b656e7320262070726963657320617272617973206c5f8201527f656e677468206d69736d61746368000000000000000000000000000000000000602082015250565b5f612ade602e836127c8565b9150612ae982612a84565b604082019050919050565b5f6020820190508181035f830152612b0b81612ad2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612b4982612153565b9150612b5483612153565b9250828201905080821115612b6c57612b6b612840565b5b92915050565b7f4b61616e63683a206973206e6f742073746f70706564000000000000000000005f82015250565b5f612ba66016836127c8565b9150612bb182612b72565b602082019050919050565b5f6020820190508181035f830152612bd381612b9a565b9050919050565b5f60ff82169050919050565b612bef81612bda565b8114612bf9575f80fd5b50565b5f81519050612c0a81612be6565b92915050565b5f60208284031215612c2557612c246120f1565b5b5f612c3284828501612bfc565b91505092915050565b7f4b61616e63683a206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f612c6f6016836127c8565b9150612c7a82612c3b565b602082019050919050565b5f6020820190508181035f830152612c9c81612c63565b9050919050565b7f4b61616e63683a20416d6f756e742069732030000000000000000000000000005f82015250565b5f612cd76013836127c8565b9150612ce282612ca3565b602082019050919050565b5f6020820190508181035f830152612d0481612ccb565b9050919050565b7f4b61616e63683a204e6f7420656e6f75676820746f6b656e7320746f206265205f8201527f736f6c6400000000000000000000000000000000000000000000000000000000602082015250565b5f612d656024836127c8565b9150612d7082612d0b565b604082019050919050565b5f6020820190508181035f830152612d9281612d59565b9050919050565b5f604082019050612dac5f8301856121c4565b612db960208301846121c4565b9392505050565b7f4b61616e63683a205f66726f6d2073686f756c64206265206c657373207468615f8201527f6e205f746f000000000000000000000000000000000000000000000000000000602082015250565b5f612e1a6025836127c8565b9150612e2582612dc0565b604082019050919050565b5f6020820190508181035f830152612e4781612e0e565b9050919050565b5f612e5882612153565b9150612e6383612153565b9250828203905081811115612e7b57612e7a612840565b5b92915050565b7f4b61616e636850726573616c653a20496e73756666696369656e7420457468655f8201527f722062616c616e63650000000000000000000000000000000000000000000000602082015250565b5f612edb6029836127c8565b9150612ee682612e81565b604082019050919050565b5f6020820190508181035f830152612f0881612ecf565b9050919050565b5f81519050612f1d8161215c565b92915050565b5f60208284031215612f3857612f376120f1565b5b5f612f4584828501612f0f565b91505092915050565b7f4b61616e636850726573616c653a20496e73756666696369656e7420746f6b655f8201527f6e2062616c616e63650000000000000000000000000000000000000000000000602082015250565b5f612fa86029836127c8565b9150612fb382612f4e565b604082019050919050565b5f6020820190508181035f830152612fd581612f9c565b9050919050565b5f606082019050612fef5f830186612217565b612ffc6020830185612217565b61300960408301846121c4565b949350505050565b5f6040820190506130245f830185612217565b61303160208301846121c4565b9392505050565b5f815190506130468161224a565b92915050565b5f60208284031215613061576130606120f1565b5b5f61306e84828501613038565b91505092915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6130a382613077565b6130ad8185613081565b93506130bd81856020860161308b565b80840191505092915050565b5f6130d48284613099565b91508190509291505056fea264697066735822122067a409cb5e4a1f5476a34ce88ce016dfc65d6a595decb6de3d299565ee0fd86964736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f7777747b4ee21805a4505599376757de72b75ec000000000000000000000000d79fda6832a764aed9a090261950606d66f77777
-----Decoded View---------------
Arg [0] : _ICO (address): 0xF7777747B4ee21805A4505599376757De72B75Ec
Arg [1] : _DEV (address): 0xD79fDa6832a764aEd9a090261950606d66F77777
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f7777747b4ee21805a4505599376757de72b75ec
Arg [1] : 000000000000000000000000d79fda6832a764aed9a090261950606d66f77777
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.