[ Download CSV Export ]
OVERVIEW
The $XETA project generates passive income through our XŌN product, which is a collection of 10 $XETA tokens. As a combined group of $XETA tokens, each XŌN offers the purchaser the opportunity to generate additional tokens.Contract Source Code Verified (Exact Match)
Contract Name:
X3taToken
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-11-13 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.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 anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/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/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.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.7.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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * 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}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * 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 value {ERC20} uses, unless this function is * 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; } _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; _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; } _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: xetatoken.sol //SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.17; /// @title A $X3TA token contract /// @notice Use this contract to manage the $X3TA token contract X3taToken is ERC20, Pausable, Ownable { IERC20 internal usdcToken; address internal xetaWallet; address[] internal distributedWallets = [ 0x8D17B9A7ed442F4133Bd3421B297bA975F8Fd091, // Buyback 0x34f95B36474Dd5e3e8CB65f0Cef3856eaA022330, // Treasury 0x9A0e00ff86732755379eb5e68DBDe7fF868616c9, // Liquidity 0xe0F607c8355F1BbcDBa4843D2AA36e537CE588a9 // Operations ]; uint256 internal xonCost = 10 * (10 ** 18); uint256 internal xonCreationFee = 15 * (10 ** 6); uint256 internal claimRewardFee = 5 * (10 ** 6); uint256 internal subscriptionFee = 15 * (10 ** 6); uint256 internal maxXonsPerUser = 500; uint256[] internal walletDistribution = [25, 25, 25, 25]; event ClaimRequestsEvent(address indexed userWallet, bytes24[] nodeIds); event TransferEvent(address indexed userWallet, uint indexed amount); // the address and amount of transferred tokens event CreatingXonEvent(address indexed userWallet, uint256 indexed amount, uint8 indexed _type, bool payInTokens); event SubscriptionsPaymentEvent(address indexed userWallet, bytes24[] nodeIds, uint8 indexed months); event SetXetaWalletEvent(address indexed wallet); event SetXonCostEvent(uint256 indexed cost); event SetXonCreationFeeEvent(uint256 indexed fee); event SetSubscriptionFeeEvent(uint256 indexed fee); event SetClaimRewardFeeEvent(uint256 indexed fee); event SetMaxXonsPerUserEvent(uint256 indexed number); event SetWalletDistributionEvent(uint8[4] arr); event SetDistributedWalletEvent(uint8 indexed number, address indexed _address); event GiveAwayEvent(address indexed recipient, uint256 indexed amount); modifier onlyXetaOrOwner() { require(msg.sender == xetaWallet || msg.sender == owner(), "Neither XETA nor owner"); _; } constructor(address _usdcToken) ERC20("X3TA", "X3TA") { xetaWallet = 0xB63b14F85a0D11842a5c9e1b28C91d3AE9d31A6a; //usdcToken = IERC20(0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E); // for Avalanche mainnet usdcToken = IERC20(_usdcToken); _mint(address(this), 21 * (10 ** 6) * (10 ** 18)); // pre-mint } /// @notice Use this function by a user to request a reward for the specified nodes /// @dev User should allow to spend (claimRewardFee * nodeIds.length) USDC tokens /// @dev An external service should listen to the ClaimRequestsEvent event and execute transferFromBackend function /// @dev with the reward calculated by the whitepaper descriptions /// @param nodeIds XON IDs that were generated by the external service function requestRewards(bytes24[] memory nodeIds, uint256 _claimRewardFee) external whenNotPaused { require(_claimRewardFee == claimRewardFee, "Invalid claim reward fee"); require(nodeIds.length > 0 && nodeIds.length <= maxXonsPerUser, "Illegal number of nodes"); if (claimRewardFee > 0) { bool res = distributePaymentInUsdc(claimRewardFee * nodeIds.length); require(res == true, "Error in payment distribution"); } emit ClaimRequestsEvent(msg.sender, nodeIds); } /// @notice Use this function by the special $XETA wallet or the owner of the smart contract to transfer rewards. /// @param user The wallet address of the user who has requested a reward /// @param sum An amount of $XETA tokens function transferFromBackend(address user, uint sum) external onlyXetaOrOwner whenNotPaused { _transfer(address(this), user, sum); emit TransferEvent(user, sum); } /// @notice Use this function to create a XON. A user should pay a create fee and a $XETA tokens /// @dev An external service should listen to the CreatingXonEvent function mintXon(uint256 amount, uint256 _xonCreationFee, uint8 _type, bool payInTokens) external whenNotPaused { require(_xonCreationFee == xonCreationFee, "Invalid XON creation fee"); require(amount > 0, "Illegal amount"); if (xonCreationFee > 0) { bool res = distributePaymentInUsdc(xonCreationFee * amount); require(res == true, "Error in payment distribution"); } if (payInTokens) { _transfer(msg.sender, address(this), xonCost * amount); } emit CreatingXonEvent(msg.sender, amount, _type, payInTokens); } /// @notice A user with XONs should pay a subscription fee for each XON every 28 days /// @dev An external service should listen to the SubscriptionsPaymentEvent function requestSubscriptions(bytes24[] memory nodeIds, uint8 months, uint256 _subscriptionFee) external whenNotPaused { require (_subscriptionFee == subscriptionFee, "Invalid subscription fee"); require(nodeIds.length > 0 && nodeIds.length <= maxXonsPerUser, "Illegal number of nodes"); if (subscriptionFee > 0) { bool res = distributePaymentInUsdc(subscriptionFee * nodeIds.length * months); require(res == true, "Error in payment distribution"); } emit SubscriptionsPaymentEvent(msg.sender, nodeIds, months); } /// @dev If a user sends other tokens to this smart contract, the owner can transfer it to himself. function withdrawToken(address _tokenContract, address _recipient, uint256 _amount) external onlyOwner { IERC20 tokenContract = IERC20(_tokenContract); // transfer the token from address of this contract // to address of the user (executing the withdrawToken() function) tokenContract.transfer(_recipient, _amount); } /// @dev Due to the nature of smart contracts and the fact they're immutable, for the interest of the community and /// @dev the ecosystem, we decided to add an option to disable critical contract functionality in case of an emergency. function pause() external onlyOwner { _pause(); } /// @dev Due to the nature of smart contracts and the fact they're immutable, for the interest of the community and /// @dev the ecosystem, we decided to add an option to disable critical contract functionality in case of an emergency. function unpause() external onlyOwner { _unpause(); } /// @notice Set address of a special xeta wallet that is able to transfer rewards /// @param newAddress address of the special xeta wallet function setXetaWallet(address newAddress) external onlyOwner { require (newAddress != address(0x0), "Invalid address"); xetaWallet = newAddress; emit SetXetaWalletEvent(newAddress); } /// @notice Sets the XON cost in XETA function setXonCost(uint256 cost) external onlyOwner { xonCost = cost; emit SetXonCostEvent(cost); } /// @notice Sets the XON creation fee in USDC function setXonCreationFee(uint256 fee) external onlyOwner { xonCreationFee = fee; emit SetXonCreationFeeEvent(fee); } /// @notice Sets the subscription fee in USDC function setSubscriptionFee(uint256 cost) external onlyOwner { subscriptionFee = cost; emit SetSubscriptionFeeEvent(cost); } /// @notice Sets the reward fee in USDC function setClaimRewardFee(uint256 fee) external onlyXetaOrOwner { claimRewardFee = fee; emit SetClaimRewardFeeEvent(fee); } /// @notice Sets the max amount of XONs per user function setMaxXonsPerUser(uint256 _amount) external onlyOwner { maxXonsPerUser = _amount; emit SetMaxXonsPerUserEvent(_amount); } /// @notice Sets the wallet distribution (between treasury, liquidity and operation wallet addresses) /// @param percentages Array of treasury, liquidity and operation distribution in percents function setWalletDistribution(uint8[4] memory percentages) external onlyOwner { require(percentages[0] + percentages[1] + percentages[2] + percentages[3] == 100, "Percentage sum must be equal 100"); for (uint8 i = 0; i < walletDistribution.length; i++) { walletDistribution[i] = percentages[i]; } emit SetWalletDistributionEvent(percentages); } /// @notice Sets the wallet address of the treasury, liquidity and operation wallet addresses /// @param number buyback(0), treasury(1), liquidity(2) and operation(3) wallet addresses /// @param newAddress The address of the specified wallet function setDistributedWallet(uint8 number, address newAddress) external onlyOwner { require(newAddress != address(0x0)); require(number < distributedWallets.length, "Wrong wallet number"); require(newAddress != address(0), "Wrong wallet address"); distributedWallets[number] = newAddress; emit SetDistributedWalletEvent(number, newAddress); } /// @notice Gets current USDC token address function getUsdcToken() external view returns(IERC20) { return usdcToken; } /// @notice Gets current XON cost (in $XETA) function getXonCost() external view returns(uint256) { return xonCost; } /// @notice Gets current XON creation fee (in USDC) function getXonCreationFee() external view returns(uint256) { return xonCreationFee; } /// @notice Gets current reward fee (in USDC) function getClaimRewardFee() external view returns(uint256) { return claimRewardFee; } /// @notice Gets current subscription fee (in USDC) function getSubscriptionFee() external view returns(uint256) { return subscriptionFee; } /// @notice Gets current wallet distribution in percent /// @param number treasury(0), liquidity(1) and operation(2) function getWalletDistribution(uint8 number) external view returns(uint256) { require (number < walletDistribution.length, "Wrong wallet number"); return walletDistribution[number]; } /// @notice Gets current wallet distribution address /// @param number treasury(0), liquidity(1) and operation(2) function getDistributedWallet(uint8 number) external view returns(address) { require (number < distributedWallets.length, "Wrong wallet number"); return distributedWallets[number]; } /// @notice Gets the maximal amount of XONs per user function getMaxXonsPerUser() external view returns(uint256) { return maxXonsPerUser; } /// @notice Make an airdrop of this tokens function giveAwayBatch(address[] memory recipients, uint256[] memory amount) external onlyOwner { require(recipients.length == amount.length, "Recipient and amount arrays mismatch"); uint sum = 0; for (uint i = 0; i < recipients.length; i++) { require(recipients[i] != address(0), "Recipient should not have 0x0 address"); sum += amount[i]; } require(balanceOf(address(this)) >= sum, "Insufficient amount of tokens"); for (uint i = 0; i < recipients.length; i++) { _transfer(address(this), recipients[i], amount[i]); emit GiveAwayEvent(recipients[i], amount[i]); } } /// @notice Overrides _beforeTokenTransfer for pause functionality function _beforeTokenTransfer( address from, address to, uint256 amount ) internal override whenNotPaused { super._beforeTokenTransfer(from, to, amount); } /// @notice Distributes payment between treasury, liquidity and operation addresses function distributePaymentInUsdc(uint256 amount) private returns (bool) { if (amount == 0) { return false; } return usdcToken.transferFrom(msg.sender, distributedWallets[0], amount * walletDistribution[0] / 100) && usdcToken.transferFrom(msg.sender, distributedWallets[1], amount * walletDistribution[1] / 100) && usdcToken.transferFrom(msg.sender, distributedWallets[2], amount * walletDistribution[2] / 100) && usdcToken.transferFrom(msg.sender, distributedWallets[3], amount * walletDistribution[3] / 100); } }
[{"inputs":[{"internalType":"address","name":"_usdcToken","type":"address"}],"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":"userWallet","type":"address"},{"indexed":false,"internalType":"bytes24[]","name":"nodeIds","type":"bytes24[]"}],"name":"ClaimRequestsEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":false,"internalType":"bool","name":"payInTokens","type":"bool"}],"name":"CreatingXonEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"GiveAwayEvent","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":"uint256","name":"fee","type":"uint256"}],"name":"SetClaimRewardFeeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"number","type":"uint8"},{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"SetDistributedWalletEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"number","type":"uint256"}],"name":"SetMaxXonsPerUserEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetSubscriptionFeeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8[4]","name":"arr","type":"uint8[4]"}],"name":"SetWalletDistributionEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"SetXetaWalletEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"cost","type":"uint256"}],"name":"SetXonCostEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetXonCreationFeeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":false,"internalType":"bytes24[]","name":"nodeIds","type":"bytes24[]"},{"indexed":true,"internalType":"uint8","name":"months","type":"uint8"}],"name":"SubscriptionsPaymentEvent","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":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"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":[],"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":"getClaimRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"number","type":"uint8"}],"name":"getDistributedWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxXonsPerUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSubscriptionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUsdcToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"number","type":"uint8"}],"name":"getWalletDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getXonCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getXonCreationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"giveAwayBatch","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"_xonCreationFee","type":"uint256"},{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"bool","name":"payInTokens","type":"bool"}],"name":"mintXon","outputs":[],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24[]","name":"nodeIds","type":"bytes24[]"},{"internalType":"uint256","name":"_claimRewardFee","type":"uint256"}],"name":"requestRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24[]","name":"nodeIds","type":"bytes24[]"},{"internalType":"uint8","name":"months","type":"uint8"},{"internalType":"uint256","name":"_subscriptionFee","type":"uint256"}],"name":"requestSubscriptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setClaimRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"number","type":"uint8"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDistributedWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxXonsPerUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"setSubscriptionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[4]","name":"percentages","type":"uint8[4]"}],"name":"setWalletDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setXetaWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"setXonCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setXonCreationFee","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"sum","type":"uint256"}],"name":"transferFromBackend","outputs":[],"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"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610100604052738d17b9a7ed442f4133bd3421b297ba975f8fd09160809081527334f95b36474dd5e3e8cb65f0cef3856eaa02233060a052739a0e00ff86732755379eb5e68dbde7ff868616c960c05273e0f607c8355f1bbcdba4843d2aa36e537ce588a960e0526200007790600890600462000382565b50678ac7230489e8000060095562e4e1c0600a819055624c4b40600b55600c556101f4600d55604080516080810182526019808252602082018190529181018290526060810191909152620000d190600e906004620003ec565b50348015620000df57600080fd5b5060405162002a4c38038062002a4c833981016040819052620001029162000446565b6040805180820182526004808252635833544160e01b60208084018290528451808601909552918452908301529060036200013e83826200051c565b5060046200014d82826200051c565b50506005805460ff19169055506200016533620001c0565b6007805473b63b14f85a0d11842a5c9e1b28c91d3ae9d31a6a6001600160a01b031991821617909155600680549091166001600160a01b038316179055620001b9306a115eec47f6cf7e350000006200021a565b5062000610565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002765760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b620002846000838362000311565b8060026000828254620002989190620005e8565b90915550506001600160a01b03821660009081526020819052604081208054839290620002c7908490620005e8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6200031b62000338565b620003338383836200033360201b620013e81760201c565b505050565b60055460ff1615620003805760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016200026d565b565b828054828255906000526020600020908101928215620003da579160200282015b82811115620003da57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003a3565b50620003e89291506200042f565b5090565b828054828255906000526020600020908101928215620003da579160200282015b82811115620003da578251829060ff169055916020019190600101906200040d565b5b80821115620003e8576000815560010162000430565b6000602082840312156200045957600080fd5b81516001600160a01b03811681146200047157600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004a357607f821691505b602082108103620004c457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033357600081815260208120601f850160051c81016020861015620004f35750805b601f850160051c820191505b818110156200051457828155600101620004ff565b505050505050565b81516001600160401b0381111562000538576200053862000478565b62000550816200054984546200048e565b84620004ca565b602080601f8311600181146200058857600084156200056f5750858301515b600019600386901b1c1916600185901b17855562000514565b600085815260208120601f198616915b82811015620005b95788860151825594840194600190910190840162000598565b5085821015620005d85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200060a57634e487b7160e01b600052601160045260246000fd5b92915050565b61242c80620006206000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c806373c6f0901161013b578063c00ee992116100b8578063dc080d4a1161007c578063dc080d4a146104a0578063dd62ed3e146104b3578063f2fde38b146104c6578063fb4deb46146104d9578063fd7e6ee3146104ec57600080fd5b8063c00ee9921461044c578063c74d85841461045f578063c81a32f014610472578063cef00f431461047a578063d72fb4311461048d57600080fd5b80638da5cb5b116100ff5780638da5cb5b146103f557806395d89b411461040b578063a457c2d714610413578063a9059cbb14610426578063ab9374471461043957600080fd5b806373c6f090146103ac57806374368393146103bf5780637a04a32b146103c75780638456cb59146103da57806385a1bfe3146103e257600080fd5b80633169cf5e116101c95780635c975abb1161018d5780635c975abb146103555780636ac84956146103605780636e3532fa1461037357806370a082311461037b578063715018a6146103a457600080fd5b80633169cf5e146102ef57806334076e961461030257806339509351146103155780633b44390a146103285780633f4ba83a1461034d57600080fd5b80630e88ce7a116102105780630e88ce7a146102aa57806317ed7c43146102bd57806318160ddd146102c557806323b872dd146102cd578063313ce567146102e057600080fd5b806301e336671461024257806306fdde0314610257578063095ea7b3146102755780630e16edd114610298575b600080fd5b610255610250366004611cf1565b6104ff565b005b61025f610584565b60405161026c9190611d2d565b60405180910390f35b610288610283366004611d7b565b610616565b604051901515815260200161026c565b600b545b60405190815260200161026c565b6102556102b8366004611da5565b610630565b600d5461029c565b60025461029c565b6102886102db366004611cf1565b61066b565b6040516012815260200161026c565b6102556102fd366004611ebd565b61068f565b610255610310366004611f04565b6107e6565b610288610323366004611d7b565b6108e0565b6006546001600160a01b03165b6040516001600160a01b03909116815260200161026c565b610255610902565b60055460ff16610288565b61025561036e366004611da5565b610914565b600c5461029c565b61029c610389366004611f37565b6001600160a01b031660009081526020819052604090205490565b61025561094f565b6103356103ba366004611f59565b610961565b60095461029c565b6102556103d5366004611fcf565b6109b9565b610255610c17565b6102556103f036600461208f565b610c27565b60055461010090046001600160a01b0316610335565b61025f610d4c565b610288610421366004611d7b565b610d5b565b610288610434366004611d7b565b610dd6565b610255610447366004611f37565b610de4565b61025561045a366004611d7b565b610e7e565b61025561046d366004611da5565b610f4a565b600a5461029c565b610255610488366004611da5565b610f85565b61025561049b366004611da5565b610fc0565b61029c6104ae366004611f59565b611072565b61029c6104c1366004612114565b6110c1565b6102556104d4366004611f37565b6110ec565b6102556104e736600461213e565b611165565b6102556104fa366004612186565b6112ae565b6105076113ed565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af1158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d91906121cb565b5050505050565b606060038054610593906121e8565b80601f01602080910402602001604051908101604052809291908181526020018280546105bf906121e8565b801561060c5780601f106105e15761010080835404028352916020019161060c565b820191906000526020600020905b8154815290600101906020018083116105ef57829003601f168201915b5050505050905090565b60003361062481858561144d565b60019150505b92915050565b6106386113ed565b600981905560405181907f54ab1b16e4bb7e822ec3ccf3350cfcb441d4833a5d6c04713f5059c441dcb34e90600090a250565b600033610679858285611569565b6106848585856115dd565b506001949350505050565b6106976117b6565b600c5481146106ed5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420737562736372697074696f6e20666565000000000000000060448201526064015b60405180910390fd5b600083511180156107015750600d54835111155b6107475760405162461bcd60e51b8152602060048201526017602482015276496c6c6567616c206e756d626572206f66206e6f64657360481b60448201526064016106e4565b600c541561079c5760006107768360ff168551600c546107679190612238565b6107719190612238565b6117fc565b905060018115151461079a5760405162461bcd60e51b81526004016106e49061224f565b505b8160ff16336001600160a01b03167fee3b5e6ac580f358b1ceb58250992e1effb02fd0b87d4ca27ee6a7b183482e89856040516107d99190612286565b60405180910390a3505050565b6107ee6113ed565b6001600160a01b03811661080157600080fd5b60085460ff8316106108255760405162461bcd60e51b81526004016106e4906122d5565b6001600160a01b0381166108725760405162461bcd60e51b815260206004820152601460248201527357726f6e672077616c6c6574206164647265737360601b60448201526064016106e4565b8060088360ff168154811061088957610889612302565b6000918252602082200180546001600160a01b0319166001600160a01b039384161790556040519183169160ff8516917f5ed054586d7e19749978735d942b033ad8b464009143e220b68966104e0b3e5391a35050565b6000336106248185856108f383836110c1565b6108fd9190612318565b61144d565b61090a6113ed565b610912611b9b565b565b61091c6113ed565b600c81905560405181907f5d8c7b871890ff2f8ddfd543df93b57102e83a078dd30cdf41d245200a83793a90600090a250565b6109576113ed565b6109126000611bed565b60085460009060ff8316106109885760405162461bcd60e51b81526004016106e4906122d5565b60088260ff168154811061099e5761099e612302565b6000918252602090912001546001600160a01b031692915050565b6109c16113ed565b8051825114610a1e5760405162461bcd60e51b8152602060048201526024808201527f526563697069656e7420616e6420616d6f756e7420617272617973206d69736d6044820152630c2e8c6d60e31b60648201526084016106e4565b6000805b8351811015610aed5760006001600160a01b0316848281518110610a4857610a48612302565b60200260200101516001600160a01b031603610ab45760405162461bcd60e51b815260206004820152602560248201527f526563697069656e742073686f756c64206e6f74206861766520307830206164604482015264647265737360d81b60648201526084016106e4565b828181518110610ac657610ac6612302565b602002602001015182610ad99190612318565b915080610ae58161232b565b915050610a22565b5030600090815260208190526040902054811115610b4d5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420616d6f756e74206f6620746f6b656e7300000060448201526064016106e4565b60005b8351811015610c1157610b9630858381518110610b6f57610b6f612302565b6020026020010151858481518110610b8957610b89612302565b60200260200101516115dd565b828181518110610ba857610ba8612302565b6020026020010151848281518110610bc257610bc2612302565b60200260200101516001600160a01b03167f6168705e0a60590b36665938201fba6487d17d61c8fc43c835c9e458a9a0812860405160405180910390a380610c098161232b565b915050610b50565b50505050565b610c1f6113ed565b610912611c47565b610c2f6113ed565b6060810151604082015160208301518351610c4a9190612344565b610c549190612344565b610c5e9190612344565b60ff16606414610cb05760405162461bcd60e51b815260206004820181905260248201527f50657263656e746167652073756d206d75737420626520657175616c2031303060448201526064016106e4565b60005b600e5460ff82161015610d1157818160ff1660048110610cd557610cd5612302565b602002015160ff16600e8260ff1681548110610cf357610cf3612302565b60009182526020909120015580610d098161235d565b915050610cb3565b507ffe425ad22ad8516e756e4465a87a1e2c0b9b81860b87adf8b428db59df1a833a81604051610d41919061237c565b60405180910390a150565b606060048054610593906121e8565b60003381610d6982866110c1565b905083811015610dc95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106e4565b610684828686840361144d565b6000336106248185856115dd565b610dec6113ed565b6001600160a01b038116610e345760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016106e4565b600780546001600160a01b0319166001600160a01b0383169081179091556040517ffd173844bf546c064e10a97e4ca0b06e0dbb5e070ffff698dd0824049ace8cdb90600090a250565b6007546001600160a01b0316331480610eb8575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b0316145b610efd5760405162461bcd60e51b81526020600482015260166024820152752732b4ba3432b9102c22aa20903737b91037bbb732b960511b60448201526064016106e4565b610f056117b6565b610f103083836115dd565b60405181906001600160a01b038416907fb98a26c1d0427d0e3492e749861c7795bed8f6e7599a65143b5903942e611bb090600090a35050565b610f526113ed565b600d81905560405181907f327040b83316a571f53720058e4393a771d81e6e59d1111d1a9196f8f59a4e2790600090a250565b610f8d6113ed565b600a81905560405181907f8391928bdaaaff98ee101c719f58fe96bf768fd751adebaba685fc988a68741990600090a250565b6007546001600160a01b0316331480610ffa575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b0316145b61103f5760405162461bcd60e51b81526020600482015260166024820152752732b4ba3432b9102c22aa20903737b91037bbb732b960511b60448201526064016106e4565b600b81905560405181907f102c8eccf3fade79f171487b3e8eaf2a2b09d47415c162eb60b4ab975768af1290600090a250565b600e5460009060ff8316106110995760405162461bcd60e51b81526004016106e4906122d5565b600e8260ff16815481106110af576110af612302565b90600052602060002001549050919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6110f46113ed565b6001600160a01b0381166111595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e4565b61116281611bed565b50565b61116d6117b6565b600a5483146111be5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420584f4e206372656174696f6e20666565000000000000000060448201526064016106e4565b600084116111ff5760405162461bcd60e51b815260206004820152600e60248201526d125b1b1959d85b08185b5bdd5b9d60921b60448201526064016106e4565b600a541561124057600061121a85600a546107719190612238565b905060018115151461123e5760405162461bcd60e51b81526004016106e49061224f565b505b801561125e5761125e3330866009546112599190612238565b6115dd565b8160ff1684336001600160a01b03167f21c77d93a87dbcdbf81b2f1bfde99d697a19ba2460bcf03c1e08c2cab7808792846040516112a0911515815260200190565b60405180910390a450505050565b6112b66117b6565b600b5481146113075760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420636c61696d2072657761726420666565000000000000000060448201526064016106e4565b6000825111801561131b5750600d54825111155b6113615760405162461bcd60e51b8152602060048201526017602482015276496c6c6567616c206e756d626572206f66206e6f64657360481b60448201526064016106e4565b600b54156113a357600061137d8351600b546107719190612238565b90506001811515146113a15760405162461bcd60e51b81526004016106e49061224f565b505b336001600160a01b03167fc49756e3b61dd45063094d054a32a2a220ed6422d9a00f4c2522430c0b8d1359836040516113dc9190612286565b60405180910390a25050565b505050565b6005546001600160a01b036101009091041633146109125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e4565b6001600160a01b0383166114af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106e4565b6001600160a01b0382166115105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106e4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591016107d9565b600061157584846110c1565b90506000198114610c1157818110156115d05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106e4565b610c11848484840361144d565b6001600160a01b0383166116415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106e4565b6001600160a01b0382166116a35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106e4565b6116ae838383611c84565b6001600160a01b038316600090815260208190526040902054818110156117265760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106e4565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061175d908490612318565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117a991815260200190565b60405180910390a3610c11565b60055460ff16156109125760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106e4565b60008160000361180e57506000919050565b600654600880546001600160a01b03909216916323b872dd91339160009061183857611838612302565b6000918252602082200154600e80546001600160a01b039092169260649261186257611862612302565b9060005260206000200154876118789190612238565b61188291906123b0565b6040518463ffffffff1660e01b81526004016118a0939291906123d2565b6020604051808303816000875af11580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e391906121cb565b80156119cb5750600654600880546001600160a01b03909216916323b872dd913391600190811061191657611916612302565b9060005260206000200160009054906101000a90046001600160a01b03166064600e60018154811061194a5761194a612302565b9060005260206000200154876119609190612238565b61196a91906123b0565b6040518463ffffffff1660e01b8152600401611988939291906123d2565b6020604051808303816000875af11580156119a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cb91906121cb565b8015611ab35750600654600880546001600160a01b03909216916323b872dd91339160029081106119fe576119fe612302565b9060005260206000200160009054906101000a90046001600160a01b03166064600e600281548110611a3257611a32612302565b906000526020600020015487611a489190612238565b611a5291906123b0565b6040518463ffffffff1660e01b8152600401611a70939291906123d2565b6020604051808303816000875af1158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab391906121cb565b801561062a5750600654600880546001600160a01b03909216916323b872dd9133916003908110611ae657611ae6612302565b9060005260206000200160009054906101000a90046001600160a01b03166064600e600381548110611b1a57611b1a612302565b906000526020600020015487611b309190612238565b611b3a91906123b0565b6040518463ffffffff1660e01b8152600401611b58939291906123d2565b6020604051808303816000875af1158015611b77573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062a91906121cb565b611ba3611c8c565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611c4f6117b6565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bd03390565b6113e86117b6565b60055460ff166109125760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106e4565b80356001600160a01b0381168114611cec57600080fd5b919050565b600080600060608486031215611d0657600080fd5b611d0f84611cd5565b9250611d1d60208501611cd5565b9150604084013590509250925092565b600060208083528351808285015260005b81811015611d5a57858101830151858201604001528201611d3e565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611d8e57600080fd5b611d9783611cd5565b946020939093013593505050565b600060208284031215611db757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611dfd57611dfd611dbe565b604052919050565b600067ffffffffffffffff821115611e1f57611e1f611dbe565b5060051b60200190565b600082601f830112611e3a57600080fd5b81356020611e4f611e4a83611e05565b611dd4565b82815260059290921b84018101918181019086841115611e6e57600080fd5b8286015b84811015611ea157803567ffffffffffffffff1981168114611e945760008081fd5b8352918301918301611e72565b509695505050505050565b803560ff81168114611cec57600080fd5b600080600060608486031215611ed257600080fd5b833567ffffffffffffffff811115611ee957600080fd5b611ef586828701611e29565b935050611d1d60208501611eac565b60008060408385031215611f1757600080fd5b611f2083611eac565b9150611f2e60208401611cd5565b90509250929050565b600060208284031215611f4957600080fd5b611f5282611cd5565b9392505050565b600060208284031215611f6b57600080fd5b611f5282611eac565b600082601f830112611f8557600080fd5b81356020611f95611e4a83611e05565b82815260059290921b84018101918181019086841115611fb457600080fd5b8286015b84811015611ea15780358352918301918301611fb8565b60008060408385031215611fe257600080fd5b823567ffffffffffffffff80821115611ffa57600080fd5b818501915085601f83011261200e57600080fd5b8135602061201e611e4a83611e05565b82815260059290921b8401810191818101908984111561203d57600080fd5b948201945b838610156120625761205386611cd5565b82529482019490820190612042565b9650508601359250508082111561207857600080fd5b5061208585828601611f74565b9150509250929050565b6000608082840312156120a157600080fd5b82601f8301126120b057600080fd5b6040516080810181811067ffffffffffffffff821117156120d3576120d3611dbe565b6040528060808401858111156120e857600080fd5b845b81811015612109576120fb81611eac565b8352602092830192016120ea565b509195945050505050565b6000806040838503121561212757600080fd5b611f2083611cd5565b801515811461116257600080fd5b6000806000806080858703121561215457600080fd5b843593506020850135925061216b60408601611eac565b9150606085013561217b81612130565b939692955090935050565b6000806040838503121561219957600080fd5b823567ffffffffffffffff8111156121b057600080fd5b6121bc85828601611e29565b95602094909401359450505050565b6000602082840312156121dd57600080fd5b8151611f5281612130565b600181811c908216806121fc57607f821691505b60208210810361221c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761062a5761062a612222565b6020808252601d908201527f4572726f7220696e207061796d656e7420646973747269627574696f6e000000604082015260600190565b6020808252825182820181905260009190848201906040850190845b818110156122c957835167ffffffffffffffff1916835292840192918401916001016122a2565b50909695505050505050565b6020808252601390820152722bb937b733903bb0b63632ba10373ab6b132b960691b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b8082018082111561062a5761062a612222565b60006001820161233d5761233d612222565b5060010190565b60ff818116838216019081111561062a5761062a612222565b600060ff821660ff810361237357612373612222565b60010192915050565b60808101818360005b60048110156123a757815160ff16835260209283019290910190600101612385565b50505092915050565b6000826123cd57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03938416815291909216602082015260408101919091526060019056fea2646970667358221220255f42eaa6c27d5a573544322eb215e060d3f22b2591181f58f79e9c14ec00bc64736f6c63430008110033000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e
-----Decoded View---------------
Arg [0] : _usdcToken (address): 0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e
Deployed ByteCode Sourcemap
25499:12837:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31025:372;;;;;;:::i;:::-;;:::i;:::-;;14505:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16856:201;;;;;;:::i;:::-;;:::i;:::-;;;1502:14:1;;1495:22;1477:41;;1465:2;1450:18;16856:201:0;1337:187:1;35363:104:0;35443:14;;35363:104;;;1675:25:1;;;1663:2;1648:18;35363:104:0;1529:177:1;32505:129:0;;;;;;:::i;:::-;;:::i;36422:104::-;36502:14;;36422:104;;15625:108;15713:12;;15625:108;;17637:295;;;;;;:::i;:::-;;:::i;15467:93::-;;;15550:2;2038:36:1;;2026:2;2011:18;15467:93:0;1896:184:1;30301:605:0;;;;;;:::i;:::-;;:::i;34408:405::-;;;;;;:::i;:::-;;:::i;18341:238::-;;;;;;:::i;:::-;;:::i;34876:93::-;34950:9;;-1:-1:-1;;;;;34950:9:0;34876:93;;;-1:-1:-1;;;;;4631:32:1;;;4613:51;;4601:2;4586:18;34876:93:0;4453:217:1;31988:71:0;;;:::i;7763:86::-;7834:7;;;;7763:86;;32911:153;;;;;;:::i;:::-;;:::i;35538:106::-;35619:15;;35538:106;;15796:127;;;;;;:::i;:::-;-1:-1:-1;;;;;15897:18:0;15870:7;15897:18;;;;;;;;;;;;15796:127;5273:103;;;:::i;36139:211::-;;;;;;:::i;:::-;;:::i;35033:90::-;35106:7;;35033:90;;36588:714;;;;;;:::i;:::-;;:::i;31659:67::-;;;:::i;33722:411::-;;;;;;:::i;:::-;;:::i;4625:87::-;4698:6;;;;;-1:-1:-1;;;;;4698:6:0;4625:87;;14724:104;;;:::i;19082:436::-;;;;;;:::i;:::-;;:::i;16129:193::-;;;;;;:::i;:::-;;:::i;32224:224::-;;;;;;:::i;:::-;;:::i;29092:192::-;;;;;;:::i;:::-;;:::i;33344:159::-;;;;;;:::i;:::-;;:::i;35194:104::-;35274:14;;35194:104;;32699:147;;;;;;:::i;:::-;;:::i;33123:153::-;;;;;;:::i;:::-;;:::i;35787:212::-;;;;;;:::i;:::-;;:::i;16385:151::-;;;;;;:::i;:::-;;:::i;5531:201::-;;;;;;:::i;:::-;;:::i;29474:639::-;;;;;;:::i;:::-;;:::i;28275:555::-;;;;;;:::i;:::-;;:::i;31025:372::-;4511:13;:11;:13::i;:::-;31344:43:::1;::::0;-1:-1:-1;;;31344:43:0;;-1:-1:-1;;;;;9301:32:1;;;31344:43:0::1;::::0;::::1;9283:51:1::0;9350:18;;;9343:34;;;31171:14:0;;31344:22;;::::1;::::0;::::1;::::0;9256:18:1;;31344:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31128:269;31025:372:::0;;;:::o;14505:100::-;14559:13;14592:5;14585:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14505:100;:::o;16856:201::-;16939:4;3256:10;16995:32;3256:10;17011:7;17020:6;16995:8;:32::i;:::-;17045:4;17038:11;;;16856:201;;;;;:::o;32505:129::-;4511:13;:11;:13::i;:::-;32571:7:::1;:14:::0;;;32603:21:::1;::::0;32581:4;;32603:21:::1;::::0;;;::::1;32505:129:::0;:::o;17637:295::-;17768:4;3256:10;17826:38;17842:4;3256:10;17857:6;17826:15;:38::i;:::-;17875:27;17885:4;17891:2;17895:6;17875:9;:27::i;:::-;-1:-1:-1;17920:4:0;;17637:295;-1:-1:-1;;;;17637:295:0:o;30301:605::-;7368:19;:17;:19::i;:::-;30462:15:::1;;30442:16;:35;30433:73;;;::::0;-1:-1:-1;;;30433:73:0;;10225:2:1;30433:73:0::1;::::0;::::1;10207:21:1::0;10264:2;10244:18;;;10237:30;10303:26;10283:18;;;10276:54;10347:18;;30433:73:0::1;;;;;;;;;30544:1;30527:7;:14;:18;:54;;;;;30567:14;;30549:7;:14;:32;;30527:54;30519:90;;;::::0;-1:-1:-1;;;30519:90:0;;10578:2:1;30519:90:0::1;::::0;::::1;10560:21:1::0;10617:2;10597:18;;;10590:30;-1:-1:-1;;;10636:18:1;;;10629:53;10699:18;;30519:90:0::1;10376:347:1::0;30519:90:0::1;30626:15;::::0;:19;30622:203:::1;;30664:8;30675:66;30734:6;30699:41;;30717:7;:14;30699:15;;:32;;;;:::i;:::-;:41;;;;:::i;:::-;30675:23;:66::i;:::-;30664:77:::0;-1:-1:-1;30773:4:0::1;30766:11:::0;::::1;;;30758:53;;;;-1:-1:-1::0;;;30758:53:0::1;;;;;;;:::i;:::-;30647:178;30622:203;30889:6;30842:54;;30868:10;-1:-1:-1::0;;;;;30842:54:0::1;;30880:7;30842:54;;;;;;:::i;:::-;;;;;;;;30301:605:::0;;;:::o;34408:405::-;4511:13;:11;:13::i;:::-;-1:-1:-1;;;;;34512:26:0;::::1;34504:35;;;::::0;::::1;;34569:18;:25:::0;34560:34:::1;::::0;::::1;;34552:66;;;;-1:-1:-1::0;;;34552:66:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34639:24:0;::::1;34631:57;;;::::0;-1:-1:-1;;;34631:57:0;;12608:2:1;34631:57:0::1;::::0;::::1;12590:21:1::0;12647:2;12627:18;;;12620:30;-1:-1:-1;;;12666:18:1;;;12659:50;12726:18;;34631:57:0::1;12406:344:1::0;34631:57:0::1;34730:10;34701:18;34720:6;34701:26;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;:39:::0;;-1:-1:-1;;;;;;34701:39:0::1;-1:-1:-1::0;;;;;34701:39:0;;::::1;;::::0;;34758:45:::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;34408:405:::0;;:::o;18341:238::-;18429:4;3256:10;18485:64;3256:10;18501:7;18538:10;18510:25;3256:10;18501:7;18510:9;:25::i;:::-;:38;;;;:::i;:::-;18485:8;:64::i;31988:71::-;4511:13;:11;:13::i;:::-;32039:10:::1;:8;:10::i;:::-;31988:71::o:0;32911:153::-;4511:13;:11;:13::i;:::-;32985:15:::1;:22:::0;;;33025:29:::1;::::0;33003:4;;33025:29:::1;::::0;;;::::1;32911:153:::0;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;36139:211::-:0;36245:18;:25;36205:7;;36236:34;;;;36227:67;;;;-1:-1:-1;;;36227:67:0;;;;;;;:::i;:::-;36314:18;36333:6;36314:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;36314:26:0;;36139:211;-1:-1:-1;;36139:211:0:o;36588:714::-;4511:13;:11;:13::i;:::-;36726:6:::1;:13;36705:10;:17;:34;36697:83;;;::::0;-1:-1:-1;;;36697:83:0;;13219:2:1;36697:83:0::1;::::0;::::1;13201:21:1::0;13258:2;13238:18;;;13231:30;13297:34;13277:18;;;13270:62;-1:-1:-1;;;13348:18:1;;;13341:34;13392:19;;36697:83:0::1;13017:400:1::0;36697:83:0::1;36793:8;36823:6:::0;36818:186:::1;36839:10;:17;36835:1;:21;36818:186;;;36913:1;-1:-1:-1::0;;;;;36888:27:0::1;:10;36899:1;36888:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;36888:27:0::1;::::0;36880:77:::1;;;::::0;-1:-1:-1;;;36880:77:0;;13624:2:1;36880:77:0::1;::::0;::::1;13606:21:1::0;13663:2;13643:18;;;13636:30;13702:34;13682:18;;;13675:62;-1:-1:-1;;;13753:18:1;;;13746:35;13798:19;;36880:77:0::1;13422:401:1::0;36880:77:0::1;36981:6;36988:1;36981:9;;;;;;;;:::i;:::-;;;;;;;36974:16;;;;;:::i;:::-;::::0;-1:-1:-1;36858:3:0;::::1;::::0;::::1;:::i;:::-;;;;36818:186;;;-1:-1:-1::0;37042:4:0::1;15870:7:::0;15897:18;;;;;;;;;;;37052:3;-1:-1:-1;37024:31:0::1;37016:73;;;::::0;-1:-1:-1;;;37016:73:0;;14170:2:1;37016:73:0::1;::::0;::::1;14152:21:1::0;14209:2;14189:18;;;14182:30;14248:31;14228:18;;;14221:59;14297:18;;37016:73:0::1;13968:353:1::0;37016:73:0::1;37111:6;37106:187;37127:10;:17;37123:1;:21;37106:187;;;37168:50;37186:4;37193:10;37204:1;37193:13;;;;;;;;:::i;:::-;;;;;;;37208:6;37215:1;37208:9;;;;;;;;:::i;:::-;;;;;;;37168;:50::i;:::-;37269:6;37276:1;37269:9;;;;;;;;:::i;:::-;;;;;;;37254:10;37265:1;37254:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;37240:39:0::1;;;;;;;;;;;37146:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37106:187;;;;36684:618;36588:714:::0;;:::o;31659:67::-;4511:13;:11;:13::i;:::-;31708:8:::1;:6;:8::i;33722:411::-:0;4511:13;:11;:13::i;:::-;33873:14;;::::1;::::0;33856;;::::1;::::0;33873::::1;33839::::0;::::1;::::0;33822;;:31:::1;::::0;33839:14;33822:31:::1;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;:72;;33891:3;33822:72;33814:117;;;::::0;-1:-1:-1;;;33814:117:0;;14681:2:1;33814:117:0::1;::::0;::::1;14663:21:1::0;;;14700:18;;;14693:30;14759:34;14739:18;;;14732:62;14811:18;;33814:117:0::1;14479:356:1::0;33814:117:0::1;33949:7;33944:123;33966:18;:25:::0;33962:29:::1;::::0;::::1;;33944:123;;;34039:11;34051:1;34039:14;;;;;;;;;:::i;:::-;;;;;34015:38;;:18;34034:1;34015:21;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:38:::0;33993:3;::::1;::::0;::::1;:::i;:::-;;;;33944:123;;;;34084:39;34111:11;34084:39;;;;;;:::i;:::-;;;;;;;;33722:411:::0;:::o;14724:104::-;14780:13;14813:7;14806:14;;;;;:::i;19082:436::-;19175:4;3256:10;19175:4;19258:25;3256:10;19275:7;19258:9;:25::i;:::-;19231:52;;19322:15;19302:16;:35;;19294:85;;;;-1:-1:-1;;;19294:85:0;;15729:2:1;19294:85:0;;;15711:21:1;15768:2;15748:18;;;15741:30;15807:34;15787:18;;;15780:62;-1:-1:-1;;;15858:18:1;;;15851:35;15903:19;;19294:85:0;15527:401:1;19294:85:0;19415:60;19424:5;19431:7;19459:15;19440:16;:34;19415:8;:60::i;16129:193::-;16208:4;3256:10;16264:28;3256:10;16281:2;16285:6;16264:9;:28::i;32224:224::-;4511:13;:11;:13::i;:::-;-1:-1:-1;;;;;32308:26:0;::::1;32299:55;;;::::0;-1:-1:-1;;;32299:55:0;;16135:2:1;32299:55:0::1;::::0;::::1;16117:21:1::0;16174:2;16154:18;;;16147:30;-1:-1:-1;;;16193:18:1;;;16186:45;16248:18;;32299:55:0::1;15933:339:1::0;32299:55:0::1;32367:10;:23:::0;;-1:-1:-1;;;;;;32367:23:0::1;-1:-1:-1::0;;;;;32367:23:0;::::1;::::0;;::::1;::::0;;;32408:30:::1;::::0;::::1;::::0;-1:-1:-1;;32408:30:0::1;32224:224:::0;:::o;29092:192::-;27359:10;;-1:-1:-1;;;;;27359:10:0;27345;:24;;:49;;-1:-1:-1;4698:6:0;;;;;-1:-1:-1;;;;;4698:6:0;-1:-1:-1;;;;;27373:21:0;:10;-1:-1:-1;;;;;27373:21:0;;27345:49;27337:84;;;;-1:-1:-1;;;27337:84:0;;16479:2:1;27337:84:0;;;16461:21:1;16518:2;16498:18;;;16491:30;-1:-1:-1;;;16537:18:1;;;16530:52;16599:18;;27337:84:0;16277:346:1;27337:84:0;7368:19:::1;:17;:19::i;:::-;29197:35:::2;29215:4;29222;29228:3;29197:9;:35::i;:::-;29250:24;::::0;29270:3;;-1:-1:-1;;;;;29250:24:0;::::2;::::0;::::2;::::0;;;::::2;29092:192:::0;;:::o;33344:159::-;4511:13;:11;:13::i;:::-;33420:14:::1;:24:::0;;;33462:31:::1;::::0;33437:7;;33462:31:::1;::::0;;;::::1;33344:159:::0;:::o;32699:147::-;4511:13;:11;:13::i;:::-;32771:14:::1;:20:::0;;;32809:27:::1;::::0;32788:3;;32809:27:::1;::::0;;;::::1;32699:147:::0;:::o;33123:153::-;27359:10;;-1:-1:-1;;;;;27359:10:0;27345;:24;;:49;;-1:-1:-1;4698:6:0;;;;;-1:-1:-1;;;;;4698:6:0;-1:-1:-1;;;;;27373:21:0;:10;-1:-1:-1;;;;;27373:21:0;;27345:49;27337:84;;;;-1:-1:-1;;;27337:84:0;;16479:2:1;27337:84:0;;;16461:21:1;16518:2;16498:18;;;16491:30;-1:-1:-1;;;16537:18:1;;;16530:52;16599:18;;27337:84:0;16277:346:1;27337:84:0;33201:14:::1;:20:::0;;;33239:27:::1;::::0;33218:3;;33239:27:::1;::::0;;;::::1;33123:153:::0;:::o;35787:212::-;35894:18;:25;35854:7;;35885:34;;;;35876:67;;;;-1:-1:-1;;;35876:67:0;;;;;;;:::i;:::-;35963:18;35982:6;35963:26;;;;;;;;;;:::i;:::-;;;;;;;;;35956:33;;35787:212;;;:::o;16385:151::-;-1:-1:-1;;;;;16501:18:0;;;16474:7;16501:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16385:151::o;5531:201::-;4511:13;:11;:13::i;:::-;-1:-1:-1;;;;;5620:22:0;::::1;5612:73;;;::::0;-1:-1:-1;;;5612:73:0;;16830:2:1;5612:73:0::1;::::0;::::1;16812:21:1::0;16869:2;16849:18;;;16842:30;16908:34;16888:18;;;16881:62;-1:-1:-1;;;16959:18:1;;;16952:36;17005:19;;5612:73:0::1;16628:402:1::0;5612:73:0::1;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;29474:639::-;7368:19;:17;:19::i;:::-;29626:14:::1;;29607:15;:33;29599:70;;;::::0;-1:-1:-1;;;29599:70:0;;17237:2:1;29599:70:0::1;::::0;::::1;17219:21:1::0;17276:2;17256:18;;;17249:30;17315:26;17295:18;;;17288:54;17359:18;;29599:70:0::1;17035:348:1::0;29599:70:0::1;29699:1;29690:6;:10;29682:37;;;::::0;-1:-1:-1;;;29682:37:0;;17590:2:1;29682:37:0::1;::::0;::::1;17572:21:1::0;17629:2;17609:18;;;17602:30;-1:-1:-1;;;17648:18:1;;;17641:44;17702:18;;29682:37:0::1;17388:338:1::0;29682:37:0::1;29736:14;::::0;:18;29732:184:::1;;29773:8;29784:48;29825:6;29808:14;;:23;;;;:::i;29784:48::-;29773:59:::0;-1:-1:-1;29864:4:0::1;29857:11:::0;::::1;;;29849:53;;;;-1:-1:-1::0;;;29849:53:0::1;;;;;;;:::i;:::-;29756:160;29732:184;29932:11;29928:102;;;29962:54;29972:10;29992:4;30009:6;29999:7;;:16;;;;:::i;:::-;29962:9;:54::i;:::-;30084:5;30047:56;;30076:6;30064:10;-1:-1:-1::0;;;;;30047:56:0::1;;30091:11;30047:56;;;;1502:14:1::0;1495:22;1477:41;;1465:2;1450:18;;1337:187;30047:56:0::1;;;;;;;;29474:639:::0;;;;:::o;28275:555::-;7368:19;:17;:19::i;:::-;28413:14:::1;;28394:15;:33;28386:70;;;::::0;-1:-1:-1;;;28386:70:0;;17933:2:1;28386:70:0::1;::::0;::::1;17915:21:1::0;17972:2;17952:18;;;17945:30;18011:26;17991:18;;;17984:54;18055:18;;28386:70:0::1;17731:348:1::0;28386:70:0::1;28494:1;28477:7;:14;:18;:54;;;;;28517:14;;28499:7;:14;:32;;28477:54;28469:90;;;::::0;-1:-1:-1;;;28469:90:0;;10578:2:1;28469:90:0::1;::::0;::::1;10560:21:1::0;10617:2;10597:18;;;10590:30;-1:-1:-1;;;10636:18:1;;;10629:53;10699:18;;28469:90:0::1;10376:347:1::0;28469:90:0::1;28576:14;::::0;:18;28572:192:::1;;28613:8;28624:56;28665:7;:14;28648;;:31;;;;:::i;28624:56::-;28613:67:::0;-1:-1:-1;28712:4:0::1;28705:11:::0;::::1;;;28697:53;;;;-1:-1:-1::0;;;28697:53:0::1;;;;;;;:::i;:::-;28596:168;28572:192;28800:10;-1:-1:-1::0;;;;;28781:39:0::1;;28812:7;28781:39;;;;;;:::i;:::-;;;;;;;;28275:555:::0;;:::o;24431:125::-;;;;:::o;4790:132::-;4698:6;;-1:-1:-1;;;;;4698:6:0;;;;;3256:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;18286:2:1;4846:68:0;;;18268:21:1;;;18305:18;;;18298:30;18364:34;18344:18;;;18337:62;18416:18;;4846:68:0;18084:356:1;22707:380:0;-1:-1:-1;;;;;22843:19:0;;22835:68;;;;-1:-1:-1;;;22835:68:0;;18647:2:1;22835:68:0;;;18629:21:1;18686:2;18666:18;;;18659:30;18725:34;18705:18;;;18698:62;-1:-1:-1;;;18776:18:1;;;18769:34;18820:19;;22835:68:0;18445:400:1;22835:68:0;-1:-1:-1;;;;;22922:21:0;;22914:68;;;;-1:-1:-1;;;22914:68:0;;19052:2:1;22914:68:0;;;19034:21:1;19091:2;19071:18;;;19064:30;19130:34;19110:18;;;19103:62;-1:-1:-1;;;19181:18:1;;;19174:32;19223:19;;22914:68:0;18850:398:1;22914:68:0;-1:-1:-1;;;;;22995:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23047:32;;1675:25:1;;;23047:32:0;;1648:18:1;23047:32:0;1529:177:1;23378:453:0;23513:24;23540:25;23550:5;23557:7;23540:9;:25::i;:::-;23513:52;;-1:-1:-1;;23580:16:0;:37;23576:248;;23662:6;23642:16;:26;;23634:68;;;;-1:-1:-1;;;23634:68:0;;19455:2:1;23634:68:0;;;19437:21:1;19494:2;19474:18;;;19467:30;19533:31;19513:18;;;19506:59;19582:18;;23634:68:0;19253:353:1;23634:68:0;23746:51;23755:5;23762:7;23790:6;23771:16;:25;23746:8;:51::i;19988:671::-;-1:-1:-1;;;;;20119:18:0;;20111:68;;;;-1:-1:-1;;;20111:68:0;;19813:2:1;20111:68:0;;;19795:21:1;19852:2;19832:18;;;19825:30;19891:34;19871:18;;;19864:62;-1:-1:-1;;;19942:18:1;;;19935:35;19987:19;;20111:68:0;19611:401:1;20111:68:0;-1:-1:-1;;;;;20198:16:0;;20190:64;;;;-1:-1:-1;;;20190:64:0;;20219:2:1;20190:64:0;;;20201:21:1;20258:2;20238:18;;;20231:30;20297:34;20277:18;;;20270:62;-1:-1:-1;;;20348:18:1;;;20341:33;20391:19;;20190:64:0;20017:399:1;20190:64:0;20267:38;20288:4;20294:2;20298:6;20267:20;:38::i;:::-;-1:-1:-1;;;;;20340:15:0;;20318:19;20340:15;;;;;;;;;;;20374:21;;;;20366:72;;;;-1:-1:-1;;;20366:72:0;;20623:2:1;20366:72:0;;;20605:21:1;20662:2;20642:18;;;20635:30;20701:34;20681:18;;;20674:62;-1:-1:-1;;;20752:18:1;;;20745:36;20798:19;;20366:72:0;20421:402:1;20366:72:0;-1:-1:-1;;;;;20474:15:0;;;:9;:15;;;;;;;;;;;20492:20;;;20474:38;;20534:13;;;;;;;;:23;;20506:6;;20474:9;20534:23;;20506:6;;20534:23;:::i;:::-;;;;;;;;20590:2;-1:-1:-1;;;;;20575:26:0;20584:4;-1:-1:-1;;;;;20575:26:0;;20594:6;20575:26;;;;1675:25:1;;1663:2;1648:18;;1529:177;20575:26:0;;;;;;;;20614:37;24431:125;7922:108;7834:7;;;;7992:9;7984:38;;;;-1:-1:-1;;;7984:38:0;;21030:2:1;7984:38:0;;;21012:21:1;21069:2;21049:18;;;21042:30;-1:-1:-1;;;21088:18:1;;;21081:46;21144:18;;7984:38:0;20828:340:1;37732:599:0;37798:4;37821:6;37831:1;37821:11;37817:60;;-1:-1:-1;37858:5:0;;37732:599;-1:-1:-1;37732:599:0:o;37817:60::-;37896:9;;37931:18;:21;;-1:-1:-1;;;;;37896:9:0;;;;:22;;37919:10;;37896:9;;37931:21;;;;:::i;:::-;;;;;;;;;;37963:18;:21;;-1:-1:-1;;;;;37931:21:0;;;;37987:3;;37963:21;;;;:::i;:::-;;;;;;;;;37954:6;:30;;;;:::i;:::-;:36;;;;:::i;:::-;37896:95;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:205;;;;-1:-1:-1;38006:9:0;;38041:18;:21;;-1:-1:-1;;;;;38006:9:0;;;;:22;;38029:10;;38006:9;;38041:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38041:21:0;38097:3;38073:18;38092:1;38073:21;;;;;;;;:::i;:::-;;;;;;;;;38064:6;:30;;;;:::i;:::-;:36;;;;:::i;:::-;38006:95;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37896:315;;;;-1:-1:-1;38116:9:0;;38151:18;:21;;-1:-1:-1;;;;;38116:9:0;;;;:22;;38139:10;;38170:1;;38151:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38151:21:0;38207:3;38183:18;38202:1;38183:21;;;;;;;;:::i;:::-;;;;;;;;;38174:6;:30;;;;:::i;:::-;:36;;;;:::i;:::-;38116:95;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37896:425;;;;-1:-1:-1;38226:9:0;;38261:18;:21;;-1:-1:-1;;;;;38226:9:0;;;;:22;;38249:10;;38280:1;;38261:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38261:21:0;38317:3;38293:18;38312:1;38293:21;;;;;;;;:::i;:::-;;;;;;;;;38284:6;:30;;;;:::i;:::-;:36;;;;:::i;:::-;38226:95;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8618:120::-;7627:16;:14;:16::i;:::-;8677:7:::1;:15:::0;;-1:-1:-1;;8677:15:0::1;::::0;;8708:22:::1;3256:10:::0;8717:12:::1;8708:22;::::0;-1:-1:-1;;;;;4631:32:1;;;4613:51;;4601:2;4586:18;8708:22:0::1;;;;;;;8618:120::o:0;5892:191::-;5985:6;;;-1:-1:-1;;;;;6002:17:0;;;5985:6;6002:17;;;-1:-1:-1;;;;;;6002:17:0;;;;;;6035:40;;5985:6;;;;;;;;6035:40;;5966:16;;6035:40;5955:128;5892:191;:::o;8359:118::-;7368:19;:17;:19::i;:::-;8419:7:::1;:14:::0;;-1:-1:-1;;8419:14:0::1;8429:4;8419:14;::::0;;8449:20:::1;8456:12;3256:10:::0;;3176:98;37388:241;7368:19;:17;:19::i;8107:108::-;7834:7;;;;8166:41;;;;-1:-1:-1;;;8166:41:0;;21977:2:1;8166:41:0;;;21959:21:1;22016:2;21996:18;;;21989:30;-1:-1:-1;;;22035:18:1;;;22028:50;22095:18;;8166:41:0;21775:344:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:328::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;425:38;459:2;448:9;444:18;425:38;:::i;:::-;415:48;;510:2;499:9;495:18;482:32;472:42;;192:328;;;;;:::o;525:548::-;637:4;666:2;695;684:9;677:21;727:6;721:13;770:6;765:2;754:9;750:18;743:34;795:1;805:140;819:6;816:1;813:13;805:140;;;914:14;;;910:23;;904:30;880:17;;;899:2;876:26;869:66;834:10;;805:140;;;809:3;994:1;989:2;980:6;969:9;965:22;961:31;954:42;1064:2;1057;1053:7;1048:2;1040:6;1036:15;1032:29;1021:9;1017:45;1013:54;1005:62;;;;525:548;;;;:::o;1078:254::-;1146:6;1154;1207:2;1195:9;1186:7;1182:23;1178:32;1175:52;;;1223:1;1220;1213:12;1175:52;1246:29;1265:9;1246:29;:::i;:::-;1236:39;1322:2;1307:18;;;;1294:32;;-1:-1:-1;;;1078:254:1:o;1711:180::-;1770:6;1823:2;1811:9;1802:7;1798:23;1794:32;1791:52;;;1839:1;1836;1829:12;1791:52;-1:-1:-1;1862:23:1;;1711:180;-1:-1:-1;1711:180:1:o;2085:127::-;2146:10;2141:3;2137:20;2134:1;2127:31;2177:4;2174:1;2167:15;2201:4;2198:1;2191:15;2217:275;2288:2;2282:9;2353:2;2334:13;;-1:-1:-1;;2330:27:1;2318:40;;2388:18;2373:34;;2409:22;;;2370:62;2367:88;;;2435:18;;:::i;:::-;2471:2;2464:22;2217:275;;-1:-1:-1;2217:275:1:o;2497:183::-;2557:4;2590:18;2582:6;2579:30;2576:56;;;2612:18;;:::i;:::-;-1:-1:-1;2657:1:1;2653:14;2669:4;2649:25;;2497:183::o;2685:850::-;2739:5;2792:3;2785:4;2777:6;2773:17;2769:27;2759:55;;2810:1;2807;2800:12;2759:55;2846:6;2833:20;2872:4;2896:60;2912:43;2952:2;2912:43;:::i;:::-;2896:60;:::i;:::-;2990:15;;;3076:1;3072:10;;;;3060:23;;3056:32;;;3021:12;;;;3100:15;;;3097:35;;;3128:1;3125;3118:12;3097:35;3164:2;3156:6;3152:15;3176:330;3192:6;3187:3;3184:15;3176:330;;;3259:17;;-1:-1:-1;;3309:35:1;;3299:46;;3289:144;;3387:1;3416:2;3412;3405:14;3289:144;3446:18;;3484:12;;;;3209;;3176:330;;;-1:-1:-1;3524:5:1;2685:850;-1:-1:-1;;;;;;2685:850:1:o;3540:156::-;3606:20;;3666:4;3655:16;;3645:27;;3635:55;;3686:1;3683;3676:12;3701:486;3801:6;3809;3817;3870:2;3858:9;3849:7;3845:23;3841:32;3838:52;;;3886:1;3883;3876:12;3838:52;3926:9;3913:23;3959:18;3951:6;3948:30;3945:50;;;3991:1;3988;3981:12;3945:50;4014:61;4067:7;4058:6;4047:9;4043:22;4014:61;:::i;:::-;4004:71;;;4094:36;4126:2;4115:9;4111:18;4094:36;:::i;4192:256::-;4258:6;4266;4319:2;4307:9;4298:7;4294:23;4290:32;4287:52;;;4335:1;4332;4325:12;4287:52;4358:27;4375:9;4358:27;:::i;:::-;4348:37;;4404:38;4438:2;4427:9;4423:18;4404:38;:::i;:::-;4394:48;;4192:256;;;;;:::o;4675:186::-;4734:6;4787:2;4775:9;4766:7;4762:23;4758:32;4755:52;;;4803:1;4800;4793:12;4755:52;4826:29;4845:9;4826:29;:::i;:::-;4816:39;4675:186;-1:-1:-1;;;4675:186:1:o;4866:182::-;4923:6;4976:2;4964:9;4955:7;4951:23;4947:32;4944:52;;;4992:1;4989;4982:12;4944:52;5015:27;5032:9;5015:27;:::i;5261:662::-;5315:5;5368:3;5361:4;5353:6;5349:17;5345:27;5335:55;;5386:1;5383;5376:12;5335:55;5422:6;5409:20;5448:4;5472:60;5488:43;5528:2;5488:43;:::i;5472:60::-;5566:15;;;5652:1;5648:10;;;;5636:23;;5632:32;;;5597:12;;;;5676:15;;;5673:35;;;5704:1;5701;5694:12;5673:35;5740:2;5732:6;5728:15;5752:142;5768:6;5763:3;5760:15;5752:142;;;5834:17;;5822:30;;5872:12;;;;5785;;5752:142;;5928:1146;6046:6;6054;6107:2;6095:9;6086:7;6082:23;6078:32;6075:52;;;6123:1;6120;6113:12;6075:52;6163:9;6150:23;6192:18;6233:2;6225:6;6222:14;6219:34;;;6249:1;6246;6239:12;6219:34;6287:6;6276:9;6272:22;6262:32;;6332:7;6325:4;6321:2;6317:13;6313:27;6303:55;;6354:1;6351;6344:12;6303:55;6390:2;6377:16;6412:4;6436:60;6452:43;6492:2;6452:43;:::i;6436:60::-;6530:15;;;6612:1;6608:10;;;;6600:19;;6596:28;;;6561:12;;;;6636:19;;;6633:39;;;6668:1;6665;6658:12;6633:39;6692:11;;;;6712:148;6728:6;6723:3;6720:15;6712:148;;;6794:23;6813:3;6794:23;:::i;:::-;6782:36;;6745:12;;;;6838;;;;6712:148;;;6879:5;-1:-1:-1;;6922:18:1;;6909:32;;-1:-1:-1;;6953:16:1;;;6950:36;;;6982:1;6979;6972:12;6950:36;;7005:63;7060:7;7049:8;7038:9;7034:24;7005:63;:::i;:::-;6995:73;;;5928:1146;;;;;:::o;7079:763::-;7159:6;7212:3;7200:9;7191:7;7187:23;7183:33;7180:53;;;7229:1;7226;7219:12;7180:53;7278:7;7271:4;7260:9;7256:20;7252:34;7242:62;;7300:1;7297;7290:12;7242:62;7333:2;7327:9;7375:3;7367:6;7363:16;7445:6;7433:10;7430:22;7409:18;7397:10;7394:34;7391:62;7388:88;;;7456:18;;:::i;:::-;7492:2;7485:22;7527:6;7571:3;7556:19;;7587;;;7584:39;;;7619:1;7616;7609:12;7584:39;7643:9;7661:150;7677:6;7672:3;7669:15;7661:150;;;7745:21;7762:3;7745:21;:::i;:::-;7733:34;;7796:4;7787:14;;;;7694;7661:150;;;-1:-1:-1;7830:6:1;;7079:763;-1:-1:-1;;;;;7079:763:1:o;7847:260::-;7915:6;7923;7976:2;7964:9;7955:7;7951:23;7947:32;7944:52;;;7992:1;7989;7982:12;7944:52;8015:29;8034:9;8015:29;:::i;8112:118::-;8198:5;8191:13;8184:21;8177:5;8174:32;8164:60;;8220:1;8217;8210:12;8235:448;8316:6;8324;8332;8340;8393:3;8381:9;8372:7;8368:23;8364:33;8361:53;;;8410:1;8407;8400:12;8361:53;8446:9;8433:23;8423:33;;8503:2;8492:9;8488:18;8475:32;8465:42;;8526:36;8558:2;8547:9;8543:18;8526:36;:::i;:::-;8516:46;;8612:2;8601:9;8597:18;8584:32;8625:28;8647:5;8625:28;:::i;:::-;8235:448;;;;-1:-1:-1;8235:448:1;;-1:-1:-1;;8235:448:1:o;8688:416::-;8781:6;8789;8842:2;8830:9;8821:7;8817:23;8813:32;8810:52;;;8858:1;8855;8848:12;8810:52;8898:9;8885:23;8931:18;8923:6;8920:30;8917:50;;;8963:1;8960;8953:12;8917:50;8986:61;9039:7;9030:6;9019:9;9015:22;8986:61;:::i;:::-;8976:71;9094:2;9079:18;;;;9066:32;;-1:-1:-1;;;;8688:416:1:o;9388:245::-;9455:6;9508:2;9496:9;9487:7;9483:23;9479:32;9476:52;;;9524:1;9521;9514:12;9476:52;9556:9;9550:16;9575:28;9597:5;9575:28;:::i;9638:380::-;9717:1;9713:12;;;;9760;;;9781:61;;9835:4;9827:6;9823:17;9813:27;;9781:61;9888:2;9880:6;9877:14;9857:18;9854:38;9851:161;;9934:10;9929:3;9925:20;9922:1;9915:31;9969:4;9966:1;9959:15;9997:4;9994:1;9987:15;9851:161;;9638:380;;;:::o;10728:127::-;10789:10;10784:3;10780:20;10777:1;10770:31;10820:4;10817:1;10810:15;10844:4;10841:1;10834:15;10860:168;10933:9;;;10964;;10981:15;;;10975:22;;10961:37;10951:71;;11002:18;;:::i;11033:353::-;11235:2;11217:21;;;11274:2;11254:18;;;11247:30;11313:31;11308:2;11293:18;;11286:59;11377:2;11362:18;;11033:353::o;11391:662::-;11562:2;11614:21;;;11684:13;;11587:18;;;11706:22;;;11533:4;;11562:2;11785:15;;;;11759:2;11744:18;;;11533:4;11828:199;11842:6;11839:1;11836:13;11828:199;;;11907:13;;-1:-1:-1;;11903:43:1;11891:56;;12002:15;;;;11967:12;;;;11864:1;11857:9;11828:199;;;-1:-1:-1;12044:3:1;;11391:662;-1:-1:-1;;;;;;11391:662:1:o;12058:343::-;12260:2;12242:21;;;12299:2;12279:18;;;12272:30;-1:-1:-1;;;12333:2:1;12318:18;;12311:49;12392:2;12377:18;;12058:343::o;12755:127::-;12816:10;12811:3;12807:20;12804:1;12797:31;12847:4;12844:1;12837:15;12871:4;12868:1;12861:15;12887:125;12952:9;;;12973:10;;;12970:36;;;12986:18;;:::i;13828:135::-;13867:3;13888:17;;;13885:43;;13908:18;;:::i;:::-;-1:-1:-1;13955:1:1;13944:13;;13828:135::o;14326:148::-;14414:4;14393:12;;;14407;;;14389:31;;14432:13;;14429:39;;;14448:18;;:::i;14840:175::-;14877:3;14921:4;14914:5;14910:16;14950:4;14941:7;14938:17;14935:43;;14958:18;;:::i;:::-;15007:1;14994:15;;14840:175;-1:-1:-1;;14840:175:1:o;15020:502::-;15196:3;15181:19;;15185:9;15277:6;15154:4;15311:205;15325:4;15322:1;15319:11;15311:205;;;15388:13;;15403:4;15384:24;15372:37;;15432:4;15456:12;;;;15491:15;;;;15345:1;15338:9;15311:205;;;15315:3;;;15020:502;;;;:::o;21173:217::-;21213:1;21239;21229:132;;21283:10;21278:3;21274:20;21271:1;21264:31;21318:4;21315:1;21308:15;21346:4;21343:1;21336:15;21229:132;-1:-1:-1;21375:9:1;;21173:217::o;21395:375::-;-1:-1:-1;;;;;21653:15:1;;;21635:34;;21705:15;;;;21700:2;21685:18;;21678:43;21752:2;21737:18;;21730:34;;;;21585:2;21570:18;;21395:375::o
Swarm Source
ipfs://255f42eaa6c27d5a573544322eb215e060d3f22b2591181f58f79e9c14ec00bc
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.