Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 31 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 130256109 | 865 days ago | IN | 0 ETH | 0.00002392 | ||||
| Approve | 128436771 | 870 days ago | IN | 0 ETH | 0.00003269 | ||||
| Transfer | 119500594 | 899 days ago | IN | 0 ETH | 0.00005905 | ||||
| Add Address To W... | 117580086 | 905 days ago | IN | 0 ETH | 0.00003047 | ||||
| Transfer | 117315335 | 905 days ago | IN | 0 ETH | 0.00003321 | ||||
| Transfer | 117202974 | 906 days ago | IN | 0 ETH | 0.00005568 | ||||
| Transfer | 116230416 | 909 days ago | IN | 0 ETH | 0.00005302 | ||||
| Transfer | 115193205 | 912 days ago | IN | 0 ETH | 0.00007873 | ||||
| Transfer | 114314430 | 914 days ago | IN | 0 ETH | 0.00003616 | ||||
| Approve | 114310985 | 915 days ago | IN | 0 ETH | 0.00003305 | ||||
| Approve | 114309236 | 915 days ago | IN | 0 ETH | 0.00003437 | ||||
| Add Address To W... | 114258259 | 915 days ago | IN | 0 ETH | 0.00003092 | ||||
| Add Address To W... | 114257962 | 915 days ago | IN | 0 ETH | 0.00003291 | ||||
| Transfer | 114257167 | 915 days ago | IN | 0 ETH | 0.00004049 | ||||
| Transfer | 111204592 | 924 days ago | IN | 0 ETH | 0.0000597 | ||||
| Transfer | 107563361 | 935 days ago | IN | 0 ETH | 0.00004144 | ||||
| Transfer | 107562197 | 935 days ago | IN | 0 ETH | 0.00004244 | ||||
| Transfer | 107225980 | 936 days ago | IN | 0 ETH | 0.00003287 | ||||
| Approve | 106727545 | 937 days ago | IN | 0 ETH | 0.00003443 | ||||
| Transfer | 106719174 | 937 days ago | IN | 0 ETH | 0.00003407 | ||||
| Transfer | 106718998 | 937 days ago | IN | 0 ETH | 0.00003455 | ||||
| Transfer | 106718761 | 937 days ago | IN | 0 ETH | 0.00003455 | ||||
| Transfer | 106718552 | 937 days ago | IN | 0 ETH | 0.00003814 | ||||
| Approve | 106598095 | 938 days ago | IN | 0 ETH | 0.00004037 | ||||
| Approve | 106596506 | 938 days ago | IN | 0 ETH | 0.00004328 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Paradice
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/**
*Submitted for verification at Arbiscan.io on 2023-07-20
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @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 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;
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
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// 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: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/security/Pausable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)
pragma solidity ^0.8.0;
/**
* @dev Extension of {ERC20} that allows token holders to destroy both their own
* tokens and those that they have an allowance for, in a way that can be
* recognized off-chain (via event analysis).
*/
abstract contract ERC20Burnable is Context, ERC20 {
/**
* @dev Destroys `amount` tokens from the caller.
*
* See {ERC20-_burn}.
*/
function burn(uint256 amount) public virtual {
_burn(_msgSender(), amount);
}
/**
* @dev Destroys `amount` tokens from `account`, deducting from the caller's
* allowance.
*
* See {ERC20-_burn} and {ERC20-allowance}.
*
* Requirements:
*
* - the caller must have allowance for ``accounts``'s tokens of at least
* `amount`.
*/
function burnFrom(address account, uint256 amount) public virtual {
_spendAllowance(account, _msgSender(), amount);
_burn(account, amount);
}
}
// File: PARA.sol
pragma solidity ^0.8.9;
//Intro
contract Paradice is ERC20, ERC20Burnable, ReentrancyGuard, Ownable, Pausable {
uint256 public constant TOTAL_SUPPLY = 10000000000 * 10 ** 18;
uint256 public constant REPLENISH_TIME = 20 hours; // Tokens replenish every 20 hours
uint256 public constant MAX_TOKENS = 4; // Maximum 4 tokens
uint256 public constant MAX_TRANSFER_AMOUNT = TOTAL_SUPPLY * 2 / 100; // Maximum transfer amount of 2% of the total supply
//Psalm 86:12
address public feeRecipient;
address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD;
mapping(address => uint256) private _lastCalled;
mapping(address => uint256) private _tokens;
mapping(address => bool) private _whitelist;
modifier canTransfer {
replenishTokens(msg.sender);
require(_whitelist[msg.sender] || _tokens[msg.sender] > 0, "You can only perform this action four times per 20 hours");
if(!_whitelist[msg.sender]) {
_tokens[msg.sender] -= 1;
}
_;
}
constructor() ERC20("Paradice", "PARA") {
_mint(msg.sender, TOTAL_SUPPLY);
feeRecipient = 0x44DCF474DD6392ce7a14cF59Ce7D1de19dE8E5Ed;
_tokens[msg.sender] = MAX_TOKENS;
_lastCalled[msg.sender] = block.timestamp;
}
//Transaction Cooldown system
function replenishTokens(address user) internal {
uint256 timeSinceLast = block.timestamp - _lastCalled[user];
uint256 periods = timeSinceLast / REPLENISH_TIME;
if (periods > 0) {
_tokens[user] = MAX_TOKENS; // Tokens replenish to max
_lastCalled[user] += periods * REPLENISH_TIME;
}
}
//Fee-recipient Role Transfer system
function setFeeRecipient(address _feeRecipient) external onlyOwner {
require(_feeRecipient != address(0), "Fee recipient cannot be a zero address");
feeRecipient = _feeRecipient;
}
//Whitelist function
function addAddressToWhitelist(address _address) external onlyOwner {
_whitelist[_address] = true;
}
function removeAddressFromWhitelist(address _address) external onlyOwner {
_whitelist[_address] = false;
}
//Sliding Scale Fee Structure
function calculateFee(uint256 _amount, address sender) public view returns (uint256) {
if (sender == owner() || sender == feeRecipient) {
return 0;
}
uint256 factor = 10**18;
uint256 percentage = _amount * factor / totalSupply();
uint256 feeRate;
if (percentage > factor / 10) {
feeRate = 900; // 90%
} else if (percentage >= factor / 100) {
feeRate = 150; // 15%
} else if (percentage >= factor / 200) {
feeRate = 100; // 10%
} else if (percentage >= factor / 1000) {
feeRate = 80; // 8%
} else if (percentage >= factor / 2000) {
feeRate = 50; // 5%
} else if (percentage >= factor / 10000) {
feeRate = 30; // 3%
} else if (percentage >= factor / 20000) {
feeRate = 15; // 1.5%
} else if (percentage >= factor / 100000) {
feeRate = 8; // 0.8%
} else if (percentage >= factor / 200000) {
feeRate = 4; // 0.4%
} else if (percentage >= factor / 1000000) {
feeRate = 2; // 0.2%
} else {
feeRate = 1; // 0.1%
}
uint256 fee = _amount * feeRate / 1000;
return fee;
}
//Transaction override system - Allowing anti-whale mechanisms to be applied to each transaction
function transfer(address recipient, uint256 amount) public virtual override canTransfer nonReentrant whenNotPaused returns (bool) {
require(amount <= MAX_TRANSFER_AMOUNT, "Transfer amount exceeds limit");
require(balanceOf(msg.sender) >= amount, "Insufficient sender balance");
uint256 fee = calculateFee(amount, msg.sender);
uint256 transferAmount = amount - fee;
require(transferAmount > 0, "Transfer amount must be greater than zero");
if (fee > 0) {
uint256 burnAmount = fee * 10 / 100; // Burn 10% of fee
uint256 recipientAmount = fee * 90 / 100; // 90% of fee goes to feeRecipient
super.transfer(BURN_ADDRESS, burnAmount);
super.transfer(feeRecipient, recipientAmount);
}
super.transfer(recipient, transferAmount);
return true;
}
//TransferFrom override system - Allowing anti-whale mechanisms to be applied to any third party transactions
function transferFrom(address sender, address recipient, uint256 amount) public virtual override canTransfer nonReentrant whenNotPaused returns (bool) {
require(amount <= MAX_TRANSFER_AMOUNT, "Transfer amount exceeds limit");
require(balanceOf(sender) >= amount, "Insufficient sender balance");
uint256 fee = calculateFee(amount, sender);
uint256 transferAmount = amount - fee;
require(transferAmount > 0, "Transfer amount must be greater than zero");
if (fee > 0) {
uint256 burnAmount = fee * 10 / 100; // Burn 10% of fee
uint256 recipientAmount = fee * 90 / 100; // 90% of fee goes to feeRecipient
super.transferFrom(sender, BURN_ADDRESS, burnAmount);
super.transferFrom(sender, feeRecipient, recipientAmount);
}
super.transferFrom(sender, recipient, transferAmount);
return true;
}
//Pause function
function pause() public virtual onlyOwner {
_pause();
}
//Unpause function
function unpause() public virtual onlyOwner {
_unpause();
}
}
//All to be Nice. - A2 2B 9SContract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TRANSFER_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REPLENISH_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addAddressToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"address","name":"_address","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040805180820182526008815267506172616469636560c01b6020808301918252835180850190945260048452635041524160e01b9084015281519192916200005e9160039162000210565b5080516200007490600490602084019062000210565b50506001600555506200008733620000f8565b6006805460ff60a01b19169055620000ac336b204fce5e3e250261100000006200014a565b600780546001600160a01b0319167344dcf474dd6392ce7a14cf59ce7d1de19de8e5ed17905533600090815260096020908152604080832060049055600890915290204290556200031a565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001a55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001b99190620002b6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b8280546200021e90620002dd565b90600052602060002090601f0160209004810192826200024257600085556200028d565b82601f106200025d57805160ff19168380011785556200028d565b828001600101855582156200028d579182015b828111156200028d57825182559160200191906001019062000270565b506200029b9291506200029f565b5090565b5b808211156200029b5760008155600101620002a0565b60008219821115620002d857634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620002f257607f821691505b602082108114156200031457634e487b7160e01b600052602260045260246000fd5b50919050565b6117d9806200032a6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063715018a611610104578063a457c2d7116100a2578063f2fde38b11610071578063f2fde38b146103bd578063f47c84c5146103d0578063fc1b3113146103d8578063fccc2813146103e057600080fd5b8063a457c2d714610371578063a9059cbb14610384578063dd62ed3e14610397578063e74b981b146103aa57600080fd5b80638456cb59116100de5780638456cb591461033d5780638da5cb5b14610345578063902d55a51461035657806395d89b411461036957600080fd5b8063715018a61461030f57806379cc6790146103175780637b9417c81461032a57600080fd5b8063395093511161017157806342966c681161014b57806342966c681461029657806346904840146102a95780635c975abb146102d457806370a08231146102e657600080fd5b806339509351146102685780633f4ba83a1461027b578063400ba0691461028357600080fd5b80632018f553116101ad5780632018f5531461022757806323b872dd14610231578063286dd3f514610244578063313ce5671461025957600080fd5b806306fdde03146101d4578063095ea7b3146101f257806318160ddd14610215575b600080fd5b6101dc6103e9565b6040516101e991906114db565b60405180910390f35b61020561020036600461154c565b61047b565b60405190151581526020016101e9565b6002545b6040519081526020016101e9565b6102196201194081565b61020561023f366004611576565b610495565b6102576102523660046115b2565b6106e3565b005b604051601281526020016101e9565b61020561027636600461154c565b61070c565b61025761072e565b6102196102913660046115cd565b610740565b6102576102a43660046115f9565b6108e7565b6007546102bc906001600160a01b031681565b6040516001600160a01b0390911681526020016101e9565b600654600160a01b900460ff16610205565b6102196102f43660046115b2565b6001600160a01b031660009081526020819052604090205490565b6102576108f4565b61025761032536600461154c565b610906565b6102576103383660046115b2565b61091f565b61025761094b565b6006546001600160a01b03166102bc565b6102196b204fce5e3e2502611000000081565b6101dc61095b565b61020561037f36600461154c565b61096a565b61020561039236600461154c565b6109f0565b6102196103a5366004611612565b610c1b565b6102576103b83660046115b2565b610c46565b6102576103cb3660046115b2565b610cd5565b610219600481565b610219610d4b565b6102bc61dead81565b6060600380546103f89061163c565b80601f01602080910402602001604051908101604052809291908181526020018280546104249061163c565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600033610489818585610d71565b60019150505b92915050565b60006104a033610e95565b336000908152600a602052604090205460ff16806104cc57503360009081526009602052604090205415155b6104f15760405162461bcd60e51b81526004016104e890611677565b60405180910390fd5b336000908152600a602052604090205460ff1661052e573360009081526009602052604081208054600192906105289084906116ea565b90915550505b610536610f2d565b61053e610f87565b60646105576b204fce5e3e250261100000006002611701565b6105619190611720565b8211156105b05760405162461bcd60e51b815260206004820152601d60248201527f5472616e7366657220616d6f756e742065786365656473206c696d697400000060448201526064016104e8565b816105d0856001600160a01b031660009081526020819052604090205490565b101561061e5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e742073656e6465722062616c616e6365000000000060448201526064016104e8565b600061062a8386610740565b9050600061063882856116ea565b90506000811161065a5760405162461bcd60e51b81526004016104e890611742565b81156106c0576000606461066f84600a611701565b6106799190611720565b90506000606461068a85605a611701565b6106949190611720565b90506106a38861dead84610fd4565b506007546106bc9089906001600160a01b031683610fd4565b5050505b6106cb868683610fd4565b506001925050506106dc6001600555565b9392505050565b6106eb610fed565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b60003361048981858561071f8383610c1b565b610729919061178b565b610d71565b610736610fed565b61073e611047565b565b60006107546006546001600160a01b031690565b6001600160a01b0316826001600160a01b0316148061078057506007546001600160a01b038381169116145b1561078d5750600061048f565b670de0b6b3a764000060006107a160025490565b6107ab8387611701565b6107b59190611720565b905060006107c4600a84611720565b8211156107d457506103846108c3565b6107df606484611720565b82106107ed575060966108c3565b6107f860c884611720565b8210610806575060646108c3565b6108126103e884611720565b8210610820575060506108c3565b61082c6107d084611720565b821061083a575060326108c3565b61084661271084611720565b82106108545750601e6108c3565b610860614e2084611720565b821061086e5750600f6108c3565b61087b620186a084611720565b8210610889575060086108c3565b61089662030d4084611720565b82106108a4575060046108c3565b6108b1620f424084611720565b82106108bf575060026108c3565b5060015b60006103e86108d28389611701565b6108dc9190611720565b979650505050505050565b6108f1338261109c565b50565b6108fc610fed565b61073e60006111ce565b610911823383611220565b61091b828261109c565b5050565b610927610fed565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b610953610fed565b61073e61129a565b6060600480546103f89061163c565b600033816109788286610c1b565b9050838110156109d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104e8565b6109e58286868403610d71565b506001949350505050565b60006109fb33610e95565b336000908152600a602052604090205460ff1680610a2757503360009081526009602052604090205415155b610a435760405162461bcd60e51b81526004016104e890611677565b336000908152600a602052604090205460ff16610a8057336000908152600960205260408120805460019290610a7a9084906116ea565b90915550505b610a88610f2d565b610a90610f87565b6064610aa96b204fce5e3e250261100000006002611701565b610ab39190611720565b821115610b025760405162461bcd60e51b815260206004820152601d60248201527f5472616e7366657220616d6f756e742065786365656473206c696d697400000060448201526064016104e8565b33600090815260208190526040902054821115610b615760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e742073656e6465722062616c616e6365000000000060448201526064016104e8565b6000610b6d8333610740565b90506000610b7b82856116ea565b905060008111610b9d5760405162461bcd60e51b81526004016104e890611742565b8115610c005760006064610bb284600a611701565b610bbc9190611720565b905060006064610bcd85605a611701565b610bd79190611720565b9050610be561dead836112dd565b50600754610bfc906001600160a01b0316826112dd565b5050505b610c0a85826112dd565b5060019250505061048f6001600555565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610c4e610fed565b6001600160a01b038116610cb35760405162461bcd60e51b815260206004820152602660248201527f46656520726563697069656e742063616e6e6f742062652061207a65726f206160448201526564647265737360d01b60648201526084016104e8565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b610cdd610fed565b6001600160a01b038116610d425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e8565b6108f1816111ce565b6064610d646b204fce5e3e250261100000006002611701565b610d6e9190611720565b81565b6001600160a01b038316610dd35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104e8565b6001600160a01b038216610e345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104e8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038116600090815260086020526040812054610eb890426116ea565b90506000610ec96201194083611720565b90508015610f28576001600160a01b038316600090815260096020526040902060049055610efa6201194082611701565b6001600160a01b03841660009081526008602052604081208054909190610f2290849061178b565b90915550505b505050565b60026005541415610f805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104e8565b6002600555565b600654600160a01b900460ff161561073e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104e8565b600033610fe2858285611220565b6109e58585856112e7565b6006546001600160a01b0316331461073e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e8565b61104f61148b565b6006805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166110fc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104e8565b6001600160a01b038216600090815260208190526040902054818110156111705760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104e8565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061122c8484610c1b565b9050600019811461129457818110156112875760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104e8565b6112948484848403610d71565b50505050565b6112a2610f87565b6006805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107f3390565b6000336104898185855b6001600160a01b03831661134b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104e8565b6001600160a01b0382166113ad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104e8565b6001600160a01b038316600090815260208190526040902054818110156114255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104e8565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611294565b600654600160a01b900460ff1661073e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104e8565b600060208083528351808285015260005b81811015611508578581018301518582016040015282016114ec565b8181111561151a576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461154757600080fd5b919050565b6000806040838503121561155f57600080fd5b61156883611530565b946020939093013593505050565b60008060006060848603121561158b57600080fd5b61159484611530565b92506115a260208501611530565b9150604084013590509250925092565b6000602082840312156115c457600080fd5b6106dc82611530565b600080604083850312156115e057600080fd5b823591506115f060208401611530565b90509250929050565b60006020828403121561160b57600080fd5b5035919050565b6000806040838503121561162557600080fd5b61162e83611530565b91506115f060208401611530565b600181811c9082168061165057607f821691505b6020821081141561167157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526038908201527f596f752063616e206f6e6c7920706572666f726d207468697320616374696f6e60408201527f20666f75722074696d65732070657220323020686f7572730000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156116fc576116fc6116d4565b500390565b600081600019048311821515161561171b5761171b6116d4565b500290565b60008261173d57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6000821982111561179e5761179e6116d4565b50019056fea26469706673582212203a4cebe91ecb2aeafb3322100a70465d927dc3f8577ab4fef2855b8d7e3ad87464736f6c63430008090033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063715018a611610104578063a457c2d7116100a2578063f2fde38b11610071578063f2fde38b146103bd578063f47c84c5146103d0578063fc1b3113146103d8578063fccc2813146103e057600080fd5b8063a457c2d714610371578063a9059cbb14610384578063dd62ed3e14610397578063e74b981b146103aa57600080fd5b80638456cb59116100de5780638456cb591461033d5780638da5cb5b14610345578063902d55a51461035657806395d89b411461036957600080fd5b8063715018a61461030f57806379cc6790146103175780637b9417c81461032a57600080fd5b8063395093511161017157806342966c681161014b57806342966c681461029657806346904840146102a95780635c975abb146102d457806370a08231146102e657600080fd5b806339509351146102685780633f4ba83a1461027b578063400ba0691461028357600080fd5b80632018f553116101ad5780632018f5531461022757806323b872dd14610231578063286dd3f514610244578063313ce5671461025957600080fd5b806306fdde03146101d4578063095ea7b3146101f257806318160ddd14610215575b600080fd5b6101dc6103e9565b6040516101e991906114db565b60405180910390f35b61020561020036600461154c565b61047b565b60405190151581526020016101e9565b6002545b6040519081526020016101e9565b6102196201194081565b61020561023f366004611576565b610495565b6102576102523660046115b2565b6106e3565b005b604051601281526020016101e9565b61020561027636600461154c565b61070c565b61025761072e565b6102196102913660046115cd565b610740565b6102576102a43660046115f9565b6108e7565b6007546102bc906001600160a01b031681565b6040516001600160a01b0390911681526020016101e9565b600654600160a01b900460ff16610205565b6102196102f43660046115b2565b6001600160a01b031660009081526020819052604090205490565b6102576108f4565b61025761032536600461154c565b610906565b6102576103383660046115b2565b61091f565b61025761094b565b6006546001600160a01b03166102bc565b6102196b204fce5e3e2502611000000081565b6101dc61095b565b61020561037f36600461154c565b61096a565b61020561039236600461154c565b6109f0565b6102196103a5366004611612565b610c1b565b6102576103b83660046115b2565b610c46565b6102576103cb3660046115b2565b610cd5565b610219600481565b610219610d4b565b6102bc61dead81565b6060600380546103f89061163c565b80601f01602080910402602001604051908101604052809291908181526020018280546104249061163c565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600033610489818585610d71565b60019150505b92915050565b60006104a033610e95565b336000908152600a602052604090205460ff16806104cc57503360009081526009602052604090205415155b6104f15760405162461bcd60e51b81526004016104e890611677565b60405180910390fd5b336000908152600a602052604090205460ff1661052e573360009081526009602052604081208054600192906105289084906116ea565b90915550505b610536610f2d565b61053e610f87565b60646105576b204fce5e3e250261100000006002611701565b6105619190611720565b8211156105b05760405162461bcd60e51b815260206004820152601d60248201527f5472616e7366657220616d6f756e742065786365656473206c696d697400000060448201526064016104e8565b816105d0856001600160a01b031660009081526020819052604090205490565b101561061e5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e742073656e6465722062616c616e6365000000000060448201526064016104e8565b600061062a8386610740565b9050600061063882856116ea565b90506000811161065a5760405162461bcd60e51b81526004016104e890611742565b81156106c0576000606461066f84600a611701565b6106799190611720565b90506000606461068a85605a611701565b6106949190611720565b90506106a38861dead84610fd4565b506007546106bc9089906001600160a01b031683610fd4565b5050505b6106cb868683610fd4565b506001925050506106dc6001600555565b9392505050565b6106eb610fed565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b60003361048981858561071f8383610c1b565b610729919061178b565b610d71565b610736610fed565b61073e611047565b565b60006107546006546001600160a01b031690565b6001600160a01b0316826001600160a01b0316148061078057506007546001600160a01b038381169116145b1561078d5750600061048f565b670de0b6b3a764000060006107a160025490565b6107ab8387611701565b6107b59190611720565b905060006107c4600a84611720565b8211156107d457506103846108c3565b6107df606484611720565b82106107ed575060966108c3565b6107f860c884611720565b8210610806575060646108c3565b6108126103e884611720565b8210610820575060506108c3565b61082c6107d084611720565b821061083a575060326108c3565b61084661271084611720565b82106108545750601e6108c3565b610860614e2084611720565b821061086e5750600f6108c3565b61087b620186a084611720565b8210610889575060086108c3565b61089662030d4084611720565b82106108a4575060046108c3565b6108b1620f424084611720565b82106108bf575060026108c3565b5060015b60006103e86108d28389611701565b6108dc9190611720565b979650505050505050565b6108f1338261109c565b50565b6108fc610fed565b61073e60006111ce565b610911823383611220565b61091b828261109c565b5050565b610927610fed565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b610953610fed565b61073e61129a565b6060600480546103f89061163c565b600033816109788286610c1b565b9050838110156109d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104e8565b6109e58286868403610d71565b506001949350505050565b60006109fb33610e95565b336000908152600a602052604090205460ff1680610a2757503360009081526009602052604090205415155b610a435760405162461bcd60e51b81526004016104e890611677565b336000908152600a602052604090205460ff16610a8057336000908152600960205260408120805460019290610a7a9084906116ea565b90915550505b610a88610f2d565b610a90610f87565b6064610aa96b204fce5e3e250261100000006002611701565b610ab39190611720565b821115610b025760405162461bcd60e51b815260206004820152601d60248201527f5472616e7366657220616d6f756e742065786365656473206c696d697400000060448201526064016104e8565b33600090815260208190526040902054821115610b615760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e742073656e6465722062616c616e6365000000000060448201526064016104e8565b6000610b6d8333610740565b90506000610b7b82856116ea565b905060008111610b9d5760405162461bcd60e51b81526004016104e890611742565b8115610c005760006064610bb284600a611701565b610bbc9190611720565b905060006064610bcd85605a611701565b610bd79190611720565b9050610be561dead836112dd565b50600754610bfc906001600160a01b0316826112dd565b5050505b610c0a85826112dd565b5060019250505061048f6001600555565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610c4e610fed565b6001600160a01b038116610cb35760405162461bcd60e51b815260206004820152602660248201527f46656520726563697069656e742063616e6e6f742062652061207a65726f206160448201526564647265737360d01b60648201526084016104e8565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b610cdd610fed565b6001600160a01b038116610d425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e8565b6108f1816111ce565b6064610d646b204fce5e3e250261100000006002611701565b610d6e9190611720565b81565b6001600160a01b038316610dd35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104e8565b6001600160a01b038216610e345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104e8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038116600090815260086020526040812054610eb890426116ea565b90506000610ec96201194083611720565b90508015610f28576001600160a01b038316600090815260096020526040902060049055610efa6201194082611701565b6001600160a01b03841660009081526008602052604081208054909190610f2290849061178b565b90915550505b505050565b60026005541415610f805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104e8565b6002600555565b600654600160a01b900460ff161561073e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104e8565b600033610fe2858285611220565b6109e58585856112e7565b6006546001600160a01b0316331461073e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e8565b61104f61148b565b6006805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166110fc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104e8565b6001600160a01b038216600090815260208190526040902054818110156111705760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104e8565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061122c8484610c1b565b9050600019811461129457818110156112875760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104e8565b6112948484848403610d71565b50505050565b6112a2610f87565b6006805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107f3390565b6000336104898185855b6001600160a01b03831661134b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104e8565b6001600160a01b0382166113ad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104e8565b6001600160a01b038316600090815260208190526040902054818110156114255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104e8565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611294565b600654600160a01b900460ff1661073e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104e8565b600060208083528351808285015260005b81811015611508578581018301518582016040015282016114ec565b8181111561151a576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461154757600080fd5b919050565b6000806040838503121561155f57600080fd5b61156883611530565b946020939093013593505050565b60008060006060848603121561158b57600080fd5b61159484611530565b92506115a260208501611530565b9150604084013590509250925092565b6000602082840312156115c457600080fd5b6106dc82611530565b600080604083850312156115e057600080fd5b823591506115f060208401611530565b90509250929050565b60006020828403121561160b57600080fd5b5035919050565b6000806040838503121561162557600080fd5b61162e83611530565b91506115f060208401611530565b600181811c9082168061165057607f821691505b6020821081141561167157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526038908201527f596f752063616e206f6e6c7920706572666f726d207468697320616374696f6e60408201527f20666f75722074696d65732070657220323020686f7572730000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156116fc576116fc6116d4565b500390565b600081600019048311821515161561171b5761171b6116d4565b500290565b60008261173d57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6000821982111561179e5761179e6116d4565b50019056fea26469706673582212203a4cebe91ecb2aeafb3322100a70465d927dc3f8577ab4fef2855b8d7e3ad87464736f6c63430008090033
Deployed Bytecode Sourcemap
27426:5860:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15216:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17576:201;;;;;;:::i;:::-;;:::i;:::-;;;1218:14:1;;1211:22;1193:41;;1181:2;1166:18;17576:201:0;1053:187:1;16345:108:0;16433:12;;16345:108;;;1391:25:1;;;1379:2;1364:18;16345:108:0;1245:177:1;27579:49:0;;27620:8;27579:49;;32147:932;;;;;;:::i;:::-;;:::i;29534:120::-;;;;;;:::i;:::-;;:::i;:::-;;16187:93;;;16270:2;2093:36:1;;2081:2;2066:18;16187:93:0;1951:184:1;19027:238:0;;;;;;:::i;:::-;;:::i;33210:73::-;;;:::i;29701:1317::-;;;;;;:::i;:::-;;:::i;26788:91::-;;;;;;:::i;:::-;;:::i;27882:27::-;;;;;-1:-1:-1;;;;;27882:27:0;;;;;;-1:-1:-1;;;;;2748:32:1;;;2730:51;;2718:2;2703:18;27882:27:0;2584:203:1;5831:86:0;5902:7;;-1:-1:-1;;;5902:7:0;;;;5831:86;;16516:127;;;;;;:::i;:::-;-1:-1:-1;;;;;16617:18:0;16590:7;16617:18;;;;;;;;;;;;16516:127;8685:103;;;:::i;27198:164::-;;;;;;:::i;:::-;;:::i;29412:114::-;;;;;;:::i;:::-;;:::i;33109:69::-;;;:::i;8044:87::-;8117:6;;-1:-1:-1;;;;;8117:6:0;8044:87;;27511:61;;27550:22;27511:61;;15435:104;;;:::i;19768:436::-;;;;;;:::i;:::-;;:::i;31132:892::-;;;;;;:::i;:::-;;:::i;17105:151::-;;;;;;:::i;:::-;;:::i;29171:203::-;;;;;;:::i;:::-;;:::i;8943:201::-;;;;;;:::i;:::-;;:::i;27670:38::-;;27707:1;27670:38;;27735:68;;;:::i;27916:81::-;;27955:42;27916:81;;15216:100;15270:13;15303:5;15296:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15216:100;:::o;17576:201::-;17659:4;4028:10;17715:32;4028:10;17731:7;17740:6;17715:8;:32::i;:::-;17765:4;17758:11;;;17576:201;;;;;:::o;32147:932::-;32292:4;28194:27;28210:10;28194:15;:27::i;:::-;28251:10;28240:22;;;;:10;:22;;;;;;;;;:49;;-1:-1:-1;28274:10:0;28288:1;28266:19;;;:7;:19;;;;;;:23;;28240:49;28232:118;;;;-1:-1:-1;;;28232:118:0;;;;;;;:::i;:::-;;;;;;;;;28376:10;28365:22;;;;:10;:22;;;;;;;;28361:79;;28412:10;28404:19;;;;:7;:19;;;;;:24;;28427:1;;28404:19;:24;;28427:1;;28404:24;:::i;:::-;;;;-1:-1:-1;;28361:79:0;2376:21:::1;:19;:21::i;:::-;5436:19:::2;:17;:19::i;:::-;27800:3:::3;27781:16;27550:22;27796:1;27781:16;:::i;:::-;:22;;;;:::i;:::-;32317:6;:29;;32309:71;;;::::0;-1:-1:-1;;;32309:71:0;;4726:2:1;32309:71:0::3;::::0;::::3;4708:21:1::0;4765:2;4745:18;;;4738:30;4804:31;4784:18;;;4777:59;4853:18;;32309:71:0::3;4524:353:1::0;32309:71:0::3;32420:6;32399:17;32409:6;-1:-1:-1::0;;;;;16617:18:0;16590:7;16617:18;;;;;;;;;;;;16516:127;32399:17:::3;:27;;32391:67;;;::::0;-1:-1:-1;;;32391:67:0;;5084:2:1;32391:67:0::3;::::0;::::3;5066:21:1::0;5123:2;5103:18;;;5096:30;5162:29;5142:18;;;5135:57;5209:18;;32391:67:0::3;4882:351:1::0;32391:67:0::3;32469:11;32483:28;32496:6;32504;32483:12;:28::i;:::-;32469:42:::0;-1:-1:-1;32522:22:0::3;32547:12;32469:42:::0;32547:6;:12:::3;:::i;:::-;32522:37;;32597:1;32580:14;:18;32572:72;;;;-1:-1:-1::0;;;32572:72:0::3;;;;;;;:::i;:::-;32661:7:::0;;32657:325:::3;;32685:18;32717:3;32706:8;:3:::0;32712:2:::3;32706:8;:::i;:::-;:14;;;;:::i;:::-;32685:35:::0;-1:-1:-1;32754:23:0::3;32791:3;32780:8;:3:::0;32786:2:::3;32780:8;:::i;:::-;:14;;;;:::i;:::-;32754:40;;32846:52;32865:6;27955:42;32887:10;32846:18;:52::i;:::-;-1:-1:-1::0;32940:12:0::3;::::0;32913:57:::3;::::0;32932:6;;-1:-1:-1;;;;;32940:12:0::3;32954:15:::0;32913:18:::3;:57::i;:::-;;32670:312;;32657:325;32994:53;33013:6;33021:9;33032:14;32994:18;:53::i;:::-;;33067:4;33060:11;;;;2420:20:::1;1814:1:::0;2940:7;:22;2757:213;2420:20:::1;32147:932:::0;;;;;:::o;29534:120::-;7930:13;:11;:13::i;:::-;-1:-1:-1;;;;;29618:20:0::1;29641:5;29618:20:::0;;;:10:::1;:20;::::0;;;;:28;;-1:-1:-1;;29618:28:0::1;::::0;;29534:120::o;19027:238::-;19115:4;4028:10;19171:64;4028:10;19187:7;19224:10;19196:25;4028:10;19187:7;19196:9;:25::i;:::-;:38;;;;:::i;:::-;19171:8;:64::i;33210:73::-;7930:13;:11;:13::i;:::-;33265:10:::1;:8;:10::i;:::-;33210:73::o:0;29701:1317::-;29777:7;29811;8117:6;;-1:-1:-1;;;;;8117:6:0;;8044:87;29811:7;-1:-1:-1;;;;;29801:17:0;:6;-1:-1:-1;;;;;29801:17:0;;:43;;;-1:-1:-1;29832:12:0;;-1:-1:-1;;;;;29822:22:0;;;29832:12;;29822:22;29801:43;29797:84;;;-1:-1:-1;29868:1:0;29861:8;;29797:84;29918:6;29901:14;29975:13;16433:12;;;16345:108;29975:13;29956:16;29966:6;29956:7;:16;:::i;:::-;:32;;;;:::i;:::-;29935:53;-1:-1:-1;29999:15:0;30044:11;30053:2;30044:6;:11;:::i;:::-;30031:10;:24;30027:912;;;-1:-1:-1;30082:3:0;30027:912;;;30129:12;30138:3;30129:6;:12;:::i;:::-;30115:10;:26;30111:828;;-1:-1:-1;30168:3:0;30111:828;;;30215:12;30224:3;30215:6;:12;:::i;:::-;30201:10;:26;30197:742;;-1:-1:-1;30254:3:0;30197:742;;;30301:13;30310:4;30301:6;:13;:::i;:::-;30287:10;:27;30283:656;;-1:-1:-1;30341:2:0;30283:656;;;30386:13;30395:4;30386:6;:13;:::i;:::-;30372:10;:27;30368:571;;-1:-1:-1;30426:2:0;30368:571;;;30471:14;30480:5;30471:6;:14;:::i;:::-;30457:10;:28;30453:486;;-1:-1:-1;30512:2:0;30453:486;;;30557:14;30566:5;30557:6;:14;:::i;:::-;30543:10;:28;30539:400;;-1:-1:-1;30598:2:0;30539:400;;;30645:15;30654:6;30645;:15;:::i;:::-;30631:10;:29;30627:312;;-1:-1:-1;30687:1:0;30627:312;;;30733:15;30742:6;30733;:15;:::i;:::-;30719:10;:29;30715:224;;-1:-1:-1;30775:1:0;30715:224;;;30821:16;30830:7;30821:6;:16;:::i;:::-;30807:10;:30;30803:136;;-1:-1:-1;30864:1:0;30803:136;;;-1:-1:-1;30917:1:0;30803:136;30951:11;30985:4;30965:17;30975:7;30965;:17;:::i;:::-;:24;;;;:::i;:::-;30951:38;29701:1317;-1:-1:-1;;;;;;;29701:1317:0:o;26788:91::-;26844:27;4028:10;26864:6;26844:5;:27::i;:::-;26788:91;:::o;8685:103::-;7930:13;:11;:13::i;:::-;8750:30:::1;8777:1;8750:18;:30::i;27198:164::-:0;27275:46;27291:7;4028:10;27314:6;27275:15;:46::i;:::-;27332:22;27338:7;27347:6;27332:5;:22::i;:::-;27198:164;;:::o;29412:114::-;7930:13;:11;:13::i;:::-;-1:-1:-1;;;;;29491:20:0::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;29491:27:0::1;29514:4;29491:27;::::0;;29412:114::o;33109:69::-;7930:13;:11;:13::i;:::-;33162:8:::1;:6;:8::i;15435:104::-:0;15491:13;15524:7;15517:14;;;;;:::i;19768:436::-;19861:4;4028:10;19861:4;19944:25;4028:10;19961:7;19944:9;:25::i;:::-;19917:52;;20008:15;19988:16;:35;;19980:85;;;;-1:-1:-1;;;19980:85:0;;5983:2:1;19980:85:0;;;5965:21:1;6022:2;6002:18;;;5995:30;6061:34;6041:18;;;6034:62;-1:-1:-1;;;6112:18:1;;;6105:35;6157:19;;19980:85:0;5781:401:1;19980:85:0;20101:60;20110:5;20117:7;20145:15;20126:16;:34;20101:8;:60::i;:::-;-1:-1:-1;20192:4:0;;19768:436;-1:-1:-1;;;;19768:436:0:o;31132:892::-;31257:4;28194:27;28210:10;28194:15;:27::i;:::-;28251:10;28240:22;;;;:10;:22;;;;;;;;;:49;;-1:-1:-1;28274:10:0;28288:1;28266:19;;;:7;:19;;;;;;:23;;28240:49;28232:118;;;;-1:-1:-1;;;28232:118:0;;;;;;;:::i;:::-;28376:10;28365:22;;;;:10;:22;;;;;;;;28361:79;;28412:10;28404:19;;;;:7;:19;;;;;:24;;28427:1;;28404:19;:24;;28427:1;;28404:24;:::i;:::-;;;;-1:-1:-1;;28361:79:0;2376:21:::1;:19;:21::i;:::-;5436:19:::2;:17;:19::i;:::-;27800:3:::3;27781:16;27550:22;27796:1;27781:16;:::i;:::-;:22;;;;:::i;:::-;31282:6;:29;;31274:71;;;::::0;-1:-1:-1;;;31274:71:0;;4726:2:1;31274:71:0::3;::::0;::::3;4708:21:1::0;4765:2;4745:18;;;4738:30;4804:31;4784:18;;;4777:59;4853:18;;31274:71:0::3;4524:353:1::0;31274:71:0::3;31374:10;16590:7:::0;16617:18;;;;;;;;;;;31389:6;-1:-1:-1;31364:31:0::3;31356:71;;;::::0;-1:-1:-1;;;31356:71:0;;5084:2:1;31356:71:0::3;::::0;::::3;5066:21:1::0;5123:2;5103:18;;;5096:30;5162:29;5142:18;;;5135:57;5209:18;;31356:71:0::3;4882:351:1::0;31356:71:0::3;31438:11;31452:32;31465:6;31473:10;31452:12;:32::i;:::-;31438:46:::0;-1:-1:-1;31495:22:0::3;31520:12;31438:46:::0;31520:6;:12:::3;:::i;:::-;31495:37;;31578:1;31561:14;:18;31553:72;;;;-1:-1:-1::0;;;31553:72:0::3;;;;;;;:::i;:::-;31642:7:::0;;31638:301:::3;;31666:18;31698:3;31687:8;:3:::0;31693:2:::3;31687:8;:::i;:::-;:14;;;;:::i;:::-;31666:35:::0;-1:-1:-1;31735:23:0::3;31772:3;31761:8;:3:::0;31767:2:::3;31761:8;:::i;:::-;:14;;;;:::i;:::-;31735:40;;31827;27955:42;31856:10;31827:14;:40::i;:::-;-1:-1:-1::0;31897:12:0::3;::::0;31882:45:::3;::::0;-1:-1:-1;;;;;31897:12:0::3;31911:15:::0;31882:14:::3;:45::i;:::-;;31651:288;;31638:301;31951:41;31966:9;31977:14;31951;:41::i;:::-;;32012:4;32005:11;;;;2420:20:::1;1814:1:::0;2940:7;:22;2757:213;17105:151;-1:-1:-1;;;;;17221:18:0;;;17194:7;17221:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17105:151::o;29171:203::-;7930:13;:11;:13::i;:::-;-1:-1:-1;;;;;29257:27:0;::::1;29249:78;;;::::0;-1:-1:-1;;;29249:78:0;;6389:2:1;29249:78:0::1;::::0;::::1;6371:21:1::0;6428:2;6408:18;;;6401:30;6467:34;6447:18;;;6440:62;-1:-1:-1;;;6518:18:1;;;6511:36;6564:19;;29249:78:0::1;6187:402:1::0;29249:78:0::1;29338:12;:28:::0;;-1:-1:-1;;;;;;29338:28:0::1;-1:-1:-1::0;;;;;29338:28:0;;;::::1;::::0;;;::::1;::::0;;29171:203::o;8943:201::-;7930:13;:11;:13::i;:::-;-1:-1:-1;;;;;9032:22:0;::::1;9024:73;;;::::0;-1:-1:-1;;;9024:73:0;;6796:2:1;9024:73:0::1;::::0;::::1;6778:21:1::0;6835:2;6815:18;;;6808:30;6874:34;6854:18;;;6847:62;-1:-1:-1;;;6925:18:1;;;6918:36;6971:19;;9024:73:0::1;6594:402:1::0;9024:73:0::1;9108:28;9127:8;9108:18;:28::i;27735:68::-:0;27800:3;27781:16;27550:22;27796:1;27781:16;:::i;:::-;:22;;;;:::i;:::-;27735:68;:::o;23761:346::-;-1:-1:-1;;;;;23863:19:0;;23855:68;;;;-1:-1:-1;;;23855:68:0;;7203:2:1;23855:68:0;;;7185:21:1;7242:2;7222:18;;;7215:30;7281:34;7261:18;;;7254:62;-1:-1:-1;;;7332:18:1;;;7325:34;7376:19;;23855:68:0;7001:400:1;23855:68:0;-1:-1:-1;;;;;23942:21:0;;23934:68;;;;-1:-1:-1;;;23934:68:0;;7608:2:1;23934:68:0;;;7590:21:1;7647:2;7627:18;;;7620:30;7686:34;7666:18;;;7659:62;-1:-1:-1;;;7737:18:1;;;7730:32;7779:19;;23934:68:0;7406:398:1;23934:68:0;-1:-1:-1;;;;;24015:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24067:32;;1391:25:1;;;24067:32:0;;1364:18:1;24067:32:0;;;;;;;23761:346;;;:::o;28767:354::-;-1:-1:-1;;;;;28868:17:0;;28826:21;28868:17;;;:11;:17;;;;;;28850:35;;:15;:35;:::i;:::-;28826:59;-1:-1:-1;28896:15:0;28914:30;27620:8;28826:59;28914:30;:::i;:::-;28896:48;-1:-1:-1;28961:11:0;;28957:157;;-1:-1:-1;;;;;28989:13:0;;;;;;:7;:13;;;;;27707:1;28989:26;;29078:24;27620:8;29078:7;:24;:::i;:::-;-1:-1:-1;;;;;29057:17:0;;;;;;:11;:17;;;;;:45;;:17;;;:45;;;;;:::i;:::-;;;;-1:-1:-1;;28957:157:0;28815:306;;28767:354;:::o;2456:293::-;1858:1;2590:7;;:19;;2582:63;;;;-1:-1:-1;;;2582:63:0;;8011:2:1;2582:63:0;;;7993:21:1;8050:2;8030:18;;;8023:30;8089:33;8069:18;;;8062:61;8140:18;;2582:63:0;7809:355:1;2582:63:0;1858:1;2723:7;:18;2456:293::o;5990:108::-;5902:7;;-1:-1:-1;;;5902:7:0;;;;6060:9;6052:38;;;;-1:-1:-1;;;6052:38:0;;8371:2:1;6052:38:0;;;8353:21:1;8410:2;8390:18;;;8383:30;-1:-1:-1;;;8429:18:1;;;8422:46;8485:18;;6052:38:0;8169:340:1;18357:261:0;18454:4;4028:10;18512:38;18528:4;4028:10;18543:6;18512:15;:38::i;:::-;18561:27;18571:4;18577:2;18581:6;18561:9;:27::i;8209:132::-;8117:6;;-1:-1:-1;;;;;8117:6:0;4028:10;8273:23;8265:68;;;;-1:-1:-1;;;8265:68:0;;8716:2:1;8265:68:0;;;8698:21:1;;;8735:18;;;8728:30;8794:34;8774:18;;;8767:62;8846:18;;8265:68:0;8514:356:1;6686:120:0;5695:16;:14;:16::i;:::-;6745:7:::1;:15:::0;;-1:-1:-1;;;;6745:15:0::1;::::0;;6776:22:::1;4028:10:::0;6785:12:::1;6776:22;::::0;-1:-1:-1;;;;;2748:32:1;;;2730:51;;2718:2;2703:18;6776:22:0::1;;;;;;;6686:120::o:0;22648:675::-;-1:-1:-1;;;;;22732:21:0;;22724:67;;;;-1:-1:-1;;;22724:67:0;;9077:2:1;22724:67:0;;;9059:21:1;9116:2;9096:18;;;9089:30;9155:34;9135:18;;;9128:62;-1:-1:-1;;;9206:18:1;;;9199:31;9247:19;;22724:67:0;8875:397:1;22724:67:0;-1:-1:-1;;;;;22891:18:0;;22866:22;22891:18;;;;;;;;;;;22928:24;;;;22920:71;;;;-1:-1:-1;;;22920:71:0;;9479:2:1;22920:71:0;;;9461:21:1;9518:2;9498:18;;;9491:30;9557:34;9537:18;;;9530:62;-1:-1:-1;;;9608:18:1;;;9601:32;9650:19;;22920:71:0;9277:398:1;22920:71:0;-1:-1:-1;;;;;23027:18:0;;:9;:18;;;;;;;;;;;23048:23;;;23027:44;;23166:12;:22;;;;;;;23217:37;1391:25:1;;;23027:9:0;;:18;23217:37;;1364:18:1;23217:37:0;;;;;;;28815:306;;28767:354;:::o;9304:191::-;9397:6;;;-1:-1:-1;;;;;9414:17:0;;;-1:-1:-1;;;;;;9414:17:0;;;;;;;9447:40;;9397:6;;;9414:17;9397:6;;9447:40;;9378:16;;9447:40;9367:128;9304:191;:::o;24398:419::-;24499:24;24526:25;24536:5;24543:7;24526:9;:25::i;:::-;24499:52;;-1:-1:-1;;24566:16:0;:37;24562:248;;24648:6;24628:16;:26;;24620:68;;;;-1:-1:-1;;;24620:68:0;;9882:2:1;24620:68:0;;;9864:21:1;9921:2;9901:18;;;9894:30;9960:31;9940:18;;;9933:59;10009:18;;24620:68:0;9680:353:1;24620:68:0;24732:51;24741:5;24748:7;24776:6;24757:16;:25;24732:8;:51::i;:::-;24488:329;24398:419;;;:::o;6427:118::-;5436:19;:17;:19::i;:::-;6487:7:::1;:14:::0;;-1:-1:-1;;;;6487:14:0::1;-1:-1:-1::0;;;6487:14:0::1;::::0;;6517:20:::1;6524:12;4028:10:::0;;3948:98;16849:193;16928:4;4028:10;16984:28;4028:10;17001:2;17005:6;20674:806;-1:-1:-1;;;;;20771:18:0;;20763:68;;;;-1:-1:-1;;;20763:68:0;;10240:2:1;20763:68:0;;;10222:21:1;10279:2;10259:18;;;10252:30;10318:34;10298:18;;;10291:62;-1:-1:-1;;;10369:18:1;;;10362:35;10414:19;;20763:68:0;10038:401:1;20763:68:0;-1:-1:-1;;;;;20850:16:0;;20842:64;;;;-1:-1:-1;;;20842:64:0;;10646:2:1;20842:64:0;;;10628:21:1;10685:2;10665:18;;;10658:30;10724:34;10704:18;;;10697:62;-1:-1:-1;;;10775:18:1;;;10768:33;10818:19;;20842:64:0;10444:399:1;20842:64:0;-1:-1:-1;;;;;20992:15:0;;20970:19;20992:15;;;;;;;;;;;21026:21;;;;21018:72;;;;-1:-1:-1;;;21018:72:0;;11050:2:1;21018:72:0;;;11032:21:1;11089:2;11069:18;;;11062:30;11128:34;11108:18;;;11101:62;-1:-1:-1;;;11179:18:1;;;11172:36;11225:19;;21018:72:0;10848:402:1;21018:72:0;-1:-1:-1;;;;;21126:15:0;;;:9;:15;;;;;;;;;;;21144:20;;;21126:38;;21344:13;;;;;;;;;;:23;;;;;;21396:26;;1391:25:1;;;21344:13:0;;21396:26;;1364:18:1;21396:26:0;;;;;;;21435:37;28767:354;6175:108;5902:7;;-1:-1:-1;;;5902:7:0;;;;6234:41;;;;-1:-1:-1;;;6234:41:0;;11457:2:1;6234:41:0;;;11439:21:1;11496:2;11476:18;;;11469:30;-1:-1:-1;;;11515:18:1;;;11508:50;11575:18;;6234:41:0;11255:344:1;14:597;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:173::-;684:20;;-1:-1:-1;;;;;733:31:1;;723:42;;713:70;;779:1;776;769:12;713:70;616:173;;;:::o;794:254::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;1038:2;1023:18;;;;1010:32;;-1:-1:-1;;;794:254:1:o;1427:328::-;1504:6;1512;1520;1573:2;1561:9;1552:7;1548:23;1544:32;1541:52;;;1589:1;1586;1579:12;1541:52;1612:29;1631:9;1612:29;:::i;:::-;1602:39;;1660:38;1694:2;1683:9;1679:18;1660:38;:::i;:::-;1650:48;;1745:2;1734:9;1730:18;1717:32;1707:42;;1427:328;;;;;:::o;1760:186::-;1819:6;1872:2;1860:9;1851:7;1847:23;1843:32;1840:52;;;1888:1;1885;1878:12;1840:52;1911:29;1930:9;1911:29;:::i;2140:254::-;2208:6;2216;2269:2;2257:9;2248:7;2244:23;2240:32;2237:52;;;2285:1;2282;2275:12;2237:52;2321:9;2308:23;2298:33;;2350:38;2384:2;2373:9;2369:18;2350:38;:::i;:::-;2340:48;;2140:254;;;;;:::o;2399:180::-;2458:6;2511:2;2499:9;2490:7;2486:23;2482:32;2479:52;;;2527:1;2524;2517:12;2479:52;-1:-1:-1;2550:23:1;;2399:180;-1:-1:-1;2399:180:1:o;2792:260::-;2860:6;2868;2921:2;2909:9;2900:7;2896:23;2892:32;2889:52;;;2937:1;2934;2927:12;2889:52;2960:29;2979:9;2960:29;:::i;:::-;2950:39;;3008:38;3042:2;3031:9;3027:18;3008:38;:::i;3057:380::-;3136:1;3132:12;;;;3179;;;3200:61;;3254:4;3246:6;3242:17;3232:27;;3200:61;3307:2;3299:6;3296:14;3276:18;3273:38;3270:161;;;3353:10;3348:3;3344:20;3341:1;3334:31;3388:4;3385:1;3378:15;3416:4;3413:1;3406:15;3270:161;;3057:380;;;:::o;3442:420::-;3644:2;3626:21;;;3683:2;3663:18;;;3656:30;3722:34;3717:2;3702:18;;3695:62;3793:26;3788:2;3773:18;;3766:54;3852:3;3837:19;;3442:420::o;3867:127::-;3928:10;3923:3;3919:20;3916:1;3909:31;3959:4;3956:1;3949:15;3983:4;3980:1;3973:15;3999:125;4039:4;4067:1;4064;4061:8;4058:34;;;4072:18;;:::i;:::-;-1:-1:-1;4109:9:1;;3999:125::o;4129:168::-;4169:7;4235:1;4231;4227:6;4223:14;4220:1;4217:21;4212:1;4205:9;4198:17;4194:45;4191:71;;;4242:18;;:::i;:::-;-1:-1:-1;4282:9:1;;4129:168::o;4302:217::-;4342:1;4368;4358:132;;4412:10;4407:3;4403:20;4400:1;4393:31;4447:4;4444:1;4437:15;4475:4;4472:1;4465:15;4358:132;-1:-1:-1;4504:9:1;;4302:217::o;5238:405::-;5440:2;5422:21;;;5479:2;5459:18;;;5452:30;5518:34;5513:2;5498:18;;5491:62;-1:-1:-1;;;5584:2:1;5569:18;;5562:39;5633:3;5618:19;;5238:405::o;5648:128::-;5688:3;5719:1;5715:6;5712:1;5709:13;5706:39;;;5725:18;;:::i;:::-;-1:-1:-1;5761:9:1;;5648:128::o
Swarm Source
ipfs://3a4cebe91ecb2aeafb3322100a70465d927dc3f8577ab4fef2855b8d7e3ad874
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 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.