Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 349 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Buy Token | 20646327 | 578 days ago | IN | 0.001 ETH | 0.00002646 | ||||
| Buy Token | 20495806 | 599 days ago | IN | 0.001 ETH | 0.00003838 | ||||
| Withdraw All | 19611434 | 723 days ago | IN | 0 ETH | 0.00183396 | ||||
| Withdraw Currenc... | 19611428 | 723 days ago | IN | 0 ETH | 0.00149126 | ||||
| Buy Token | 19610774 | 723 days ago | IN | 0.005 ETH | 0.00163318 | ||||
| Buy Token | 19610126 | 723 days ago | IN | 0.001 ETH | 0.00160391 | ||||
| Buy Token | 19609123 | 723 days ago | IN | 0.001 ETH | 0.0007772 | ||||
| Buy Token | 19608921 | 723 days ago | IN | 0.05 ETH | 0.00065102 | ||||
| Buy Token | 19608823 | 723 days ago | IN | 0.002 ETH | 0.00086849 | ||||
| Buy Token | 19608581 | 723 days ago | IN | 0.005847 ETH | 0.00115814 | ||||
| Buy Token | 19608532 | 723 days ago | IN | 0.0009 ETH | 0.00061493 | ||||
| Buy Token | 19608124 | 723 days ago | IN | 0.01 ETH | 0.00073418 | ||||
| Buy Token | 19607690 | 723 days ago | IN | 0.088 ETH | 0.000745 | ||||
| Buy Token | 19605364 | 723 days ago | IN | 0.01 ETH | 0.00202719 | ||||
| Buy Token | 19605122 | 724 days ago | IN | 0.005 ETH | 0.00239527 | ||||
| Buy Token | 19604921 | 724 days ago | IN | 0.027 ETH | 0.00194456 | ||||
| Buy Token | 19603306 | 724 days ago | IN | 0.005 ETH | 0.00084792 | ||||
| Buy Token | 19603045 | 724 days ago | IN | 0.003 ETH | 0.0013397 | ||||
| Buy Token | 19603029 | 724 days ago | IN | 0.025 ETH | 0.00135626 | ||||
| Buy Token | 19602792 | 724 days ago | IN | 0.055 ETH | 0.00143359 | ||||
| Buy Token | 19602594 | 724 days ago | IN | 0.00232 ETH | 0.0012766 | ||||
| Buy Token | 19602550 | 724 days ago | IN | 0.009 ETH | 0.0013567 | ||||
| Buy Token | 19602519 | 724 days ago | IN | 0.0298 ETH | 0.00086753 | ||||
| Buy Token | 19602294 | 724 days ago | IN | 0.0158 ETH | 0.00084561 | ||||
| Buy Token | 19602114 | 724 days ago | IN | 0.14 ETH | 0.00094989 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DOXcoinPreSale
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-02-14
*/
/**
*Submitted for verification at Etherscan.io on 2024-02-12
*/
/**
*Submitted for verification at BscScan.com on 2023-08-19
*/
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
// File @openzeppelin/contracts/utils/Context.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File @openzeppelin/contracts/access/Ownable.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File contracts/OwnerWithdrawable.sol
pragma solidity ^0.8.0;
contract OwnerWithdrawable is Ownable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
receive() external payable {}
fallback() external payable {}
function withdraw(address token, uint256 amt) public onlyOwner {
IERC20(token).safeTransfer(msg.sender, amt);
}
function withdrawAll(address token) public onlyOwner {
uint256 amt = IERC20(token).balanceOf(address(this));
withdraw(token, amt);
}
function withdrawCurrency(uint256 amt) public onlyOwner {
payable(msg.sender).transfer(amt);
}
// function deposit(address token, uint256 amt) public onlyOwner {
// uint256 allowance = IERC20(token).allowance(msg.sender, address(this));
// require(allowance >= amt, "Check the token allowance");
// IERC20(token).transferFrom(owner(), address(this), amt);
// }
}
// File @openzeppelin/contracts/utils/Address.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
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"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
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"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
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"
);
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data)
internal
view
returns (bytes memory)
{
return
functionStaticCall(
target,
data,
"Address: low-level static call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// 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
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
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)
);
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
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
)
);
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(
data,
"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/token/ERC20/extensions/IERC20Metadata.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// SPDX-License-Identifier: MIT
// import "hardhat/console.sol";
pragma solidity ^0.8.0;
contract DOXcoinPreSale is OwnerWithdrawable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
using SafeERC20 for IERC20Metadata;
uint256 public rate;
address public saleToken;
uint256 public saleTokenDec;
uint256 public totalTokensforSale;
// Whitelist of tokens to buy from
mapping(address => bool) public tokenWL;
// 1 Token price in terms of WL tokens
mapping(address => uint256) public tokenPrices;
bool public isPresaleStarted;
mapping(address => uint256) public presaleData;
uint256 public totalTokensSold;
constructor() {}
//function to set information of Token sold in Pre-Sale and its rate in Native currency
function setSaleTokenParams(address _saleToken, uint256 _totalTokensforSale)
public
onlyOwner
{
saleToken = _saleToken;
saleTokenDec = IERC20Metadata(saleToken).decimals();
totalTokensforSale += _totalTokensforSale;
IERC20(saleToken).safeTransferFrom(
msg.sender,
address(this),
_totalTokensforSale
);
}
// Add a token to buy presale token from, with price
function addWhiteListedToken(address _token, uint256 _price)
external
onlyOwner
{
require(_price != 0, "Presale: Cannot set price to 0");
tokenWL[_token] = true;
tokenPrices[_token] = _price;
}
function updateEthRate(uint256 _rate) external onlyOwner {
rate = _rate;
}
function updateTokenRate(address _token, uint256 _price)
external
onlyOwner
{
require(tokenWL[_token], "Presale: Token not whitelisted");
require(_price != 0, "Presale: Cannot set price to 0");
tokenPrices[_token] = _price;
}
function togglePresale(bool _state) external onlyOwner {
isPresaleStarted = _state;
}
// Public view function to calculate amount of sale tokens returned if you buy using "amount" of "token"
function getTokenAmount(address token, uint256 amount)
public
view
returns (uint256)
{
if (!isPresaleStarted) {
return 0;
}
uint256 amtOut;
if (token != address(0)) {
require(tokenWL[token] == true, "Presale: Token not whitelisted");
uint256 price = tokenPrices[token];
amtOut = amount.mul(10**saleTokenDec).div(price);
} else {
amtOut = amount.mul(10**saleTokenDec).div(rate);
}
return amtOut;
}
// Public Function to buy tokens. APPROVAL needs to be done first
function buyToken(address _token, uint256 _amount) external payable {
require(isPresaleStarted, "PreSale: Sale stopped!");
uint256 saleTokenAmt;
if (_token != address(0)) {
require(_amount > 0, "Presale: Cannot buy with zero amount");
require(tokenWL[_token] == true, "Presale: Token not whitelisted");
saleTokenAmt = getTokenAmount(_token, _amount);
// check if saleTokenAmt is greater than minBuyLimit
require(
(totalTokensSold + saleTokenAmt) <= totalTokensforSale,
"PreSale: Total Token Sale Reached!"
);
IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);
IERC20(saleToken).safeTransfer(msg.sender, saleTokenAmt);
} else {
require(msg.value > 0, "Fund need to be greater than 0");
saleTokenAmt = getTokenAmount(address(0), msg.value);
require(
(totalTokensSold + saleTokenAmt) <= totalTokensforSale,
"PreSale: Total Token Sale Reached!"
);
IERC20(saleToken).safeTransfer(msg.sender, saleTokenAmt);
}
totalTokensSold += saleTokenAmt;
presaleData[msg.sender] += saleTokenAmt;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"addWhiteListedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"uint256","name":"_totalTokensforSale","type":"uint256"}],"name":"setSaleTokenParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensforSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateEthRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updateTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040523480156200001157600080fd5b5062000032620000266200003860201b60201c565b6200004060201b60201c565b62000104565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61259f80620001146000396000f3fe6080604052600436106101395760003560e01c8063715018a6116100ab578063ace1741c1161006f578063ace1741c146103f9578063e985e36714610424578063f2fde38b1461044f578063f3fef3a314610478578063f8951a00146104a1578063fa09e630146104de57610140565b8063715018a61461032657806389e6ce1e1461033d5780638ce0b9d2146103665780638da5cb5b146103a357806398d6d8ed146103ce57610140565b80633f6f7ed6116100fd5780633f6f7ed614610239578063444ad5ee1461026257806363b201171461028b57806368f8fc10146102b65780636b2ce7f1146102d25780636bcedf9c146102fb57610140565b8063115ece4c14610142578063204120bc1461017f578063226ac321146101bc5780632c4e722e146101e55780633c00a36c1461021057610140565b3661014057005b005b34801561014e57600080fd5b5061016960048036038101906101649190611a1d565b610507565b604051610176919061216a565b60405180910390f35b34801561018b57600080fd5b506101a660048036038101906101a191906119f4565b6106b0565b6040516101b3919061216a565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611a1d565b6106c8565b005b3480156101f157600080fd5b506101fa61085c565b604051610207919061216a565b60405180910390f35b34801561021c57600080fd5b5061023760048036038101906102329190611aab565b610862565b005b34801561024557600080fd5b50610260600480360381019061025b9190611aab565b610928565b005b34801561026e57600080fd5b5061028960048036038101906102849190611a1d565b6109ae565b005b34801561029757600080fd5b506102a0610b0e565b6040516102ad919061216a565b60405180910390f35b6102d060048036038101906102cb9190611a1d565b610b14565b005b3480156102de57600080fd5b506102f960048036038101906102f49190611a59565b610eaf565b005b34801561030757600080fd5b50610310610f48565b60405161031d919061216a565b60405180910390f35b34801561033257600080fd5b5061033b610f4e565b005b34801561034957600080fd5b50610364600480360381019061035f9190611a1d565b610fd6565b005b34801561037257600080fd5b5061038d600480360381019061038891906119f4565b6111a8565b60405161039a9190611fcd565b60405180910390f35b3480156103af57600080fd5b506103b86111c8565b6040516103c59190611f52565b60405180910390f35b3480156103da57600080fd5b506103e36111f1565b6040516103f09190611fcd565b60405180910390f35b34801561040557600080fd5b5061040e611204565b60405161041b919061216a565b60405180910390f35b34801561043057600080fd5b5061043961120a565b6040516104469190611f52565b60405180910390f35b34801561045b57600080fd5b50610476600480360381019061047191906119f4565b611230565b005b34801561048457600080fd5b5061049f600480360381019061049a9190611a1d565b611328565b005b3480156104ad57600080fd5b506104c860048036038101906104c391906119f4565b6113d3565b6040516104d5919061216a565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906119f4565b6113eb565b005b6000600760009054906101000a900460ff1661052657600090506106aa565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461066d5760011515600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146105ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e5906120ea565b60405180910390fd5b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061066581610657600354600a6106489190612291565b8761150290919063ffffffff16565b61151890919063ffffffff16565b9150506106a5565b6106a2600154610694600354600a6106859190612291565b8661150290919063ffffffff16565b61151890919063ffffffff16565b90505b809150505b92915050565b60066020528060005260406000206000915090505481565b6106d061152e565b73ffffffffffffffffffffffffffffffffffffffff166106ee6111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073b906120ca565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906120ea565b60405180910390fd5b6000811415610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080b9061208a565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60015481565b61086a61152e565b73ffffffffffffffffffffffffffffffffffffffff166108886111c8565b73ffffffffffffffffffffffffffffffffffffffff16146108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d5906120ca565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610924573d6000803e3d6000fd5b5050565b61093061152e565b73ffffffffffffffffffffffffffffffffffffffff1661094e6111c8565b73ffffffffffffffffffffffffffffffffffffffff16146109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b906120ca565b60405180910390fd5b8060018190555050565b6109b661152e565b73ffffffffffffffffffffffffffffffffffffffff166109d46111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a21906120ca565b60405180910390fd5b6000811415610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a659061208a565b60405180910390fd5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60095481565b600760009054906101000a900460ff16610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a9061204a565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610d4b5760008211610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd29061210a565b60405180910390fd5b60011515600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c65906120ea565b60405180910390fd5b610c788383610507565b905060045481600954610c8b91906121b7565b1115610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc39061200a565b60405180910390fd5b610cf93330848673ffffffffffffffffffffffffffffffffffffffff16611536909392919063ffffffff16565b610d463382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115bf9092919063ffffffff16565b610e3b565b60003411610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d85906120aa565b60405180910390fd5b610d99600034610507565b905060045481600954610dac91906121b7565b1115610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de49061200a565b60405180910390fd5b610e3a3382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115bf9092919063ffffffff16565b5b8060096000828254610e4d91906121b7565b9250508190555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ea391906121b7565b92505081905550505050565b610eb761152e565b73ffffffffffffffffffffffffffffffffffffffff16610ed56111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906120ca565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b60045481565b610f5661152e565b73ffffffffffffffffffffffffffffffffffffffff16610f746111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc1906120ca565b60405180910390fd5b610fd46000611645565b565b610fde61152e565b73ffffffffffffffffffffffffffffffffffffffff16610ffc6111c8565b73ffffffffffffffffffffffffffffffffffffffff1614611052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611049906120ca565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111339190611afd565b60ff16600381905550806004600082825461114e91906121b7565b925050819055506111a4333083600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611536909392919063ffffffff16565b5050565b60056020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900460ff1681565b60035481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61123861152e565b73ffffffffffffffffffffffffffffffffffffffff166112566111c8565b73ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a3906120ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113139061202a565b60405180910390fd5b61132581611645565b50565b61133061152e565b73ffffffffffffffffffffffffffffffffffffffff1661134e6111c8565b73ffffffffffffffffffffffffffffffffffffffff16146113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906120ca565b60405180910390fd5b6113cf33828473ffffffffffffffffffffffffffffffffffffffff166115bf9092919063ffffffff16565b5050565b60086020528060005260406000206000915090505481565b6113f361152e565b73ffffffffffffffffffffffffffffffffffffffff166114116111c8565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e906120ca565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114a29190611f52565b60206040518083038186803b1580156114ba57600080fd5b505afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190611ad4565b90506114fe8282611328565b5050565b6000818361151091906123af565b905092915050565b60008183611526919061220d565b905092915050565b600033905090565b6115b9846323b872dd60e01b85858560405160240161155793929190611f6d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611709565b50505050565b6116408363a9059cbb60e01b84846040516024016115de929190611fa4565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611709565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061176b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117d09092919063ffffffff16565b90506000815111156117cb578080602001905181019061178b9190611a82565b6117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c19061214a565b60405180910390fd5b5b505050565b60606117df84846000856117e8565b90509392505050565b60608247101561182d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118249061206a565b60405180910390fd5b611836856118fc565b611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c9061212a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161189e9190611f3b565b60006040518083038185875af1925050503d80600081146118db576040519150601f19603f3d011682016040523d82523d6000602084013e6118e0565b606091505b50915091506118f082828661190f565b92505050949350505050565b600080823b905060008111915050919050565b6060831561191f5782905061196f565b6000835111156119325782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119669190611fe8565b60405180910390fd5b9392505050565b6000813590506119858161250d565b92915050565b60008135905061199a81612524565b92915050565b6000815190506119af81612524565b92915050565b6000813590506119c48161253b565b92915050565b6000815190506119d98161253b565b92915050565b6000815190506119ee81612552565b92915050565b600060208284031215611a0657600080fd5b6000611a1484828501611976565b91505092915050565b60008060408385031215611a3057600080fd5b6000611a3e85828601611976565b9250506020611a4f858286016119b5565b9150509250929050565b600060208284031215611a6b57600080fd5b6000611a798482850161198b565b91505092915050565b600060208284031215611a9457600080fd5b6000611aa2848285016119a0565b91505092915050565b600060208284031215611abd57600080fd5b6000611acb848285016119b5565b91505092915050565b600060208284031215611ae657600080fd5b6000611af4848285016119ca565b91505092915050565b600060208284031215611b0f57600080fd5b6000611b1d848285016119df565b91505092915050565b611b2f81612409565b82525050565b611b3e8161241b565b82525050565b6000611b4f82612185565b611b59818561219b565b9350611b6981856020860161245e565b80840191505092915050565b6000611b8082612190565b611b8a81856121a6565b9350611b9a81856020860161245e565b611ba3816124ef565b840191505092915050565b6000611bbb6022836121a6565b91507f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008301527f64210000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611c216026836121a6565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611c876016836121a6565b91507f50726553616c653a2053616c652073746f7070656421000000000000000000006000830152602082019050919050565b6000611cc76026836121a6565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611d2d601e836121a6565b91507f50726573616c653a2043616e6e6f742073657420707269636520746f203000006000830152602082019050919050565b6000611d6d601e836121a6565b91507f46756e64206e65656420746f2062652067726561746572207468616e203000006000830152602082019050919050565b6000611dad6020836121a6565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000611ded601e836121a6565b91507f50726573616c653a20546f6b656e206e6f742077686974656c697374656400006000830152602082019050919050565b6000611e2d6024836121a6565b91507f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008301527f6f756e74000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611e93601d836121a6565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000611ed3602a836121a6565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b611f3581612447565b82525050565b6000611f478284611b44565b915081905092915050565b6000602082019050611f676000830184611b26565b92915050565b6000606082019050611f826000830186611b26565b611f8f6020830185611b26565b611f9c6040830184611f2c565b949350505050565b6000604082019050611fb96000830185611b26565b611fc66020830184611f2c565b9392505050565b6000602082019050611fe26000830184611b35565b92915050565b600060208201905081810360008301526120028184611b75565b905092915050565b6000602082019050818103600083015261202381611bae565b9050919050565b6000602082019050818103600083015261204381611c14565b9050919050565b6000602082019050818103600083015261206381611c7a565b9050919050565b6000602082019050818103600083015261208381611cba565b9050919050565b600060208201905081810360008301526120a381611d20565b9050919050565b600060208201905081810360008301526120c381611d60565b9050919050565b600060208201905081810360008301526120e381611da0565b9050919050565b6000602082019050818103600083015261210381611de0565b9050919050565b6000602082019050818103600083015261212381611e20565b9050919050565b6000602082019050818103600083015261214381611e86565b9050919050565b6000602082019050818103600083015261216381611ec6565b9050919050565b600060208201905061217f6000830184611f2c565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006121c282612447565b91506121cd83612447565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561220257612201612491565b5b828201905092915050565b600061221882612447565b915061222383612447565b925082612233576122326124c0565b5b828204905092915050565b6000808291508390505b60018511156122885780860481111561226457612263612491565b5b60018516156122735780820291505b808102905061228185612500565b9450612248565b94509492505050565b600061229c82612447565b91506122a783612447565b92506122d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846122dc565b905092915050565b6000826122ec57600190506123a8565b816122fa57600090506123a8565b8160018114612310576002811461231a57612349565b60019150506123a8565b60ff84111561232c5761232b612491565b5b8360020a91508482111561234357612342612491565b5b506123a8565b5060208310610133831016604e8410600b841016171561237e5782820a90508381111561237957612378612491565b5b6123a8565b61238b848484600161223e565b925090508184048111156123a2576123a1612491565b5b81810290505b9392505050565b60006123ba82612447565b91506123c583612447565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156123fe576123fd612491565b5b828202905092915050565b600061241482612427565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561247c578082015181840152602081019050612461565b8381111561248b576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b61251681612409565b811461252157600080fd5b50565b61252d8161241b565b811461253857600080fd5b50565b61254481612447565b811461254f57600080fd5b50565b61255b81612451565b811461256657600080fd5b5056fea26469706673582212203b6e84f7d2271f50ef9da4e5ebca563791ecc19df1bf9fa6f16654ff2aacdca264736f6c63430008000033
Deployed Bytecode
0x6080604052600436106101395760003560e01c8063715018a6116100ab578063ace1741c1161006f578063ace1741c146103f9578063e985e36714610424578063f2fde38b1461044f578063f3fef3a314610478578063f8951a00146104a1578063fa09e630146104de57610140565b8063715018a61461032657806389e6ce1e1461033d5780638ce0b9d2146103665780638da5cb5b146103a357806398d6d8ed146103ce57610140565b80633f6f7ed6116100fd5780633f6f7ed614610239578063444ad5ee1461026257806363b201171461028b57806368f8fc10146102b65780636b2ce7f1146102d25780636bcedf9c146102fb57610140565b8063115ece4c14610142578063204120bc1461017f578063226ac321146101bc5780632c4e722e146101e55780633c00a36c1461021057610140565b3661014057005b005b34801561014e57600080fd5b5061016960048036038101906101649190611a1d565b610507565b604051610176919061216a565b60405180910390f35b34801561018b57600080fd5b506101a660048036038101906101a191906119f4565b6106b0565b6040516101b3919061216a565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611a1d565b6106c8565b005b3480156101f157600080fd5b506101fa61085c565b604051610207919061216a565b60405180910390f35b34801561021c57600080fd5b5061023760048036038101906102329190611aab565b610862565b005b34801561024557600080fd5b50610260600480360381019061025b9190611aab565b610928565b005b34801561026e57600080fd5b5061028960048036038101906102849190611a1d565b6109ae565b005b34801561029757600080fd5b506102a0610b0e565b6040516102ad919061216a565b60405180910390f35b6102d060048036038101906102cb9190611a1d565b610b14565b005b3480156102de57600080fd5b506102f960048036038101906102f49190611a59565b610eaf565b005b34801561030757600080fd5b50610310610f48565b60405161031d919061216a565b60405180910390f35b34801561033257600080fd5b5061033b610f4e565b005b34801561034957600080fd5b50610364600480360381019061035f9190611a1d565b610fd6565b005b34801561037257600080fd5b5061038d600480360381019061038891906119f4565b6111a8565b60405161039a9190611fcd565b60405180910390f35b3480156103af57600080fd5b506103b86111c8565b6040516103c59190611f52565b60405180910390f35b3480156103da57600080fd5b506103e36111f1565b6040516103f09190611fcd565b60405180910390f35b34801561040557600080fd5b5061040e611204565b60405161041b919061216a565b60405180910390f35b34801561043057600080fd5b5061043961120a565b6040516104469190611f52565b60405180910390f35b34801561045b57600080fd5b50610476600480360381019061047191906119f4565b611230565b005b34801561048457600080fd5b5061049f600480360381019061049a9190611a1d565b611328565b005b3480156104ad57600080fd5b506104c860048036038101906104c391906119f4565b6113d3565b6040516104d5919061216a565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906119f4565b6113eb565b005b6000600760009054906101000a900460ff1661052657600090506106aa565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461066d5760011515600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146105ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e5906120ea565b60405180910390fd5b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061066581610657600354600a6106489190612291565b8761150290919063ffffffff16565b61151890919063ffffffff16565b9150506106a5565b6106a2600154610694600354600a6106859190612291565b8661150290919063ffffffff16565b61151890919063ffffffff16565b90505b809150505b92915050565b60066020528060005260406000206000915090505481565b6106d061152e565b73ffffffffffffffffffffffffffffffffffffffff166106ee6111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073b906120ca565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906120ea565b60405180910390fd5b6000811415610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080b9061208a565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60015481565b61086a61152e565b73ffffffffffffffffffffffffffffffffffffffff166108886111c8565b73ffffffffffffffffffffffffffffffffffffffff16146108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d5906120ca565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610924573d6000803e3d6000fd5b5050565b61093061152e565b73ffffffffffffffffffffffffffffffffffffffff1661094e6111c8565b73ffffffffffffffffffffffffffffffffffffffff16146109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b906120ca565b60405180910390fd5b8060018190555050565b6109b661152e565b73ffffffffffffffffffffffffffffffffffffffff166109d46111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a21906120ca565b60405180910390fd5b6000811415610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a659061208a565b60405180910390fd5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60095481565b600760009054906101000a900460ff16610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a9061204a565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610d4b5760008211610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd29061210a565b60405180910390fd5b60011515600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c65906120ea565b60405180910390fd5b610c788383610507565b905060045481600954610c8b91906121b7565b1115610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc39061200a565b60405180910390fd5b610cf93330848673ffffffffffffffffffffffffffffffffffffffff16611536909392919063ffffffff16565b610d463382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115bf9092919063ffffffff16565b610e3b565b60003411610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d85906120aa565b60405180910390fd5b610d99600034610507565b905060045481600954610dac91906121b7565b1115610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de49061200a565b60405180910390fd5b610e3a3382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115bf9092919063ffffffff16565b5b8060096000828254610e4d91906121b7565b9250508190555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ea391906121b7565b92505081905550505050565b610eb761152e565b73ffffffffffffffffffffffffffffffffffffffff16610ed56111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906120ca565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b60045481565b610f5661152e565b73ffffffffffffffffffffffffffffffffffffffff16610f746111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc1906120ca565b60405180910390fd5b610fd46000611645565b565b610fde61152e565b73ffffffffffffffffffffffffffffffffffffffff16610ffc6111c8565b73ffffffffffffffffffffffffffffffffffffffff1614611052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611049906120ca565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111339190611afd565b60ff16600381905550806004600082825461114e91906121b7565b925050819055506111a4333083600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611536909392919063ffffffff16565b5050565b60056020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900460ff1681565b60035481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61123861152e565b73ffffffffffffffffffffffffffffffffffffffff166112566111c8565b73ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a3906120ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113139061202a565b60405180910390fd5b61132581611645565b50565b61133061152e565b73ffffffffffffffffffffffffffffffffffffffff1661134e6111c8565b73ffffffffffffffffffffffffffffffffffffffff16146113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906120ca565b60405180910390fd5b6113cf33828473ffffffffffffffffffffffffffffffffffffffff166115bf9092919063ffffffff16565b5050565b60086020528060005260406000206000915090505481565b6113f361152e565b73ffffffffffffffffffffffffffffffffffffffff166114116111c8565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e906120ca565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114a29190611f52565b60206040518083038186803b1580156114ba57600080fd5b505afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190611ad4565b90506114fe8282611328565b5050565b6000818361151091906123af565b905092915050565b60008183611526919061220d565b905092915050565b600033905090565b6115b9846323b872dd60e01b85858560405160240161155793929190611f6d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611709565b50505050565b6116408363a9059cbb60e01b84846040516024016115de929190611fa4565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611709565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061176b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117d09092919063ffffffff16565b90506000815111156117cb578080602001905181019061178b9190611a82565b6117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c19061214a565b60405180910390fd5b5b505050565b60606117df84846000856117e8565b90509392505050565b60608247101561182d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118249061206a565b60405180910390fd5b611836856118fc565b611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c9061212a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161189e9190611f3b565b60006040518083038185875af1925050503d80600081146118db576040519150601f19603f3d011682016040523d82523d6000602084013e6118e0565b606091505b50915091506118f082828661190f565b92505050949350505050565b600080823b905060008111915050919050565b6060831561191f5782905061196f565b6000835111156119325782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119669190611fe8565b60405180910390fd5b9392505050565b6000813590506119858161250d565b92915050565b60008135905061199a81612524565b92915050565b6000815190506119af81612524565b92915050565b6000813590506119c48161253b565b92915050565b6000815190506119d98161253b565b92915050565b6000815190506119ee81612552565b92915050565b600060208284031215611a0657600080fd5b6000611a1484828501611976565b91505092915050565b60008060408385031215611a3057600080fd5b6000611a3e85828601611976565b9250506020611a4f858286016119b5565b9150509250929050565b600060208284031215611a6b57600080fd5b6000611a798482850161198b565b91505092915050565b600060208284031215611a9457600080fd5b6000611aa2848285016119a0565b91505092915050565b600060208284031215611abd57600080fd5b6000611acb848285016119b5565b91505092915050565b600060208284031215611ae657600080fd5b6000611af4848285016119ca565b91505092915050565b600060208284031215611b0f57600080fd5b6000611b1d848285016119df565b91505092915050565b611b2f81612409565b82525050565b611b3e8161241b565b82525050565b6000611b4f82612185565b611b59818561219b565b9350611b6981856020860161245e565b80840191505092915050565b6000611b8082612190565b611b8a81856121a6565b9350611b9a81856020860161245e565b611ba3816124ef565b840191505092915050565b6000611bbb6022836121a6565b91507f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008301527f64210000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611c216026836121a6565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611c876016836121a6565b91507f50726553616c653a2053616c652073746f7070656421000000000000000000006000830152602082019050919050565b6000611cc76026836121a6565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611d2d601e836121a6565b91507f50726573616c653a2043616e6e6f742073657420707269636520746f203000006000830152602082019050919050565b6000611d6d601e836121a6565b91507f46756e64206e65656420746f2062652067726561746572207468616e203000006000830152602082019050919050565b6000611dad6020836121a6565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000611ded601e836121a6565b91507f50726573616c653a20546f6b656e206e6f742077686974656c697374656400006000830152602082019050919050565b6000611e2d6024836121a6565b91507f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008301527f6f756e74000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611e93601d836121a6565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000611ed3602a836121a6565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b611f3581612447565b82525050565b6000611f478284611b44565b915081905092915050565b6000602082019050611f676000830184611b26565b92915050565b6000606082019050611f826000830186611b26565b611f8f6020830185611b26565b611f9c6040830184611f2c565b949350505050565b6000604082019050611fb96000830185611b26565b611fc66020830184611f2c565b9392505050565b6000602082019050611fe26000830184611b35565b92915050565b600060208201905081810360008301526120028184611b75565b905092915050565b6000602082019050818103600083015261202381611bae565b9050919050565b6000602082019050818103600083015261204381611c14565b9050919050565b6000602082019050818103600083015261206381611c7a565b9050919050565b6000602082019050818103600083015261208381611cba565b9050919050565b600060208201905081810360008301526120a381611d20565b9050919050565b600060208201905081810360008301526120c381611d60565b9050919050565b600060208201905081810360008301526120e381611da0565b9050919050565b6000602082019050818103600083015261210381611de0565b9050919050565b6000602082019050818103600083015261212381611e20565b9050919050565b6000602082019050818103600083015261214381611e86565b9050919050565b6000602082019050818103600083015261216381611ec6565b9050919050565b600060208201905061217f6000830184611f2c565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006121c282612447565b91506121cd83612447565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561220257612201612491565b5b828201905092915050565b600061221882612447565b915061222383612447565b925082612233576122326124c0565b5b828204905092915050565b6000808291508390505b60018511156122885780860481111561226457612263612491565b5b60018516156122735780820291505b808102905061228185612500565b9450612248565b94509492505050565b600061229c82612447565b91506122a783612447565b92506122d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846122dc565b905092915050565b6000826122ec57600190506123a8565b816122fa57600090506123a8565b8160018114612310576002811461231a57612349565b60019150506123a8565b60ff84111561232c5761232b612491565b5b8360020a91508482111561234357612342612491565b5b506123a8565b5060208310610133831016604e8410600b841016171561237e5782820a90508381111561237957612378612491565b5b6123a8565b61238b848484600161223e565b925090508184048111156123a2576123a1612491565b5b81810290505b9392505050565b60006123ba82612447565b91506123c583612447565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156123fe576123fd612491565b5b828202905092915050565b600061241482612427565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561247c578082015181840152602081019050612461565b8381111561248b576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b61251681612409565b811461252157600080fd5b50565b61252d8161241b565b811461253857600080fd5b50565b61254481612447565b811461254f57600080fd5b50565b61255b81612451565b811461256657600080fd5b5056fea26469706673582212203b6e84f7d2271f50ef9da4e5ebca563791ecc19df1bf9fa6f16654ff2aacdca264736f6c63430008000033
Deployed Bytecode Sourcemap
28576:4023:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30642:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29000:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30137:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28737:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14230:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30041:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29785:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29145:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31282:1314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30425:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28828:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12822:103;;;;;;;;;;;;;:::i;:::-;;29304:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28910:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12171:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29053:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28794:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28763:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13080:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13934:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29090:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14067:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30642:561;30745:7;30775:16;;;;;;;;;;;30770:58;;30815:1;30808:8;;;;30770:58;30838:14;30884:1;30867:19;;:5;:19;;;30863:309;;30929:4;30911:22;;:7;:14;30919:5;30911:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;30903:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30983:13;30999:11;:18;31011:5;30999:18;;;;;;;;;;;;;;;;30983:34;;31041:39;31074:5;31041:28;31056:12;;31052:2;:16;;;;:::i;:::-;31041:6;:10;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;31032:48;;30863:309;;;;31122:38;31155:4;;31122:28;31137:12;;31133:2;:16;;;;:::i;:::-;31122:6;:10;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;31113:47;;30863:309;31189:6;31182:13;;;30642:561;;;;;:::o;29000:46::-;;;;;;;;;;;;;;;;;:::o;30137:280::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30255:7:::1;:15;30263:6;30255:15;;;;;;;;;;;;;;;;;;;;;;;;;30247:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30334:1;30324:6;:11;;30316:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;30403:6;30381:11;:19;30393:6;30381:19;;;;;;;;;;;;;;;:28;;;;30137:280:::0;;:::o;28737:19::-;;;;:::o;14230:108::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14305:10:::1;14297:28;;:33;14326:3;14297:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14230:108:::0;:::o;30041:88::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30116:5:::1;30109:4;:12;;;;30041:88:::0;:::o;29785:248::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29917:1:::1;29907:6;:11;;29899:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29982:4;29964:7;:15;29972:6;29964:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;30019:6;29997:11;:19;30009:6;29997:19;;;;;;;;;;;;;;;:28;;;;29785:248:::0;;:::o;29145:30::-;;;;:::o;31282:1314::-;31369:16;;;;;;;;;;;31361:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;31425:20;31478:1;31460:20;;:6;:20;;;31456:1039;;31515:1;31505:7;:11;31497:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31599:4;31580:23;;:7;:15;31588:6;31580:15;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;31572:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31670:31;31685:6;31693:7;31670:14;:31::i;:::-;31655:46;;31846:18;;31829:12;31811:15;;:30;;;;:::i;:::-;31810:54;;31784:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;31951:67;31983:10;32003:4;32010:7;31958:6;31951:31;;;;:67;;;;;;:::i;:::-;32033:56;32064:10;32076:12;32040:9;;;;;;;;;;;32033:30;;;;:56;;;;;:::i;:::-;31456:1039;;;32142:1;32130:9;:13;32122:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32208:37;32231:1;32235:9;32208:14;:37::i;:::-;32193:52;;32324:18;;32307:12;32289:15;;:30;;;;:::i;:::-;32288:54;;32262:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;32427:56;32458:10;32470:12;32434:9;;;;;;;;;;;32427:30;;;;:56;;;;;:::i;:::-;31456:1039;32526:12;32507:15;;:31;;;;;;;:::i;:::-;;;;;;;;32576:12;32549:11;:23;32561:10;32549:23;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;31282:1314;;;:::o;30425:99::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30510:6:::1;30491:16;;:25;;;;;;;;;;;;;;;;;;30425:99:::0;:::o;28828:33::-;;;;:::o;12822:103::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12887:30:::1;12914:1;12887:18;:30::i;:::-;12822:103::o:0;29304:415::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29444:10:::1;29432:9;;:22;;;;;;;;;;;;;;;;;;29495:9;;;;;;;;;;;29480:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29465:51;;:12;:51;;;;29549:19;29527:18;;:41;;;;;;;:::i;:::-;;;;;;;;29579:132;29628:10;29661:4;29681:19;29586:9;;;;;;;;;;;29579:34;;;;:132;;;;;;:::i;:::-;29304:415:::0;;:::o;28910:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;12171:87::-;12217:7;12244:6;;;;;;;;;;;12237:13;;12171:87;:::o;29053:28::-;;;;;;;;;;;;;:::o;28794:27::-;;;;:::o;28763:24::-;;;;;;;;;;;;;:::o;13080:238::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13203:1:::1;13183:22;;:8;:22;;;;13161:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;13282:28;13301:8;13282:18;:28::i;:::-;13080:238:::0;:::o;13934:125::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14008:43:::1;14035:10;14047:3;14015:5;14008:26;;;;:43;;;;;:::i;:::-;13934:125:::0;;:::o;29090:46::-;;;;;;;;;;;;;;;;;:::o;14067:155::-;12402:12;:10;:12::i;:::-;12391:23;;:7;:5;:7::i;:::-;:23;;;12383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14131:11:::1;14152:5;14145:23;;;14177:4;14145:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14131:52;;14194:20;14203:5;14210:3;14194:8;:20::i;:::-;12462:1;14067:155:::0;:::o;3779:98::-;3837:7;3868:1;3864;:5;;;;:::i;:::-;3857:12;;3779:98;;;;:::o;4178:::-;4236:7;4267:1;4263;:5;;;;:::i;:::-;4256:12;;4178:98;;;;:::o;10868:::-;10921:7;10948:10;10941:17;;10868:98;:::o;24225:285::-;24369:133;24403:5;24446:27;;;24475:4;24481:2;24485:5;24423:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24369:19;:133::i;:::-;24225:285;;;;:::o;23969:248::-;24086:123;24120:5;24163:23;;;24188:2;24192:5;24140:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24086:19;:123::i;:::-;23969:248;;;:::o;13478:191::-;13552:16;13571:6;;;;;;;;;;;13552:25;;13597:8;13588:6;;:17;;;;;;;;;;;;;;;;;;13652:8;13621:40;;13642:8;13621:40;;;;;;;;;;;;13478:191;;:::o;26936:802::-;27360:23;27386:106;27428:4;27386:106;;;;;;;;;;;;;;;;;27394:5;27386:27;;;;:106;;;;;:::i;:::-;27360:132;;27527:1;27507:10;:17;:21;27503:228;;;27622:10;27611:30;;;;;;;;;;;;:::i;:::-;27585:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;27503:228;26936:802;;;:::o;18377:229::-;18514:12;18546:52;18568:6;18576:4;18582:1;18585:12;18546:21;:52::i;:::-;18539:59;;18377:229;;;;;:::o;19593:571::-;19763:12;19835:5;19810:21;:30;;19788:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;19925:18;19936:6;19925:10;:18::i;:::-;19917:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19991:12;20005:23;20032:6;:11;;20051:5;20072:4;20032:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19990:97;;;;20105:51;20122:7;20131:10;20143:12;20105:16;:51::i;:::-;20098:58;;;;19593:571;;;;;;:::o;15474:387::-;15534:4;15742:12;15809:7;15797:20;15789:28;;15852:1;15845:4;:8;15838:15;;;15474:387;;;:::o;22553:712::-;22703:12;22732:7;22728:530;;;22763:10;22756:17;;;;22728:530;22897:1;22877:10;:17;:21;22873:374;;;23075:10;23069:17;23136:15;23123:10;23119:2;23115:19;23108:44;23023:148;23218:12;23211:20;;;;;;;;;;;:::i;:::-;;;;;;;;22553:712;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:137::-;;376:6;370:13;361:22;;392:30;416:5;392:30;:::i;:::-;351:77;;;;:::o;434:139::-;;518:6;505:20;496:29;;534:33;561:5;534:33;:::i;:::-;486:87;;;;:::o;579:143::-;;667:6;661:13;652:22;;683:33;710:5;683:33;:::i;:::-;642:80;;;;:::o;728:139::-;;814:6;808:13;799:22;;830:31;855:5;830:31;:::i;:::-;789:78;;;;:::o;873:262::-;;981:2;969:9;960:7;956:23;952:32;949:2;;;997:1;994;987:12;949:2;1040:1;1065:53;1110:7;1101:6;1090:9;1086:22;1065:53;:::i;:::-;1055:63;;1011:117;939:196;;;;:::o;1141:407::-;;;1266:2;1254:9;1245:7;1241:23;1237:32;1234:2;;;1282:1;1279;1272:12;1234:2;1325:1;1350:53;1395:7;1386:6;1375:9;1371:22;1350:53;:::i;:::-;1340:63;;1296:117;1452:2;1478:53;1523:7;1514:6;1503:9;1499:22;1478:53;:::i;:::-;1468:63;;1423:118;1224:324;;;;;:::o;1554:256::-;;1659:2;1647:9;1638:7;1634:23;1630:32;1627:2;;;1675:1;1672;1665:12;1627:2;1718:1;1743:50;1785:7;1776:6;1765:9;1761:22;1743:50;:::i;:::-;1733:60;;1689:114;1617:193;;;;:::o;1816:278::-;;1932:2;1920:9;1911:7;1907:23;1903:32;1900:2;;;1948:1;1945;1938:12;1900:2;1991:1;2016:61;2069:7;2060:6;2049:9;2045:22;2016:61;:::i;:::-;2006:71;;1962:125;1890:204;;;;:::o;2100:262::-;;2208:2;2196:9;2187:7;2183:23;2179:32;2176:2;;;2224:1;2221;2214:12;2176:2;2267:1;2292:53;2337:7;2328:6;2317:9;2313:22;2292:53;:::i;:::-;2282:63;;2238:117;2166:196;;;;:::o;2368:284::-;;2487:2;2475:9;2466:7;2462:23;2458:32;2455:2;;;2503:1;2500;2493:12;2455:2;2546:1;2571:64;2627:7;2618:6;2607:9;2603:22;2571:64;:::i;:::-;2561:74;;2517:128;2445:207;;;;:::o;2658:280::-;;2775:2;2763:9;2754:7;2750:23;2746:32;2743:2;;;2791:1;2788;2781:12;2743:2;2834:1;2859:62;2913:7;2904:6;2893:9;2889:22;2859:62;:::i;:::-;2849:72;;2805:126;2733:205;;;;:::o;2944:118::-;3031:24;3049:5;3031:24;:::i;:::-;3026:3;3019:37;3009:53;;:::o;3068:109::-;3149:21;3164:5;3149:21;:::i;:::-;3144:3;3137:34;3127:50;;:::o;3183:373::-;;3315:38;3347:5;3315:38;:::i;:::-;3369:88;3450:6;3445:3;3369:88;:::i;:::-;3362:95;;3466:52;3511:6;3506:3;3499:4;3492:5;3488:16;3466:52;:::i;:::-;3543:6;3538:3;3534:16;3527:23;;3291:265;;;;;:::o;3562:364::-;;3678:39;3711:5;3678:39;:::i;:::-;3733:71;3797:6;3792:3;3733:71;:::i;:::-;3726:78;;3813:52;3858:6;3853:3;3846:4;3839:5;3835:16;3813:52;:::i;:::-;3890:29;3912:6;3890:29;:::i;:::-;3885:3;3881:39;3874:46;;3654:272;;;;;:::o;3932:366::-;;4095:67;4159:2;4154:3;4095:67;:::i;:::-;4088:74;;4192:34;4188:1;4183:3;4179:11;4172:55;4258:4;4253:2;4248:3;4244:12;4237:26;4289:2;4284:3;4280:12;4273:19;;4078:220;;;:::o;4304:370::-;;4467:67;4531:2;4526:3;4467:67;:::i;:::-;4460:74;;4564:34;4560:1;4555:3;4551:11;4544:55;4630:8;4625:2;4620:3;4616:12;4609:30;4665:2;4660:3;4656:12;4649:19;;4450:224;;;:::o;4680:320::-;;4843:67;4907:2;4902:3;4843:67;:::i;:::-;4836:74;;4940:24;4936:1;4931:3;4927:11;4920:45;4991:2;4986:3;4982:12;4975:19;;4826:174;;;:::o;5006:370::-;;5169:67;5233:2;5228:3;5169:67;:::i;:::-;5162:74;;5266:34;5262:1;5257:3;5253:11;5246:55;5332:8;5327:2;5322:3;5318:12;5311:30;5367:2;5362:3;5358:12;5351:19;;5152:224;;;:::o;5382:328::-;;5545:67;5609:2;5604:3;5545:67;:::i;:::-;5538:74;;5642:32;5638:1;5633:3;5629:11;5622:53;5701:2;5696:3;5692:12;5685:19;;5528:182;;;:::o;5716:328::-;;5879:67;5943:2;5938:3;5879:67;:::i;:::-;5872:74;;5976:32;5972:1;5967:3;5963:11;5956:53;6035:2;6030:3;6026:12;6019:19;;5862:182;;;:::o;6050:330::-;;6213:67;6277:2;6272:3;6213:67;:::i;:::-;6206:74;;6310:34;6306:1;6301:3;6297:11;6290:55;6371:2;6366:3;6362:12;6355:19;;6196:184;;;:::o;6386:328::-;;6549:67;6613:2;6608:3;6549:67;:::i;:::-;6542:74;;6646:32;6642:1;6637:3;6633:11;6626:53;6705:2;6700:3;6696:12;6689:19;;6532:182;;;:::o;6720:368::-;;6883:67;6947:2;6942:3;6883:67;:::i;:::-;6876:74;;6980:34;6976:1;6971:3;6967:11;6960:55;7046:6;7041:2;7036:3;7032:12;7025:28;7079:2;7074:3;7070:12;7063:19;;6866:222;;;:::o;7094:327::-;;7257:67;7321:2;7316:3;7257:67;:::i;:::-;7250:74;;7354:31;7350:1;7345:3;7341:11;7334:52;7412:2;7407:3;7403:12;7396:19;;7240:181;;;:::o;7427:374::-;;7590:67;7654:2;7649:3;7590:67;:::i;:::-;7583:74;;7687:34;7683:1;7678:3;7674:11;7667:55;7753:12;7748:2;7743:3;7739:12;7732:34;7792:2;7787:3;7783:12;7776:19;;7573:228;;;:::o;7807:118::-;7894:24;7912:5;7894:24;:::i;:::-;7889:3;7882:37;7872:53;;:::o;7931:271::-;;8083:93;8172:3;8163:6;8083:93;:::i;:::-;8076:100;;8193:3;8186:10;;8065:137;;;;:::o;8208:222::-;;8339:2;8328:9;8324:18;8316:26;;8352:71;8420:1;8409:9;8405:17;8396:6;8352:71;:::i;:::-;8306:124;;;;:::o;8436:442::-;;8623:2;8612:9;8608:18;8600:26;;8636:71;8704:1;8693:9;8689:17;8680:6;8636:71;:::i;:::-;8717:72;8785:2;8774:9;8770:18;8761:6;8717:72;:::i;:::-;8799;8867:2;8856:9;8852:18;8843:6;8799:72;:::i;:::-;8590:288;;;;;;:::o;8884:332::-;;9043:2;9032:9;9028:18;9020:26;;9056:71;9124:1;9113:9;9109:17;9100:6;9056:71;:::i;:::-;9137:72;9205:2;9194:9;9190:18;9181:6;9137:72;:::i;:::-;9010:206;;;;;:::o;9222:210::-;;9347:2;9336:9;9332:18;9324:26;;9360:65;9422:1;9411:9;9407:17;9398:6;9360:65;:::i;:::-;9314:118;;;;:::o;9438:313::-;;9589:2;9578:9;9574:18;9566:26;;9638:9;9632:4;9628:20;9624:1;9613:9;9609:17;9602:47;9666:78;9739:4;9730:6;9666:78;:::i;:::-;9658:86;;9556:195;;;;:::o;9757:419::-;;9961:2;9950:9;9946:18;9938:26;;10010:9;10004:4;10000:20;9996:1;9985:9;9981:17;9974:47;10038:131;10164:4;10038:131;:::i;:::-;10030:139;;9928:248;;;:::o;10182:419::-;;10386:2;10375:9;10371:18;10363:26;;10435:9;10429:4;10425:20;10421:1;10410:9;10406:17;10399:47;10463:131;10589:4;10463:131;:::i;:::-;10455:139;;10353:248;;;:::o;10607:419::-;;10811:2;10800:9;10796:18;10788:26;;10860:9;10854:4;10850:20;10846:1;10835:9;10831:17;10824:47;10888:131;11014:4;10888:131;:::i;:::-;10880:139;;10778:248;;;:::o;11032:419::-;;11236:2;11225:9;11221:18;11213:26;;11285:9;11279:4;11275:20;11271:1;11260:9;11256:17;11249:47;11313:131;11439:4;11313:131;:::i;:::-;11305:139;;11203:248;;;:::o;11457:419::-;;11661:2;11650:9;11646:18;11638:26;;11710:9;11704:4;11700:20;11696:1;11685:9;11681:17;11674:47;11738:131;11864:4;11738:131;:::i;:::-;11730:139;;11628:248;;;:::o;11882:419::-;;12086:2;12075:9;12071:18;12063:26;;12135:9;12129:4;12125:20;12121:1;12110:9;12106:17;12099:47;12163:131;12289:4;12163:131;:::i;:::-;12155:139;;12053:248;;;:::o;12307:419::-;;12511:2;12500:9;12496:18;12488:26;;12560:9;12554:4;12550:20;12546:1;12535:9;12531:17;12524:47;12588:131;12714:4;12588:131;:::i;:::-;12580:139;;12478:248;;;:::o;12732:419::-;;12936:2;12925:9;12921:18;12913:26;;12985:9;12979:4;12975:20;12971:1;12960:9;12956:17;12949:47;13013:131;13139:4;13013:131;:::i;:::-;13005:139;;12903:248;;;:::o;13157:419::-;;13361:2;13350:9;13346:18;13338:26;;13410:9;13404:4;13400:20;13396:1;13385:9;13381:17;13374:47;13438:131;13564:4;13438:131;:::i;:::-;13430:139;;13328:248;;;:::o;13582:419::-;;13786:2;13775:9;13771:18;13763:26;;13835:9;13829:4;13825:20;13821:1;13810:9;13806:17;13799:47;13863:131;13989:4;13863:131;:::i;:::-;13855:139;;13753:248;;;:::o;14007:419::-;;14211:2;14200:9;14196:18;14188:26;;14260:9;14254:4;14250:20;14246:1;14235:9;14231:17;14224:47;14288:131;14414:4;14288:131;:::i;:::-;14280:139;;14178:248;;;:::o;14432:222::-;;14563:2;14552:9;14548:18;14540:26;;14576:71;14644:1;14633:9;14629:17;14620:6;14576:71;:::i;:::-;14530:124;;;;:::o;14660:98::-;;14745:5;14739:12;14729:22;;14718:40;;;:::o;14764:99::-;;14850:5;14844:12;14834:22;;14823:40;;;:::o;14869:147::-;;15007:3;14992:18;;14982:34;;;;:::o;15022:169::-;;15140:6;15135:3;15128:19;15180:4;15175:3;15171:14;15156:29;;15118:73;;;;:::o;15197:305::-;;15256:20;15274:1;15256:20;:::i;:::-;15251:25;;15290:20;15308:1;15290:20;:::i;:::-;15285:25;;15444:1;15376:66;15372:74;15369:1;15366:81;15363:2;;;15450:18;;:::i;:::-;15363:2;15494:1;15491;15487:9;15480:16;;15241:261;;;;:::o;15508:185::-;;15565:20;15583:1;15565:20;:::i;:::-;15560:25;;15599:20;15617:1;15599:20;:::i;:::-;15594:25;;15638:1;15628:2;;15643:18;;:::i;:::-;15628:2;15685:1;15682;15678:9;15673:14;;15550:143;;;;:::o;15699:848::-;;;15791:6;15782:15;;15815:5;15806:14;;15829:712;15850:1;15840:8;15837:15;15829:712;;;15945:4;15940:3;15936:14;15930:4;15927:24;15924:2;;;15954:18;;:::i;:::-;15924:2;16004:1;15994:8;15990:16;15987:2;;;16419:4;16412:5;16408:16;16399:25;;15987:2;16469:4;16463;16459:15;16451:23;;16499:32;16522:8;16499:32;:::i;:::-;16487:44;;15829:712;;;15772:775;;;;;;;:::o;16553:285::-;;16637:23;16655:4;16637:23;:::i;:::-;16629:31;;16681:27;16699:8;16681:27;:::i;:::-;16669:39;;16727:104;16764:66;16754:8;16748:4;16727:104;:::i;:::-;16718:113;;16619:219;;;;:::o;16844:1073::-;;17089:8;17079:2;;17110:1;17101:10;;17112:5;;17079:2;17138:4;17128:2;;17155:1;17146:10;;17157:5;;17128:2;17224:4;17272:1;17267:27;;;;17308:1;17303:191;;;;17217:277;;17267:27;17285:1;17276:10;;17287:5;;;17303:191;17348:3;17338:8;17335:17;17332:2;;;17355:18;;:::i;:::-;17332:2;17404:8;17401:1;17397:16;17388:25;;17439:3;17432:5;17429:14;17426:2;;;17446:18;;:::i;:::-;17426:2;17479:5;;;17217:277;;17603:2;17593:8;17590:16;17584:3;17578:4;17575:13;17571:36;17553:2;17543:8;17540:16;17535:2;17529:4;17526:12;17522:35;17506:111;17503:2;;;17659:8;17653:4;17649:19;17640:28;;17694:3;17687:5;17684:14;17681:2;;;17701:18;;:::i;:::-;17681:2;17734:5;;17503:2;17774:42;17812:3;17802:8;17796:4;17793:1;17774:42;:::i;:::-;17759:57;;;;17848:4;17843:3;17839:14;17832:5;17829:25;17826:2;;;17857:18;;:::i;:::-;17826:2;17906:4;17899:5;17895:16;17886:25;;16904:1013;;;;;;:::o;17923:348::-;;17986:20;18004:1;17986:20;:::i;:::-;17981:25;;18020:20;18038:1;18020:20;:::i;:::-;18015:25;;18208:1;18140:66;18136:74;18133:1;18130:81;18125:1;18118:9;18111:17;18107:105;18104:2;;;18215:18;;:::i;:::-;18104:2;18263:1;18260;18256:9;18245:20;;17971:300;;;;:::o;18277:96::-;;18343:24;18361:5;18343:24;:::i;:::-;18332:35;;18322:51;;;:::o;18379:90::-;;18456:5;18449:13;18442:21;18431:32;;18421:48;;;:::o;18475:126::-;;18552:42;18545:5;18541:54;18530:65;;18520:81;;;:::o;18607:77::-;;18673:5;18662:16;;18652:32;;;:::o;18690:86::-;;18765:4;18758:5;18754:16;18743:27;;18733:43;;;:::o;18782:307::-;18850:1;18860:113;18874:6;18871:1;18868:13;18860:113;;;18959:1;18954:3;18950:11;18944:18;18940:1;18935:3;18931:11;18924:39;18896:2;18893:1;18889:10;18884:15;;18860:113;;;18991:6;18988:1;18985:13;18982:2;;;19071:1;19062:6;19057:3;19053:16;19046:27;18982:2;18831:258;;;;:::o;19095:180::-;19143:77;19140:1;19133:88;19240:4;19237:1;19230:15;19264:4;19261:1;19254:15;19281:180;19329:77;19326:1;19319:88;19426:4;19423:1;19416:15;19450:4;19447:1;19440:15;19467:102;;19559:2;19555:7;19550:2;19543:5;19539:14;19535:28;19525:38;;19515:54;;;:::o;19575:102::-;;19664:5;19661:1;19657:13;19636:34;;19626:51;;;:::o;19683:122::-;19756:24;19774:5;19756:24;:::i;:::-;19749:5;19746:35;19736:2;;19795:1;19792;19785:12;19736:2;19726:79;:::o;19811:116::-;19881:21;19896:5;19881:21;:::i;:::-;19874:5;19871:32;19861:2;;19917:1;19914;19907:12;19861:2;19851:76;:::o;19933:122::-;20006:24;20024:5;20006:24;:::i;:::-;19999:5;19996:35;19986:2;;20045:1;20042;20035:12;19986:2;19976:79;:::o;20061:118::-;20132:22;20148:5;20132:22;:::i;:::-;20125:5;20122:33;20112:2;;20169:1;20166;20159:12;20112:2;20102:77;:::o
Swarm Source
ipfs://3b6e84f7d2271f50ef9da4e5ebca563791ecc19df1bf9fa6f16654ff2aacdca2
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.