More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 81 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy Tokens | 20676759 | 5 hrs ago | IN | 0.01 ETH | 0.00031571 | ||||
Buy Tokens | 20671656 | 22 hrs ago | IN | 0.004 ETH | 0.00015793 | ||||
Buy Tokens | 20669749 | 29 hrs ago | IN | 0.005 ETH | 0.00017403 | ||||
Buy Tokens | 20666854 | 38 hrs ago | IN | 0.001 ETH | 0.00015305 | ||||
Change Rate | 20656958 | 3 days ago | IN | 0 ETH | 0.00005934 | ||||
Change Rate | 20656955 | 3 days ago | IN | 0 ETH | 0.00004838 | ||||
Buy Tokens | 20641843 | 5 days ago | IN | 0.015 ETH | 0.00045401 | ||||
Buy Tokens | 20631079 | 6 days ago | IN | 0.015 ETH | 0.00012769 | ||||
Buy Tokens | 20623507 | 7 days ago | IN | 0.85655 ETH | 0.00014021 | ||||
Buy Tokens | 20622737 | 7 days ago | IN | 0.001 ETH | 0.00096521 | ||||
Buy Tokens | 20622731 | 7 days ago | IN | 0.001 ETH | 0.00081843 | ||||
Buy Tokens | 20622627 | 7 days ago | IN | 0.001 ETH | 0.0002379 | ||||
Buy Tokens With ... | 20622594 | 7 days ago | IN | 0 ETH | 0.00019733 | ||||
Buy Tokens With ... | 20622576 | 7 days ago | IN | 0 ETH | 0.0002968 | ||||
Buy Tokens | 20622565 | 7 days ago | IN | 0.001 ETH | 0.00025419 | ||||
Change Rate | 20620739 | 8 days ago | IN | 0 ETH | 0.00017733 | ||||
Buy Tokens | 20617610 | 8 days ago | IN | 0.53 ETH | 0.00008533 | ||||
Buy Tokens | 20613213 | 9 days ago | IN | 0.99702 ETH | 0.00029414 | ||||
Buy Tokens | 20612798 | 9 days ago | IN | 0.08 ETH | 0.00027996 | ||||
Buy Tokens | 20611718 | 9 days ago | IN | 0.11 ETH | 0.00065952 | ||||
Buy Tokens With ... | 20607358 | 9 days ago | IN | 0 ETH | 0.00020192 | ||||
Change Rate | 20607001 | 9 days ago | IN | 0 ETH | 0.0000664 | ||||
Buy Tokens | 20602854 | 10 days ago | IN | 0.25 ETH | 0.00011195 | ||||
Buy Tokens | 20599307 | 11 days ago | IN | 0.048 ETH | 0.00031841 | ||||
Buy Tokens With ... | 20598065 | 11 days ago | IN | 0 ETH | 0.0001109 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20676759 | 5 hrs ago | 0.01 ETH | ||||
20671656 | 22 hrs ago | 0.004 ETH | ||||
20669749 | 29 hrs ago | 0.005 ETH | ||||
20666854 | 38 hrs ago | 0.001 ETH | ||||
20641843 | 5 days ago | 0.015 ETH | ||||
20631079 | 6 days ago | 0.015 ETH | ||||
20623507 | 7 days ago | 0.85655 ETH | ||||
20622737 | 7 days ago | 0.001 ETH | ||||
20622731 | 7 days ago | 0.001 ETH | ||||
20622627 | 7 days ago | 0.001 ETH | ||||
20622565 | 7 days ago | 0.001 ETH | ||||
20617610 | 8 days ago | 0.53 ETH | ||||
20613213 | 9 days ago | 0.99702 ETH | ||||
20612798 | 9 days ago | 0.08 ETH | ||||
20611718 | 9 days ago | 0.11 ETH | ||||
20602854 | 10 days ago | 0.25 ETH | ||||
20599307 | 11 days ago | 0.048 ETH | ||||
20595425 | 11 days ago | 0.15 ETH | ||||
20592227 | 12 days ago | 0.06 ETH | ||||
20577708 | 14 days ago | 0.27 ETH | ||||
20577605 | 14 days ago | 0.15 ETH | ||||
20577506 | 14 days ago | 0.07 ETH | ||||
20577495 | 14 days ago | 0.27680452 ETH | ||||
20577448 | 14 days ago | 0.3 ETH | ||||
20574543 | 14 days ago | 0.02 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
JindoPresale
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-07-05 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.24; // Sources flattened with hardhat v2.12.6 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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); } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) /** * @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); } library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) 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(errorMessage); } } } interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } 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, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) // 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; } } } contract ChainlinkPriceOracle { AggregatorV3Interface internal priceFeed; constructor() { // BNB / USD priceFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); } function getLatestPrice() public view returns (int) { ( , int price, , , ) = priceFeed.latestRoundData(); // for BNB / USD price is scaled up by 10 ** 8 return price / 1e8; } } interface AggregatorV3Interface { function latestRoundData() external view returns ( uint80 roundId, int answer, uint startedAt, uint updatedAt, uint80 answeredInRound ); } contract JindoPresale is Ownable { using SafeERC20 for IERC20; using SafeMath for uint256; ChainlinkPriceOracle public priceOracle; //Struct for Buyers struct tokenBuyer{ uint256 tokensBought; } //Mapping for Buyers mapping (address => tokenBuyer) public Customer; // The token being sold IERC20 public immutable token = IERC20(0x1008E4a407FD86644AB52b0bFaDAa41ab2002823); //USDT token address IERC20 public immutable usdt = IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7); //tokens that can be claimed uint256 private claimableTokens; // Address where funds are collected address public wallet = payable(0x6C6D7BD924Bbe8cefe528533E7c1FA61647f99c6); // How many token units a buyer gets per ETH & USDT uint256 public tokenPriceUSD = 332; uint256 public ethDivider = 1000000000; uint256 private usdtRate = 301204819; uint256 private usdtDivider = 100; // Amount of wei raised uint256 private weiRaised; uint256 private usdtRaised; //Amount of tokens sold uint256 private tokensSold; //Presale status bool private hasPresaleStarted; bool private hasPresaleEnded; constructor() { priceOracle = new ChainlinkPriceOracle(); } receive() external payable { buyTokens(); } //START PRESALE function startPresale() public onlyOwner{ hasPresaleStarted = true; } //END PRESALE function endPresale() public onlyOwner{ hasPresaleEnded = true; } // BUY TOKENS WITH ETH function buyTokens() public payable { require(hasPresaleStarted,"Presale not started"); require(!hasPresaleEnded, "Presale has ended"); require(msg.value >= 0.001 ether, "cant buy less with than 0.001 ETH"); uint256 weiAmount = msg.value; //uint256 tokens = weiAmount * ethRate; // Get the ETH price from the ChainlinkPriceOracle int256 ethPrice = priceOracle.getLatestPrice(); require(ethPrice > 0, "Invalid ETH price"); uint256 tokens = weiAmount.mul(uint256(ethPrice)).mul(ethDivider).div(tokenPriceUSD); require(claimableTokens >= tokens, "Not enough tokens availible"); weiRaised += weiAmount; Customer[msg.sender].tokensBought += tokens; tokensSold += tokens; claimableTokens -= tokens; (bool callSuccess, ) = payable(wallet).call{value: msg.value}(""); require(callSuccess, "Call failed"); } //BUY TOKENS WITH USDT function buyTokensWithUSDT(uint256 amount) public { require(hasPresaleStarted,"Presale not started"); require(!hasPresaleEnded, "Presale has ended"); require(amount >= 1 * 10 ** 6, "cant buy less with than 1 USDT"); uint256 weiAmount = amount * 10 ** 12; uint256 tokens = weiAmount.mul(usdtRate).div(usdtDivider); require(claimableTokens >= tokens, "Not enough tokens availible"); usdtRaised += amount; Customer[msg.sender].tokensBought += tokens; tokensSold += tokens; claimableTokens -= tokens; usdt.safeTransferFrom(msg.sender, wallet, amount); } //DEPOSIT TOKENS FOR PRESALE function deposit(uint amount) external onlyOwner { require(amount > 0, "Deposit value must be greater than 0"); token.safeTransferFrom(msg.sender, address(this), amount); claimableTokens += amount; } //WITHDRAW UNSOLD TOKENS IF NEEDED function withdraw(uint amount) external onlyOwner { require( token.balanceOf(address(this)) > 0, "There are not enough tokens in contract" ); require(claimableTokens >= amount, "not enough tokens to withdraw"); token.safeTransfer(msg.sender, amount); claimableTokens -= amount; } // CLAIM FUNCTION function claimTokens() public { require(hasPresaleEnded,"Presale has not ended"); require(Customer[msg.sender].tokensBought > 0, "No tokens to be claimed"); uint256 amount = Customer[msg.sender].tokensBought; token.safeTransfer(msg.sender, amount); Customer[msg.sender].tokensBought = 0; } //TO CHANGE COLLECTION WALLET function changeWallet(address payable _wallet) external onlyOwner { wallet = _wallet; } //TO UPDATE RATES function changeRate(uint256 _usdtRate, uint256 _ethToUsd, uint256 divider, uint256 usdtDiv) public onlyOwner { require(_usdtRate > 0, "Rate cannot be 0"); require(_ethToUsd > 0, "Rate cannot be 0"); tokenPriceUSD = _ethToUsd; usdtRate = _usdtRate; ethDivider = divider; usdtDivider = usdtDiv; } // ALL GETTER FUNCTIONS TO RETRIEVE DATA function checkbalance() external view returns (uint256) { return token.balanceOf(address(this)); } function getETHPriceInUSD() public view returns (int256) { return priceOracle.getLatestPrice(); } function getDivider() public view returns (uint256) { return ethDivider; } function getUsdtDivider() public view returns (uint256) { return usdtDivider; } function getTokenUsdPrice() public view returns (uint256) { return tokenPriceUSD; } function getUsdtRate() public view returns (uint256) { return usdtRate; } function progressETH() public view returns (uint256) { return weiRaised; } function progressUSDT() public view returns (uint256) { return usdtRaised; } function soldTokens() public view returns (uint256) { return tokensSold; } function checkPresaleStatus() public view returns (bool) { return hasPresaleStarted; } function checkPresaleEnd() public view returns (bool) { return hasPresaleEnded; } function getClaimableTokens() public view returns (uint256) { return claimableTokens; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Customer","outputs":[{"internalType":"uint256","name":"tokensBought","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyTokensWithUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdtRate","type":"uint256"},{"internalType":"uint256","name":"_ethToUsd","type":"uint256"},{"internalType":"uint256","name":"divider","type":"uint256"},{"internalType":"uint256","name":"usdtDiv","type":"uint256"}],"name":"changeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_wallet","type":"address"}],"name":"changeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkPresaleEnd","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkPresaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHPriceInUSD","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenUsdPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUsdtDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUsdtRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceOracle","outputs":[{"internalType":"contract ChainlinkPriceOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"soldTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPriceUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052731008e4a407fd86644ab52b0bfadaa41ab200282373ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525073dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff16815250736c6d7bd924bbe8cefe528533e7c1fa61647f99c660045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061014c600555633b9aca006006556311f4055360075560646008553480156200010d575f80fd5b506200012e620001226200019c60201b60201c565b620001a360201b60201c565b6040516200013c9062000264565b604051809103905ff08015801562000156573d5f803e3d5ffd5b5060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000272565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6103a58062002bf383390190565b60805160a051612935620002be5f395f8181610c1f015261108701525f8181610a9c01528181610bbe01528181610d9001528181611273015281816113b501526114dd01526129355ff3fe6080604052600436106101db575f3560e01c80638781ffa411610101578063cfddae0811610094578063eaa9600b11610063578063eaa9600b146105f4578063f2fde38b1461061e578063f9d8f2a014610646578063fc0c546a14610670576101ea565b8063cfddae081461056e578063d0febe4c14610596578063d9462709146105a0578063e35a6c7a146105ca576101ea565b8063b62e3c5a116100d0578063b62e3c5a146104c8578063b6b55f25146104f2578063c194ee2d1461051a578063cfc937a014610544576101ea565b80638781ffa4146104365780638da5cb5b1461046057806398b9a2dc1461048a578063a43be57b146104b2576101ea565b806348c54b9d116101795780635ed9ebfc116101485780635ed9ebfc146103a45780635ef8086f146103ce578063639efa86146103f6578063715018a614610420576101ea565b806348c54b9d1461031057806351229d3b14610326578063521eb273146103505780635be436d91461037a576101ea565b80632f48ab7d116101b55780632f48ab7d14610256578063304fa81a146102805780633894d0b3146102aa578063407fcc31146102e6576101ea565b806304c98b2b146101ee5780632630c12f146102045780632e1a7d4d1461022e576101ea565b366101ea576101e861069a565b005b5f80fd5b3480156101f9575f80fd5b50610202610a48565b005b34801561020f575f80fd5b50610218610a6c565b6040516102259190611a82565b60405180910390f35b348015610239575f80fd5b50610254600480360381019061024f9190611ad2565b610a91565b005b348015610261575f80fd5b5061026a610c1d565b6040516102779190611b1d565b60405180910390f35b34801561028b575f80fd5b50610294610c41565b6040516102a19190611b50565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb9190611ba4565b610c56565b6040516102dd9190611bde565b60405180910390f35b3480156102f1575f80fd5b506102fa610c70565b6040516103079190611bde565b60405180910390f35b34801561031b575f80fd5b50610324610c76565b005b348015610331575f80fd5b5061033a610e1b565b6040516103479190611bde565b60405180910390f35b34801561035b575f80fd5b50610364610e21565b6040516103719190611c06565b60405180910390f35b348015610385575f80fd5b5061038e610e46565b60405161039b9190611bde565b60405180910390f35b3480156103af575f80fd5b506103b8610e4f565b6040516103c59190611bde565b60405180910390f35b3480156103d9575f80fd5b506103f460048036038101906103ef9190611ad2565b610e58565b005b348015610401575f80fd5b5061040a6110d1565b6040516104179190611bde565b60405180910390f35b34801561042b575f80fd5b506104346110da565b005b348015610441575f80fd5b5061044a6110ed565b6040516104579190611bde565b60405180910390f35b34801561046b575f80fd5b506104746110f6565b6040516104819190611c06565b60405180910390f35b348015610495575f80fd5b506104b060048036038101906104ab9190611c5a565b61111d565b005b3480156104bd575f80fd5b506104c6611168565b005b3480156104d3575f80fd5b506104dc61118d565b6040516104e99190611c9d565b60405180910390f35b3480156104fd575f80fd5b5061051860048036038101906105139190611ad2565b611221565b005b348015610525575f80fd5b5061052e6112d3565b60405161053b9190611bde565b60405180910390f35b34801561054f575f80fd5b506105586112dc565b6040516105659190611b50565b60405180910390f35b348015610579575f80fd5b50610594600480360381019061058f9190611cb6565b6112f2565b005b61059e61069a565b005b3480156105ab575f80fd5b506105b46113a0565b6040516105c19190611bde565b60405180910390f35b3480156105d5575f80fd5b506105de6113a9565b6040516105eb9190611bde565b60405180910390f35b3480156105ff575f80fd5b506106086113b2565b6040516106159190611bde565b60405180910390f35b348015610629575f80fd5b50610644600480360381019061063f9190611ba4565b611450565b005b348015610651575f80fd5b5061065a6114d2565b6040516106679190611bde565b60405180910390f35b34801561067b575f80fd5b506106846114db565b6040516106919190611b1d565b60405180910390f35b600c5f9054906101000a900460ff166106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106df90611d74565b60405180910390fd5b600c60019054906101000a900460ff1615610738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072f90611ddc565b60405180910390fd5b66038d7ea4c68000341015610782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077990611e6a565b60405180910390fd5b5f3490505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190611eb2565b90505f8113610859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085090611f27565b60405180910390fd5b5f61089560055461088760065461087986886114ff90919063ffffffff16565b6114ff90919063ffffffff16565b61151490919063ffffffff16565b90508060035410156108dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d390611f8f565b60405180910390fd5b8260095f8282546108ed9190611fda565b925050819055508060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282546109429190611fda565b9250508190555080600b5f82825461095a9190611fda565b925050819055508060035f828254610972919061200d565b925050819055505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16346040516109bf9061206d565b5f6040518083038185875af1925050503d805f81146109f9576040519150601f19603f3d011682016040523d82523d5f602084013e6109fe565b606091505b5050905080610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a39906120cb565b60405180910390fd5b50505050565b610a50611529565b6001600c5f6101000a81548160ff021916908315150217905550565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a99611529565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610af39190611c06565b602060405180830381865afa158015610b0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3291906120fd565b11610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6990612198565b60405180910390fd5b806003541015610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90612200565b60405180910390fd5b610c0233827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166115a79092919063ffffffff16565b8060035f828254610c13919061200d565b9250508190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600c5f9054906101000a900460ff16905090565b6002602052805f5260405f205f91509050805f0154905081565b60055481565b600c60019054906101000a900460ff16610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612268565b60405180910390fd5b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d906122d0565b60405180910390fd5b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01549050610dd433827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166115a79092919063ffffffff16565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f018190555050565b60065481565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600554905090565b5f600b54905090565b600c5f9054906101000a900460ff16610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d90611d74565b60405180910390fd5b600c60019054906101000a900460ff1615610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90611ddc565b60405180910390fd5b620f4240811015610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390612338565b60405180910390fd5b5f64e8d4a5100082610f4e9190612356565b90505f610f7a600854610f6c600754856114ff90919063ffffffff16565b61151490919063ffffffff16565b9050806003541015610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890611f8f565b60405180910390fd5b82600a5f828254610fd29190611fda565b925050819055508060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282546110279190611fda565b9250508190555080600b5f82825461103f9190611fda565b925050819055508060035f828254611057919061200d565b925050819055506110cc3360045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661162d909392919063ffffffff16565b505050565b5f600654905090565b6110e2611529565b6110eb5f6116b6565b565b5f600a54905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611125611529565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611170611529565b6001600c60016101000a81548160ff021916908315150217905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061121c9190611eb2565b905090565b611229611529565b5f811161126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290612407565b60405180910390fd5b6112b83330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661162d909392919063ffffffff16565b8060035f8282546112c99190611fda565b9250508190555050565b5f600354905090565b5f600c60019054906101000a900460ff16905090565b6112fa611529565b5f841161133c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113339061246f565b60405180910390fd5b5f831161137e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113759061246f565b60405180910390fd5b8260058190555083600781905550816006819055508060088190555050505050565b5f600754905090565b5f600854905090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161140c9190611c06565b602060405180830381865afa158015611427573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144b91906120fd565b905090565b611458611529565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906124fd565b60405180910390fd5b6114cf816116b6565b50565b5f600954905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f818361150c9190612356565b905092915050565b5f81836115219190612548565b905092915050565b611531611777565b73ffffffffffffffffffffffffffffffffffffffff1661154f6110f6565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906125c2565b60405180910390fd5b565b6116288363a9059cbb60e01b84846040516024016115c69291906125e0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061177e565b505050565b6116b0846323b872dd60e01b85858560405160240161164e93929190612607565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061177e565b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f6117df826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166118439092919063ffffffff16565b90505f8151111561183e57808060200190518101906117fe9190612666565b61183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490612701565b60405180910390fd5b5b505050565b606061185184845f8561185a565b90509392505050565b60608247101561189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118969061278f565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516118c7919061280f565b5f6040518083038185875af1925050503d805f8114611901576040519150601f19603f3d011682016040523d82523d5f602084013e611906565b606091505b509150915061191787838387611923565b92505050949350505050565b60608315611984575f83510361197c5761193c85611997565b61197b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119729061286f565b60405180910390fd5b5b82905061198f565b61198e83836119b9565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f825111156119cb5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff91906128df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f611a4a611a45611a4084611a08565b611a27565b611a08565b9050919050565b5f611a5b82611a30565b9050919050565b5f611a6c82611a51565b9050919050565b611a7c81611a62565b82525050565b5f602082019050611a955f830184611a73565b92915050565b5f80fd5b5f819050919050565b611ab181611a9f565b8114611abb575f80fd5b50565b5f81359050611acc81611aa8565b92915050565b5f60208284031215611ae757611ae6611a9b565b5b5f611af484828501611abe565b91505092915050565b5f611b0782611a51565b9050919050565b611b1781611afd565b82525050565b5f602082019050611b305f830184611b0e565b92915050565b5f8115159050919050565b611b4a81611b36565b82525050565b5f602082019050611b635f830184611b41565b92915050565b5f611b7382611a08565b9050919050565b611b8381611b69565b8114611b8d575f80fd5b50565b5f81359050611b9e81611b7a565b92915050565b5f60208284031215611bb957611bb8611a9b565b5b5f611bc684828501611b90565b91505092915050565b611bd881611a9f565b82525050565b5f602082019050611bf15f830184611bcf565b92915050565b611c0081611b69565b82525050565b5f602082019050611c195f830184611bf7565b92915050565b5f611c2982611a08565b9050919050565b611c3981611c1f565b8114611c43575f80fd5b50565b5f81359050611c5481611c30565b92915050565b5f60208284031215611c6f57611c6e611a9b565b5b5f611c7c84828501611c46565b91505092915050565b5f819050919050565b611c9781611c85565b82525050565b5f602082019050611cb05f830184611c8e565b92915050565b5f805f8060808587031215611cce57611ccd611a9b565b5b5f611cdb87828801611abe565b9450506020611cec87828801611abe565b9350506040611cfd87828801611abe565b9250506060611d0e87828801611abe565b91505092959194509250565b5f82825260208201905092915050565b7f50726573616c65206e6f742073746172746564000000000000000000000000005f82015250565b5f611d5e601383611d1a565b9150611d6982611d2a565b602082019050919050565b5f6020820190508181035f830152611d8b81611d52565b9050919050565b7f50726573616c652068617320656e6465640000000000000000000000000000005f82015250565b5f611dc6601183611d1a565b9150611dd182611d92565b602082019050919050565b5f6020820190508181035f830152611df381611dba565b9050919050565b7f63616e7420627579206c6573732077697468207468616e20302e3030312045545f8201527f4800000000000000000000000000000000000000000000000000000000000000602082015250565b5f611e54602183611d1a565b9150611e5f82611dfa565b604082019050919050565b5f6020820190508181035f830152611e8181611e48565b9050919050565b611e9181611c85565b8114611e9b575f80fd5b50565b5f81519050611eac81611e88565b92915050565b5f60208284031215611ec757611ec6611a9b565b5b5f611ed484828501611e9e565b91505092915050565b7f496e76616c6964204554482070726963650000000000000000000000000000005f82015250565b5f611f11601183611d1a565b9150611f1c82611edd565b602082019050919050565b5f6020820190508181035f830152611f3e81611f05565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320617661696c69626c6500000000005f82015250565b5f611f79601b83611d1a565b9150611f8482611f45565b602082019050919050565b5f6020820190508181035f830152611fa681611f6d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fe482611a9f565b9150611fef83611a9f565b925082820190508082111561200757612006611fad565b5b92915050565b5f61201782611a9f565b915061202283611a9f565b925082820390508181111561203a57612039611fad565b5b92915050565b5f81905092915050565b50565b5f6120585f83612040565b91506120638261204a565b5f82019050919050565b5f6120778261204d565b9150819050919050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f6120b5600b83611d1a565b91506120c082612081565b602082019050919050565b5f6020820190508181035f8301526120e2816120a9565b9050919050565b5f815190506120f781611aa8565b92915050565b5f6020828403121561211257612111611a9b565b5b5f61211f848285016120e9565b91505092915050565b7f546865726520617265206e6f7420656e6f75676820746f6b656e7320696e20635f8201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b5f612182602783611d1a565b915061218d82612128565b604082019050919050565b5f6020820190508181035f8301526121af81612176565b9050919050565b7f6e6f7420656e6f75676820746f6b656e7320746f2077697468647261770000005f82015250565b5f6121ea601d83611d1a565b91506121f5826121b6565b602082019050919050565b5f6020820190508181035f830152612217816121de565b9050919050565b7f50726573616c6520686173206e6f7420656e64656400000000000000000000005f82015250565b5f612252601583611d1a565b915061225d8261221e565b602082019050919050565b5f6020820190508181035f83015261227f81612246565b9050919050565b7f4e6f20746f6b656e7320746f20626520636c61696d65640000000000000000005f82015250565b5f6122ba601783611d1a565b91506122c582612286565b602082019050919050565b5f6020820190508181035f8301526122e7816122ae565b9050919050565b7f63616e7420627579206c6573732077697468207468616e2031205553445400005f82015250565b5f612322601e83611d1a565b915061232d826122ee565b602082019050919050565b5f6020820190508181035f83015261234f81612316565b9050919050565b5f61236082611a9f565b915061236b83611a9f565b925082820261237981611a9f565b915082820484148315176123905761238f611fad565b5b5092915050565b7f4465706f7369742076616c7565206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f6123f1602483611d1a565b91506123fc82612397565b604082019050919050565b5f6020820190508181035f83015261241e816123e5565b9050919050565b7f526174652063616e6e6f742062652030000000000000000000000000000000005f82015250565b5f612459601083611d1a565b915061246482612425565b602082019050919050565b5f6020820190508181035f8301526124868161244d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6124e7602683611d1a565b91506124f28261248d565b604082019050919050565b5f6020820190508181035f830152612514816124db565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61255282611a9f565b915061255d83611a9f565b92508261256d5761256c61251b565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6125ac602083611d1a565b91506125b782612578565b602082019050919050565b5f6020820190508181035f8301526125d9816125a0565b9050919050565b5f6040820190506125f35f830185611bf7565b6126006020830184611bcf565b9392505050565b5f60608201905061261a5f830186611bf7565b6126276020830185611bf7565b6126346040830184611bcf565b949350505050565b61264581611b36565b811461264f575f80fd5b50565b5f815190506126608161263c565b92915050565b5f6020828403121561267b5761267a611a9b565b5b5f61268884828501612652565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f6126eb602a83611d1a565b91506126f682612691565b604082019050919050565b5f6020820190508181035f830152612718816126df565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f612779602683611d1a565b91506127848261271f565b604082019050919050565b5f6020820190508181035f8301526127a68161276d565b9050919050565b5f81519050919050565b5f5b838110156127d45780820151818401526020810190506127b9565b5f8484015250505050565b5f6127e9826127ad565b6127f38185612040565b93506128038185602086016127b7565b80840191505092915050565b5f61281a82846127df565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f612859601d83611d1a565b915061286482612825565b602082019050919050565b5f6020820190508181035f8301526128868161284d565b9050919050565b5f81519050919050565b5f601f19601f8301169050919050565b5f6128b18261288d565b6128bb8185611d1a565b93506128cb8185602086016127b7565b6128d481612897565b840191505092915050565b5f6020820190508181035f8301526128f781846128a7565b90509291505056fea264697066735822122022b074f1dbacec024999ff2d20b639a81eb2b4bb5067f4487eb89e945f5dc3c364736f6c63430008180033608060405234801561000f575f80fd5b50735f4ec3df9cbd43714fe2740f5e3616155c5b84195f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610335806100705f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80638e15f4731461002d575b5f80fd5b61003561004b565b604051610042919061010d565b60405180910390f35b5f805f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156100b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d991906101c6565b5050509150506305f5e100816100ef9190610297565b91505090565b5f819050919050565b610107816100f5565b82525050565b5f6020820190506101205f8301846100fe565b92915050565b5f80fd5b5f69ffffffffffffffffffff82169050919050565b6101488161012a565b8114610152575f80fd5b50565b5f815190506101638161013f565b92915050565b610172816100f5565b811461017c575f80fd5b50565b5f8151905061018d81610169565b92915050565b5f819050919050565b6101a581610193565b81146101af575f80fd5b50565b5f815190506101c08161019c565b92915050565b5f805f805f60a086880312156101df576101de610126565b5b5f6101ec88828901610155565b95505060206101fd8882890161017f565b945050604061020e888289016101b2565b935050606061021f888289016101b2565b925050608061023088828901610155565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6102a1826100f5565b91506102ac836100f5565b9250826102bc576102bb61023d565b5b60015f0383147f8000000000000000000000000000000000000000000000000000000000000000831416156102f4576102f361026a565b5b82820590509291505056fea26469706673582212209132c5cbd450069f1ee276b5819238e19ae038aa62d7c3e0710de427c07302e864736f6c63430008180033
Deployed Bytecode
0x6080604052600436106101db575f3560e01c80638781ffa411610101578063cfddae0811610094578063eaa9600b11610063578063eaa9600b146105f4578063f2fde38b1461061e578063f9d8f2a014610646578063fc0c546a14610670576101ea565b8063cfddae081461056e578063d0febe4c14610596578063d9462709146105a0578063e35a6c7a146105ca576101ea565b8063b62e3c5a116100d0578063b62e3c5a146104c8578063b6b55f25146104f2578063c194ee2d1461051a578063cfc937a014610544576101ea565b80638781ffa4146104365780638da5cb5b1461046057806398b9a2dc1461048a578063a43be57b146104b2576101ea565b806348c54b9d116101795780635ed9ebfc116101485780635ed9ebfc146103a45780635ef8086f146103ce578063639efa86146103f6578063715018a614610420576101ea565b806348c54b9d1461031057806351229d3b14610326578063521eb273146103505780635be436d91461037a576101ea565b80632f48ab7d116101b55780632f48ab7d14610256578063304fa81a146102805780633894d0b3146102aa578063407fcc31146102e6576101ea565b806304c98b2b146101ee5780632630c12f146102045780632e1a7d4d1461022e576101ea565b366101ea576101e861069a565b005b5f80fd5b3480156101f9575f80fd5b50610202610a48565b005b34801561020f575f80fd5b50610218610a6c565b6040516102259190611a82565b60405180910390f35b348015610239575f80fd5b50610254600480360381019061024f9190611ad2565b610a91565b005b348015610261575f80fd5b5061026a610c1d565b6040516102779190611b1d565b60405180910390f35b34801561028b575f80fd5b50610294610c41565b6040516102a19190611b50565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb9190611ba4565b610c56565b6040516102dd9190611bde565b60405180910390f35b3480156102f1575f80fd5b506102fa610c70565b6040516103079190611bde565b60405180910390f35b34801561031b575f80fd5b50610324610c76565b005b348015610331575f80fd5b5061033a610e1b565b6040516103479190611bde565b60405180910390f35b34801561035b575f80fd5b50610364610e21565b6040516103719190611c06565b60405180910390f35b348015610385575f80fd5b5061038e610e46565b60405161039b9190611bde565b60405180910390f35b3480156103af575f80fd5b506103b8610e4f565b6040516103c59190611bde565b60405180910390f35b3480156103d9575f80fd5b506103f460048036038101906103ef9190611ad2565b610e58565b005b348015610401575f80fd5b5061040a6110d1565b6040516104179190611bde565b60405180910390f35b34801561042b575f80fd5b506104346110da565b005b348015610441575f80fd5b5061044a6110ed565b6040516104579190611bde565b60405180910390f35b34801561046b575f80fd5b506104746110f6565b6040516104819190611c06565b60405180910390f35b348015610495575f80fd5b506104b060048036038101906104ab9190611c5a565b61111d565b005b3480156104bd575f80fd5b506104c6611168565b005b3480156104d3575f80fd5b506104dc61118d565b6040516104e99190611c9d565b60405180910390f35b3480156104fd575f80fd5b5061051860048036038101906105139190611ad2565b611221565b005b348015610525575f80fd5b5061052e6112d3565b60405161053b9190611bde565b60405180910390f35b34801561054f575f80fd5b506105586112dc565b6040516105659190611b50565b60405180910390f35b348015610579575f80fd5b50610594600480360381019061058f9190611cb6565b6112f2565b005b61059e61069a565b005b3480156105ab575f80fd5b506105b46113a0565b6040516105c19190611bde565b60405180910390f35b3480156105d5575f80fd5b506105de6113a9565b6040516105eb9190611bde565b60405180910390f35b3480156105ff575f80fd5b506106086113b2565b6040516106159190611bde565b60405180910390f35b348015610629575f80fd5b50610644600480360381019061063f9190611ba4565b611450565b005b348015610651575f80fd5b5061065a6114d2565b6040516106679190611bde565b60405180910390f35b34801561067b575f80fd5b506106846114db565b6040516106919190611b1d565b60405180910390f35b600c5f9054906101000a900460ff166106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106df90611d74565b60405180910390fd5b600c60019054906101000a900460ff1615610738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072f90611ddc565b60405180910390fd5b66038d7ea4c68000341015610782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077990611e6a565b60405180910390fd5b5f3490505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190611eb2565b90505f8113610859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085090611f27565b60405180910390fd5b5f61089560055461088760065461087986886114ff90919063ffffffff16565b6114ff90919063ffffffff16565b61151490919063ffffffff16565b90508060035410156108dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d390611f8f565b60405180910390fd5b8260095f8282546108ed9190611fda565b925050819055508060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282546109429190611fda565b9250508190555080600b5f82825461095a9190611fda565b925050819055508060035f828254610972919061200d565b925050819055505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16346040516109bf9061206d565b5f6040518083038185875af1925050503d805f81146109f9576040519150601f19603f3d011682016040523d82523d5f602084013e6109fe565b606091505b5050905080610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a39906120cb565b60405180910390fd5b50505050565b610a50611529565b6001600c5f6101000a81548160ff021916908315150217905550565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a99611529565b5f7f0000000000000000000000001008e4a407fd86644ab52b0bfadaa41ab200282373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610af39190611c06565b602060405180830381865afa158015610b0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3291906120fd565b11610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6990612198565b60405180910390fd5b806003541015610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90612200565b60405180910390fd5b610c0233827f0000000000000000000000001008e4a407fd86644ab52b0bfadaa41ab200282373ffffffffffffffffffffffffffffffffffffffff166115a79092919063ffffffff16565b8060035f828254610c13919061200d565b9250508190555050565b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b5f600c5f9054906101000a900460ff16905090565b6002602052805f5260405f205f91509050805f0154905081565b60055481565b600c60019054906101000a900460ff16610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612268565b60405180910390fd5b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d906122d0565b60405180910390fd5b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01549050610dd433827f0000000000000000000000001008e4a407fd86644ab52b0bfadaa41ab200282373ffffffffffffffffffffffffffffffffffffffff166115a79092919063ffffffff16565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f018190555050565b60065481565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600554905090565b5f600b54905090565b600c5f9054906101000a900460ff16610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d90611d74565b60405180910390fd5b600c60019054906101000a900460ff1615610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90611ddc565b60405180910390fd5b620f4240811015610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390612338565b60405180910390fd5b5f64e8d4a5100082610f4e9190612356565b90505f610f7a600854610f6c600754856114ff90919063ffffffff16565b61151490919063ffffffff16565b9050806003541015610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890611f8f565b60405180910390fd5b82600a5f828254610fd29190611fda565b925050819055508060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282546110279190611fda565b9250508190555080600b5f82825461103f9190611fda565b925050819055508060035f828254611057919061200d565b925050819055506110cc3360045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16857f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff1661162d909392919063ffffffff16565b505050565b5f600654905090565b6110e2611529565b6110eb5f6116b6565b565b5f600a54905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611125611529565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611170611529565b6001600c60016101000a81548160ff021916908315150217905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061121c9190611eb2565b905090565b611229611529565b5f811161126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290612407565b60405180910390fd5b6112b83330837f0000000000000000000000001008e4a407fd86644ab52b0bfadaa41ab200282373ffffffffffffffffffffffffffffffffffffffff1661162d909392919063ffffffff16565b8060035f8282546112c99190611fda565b9250508190555050565b5f600354905090565b5f600c60019054906101000a900460ff16905090565b6112fa611529565b5f841161133c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113339061246f565b60405180910390fd5b5f831161137e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113759061246f565b60405180910390fd5b8260058190555083600781905550816006819055508060088190555050505050565b5f600754905090565b5f600854905090565b5f7f0000000000000000000000001008e4a407fd86644ab52b0bfadaa41ab200282373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161140c9190611c06565b602060405180830381865afa158015611427573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144b91906120fd565b905090565b611458611529565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906124fd565b60405180910390fd5b6114cf816116b6565b50565b5f600954905090565b7f0000000000000000000000001008e4a407fd86644ab52b0bfadaa41ab200282381565b5f818361150c9190612356565b905092915050565b5f81836115219190612548565b905092915050565b611531611777565b73ffffffffffffffffffffffffffffffffffffffff1661154f6110f6565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906125c2565b60405180910390fd5b565b6116288363a9059cbb60e01b84846040516024016115c69291906125e0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061177e565b505050565b6116b0846323b872dd60e01b85858560405160240161164e93929190612607565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061177e565b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f6117df826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166118439092919063ffffffff16565b90505f8151111561183e57808060200190518101906117fe9190612666565b61183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490612701565b60405180910390fd5b5b505050565b606061185184845f8561185a565b90509392505050565b60608247101561189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118969061278f565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516118c7919061280f565b5f6040518083038185875af1925050503d805f8114611901576040519150601f19603f3d011682016040523d82523d5f602084013e611906565b606091505b509150915061191787838387611923565b92505050949350505050565b60608315611984575f83510361197c5761193c85611997565b61197b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119729061286f565b60405180910390fd5b5b82905061198f565b61198e83836119b9565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f825111156119cb5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff91906128df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f611a4a611a45611a4084611a08565b611a27565b611a08565b9050919050565b5f611a5b82611a30565b9050919050565b5f611a6c82611a51565b9050919050565b611a7c81611a62565b82525050565b5f602082019050611a955f830184611a73565b92915050565b5f80fd5b5f819050919050565b611ab181611a9f565b8114611abb575f80fd5b50565b5f81359050611acc81611aa8565b92915050565b5f60208284031215611ae757611ae6611a9b565b5b5f611af484828501611abe565b91505092915050565b5f611b0782611a51565b9050919050565b611b1781611afd565b82525050565b5f602082019050611b305f830184611b0e565b92915050565b5f8115159050919050565b611b4a81611b36565b82525050565b5f602082019050611b635f830184611b41565b92915050565b5f611b7382611a08565b9050919050565b611b8381611b69565b8114611b8d575f80fd5b50565b5f81359050611b9e81611b7a565b92915050565b5f60208284031215611bb957611bb8611a9b565b5b5f611bc684828501611b90565b91505092915050565b611bd881611a9f565b82525050565b5f602082019050611bf15f830184611bcf565b92915050565b611c0081611b69565b82525050565b5f602082019050611c195f830184611bf7565b92915050565b5f611c2982611a08565b9050919050565b611c3981611c1f565b8114611c43575f80fd5b50565b5f81359050611c5481611c30565b92915050565b5f60208284031215611c6f57611c6e611a9b565b5b5f611c7c84828501611c46565b91505092915050565b5f819050919050565b611c9781611c85565b82525050565b5f602082019050611cb05f830184611c8e565b92915050565b5f805f8060808587031215611cce57611ccd611a9b565b5b5f611cdb87828801611abe565b9450506020611cec87828801611abe565b9350506040611cfd87828801611abe565b9250506060611d0e87828801611abe565b91505092959194509250565b5f82825260208201905092915050565b7f50726573616c65206e6f742073746172746564000000000000000000000000005f82015250565b5f611d5e601383611d1a565b9150611d6982611d2a565b602082019050919050565b5f6020820190508181035f830152611d8b81611d52565b9050919050565b7f50726573616c652068617320656e6465640000000000000000000000000000005f82015250565b5f611dc6601183611d1a565b9150611dd182611d92565b602082019050919050565b5f6020820190508181035f830152611df381611dba565b9050919050565b7f63616e7420627579206c6573732077697468207468616e20302e3030312045545f8201527f4800000000000000000000000000000000000000000000000000000000000000602082015250565b5f611e54602183611d1a565b9150611e5f82611dfa565b604082019050919050565b5f6020820190508181035f830152611e8181611e48565b9050919050565b611e9181611c85565b8114611e9b575f80fd5b50565b5f81519050611eac81611e88565b92915050565b5f60208284031215611ec757611ec6611a9b565b5b5f611ed484828501611e9e565b91505092915050565b7f496e76616c6964204554482070726963650000000000000000000000000000005f82015250565b5f611f11601183611d1a565b9150611f1c82611edd565b602082019050919050565b5f6020820190508181035f830152611f3e81611f05565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320617661696c69626c6500000000005f82015250565b5f611f79601b83611d1a565b9150611f8482611f45565b602082019050919050565b5f6020820190508181035f830152611fa681611f6d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fe482611a9f565b9150611fef83611a9f565b925082820190508082111561200757612006611fad565b5b92915050565b5f61201782611a9f565b915061202283611a9f565b925082820390508181111561203a57612039611fad565b5b92915050565b5f81905092915050565b50565b5f6120585f83612040565b91506120638261204a565b5f82019050919050565b5f6120778261204d565b9150819050919050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f6120b5600b83611d1a565b91506120c082612081565b602082019050919050565b5f6020820190508181035f8301526120e2816120a9565b9050919050565b5f815190506120f781611aa8565b92915050565b5f6020828403121561211257612111611a9b565b5b5f61211f848285016120e9565b91505092915050565b7f546865726520617265206e6f7420656e6f75676820746f6b656e7320696e20635f8201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b5f612182602783611d1a565b915061218d82612128565b604082019050919050565b5f6020820190508181035f8301526121af81612176565b9050919050565b7f6e6f7420656e6f75676820746f6b656e7320746f2077697468647261770000005f82015250565b5f6121ea601d83611d1a565b91506121f5826121b6565b602082019050919050565b5f6020820190508181035f830152612217816121de565b9050919050565b7f50726573616c6520686173206e6f7420656e64656400000000000000000000005f82015250565b5f612252601583611d1a565b915061225d8261221e565b602082019050919050565b5f6020820190508181035f83015261227f81612246565b9050919050565b7f4e6f20746f6b656e7320746f20626520636c61696d65640000000000000000005f82015250565b5f6122ba601783611d1a565b91506122c582612286565b602082019050919050565b5f6020820190508181035f8301526122e7816122ae565b9050919050565b7f63616e7420627579206c6573732077697468207468616e2031205553445400005f82015250565b5f612322601e83611d1a565b915061232d826122ee565b602082019050919050565b5f6020820190508181035f83015261234f81612316565b9050919050565b5f61236082611a9f565b915061236b83611a9f565b925082820261237981611a9f565b915082820484148315176123905761238f611fad565b5b5092915050565b7f4465706f7369742076616c7565206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f6123f1602483611d1a565b91506123fc82612397565b604082019050919050565b5f6020820190508181035f83015261241e816123e5565b9050919050565b7f526174652063616e6e6f742062652030000000000000000000000000000000005f82015250565b5f612459601083611d1a565b915061246482612425565b602082019050919050565b5f6020820190508181035f8301526124868161244d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6124e7602683611d1a565b91506124f28261248d565b604082019050919050565b5f6020820190508181035f830152612514816124db565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61255282611a9f565b915061255d83611a9f565b92508261256d5761256c61251b565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6125ac602083611d1a565b91506125b782612578565b602082019050919050565b5f6020820190508181035f8301526125d9816125a0565b9050919050565b5f6040820190506125f35f830185611bf7565b6126006020830184611bcf565b9392505050565b5f60608201905061261a5f830186611bf7565b6126276020830185611bf7565b6126346040830184611bcf565b949350505050565b61264581611b36565b811461264f575f80fd5b50565b5f815190506126608161263c565b92915050565b5f6020828403121561267b5761267a611a9b565b5b5f61268884828501612652565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f6126eb602a83611d1a565b91506126f682612691565b604082019050919050565b5f6020820190508181035f830152612718816126df565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f612779602683611d1a565b91506127848261271f565b604082019050919050565b5f6020820190508181035f8301526127a68161276d565b9050919050565b5f81519050919050565b5f5b838110156127d45780820151818401526020810190506127b9565b5f8484015250505050565b5f6127e9826127ad565b6127f38185612040565b93506128038185602086016127b7565b80840191505092915050565b5f61281a82846127df565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f612859601d83611d1a565b915061286482612825565b602082019050919050565b5f6020820190508181035f8301526128868161284d565b9050919050565b5f81519050919050565b5f601f19601f8301169050919050565b5f6128b18261288d565b6128bb8185611d1a565b93506128cb8185602086016127b7565b6128d481612897565b840191505092915050565b5f6020820190508181035f8301526128f781846128a7565b90509291505056fea264697066735822122022b074f1dbacec024999ff2d20b639a81eb2b4bb5067f4487eb89e945f5dc3c364736f6c63430008180033
Deployed Bytecode Sourcemap
22618:6177:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23984:11;:9;:11::i;:::-;22618:6177;;;;;24036:83;;;;;;;;;;;;;:::i;:::-;;22726:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26238:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23091:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28478:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22889:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23438:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26624:345;;;;;;;;;;;;;:::i;:::-;;23479:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23297:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27988:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28382:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25258:659;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27791:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2880:103;;;;;;;;;;;;;:::i;:::-;;28284:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2232:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27012:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24146:79;;;;;;;;;;;;;:::i;:::-;;27672:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25959:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28689:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28586:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27144:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24261:961;;;:::i;:::-;;28093:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27887:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27553:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3138:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28188:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22974:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24261:961;24316:17;;;;;;;;;;;24308:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24376:15;;;;;;;;;;;24375:16;24367:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;24445:11;24432:9;:24;;24424:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24505:17;24525:9;24505:29;;24656:15;24674:11;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24656:46;;24732:1;24721:8;:12;24713:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;24768:14;24785:67;24838:13;;24785:48;24822:10;;24785:32;24807:8;24785:9;:13;;:32;;;;:::i;:::-;:36;;:48;;;;:::i;:::-;:52;;:67;;;;:::i;:::-;24768:84;;24894:6;24875:15;;:25;;24867:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24958:9;24945;;:22;;;;;;;:::i;:::-;;;;;;;;25017:6;24980:8;:20;24989:10;24980:20;;;;;;;;;;;;;;;:33;;;:43;;;;;;;:::i;:::-;;;;;;;;25048:6;25034:10;;:20;;;;;;;:::i;:::-;;;;;;;;25084:6;25065:15;;:25;;;;;;;:::i;:::-;;;;;;;;25104:16;25134:6;;;;;;;;;;;25126:20;;25154:9;25126:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25103:65;;;25187:11;25179:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;24297:925;;;;24261:961::o;24036:83::-;2118:13;:11;:13::i;:::-;24107:4:::1;24087:17;;:24;;;;;;;;;;;;;;;;;;24036:83::o:0;22726:39::-;;;;;;;;;;;;;:::o;26238:355::-;2118:13;:11;:13::i;:::-;26354:1:::1;26321:5;:15;;;26345:4;26321:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;26299:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;26460:6;26441:15;;:25;;26433:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26511:38;26530:10;26542:6;26511:5;:18;;;;:38;;;;;:::i;:::-;26579:6;26560:15;;:25;;;;;;;:::i;:::-;;;;;;;;26238:355:::0;:::o;23091:81::-;;;:::o;28478:100::-;28529:4;28553:17;;;;;;;;;;;28546:24;;28478:100;:::o;22889:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;23438:34::-;;;;:::o;26624:345::-;26673:15;;;;;;;;;;;26665:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26768:1;26732:8;:20;26741:10;26732:20;;;;;;;;;;;;;;;:33;;;:37;26724:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26810:14;26827:8;:20;26836:10;26827:20;;;;;;;;;;;;;;;:33;;;26810:50;;26873:38;26892:10;26904:6;26873:5;:18;;;;:38;;;;;:::i;:::-;26960:1;26924:8;:20;26933:10;26924:20;;;;;;;;;;;;;;;:33;;:37;;;;26654:315;26624:345::o;23479:38::-;;;;:::o;23297:75::-;;;;;;;;;;;;;:::o;27988:97::-;28037:7;28064:13;;28057:20;;27988:97;:::o;28382:88::-;28425:7;28452:10;;28445:17;;28382:88;:::o;25258:659::-;25327:17;;;;;;;;;;;25319:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25387:15;;;;;;;;;;;25386:16;25378:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;25453:11;25443:6;:21;;25435:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25510:17;25539:8;25530:6;:17;;;;:::i;:::-;25510:37;;25558:14;25575:40;25603:11;;25575:23;25589:8;;25575:9;:13;;:23;;;;:::i;:::-;:27;;:40;;;;:::i;:::-;25558:57;;25653:6;25634:15;;:25;;25626:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;25718:6;25704:10;;:20;;;;;;;:::i;:::-;;;;;;;;25774:6;25737:8;:20;25746:10;25737:20;;;;;;;;;;;;;;;:33;;;:43;;;;;;;:::i;:::-;;;;;;;;25805:6;25791:10;;:20;;;;;;;:::i;:::-;;;;;;;;25841:6;25822:15;;:25;;;;;;;:::i;:::-;;;;;;;;25860:49;25882:10;25894:6;;;;;;;;;;;25902;25860:4;:21;;;;:49;;;;;;:::i;:::-;25308:609;;25258:659;:::o;27791:88::-;27834:7;27861:10;;27854:17;;27791:88;:::o;2880:103::-;2118:13;:11;:13::i;:::-;2945:30:::1;2972:1;2945:18;:30::i;:::-;2880:103::o:0;28284:90::-;28329:7;28356:10;;28349:17;;28284:90;:::o;2232:87::-;2278:7;2305:6;;;;;;;;;;;2298:13;;2232:87;:::o;27012:101::-;2118:13;:11;:13::i;:::-;27098:7:::1;27089:6;;:16;;;;;;;;;;;;;;;;;;27012:101:::0;:::o;24146:79::-;2118:13;:11;:13::i;:::-;24213:4:::1;24195:15;;:22;;;;;;;;;;;;;;;;;;24146:79::o:0;27672:111::-;27721:6;27747:11;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27740:35;;27672:111;:::o;25959:231::-;2118:13;:11;:13::i;:::-;26036:1:::1;26027:6;:10;26019:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;26089:57;26112:10;26132:4;26139:6;26089:5;:22;;;;:57;;;;;;:::i;:::-;26176:6;26157:15;;:25;;;;;;;:::i;:::-;;;;;;;;25959:231:::0;:::o;28689:101::-;28740:7;28767:15;;28760:22;;28689:101;:::o;28586:95::-;28634:4;28658:15;;;;;;;;;;;28651:22;;28586:95;:::o;27144:353::-;2118:13;:11;:13::i;:::-;27284:1:::1;27272:9;:13;27264:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;27337:1;27325:9;:13;27317:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;27386:9;27370:13;:25;;;;27417:9;27406:8;:20;;;;27450:7;27437:10;:20;;;;27482:7;27468:11;:21;;;;27144:353:::0;;;;:::o;28093:87::-;28137:7;28164:8;;28157:15;;28093:87;:::o;27887:93::-;27934:7;27961:11;;27954:18;;27887:93;:::o;27553:112::-;27600:7;27627:5;:15;;;27651:4;27627:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27620:37;;27553:112;:::o;3138:238::-;2118:13;:11;:13::i;:::-;3261:1:::1;3241:22;;:8;:22;;::::0;3219:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3340:28;3359:8;3340:18;:28::i;:::-;3138:238:::0;:::o;28188:88::-;28232:7;28259:9;;28252:16;;28188:88;:::o;22974:82::-;;;:::o;18408:98::-;18466:7;18497:1;18493;:5;;;;:::i;:::-;18486:12;;18408:98;;;;:::o;18807:::-;18865:7;18896:1;18892;:5;;;;:::i;:::-;18885:12;;18807:98;;;;:::o;2397:132::-;2472:12;:10;:12::i;:::-;2461:23;;:7;:5;:7::i;:::-;:23;;;2453:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2397:132::o;11546:211::-;11663:86;11683:5;11713:23;;;11738:2;11742:5;11690:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11663:19;:86::i;:::-;11546:211;;;:::o;11765:248::-;11909:96;11929:5;11959:27;;;11988:4;11994:2;11998:5;11936:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11909:19;:96::i;:::-;11765:248;;;;:::o;3536:191::-;3610:16;3629:6;;;;;;;;;;;3610:25;;3655:8;3646:6;;:17;;;;;;;;;;;;;;;;;;3710:8;3679:40;;3700:8;3679:40;;;;;;;;;;;;3599:128;3536:191;:::o;783:98::-;836:7;863:10;856:17;;783:98;:::o;13969:716::-;14393:23;14419:69;14447:4;14419:69;;;;;;;;;;;;;;;;;14427:5;14419:27;;;;:69;;;;;:::i;:::-;14393:95;;14523:1;14503:10;:17;:21;14499:179;;;14600:10;14589:30;;;;;;;;;;;;:::i;:::-;14581:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14499:179;14039:646;13969:716;;:::o;7528:229::-;7665:12;7697:52;7719:6;7727:4;7733:1;7736:12;7697:21;:52::i;:::-;7690:59;;7528:229;;;;;:::o;8033:455::-;8203:12;8261:5;8236:21;:30;;8228:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;8321:12;8335:23;8362:6;:11;;8381:5;8388:4;8362:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8320:73;;;;8411:69;8438:6;8446:7;8455:10;8467:12;8411:26;:69::i;:::-;8404:76;;;;8033:455;;;;;;:::o;9592:644::-;9777:12;9806:7;9802:427;;;9855:1;9834:10;:17;:22;9830:290;;10052:18;10063:6;10052:10;:18::i;:::-;10044:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9830:290;10141:10;10134:17;;;;9802:427;10184:33;10192:10;10204:12;10184:7;:33::i;:::-;9592:644;;;;;;;:::o;6674:326::-;6734:4;6991:1;6969:7;:19;;;:23;6962:30;;6674:326;;;:::o;10559:552::-;10740:1;10720:10;:17;:21;10716:388;;;10952:10;10946:17;11009:15;10996:10;10992:2;10988:19;10981:44;10716:388;11079:12;11072:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:126:1;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:60::-;167:3;188:5;181:12;;139:60;;;:::o;205:142::-;255:9;288:53;306:34;315:24;333:5;315:24;:::i;:::-;306:34;:::i;:::-;288:53;:::i;:::-;275:66;;205:142;;;:::o;353:126::-;403:9;436:37;467:5;436:37;:::i;:::-;423:50;;353:126;;;:::o;485:155::-;564:9;597:37;628:5;597:37;:::i;:::-;584:50;;485:155;;;:::o;646:189::-;762:66;822:5;762:66;:::i;:::-;757:3;750:79;646:189;;:::o;841:280::-;963:4;1001:2;990:9;986:18;978:26;;1014:100;1111:1;1100:9;1096:17;1087:6;1014:100;:::i;:::-;841:280;;;;:::o;1208:117::-;1317:1;1314;1307:12;1454:77;1491:7;1520:5;1509:16;;1454:77;;;:::o;1537:122::-;1610:24;1628:5;1610:24;:::i;:::-;1603:5;1600:35;1590:63;;1649:1;1646;1639:12;1590:63;1537:122;:::o;1665:139::-;1711:5;1749:6;1736:20;1727:29;;1765:33;1792:5;1765:33;:::i;:::-;1665:139;;;;:::o;1810:329::-;1869:6;1918:2;1906:9;1897:7;1893:23;1889:32;1886:119;;;1924:79;;:::i;:::-;1886:119;2044:1;2069:53;2114:7;2105:6;2094:9;2090:22;2069:53;:::i;:::-;2059:63;;2015:117;1810:329;;;;:::o;2145:140::-;2209:9;2242:37;2273:5;2242:37;:::i;:::-;2229:50;;2145:140;;;:::o;2291:159::-;2392:51;2437:5;2392:51;:::i;:::-;2387:3;2380:64;2291:159;;:::o;2456:250::-;2563:4;2601:2;2590:9;2586:18;2578:26;;2614:85;2696:1;2685:9;2681:17;2672:6;2614:85;:::i;:::-;2456:250;;;;:::o;2712:90::-;2746:7;2789:5;2782:13;2775:21;2764:32;;2712:90;;;:::o;2808:109::-;2889:21;2904:5;2889:21;:::i;:::-;2884:3;2877:34;2808:109;;:::o;2923:210::-;3010:4;3048:2;3037:9;3033:18;3025:26;;3061:65;3123:1;3112:9;3108:17;3099:6;3061:65;:::i;:::-;2923:210;;;;:::o;3139:96::-;3176:7;3205:24;3223:5;3205:24;:::i;:::-;3194:35;;3139:96;;;:::o;3241:122::-;3314:24;3332:5;3314:24;:::i;:::-;3307:5;3304:35;3294:63;;3353:1;3350;3343:12;3294:63;3241:122;:::o;3369:139::-;3415:5;3453:6;3440:20;3431:29;;3469:33;3496:5;3469:33;:::i;:::-;3369:139;;;;:::o;3514:329::-;3573:6;3622:2;3610:9;3601:7;3597:23;3593:32;3590:119;;;3628:79;;:::i;:::-;3590:119;3748:1;3773:53;3818:7;3809:6;3798:9;3794:22;3773:53;:::i;:::-;3763:63;;3719:117;3514:329;;;;:::o;3849:118::-;3936:24;3954:5;3936:24;:::i;:::-;3931:3;3924:37;3849:118;;:::o;3973:222::-;4066:4;4104:2;4093:9;4089:18;4081:26;;4117:71;4185:1;4174:9;4170:17;4161:6;4117:71;:::i;:::-;3973:222;;;;:::o;4201:118::-;4288:24;4306:5;4288:24;:::i;:::-;4283:3;4276:37;4201:118;;:::o;4325:222::-;4418:4;4456:2;4445:9;4441:18;4433:26;;4469:71;4537:1;4526:9;4522:17;4513:6;4469:71;:::i;:::-;4325:222;;;;:::o;4553:104::-;4598:7;4627:24;4645:5;4627:24;:::i;:::-;4616:35;;4553:104;;;:::o;4663:138::-;4744:32;4770:5;4744:32;:::i;:::-;4737:5;4734:43;4724:71;;4791:1;4788;4781:12;4724:71;4663:138;:::o;4807:155::-;4861:5;4899:6;4886:20;4877:29;;4915:41;4950:5;4915:41;:::i;:::-;4807:155;;;;:::o;4968:345::-;5035:6;5084:2;5072:9;5063:7;5059:23;5055:32;5052:119;;;5090:79;;:::i;:::-;5052:119;5210:1;5235:61;5288:7;5279:6;5268:9;5264:22;5235:61;:::i;:::-;5225:71;;5181:125;4968:345;;;;:::o;5319:76::-;5355:7;5384:5;5373:16;;5319:76;;;:::o;5401:115::-;5486:23;5503:5;5486:23;:::i;:::-;5481:3;5474:36;5401:115;;:::o;5522:218::-;5613:4;5651:2;5640:9;5636:18;5628:26;;5664:69;5730:1;5719:9;5715:17;5706:6;5664:69;:::i;:::-;5522:218;;;;:::o;5746:765::-;5832:6;5840;5848;5856;5905:3;5893:9;5884:7;5880:23;5876:33;5873:120;;;5912:79;;:::i;:::-;5873:120;6032:1;6057:53;6102:7;6093:6;6082:9;6078:22;6057:53;:::i;:::-;6047:63;;6003:117;6159:2;6185:53;6230:7;6221:6;6210:9;6206:22;6185:53;:::i;:::-;6175:63;;6130:118;6287:2;6313:53;6358:7;6349:6;6338:9;6334:22;6313:53;:::i;:::-;6303:63;;6258:118;6415:2;6441:53;6486:7;6477:6;6466:9;6462:22;6441:53;:::i;:::-;6431:63;;6386:118;5746:765;;;;;;;:::o;6517:169::-;6601:11;6635:6;6630:3;6623:19;6675:4;6670:3;6666:14;6651:29;;6517:169;;;;:::o;6692:::-;6832:21;6828:1;6820:6;6816:14;6809:45;6692:169;:::o;6867:366::-;7009:3;7030:67;7094:2;7089:3;7030:67;:::i;:::-;7023:74;;7106:93;7195:3;7106:93;:::i;:::-;7224:2;7219:3;7215:12;7208:19;;6867:366;;;:::o;7239:419::-;7405:4;7443:2;7432:9;7428:18;7420:26;;7492:9;7486:4;7482:20;7478:1;7467:9;7463:17;7456:47;7520:131;7646:4;7520:131;:::i;:::-;7512:139;;7239:419;;;:::o;7664:167::-;7804:19;7800:1;7792:6;7788:14;7781:43;7664:167;:::o;7837:366::-;7979:3;8000:67;8064:2;8059:3;8000:67;:::i;:::-;7993:74;;8076:93;8165:3;8076:93;:::i;:::-;8194:2;8189:3;8185:12;8178:19;;7837:366;;;:::o;8209:419::-;8375:4;8413:2;8402:9;8398:18;8390:26;;8462:9;8456:4;8452:20;8448:1;8437:9;8433:17;8426:47;8490:131;8616:4;8490:131;:::i;:::-;8482:139;;8209:419;;;:::o;8634:220::-;8774:34;8770:1;8762:6;8758:14;8751:58;8843:3;8838:2;8830:6;8826:15;8819:28;8634:220;:::o;8860:366::-;9002:3;9023:67;9087:2;9082:3;9023:67;:::i;:::-;9016:74;;9099:93;9188:3;9099:93;:::i;:::-;9217:2;9212:3;9208:12;9201:19;;8860:366;;;:::o;9232:419::-;9398:4;9436:2;9425:9;9421:18;9413:26;;9485:9;9479:4;9475:20;9471:1;9460:9;9456:17;9449:47;9513:131;9639:4;9513:131;:::i;:::-;9505:139;;9232:419;;;:::o;9657:120::-;9729:23;9746:5;9729:23;:::i;:::-;9722:5;9719:34;9709:62;;9767:1;9764;9757:12;9709:62;9657:120;:::o;9783:141::-;9839:5;9870:6;9864:13;9855:22;;9886:32;9912:5;9886:32;:::i;:::-;9783:141;;;;:::o;9930:349::-;9999:6;10048:2;10036:9;10027:7;10023:23;10019:32;10016:119;;;10054:79;;:::i;:::-;10016:119;10174:1;10199:63;10254:7;10245:6;10234:9;10230:22;10199:63;:::i;:::-;10189:73;;10145:127;9930:349;;;;:::o;10285:167::-;10425:19;10421:1;10413:6;10409:14;10402:43;10285:167;:::o;10458:366::-;10600:3;10621:67;10685:2;10680:3;10621:67;:::i;:::-;10614:74;;10697:93;10786:3;10697:93;:::i;:::-;10815:2;10810:3;10806:12;10799:19;;10458:366;;;:::o;10830:419::-;10996:4;11034:2;11023:9;11019:18;11011:26;;11083:9;11077:4;11073:20;11069:1;11058:9;11054:17;11047:47;11111:131;11237:4;11111:131;:::i;:::-;11103:139;;10830:419;;;:::o;11255:177::-;11395:29;11391:1;11383:6;11379:14;11372:53;11255:177;:::o;11438:366::-;11580:3;11601:67;11665:2;11660:3;11601:67;:::i;:::-;11594:74;;11677:93;11766:3;11677:93;:::i;:::-;11795:2;11790:3;11786:12;11779:19;;11438:366;;;:::o;11810:419::-;11976:4;12014:2;12003:9;11999:18;11991:26;;12063:9;12057:4;12053:20;12049:1;12038:9;12034:17;12027:47;12091:131;12217:4;12091:131;:::i;:::-;12083:139;;11810:419;;;:::o;12235:180::-;12283:77;12280:1;12273:88;12380:4;12377:1;12370:15;12404:4;12401:1;12394:15;12421:191;12461:3;12480:20;12498:1;12480:20;:::i;:::-;12475:25;;12514:20;12532:1;12514:20;:::i;:::-;12509:25;;12557:1;12554;12550:9;12543:16;;12578:3;12575:1;12572:10;12569:36;;;12585:18;;:::i;:::-;12569:36;12421:191;;;;:::o;12618:194::-;12658:4;12678:20;12696:1;12678:20;:::i;:::-;12673:25;;12712:20;12730:1;12712:20;:::i;:::-;12707:25;;12756:1;12753;12749:9;12741:17;;12780:1;12774:4;12771:11;12768:37;;;12785:18;;:::i;:::-;12768:37;12618:194;;;;:::o;12818:147::-;12919:11;12956:3;12941:18;;12818:147;;;;:::o;12971:114::-;;:::o;13091:398::-;13250:3;13271:83;13352:1;13347:3;13271:83;:::i;:::-;13264:90;;13363:93;13452:3;13363:93;:::i;:::-;13481:1;13476:3;13472:11;13465:18;;13091:398;;;:::o;13495:379::-;13679:3;13701:147;13844:3;13701:147;:::i;:::-;13694:154;;13865:3;13858:10;;13495:379;;;:::o;13880:161::-;14020:13;14016:1;14008:6;14004:14;13997:37;13880:161;:::o;14047:366::-;14189:3;14210:67;14274:2;14269:3;14210:67;:::i;:::-;14203:74;;14286:93;14375:3;14286:93;:::i;:::-;14404:2;14399:3;14395:12;14388:19;;14047:366;;;:::o;14419:419::-;14585:4;14623:2;14612:9;14608:18;14600:26;;14672:9;14666:4;14662:20;14658:1;14647:9;14643:17;14636:47;14700:131;14826:4;14700:131;:::i;:::-;14692:139;;14419:419;;;:::o;14844:143::-;14901:5;14932:6;14926:13;14917:22;;14948:33;14975:5;14948:33;:::i;:::-;14844:143;;;;:::o;14993:351::-;15063:6;15112:2;15100:9;15091:7;15087:23;15083:32;15080:119;;;15118:79;;:::i;:::-;15080:119;15238:1;15263:64;15319:7;15310:6;15299:9;15295:22;15263:64;:::i;:::-;15253:74;;15209:128;14993:351;;;;:::o;15350:226::-;15490:34;15486:1;15478:6;15474:14;15467:58;15559:9;15554:2;15546:6;15542:15;15535:34;15350:226;:::o;15582:366::-;15724:3;15745:67;15809:2;15804:3;15745:67;:::i;:::-;15738:74;;15821:93;15910:3;15821:93;:::i;:::-;15939:2;15934:3;15930:12;15923:19;;15582:366;;;:::o;15954:419::-;16120:4;16158:2;16147:9;16143:18;16135:26;;16207:9;16201:4;16197:20;16193:1;16182:9;16178:17;16171:47;16235:131;16361:4;16235:131;:::i;:::-;16227:139;;15954:419;;;:::o;16379:179::-;16519:31;16515:1;16507:6;16503:14;16496:55;16379:179;:::o;16564:366::-;16706:3;16727:67;16791:2;16786:3;16727:67;:::i;:::-;16720:74;;16803:93;16892:3;16803:93;:::i;:::-;16921:2;16916:3;16912:12;16905:19;;16564:366;;;:::o;16936:419::-;17102:4;17140:2;17129:9;17125:18;17117:26;;17189:9;17183:4;17179:20;17175:1;17164:9;17160:17;17153:47;17217:131;17343:4;17217:131;:::i;:::-;17209:139;;16936:419;;;:::o;17361:171::-;17501:23;17497:1;17489:6;17485:14;17478:47;17361:171;:::o;17538:366::-;17680:3;17701:67;17765:2;17760:3;17701:67;:::i;:::-;17694:74;;17777:93;17866:3;17777:93;:::i;:::-;17895:2;17890:3;17886:12;17879:19;;17538:366;;;:::o;17910:419::-;18076:4;18114:2;18103:9;18099:18;18091:26;;18163:9;18157:4;18153:20;18149:1;18138:9;18134:17;18127:47;18191:131;18317:4;18191:131;:::i;:::-;18183:139;;17910:419;;;:::o;18335:173::-;18475:25;18471:1;18463:6;18459:14;18452:49;18335:173;:::o;18514:366::-;18656:3;18677:67;18741:2;18736:3;18677:67;:::i;:::-;18670:74;;18753:93;18842:3;18753:93;:::i;:::-;18871:2;18866:3;18862:12;18855:19;;18514:366;;;:::o;18886:419::-;19052:4;19090:2;19079:9;19075:18;19067:26;;19139:9;19133:4;19129:20;19125:1;19114:9;19110:17;19103:47;19167:131;19293:4;19167:131;:::i;:::-;19159:139;;18886:419;;;:::o;19311:180::-;19451:32;19447:1;19439:6;19435:14;19428:56;19311:180;:::o;19497:366::-;19639:3;19660:67;19724:2;19719:3;19660:67;:::i;:::-;19653:74;;19736:93;19825:3;19736:93;:::i;:::-;19854:2;19849:3;19845:12;19838:19;;19497:366;;;:::o;19869:419::-;20035:4;20073:2;20062:9;20058:18;20050:26;;20122:9;20116:4;20112:20;20108:1;20097:9;20093:17;20086:47;20150:131;20276:4;20150:131;:::i;:::-;20142:139;;19869:419;;;:::o;20294:410::-;20334:7;20357:20;20375:1;20357:20;:::i;:::-;20352:25;;20391:20;20409:1;20391:20;:::i;:::-;20386:25;;20446:1;20443;20439:9;20468:30;20486:11;20468:30;:::i;:::-;20457:41;;20647:1;20638:7;20634:15;20631:1;20628:22;20608:1;20601:9;20581:83;20558:139;;20677:18;;:::i;:::-;20558:139;20342:362;20294:410;;;;:::o;20710:223::-;20850:34;20846:1;20838:6;20834:14;20827:58;20919:6;20914:2;20906:6;20902:15;20895:31;20710:223;:::o;20939:366::-;21081:3;21102:67;21166:2;21161:3;21102:67;:::i;:::-;21095:74;;21178:93;21267:3;21178:93;:::i;:::-;21296:2;21291:3;21287:12;21280:19;;20939:366;;;:::o;21311:419::-;21477:4;21515:2;21504:9;21500:18;21492:26;;21564:9;21558:4;21554:20;21550:1;21539:9;21535:17;21528:47;21592:131;21718:4;21592:131;:::i;:::-;21584:139;;21311:419;;;:::o;21736:166::-;21876:18;21872:1;21864:6;21860:14;21853:42;21736:166;:::o;21908:366::-;22050:3;22071:67;22135:2;22130:3;22071:67;:::i;:::-;22064:74;;22147:93;22236:3;22147:93;:::i;:::-;22265:2;22260:3;22256:12;22249:19;;21908:366;;;:::o;22280:419::-;22446:4;22484:2;22473:9;22469:18;22461:26;;22533:9;22527:4;22523:20;22519:1;22508:9;22504:17;22497:47;22561:131;22687:4;22561:131;:::i;:::-;22553:139;;22280:419;;;:::o;22705:225::-;22845:34;22841:1;22833:6;22829:14;22822:58;22914:8;22909:2;22901:6;22897:15;22890:33;22705:225;:::o;22936:366::-;23078:3;23099:67;23163:2;23158:3;23099:67;:::i;:::-;23092:74;;23175:93;23264:3;23175:93;:::i;:::-;23293:2;23288:3;23284:12;23277:19;;22936:366;;;:::o;23308:419::-;23474:4;23512:2;23501:9;23497:18;23489:26;;23561:9;23555:4;23551:20;23547:1;23536:9;23532:17;23525:47;23589:131;23715:4;23589:131;:::i;:::-;23581:139;;23308:419;;;:::o;23733:180::-;23781:77;23778:1;23771:88;23878:4;23875:1;23868:15;23902:4;23899:1;23892:15;23919:185;23959:1;23976:20;23994:1;23976:20;:::i;:::-;23971:25;;24010:20;24028:1;24010:20;:::i;:::-;24005:25;;24049:1;24039:35;;24054:18;;:::i;:::-;24039:35;24096:1;24093;24089:9;24084:14;;23919:185;;;;:::o;24110:182::-;24250:34;24246:1;24238:6;24234:14;24227:58;24110:182;:::o;24298:366::-;24440:3;24461:67;24525:2;24520:3;24461:67;:::i;:::-;24454:74;;24537:93;24626:3;24537:93;:::i;:::-;24655:2;24650:3;24646:12;24639:19;;24298:366;;;:::o;24670:419::-;24836:4;24874:2;24863:9;24859:18;24851:26;;24923:9;24917:4;24913:20;24909:1;24898:9;24894:17;24887:47;24951:131;25077:4;24951:131;:::i;:::-;24943:139;;24670:419;;;:::o;25095:332::-;25216:4;25254:2;25243:9;25239:18;25231:26;;25267:71;25335:1;25324:9;25320:17;25311:6;25267:71;:::i;:::-;25348:72;25416:2;25405:9;25401:18;25392:6;25348:72;:::i;:::-;25095:332;;;;;:::o;25433:442::-;25582:4;25620:2;25609:9;25605:18;25597:26;;25633:71;25701:1;25690:9;25686:17;25677:6;25633:71;:::i;:::-;25714:72;25782:2;25771:9;25767:18;25758:6;25714:72;:::i;:::-;25796;25864:2;25853:9;25849:18;25840:6;25796:72;:::i;:::-;25433:442;;;;;;:::o;25881:116::-;25951:21;25966:5;25951:21;:::i;:::-;25944:5;25941:32;25931:60;;25987:1;25984;25977:12;25931:60;25881:116;:::o;26003:137::-;26057:5;26088:6;26082:13;26073:22;;26104:30;26128:5;26104:30;:::i;:::-;26003:137;;;;:::o;26146:345::-;26213:6;26262:2;26250:9;26241:7;26237:23;26233:32;26230:119;;;26268:79;;:::i;:::-;26230:119;26388:1;26413:61;26466:7;26457:6;26446:9;26442:22;26413:61;:::i;:::-;26403:71;;26359:125;26146:345;;;;:::o;26497:229::-;26637:34;26633:1;26625:6;26621:14;26614:58;26706:12;26701:2;26693:6;26689:15;26682:37;26497:229;:::o;26732:366::-;26874:3;26895:67;26959:2;26954:3;26895:67;:::i;:::-;26888:74;;26971:93;27060:3;26971:93;:::i;:::-;27089:2;27084:3;27080:12;27073:19;;26732:366;;;:::o;27104:419::-;27270:4;27308:2;27297:9;27293:18;27285:26;;27357:9;27351:4;27347:20;27343:1;27332:9;27328:17;27321:47;27385:131;27511:4;27385:131;:::i;:::-;27377:139;;27104:419;;;:::o;27529:225::-;27669:34;27665:1;27657:6;27653:14;27646:58;27738:8;27733:2;27725:6;27721:15;27714:33;27529:225;:::o;27760:366::-;27902:3;27923:67;27987:2;27982:3;27923:67;:::i;:::-;27916:74;;27999:93;28088:3;27999:93;:::i;:::-;28117:2;28112:3;28108:12;28101:19;;27760:366;;;:::o;28132:419::-;28298:4;28336:2;28325:9;28321:18;28313:26;;28385:9;28379:4;28375:20;28371:1;28360:9;28356:17;28349:47;28413:131;28539:4;28413:131;:::i;:::-;28405:139;;28132:419;;;:::o;28557:98::-;28608:6;28642:5;28636:12;28626:22;;28557:98;;;:::o;28661:246::-;28742:1;28752:113;28766:6;28763:1;28760:13;28752:113;;;28851:1;28846:3;28842:11;28836:18;28832:1;28827:3;28823:11;28816:39;28788:2;28785:1;28781:10;28776:15;;28752:113;;;28899:1;28890:6;28885:3;28881:16;28874:27;28723:184;28661:246;;;:::o;28913:386::-;29017:3;29045:38;29077:5;29045:38;:::i;:::-;29099:88;29180:6;29175:3;29099:88;:::i;:::-;29092:95;;29196:65;29254:6;29249:3;29242:4;29235:5;29231:16;29196:65;:::i;:::-;29286:6;29281:3;29277:16;29270:23;;29021:278;28913:386;;;;:::o;29305:271::-;29435:3;29457:93;29546:3;29537:6;29457:93;:::i;:::-;29450:100;;29567:3;29560:10;;29305:271;;;;:::o;29582:179::-;29722:31;29718:1;29710:6;29706:14;29699:55;29582:179;:::o;29767:366::-;29909:3;29930:67;29994:2;29989:3;29930:67;:::i;:::-;29923:74;;30006:93;30095:3;30006:93;:::i;:::-;30124:2;30119:3;30115:12;30108:19;;29767:366;;;:::o;30139:419::-;30305:4;30343:2;30332:9;30328:18;30320:26;;30392:9;30386:4;30382:20;30378:1;30367:9;30363:17;30356:47;30420:131;30546:4;30420:131;:::i;:::-;30412:139;;30139:419;;;:::o;30564:99::-;30616:6;30650:5;30644:12;30634:22;;30564:99;;;:::o;30669:102::-;30710:6;30761:2;30757:7;30752:2;30745:5;30741:14;30737:28;30727:38;;30669:102;;;:::o;30777:377::-;30865:3;30893:39;30926:5;30893:39;:::i;:::-;30948:71;31012:6;31007:3;30948:71;:::i;:::-;30941:78;;31028:65;31086:6;31081:3;31074:4;31067:5;31063:16;31028:65;:::i;:::-;31118:29;31140:6;31118:29;:::i;:::-;31113:3;31109:39;31102:46;;30869:285;30777:377;;;;:::o;31160:313::-;31273:4;31311:2;31300:9;31296:18;31288:26;;31360:9;31354:4;31350:20;31346:1;31335:9;31331:17;31324:47;31388:78;31461:4;31452:6;31388:78;:::i;:::-;31380:86;;31160:313;;;;:::o
Swarm Source
ipfs://9132c5cbd450069f1ee276b5819238e19ae038aa62d7c3e0710de427c07302e8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.