Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 24 from a total of 24 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Emergency Recove... | 24196693 | 37 days ago | IN | 0 ETH | 0.00009485 | ||||
| Emergency Recove... | 24196692 | 37 days ago | IN | 0 ETH | 0.00009699 | ||||
| Execute Withdraw... | 24196515 | 37 days ago | IN | 0 ETH | 0.00017167 | ||||
| Approve Withdraw... | 24196505 | 37 days ago | IN | 0 ETH | 0.00000214 | ||||
| Request Withdraw... | 24196503 | 37 days ago | IN | 0 ETH | 0.00035622 | ||||
| Claim Monthly Re... | 24196500 | 37 days ago | IN | 0 ETH | 0.00029492 | ||||
| Deposit | 24196443 | 37 days ago | IN | 0 ETH | 0.00023357 | ||||
| Execute Withdraw... | 24196439 | 37 days ago | IN | 0 ETH | 0.00017324 | ||||
| Approve Withdraw... | 24196428 | 37 days ago | IN | 0 ETH | 0.0000023 | ||||
| Request Withdraw... | 24196426 | 37 days ago | IN | 0 ETH | 0.00035651 | ||||
| Claim Monthly Re... | 24196424 | 37 days ago | IN | 0 ETH | 0.00029722 | ||||
| Deposit | 24196401 | 37 days ago | IN | 0 ETH | 0.00023642 | ||||
| Execute Withdraw... | 24195594 | 37 days ago | IN | 0 ETH | 0.00017319 | ||||
| Approve Withdraw... | 24195588 | 37 days ago | IN | 0 ETH | 0.00000216 | ||||
| Request Withdraw... | 24195543 | 37 days ago | IN | 0 ETH | 0.00035622 | ||||
| Claim Monthly Re... | 24195541 | 37 days ago | IN | 0 ETH | 0.00029691 | ||||
| Deposit | 24195517 | 37 days ago | IN | 0 ETH | 0.00027062 | ||||
| Execute Withdraw... | 24195513 | 37 days ago | IN | 0 ETH | 0.00017183 | ||||
| Approve Withdraw... | 24195504 | 37 days ago | IN | 0 ETH | 0.00000218 | ||||
| Request Withdraw... | 24195493 | 37 days ago | IN | 0 ETH | 0.00035639 | ||||
| Claim Monthly Re... | 24195491 | 37 days ago | IN | 0 ETH | 0.00029469 | ||||
| Deposit | 24195468 | 37 days ago | IN | 0 ETH | 0.0003901 | ||||
| Add Supported To... | 24195395 | 37 days ago | IN | 0 ETH | 0.00000144 | ||||
| Add Supported To... | 24195393 | 37 days ago | IN | 0 ETH | 0.00000136 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
InvestmentContract
Compiler Version
v0.8.31+commit.fd3a2265
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2026-01-09
*/
/**
*Submitted for verification at Etherscan.io on 2026-01-08
*/
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: @openzeppelin/contracts/interfaces/IERC20.sol
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC20.sol)
pragma solidity >=0.4.16;
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/interfaces/IERC165.sol
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC165.sol)
pragma solidity >=0.4.16;
// File: @openzeppelin/contracts/interfaces/IERC1363.sol
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1363.sol)
pragma solidity >=0.6.2;
/**
* @title IERC1363
* @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
*
* Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
* after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
*/
interface IERC1363 is IERC20, IERC165 {
/*
* Note: the ERC-165 identifier for this interface is 0xb0202a11.
* 0xb0202a11 ===
* bytes4(keccak256('transferAndCall(address,uint256)')) ^
* bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
* bytes4(keccak256('approveAndCall(address,uint256)')) ^
* bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
*/
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferAndCall(address to, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @param data Additional data with no specified format, sent in call to `to`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param from The address which you want to send tokens from.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferFromAndCall(address from, address to, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param from The address which you want to send tokens from.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @param data Additional data with no specified format, sent in call to `to`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
* @param spender The address which will spend the funds.
* @param value The amount of tokens to be spent.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function approveAndCall(address spender, uint256 value) external returns (bool);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
* @param spender The address which will spend the funds.
* @param value The amount of tokens to be spent.
* @param data Additional data with no specified format, sent in call to `spender`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.20;
/**
* @title SafeERC20
* @dev Wrappers around ERC-20 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 {
/**
* @dev An operation with an ERC-20 token failed.
*/
error SafeERC20FailedOperation(address token);
/**
* @dev Indicates a failed `decreaseAllowance` request.
*/
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
/**
* @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.
*/
function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {
return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value)));
}
/**
* @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.
*/
function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {
return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*
* IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
* smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
* this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
* that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
* value, non-reverting calls are assumed to be successful.
*
* IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
* smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
* this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
* that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*
* NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function
* only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being
* set here.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no
* code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* Reverts if the returned value is other than `true`.
*/
function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
if (to.code.length == 0) {
safeTransfer(token, to, value);
} else if (!token.transferAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target
* has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* Reverts if the returned value is other than `true`.
*/
function transferFromAndCallRelaxed(
IERC1363 token,
address from,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransferFrom(token, from, to, value);
} else if (!token.transferFromAndCall(from, to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no
* code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.
* Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}
* once without retrying, and relies on the returned value to be true.
*
* Reverts if the returned value is other than `true`.
*/
function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
if (to.code.length == 0) {
forceApprove(token, to, value);
} else if (!token.approveAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
// bubble errors
if iszero(success) {
let ptr := mload(0x40)
returndatacopy(ptr, 0, returndatasize())
revert(ptr, returndatasize())
}
returnSize := returndatasize()
returnValue := mload(0)
}
if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.
*/
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
bool success;
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
returnSize := returndatasize()
returnValue := mload(0)
}
return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);
}
}
// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
* consider using {ReentrancyGuardTransient} instead.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be NOT_ENTERED
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
_status = ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}
// File: contracts/aiqv2.sol
pragma solidity ^0.8.20;
interface IERC20Metadata {
function decimals() external view returns (uint8);
}
contract InvestmentContract is ReentrancyGuard {
using SafeERC20 for IERC20;
address public owner;
address public beneficiary;
bool public paused;
// TEST VALUES (change for production)
uint256 public constant ADJUSTMENT_PERIOD = 1 minutes; //7 days
uint256 public constant CLAIM_INTERVAL = 1 minutes; //30 days
uint256 public constant WITHDRAWAL_LOCKUP = 3 * CLAIM_INTERVAL; //90 days
uint256 public constant WITHDRAWAL_APPROVAL_DELAY = 1 minutes; //7 days
uint256 public constant MONTHLY_RETURN_RATE = 5;
uint256 public constant MIN_DEPOSIT = 10;
mapping(address => bool) public supportedTokens;
struct Investment {
uint256 depositAmount;
address tokenAddress;
uint256 depositTimestamp;
uint256 lastClaimTimestamp;
uint256 totalClaimed;
uint256 claimCount;
bool active;
}
struct WithdrawalRequest {
address user;
uint256 amount;
address tokenAddress;
uint256 requestTimestamp;
uint256 approvalTimestamp;
bool approved;
bool executed;
}
struct WithdrawalView {
address user;
uint256 amount;
address tokenAddress;
uint256 requestTimestamp;
uint256 approvalTimestamp;
bool approved;
bool executed;
uint256 executableAt;
}
mapping(address => Investment) public investments;
mapping(address => WithdrawalRequest) public pendingWithdrawals;
address[] public pendingWithdrawalList;
event DepositReceived(address indexed user, uint256 amount, address indexed token, uint256 timestamp);
event ReturnClaimed(address indexed user, uint256 amount, uint256 claimNumber);
event WithdrawalRequested(address indexed user, uint256 amount, uint256 requestTimestamp);
event WithdrawalApproved(address indexed user, uint256 approvalTimestamp);
event WithdrawalExecuted(address indexed user, uint256 amount);
event WithdrawalCancelled(address indexed user);
event BeneficiaryUpdated(address indexed oldBeneficiary, address indexed newBeneficiary);
event TokenSupported(address indexed token, bool supported);
event Paused();
event Unpaused();
modifier onlyOwner() {
require(msg.sender == owner, "Only owner");
_;
}
modifier whenNotPaused() {
require(!paused, "Paused");
_;
}
constructor(address _beneficiary) {
require(_beneficiary != address(0), "Invalid beneficiary");
owner = msg.sender;
beneficiary = _beneficiary;
}
/* ================= OWNER ================= */
function setBeneficiary(address _newBeneficiary) external onlyOwner {
require(_newBeneficiary != address(0), "Invalid beneficiary");
emit BeneficiaryUpdated(beneficiary, _newBeneficiary);
beneficiary = _newBeneficiary;
}
function addSupportedToken(address _token, bool _supported) external onlyOwner {
supportedTokens[_token] = _supported;
emit TokenSupported(_token, _supported);
}
function pause() external onlyOwner {
paused = true;
emit Paused();
}
function unpause() external onlyOwner {
paused = false;
emit Unpaused();
}
function approveWithdrawal(address _user) external onlyOwner nonReentrant {
WithdrawalRequest storage r = pendingWithdrawals[_user];
require(r.user != address(0), "No request");
require(!r.approved && !r.executed, "Invalid state");
r.approved = true;
r.approvalTimestamp = block.timestamp;
emit WithdrawalApproved(_user, block.timestamp);
}
/* ================= CORE ================= */
function deposit(address _token, uint256 _amount)
external
whenNotPaused
nonReentrant
{
require(supportedTokens[_token], "Token not supported");
require(!investments[msg.sender].active, "Already invested");
require(pendingWithdrawals[msg.sender].user == address(0), "Pending withdrawal");
uint8 decimals = 18;
try IERC20Metadata(_token).decimals() returns (uint8 d) {
decimals = d;
} catch {}
require(_amount >= MIN_DEPOSIT * (10 ** decimals), "Below minimum");
IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);
IERC20(_token).safeTransfer(beneficiary, _amount);
investments[msg.sender] = Investment({
depositAmount: _amount,
tokenAddress: _token,
depositTimestamp: block.timestamp,
lastClaimTimestamp: 0,
totalClaimed: 0,
claimCount: 0,
active: true
});
emit DepositReceived(msg.sender, _amount, _token, block.timestamp);
}
function claimMonthlyReturn() external whenNotPaused nonReentrant {
Investment storage inv = investments[msg.sender];
require(inv.active, "No investment");
WithdrawalRequest memory r = pendingWithdrawals[msg.sender];
require(!r.approved, "Withdrawal approved");
uint256 start = inv.lastClaimTimestamp == 0
? inv.depositTimestamp + ADJUSTMENT_PERIOD
: inv.lastClaimTimestamp;
require(block.timestamp >= start + CLAIM_INTERVAL, "Too early");
uint256 intervals = (block.timestamp - start) / CLAIM_INTERVAL;
uint256 reward = (inv.depositAmount * MONTHLY_RETURN_RATE * intervals) / 100;
IERC20(inv.tokenAddress).safeTransfer(msg.sender, reward);
inv.lastClaimTimestamp = start + intervals * CLAIM_INTERVAL;
inv.totalClaimed += reward;
inv.claimCount += intervals;
emit ReturnClaimed(msg.sender, reward, inv.claimCount);
}
function requestWithdrawal() external whenNotPaused nonReentrant {
Investment storage inv = investments[msg.sender];
require(inv.active, "No investment");
require(pendingWithdrawals[msg.sender].user == address(0), "Already requested");
require(
block.timestamp >= inv.depositTimestamp + ADJUSTMENT_PERIOD + WITHDRAWAL_LOCKUP,
"Locked"
);
pendingWithdrawals[msg.sender] = WithdrawalRequest({
user: msg.sender,
amount: inv.depositAmount,
tokenAddress: inv.tokenAddress,
requestTimestamp: block.timestamp,
approvalTimestamp: 0,
approved: false,
executed: false
});
pendingWithdrawalList.push(msg.sender);
emit WithdrawalRequested(msg.sender, inv.depositAmount, block.timestamp);
}
function executeWithdrawal() external whenNotPaused nonReentrant {
WithdrawalRequest storage r = pendingWithdrawals[msg.sender];
require(r.approved && !r.executed, "Invalid state");
require(block.timestamp >= r.approvalTimestamp + WITHDRAWAL_APPROVAL_DELAY, "Wait");
investments[msg.sender].active = false;
r.executed = true;
IERC20(r.tokenAddress).safeTransfer(msg.sender, r.amount);
// clean up pending withdrawal state
delete pendingWithdrawals[msg.sender];
_removeFromPendingList(msg.sender);
emit WithdrawalExecuted(msg.sender, r.amount);
}
function cancelWithdrawalRequest() external nonReentrant {
WithdrawalRequest storage r = pendingWithdrawals[msg.sender];
require(r.user != address(0) && !r.approved, "Cannot cancel");
delete pendingWithdrawals[msg.sender];
_removeFromPendingList(msg.sender);
emit WithdrawalCancelled(msg.sender);
}
/* ================= INTERNAL ================= */
function _removeFromPendingList(address user) internal {
uint256 len = pendingWithdrawalList.length;
for (uint256 i = 0; i < len; i++) {
if (pendingWithdrawalList[i] == user) {
pendingWithdrawalList[i] = pendingWithdrawalList[len - 1];
pendingWithdrawalList.pop();
break;
}
}
}
/* ================= VIEWS ================= */
function getPendingWithdrawalsCount() external view returns (uint256) {
return pendingWithdrawalList.length;
}
function getAllWithdrawalRequests()
external
view
returns (WithdrawalView[] memory)
{
uint256 len = pendingWithdrawalList.length;
WithdrawalView[] memory list = new WithdrawalView[](len);
for (uint256 i = 0; i < len; i++) {
address user = pendingWithdrawalList[i];
WithdrawalRequest memory r = pendingWithdrawals[user];
list[i] = WithdrawalView({
user: r.user,
amount: r.amount,
tokenAddress: r.tokenAddress,
requestTimestamp: r.requestTimestamp,
approvalTimestamp: r.approvalTimestamp,
approved: r.approved,
executed: r.executed,
executableAt: r.approvalTimestamp > 0
? r.approvalTimestamp + WITHDRAWAL_APPROVAL_DELAY
: 0
});
}
return list;
}
function emergencyRecoverTokens(address token, uint256 amount)
external
onlyOwner
{
IERC20(token).safeTransfer(owner, amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldBeneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"newBeneficiary","type":"address"}],"name":"BeneficiaryUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DepositReceived","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claimNumber","type":"uint256"}],"name":"ReturnClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bool","name":"supported","type":"bool"}],"name":"TokenSupported","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"approvalTimestamp","type":"uint256"}],"name":"WithdrawalApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"WithdrawalCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestTimestamp","type":"uint256"}],"name":"WithdrawalRequested","type":"event"},{"inputs":[],"name":"ADJUSTMENT_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLAIM_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_DEPOSIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MONTHLY_RETURN_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAWAL_APPROVAL_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAWAL_LOCKUP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_supported","type":"bool"}],"name":"addSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"approveWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"beneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelWithdrawalRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMonthlyReturn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyRecoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllWithdrawalRequests","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"requestTimestamp","type":"uint256"},{"internalType":"uint256","name":"approvalTimestamp","type":"uint256"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"executableAt","type":"uint256"}],"internalType":"struct InvestmentContract.WithdrawalView[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingWithdrawalsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investments","outputs":[{"internalType":"uint256","name":"depositAmount","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"depositTimestamp","type":"uint256"},{"internalType":"uint256","name":"lastClaimTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"},{"internalType":"uint256","name":"claimCount","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingWithdrawalList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingWithdrawals","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"requestTimestamp","type":"uint256"},{"internalType":"uint256","name":"approvalTimestamp","type":"uint256"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newBeneficiary","type":"address"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supportedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561000f575f5ffd5b5060405161399b38038061399b8339818101604052810190610031919061018a565b60015f819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161009d9061020f565b60405180910390fd5b3360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061022d565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61015982610130565b9050919050565b6101698161014f565b8114610173575f5ffd5b50565b5f8151905061018481610160565b92915050565b5f6020828403121561019f5761019e61012c565b5b5f6101ac84828501610176565b91505092915050565b5f82825260208201905092915050565b7f496e76616c69642062656e6566696369617279000000000000000000000000005f82015250565b5f6101f96013836101b5565b9150610204826101c5565b602082019050919050565b5f6020820190508181035f830152610226816101ed565b9050919050565b6137618061023a5f395ff3fe608060405234801561000f575f5ffd5b506004361061018b575f3560e01c80638456cb59116100dc578063dc92935311610095578063e714a0281161006f578063e714a028146103f3578063eada0839146103fd578063f3f437031461042d578063fa45aa00146104635761018b565b8063dc9293531461039b578063e1e158a5146103b9578063e5d07756146103d75761018b565b80638456cb591461030b57806385649766146103155780638da5cb5b1461033357806396b9886214610351578063d3b0f9b314610387578063dbaf2145146103915761018b565b806347e7ef24116101495780635c975abb116101235780635c975abb146102815780636356eaba1461029f57806368c4ac26146102bd5780636a529cce146102ed5761018b565b806347e7ef241461022b5780634914fb271461024757806349d3a0c1146102635761018b565b806273f0e01461018f5780631c31f710146101ad5780632609a9f3146101c957806338af3eed146101e75780633dcd2c1d146102055780633f4ba83a14610221575b5f5ffd5b61019761046d565b6040516101a4919061281e565b60405180910390f35b6101c760048036038101906101c29190612895565b610472565b005b6101d161062d565b6040516101de919061281e565b60405180910390f35b6101ef61063e565b6040516101fc91906128cf565b60405180910390f35b61021f600480360381019061021a9190612912565b610663565b005b610229610742565b005b61024560048036038101906102409190612912565b610819565b005b610261600480360381019061025c9190612895565b610d33565b005b61026b610f85565b604051610278919061281e565b60405180910390f35b610289610f8a565b604051610296919061296a565b60405180910390f35b6102a7610f9d565b6040516102b4919061281e565b60405180910390f35b6102d760048036038101906102d29190612895565b610fa2565b6040516102e4919061296a565b60405180910390f35b6102f5610fbf565b604051610302919061281e565b60405180910390f35b610313610fcb565b005b61031d6110a3565b60405161032a919061281e565b60405180910390f35b61033b6110a8565b60405161034891906128cf565b60405180910390f35b61036b60048036038101906103669190612895565b6110cd565b60405161037e9796959493929190612983565b60405180910390f35b61038f611136565b005b61039961156d565b005b6103a36119fa565b6040516103b09190612b66565b60405180910390f35b6103c1611ccc565b6040516103ce919061281e565b60405180910390f35b6103f160048036038101906103ec9190612bb0565b611cd1565b005b6103fb611e06565b005b61041760048036038101906104129190612bee565b612017565b60405161042491906128cf565b60405180910390f35b61044760048036038101906104429190612895565b612052565b60405161045a9796959493929190612c19565b60405180910390f35b61046b6120e7565b005b603c81565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f890612ce0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056690612d48565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe72eaf6addaa195f3c83095031dd08f3a96808dcf047babed1fe4e4f69d6c62260405160405180910390a38060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b603c600361063b9190612d93565b81565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e990612ce0565b60405180910390fd5b61073e60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166124309092919063ffffffff16565b5050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c890612ce0565b60405180910390fd5b5f600260146101000a81548160ff0219169083151502179055507fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693360405160405180910390a1565b600260149054906101000a900460ff1615610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086090612e1e565b60405180910390fd5b6108716124af565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190612e86565b60405180910390fd5b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206006015f9054906101000a900460ff1615610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e90612eee565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a90612f56565b60405180910390fd5b5f601290508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610ac057506040513d601f19601f82011682018060405250810190610abd9190612faa565b60015b15610aca57809150505b80600a610ad79190613104565b600a610ae39190612d93565b821015610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90613198565b60405180910390fd5b610b523330848673ffffffffffffffffffffffffffffffffffffffff166124f3909392919063ffffffff16565b610b9e60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff166124309092919063ffffffff16565b6040518060e001604052808381526020018473ffffffffffffffffffffffffffffffffffffffff1681526020014281526020015f81526020015f81526020015f81526020016001151581525060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f6101000a81548160ff0219169083151502179055509050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f479bff35fc5c06a799c91d4dce8d390eb731a9acb7fabdc535d7c9c5906bf57b8442604051610d1e9291906131b6565b60405180910390a350610d2f612575565b5050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990612ce0565b60405180910390fd5b610dca6124af565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613227565b60405180910390fd5b806005015f9054906101000a900460ff16158015610ec757508060050160019054906101000a900460ff16155b610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd9061328f565b60405180910390fd5b6001816005015f6101000a81548160ff0219169083151502179055504281600401819055508173ffffffffffffffffffffffffffffffffffffffff167f8ffbcb5e5bcb810975de2605ca8e4dbdbf14faffdacf75c660a9ac7b276f084242604051610f71919061281e565b60405180910390a250610f82612575565b50565b603c81565b600260149054906101000a900460ff1681565b600581565b6003602052805f5260405f205f915054906101000a900460ff1681565b5f600680549050905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190612ce0565b60405180910390fd5b6001600260146101000a81548160ff0219169083151502179055507f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a1565b603c81565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6004602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015490806004015490806005015490806006015f9054906101000a900460ff16905087565b600260149054906101000a900460ff1615611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612e1e565b60405180910390fd5b61118e6124af565b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050806006015f9054906101000a900460ff1661121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906132f7565b60405180910390fd5b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060e00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015f9054906101000a900460ff161515151581526020016005820160019054906101000a900460ff16151515158152505090508060a00151156113aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a19061335f565b60405180910390fd5b5f5f8360030154146113c05782600301546113d2565b603c83600201546113d1919061337d565b5b9050603c816113e1919061337d565b421015611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906133fa565b60405180910390fd5b5f603c82426114329190613418565b61143c9190613478565b90505f6064826005875f01546114529190612d93565b61145c9190612d93565b6114669190613478565b90506114b63382876001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124309092919063ffffffff16565b603c826114c39190612d93565b836114ce919061337d565b856003018190555080856004015f8282546114e9919061337d565b9250508190555081856005015f828254611503919061337d565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f9eb6ad036b583d67a9d59264fa4e88903248adefb4bf132d63d3bf890f028ecd8287600501546040516115569291906131b6565b60405180910390a2505050505061156b612575565b565b600260149054906101000a900460ff16156115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490612e1e565b60405180910390fd5b6115c56124af565b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050806006015f9054906101000a900460ff16611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c906132f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611718906134f2565b60405180910390fd5b603c600361172f9190612d93565b603c8260020154611740919061337d565b61174a919061337d565b42101561178c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117839061355a565b60405180910390fd5b6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001825f01548152602001826001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020014281526020015f81526020015f151581526020015f151581525060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff021916908315150217905550905050600633908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f24b91f4f47caf44230a57777a9be744924e82bf666f2d5702faf97df35e60f9f825f0154426040516119e79291906131b6565b60405180910390a2506119f8612575565b565b60605f60068054905090505f8167ffffffffffffffff811115611a2057611a1f613578565b5b604051908082528060200260200182016040528015611a5957816020015b611a46612799565b815260200190600190039081611a3e5790505b5090505f5f90505b82811015611cc3575f60068281548110611a7e57611a7d6135a5565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060e00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015f9054906101000a900460ff161515151581526020016005820160019054906101000a900460ff1615151515815250509050604051806101000160405280825f015173ffffffffffffffffffffffffffffffffffffffff16815260200182602001518152602001826040015173ffffffffffffffffffffffffffffffffffffffff16815260200182606001518152602001826080015181526020018260a00151151581526020018260c00151151581526020015f836080015111611c81575f611c93565b603c8360800151611c92919061337d565b5b815250848481518110611ca957611ca86135a5565b5b602002602001018190525050508080600101915050611a61565b50809250505090565b600a81565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5790612ce0565b60405180910390fd5b8060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fd86c88b4a367d9b81a6e00c9d3f7d01657bffef358fa8968c91c045ae99f0d5282604051611dfa919061296a565b60405180910390a25050565b611e0e6124af565b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611eba5750806005015f9054906101000a900460ff16155b611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef09061361c565b60405180910390fd5b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382015f9055600482015f9055600582015f6101000a81549060ff02191690556005820160016101000a81549060ff02191690555050611fc93361257e565b3373ffffffffffffffffffffffffffffffffffffffff167fc51fdb96728de385ec7859819e3997bc618362ef0dbca0ad051d856866cda3db60405160405180910390a250612015612575565b565b60068181548110612026575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015f9054906101000a900460ff16908060050160019054906101000a900460ff16905087565b600260149054906101000a900460ff1615612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e90612e1e565b60405180910390fd5b61213f6124af565b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050806005015f9054906101000a900460ff1680156121ab57508060050160019054906101000a900460ff16155b6121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e19061328f565b60405180910390fd5b603c81600401546121fb919061337d565b42101561223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490613684565b60405180910390fd5b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206006015f6101000a81548160ff02191690831515021790555060018160050160016101000a81548160ff021916908315150217905550612303338260010154836002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124309092919063ffffffff16565b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382015f9055600482015f9055600582015f6101000a81549060ff02191690556005820160016101000a81549060ff021916905550506123d33361257e565b3373ffffffffffffffffffffffffffffffffffffffff167f1131c2afe9ce72c59360d085f89bfdd088fcf4a3c93eec6cc5ff42f5d6b0801f826001015460405161241d919061281e565b60405180910390a25061242e612575565b565b6124aa838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016124639291906136a2565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126fe565b505050565b60025f54036124ea576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b61256f848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401612528939291906136c9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126fe565b50505050565b60015f81905550565b5f60068054905090505f5f90505b818110156126f9578273ffffffffffffffffffffffffffffffffffffffff16600682815481106125bf576125be6135a5565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036126ec5760066001836126119190613418565b81548110612622576126216135a5565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061265e5761265d6135a5565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060068054806126b5576126b46136fe565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556126f9565b808060010191505061258c565b505050565b5f5f60205f8451602086015f885af18061271d576040513d5f823e3d81fd5b3d92505f519150505f8214612736576001811415612751565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561279357836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161278a91906128cf565b60405180910390fd5b50505050565b6040518061010001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f151581526020015f151581526020015f81525090565b5f819050919050565b61281881612806565b82525050565b5f6020820190506128315f83018461280f565b92915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128648261283b565b9050919050565b6128748161285a565b811461287e575f5ffd5b50565b5f8135905061288f8161286b565b92915050565b5f602082840312156128aa576128a9612837565b5b5f6128b784828501612881565b91505092915050565b6128c98161285a565b82525050565b5f6020820190506128e25f8301846128c0565b92915050565b6128f181612806565b81146128fb575f5ffd5b50565b5f8135905061290c816128e8565b92915050565b5f5f6040838503121561292857612927612837565b5b5f61293585828601612881565b9250506020612946858286016128fe565b9150509250929050565b5f8115159050919050565b61296481612950565b82525050565b5f60208201905061297d5f83018461295b565b92915050565b5f60e0820190506129965f83018a61280f565b6129a360208301896128c0565b6129b0604083018861280f565b6129bd606083018761280f565b6129ca608083018661280f565b6129d760a083018561280f565b6129e460c083018461295b565b98975050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612a228161285a565b82525050565b612a3181612806565b82525050565b612a4081612950565b82525050565b61010082015f820151612a5b5f850182612a19565b506020820151612a6e6020850182612a28565b506040820151612a816040850182612a19565b506060820151612a946060850182612a28565b506080820151612aa76080850182612a28565b5060a0820151612aba60a0850182612a37565b5060c0820151612acd60c0850182612a37565b5060e0820151612ae060e0850182612a28565b50505050565b5f612af18383612a46565b6101008301905092915050565b5f602082019050919050565b5f612b14826129f0565b612b1e81856129fa565b9350612b2983612a0a565b805f5b83811015612b59578151612b408882612ae6565b9750612b4b83612afe565b925050600181019050612b2c565b5085935050505092915050565b5f6020820190508181035f830152612b7e8184612b0a565b905092915050565b612b8f81612950565b8114612b99575f5ffd5b50565b5f81359050612baa81612b86565b92915050565b5f5f60408385031215612bc657612bc5612837565b5b5f612bd385828601612881565b9250506020612be485828601612b9c565b9150509250929050565b5f60208284031215612c0357612c02612837565b5b5f612c10848285016128fe565b91505092915050565b5f60e082019050612c2c5f83018a6128c0565b612c39602083018961280f565b612c4660408301886128c0565b612c53606083018761280f565b612c60608083018661280f565b612c6d60a083018561295b565b612c7a60c083018461295b565b98975050505050505050565b5f82825260208201905092915050565b7f4f6e6c79206f776e6572000000000000000000000000000000000000000000005f82015250565b5f612cca600a83612c86565b9150612cd582612c96565b602082019050919050565b5f6020820190508181035f830152612cf781612cbe565b9050919050565b7f496e76616c69642062656e6566696369617279000000000000000000000000005f82015250565b5f612d32601383612c86565b9150612d3d82612cfe565b602082019050919050565b5f6020820190508181035f830152612d5f81612d26565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d9d82612806565b9150612da883612806565b9250828202612db681612806565b91508282048414831517612dcd57612dcc612d66565b5b5092915050565b7f50617573656400000000000000000000000000000000000000000000000000005f82015250565b5f612e08600683612c86565b9150612e1382612dd4565b602082019050919050565b5f6020820190508181035f830152612e3581612dfc565b9050919050565b7f546f6b656e206e6f7420737570706f72746564000000000000000000000000005f82015250565b5f612e70601383612c86565b9150612e7b82612e3c565b602082019050919050565b5f6020820190508181035f830152612e9d81612e64565b9050919050565b7f416c726561647920696e766573746564000000000000000000000000000000005f82015250565b5f612ed8601083612c86565b9150612ee382612ea4565b602082019050919050565b5f6020820190508181035f830152612f0581612ecc565b9050919050565b7f50656e64696e67207769746864726177616c00000000000000000000000000005f82015250565b5f612f40601283612c86565b9150612f4b82612f0c565b602082019050919050565b5f6020820190508181035f830152612f6d81612f34565b9050919050565b5f60ff82169050919050565b612f8981612f74565b8114612f93575f5ffd5b50565b5f81519050612fa481612f80565b92915050565b5f60208284031215612fbf57612fbe612837565b5b5f612fcc84828501612f96565b91505092915050565b5f8160011c9050919050565b5f5f8291508390505b600185111561302a5780860481111561300657613005612d66565b5b60018516156130155780820291505b808102905061302385612fd5565b9450612fea565b94509492505050565b5f8261304257600190506130fd565b8161304f575f90506130fd565b8160018114613065576002811461306f5761309e565b60019150506130fd565b60ff84111561308157613080612d66565b5b8360020a91508482111561309857613097612d66565b5b506130fd565b5060208310610133831016604e8410600b84101617156130d35782820a9050838111156130ce576130cd612d66565b5b6130fd565b6130e08484846001612fe1565b925090508184048111156130f7576130f6612d66565b5b81810290505b9392505050565b5f61310e82612806565b915061311983612f74565b92506131467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613033565b905092915050565b7f42656c6f77206d696e696d756d000000000000000000000000000000000000005f82015250565b5f613182600d83612c86565b915061318d8261314e565b602082019050919050565b5f6020820190508181035f8301526131af81613176565b9050919050565b5f6040820190506131c95f83018561280f565b6131d6602083018461280f565b9392505050565b7f4e6f2072657175657374000000000000000000000000000000000000000000005f82015250565b5f613211600a83612c86565b915061321c826131dd565b602082019050919050565b5f6020820190508181035f83015261323e81613205565b9050919050565b7f496e76616c6964207374617465000000000000000000000000000000000000005f82015250565b5f613279600d83612c86565b915061328482613245565b602082019050919050565b5f6020820190508181035f8301526132a68161326d565b9050919050565b7f4e6f20696e766573746d656e74000000000000000000000000000000000000005f82015250565b5f6132e1600d83612c86565b91506132ec826132ad565b602082019050919050565b5f6020820190508181035f83015261330e816132d5565b9050919050565b7f5769746864726177616c20617070726f766564000000000000000000000000005f82015250565b5f613349601383612c86565b915061335482613315565b602082019050919050565b5f6020820190508181035f8301526133768161333d565b9050919050565b5f61338782612806565b915061339283612806565b92508282019050808211156133aa576133a9612d66565b5b92915050565b7f546f6f206561726c7900000000000000000000000000000000000000000000005f82015250565b5f6133e4600983612c86565b91506133ef826133b0565b602082019050919050565b5f6020820190508181035f830152613411816133d8565b9050919050565b5f61342282612806565b915061342d83612806565b925082820390508181111561344557613444612d66565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61348282612806565b915061348d83612806565b92508261349d5761349c61344b565b5b828204905092915050565b7f416c7265616479207265717565737465640000000000000000000000000000005f82015250565b5f6134dc601183612c86565b91506134e7826134a8565b602082019050919050565b5f6020820190508181035f830152613509816134d0565b9050919050565b7f4c6f636b656400000000000000000000000000000000000000000000000000005f82015250565b5f613544600683612c86565b915061354f82613510565b602082019050919050565b5f6020820190508181035f83015261357181613538565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f43616e6e6f742063616e63656c000000000000000000000000000000000000005f82015250565b5f613606600d83612c86565b9150613611826135d2565b602082019050919050565b5f6020820190508181035f830152613633816135fa565b9050919050565b7f57616974000000000000000000000000000000000000000000000000000000005f82015250565b5f61366e600483612c86565b91506136798261363a565b602082019050919050565b5f6020820190508181035f83015261369b81613662565b9050919050565b5f6040820190506136b55f8301856128c0565b6136c2602083018461280f565b9392505050565b5f6060820190506136dc5f8301866128c0565b6136e960208301856128c0565b6136f6604083018461280f565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122072bf406289f0c6abe820ad0a341b11e9cbf08ff54663658760cfb6040e6ed4fb64736f6c634300081f0033000000000000000000000000a196ce2eba80c4f83730e4bbe5f9e77b807ec201
Deployed Bytecode
0x608060405234801561000f575f5ffd5b506004361061018b575f3560e01c80638456cb59116100dc578063dc92935311610095578063e714a0281161006f578063e714a028146103f3578063eada0839146103fd578063f3f437031461042d578063fa45aa00146104635761018b565b8063dc9293531461039b578063e1e158a5146103b9578063e5d07756146103d75761018b565b80638456cb591461030b57806385649766146103155780638da5cb5b1461033357806396b9886214610351578063d3b0f9b314610387578063dbaf2145146103915761018b565b806347e7ef24116101495780635c975abb116101235780635c975abb146102815780636356eaba1461029f57806368c4ac26146102bd5780636a529cce146102ed5761018b565b806347e7ef241461022b5780634914fb271461024757806349d3a0c1146102635761018b565b806273f0e01461018f5780631c31f710146101ad5780632609a9f3146101c957806338af3eed146101e75780633dcd2c1d146102055780633f4ba83a14610221575b5f5ffd5b61019761046d565b6040516101a4919061281e565b60405180910390f35b6101c760048036038101906101c29190612895565b610472565b005b6101d161062d565b6040516101de919061281e565b60405180910390f35b6101ef61063e565b6040516101fc91906128cf565b60405180910390f35b61021f600480360381019061021a9190612912565b610663565b005b610229610742565b005b61024560048036038101906102409190612912565b610819565b005b610261600480360381019061025c9190612895565b610d33565b005b61026b610f85565b604051610278919061281e565b60405180910390f35b610289610f8a565b604051610296919061296a565b60405180910390f35b6102a7610f9d565b6040516102b4919061281e565b60405180910390f35b6102d760048036038101906102d29190612895565b610fa2565b6040516102e4919061296a565b60405180910390f35b6102f5610fbf565b604051610302919061281e565b60405180910390f35b610313610fcb565b005b61031d6110a3565b60405161032a919061281e565b60405180910390f35b61033b6110a8565b60405161034891906128cf565b60405180910390f35b61036b60048036038101906103669190612895565b6110cd565b60405161037e9796959493929190612983565b60405180910390f35b61038f611136565b005b61039961156d565b005b6103a36119fa565b6040516103b09190612b66565b60405180910390f35b6103c1611ccc565b6040516103ce919061281e565b60405180910390f35b6103f160048036038101906103ec9190612bb0565b611cd1565b005b6103fb611e06565b005b61041760048036038101906104129190612bee565b612017565b60405161042491906128cf565b60405180910390f35b61044760048036038101906104429190612895565b612052565b60405161045a9796959493929190612c19565b60405180910390f35b61046b6120e7565b005b603c81565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f890612ce0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056690612d48565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe72eaf6addaa195f3c83095031dd08f3a96808dcf047babed1fe4e4f69d6c62260405160405180910390a38060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b603c600361063b9190612d93565b81565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e990612ce0565b60405180910390fd5b61073e60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166124309092919063ffffffff16565b5050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c890612ce0565b60405180910390fd5b5f600260146101000a81548160ff0219169083151502179055507fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693360405160405180910390a1565b600260149054906101000a900460ff1615610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086090612e1e565b60405180910390fd5b6108716124af565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190612e86565b60405180910390fd5b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206006015f9054906101000a900460ff1615610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e90612eee565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a90612f56565b60405180910390fd5b5f601290508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610ac057506040513d601f19601f82011682018060405250810190610abd9190612faa565b60015b15610aca57809150505b80600a610ad79190613104565b600a610ae39190612d93565b821015610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90613198565b60405180910390fd5b610b523330848673ffffffffffffffffffffffffffffffffffffffff166124f3909392919063ffffffff16565b610b9e60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff166124309092919063ffffffff16565b6040518060e001604052808381526020018473ffffffffffffffffffffffffffffffffffffffff1681526020014281526020015f81526020015f81526020015f81526020016001151581525060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f6101000a81548160ff0219169083151502179055509050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f479bff35fc5c06a799c91d4dce8d390eb731a9acb7fabdc535d7c9c5906bf57b8442604051610d1e9291906131b6565b60405180910390a350610d2f612575565b5050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990612ce0565b60405180910390fd5b610dca6124af565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613227565b60405180910390fd5b806005015f9054906101000a900460ff16158015610ec757508060050160019054906101000a900460ff16155b610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd9061328f565b60405180910390fd5b6001816005015f6101000a81548160ff0219169083151502179055504281600401819055508173ffffffffffffffffffffffffffffffffffffffff167f8ffbcb5e5bcb810975de2605ca8e4dbdbf14faffdacf75c660a9ac7b276f084242604051610f71919061281e565b60405180910390a250610f82612575565b50565b603c81565b600260149054906101000a900460ff1681565b600581565b6003602052805f5260405f205f915054906101000a900460ff1681565b5f600680549050905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190612ce0565b60405180910390fd5b6001600260146101000a81548160ff0219169083151502179055507f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a1565b603c81565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6004602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015490806004015490806005015490806006015f9054906101000a900460ff16905087565b600260149054906101000a900460ff1615611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612e1e565b60405180910390fd5b61118e6124af565b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050806006015f9054906101000a900460ff1661121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906132f7565b60405180910390fd5b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060e00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015f9054906101000a900460ff161515151581526020016005820160019054906101000a900460ff16151515158152505090508060a00151156113aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a19061335f565b60405180910390fd5b5f5f8360030154146113c05782600301546113d2565b603c83600201546113d1919061337d565b5b9050603c816113e1919061337d565b421015611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906133fa565b60405180910390fd5b5f603c82426114329190613418565b61143c9190613478565b90505f6064826005875f01546114529190612d93565b61145c9190612d93565b6114669190613478565b90506114b63382876001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124309092919063ffffffff16565b603c826114c39190612d93565b836114ce919061337d565b856003018190555080856004015f8282546114e9919061337d565b9250508190555081856005015f828254611503919061337d565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f9eb6ad036b583d67a9d59264fa4e88903248adefb4bf132d63d3bf890f028ecd8287600501546040516115569291906131b6565b60405180910390a2505050505061156b612575565b565b600260149054906101000a900460ff16156115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490612e1e565b60405180910390fd5b6115c56124af565b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050806006015f9054906101000a900460ff16611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c906132f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611718906134f2565b60405180910390fd5b603c600361172f9190612d93565b603c8260020154611740919061337d565b61174a919061337d565b42101561178c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117839061355a565b60405180910390fd5b6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001825f01548152602001826001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020014281526020015f81526020015f151581526020015f151581525060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff021916908315150217905550905050600633908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f24b91f4f47caf44230a57777a9be744924e82bf666f2d5702faf97df35e60f9f825f0154426040516119e79291906131b6565b60405180910390a2506119f8612575565b565b60605f60068054905090505f8167ffffffffffffffff811115611a2057611a1f613578565b5b604051908082528060200260200182016040528015611a5957816020015b611a46612799565b815260200190600190039081611a3e5790505b5090505f5f90505b82811015611cc3575f60068281548110611a7e57611a7d6135a5565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060e00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015f9054906101000a900460ff161515151581526020016005820160019054906101000a900460ff1615151515815250509050604051806101000160405280825f015173ffffffffffffffffffffffffffffffffffffffff16815260200182602001518152602001826040015173ffffffffffffffffffffffffffffffffffffffff16815260200182606001518152602001826080015181526020018260a00151151581526020018260c00151151581526020015f836080015111611c81575f611c93565b603c8360800151611c92919061337d565b5b815250848481518110611ca957611ca86135a5565b5b602002602001018190525050508080600101915050611a61565b50809250505090565b600a81565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5790612ce0565b60405180910390fd5b8060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fd86c88b4a367d9b81a6e00c9d3f7d01657bffef358fa8968c91c045ae99f0d5282604051611dfa919061296a565b60405180910390a25050565b611e0e6124af565b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611eba5750806005015f9054906101000a900460ff16155b611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef09061361c565b60405180910390fd5b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382015f9055600482015f9055600582015f6101000a81549060ff02191690556005820160016101000a81549060ff02191690555050611fc93361257e565b3373ffffffffffffffffffffffffffffffffffffffff167fc51fdb96728de385ec7859819e3997bc618362ef0dbca0ad051d856866cda3db60405160405180910390a250612015612575565b565b60068181548110612026575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015f9054906101000a900460ff16908060050160019054906101000a900460ff16905087565b600260149054906101000a900460ff1615612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e90612e1e565b60405180910390fd5b61213f6124af565b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050806005015f9054906101000a900460ff1680156121ab57508060050160019054906101000a900460ff16155b6121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e19061328f565b60405180910390fd5b603c81600401546121fb919061337d565b42101561223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490613684565b60405180910390fd5b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206006015f6101000a81548160ff02191690831515021790555060018160050160016101000a81548160ff021916908315150217905550612303338260010154836002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124309092919063ffffffff16565b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382015f9055600482015f9055600582015f6101000a81549060ff02191690556005820160016101000a81549060ff021916905550506123d33361257e565b3373ffffffffffffffffffffffffffffffffffffffff167f1131c2afe9ce72c59360d085f89bfdd088fcf4a3c93eec6cc5ff42f5d6b0801f826001015460405161241d919061281e565b60405180910390a25061242e612575565b565b6124aa838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016124639291906136a2565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126fe565b505050565b60025f54036124ea576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b61256f848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401612528939291906136c9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126fe565b50505050565b60015f81905550565b5f60068054905090505f5f90505b818110156126f9578273ffffffffffffffffffffffffffffffffffffffff16600682815481106125bf576125be6135a5565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036126ec5760066001836126119190613418565b81548110612622576126216135a5565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061265e5761265d6135a5565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060068054806126b5576126b46136fe565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556126f9565b808060010191505061258c565b505050565b5f5f60205f8451602086015f885af18061271d576040513d5f823e3d81fd5b3d92505f519150505f8214612736576001811415612751565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561279357836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161278a91906128cf565b60405180910390fd5b50505050565b6040518061010001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f151581526020015f151581526020015f81525090565b5f819050919050565b61281881612806565b82525050565b5f6020820190506128315f83018461280f565b92915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128648261283b565b9050919050565b6128748161285a565b811461287e575f5ffd5b50565b5f8135905061288f8161286b565b92915050565b5f602082840312156128aa576128a9612837565b5b5f6128b784828501612881565b91505092915050565b6128c98161285a565b82525050565b5f6020820190506128e25f8301846128c0565b92915050565b6128f181612806565b81146128fb575f5ffd5b50565b5f8135905061290c816128e8565b92915050565b5f5f6040838503121561292857612927612837565b5b5f61293585828601612881565b9250506020612946858286016128fe565b9150509250929050565b5f8115159050919050565b61296481612950565b82525050565b5f60208201905061297d5f83018461295b565b92915050565b5f60e0820190506129965f83018a61280f565b6129a360208301896128c0565b6129b0604083018861280f565b6129bd606083018761280f565b6129ca608083018661280f565b6129d760a083018561280f565b6129e460c083018461295b565b98975050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612a228161285a565b82525050565b612a3181612806565b82525050565b612a4081612950565b82525050565b61010082015f820151612a5b5f850182612a19565b506020820151612a6e6020850182612a28565b506040820151612a816040850182612a19565b506060820151612a946060850182612a28565b506080820151612aa76080850182612a28565b5060a0820151612aba60a0850182612a37565b5060c0820151612acd60c0850182612a37565b5060e0820151612ae060e0850182612a28565b50505050565b5f612af18383612a46565b6101008301905092915050565b5f602082019050919050565b5f612b14826129f0565b612b1e81856129fa565b9350612b2983612a0a565b805f5b83811015612b59578151612b408882612ae6565b9750612b4b83612afe565b925050600181019050612b2c565b5085935050505092915050565b5f6020820190508181035f830152612b7e8184612b0a565b905092915050565b612b8f81612950565b8114612b99575f5ffd5b50565b5f81359050612baa81612b86565b92915050565b5f5f60408385031215612bc657612bc5612837565b5b5f612bd385828601612881565b9250506020612be485828601612b9c565b9150509250929050565b5f60208284031215612c0357612c02612837565b5b5f612c10848285016128fe565b91505092915050565b5f60e082019050612c2c5f83018a6128c0565b612c39602083018961280f565b612c4660408301886128c0565b612c53606083018761280f565b612c60608083018661280f565b612c6d60a083018561295b565b612c7a60c083018461295b565b98975050505050505050565b5f82825260208201905092915050565b7f4f6e6c79206f776e6572000000000000000000000000000000000000000000005f82015250565b5f612cca600a83612c86565b9150612cd582612c96565b602082019050919050565b5f6020820190508181035f830152612cf781612cbe565b9050919050565b7f496e76616c69642062656e6566696369617279000000000000000000000000005f82015250565b5f612d32601383612c86565b9150612d3d82612cfe565b602082019050919050565b5f6020820190508181035f830152612d5f81612d26565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d9d82612806565b9150612da883612806565b9250828202612db681612806565b91508282048414831517612dcd57612dcc612d66565b5b5092915050565b7f50617573656400000000000000000000000000000000000000000000000000005f82015250565b5f612e08600683612c86565b9150612e1382612dd4565b602082019050919050565b5f6020820190508181035f830152612e3581612dfc565b9050919050565b7f546f6b656e206e6f7420737570706f72746564000000000000000000000000005f82015250565b5f612e70601383612c86565b9150612e7b82612e3c565b602082019050919050565b5f6020820190508181035f830152612e9d81612e64565b9050919050565b7f416c726561647920696e766573746564000000000000000000000000000000005f82015250565b5f612ed8601083612c86565b9150612ee382612ea4565b602082019050919050565b5f6020820190508181035f830152612f0581612ecc565b9050919050565b7f50656e64696e67207769746864726177616c00000000000000000000000000005f82015250565b5f612f40601283612c86565b9150612f4b82612f0c565b602082019050919050565b5f6020820190508181035f830152612f6d81612f34565b9050919050565b5f60ff82169050919050565b612f8981612f74565b8114612f93575f5ffd5b50565b5f81519050612fa481612f80565b92915050565b5f60208284031215612fbf57612fbe612837565b5b5f612fcc84828501612f96565b91505092915050565b5f8160011c9050919050565b5f5f8291508390505b600185111561302a5780860481111561300657613005612d66565b5b60018516156130155780820291505b808102905061302385612fd5565b9450612fea565b94509492505050565b5f8261304257600190506130fd565b8161304f575f90506130fd565b8160018114613065576002811461306f5761309e565b60019150506130fd565b60ff84111561308157613080612d66565b5b8360020a91508482111561309857613097612d66565b5b506130fd565b5060208310610133831016604e8410600b84101617156130d35782820a9050838111156130ce576130cd612d66565b5b6130fd565b6130e08484846001612fe1565b925090508184048111156130f7576130f6612d66565b5b81810290505b9392505050565b5f61310e82612806565b915061311983612f74565b92506131467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613033565b905092915050565b7f42656c6f77206d696e696d756d000000000000000000000000000000000000005f82015250565b5f613182600d83612c86565b915061318d8261314e565b602082019050919050565b5f6020820190508181035f8301526131af81613176565b9050919050565b5f6040820190506131c95f83018561280f565b6131d6602083018461280f565b9392505050565b7f4e6f2072657175657374000000000000000000000000000000000000000000005f82015250565b5f613211600a83612c86565b915061321c826131dd565b602082019050919050565b5f6020820190508181035f83015261323e81613205565b9050919050565b7f496e76616c6964207374617465000000000000000000000000000000000000005f82015250565b5f613279600d83612c86565b915061328482613245565b602082019050919050565b5f6020820190508181035f8301526132a68161326d565b9050919050565b7f4e6f20696e766573746d656e74000000000000000000000000000000000000005f82015250565b5f6132e1600d83612c86565b91506132ec826132ad565b602082019050919050565b5f6020820190508181035f83015261330e816132d5565b9050919050565b7f5769746864726177616c20617070726f766564000000000000000000000000005f82015250565b5f613349601383612c86565b915061335482613315565b602082019050919050565b5f6020820190508181035f8301526133768161333d565b9050919050565b5f61338782612806565b915061339283612806565b92508282019050808211156133aa576133a9612d66565b5b92915050565b7f546f6f206561726c7900000000000000000000000000000000000000000000005f82015250565b5f6133e4600983612c86565b91506133ef826133b0565b602082019050919050565b5f6020820190508181035f830152613411816133d8565b9050919050565b5f61342282612806565b915061342d83612806565b925082820390508181111561344557613444612d66565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61348282612806565b915061348d83612806565b92508261349d5761349c61344b565b5b828204905092915050565b7f416c7265616479207265717565737465640000000000000000000000000000005f82015250565b5f6134dc601183612c86565b91506134e7826134a8565b602082019050919050565b5f6020820190508181035f830152613509816134d0565b9050919050565b7f4c6f636b656400000000000000000000000000000000000000000000000000005f82015250565b5f613544600683612c86565b915061354f82613510565b602082019050919050565b5f6020820190508181035f83015261357181613538565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f43616e6e6f742063616e63656c000000000000000000000000000000000000005f82015250565b5f613606600d83612c86565b9150613611826135d2565b602082019050919050565b5f6020820190508181035f830152613633816135fa565b9050919050565b7f57616974000000000000000000000000000000000000000000000000000000005f82015250565b5f61366e600483612c86565b91506136798261363a565b602082019050919050565b5f6020820190508181035f83015261369b81613662565b9050919050565b5f6040820190506136b55f8301856128c0565b6136c2602083018461280f565b9392505050565b5f6060820190506136dc5f8301866128c0565b6136e960208301856128c0565b6136f6604083018461280f565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122072bf406289f0c6abe820ad0a341b11e9cbf08ff54663658760cfb6040e6ed4fb64736f6c634300081f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a196ce2eba80c4f83730e4bbe5f9e77b807ec201
-----Decoded View---------------
Arg [0] : _beneficiary (address): 0xa196cE2eba80C4F83730E4BBE5f9e77B807ec201
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a196ce2eba80c4f83730e4bbe5f9e77b807ec201
Deployed Bytecode Sourcemap
22615:9632:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23050:61;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25347:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22971:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22731:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32079:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25899:97;;;:::i;:::-;;26469:1102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26004:403;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22904:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22764:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23127:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30980:124;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25799:92;;;:::i;:::-;;22835:53;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22704:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24043:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;27579:978;;;:::i;:::-;;28565:886;;;:::i;:::-;;31112:959;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23181:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25607:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30113:352;;;:::i;:::-;;24169:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24099:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;29459:646;;;:::i;:::-;;23050:61;23102:9;23050:61;:::o;25347:252::-;24969:5;;;;;;;;;;;24955:19;;:10;:19;;;24947:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;25461:1:::1;25434:29;;:15;:29;;::::0;25426:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25535:15;25503:48;;25522:11;;;;;;;;;;;25503:48;;;;;;;;;;;;25576:15;25562:11;;:29;;;;;;;;;;;;;;;;;;25347:252:::0;:::o;22971:62::-;22945:9;23015:1;:18;;;;:::i;:::-;22971:62;:::o;22731:26::-;;;;;;;;;;;;;:::o;32079:165::-;24969:5;;;;;;;;;;;24955:19;;:10;:19;;;24947:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;32195:41:::1;32222:5;;;;;;;;;;;32229:6;32202:5;32195:26;;;;:41;;;;;:::i;:::-;32079:165:::0;;:::o;25899:97::-;24969:5;;;;;;;;;;;24955:19;;:10;:19;;;24947:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;25957:5:::1;25948:6;;:14;;;;;;;;;;;;;;;;;;25978:10;;;;;;;;;;25899:97::o:0;26469:1102::-;25062:6;;;;;;;;;;;25061:7;25053:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:21:::1;:19;:21::i;:::-;26606:15:::2;:23;26622:6;26606:23;;;;;;;;;;;;;;;;;;;;;;;;;26598:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;26673:11;:23;26685:10;26673:23;;;;;;;;;;;;;;;:30;;;;;;;;;;;;26672:31;26664:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26790:1;26743:49;;:18;:30;26762:10;26743:30;;;;;;;;;;;;;;;:35;;;;;;;;;;;;:49;;;26735:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26828:14;26845:2;26828:19;;26877:6;26862:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;26858:104:::0;::::2;;26940:1;26929:12;;26896:57;26858:104;27014:8;27008:2;:14;;;;:::i;:::-;23219:2;26993:30;;;;:::i;:::-;26982:7;:41;;26974:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27054;27086:10;27106:4;27113:7;27061:6;27054:31;;;;:67;;;;;;:::i;:::-;27132:49;27160:11;;;;;;;;;;;27173:7;27139:6;27132:27;;;;:49;;;;;:::i;:::-;27220:264;;;;;;;;27261:7;27220:264;;;;27297:6;27220:264;;;;;;27336:15;27220:264;;;;27386:1;27220:264;;;;27416:1;27220:264;;;;27444:1;27220:264;;;;27468:4;27220:264;;;;::::0;27194:11:::2;:23;27206:10;27194:23;;;;;;;;;;;;;;;:290;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27539:6;27502:61;;27518:10;27502:61;;;27530:7;27547:15;27502:61;;;;;;;:::i;:::-;;;;;;;;26587:984;21587:20:::1;:18;:20::i;:::-;26469:1102:::0;;:::o;26004:403::-;24969:5;;;;;;;;;;;24955:19;;:10;:19;;;24947:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:21:::1;:19;:21::i;:::-;26089:27:::2;26119:18;:25;26138:5;26119:25;;;;;;;;;;;;;;;26089:55;;26181:1;26163:20;;:1;:6;;;;;;;;;;;;:20;;::::0;26155:43:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;26218:1;:10;;;;;;;;;;;;26217:11;:26;;;;;26233:1;:10;;;;;;;;;;;;26232:11;26217:26;26209:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;26287:4;26274:1;:10;;;:17;;;;;;;;;;;;;;;;;;26324:15;26302:1;:19;;:37;;;;26376:5;26357:42;;;26383:15;26357:42;;;;;;:::i;:::-;;;;;;;;26078:329;21587:20:::1;:18;:20::i;:::-;26004:403:::0;:::o;22904:50::-;22945:9;22904:50;:::o;22764:18::-;;;;;;;;;;;;;:::o;23127:47::-;23173:1;23127:47;:::o;23230:::-;;;;;;;;;;;;;;;;;;;;;;:::o;30980:124::-;31041:7;31068:21;:28;;;;31061:35;;30980:124;:::o;25799:92::-;24969:5;;;;;;;;;;;24955:19;;:10;:19;;;24947:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;25855:4:::1;25846:6;;:13;;;;;;;;;;;;;;;;;;25875:8;;;;;;;;;;25799:92::o:0;22835:53::-;22879:9;22835:53;:::o;22704:20::-;;;;;;;;;;;;;:::o;24043:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27579:978::-;25062:6;;;;;;;;;;;25061:7;25053:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:21:::1;:19;:21::i;:::-;27656:22:::2;27681:11;:23;27693:10;27681:23;;;;;;;;;;;;;;;27656:48;;27723:3;:10;;;;;;;;;;;;27715:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;27764:26;27793:18;:30;27812:10;27793:30;;;;;;;;;;;;;;;27764:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;27843:1;:10;;;27842:11;27834:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;27890:13;27932:1;27906:3;:22;;;:27;:121;;28005:3;:22;;;27906:121;;;22879:9;27949:3;:20;;;:40;;;;:::i;:::-;27906:121;27890:137;;22945:9;28067:5;:22;;;;:::i;:::-;28048:15;:41;;28040:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28116:17;22945:9;28155:5;28137:15;:23;;;;:::i;:::-;28136:42;;;;:::i;:::-;28116:62;;28189:14;28262:3;28249:9;23173:1;28207:3;:17;;;:39;;;;:::i;:::-;:51;;;;:::i;:::-;28206:59;;;;:::i;:::-;28189:76;;28278:57;28316:10;28328:6;28285:3;:16;;;;;;;;;;;;28278:37;;;;:57;;;;;:::i;:::-;22945:9;28381;:26;;;;:::i;:::-;28373:5;:34;;;;:::i;:::-;28348:3;:22;;:59;;;;28438:6;28418:3;:16;;;:26;;;;;;;:::i;:::-;;;;;;;;28473:9;28455:3;:14;;;:27;;;;;;;:::i;:::-;;;;;;;;28514:10;28500:49;;;28526:6;28534:3;:14;;;28500:49;;;;;;;:::i;:::-;;;;;;;;27645:912;;;;;21587:20:::1;:18;:20::i;:::-;27579:978::o:0;28565:886::-;25062:6;;;;;;;;;;;25061:7;25053:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:21:::1;:19;:21::i;:::-;28641:22:::2;28666:11;:23;28678:10;28666:23;;;;;;;;;;;;;;;28641:48;;28708:3;:10;;;;;;;;;;;;28700:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;28802:1;28755:49;;:18;:30;28774:10;28755:30;;;;;;;;;;;;;;;:35;;;;;;;;;;;;:49;;;28747:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22945:9;23015:1;:18;;;;:::i;:::-;22879:9;28880:3;:20;;;:40;;;;:::i;:::-;:60;;;;:::i;:::-;28861:15;:79;;28839:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;29020:289;;;;;;;;29059:10;29020:289;;;;;;29092:3;:17;;;29020:289;;;;29138:3;:16;;;;;;;;;;;;29020:289;;;;;;29187:15;29020:289;;;;29236:1;29020:289;;;;29262:5;29020:289;;;;;;29292:5;29020:289;;;;::::0;28987:18:::2;:30;29006:10;28987:30;;;;;;;;;;;;;;;:322;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29322:21;29349:10;29322:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29396:10;29376:67;;;29408:3;:17;;;29427:15;29376:67;;;;;;;:::i;:::-;;;;;;;;28630:821;21587:20:::1;:18;:20::i;:::-;28565:886::o:0;31112:959::-;31198:23;31239:11;31253:21;:28;;;;31239:42;;31292:28;31344:3;31323:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;31292:56;;31366:9;31378:1;31366:13;;31361:681;31385:3;31381:1;:7;31361:681;;;31410:12;31425:21;31447:1;31425:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31410:39;;31464:26;31493:18;:24;31512:4;31493:24;;;;;;;;;;;;;;;31464:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31544:486;;;;;;;;31584:1;:6;;;31544:486;;;;;;31617:1;:8;;;31544:486;;;;31658:1;:14;;;31544:486;;;;;;31709:1;:18;;;31544:486;;;;31765:1;:19;;;31544:486;;;;31813:1;:10;;;31544:486;;;;;;31852:1;:10;;;31544:486;;;;;;31917:1;31895;:19;;;:23;:119;;32013:1;31895:119;;;23102:9;31942:1;:19;;;:47;;;;:::i;:::-;31895:119;31544:486;;;31534:4;31539:1;31534:7;;;;;;;;:::i;:::-;;;;;;;:496;;;;31395:647;;31390:3;;;;;;;31361:681;;;;32059:4;32052:11;;;;31112:959;:::o;23181:40::-;23219:2;23181:40;:::o;25607:184::-;24969:5;;;;;;;;;;;24955:19;;:10;:19;;;24947:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;25723:10:::1;25697:15;:23;25713:6;25697:23;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;25764:6;25749:34;;;25772:10;25749:34;;;;;;:::i;:::-;;;;;;;;25607:184:::0;;:::o;30113:352::-;21543:21;:19;:21::i;:::-;30181:27:::1;30211:18;:30;30230:10;30211:30;;;;;;;;;;;;;;;30181:60;;30278:1;30260:20;;:1;:6;;;;;;;;;;;;:20;;;;:35;;;;;30285:1;:10;;;;;;;;;;;;30284:11;30260:35;30252:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30333:18;:30;30352:10;30333:30;;;;;;;;;;;;;;;;30326:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30374:34;30397:10;30374:22;:34::i;:::-;30446:10;30426:31;;;;;;;;;;;;30170:295;21587:20:::0;:18;:20::i;:::-;30113:352::o;24169:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24099:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29459:646::-;25062:6;;;;;;;;;;;25061:7;25053:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:21:::1;:19;:21::i;:::-;29535:27:::2;29565:18;:30;29584:10;29565:30;;;;;;;;;;;;;;;29535:60;;29614:1;:10;;;;;;;;;;;;:25;;;;;29629:1;:10;;;;;;;;;;;;29628:11;29614:25;29606:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;23102:9;29695:1;:19;;;:47;;;;:::i;:::-;29676:15;:66;;29668:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;29797:5;29764:11;:23;29776:10;29764:23;;;;;;;;;;;;;;;:30;;;:38;;;;;;;;;;;;;;;;;;29826:4;29813:1;:10;;;:17;;;;;;;;;;;;;;;;;;29843:57;29879:10;29891:1;:8;;;29850:1;:14;;;;;;;;;;;;29843:35;;;;:57;;;;;:::i;:::-;29964:18;:30;29983:10;29964:30;;;;;;;;;;;;;;;;29957:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30005:34;30028:10;30005:22;:34::i;:::-;30076:10;30057:40;;;30088:1;:8;;;30057:40;;;;;;:::i;:::-;;;;;;;;29524:581;21587:20:::1;:18;:20::i;:::-;29459:646::o:0;9916:162::-;9999:71;10019:5;10041;:14;;;10058:2;10062:5;10026:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9999:19;:71::i;:::-;9916:162;;;:::o;21623:315::-;20921:1;21752:7;;:18;21748:88;;21794:30;;;;;;;;;;;;;;21748:88;20921:1;21913:7;:17;;;;21623:315::o;10323:190::-;10424:81;10444:5;10466;:18;;;10487:4;10493:2;10497:5;10451:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10424:19;:81::i;:::-;10323:190;;;;:::o;21946:212::-;20878:1;22129:7;:21;;;;21946:212::o;30531:386::-;30597:11;30611:21;:28;;;;30597:42;;30655:9;30667:1;30655:13;;30650:260;30674:3;30670:1;:7;30650:260;;;30731:4;30703:32;;:21;30725:1;30703:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;30699:200;;30783:21;30811:1;30805:3;:7;;;;:::i;:::-;30783:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30756:21;30778:1;30756:24;;;;;;;;:::i;:::-;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;30832:21;:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;30878:5;;30699:200;30679:3;;;;;;;30650:260;;;;30586:331;30531:386;:::o;17207:738::-;17288:18;17317:19;17457:4;17454:1;17447:4;17441:11;17434:4;17428;17424:15;17421:1;17414:5;17407;17402:60;17516:7;17506:180;;17561:4;17555:11;17607:16;17604:1;17599:3;17584:40;17654:16;17649:3;17642:29;17506:180;17714:16;17700:30;;17765:1;17759:8;17744:23;;17372:406;17808:1;17794:10;:15;:68;;17861:1;17846:11;:16;;17794:68;;;17842:1;17820:5;17812:26;;;:31;17794:68;17790:148;;;17919:5;17886:40;;;;;;;;;;;:::i;:::-;;;;;;;;17790:148;17277:668;;17207:738;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:118::-;1698:24;1716:5;1698:24;:::i;:::-;1693:3;1686:37;1611:118;;:::o;1735:222::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1735:222;;;;:::o;1963:122::-;2036:24;2054:5;2036:24;:::i;:::-;2029:5;2026:35;2016:63;;2075:1;2072;2065:12;2016:63;1963:122;:::o;2091:139::-;2137:5;2175:6;2162:20;2153:29;;2191:33;2218:5;2191:33;:::i;:::-;2091:139;;;;:::o;2236:474::-;2304:6;2312;2361:2;2349:9;2340:7;2336:23;2332:32;2329:119;;;2367:79;;:::i;:::-;2329:119;2487:1;2512:53;2557:7;2548:6;2537:9;2533:22;2512:53;:::i;:::-;2502:63;;2458:117;2614:2;2640:53;2685:7;2676:6;2665:9;2661:22;2640:53;:::i;:::-;2630:63;;2585:118;2236:474;;;;;:::o;2716:90::-;2750:7;2793:5;2786:13;2779:21;2768:32;;2716:90;;;:::o;2812:109::-;2893:21;2908:5;2893:21;:::i;:::-;2888:3;2881:34;2812:109;;:::o;2927:210::-;3014:4;3052:2;3041:9;3037:18;3029:26;;3065:65;3127:1;3116:9;3112:17;3103:6;3065:65;:::i;:::-;2927:210;;;;:::o;3143:874::-;3398:4;3436:3;3425:9;3421:19;3413:27;;3450:71;3518:1;3507:9;3503:17;3494:6;3450:71;:::i;:::-;3531:72;3599:2;3588:9;3584:18;3575:6;3531:72;:::i;:::-;3613;3681:2;3670:9;3666:18;3657:6;3613:72;:::i;:::-;3695;3763:2;3752:9;3748:18;3739:6;3695:72;:::i;:::-;3777:73;3845:3;3834:9;3830:19;3821:6;3777:73;:::i;:::-;3860;3928:3;3917:9;3913:19;3904:6;3860:73;:::i;:::-;3943:67;4005:3;3994:9;3990:19;3981:6;3943:67;:::i;:::-;3143:874;;;;;;;;;;:::o;4023:145::-;4121:6;4155:5;4149:12;4139:22;;4023:145;;;:::o;4174:215::-;4304:11;4338:6;4333:3;4326:19;4378:4;4373:3;4369:14;4354:29;;4174:215;;;;:::o;4395:163::-;4493:4;4516:3;4508:11;;4546:4;4541:3;4537:14;4529:22;;4395:163;;;:::o;4564:108::-;4641:24;4659:5;4641:24;:::i;:::-;4636:3;4629:37;4564:108;;:::o;4678:::-;4755:24;4773:5;4755:24;:::i;:::-;4750:3;4743:37;4678:108;;:::o;4792:99::-;4863:21;4878:5;4863:21;:::i;:::-;4858:3;4851:34;4792:99;;:::o;4989:1594::-;5138:6;5133:3;5129:16;5227:4;5220:5;5216:16;5210:23;5246:63;5303:4;5298:3;5294:14;5280:12;5246:63;:::i;:::-;5155:164;5403:4;5396:5;5392:16;5386:23;5422:63;5479:4;5474:3;5470:14;5456:12;5422:63;:::i;:::-;5329:166;5585:4;5578:5;5574:16;5568:23;5604:63;5661:4;5656:3;5652:14;5638:12;5604:63;:::i;:::-;5505:172;5771:4;5764:5;5760:16;5754:23;5790:63;5847:4;5842:3;5838:14;5824:12;5790:63;:::i;:::-;5687:176;5958:4;5951:5;5947:16;5941:23;5977:63;6034:4;6029:3;6025:14;6011:12;5977:63;:::i;:::-;5873:177;6136:4;6129:5;6125:16;6119:23;6155:57;6206:4;6201:3;6197:14;6183:12;6155:57;:::i;:::-;6060:162;6308:4;6301:5;6297:16;6291:23;6327:57;6378:4;6373:3;6369:14;6355:12;6327:57;:::i;:::-;6232:162;6484:4;6477:5;6473:16;6467:23;6503:63;6560:4;6555:3;6551:14;6537:12;6503:63;:::i;:::-;6404:172;5107:1476;4989:1594;;:::o;6589:305::-;6720:10;6741:108;6845:3;6837:6;6741:108;:::i;:::-;6881:6;6876:3;6872:16;6858:30;;6589:305;;;;:::o;6900:144::-;7001:4;7033;7028:3;7024:14;7016:22;;6900:144;;;:::o;7146:980::-;7327:3;7356:85;7435:5;7356:85;:::i;:::-;7457:117;7567:6;7562:3;7457:117;:::i;:::-;7450:124;;7598:87;7679:5;7598:87;:::i;:::-;7708:7;7739:1;7724:377;7749:6;7746:1;7743:13;7724:377;;;7825:6;7819:13;7852:125;7973:3;7958:13;7852:125;:::i;:::-;7845:132;;8000:91;8084:6;8000:91;:::i;:::-;7990:101;;7784:317;7771:1;7768;7764:9;7759:14;;7724:377;;;7728:14;8117:3;8110:10;;7332:794;;;7146:980;;;;:::o;8132:497::-;8337:4;8375:2;8364:9;8360:18;8352:26;;8424:9;8418:4;8414:20;8410:1;8399:9;8395:17;8388:47;8452:170;8617:4;8608:6;8452:170;:::i;:::-;8444:178;;8132:497;;;;:::o;8635:116::-;8705:21;8720:5;8705:21;:::i;:::-;8698:5;8695:32;8685:60;;8741:1;8738;8731:12;8685:60;8635:116;:::o;8757:133::-;8800:5;8838:6;8825:20;8816:29;;8854:30;8878:5;8854:30;:::i;:::-;8757:133;;;;:::o;8896:468::-;8961:6;8969;9018:2;9006:9;8997:7;8993:23;8989:32;8986:119;;;9024:79;;:::i;:::-;8986:119;9144:1;9169:53;9214:7;9205:6;9194:9;9190:22;9169:53;:::i;:::-;9159:63;;9115:117;9271:2;9297:50;9339:7;9330:6;9319:9;9315:22;9297:50;:::i;:::-;9287:60;;9242:115;8896:468;;;;;:::o;9370:329::-;9429:6;9478:2;9466:9;9457:7;9453:23;9449:32;9446:119;;;9484:79;;:::i;:::-;9446:119;9604:1;9629:53;9674:7;9665:6;9654:9;9650:22;9629:53;:::i;:::-;9619:63;;9575:117;9370:329;;;;:::o;9705:862::-;9954:4;9992:3;9981:9;9977:19;9969:27;;10006:71;10074:1;10063:9;10059:17;10050:6;10006:71;:::i;:::-;10087:72;10155:2;10144:9;10140:18;10131:6;10087:72;:::i;:::-;10169;10237:2;10226:9;10222:18;10213:6;10169:72;:::i;:::-;10251;10319:2;10308:9;10304:18;10295:6;10251:72;:::i;:::-;10333:73;10401:3;10390:9;10386:19;10377:6;10333:73;:::i;:::-;10416:67;10478:3;10467:9;10463:19;10454:6;10416:67;:::i;:::-;10493;10555:3;10544:9;10540:19;10531:6;10493:67;:::i;:::-;9705:862;;;;;;;;;;:::o;10573:169::-;10657:11;10691:6;10686:3;10679:19;10731:4;10726:3;10722:14;10707:29;;10573:169;;;;:::o;10748:160::-;10888:12;10884:1;10876:6;10872:14;10865:36;10748:160;:::o;10914:366::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;10914:366;;;:::o;11286:419::-;11452:4;11490:2;11479:9;11475:18;11467:26;;11539:9;11533:4;11529:20;11525:1;11514:9;11510:17;11503:47;11567:131;11693:4;11567:131;:::i;:::-;11559:139;;11286:419;;;:::o;11711:169::-;11851:21;11847:1;11839:6;11835:14;11828:45;11711:169;:::o;11886:366::-;12028:3;12049:67;12113:2;12108:3;12049:67;:::i;:::-;12042:74;;12125:93;12214:3;12125:93;:::i;:::-;12243:2;12238:3;12234:12;12227:19;;11886:366;;;:::o;12258:419::-;12424:4;12462:2;12451:9;12447:18;12439:26;;12511:9;12505:4;12501:20;12497:1;12486:9;12482:17;12475:47;12539:131;12665:4;12539:131;:::i;:::-;12531:139;;12258:419;;;:::o;12683:180::-;12731:77;12728:1;12721:88;12828:4;12825:1;12818:15;12852:4;12849:1;12842:15;12869:410;12909:7;12932:20;12950:1;12932:20;:::i;:::-;12927:25;;12966:20;12984:1;12966:20;:::i;:::-;12961:25;;13021:1;13018;13014:9;13043:30;13061:11;13043:30;:::i;:::-;13032:41;;13222:1;13213:7;13209:15;13206:1;13203:22;13183:1;13176:9;13156:83;13133:139;;13252:18;;:::i;:::-;13133:139;12917:362;12869:410;;;;:::o;13285:156::-;13425:8;13421:1;13413:6;13409:14;13402:32;13285:156;:::o;13447:365::-;13589:3;13610:66;13674:1;13669:3;13610:66;:::i;:::-;13603:73;;13685:93;13774:3;13685:93;:::i;:::-;13803:2;13798:3;13794:12;13787:19;;13447:365;;;:::o;13818:419::-;13984:4;14022:2;14011:9;14007:18;13999:26;;14071:9;14065:4;14061:20;14057:1;14046:9;14042:17;14035:47;14099:131;14225:4;14099:131;:::i;:::-;14091:139;;13818:419;;;:::o;14243:169::-;14383:21;14379:1;14371:6;14367:14;14360:45;14243:169;:::o;14418:366::-;14560:3;14581:67;14645:2;14640:3;14581:67;:::i;:::-;14574:74;;14657:93;14746:3;14657:93;:::i;:::-;14775:2;14770:3;14766:12;14759:19;;14418:366;;;:::o;14790:419::-;14956:4;14994:2;14983:9;14979:18;14971:26;;15043:9;15037:4;15033:20;15029:1;15018:9;15014:17;15007:47;15071:131;15197:4;15071:131;:::i;:::-;15063:139;;14790:419;;;:::o;15215:166::-;15355:18;15351:1;15343:6;15339:14;15332:42;15215:166;:::o;15387:366::-;15529:3;15550:67;15614:2;15609:3;15550:67;:::i;:::-;15543:74;;15626:93;15715:3;15626:93;:::i;:::-;15744:2;15739:3;15735:12;15728:19;;15387:366;;;:::o;15759:419::-;15925:4;15963:2;15952:9;15948:18;15940:26;;16012:9;16006:4;16002:20;15998:1;15987:9;15983:17;15976:47;16040:131;16166:4;16040:131;:::i;:::-;16032:139;;15759:419;;;:::o;16184:168::-;16324:20;16320:1;16312:6;16308:14;16301:44;16184:168;:::o;16358:366::-;16500:3;16521:67;16585:2;16580:3;16521:67;:::i;:::-;16514:74;;16597:93;16686:3;16597:93;:::i;:::-;16715:2;16710:3;16706:12;16699:19;;16358:366;;;:::o;16730:419::-;16896:4;16934:2;16923:9;16919:18;16911:26;;16983:9;16977:4;16973:20;16969:1;16958:9;16954:17;16947:47;17011:131;17137:4;17011:131;:::i;:::-;17003:139;;16730:419;;;:::o;17155:86::-;17190:7;17230:4;17223:5;17219:16;17208:27;;17155:86;;;:::o;17247:118::-;17318:22;17334:5;17318:22;:::i;:::-;17311:5;17308:33;17298:61;;17355:1;17352;17345:12;17298:61;17247:118;:::o;17371:139::-;17426:5;17457:6;17451:13;17442:22;;17473:31;17498:5;17473:31;:::i;:::-;17371:139;;;;:::o;17516:347::-;17584:6;17633:2;17621:9;17612:7;17608:23;17604:32;17601:119;;;17639:79;;:::i;:::-;17601:119;17759:1;17784:62;17838:7;17829:6;17818:9;17814:22;17784:62;:::i;:::-;17774:72;;17730:126;17516:347;;;;:::o;17869:102::-;17911:8;17958:5;17955:1;17951:13;17930:34;;17869:102;;;:::o;17977:848::-;18038:5;18045:4;18069:6;18060:15;;18093:5;18084:14;;18107:712;18128:1;18118:8;18115:15;18107:712;;;18223:4;18218:3;18214:14;18208:4;18205:24;18202:50;;;18232:18;;:::i;:::-;18202:50;18282:1;18272:8;18268:16;18265:451;;;18697:4;18690:5;18686:16;18677:25;;18265:451;18747:4;18741;18737:15;18729:23;;18777:32;18800:8;18777:32;:::i;:::-;18765:44;;18107:712;;;17977:848;;;;;;;:::o;18831:1073::-;18885:5;19076:8;19066:40;;19097:1;19088:10;;19099:5;;19066:40;19125:4;19115:36;;19142:1;19133:10;;19144:5;;19115:36;19211:4;19259:1;19254:27;;;;19295:1;19290:191;;;;19204:277;;19254:27;19272:1;19263:10;;19274:5;;;19290:191;19335:3;19325:8;19322:17;19319:43;;;19342:18;;:::i;:::-;19319:43;19391:8;19388:1;19384:16;19375:25;;19426:3;19419:5;19416:14;19413:40;;;19433:18;;:::i;:::-;19413:40;19466:5;;;19204:277;;19590:2;19580:8;19577:16;19571:3;19565:4;19562:13;19558:36;19540:2;19530:8;19527:16;19522:2;19516:4;19513:12;19509:35;19493:111;19490:246;;;19646:8;19640:4;19636:19;19627:28;;19681:3;19674:5;19671:14;19668:40;;;19688:18;;:::i;:::-;19668:40;19721:5;;19490:246;19761:42;19799:3;19789:8;19783:4;19780:1;19761:42;:::i;:::-;19746:57;;;;19835:4;19830:3;19826:14;19819:5;19816:25;19813:51;;;19844:18;;:::i;:::-;19813:51;19893:4;19886:5;19882:16;19873:25;;18831:1073;;;;;;:::o;19910:281::-;19968:5;19992:23;20010:4;19992:23;:::i;:::-;19984:31;;20036:25;20052:8;20036:25;:::i;:::-;20024:37;;20080:104;20117:66;20107:8;20101:4;20080:104;:::i;:::-;20071:113;;19910:281;;;;:::o;20197:163::-;20337:15;20333:1;20325:6;20321:14;20314:39;20197:163;:::o;20366:366::-;20508:3;20529:67;20593:2;20588:3;20529:67;:::i;:::-;20522:74;;20605:93;20694:3;20605:93;:::i;:::-;20723:2;20718:3;20714:12;20707:19;;20366:366;;;:::o;20738:419::-;20904:4;20942:2;20931:9;20927:18;20919:26;;20991:9;20985:4;20981:20;20977:1;20966:9;20962:17;20955:47;21019:131;21145:4;21019:131;:::i;:::-;21011:139;;20738:419;;;:::o;21163:332::-;21284:4;21322:2;21311:9;21307:18;21299:26;;21335:71;21403:1;21392:9;21388:17;21379:6;21335:71;:::i;:::-;21416:72;21484:2;21473:9;21469:18;21460:6;21416:72;:::i;:::-;21163:332;;;;;:::o;21501:160::-;21641:12;21637:1;21629:6;21625:14;21618:36;21501:160;:::o;21667:366::-;21809:3;21830:67;21894:2;21889:3;21830:67;:::i;:::-;21823:74;;21906:93;21995:3;21906:93;:::i;:::-;22024:2;22019:3;22015:12;22008:19;;21667:366;;;:::o;22039:419::-;22205:4;22243:2;22232:9;22228:18;22220:26;;22292:9;22286:4;22282:20;22278:1;22267:9;22263:17;22256:47;22320:131;22446:4;22320:131;:::i;:::-;22312:139;;22039:419;;;:::o;22464:163::-;22604:15;22600:1;22592:6;22588:14;22581:39;22464:163;:::o;22633:366::-;22775:3;22796:67;22860:2;22855:3;22796:67;:::i;:::-;22789:74;;22872:93;22961:3;22872:93;:::i;:::-;22990:2;22985:3;22981:12;22974:19;;22633:366;;;:::o;23005:419::-;23171:4;23209:2;23198:9;23194:18;23186:26;;23258:9;23252:4;23248:20;23244:1;23233:9;23229:17;23222:47;23286:131;23412:4;23286:131;:::i;:::-;23278:139;;23005:419;;;:::o;23430:163::-;23570:15;23566:1;23558:6;23554:14;23547:39;23430:163;:::o;23599:366::-;23741:3;23762:67;23826:2;23821:3;23762:67;:::i;:::-;23755:74;;23838:93;23927:3;23838:93;:::i;:::-;23956:2;23951:3;23947:12;23940:19;;23599:366;;;:::o;23971:419::-;24137:4;24175:2;24164:9;24160:18;24152:26;;24224:9;24218:4;24214:20;24210:1;24199:9;24195:17;24188:47;24252:131;24378:4;24252:131;:::i;:::-;24244:139;;23971:419;;;:::o;24396:169::-;24536:21;24532:1;24524:6;24520:14;24513:45;24396:169;:::o;24571:366::-;24713:3;24734:67;24798:2;24793:3;24734:67;:::i;:::-;24727:74;;24810:93;24899:3;24810:93;:::i;:::-;24928:2;24923:3;24919:12;24912:19;;24571:366;;;:::o;24943:419::-;25109:4;25147:2;25136:9;25132:18;25124:26;;25196:9;25190:4;25186:20;25182:1;25171:9;25167:17;25160:47;25224:131;25350:4;25224:131;:::i;:::-;25216:139;;24943:419;;;:::o;25368:191::-;25408:3;25427:20;25445:1;25427:20;:::i;:::-;25422:25;;25461:20;25479:1;25461:20;:::i;:::-;25456:25;;25504:1;25501;25497:9;25490:16;;25525:3;25522:1;25519:10;25516:36;;;25532:18;;:::i;:::-;25516:36;25368:191;;;;:::o;25565:159::-;25705:11;25701:1;25693:6;25689:14;25682:35;25565:159;:::o;25730:365::-;25872:3;25893:66;25957:1;25952:3;25893:66;:::i;:::-;25886:73;;25968:93;26057:3;25968:93;:::i;:::-;26086:2;26081:3;26077:12;26070:19;;25730:365;;;:::o;26101:419::-;26267:4;26305:2;26294:9;26290:18;26282:26;;26354:9;26348:4;26344:20;26340:1;26329:9;26325:17;26318:47;26382:131;26508:4;26382:131;:::i;:::-;26374:139;;26101:419;;;:::o;26526:194::-;26566:4;26586:20;26604:1;26586:20;:::i;:::-;26581:25;;26620:20;26638:1;26620:20;:::i;:::-;26615:25;;26664:1;26661;26657:9;26649:17;;26688:1;26682:4;26679:11;26676:37;;;26693:18;;:::i;:::-;26676:37;26526:194;;;;:::o;26726:180::-;26774:77;26771:1;26764:88;26871:4;26868:1;26861:15;26895:4;26892:1;26885:15;26912:185;26952:1;26969:20;26987:1;26969:20;:::i;:::-;26964:25;;27003:20;27021:1;27003:20;:::i;:::-;26998:25;;27042:1;27032:35;;27047:18;;:::i;:::-;27032:35;27089:1;27086;27082:9;27077:14;;26912:185;;;;:::o;27103:167::-;27243:19;27239:1;27231:6;27227:14;27220:43;27103:167;:::o;27276:366::-;27418:3;27439:67;27503:2;27498:3;27439:67;:::i;:::-;27432:74;;27515:93;27604:3;27515:93;:::i;:::-;27633:2;27628:3;27624:12;27617:19;;27276:366;;;:::o;27648:419::-;27814:4;27852:2;27841:9;27837:18;27829:26;;27901:9;27895:4;27891:20;27887:1;27876:9;27872:17;27865:47;27929:131;28055:4;27929:131;:::i;:::-;27921:139;;27648:419;;;:::o;28073:156::-;28213:8;28209:1;28201:6;28197:14;28190:32;28073:156;:::o;28235:365::-;28377:3;28398:66;28462:1;28457:3;28398:66;:::i;:::-;28391:73;;28473:93;28562:3;28473:93;:::i;:::-;28591:2;28586:3;28582:12;28575:19;;28235:365;;;:::o;28606:419::-;28772:4;28810:2;28799:9;28795:18;28787:26;;28859:9;28853:4;28849:20;28845:1;28834:9;28830:17;28823:47;28887:131;29013:4;28887:131;:::i;:::-;28879:139;;28606:419;;;:::o;29031:180::-;29079:77;29076:1;29069:88;29176:4;29173:1;29166:15;29200:4;29197:1;29190:15;29217:180;29265:77;29262:1;29255:88;29362:4;29359:1;29352:15;29386:4;29383:1;29376:15;29403:163;29543:15;29539:1;29531:6;29527:14;29520:39;29403:163;:::o;29572:366::-;29714:3;29735:67;29799:2;29794:3;29735:67;:::i;:::-;29728:74;;29811:93;29900:3;29811:93;:::i;:::-;29929:2;29924:3;29920:12;29913:19;;29572:366;;;:::o;29944:419::-;30110:4;30148:2;30137:9;30133:18;30125:26;;30197:9;30191:4;30187:20;30183:1;30172:9;30168:17;30161:47;30225:131;30351:4;30225:131;:::i;:::-;30217:139;;29944:419;;;:::o;30369:154::-;30509:6;30505:1;30497:6;30493:14;30486:30;30369:154;:::o;30529:365::-;30671:3;30692:66;30756:1;30751:3;30692:66;:::i;:::-;30685:73;;30767:93;30856:3;30767:93;:::i;:::-;30885:2;30880:3;30876:12;30869:19;;30529:365;;;:::o;30900:419::-;31066:4;31104:2;31093:9;31089:18;31081:26;;31153:9;31147:4;31143:20;31139:1;31128:9;31124:17;31117:47;31181:131;31307:4;31181:131;:::i;:::-;31173:139;;30900:419;;;:::o;31325:332::-;31446:4;31484:2;31473:9;31469:18;31461:26;;31497:71;31565:1;31554:9;31550:17;31541:6;31497:71;:::i;:::-;31578:72;31646:2;31635:9;31631:18;31622:6;31578:72;:::i;:::-;31325:332;;;;;:::o;31663:442::-;31812:4;31850:2;31839:9;31835:18;31827:26;;31863:71;31931:1;31920:9;31916:17;31907:6;31863:71;:::i;:::-;31944:72;32012:2;32001:9;31997:18;31988:6;31944:72;:::i;:::-;32026;32094:2;32083:9;32079:18;32070:6;32026:72;:::i;:::-;31663:442;;;;;;:::o;32111:180::-;32159:77;32156:1;32149:88;32256:4;32253:1;32246:15;32280:4;32277:1;32270:15
Swarm Source
ipfs://72bf406289f0c6abe820ad0a341b11e9cbf08ff54663658760cfb6040e6ed4fb
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.