Source Code
Latest 25 from a total of 3,637 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Claim | 51785886 | 93 days ago | IN | 0 S | 0.0033177 | ||||
| Claim | 51785874 | 93 days ago | IN | 0 S | 0.00463699 | ||||
| Deposit | 49734188 | 110 days ago | IN | 0 S | 0.00923021 | ||||
| Deposit | 48655204 | 119 days ago | IN | 0 S | 0.01068589 | ||||
| Deposit | 48654876 | 119 days ago | IN | 0 S | 0.01068589 | ||||
| Claim | 48654753 | 119 days ago | IN | 0 S | 0.00463479 | ||||
| Claim | 48645003 | 119 days ago | IN | 0 S | 0.00364793 | ||||
| Claim | 48644964 | 119 days ago | IN | 0 S | 0.00365013 | ||||
| Claim | 48644936 | 119 days ago | IN | 0 S | 0.00364793 | ||||
| Claim | 48644910 | 119 days ago | IN | 0 S | 0.00364793 | ||||
| Claim | 48644899 | 119 days ago | IN | 0 S | 0.00364793 | ||||
| Claim | 48644859 | 119 days ago | IN | 0 S | 0.00364947 | ||||
| Claim | 48644831 | 119 days ago | IN | 0 S | 0.00364727 | ||||
| Claim | 48644661 | 119 days ago | IN | 0 S | 0.00349981 | ||||
| Resolve Game | 48644416 | 119 days ago | IN | 0 S | 0.00649627 | ||||
| Resolve Game | 48644398 | 119 days ago | IN | 0 S | 0.00649698 | ||||
| Resolve Game | 48644367 | 119 days ago | IN | 0 S | 0.00662673 | ||||
| Resolve Game | 48644348 | 119 days ago | IN | 0 S | 0.00662673 | ||||
| Resolve Game | 48644337 | 119 days ago | IN | 0 S | 0.00662673 | ||||
| Resolve Game | 48644329 | 119 days ago | IN | 0 S | 0.00649698 | ||||
| Resolve Game | 48644315 | 119 days ago | IN | 0 S | 0.00649896 | ||||
| Resolve Game | 48644292 | 119 days ago | IN | 0 S | 0.00649698 | ||||
| Resolve Game | 48644271 | 119 days ago | IN | 0 S | 0.00649698 | ||||
| Deposit | 48637109 | 119 days ago | IN | 0 S | 0.01441913 | ||||
| Create Election ... | 46941225 | 132 days ago | IN | 0 S | 0.02680865 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SonicPredicts
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract SonicPredicts is ReentrancyGuard, Ownable {
using SafeERC20 for IERC20;
IERC20 public sonicToken;
uint256 public feePercentage = 42; // Default fee percentage (4.2%)
uint256 public creatorFeePercentile = 100; // Creator fee percentage (10% represented as 100 basis points)
enum GameType {
Election,
Coin
}
struct Game {
uint256 id;
string gameName;
string banner;
GameType gameType;
string candidateA;
string candidateB;
uint256 initialPrice;
uint256 finalPrice;
uint256 expiryTime;
uint256 lockTime;
uint256 totalPoolA;
uint256 totalPoolB;
bool resolved;
uint256 winnerPool;
uint256 feePercent;
string market;
address creator;
uint status; // 1 pending 2 rejected 3 approved
}
struct GameDeposit {
address user;
uint256 amount;
uint256 timestamp;
uint8 pool;
}
struct LeaderboardEntry {
address player;
uint256 totalDeposits;
uint256 totalWinnings;
}
mapping(uint256 => Game) public games;
mapping(uint256 => mapping(address => uint256)) public depositsA;
mapping(uint256 => mapping(address => uint256)) public depositsB;
mapping(uint256 => GameDeposit[]) public depositHistory;
mapping(address => LeaderboardEntry) public leaderboard;
address[] public players;
uint256 public gameCount;
constructor(IERC20 _sonicToken) Ownable(msg.sender) {
sonicToken = _sonicToken;
}
event GameCreated(
uint256 gameId,
string gameName,
GameType gameType,
string candidateA,
string candidateB,
uint256 initialPrice,
uint256 expiryTime,
uint256 lockTime,
uint256 feePercent,
string banner,
address creator,
uint status
);
event Deposit(
address indexed user,
uint256 gameId,
uint256 amount,
uint8 option
);
event GameResolved(uint256 gameId, uint8 winner);
event Payout(address indexed user, uint256 gameId, uint256 amount);
event FeeUpdated(uint256 gameId, uint256 newFeePercent);
event FeeUpdated(uint256 newfeePercentage);
modifier gameNotLocked(uint256 gameId) {
require(
block.timestamp < games[gameId].lockTime,
"Deposits are locked for this game"
);
_;
}
modifier gameApproved(uint256 gameId) {
require(games[gameId].status == 3, "Game not approved");
_;
}
modifier gameNotExpired(uint256 gameId) {
require(block.timestamp < games[gameId].expiryTime, "game has expired");
_;
}
modifier gameResolved(uint256 gameId) {
require(games[gameId].resolved, "Game has not been resolved yet");
_;
}
function _createGame(
string memory _gameName,
GameType _gameType,
string memory _candidateA,
string memory _candidateB,
uint256 _initialPrice,
uint256 _expiryTime,
uint256 _lockTime,
string memory _market,
string memory _banner,
address _creator,
uint _status
) internal {
require(_expiryTime > block.timestamp, "Expiry must be in the future");
require(_lockTime < _expiryTime, "Lock time must be before expiry");
gameCount++;
games[gameCount] = Game({
id: gameCount,
gameName: _gameName,
gameType: _gameType,
candidateA: _candidateA,
candidateB: _candidateB,
initialPrice: _initialPrice,
finalPrice: 0,
expiryTime: _expiryTime,
lockTime: _lockTime,
totalPoolA: 0,
totalPoolB: 0,
resolved: false,
winnerPool: 0,
feePercent: feePercentage,
market: _market,
banner: _banner,
creator: _creator,
status: _status
});
emit GameCreated(
gameCount,
_gameName,
_gameType,
_candidateA,
_candidateB,
_initialPrice,
_expiryTime,
_lockTime,
feePercentage,
_banner,
_creator,
_status
);
}
function createElectionGame(
string memory _gameName,
uint256 _expiryTime,
uint256 _lockTime,
string memory _market,
string memory _candidateA,
string memory _candidateB,
string memory _banner,
address _creator
) public {
_createGame(
_gameName,
GameType.Election,
_candidateA,
_candidateB,
0,
_expiryTime,
_lockTime,
_market,
_banner,
owner() == msg.sender ? owner() : _creator,
owner() == msg.sender ? 3 : 1
);
}
function createCoinGame(
string memory _gameName,
uint256 _expiryTime,
uint256 _lockTime,
string memory _market,
uint256 _initialPrice,
string memory _banner,
address _creator
) public {
_createGame(
_gameName,
GameType.Coin,
"", // No candidates for Coin game
"",
_initialPrice,
_expiryTime,
_lockTime,
_market,
_banner,
owner() == msg.sender ? owner() : _creator,
owner() == msg.sender ? 3 : 1
);
}
function updateGameStatus(uint256 gameId, uint newStatus) public onlyOwner {
Game storage game = games[gameId];
game.status = newStatus;
}
function resolveGame(
uint256 gameId,
uint8 winner,
uint256 _finalPrice
) public gameApproved(gameId) onlyOwner {
Game storage game = games[gameId];
require(!game.resolved, "game already resolved");
require(winner == 1 || winner == 2, "Invalid winner");
game.resolved = true;
game.winnerPool = winner;
if (game.gameType == GameType.Coin) {
game.finalPrice = _finalPrice;
}
uint256 losingPool = winner == 1 ? game.totalPoolB : game.totalPoolA;
uint256 totalFee = (losingPool * feePercentage) / 1000;
uint256 creatorFee = (totalFee * creatorFeePercentile) / 1000;
uint256 ownerFee = totalFee - creatorFee;
if (game.creator == owner()) {
sonicToken.safeTransfer(owner(), totalFee);
} else {
sonicToken.safeTransfer(owner(), ownerFee);
sonicToken.safeTransfer(game.creator, creatorFee);
}
emit GameResolved(gameId, winner);
}
function getGameDetails(
uint256 gameId
) public view returns (Game memory game, GameDeposit[] memory deposits) {
game = games[gameId];
deposits = depositHistory[gameId];
}
function getGames(
bool includeResolved,
uint status,
address creator
) public view returns (Game[] memory) {
uint256 count = 0;
for (uint256 i = 1; i <= gameCount; i++) {
if (
games[i].resolved == includeResolved &&
games[i].status == status &&
(creator == address(0) || games[i].creator == creator)
) {
count++;
}
}
Game[] memory gamesList = new Game[](count);
uint256 index = 0;
for (uint256 i = 1; i <= gameCount; i++) {
if (
games[i].resolved == includeResolved &&
games[i].status == status &&
(creator == address(0) || games[i].creator == creator)
) {
gamesList[index] = games[i];
index++;
}
}
return gamesList;
}
function deposit(
uint256 gameId,
uint8 option,
uint256 amount
)
public
gameApproved(gameId)
gameNotLocked(gameId)
gameNotExpired(gameId)
nonReentrant
{
require(option == 1 || option == 2, "Invalid option");
require(amount > 0, "Deposit must be greater than 0");
sonicToken.safeTransferFrom(msg.sender, address(this), amount);
depositHistory[gameId].push(
GameDeposit({
user: msg.sender,
amount: amount,
timestamp: block.timestamp,
pool: option
})
);
if (option == 1) {
depositsA[gameId][msg.sender] += amount;
games[gameId].totalPoolA += amount;
} else {
depositsB[gameId][msg.sender] += amount;
games[gameId].totalPoolB += amount;
}
if (leaderboard[msg.sender].player == address(0)) {
players.push(msg.sender);
leaderboard[msg.sender].player = msg.sender;
}
leaderboard[msg.sender].totalDeposits += amount;
emit Deposit(msg.sender, gameId, amount, option);
}
function getDepositsForGame(
uint256 gameId
) public view returns (GameDeposit[] memory) {
return depositHistory[gameId];
}
function getClaimableOrPendingGames(
address user
)
public
view
returns (
uint256[] memory claimableGameIds,
uint256[] memory pendingGameIds
)
{
uint256 claimableCount = 0;
uint256 pendingCount = 0;
for (uint256 i = 1; i <= gameCount; i++) {
Game storage game = games[i];
if (!game.resolved) {
if (depositsA[i][user] > 0 || depositsB[i][user] > 0) {
pendingCount++;
}
} else {
if (
(game.winnerPool == 1 && depositsA[i][user] > 0) ||
(game.winnerPool == 2 && depositsB[i][user] > 0)
) {
claimableCount++;
}
}
}
claimableGameIds = new uint256[](claimableCount);
pendingGameIds = new uint256[](pendingCount);
uint256 claimableIndex = 0;
uint256 pendingIndex = 0;
for (uint256 i = 1; i <= gameCount; i++) {
Game storage game = games[i];
if (!game.resolved) {
if (depositsA[i][user] > 0 || depositsB[i][user] > 0) {
pendingGameIds[pendingIndex++] = i;
}
} else {
if (
(game.winnerPool == 1 && depositsA[i][user] > 0) ||
(game.winnerPool == 2 && depositsB[i][user] > 0)
) {
claimableGameIds[claimableIndex++] = i;
}
}
}
}
function claim(uint256 gameId) public gameResolved(gameId) nonReentrant {
uint256 userShare = 0;
Game storage game = games[gameId];
if (game.winnerPool == 1) {
uint256 userDeposit = depositsA[gameId][msg.sender];
require(userDeposit > 0, "No deposit in winning pool");
uint256 totalWinningPool = game.totalPoolA;
uint256 losingPool = game.totalPoolB;
uint256 fee = (losingPool * game.feePercent) / 1000;
uint256 rewardPool = losingPool - fee;
userShare =
userDeposit +
(userDeposit * rewardPool) /
totalWinningPool;
depositsA[gameId][msg.sender] = 0;
} else if (game.winnerPool == 2) {
uint256 userDeposit = depositsB[gameId][msg.sender];
require(userDeposit > 0, "No deposit in winning pool");
uint256 totalWinningPool = game.totalPoolB;
uint256 losingPool = game.totalPoolA;
uint256 fee = (losingPool * game.feePercent) / 1000; // Use 1000 for percentage
uint256 rewardPool = losingPool - fee;
userShare =
userDeposit +
(userDeposit * rewardPool) /
totalWinningPool;
depositsB[gameId][msg.sender] = 0;
}
leaderboard[msg.sender].totalWinnings += userShare;
sonicToken.safeTransfer(msg.sender, userShare);
emit Payout(msg.sender, gameId, userShare);
}
function updateCreatorFeePercentage(
uint256 _newPercentile
) external onlyOwner {
require(_newPercentile <= 1000, "Creator fee cannot exceed 100%");
creatorFeePercentile = _newPercentile;
}
function updateFeePercentage(uint256 newfeePercentage) public onlyOwner {
require(
newfeePercentage <= 1000,
"Default fee percent must be <= 1000"
);
feePercentage = newfeePercentage;
emit FeeUpdated(newfeePercentage);
}
function withdraw(uint256 amount) public onlyOwner nonReentrant {
require(
sonicToken.balanceOf(address(this)) >= amount,
"Insufficient balance"
);
sonicToken.safeTransfer(owner(), amount);
}
function getLeaderboard() public view returns (LeaderboardEntry[] memory) {
uint256 entryCount = 0;
for (uint256 i = 0; i < players.length; i++) {
if (
leaderboard[players[i]].totalWinnings > 0 ||
leaderboard[players[i]].totalDeposits > 0
) {
entryCount++;
}
}
LeaderboardEntry[] memory entries = new LeaderboardEntry[](entryCount);
uint256 index = 0;
for (uint256 i = 0; i < players.length; i++) {
if (
leaderboard[players[i]].totalWinnings > 0 ||
leaderboard[players[i]].totalDeposits > 0
) {
entries[index] = LeaderboardEntry({
player: players[i],
totalDeposits: leaderboard[players[i]].totalDeposits,
totalWinnings: leaderboard[players[i]].totalWinnings
});
index++;
}
}
return entries;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @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 {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_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);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*
* ==== Security Considerations
*
* There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
* considered as an intention to spend the allowance in any specific way. The second is that because permits have
* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
* generally recommended is:
*
* ```solidity
* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
* doThing(..., value);
* }
*
* function doThing(..., uint256 value) public {
* token.safeTransferFrom(msg.sender, address(this), value);
* ...
* }
* ```
*
* Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of
* `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also
* {SafeERC20-safeTransferFrom}).
*
* Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so
* contracts should have entry points that don't rely on permit.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*
* CAUTION: See Security Considerations above.
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
import {IERC20Permit} from "../extensions/IERC20Permit.sol";
import {Address} from "../../../utils/Address.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
/**
* @dev An operation with an ERC20 token failed.
*/
error SafeERC20FailedOperation(address token);
/**
* @dev Indicates a failed `decreaseAllowance` request.
*/
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
* value, non-reverting calls are assumed to be successful.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data);
if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.
*/
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
// and not revert is the subcall reverts.
(bool success, bytes memory returndata) = address(token).call(data);
return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error AddressInsufficientBalance(address account);
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedInnerCall();
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {FailedInnerCall} error.
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
* unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {FailedInnerCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
*/
function _revert(bytes memory returndata) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert FailedInnerCall();
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be NOT_ENTERED
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
_status = ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"viaIR": true,
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_sonicToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"option","type":"uint8"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFeePercent","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newfeePercentage","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"string","name":"gameName","type":"string"},{"indexed":false,"internalType":"enum SonicPredicts.GameType","name":"gameType","type":"uint8"},{"indexed":false,"internalType":"string","name":"candidateA","type":"string"},{"indexed":false,"internalType":"string","name":"candidateB","type":"string"},{"indexed":false,"internalType":"uint256","name":"initialPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiryTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feePercent","type":"uint256"},{"indexed":false,"internalType":"string","name":"banner","type":"string"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"status","type":"uint256"}],"name":"GameCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"winner","type":"uint8"}],"name":"GameResolved","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Payout","type":"event"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_gameName","type":"string"},{"internalType":"uint256","name":"_expiryTime","type":"uint256"},{"internalType":"uint256","name":"_lockTime","type":"uint256"},{"internalType":"string","name":"_market","type":"string"},{"internalType":"uint256","name":"_initialPrice","type":"uint256"},{"internalType":"string","name":"_banner","type":"string"},{"internalType":"address","name":"_creator","type":"address"}],"name":"createCoinGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_gameName","type":"string"},{"internalType":"uint256","name":"_expiryTime","type":"uint256"},{"internalType":"uint256","name":"_lockTime","type":"uint256"},{"internalType":"string","name":"_market","type":"string"},{"internalType":"string","name":"_candidateA","type":"string"},{"internalType":"string","name":"_candidateB","type":"string"},{"internalType":"string","name":"_banner","type":"string"},{"internalType":"address","name":"_creator","type":"address"}],"name":"createElectionGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creatorFeePercentile","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"},{"internalType":"uint8","name":"option","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"depositHistory","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint8","name":"pool","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"depositsA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"depositsB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"gameName","type":"string"},{"internalType":"string","name":"banner","type":"string"},{"internalType":"enum SonicPredicts.GameType","name":"gameType","type":"uint8"},{"internalType":"string","name":"candidateA","type":"string"},{"internalType":"string","name":"candidateB","type":"string"},{"internalType":"uint256","name":"initialPrice","type":"uint256"},{"internalType":"uint256","name":"finalPrice","type":"uint256"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"uint256","name":"lockTime","type":"uint256"},{"internalType":"uint256","name":"totalPoolA","type":"uint256"},{"internalType":"uint256","name":"totalPoolB","type":"uint256"},{"internalType":"bool","name":"resolved","type":"bool"},{"internalType":"uint256","name":"winnerPool","type":"uint256"},{"internalType":"uint256","name":"feePercent","type":"uint256"},{"internalType":"string","name":"market","type":"string"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"status","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getClaimableOrPendingGames","outputs":[{"internalType":"uint256[]","name":"claimableGameIds","type":"uint256[]"},{"internalType":"uint256[]","name":"pendingGameIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getDepositsForGame","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint8","name":"pool","type":"uint8"}],"internalType":"struct SonicPredicts.GameDeposit[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGameDetails","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"gameName","type":"string"},{"internalType":"string","name":"banner","type":"string"},{"internalType":"enum SonicPredicts.GameType","name":"gameType","type":"uint8"},{"internalType":"string","name":"candidateA","type":"string"},{"internalType":"string","name":"candidateB","type":"string"},{"internalType":"uint256","name":"initialPrice","type":"uint256"},{"internalType":"uint256","name":"finalPrice","type":"uint256"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"uint256","name":"lockTime","type":"uint256"},{"internalType":"uint256","name":"totalPoolA","type":"uint256"},{"internalType":"uint256","name":"totalPoolB","type":"uint256"},{"internalType":"bool","name":"resolved","type":"bool"},{"internalType":"uint256","name":"winnerPool","type":"uint256"},{"internalType":"uint256","name":"feePercent","type":"uint256"},{"internalType":"string","name":"market","type":"string"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"status","type":"uint256"}],"internalType":"struct SonicPredicts.Game","name":"game","type":"tuple"},{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint8","name":"pool","type":"uint8"}],"internalType":"struct SonicPredicts.GameDeposit[]","name":"deposits","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"includeResolved","type":"bool"},{"internalType":"uint256","name":"status","type":"uint256"},{"internalType":"address","name":"creator","type":"address"}],"name":"getGames","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"gameName","type":"string"},{"internalType":"string","name":"banner","type":"string"},{"internalType":"enum SonicPredicts.GameType","name":"gameType","type":"uint8"},{"internalType":"string","name":"candidateA","type":"string"},{"internalType":"string","name":"candidateB","type":"string"},{"internalType":"uint256","name":"initialPrice","type":"uint256"},{"internalType":"uint256","name":"finalPrice","type":"uint256"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"uint256","name":"lockTime","type":"uint256"},{"internalType":"uint256","name":"totalPoolA","type":"uint256"},{"internalType":"uint256","name":"totalPoolB","type":"uint256"},{"internalType":"bool","name":"resolved","type":"bool"},{"internalType":"uint256","name":"winnerPool","type":"uint256"},{"internalType":"uint256","name":"feePercent","type":"uint256"},{"internalType":"string","name":"market","type":"string"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"status","type":"uint256"}],"internalType":"struct SonicPredicts.Game[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLeaderboard","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"totalDeposits","type":"uint256"},{"internalType":"uint256","name":"totalWinnings","type":"uint256"}],"internalType":"struct SonicPredicts.LeaderboardEntry[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"leaderboard","outputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"totalDeposits","type":"uint256"},{"internalType":"uint256","name":"totalWinnings","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"players","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"},{"internalType":"uint8","name":"winner","type":"uint8"},{"internalType":"uint256","name":"_finalPrice","type":"uint256"}],"name":"resolveGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPercentile","type":"uint256"}],"name":"updateCreatorFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newfeePercentage","type":"uint256"}],"name":"updateFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"},{"internalType":"uint256","name":"newStatus","type":"uint256"}],"name":"updateGameStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608034620000de57601f6200377938819003918201601f19168301916001600160401b03831184841017620000e357808492602094604052833981010312620000de57516001600160a01b039081811690819003620000de5760016000553315620000c55760018054336001600160a01b03198083168217909355604051949091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3602a6003556064600455600254161760025561367f9081620000fa8239f35b604051631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe610120604052600436101561001357600080fd5b60003560e01c8063117a5b9014612c5b5780631b31abda14612a795780632e1a7d4d1461298457806333dd563f14612651578063379607f51461244a578063461a3a951461242157806347b00525146123d95780634d1975b4146123bb57806360798cab14611fe95780636cad3fb014611f425780636d763a6e14611cc9578063715018a614611c6c578063771558d91461135e5780638873a498146112ef5780638da5cb5b146112c6578063a001ecdd146112a8578063b8c6f50014610fde578063c6e565d314610dec578063c722c55814610d37578063c9a9581914610365578063d1406cea1461031d578063d1d33d20146102c9578063db6ea62a1461029c578063e3eb8a351461027e578063eb57e64914610216578063f2fde38b1461018d5763f71d96cb1461014657600080fd5b3461018857602036600319011261018857600435600a548110156101885761016f60209161326b565b905460405160039290921b1c6001600160a01b03168152f35b600080fd5b34610188576020366003190112610188576101a6613153565b6101ae61348d565b6001600160a01b039081169081156101fd57600154826001600160601b0360a01b821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b604051631e4fbdf760e01b815260006004820152602490fd5b346101885761022436613223565b906000526008602052604060002080548210156101885760809161024791613239565b5060018060a01b038154169060018101549060ff600360028301549201541691604051938452602084015260408301526060820152f35b34610188576000366003190112610188576020600454604051908152f35b34610188576102aa36613223565b906102b361348d565b6000526005602052601160406000200155600080f35b346101885760203660031901126101885760606001600160a01b03806102ed613153565b16600052600960205260406000209081541690600260018201549101549060405192835260208301526040820152f35b346101885760403660031901126101885761033661313d565b600435600052600760205260406000209060018060a01b03166000526020526020604060002054604051908152f35b346101885760e0366003190112610188576004356001600160401b038111610188576103959036906004016131a8565b6064356001600160401b038111610188576103b49036906004016131a8565b9060a4356001600160401b038111610188576103d49036906004016131a8565b9060c435906001600160a01b0382168203610188576001546001600160a01b0316338114928315610d2f5750915b15610d27576003905b6040519361041885612ea4565b6000855260405161042881612ea4565b60008152426024351115610ce2576024356044351015610c9d5761044d600b54613349565b80600b5560035497604051986104628a612e52565b828a528560208b01528460408b0152600160608b01528860808b01528360a08b015260843560c08b0152600060e08b01526024356101008b01526044356101208b015260006101408b015260006101608b015260006101808b015260006101a08b01526101c08a01526101e089015260018060a01b03861661020089015260ff8516610220890152600052600560205260406000208751815560208801518051906001600160401b0382116109315781906105206001850154612e18565b601f8111610c4a575b50602090601f8311600114610bd857600092610bcd575b50508160011b916000199060031b1c19161760018201555b60408801518051906001600160401b03821161093157819061057d6002850154612e18565b601f8111610b7a575b50602090601f8311600114610b0857600092610afd575b50508160011b916000199060031b1c19161760028201555b60608801516002811015610ae75760ff8019600384015416911617600382015560808801518051906001600160401b0382116109315781906105fa6004850154612e18565b601f8111610a94575b50602090601f8311600114610a2257600092610a17575b50508160011b916000199060031b1c19161760048201555b60a08801518051906001600160401b0382116109315781906106576005850154612e18565b601f81116109c4575b50602090601f831160011461095257600092610947575b50508160011b916000199060031b1c19161760058201555b60c0880151600682015560e0880151600782015561010088015160088201556101208801516009820155610140880151600a820155610160880151600b8201556106ef6101808901511515600c83019060ff801983541691151516179055565b6101a0880151600d8201556101c0880151600e8201556101e08801518051906001600160401b03821161093157610729600f840154612e18565b601f81116108ea575b50602090601f8311600114610853579360ff9693601161022060008051602061362a8339815191529d8660209e9d9c9a976107fe9761082b9b600092610848575b50508160011b916000199060031b1c191617600f8501555b6010840160018060a01b03610200830151166001600160601b0360a01b82541617905501519101556107f0600b54996107db600354966101806040519e8f9e8f90815201526101808d0190612f85565b90600160408d01528b820360608d0152612f85565b9089820360808b0152612f85565b9160843560a089015260243560c089015260443560e0890152610100880152868203610120880152612f85565b6001600160a01b03909316610140850152166101608301520390a1005b015190503880610773565b90600f840160005260206000209160005b601f19851681106108d2575093601161022060008051602061362a8339815191529d60018760209f9e9d9b989761082b9b9760ff9e9b6107fe9a601f198116106108b9575b505050811b01600f85015561078b565b015160001960f88460031b161c191690553880806108a9565b91926020600181928685015181550194019201610864565b600f84016000526020600020601f840160051c81016020851061092a575b601f830160051c8201811061091e575050610732565b60008155600101610908565b5080610908565b634e487b7160e01b600052604160045260246000fd5b015190508a80610677565b9250600584016000526020600020906000935b601f19841685106109a9576001945083601f19811610610990575b505050811b01600582015561068f565b015160001960f88460031b161c191690558a8080610980565b81810151835560209485019460019093019290910190610965565b909150600584016000526020600020601f840160051c810160208510610a10575b90849392915b601f830160051c82018110610a01575050610660565b600081558594506001016109eb565b50806109e5565b015190508a8061061a565b9250600484016000526020600020906000935b601f1984168510610a79576001945083601f19811610610a60575b505050811b016004820155610632565b015160001960f88460031b161c191690558a8080610a50565b81810151835560209485019460019093019290910190610a35565b909150600484016000526020600020601f840160051c810160208510610ae0575b90849392915b601f830160051c82018110610ad1575050610603565b60008155859450600101610abb565b5080610ab5565b634e487b7160e01b600052602160045260246000fd5b015190508a8061059d565b9250600284016000526020600020906000935b601f1984168510610b5f576001945083601f19811610610b46575b505050811b0160028201556105b5565b015160001960f88460031b161c191690558a8080610b36565b81810151835560209485019460019093019290910190610b1b565b909150600284016000526020600020601f840160051c810160208510610bc6575b90849392915b601f830160051c82018110610bb7575050610586565b60008155859450600101610ba1565b5080610b9b565b015190508a80610540565b9250600184016000526020600020906000935b601f1984168510610c2f576001945083601f19811610610c16575b505050811b016001820155610558565b015160001960f88460031b161c191690558a8080610c06565b81810151835560209485019460019093019290910190610beb565b909150600184016000526020600020601f840160051c810160208510610c96575b90849392915b601f830160051c82018110610c87575050610529565b60008155859450600101610c71565b5080610c6b565b60405162461bcd60e51b815260206004820152601f60248201527f4c6f636b2074696d65206d757374206265206265666f726520657870697279006044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527f457870697279206d75737420626520696e2074686520667574757265000000006044820152606490fd5b60019061040b565b905091610402565b346101885760208060031936011261018857600435600052600881526040600020908154610d6481613332565b92610d726040519485612ebf565b8184526000908152828120838086015b848410610da05760405182815280610d9c8185018a6130dd565b0390f35b600191600491604051610db281612e6e565b848060a01b03865416815284860154838201526002860154604082015260ff60038701541660608201528152019201920191908490610d82565b3461018857610dfa36613169565b91806000526005602052610e1860036011604060002001541461341b565b610e2061348d565b8060005260056020526040600020600c81019081549360ff8516610fa15760ff16916001831494858015610f97575b15610f615760ff19166001179055600d8101829055600381015460ff16936002851015610ae7577fc476b09c91681b1e03ac948089793c804a27569df87c784dec68c1e1bf244a4d95600160409614610f56575b5015610f4957610ec1600b8201545b6103e8918291600354906133ce565b0490610ecf600454836133ce565b046010610edc8284613401565b930180546001546001600160a01b03908116959093929184168603610f2057505050610f13925080600254169060015416906134dc565b82519182526020820152a1005b83929450610f4495610f369294600254166134dc565b8060025416915416906134dc565b610f13565b610ec1600a820154610eb2565b600783015586610ea3565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103bb4b73732b960911b6044820152606490fd5b5060028414610e4f565b60405162461bcd60e51b815260206004820152601560248201527419d85b5948185b1c9958591e481c995cdbdb1d9959605a1b6044820152606490fd5b346101885760208060031936011261018857610ff8613153565b600b5490916000918260015b8281111561117e575061101961101f9161345b565b9361345b565b936000908160015b848111156110595761104c87610d9c888b6040519485946040865260408601906131ef565b91848303908501526131ef565b806110b09160005260058752604060002060ff600c82015416156000146110f2575060008181526006885260408082206001600160a01b038716808452908a5291205415801591906110cf575b506110b557613349565b611027565b806110c96110c287613349565b968b61336e565b52613349565b90508160005260078852604060002090600052875260406000205415158a6110a6565b600d015460018114908161115a575b8115611122575b501561334957806110c961111b85613349565b948a61336e565b600291501480611133575b8a611108565b5060008181526007885260408082206001600160a01b03871683528952902054151561112d565b60068952604060008181206001600160a01b03891682528b52205415159150611101565b8060005260058452604060002060ff600c8201541615600014611213575060008181526006855260408082206001600160a01b03891680845290875291205415801591906111f0575b506111db575b6111d690613349565b611004565b936111e86111d691613349565b9490506111cd565b9050816000526007855260406000209060005284526040600020541515876111c7565b600d0154600181149081611284575b811561124c575b50611237576111d690613349565b906112446111d691613349565b9190506111cd565b60029150148061125d575b87611229565b5060008181526007855260408082206001600160a01b038916835286529020541515611257565b60068652604060008181206001600160a01b038b1682528852205415159150611222565b34610188576000366003190112610188576020600354604051908152f35b34610188576000366003190112610188576001546040516001600160a01b039091168152602090f35b346101885760203660031901126101885760043561130b61348d565b6103e8811161131957600455005b60405162461bcd60e51b815260206004820152601e60248201527f43726561746f72206665652063616e6e6f7420657863656564203130302500006044820152606490fd5b3461018857610100366003190112610188576004356001600160401b0381116101885761138f9036906004016131a8565b6064356001600160401b038111610188576113ae9036906004016131a8565b906084356001600160401b038111610188576113ce9036906004016131a8565b9060a4356001600160401b038111610188576113ee9036906004016131a8565b60c4356001600160401b0381116101885761140d9036906004016131a8565b60e43592906001600160a01b0384168403610188576001546001600160a01b0316338114948515611c645750935b15611c5c576003925b426024351115610ce2576024356044351015610c9d57611465600b54613349565b80600b55600354976040519861147a8a612e52565b828a528560208b01528460408b0152600060608b01528860808b01528360a08b0152600060c08b0152600060e08b01526024356101008b01526044356101208b015260006101408b015260006101608b015260006101808b015260006101a08b01526101c08a01526101e089015260018060a01b03861661020089015260ff8516610220890152600052600560205260406000208751815560208801518051906001600160401b0382116109315781906115376001850154612e18565b601f8111611c09575b50602090601f8311600114611b9757600092611b8c575b50508160011b916000199060031b1c19161760018201555b60408801518051906001600160401b0382116109315781906115946002850154612e18565b601f8111611b39575b50602090601f8311600114611ac757600092611abc575b50508160011b916000199060031b1c19161760028201555b60608801516002811015610ae75760ff8019600384015416911617600382015560808801518051906001600160401b0382116109315781906116116004850154612e18565b601f8111611a69575b50602090601f83116001146119f7576000926119ec575b50508160011b916000199060031b1c19161760048201555b60a08801518051906001600160401b03821161093157819061166e6005850154612e18565b601f8111611999575b50602090601f83116001146119275760009261191c575b50508160011b916000199060031b1c19161760058201555b60c0880151600682015560e0880151600782015561010088015160088201556101208801516009820155610140880151600a820155610160880151600b8201556117066101808901511515600c83019060ff801983541691151516179055565b6101a0880151600d8201556101c0880151600e8201556101e08801518051906001600160401b03821161093157611740600f840154612e18565b601f81116118d5575b50602090601f831160011461183e579360ff9693601161022060008051602061362a8339815191529d8660209e9d9c9a976118079761082b9b600092611833575b50508160011b916000199060031b1c191617600f8501555b6010840160018060a01b03610200830151166001600160601b0360a01b82541617905501519101556107f0600b54996117f2600354966101806040519e8f9e8f90815201526101808d0190612f85565b90600060408d01528b820360608d0152612f85565b91600060a089015260243560c089015260443560e0890152610100880152868203610120880152612f85565b01519050388061178a565b90600f840160005260206000209160005b601f19851681106118bd575093601161022060008051602061362a8339815191529d60018760209f9e9d9b989761082b9b9760ff9e9b6118079a601f198116106118a4575b505050811b01600f8501556117a2565b015160001960f88460031b161c19169055388080611894565b9192602060018192868501518155019401920161184f565b600f84016000526020600020601f840160051c810160208510611915575b601f830160051c82018110611909575050611749565b600081556001016118f3565b50806118f3565b015190508a8061168e565b9250600584016000526020600020906000935b601f198416851061197e576001945083601f19811610611965575b505050811b0160058201556116a6565b015160001960f88460031b161c191690558a8080611955565b8181015183556020948501946001909301929091019061193a565b909150600584016000526020600020601f840160051c8101602085106119e5575b90849392915b601f830160051c820181106119d6575050611677565b600081558594506001016119c0565b50806119ba565b015190508a80611631565b9250600484016000526020600020906000935b601f1984168510611a4e576001945083601f19811610611a35575b505050811b016004820155611649565b015160001960f88460031b161c191690558a8080611a25565b81810151835560209485019460019093019290910190611a0a565b909150600484016000526020600020601f840160051c810160208510611ab5575b90849392915b601f830160051c82018110611aa657505061161a565b60008155859450600101611a90565b5080611a8a565b015190508a806115b4565b9250600284016000526020600020906000935b601f1984168510611b1e576001945083601f19811610611b05575b505050811b0160028201556115cc565b015160001960f88460031b161c191690558a8080611af5565b81810151835560209485019460019093019290910190611ada565b909150600284016000526020600020601f840160051c810160208510611b85575b90849392915b601f830160051c82018110611b7657505061159d565b60008155859450600101611b60565b5080611b5a565b015190508a80611557565b9250600184016000526020600020906000935b601f1984168510611bee576001945083601f19811610611bd5575b505050811b01600182015561156f565b015160001960f88460031b161c191690558a8080611bc5565b81810151835560209485019460019093019290910190611baa565b909150600184016000526020600020601f840160051c810160208510611c55575b90849392915b601f830160051c82018110611c46575050611540565b60008155859450600101611c30565b5080611c2a565b600192611444565b90509361143b565b3461018857600036600319011261018857611c8561348d565b600180546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461018857600036600319011261018857600080600a54905b818110611eb75750611d0c611cf683613332565b92611d046040519485612ebf565b808452613332565b60209190601f19018260005b828110611e8c575050506000805b828110611d8757604080518581528651818701819052878701928201908760005b828110611d545784840385f35b855180516001600160a01b0316855280830151858401526040908101519085015294810194606090930192600101611d47565b611d908161326b565b60018060a01b03809254600392831b1c166000526009808752600290816040600020015415801590611e64575b611dce575b50505050600101611d26565b918391859693611e5a95611de360019861326b565b905490851b1c169380611df58a61326b565b905490861b1c16600052818b52876040600020015493611e148a61326b565b9054911b1c166000528952604060002001549060405192611e3484612e89565b8352888301526040820152611e49828961336e565b52611e54818861336e565b50613349565b9190868080611dc2565b5083611e6f8661326b565b905490851b1c166000528088526001604060002001541515611dbd565b604051611e9881612e89565b6000815260008382015260006040820152828288010152018390611d18565b611ec08161326b565b9060018060a01b03809154600393841b1c166000526009906020908282526002604060002001541593841594611f16575b50505050611f02575b600101611ce2565b91611f0e600191613349565b929050611efa565b9091929350611f248561326b565b9054911b1c1660005252600160406000200154151584808080611ef1565b3461018857602036600319011261018857600435611f5e61348d565b6103e88111611f98576020817f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c7692600355604051908152a1005b60405162461bcd60e51b815260206004820152602360248201527f44656661756c74206665652070657263656e74206d757374206265203c3d203160448201526203030360ec1b6064820152608490fd5b3461018857611ff736613169565b826000939293526020926005845261201960036011604060002001541461341b565b826000526005845260096040600020015442101561236c5782600052600584526008604060002001544210156123345760ff906120546134b9565b169060019384831480801561232a575b156122f45782156122af576002546040516323b872dd60e01b84820152336024820152306044820152606480820186905281526001600160a01b039160a08201919083166001600160401b03831182841017610931576120c692604052613515565b85600052600883526040600020604051926120e084612e6e565b338452848401938685526040810142815260608201918983528454946801000000000000000095868110156109315761211d918e82018155613239565b6122995760ff928d886003945116996001600160601b0360a01b9a8b85541617845551908301555160028201550191511660ff198254161790556000146122525786600052600684526040600020336000528452604060002061218186825461340e565b90558660005260058452600a60406000200161219e86825461340e565b90555b3360005260098452816040600020541615612207575b505050846040600020016121cc83825461340e565b905560405193845283015260408201527fa7db47d395930224de3f54139208b4a958fe3747c2ad1dee5a6624643a6def9360603392a2600055005b600a54908110156109315780886122219201600a5561326b565b819291549060031b9133831b921b1916179055336000526009825260406000209033908254161790558580806121b7565b86600052600784526040600020336000528452604060002061227586825461340e565b90558660005260058452600b60406000200161229286825461340e565b90556121a1565b634e487b7160e01b600052600060045260246000fd5b60405162461bcd60e51b815260048101839052601e60248201527f4465706f736974206d7573742062652067726561746572207468616e203000006044820152606490fd5b60405162461bcd60e51b815260048101839052600e60248201526d24b73b30b634b21037b83a34b7b760911b6044820152606490fd5b5060028414612064565b60405162461bcd60e51b815260048101859052601060248201526f19d85b59481a185cc8195e1c1a5c995960821b6044820152606490fd5b60405162461bcd60e51b815260048101859052602160248201527f4465706f7369747320617265206c6f636b656420666f7220746869732067616d6044820152606560f81b6064820152608490fd5b34610188576000366003190112610188576020600b54604051908152f35b34610188576040366003190112610188576123f261313d565b600435600052600660205260406000209060018060a01b03166000526020526020604060002054604051908152f35b34610188576000366003190112610188576002546040516001600160a01b039091168152602090f35b34610188576020806003193601126101885760043590816000526005815260ff600c60406000200154161561260d576124816134b9565b60009082600052600581526040600020600d81015460018114600014612592575061250a91925083600052600683526040600020336000528352612504604060002054916124d0831515613382565b6124ff6124f9600a830154926103e86124f2600e600b840154930154836133ce565b0490613401565b846133ce565b6133e1565b9061340e565b9082600052600681526040600020336000528152600060408120555b3360005260098152600260406000200161254183825461340e565b905560025461255c90839033906001600160a01b03166134dc565b6040519283528201527f634235fcf5af0adbca1a405ec65f6f6c08f55e1f379c2c45cd10f23cb29e0e3160403392a26001600055005b6002146125a0575b50612526565b81925060076125ec92526040600020336000528352612504604060002054916125ca831515613382565b6124ff6124f9600b830154926103e86124f2600e600a840154930154836133ce565b9082600052600781526040600020336000528152600060408120558361259a565b6064906040519062461bcd60e51b82526004820152601e60248201527f47616d6520686173206e6f74206265656e207265736f6c7665642079657400006044820152fd5b34610188576060366003190112610188576004358015158103610188576044356001600160a01b038116810361018857600091600191600b54925b838111156128ed57506126b76126a185613332565b946126af6040519687612ebf565b808652613332565b601f190160005b8181106128d657505060009160015b8481111561273d57856040518091602082016020835281518091526040830190602060408260051b8601019301916000905b82821061270e57505050500390f35b9193600191939550602061272d8192603f198a82030186528851612fd2565b96019201920185949391926126ff565b80600052600580602052604060002060ff9182600c830154161515908515158214806128c7575b8061289d575b612781575b5050505061277c90613349565b6126cd565b61277c94979261289394926127ef6011936127d7604051966127a288612e52565b855488526127b260018701612ee0565b60208901526127c360028701612ee0565b604089015260038601541660608801613326565b6127e360048501612ee0565b60808701528301612ee0565b60a0850152600682015460c0850152600782015460e085015260088201546101008501526009820154610120850152600a820154610140850152600b820154610160850152610180840152600d8101546101a0840152600e8101546101c084015261285c600f8201612ee0565b6101e084015260108101546001600160a01b03166102008401520154610220820152612888828a61336e565b52611e54818961336e565b939087808061276f565b506001600160a01b038716158061276a575060108301546001600160a01b0388811691161461276a565b50602435601184015414612764565b6020906128e16132a2565b828289010152016126be565b806000526005602052604060002083151560ff600c830154161515149081612974575b8161293f575b5061292a575b61292590613349565b61268c565b9361293761292591613349565b94905061291c565b6001600160a01b038416159150811561295a575b5086612916565b601001546001600160a01b03848116911614905086612953565b6011810154602435149150612910565b3461018857602080600319360112610188576004356129a161348d565b6129a96134b9565b6002546040516370a0823160e01b81523060048201526001600160a01b0391821691908481602481865afa8015612a6d578491600091612a3c575b5010612a00576129f9935060015416906134dc565b6001600055005b60405162461bcd60e51b8152600481018590526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b809250868092503d8311612a66575b612a558183612ebf565b8101031261018857839051866129e4565b503d612a4b565b6040513d6000823e3d90fd5b346101885760208060031936011261018857600435612a966132a2565b508060005260058252604060002060405191612ab183612e52565b81548352600190612ac460018401612ee0565b85850152600290612ad760028501612ee0565b604086015260ff9160039460ff60038201541692612afa60609460608a01613326565b612b0660048301612ee0565b6080890152612b1760058301612ee0565b60a0890152600682015460c0890152600782015460e089015260088201546101008901526009820154610120890152600a820154610140890152600b82015461016089015260ff600c830154161515610180890152600d8201546101a0890152600e8201546101c0890152612b8e600f8301612ee0565b6101e0890152601160018060a01b0392836010820154166102008b0152015461022089015260005260088852604060002092835494612bcc86613332565b97612bda604051998a612ebf565b86895260009586528a8620948b8a015b888810612c1b57612c0e8c610d9c8f8e604051948594604086526040860190612fd2565b91848303908501526130dd565b60048d8b92604051612c2c81612e6e565b898b54168152848b015483820152858b0154604082015287878c01541689820152815201970197019695612bea565b34610188576020366003190112610188576004356000526005602052604060002080548160018101612c8c90612ee0565b91612c9960028301612ee0565b60e052600382015460ff1661010052612cb460048301612ee0565b92612cc160058401612ee0565b9360068401549460078501546008860154600987015491600a88015493600b89015495600c8a015460ff1697600d8b015499600e8c01549b600f01612d0590612ee0565b9d600160a01b6001900360108201541660a0526011015460805260405160c0526102409060c051528060c0516020015260c05101612d4291612f85565b60c051810360c0516040015260e05190612d5b91612f85565b60c0516060016101005190612d6f91612fc5565b60c051810360c05160800152612d8491612f85565b60c051810360c05160a00152612d9991612f85565b9860c05160c0015260c05160e0015260c051610100015260c051610120015260c051610140015260c0516101600152151560c051610180015260c0516101a0015260c0516101c0015260c051810360c0516101e00152612df891612f85565b60a05160c051610200015260805160c051610220015260c051900360c051f35b90600182811c92168015612e48575b6020831014612e3257565b634e487b7160e01b600052602260045260246000fd5b91607f1691612e27565b61024081019081106001600160401b0382111761093157604052565b608081019081106001600160401b0382111761093157604052565b606081019081106001600160401b0382111761093157604052565b602081019081106001600160401b0382111761093157604052565b90601f801991011681019081106001600160401b0382111761093157604052565b90604051918260008254612ef381612e18565b90818452602094600191600181169081600014612f635750600114612f24575b505050612f2292500383612ebf565b565b600090815285812095935091905b818310612f4b575050612f229350820101388080612f13565b85548884018501529485019487945091830191612f32565b92505050612f2294925060ff191682840152151560051b820101388080612f13565b919082519283825260005b848110612fb1575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201612f90565b906002821015610ae75752565b906130bc61304561303361300f612ffd61024087518752602088015190806020890152870190612f85565b60408701518682036040880152612f85565b61302160608701516060870190612fc5565b60808601518582036080870152612f85565b60a085015184820360a0860152612f85565b60c084015160c084015260e084015160e08401526101008085015190840152610120808501519084015261014080850151908401526101608085015190840152610180808501511515908401526101a080850151908401526101c080850151908401526101e0808501519084830390850152612f85565b9161020060018060a01b038183015116908301526102208091015191015290565b90815180825260208080930193019160005b8281106130fd575050505090565b835180516001600160a01b0316865280830151868401526040808201519087015260609081015160ff1690860152608090940193928101926001016130ef565b602435906001600160a01b038216820361018857565b600435906001600160a01b038216820361018857565b6060906003190112610188576004359060243560ff81168103610188579060443590565b6001600160401b03811161093157601f01601f191660200190565b81601f82011215610188578035906131bf8261318d565b926131cd6040519485612ebf565b8284526020838301011161018857816000926020809301838601378301015290565b90815180825260208080930193019160005b82811061320f575050505090565b835185529381019392810192600101613201565b6040906003190112610188576004359060243590565b80548210156132555760005260206000209060021b0190600090565b634e487b7160e01b600052603260045260246000fd5b600a5481101561325557600a6000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80190600090565b604051906132af82612e52565b81610220600091828152606080602083015280604083015283818301528060808301528060a08301528360c08301528360e08301528361010083015283610120830152836101408301528361016083015283610180830152836101a0830152836101c08301526101e0820152826102008201520152565b6002821015610ae75752565b6001600160401b0381116109315760051b60200190565b60001981146133585760010190565b634e487b7160e01b600052601160045260246000fd5b80518210156132555760209160051b010190565b1561338957565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f206465706f73697420696e2077696e6e696e6720706f6f6c0000000000006044820152606490fd5b8181029291811591840414171561335857565b81156133eb570490565b634e487b7160e01b600052601260045260246000fd5b9190820391821161335857565b9190820180921161335857565b1561342257565b60405162461bcd60e51b815260206004820152601160248201527011d85b59481b9bdd08185c1c1c9bdd9959607a1b6044820152606490fd5b9061346582613332565b6134726040519182612ebf565b8281528092613483601f1991613332565b0190602036910137565b6001546001600160a01b031633036134a157565b60405163118cdaa760e01b8152336004820152602490fd5b6002600054146134ca576002600055565b604051633ee5aeb560e01b8152600490fd5b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604480830193909352918152612f229161351582612e6e565b60018060a01b03169061355f600080836020829551910182875af13d156135be573d906135418261318d565b9161354f6040519384612ebf565b82523d84602084013e5b846135c6565b90815191821515928361358f575b5050506135775750565b60249060405190635274afe760e01b82526004820152fd5b8192935090602091810103126135ba5760200151908115918215036135b7575038808061356d565b80fd5b5080fd5b606090613559565b906135ed57508051156135db57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580613620575b6135fe575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156135f656fedc8a2367f4eb37400edfd399e2a1c519acc1e98fb473dc6cee99fa064d4d7d21a264697066735822122029ff545447a0b254d058528b819ca9ea0b3d364f7be4572055130683bcf3421464736f6c634300081800330000000000000000000000005fd9cd00c975ccedb4298a562d132fb2683164d9
Deployed Bytecode
0x610120604052600436101561001357600080fd5b60003560e01c8063117a5b9014612c5b5780631b31abda14612a795780632e1a7d4d1461298457806333dd563f14612651578063379607f51461244a578063461a3a951461242157806347b00525146123d95780634d1975b4146123bb57806360798cab14611fe95780636cad3fb014611f425780636d763a6e14611cc9578063715018a614611c6c578063771558d91461135e5780638873a498146112ef5780638da5cb5b146112c6578063a001ecdd146112a8578063b8c6f50014610fde578063c6e565d314610dec578063c722c55814610d37578063c9a9581914610365578063d1406cea1461031d578063d1d33d20146102c9578063db6ea62a1461029c578063e3eb8a351461027e578063eb57e64914610216578063f2fde38b1461018d5763f71d96cb1461014657600080fd5b3461018857602036600319011261018857600435600a548110156101885761016f60209161326b565b905460405160039290921b1c6001600160a01b03168152f35b600080fd5b34610188576020366003190112610188576101a6613153565b6101ae61348d565b6001600160a01b039081169081156101fd57600154826001600160601b0360a01b821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b604051631e4fbdf760e01b815260006004820152602490fd5b346101885761022436613223565b906000526008602052604060002080548210156101885760809161024791613239565b5060018060a01b038154169060018101549060ff600360028301549201541691604051938452602084015260408301526060820152f35b34610188576000366003190112610188576020600454604051908152f35b34610188576102aa36613223565b906102b361348d565b6000526005602052601160406000200155600080f35b346101885760203660031901126101885760606001600160a01b03806102ed613153565b16600052600960205260406000209081541690600260018201549101549060405192835260208301526040820152f35b346101885760403660031901126101885761033661313d565b600435600052600760205260406000209060018060a01b03166000526020526020604060002054604051908152f35b346101885760e0366003190112610188576004356001600160401b038111610188576103959036906004016131a8565b6064356001600160401b038111610188576103b49036906004016131a8565b9060a4356001600160401b038111610188576103d49036906004016131a8565b9060c435906001600160a01b0382168203610188576001546001600160a01b0316338114928315610d2f5750915b15610d27576003905b6040519361041885612ea4565b6000855260405161042881612ea4565b60008152426024351115610ce2576024356044351015610c9d5761044d600b54613349565b80600b5560035497604051986104628a612e52565b828a528560208b01528460408b0152600160608b01528860808b01528360a08b015260843560c08b0152600060e08b01526024356101008b01526044356101208b015260006101408b015260006101608b015260006101808b015260006101a08b01526101c08a01526101e089015260018060a01b03861661020089015260ff8516610220890152600052600560205260406000208751815560208801518051906001600160401b0382116109315781906105206001850154612e18565b601f8111610c4a575b50602090601f8311600114610bd857600092610bcd575b50508160011b916000199060031b1c19161760018201555b60408801518051906001600160401b03821161093157819061057d6002850154612e18565b601f8111610b7a575b50602090601f8311600114610b0857600092610afd575b50508160011b916000199060031b1c19161760028201555b60608801516002811015610ae75760ff8019600384015416911617600382015560808801518051906001600160401b0382116109315781906105fa6004850154612e18565b601f8111610a94575b50602090601f8311600114610a2257600092610a17575b50508160011b916000199060031b1c19161760048201555b60a08801518051906001600160401b0382116109315781906106576005850154612e18565b601f81116109c4575b50602090601f831160011461095257600092610947575b50508160011b916000199060031b1c19161760058201555b60c0880151600682015560e0880151600782015561010088015160088201556101208801516009820155610140880151600a820155610160880151600b8201556106ef6101808901511515600c83019060ff801983541691151516179055565b6101a0880151600d8201556101c0880151600e8201556101e08801518051906001600160401b03821161093157610729600f840154612e18565b601f81116108ea575b50602090601f8311600114610853579360ff9693601161022060008051602061362a8339815191529d8660209e9d9c9a976107fe9761082b9b600092610848575b50508160011b916000199060031b1c191617600f8501555b6010840160018060a01b03610200830151166001600160601b0360a01b82541617905501519101556107f0600b54996107db600354966101806040519e8f9e8f90815201526101808d0190612f85565b90600160408d01528b820360608d0152612f85565b9089820360808b0152612f85565b9160843560a089015260243560c089015260443560e0890152610100880152868203610120880152612f85565b6001600160a01b03909316610140850152166101608301520390a1005b015190503880610773565b90600f840160005260206000209160005b601f19851681106108d2575093601161022060008051602061362a8339815191529d60018760209f9e9d9b989761082b9b9760ff9e9b6107fe9a601f198116106108b9575b505050811b01600f85015561078b565b015160001960f88460031b161c191690553880806108a9565b91926020600181928685015181550194019201610864565b600f84016000526020600020601f840160051c81016020851061092a575b601f830160051c8201811061091e575050610732565b60008155600101610908565b5080610908565b634e487b7160e01b600052604160045260246000fd5b015190508a80610677565b9250600584016000526020600020906000935b601f19841685106109a9576001945083601f19811610610990575b505050811b01600582015561068f565b015160001960f88460031b161c191690558a8080610980565b81810151835560209485019460019093019290910190610965565b909150600584016000526020600020601f840160051c810160208510610a10575b90849392915b601f830160051c82018110610a01575050610660565b600081558594506001016109eb565b50806109e5565b015190508a8061061a565b9250600484016000526020600020906000935b601f1984168510610a79576001945083601f19811610610a60575b505050811b016004820155610632565b015160001960f88460031b161c191690558a8080610a50565b81810151835560209485019460019093019290910190610a35565b909150600484016000526020600020601f840160051c810160208510610ae0575b90849392915b601f830160051c82018110610ad1575050610603565b60008155859450600101610abb565b5080610ab5565b634e487b7160e01b600052602160045260246000fd5b015190508a8061059d565b9250600284016000526020600020906000935b601f1984168510610b5f576001945083601f19811610610b46575b505050811b0160028201556105b5565b015160001960f88460031b161c191690558a8080610b36565b81810151835560209485019460019093019290910190610b1b565b909150600284016000526020600020601f840160051c810160208510610bc6575b90849392915b601f830160051c82018110610bb7575050610586565b60008155859450600101610ba1565b5080610b9b565b015190508a80610540565b9250600184016000526020600020906000935b601f1984168510610c2f576001945083601f19811610610c16575b505050811b016001820155610558565b015160001960f88460031b161c191690558a8080610c06565b81810151835560209485019460019093019290910190610beb565b909150600184016000526020600020601f840160051c810160208510610c96575b90849392915b601f830160051c82018110610c87575050610529565b60008155859450600101610c71565b5080610c6b565b60405162461bcd60e51b815260206004820152601f60248201527f4c6f636b2074696d65206d757374206265206265666f726520657870697279006044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527f457870697279206d75737420626520696e2074686520667574757265000000006044820152606490fd5b60019061040b565b905091610402565b346101885760208060031936011261018857600435600052600881526040600020908154610d6481613332565b92610d726040519485612ebf565b8184526000908152828120838086015b848410610da05760405182815280610d9c8185018a6130dd565b0390f35b600191600491604051610db281612e6e565b848060a01b03865416815284860154838201526002860154604082015260ff60038701541660608201528152019201920191908490610d82565b3461018857610dfa36613169565b91806000526005602052610e1860036011604060002001541461341b565b610e2061348d565b8060005260056020526040600020600c81019081549360ff8516610fa15760ff16916001831494858015610f97575b15610f615760ff19166001179055600d8101829055600381015460ff16936002851015610ae7577fc476b09c91681b1e03ac948089793c804a27569df87c784dec68c1e1bf244a4d95600160409614610f56575b5015610f4957610ec1600b8201545b6103e8918291600354906133ce565b0490610ecf600454836133ce565b046010610edc8284613401565b930180546001546001600160a01b03908116959093929184168603610f2057505050610f13925080600254169060015416906134dc565b82519182526020820152a1005b83929450610f4495610f369294600254166134dc565b8060025416915416906134dc565b610f13565b610ec1600a820154610eb2565b600783015586610ea3565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103bb4b73732b960911b6044820152606490fd5b5060028414610e4f565b60405162461bcd60e51b815260206004820152601560248201527419d85b5948185b1c9958591e481c995cdbdb1d9959605a1b6044820152606490fd5b346101885760208060031936011261018857610ff8613153565b600b5490916000918260015b8281111561117e575061101961101f9161345b565b9361345b565b936000908160015b848111156110595761104c87610d9c888b6040519485946040865260408601906131ef565b91848303908501526131ef565b806110b09160005260058752604060002060ff600c82015416156000146110f2575060008181526006885260408082206001600160a01b038716808452908a5291205415801591906110cf575b506110b557613349565b611027565b806110c96110c287613349565b968b61336e565b52613349565b90508160005260078852604060002090600052875260406000205415158a6110a6565b600d015460018114908161115a575b8115611122575b501561334957806110c961111b85613349565b948a61336e565b600291501480611133575b8a611108565b5060008181526007885260408082206001600160a01b03871683528952902054151561112d565b60068952604060008181206001600160a01b03891682528b52205415159150611101565b8060005260058452604060002060ff600c8201541615600014611213575060008181526006855260408082206001600160a01b03891680845290875291205415801591906111f0575b506111db575b6111d690613349565b611004565b936111e86111d691613349565b9490506111cd565b9050816000526007855260406000209060005284526040600020541515876111c7565b600d0154600181149081611284575b811561124c575b50611237576111d690613349565b906112446111d691613349565b9190506111cd565b60029150148061125d575b87611229565b5060008181526007855260408082206001600160a01b038916835286529020541515611257565b60068652604060008181206001600160a01b038b1682528852205415159150611222565b34610188576000366003190112610188576020600354604051908152f35b34610188576000366003190112610188576001546040516001600160a01b039091168152602090f35b346101885760203660031901126101885760043561130b61348d565b6103e8811161131957600455005b60405162461bcd60e51b815260206004820152601e60248201527f43726561746f72206665652063616e6e6f7420657863656564203130302500006044820152606490fd5b3461018857610100366003190112610188576004356001600160401b0381116101885761138f9036906004016131a8565b6064356001600160401b038111610188576113ae9036906004016131a8565b906084356001600160401b038111610188576113ce9036906004016131a8565b9060a4356001600160401b038111610188576113ee9036906004016131a8565b60c4356001600160401b0381116101885761140d9036906004016131a8565b60e43592906001600160a01b0384168403610188576001546001600160a01b0316338114948515611c645750935b15611c5c576003925b426024351115610ce2576024356044351015610c9d57611465600b54613349565b80600b55600354976040519861147a8a612e52565b828a528560208b01528460408b0152600060608b01528860808b01528360a08b0152600060c08b0152600060e08b01526024356101008b01526044356101208b015260006101408b015260006101608b015260006101808b015260006101a08b01526101c08a01526101e089015260018060a01b03861661020089015260ff8516610220890152600052600560205260406000208751815560208801518051906001600160401b0382116109315781906115376001850154612e18565b601f8111611c09575b50602090601f8311600114611b9757600092611b8c575b50508160011b916000199060031b1c19161760018201555b60408801518051906001600160401b0382116109315781906115946002850154612e18565b601f8111611b39575b50602090601f8311600114611ac757600092611abc575b50508160011b916000199060031b1c19161760028201555b60608801516002811015610ae75760ff8019600384015416911617600382015560808801518051906001600160401b0382116109315781906116116004850154612e18565b601f8111611a69575b50602090601f83116001146119f7576000926119ec575b50508160011b916000199060031b1c19161760048201555b60a08801518051906001600160401b03821161093157819061166e6005850154612e18565b601f8111611999575b50602090601f83116001146119275760009261191c575b50508160011b916000199060031b1c19161760058201555b60c0880151600682015560e0880151600782015561010088015160088201556101208801516009820155610140880151600a820155610160880151600b8201556117066101808901511515600c83019060ff801983541691151516179055565b6101a0880151600d8201556101c0880151600e8201556101e08801518051906001600160401b03821161093157611740600f840154612e18565b601f81116118d5575b50602090601f831160011461183e579360ff9693601161022060008051602061362a8339815191529d8660209e9d9c9a976118079761082b9b600092611833575b50508160011b916000199060031b1c191617600f8501555b6010840160018060a01b03610200830151166001600160601b0360a01b82541617905501519101556107f0600b54996117f2600354966101806040519e8f9e8f90815201526101808d0190612f85565b90600060408d01528b820360608d0152612f85565b91600060a089015260243560c089015260443560e0890152610100880152868203610120880152612f85565b01519050388061178a565b90600f840160005260206000209160005b601f19851681106118bd575093601161022060008051602061362a8339815191529d60018760209f9e9d9b989761082b9b9760ff9e9b6118079a601f198116106118a4575b505050811b01600f8501556117a2565b015160001960f88460031b161c19169055388080611894565b9192602060018192868501518155019401920161184f565b600f84016000526020600020601f840160051c810160208510611915575b601f830160051c82018110611909575050611749565b600081556001016118f3565b50806118f3565b015190508a8061168e565b9250600584016000526020600020906000935b601f198416851061197e576001945083601f19811610611965575b505050811b0160058201556116a6565b015160001960f88460031b161c191690558a8080611955565b8181015183556020948501946001909301929091019061193a565b909150600584016000526020600020601f840160051c8101602085106119e5575b90849392915b601f830160051c820181106119d6575050611677565b600081558594506001016119c0565b50806119ba565b015190508a80611631565b9250600484016000526020600020906000935b601f1984168510611a4e576001945083601f19811610611a35575b505050811b016004820155611649565b015160001960f88460031b161c191690558a8080611a25565b81810151835560209485019460019093019290910190611a0a565b909150600484016000526020600020601f840160051c810160208510611ab5575b90849392915b601f830160051c82018110611aa657505061161a565b60008155859450600101611a90565b5080611a8a565b015190508a806115b4565b9250600284016000526020600020906000935b601f1984168510611b1e576001945083601f19811610611b05575b505050811b0160028201556115cc565b015160001960f88460031b161c191690558a8080611af5565b81810151835560209485019460019093019290910190611ada565b909150600284016000526020600020601f840160051c810160208510611b85575b90849392915b601f830160051c82018110611b7657505061159d565b60008155859450600101611b60565b5080611b5a565b015190508a80611557565b9250600184016000526020600020906000935b601f1984168510611bee576001945083601f19811610611bd5575b505050811b01600182015561156f565b015160001960f88460031b161c191690558a8080611bc5565b81810151835560209485019460019093019290910190611baa565b909150600184016000526020600020601f840160051c810160208510611c55575b90849392915b601f830160051c82018110611c46575050611540565b60008155859450600101611c30565b5080611c2a565b600192611444565b90509361143b565b3461018857600036600319011261018857611c8561348d565b600180546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461018857600036600319011261018857600080600a54905b818110611eb75750611d0c611cf683613332565b92611d046040519485612ebf565b808452613332565b60209190601f19018260005b828110611e8c575050506000805b828110611d8757604080518581528651818701819052878701928201908760005b828110611d545784840385f35b855180516001600160a01b0316855280830151858401526040908101519085015294810194606090930192600101611d47565b611d908161326b565b60018060a01b03809254600392831b1c166000526009808752600290816040600020015415801590611e64575b611dce575b50505050600101611d26565b918391859693611e5a95611de360019861326b565b905490851b1c169380611df58a61326b565b905490861b1c16600052818b52876040600020015493611e148a61326b565b9054911b1c166000528952604060002001549060405192611e3484612e89565b8352888301526040820152611e49828961336e565b52611e54818861336e565b50613349565b9190868080611dc2565b5083611e6f8661326b565b905490851b1c166000528088526001604060002001541515611dbd565b604051611e9881612e89565b6000815260008382015260006040820152828288010152018390611d18565b611ec08161326b565b9060018060a01b03809154600393841b1c166000526009906020908282526002604060002001541593841594611f16575b50505050611f02575b600101611ce2565b91611f0e600191613349565b929050611efa565b9091929350611f248561326b565b9054911b1c1660005252600160406000200154151584808080611ef1565b3461018857602036600319011261018857600435611f5e61348d565b6103e88111611f98576020817f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c7692600355604051908152a1005b60405162461bcd60e51b815260206004820152602360248201527f44656661756c74206665652070657263656e74206d757374206265203c3d203160448201526203030360ec1b6064820152608490fd5b3461018857611ff736613169565b826000939293526020926005845261201960036011604060002001541461341b565b826000526005845260096040600020015442101561236c5782600052600584526008604060002001544210156123345760ff906120546134b9565b169060019384831480801561232a575b156122f45782156122af576002546040516323b872dd60e01b84820152336024820152306044820152606480820186905281526001600160a01b039160a08201919083166001600160401b03831182841017610931576120c692604052613515565b85600052600883526040600020604051926120e084612e6e565b338452848401938685526040810142815260608201918983528454946801000000000000000095868110156109315761211d918e82018155613239565b6122995760ff928d886003945116996001600160601b0360a01b9a8b85541617845551908301555160028201550191511660ff198254161790556000146122525786600052600684526040600020336000528452604060002061218186825461340e565b90558660005260058452600a60406000200161219e86825461340e565b90555b3360005260098452816040600020541615612207575b505050846040600020016121cc83825461340e565b905560405193845283015260408201527fa7db47d395930224de3f54139208b4a958fe3747c2ad1dee5a6624643a6def9360603392a2600055005b600a54908110156109315780886122219201600a5561326b565b819291549060031b9133831b921b1916179055336000526009825260406000209033908254161790558580806121b7565b86600052600784526040600020336000528452604060002061227586825461340e565b90558660005260058452600b60406000200161229286825461340e565b90556121a1565b634e487b7160e01b600052600060045260246000fd5b60405162461bcd60e51b815260048101839052601e60248201527f4465706f736974206d7573742062652067726561746572207468616e203000006044820152606490fd5b60405162461bcd60e51b815260048101839052600e60248201526d24b73b30b634b21037b83a34b7b760911b6044820152606490fd5b5060028414612064565b60405162461bcd60e51b815260048101859052601060248201526f19d85b59481a185cc8195e1c1a5c995960821b6044820152606490fd5b60405162461bcd60e51b815260048101859052602160248201527f4465706f7369747320617265206c6f636b656420666f7220746869732067616d6044820152606560f81b6064820152608490fd5b34610188576000366003190112610188576020600b54604051908152f35b34610188576040366003190112610188576123f261313d565b600435600052600660205260406000209060018060a01b03166000526020526020604060002054604051908152f35b34610188576000366003190112610188576002546040516001600160a01b039091168152602090f35b34610188576020806003193601126101885760043590816000526005815260ff600c60406000200154161561260d576124816134b9565b60009082600052600581526040600020600d81015460018114600014612592575061250a91925083600052600683526040600020336000528352612504604060002054916124d0831515613382565b6124ff6124f9600a830154926103e86124f2600e600b840154930154836133ce565b0490613401565b846133ce565b6133e1565b9061340e565b9082600052600681526040600020336000528152600060408120555b3360005260098152600260406000200161254183825461340e565b905560025461255c90839033906001600160a01b03166134dc565b6040519283528201527f634235fcf5af0adbca1a405ec65f6f6c08f55e1f379c2c45cd10f23cb29e0e3160403392a26001600055005b6002146125a0575b50612526565b81925060076125ec92526040600020336000528352612504604060002054916125ca831515613382565b6124ff6124f9600b830154926103e86124f2600e600a840154930154836133ce565b9082600052600781526040600020336000528152600060408120558361259a565b6064906040519062461bcd60e51b82526004820152601e60248201527f47616d6520686173206e6f74206265656e207265736f6c7665642079657400006044820152fd5b34610188576060366003190112610188576004358015158103610188576044356001600160a01b038116810361018857600091600191600b54925b838111156128ed57506126b76126a185613332565b946126af6040519687612ebf565b808652613332565b601f190160005b8181106128d657505060009160015b8481111561273d57856040518091602082016020835281518091526040830190602060408260051b8601019301916000905b82821061270e57505050500390f35b9193600191939550602061272d8192603f198a82030186528851612fd2565b96019201920185949391926126ff565b80600052600580602052604060002060ff9182600c830154161515908515158214806128c7575b8061289d575b612781575b5050505061277c90613349565b6126cd565b61277c94979261289394926127ef6011936127d7604051966127a288612e52565b855488526127b260018701612ee0565b60208901526127c360028701612ee0565b604089015260038601541660608801613326565b6127e360048501612ee0565b60808701528301612ee0565b60a0850152600682015460c0850152600782015460e085015260088201546101008501526009820154610120850152600a820154610140850152600b820154610160850152610180840152600d8101546101a0840152600e8101546101c084015261285c600f8201612ee0565b6101e084015260108101546001600160a01b03166102008401520154610220820152612888828a61336e565b52611e54818961336e565b939087808061276f565b506001600160a01b038716158061276a575060108301546001600160a01b0388811691161461276a565b50602435601184015414612764565b6020906128e16132a2565b828289010152016126be565b806000526005602052604060002083151560ff600c830154161515149081612974575b8161293f575b5061292a575b61292590613349565b61268c565b9361293761292591613349565b94905061291c565b6001600160a01b038416159150811561295a575b5086612916565b601001546001600160a01b03848116911614905086612953565b6011810154602435149150612910565b3461018857602080600319360112610188576004356129a161348d565b6129a96134b9565b6002546040516370a0823160e01b81523060048201526001600160a01b0391821691908481602481865afa8015612a6d578491600091612a3c575b5010612a00576129f9935060015416906134dc565b6001600055005b60405162461bcd60e51b8152600481018590526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b809250868092503d8311612a66575b612a558183612ebf565b8101031261018857839051866129e4565b503d612a4b565b6040513d6000823e3d90fd5b346101885760208060031936011261018857600435612a966132a2565b508060005260058252604060002060405191612ab183612e52565b81548352600190612ac460018401612ee0565b85850152600290612ad760028501612ee0565b604086015260ff9160039460ff60038201541692612afa60609460608a01613326565b612b0660048301612ee0565b6080890152612b1760058301612ee0565b60a0890152600682015460c0890152600782015460e089015260088201546101008901526009820154610120890152600a820154610140890152600b82015461016089015260ff600c830154161515610180890152600d8201546101a0890152600e8201546101c0890152612b8e600f8301612ee0565b6101e0890152601160018060a01b0392836010820154166102008b0152015461022089015260005260088852604060002092835494612bcc86613332565b97612bda604051998a612ebf565b86895260009586528a8620948b8a015b888810612c1b57612c0e8c610d9c8f8e604051948594604086526040860190612fd2565b91848303908501526130dd565b60048d8b92604051612c2c81612e6e565b898b54168152848b015483820152858b0154604082015287878c01541689820152815201970197019695612bea565b34610188576020366003190112610188576004356000526005602052604060002080548160018101612c8c90612ee0565b91612c9960028301612ee0565b60e052600382015460ff1661010052612cb460048301612ee0565b92612cc160058401612ee0565b9360068401549460078501546008860154600987015491600a88015493600b89015495600c8a015460ff1697600d8b015499600e8c01549b600f01612d0590612ee0565b9d600160a01b6001900360108201541660a0526011015460805260405160c0526102409060c051528060c0516020015260c05101612d4291612f85565b60c051810360c0516040015260e05190612d5b91612f85565b60c0516060016101005190612d6f91612fc5565b60c051810360c05160800152612d8491612f85565b60c051810360c05160a00152612d9991612f85565b9860c05160c0015260c05160e0015260c051610100015260c051610120015260c051610140015260c0516101600152151560c051610180015260c0516101a0015260c0516101c0015260c051810360c0516101e00152612df891612f85565b60a05160c051610200015260805160c051610220015260c051900360c051f35b90600182811c92168015612e48575b6020831014612e3257565b634e487b7160e01b600052602260045260246000fd5b91607f1691612e27565b61024081019081106001600160401b0382111761093157604052565b608081019081106001600160401b0382111761093157604052565b606081019081106001600160401b0382111761093157604052565b602081019081106001600160401b0382111761093157604052565b90601f801991011681019081106001600160401b0382111761093157604052565b90604051918260008254612ef381612e18565b90818452602094600191600181169081600014612f635750600114612f24575b505050612f2292500383612ebf565b565b600090815285812095935091905b818310612f4b575050612f229350820101388080612f13565b85548884018501529485019487945091830191612f32565b92505050612f2294925060ff191682840152151560051b820101388080612f13565b919082519283825260005b848110612fb1575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201612f90565b906002821015610ae75752565b906130bc61304561303361300f612ffd61024087518752602088015190806020890152870190612f85565b60408701518682036040880152612f85565b61302160608701516060870190612fc5565b60808601518582036080870152612f85565b60a085015184820360a0860152612f85565b60c084015160c084015260e084015160e08401526101008085015190840152610120808501519084015261014080850151908401526101608085015190840152610180808501511515908401526101a080850151908401526101c080850151908401526101e0808501519084830390850152612f85565b9161020060018060a01b038183015116908301526102208091015191015290565b90815180825260208080930193019160005b8281106130fd575050505090565b835180516001600160a01b0316865280830151868401526040808201519087015260609081015160ff1690860152608090940193928101926001016130ef565b602435906001600160a01b038216820361018857565b600435906001600160a01b038216820361018857565b6060906003190112610188576004359060243560ff81168103610188579060443590565b6001600160401b03811161093157601f01601f191660200190565b81601f82011215610188578035906131bf8261318d565b926131cd6040519485612ebf565b8284526020838301011161018857816000926020809301838601378301015290565b90815180825260208080930193019160005b82811061320f575050505090565b835185529381019392810192600101613201565b6040906003190112610188576004359060243590565b80548210156132555760005260206000209060021b0190600090565b634e487b7160e01b600052603260045260246000fd5b600a5481101561325557600a6000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80190600090565b604051906132af82612e52565b81610220600091828152606080602083015280604083015283818301528060808301528060a08301528360c08301528360e08301528361010083015283610120830152836101408301528361016083015283610180830152836101a0830152836101c08301526101e0820152826102008201520152565b6002821015610ae75752565b6001600160401b0381116109315760051b60200190565b60001981146133585760010190565b634e487b7160e01b600052601160045260246000fd5b80518210156132555760209160051b010190565b1561338957565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f206465706f73697420696e2077696e6e696e6720706f6f6c0000000000006044820152606490fd5b8181029291811591840414171561335857565b81156133eb570490565b634e487b7160e01b600052601260045260246000fd5b9190820391821161335857565b9190820180921161335857565b1561342257565b60405162461bcd60e51b815260206004820152601160248201527011d85b59481b9bdd08185c1c1c9bdd9959607a1b6044820152606490fd5b9061346582613332565b6134726040519182612ebf565b8281528092613483601f1991613332565b0190602036910137565b6001546001600160a01b031633036134a157565b60405163118cdaa760e01b8152336004820152602490fd5b6002600054146134ca576002600055565b604051633ee5aeb560e01b8152600490fd5b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604480830193909352918152612f229161351582612e6e565b60018060a01b03169061355f600080836020829551910182875af13d156135be573d906135418261318d565b9161354f6040519384612ebf565b82523d84602084013e5b846135c6565b90815191821515928361358f575b5050506135775750565b60249060405190635274afe760e01b82526004820152fd5b8192935090602091810103126135ba5760200151908115918215036135b7575038808061356d565b80fd5b5080fd5b606090613559565b906135ed57508051156135db57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580613620575b6135fe575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156135f656fedc8a2367f4eb37400edfd399e2a1c519acc1e98fb473dc6cee99fa064d4d7d21a264697066735822122029ff545447a0b254d058528b819ca9ea0b3d364f7be4572055130683bcf3421464736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005fd9cd00c975ccedb4298a562d132fb2683164d9
-----Decoded View---------------
Arg [0] : _sonicToken (address): 0x5fD9CD00c975CcEDB4298A562d132fb2683164D9
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005fd9cd00c975ccedb4298a562d132fb2683164d9
Deployed Bytecode Sourcemap
238:14271:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;1680:24;238:14271;1680:24;;;;;;238:14271;1680:24;;:::i;:::-;238:14271;;;;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;1680:24;238:14271;1680:24;;238:14271;;;;;;-1:-1:-1;;238:14271:7;;;;;;:::i;:::-;1500:62:0;;:::i;:::-;-1:-1:-1;;;;;238:14271:7;;;;2627:22:0;;2623:91;;3004:6;238:14271:7;;-1:-1:-1;;;;;238:14271:7;;;;;3004:6:0;238:14271:7;;3052:40:0;238:14271:7;3052:40:0;;238:14271:7;2623:91:0;238:14271:7;;-1:-1:-1;;;2672:31:0;;238:14271:7;;2672:31:0;;238:14271:7;;;2672:31:0;238:14271:7;;;;;;;:::i;:::-;;;;1557:55;238:14271;;;;;;;1557:55;;;;;238:14271;1557:55;;;;:::i;:::-;238:14271;;;;;;;;;1557:55;;;;238:14271;1557:55;238:14271;1557:55;;;;238:14271;1557:55;;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:0;;;:::i;:::-;238:14271:7;;6004:5;238:14271;;6027:11;238:14271;;;6027:11;238:14271;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;-1:-1:-1;;;;;238:14271:7;;;:::i;:::-;;;;1618:55;238:14271;;;;;;;;;1618:55;;;;;238:14271;1618:55;;238:14271;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;:::i;:::-;;;;;1486:64;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;-1:-1:-1;;;;;238:14271:7;5802:10;5791:21;;;:42;;;;;;;5847:29;;;5871:1;5847:29;;238:14271;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;3542:15;238:14271;;3528:29;238:14271;;;;;;;3608:23;238:14271;;;3678:11;;238:14271;3678:11;:::i;:::-;238:14271;3678:11;238:14271;4164:13;238:14271;;;;;;;;:::i;:::-;;;;3718:588;238:14271;3718:588;;238:14271;3718:588;238:14271;3718:588;;238:14271;;3718:588;;;238:14271;3718:588;;;;238:14271;3718:588;;;;238:14271;;;3718:588;;;238:14271;;;3718:588;;238:14271;;;3718:588;;;238:14271;;;3718:588;;;238:14271;;3718:588;;;238:14271;;3718:588;;;238:14271;;3718:588;;;238:14271;;3718:588;;;238:14271;3718:588;;;238:14271;3718:588;;;238:14271;;;;;;;;3718:588;;;238:14271;;;;3718:588;;;238:14271;;;3699:5;238:14271;;;;;;;;;;3718:588;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;:::i;:::-;;;;;;5847:29;238:14271;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;3718:588;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;3718:588;;;238:14271;;;;;;;;;;4164:13;238:14271;;;;;;;4164:13;238:14271;;;3718:588;;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;3718:588;;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;3699:5;238:14271;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;3699:5;238:14271;;;;3718:588;;;238:14271;;;;;;3718:588;;238:14271;;;;;3718:588;;;238:14271;;;;;3718:588;;;238:14271;;;;;3718:588;;;238:14271;;;;;3718:588;;;238:14271;3678:11;238:14271;;;;3718:588;;;238:14271;;;;;;;;;;;;;;;;;;;;;;3718:588;;;238:14271;;;;;3718:588;;;238:14271;;;;;3718:588;;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3718:588;-1:-1:-1;;;;;;;;;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;3718:588;;;238:14271;;-1:-1:-1;;;;;238:14271:7;;;;;;;;3718:588;238:14271;;;;;3678:11;238:14271;;;4164:13;238:14271;;3718:588;238:14271;;;;;;;;;;;3718:588;238:14271;;;;:::i;:::-;;;;;;;;;;3718:588;238:14271;;;;:::i;:::-;;;;;3718:588;238:14271;;;;:::i;:::-;;;;3718:588;238:14271;;;;;3718:588;238:14271;;;;;;;;;3718:588;238:14271;;;;;;3718:588;238:14271;;;;:::i;:::-;-1:-1:-1;;;;;238:14271:7;;;3718:588;238:14271;;;;3718:588;238:14271;;;4322:306;;;238:14271;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;3718:588;-1:-1:-1;;;;;;;;;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;;;3699:5;238:14271;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;-1:-1:-1;238:14271:7;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;-1:-1:-1;238:14271:7;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;-1:-1:-1;238:14271:7;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;;;;;;;;5847:29;238:14271;5847:29;;;5791:42;;;;;;238:14271;;;;;;;;;;;;;;;;;9568:14;238:14271;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2793:5;238:14271;;2785:55;2817:1;2793:20;238:14271;;;2793:20;238:14271;2793:25;2785:55;:::i;:::-;1500:62:0;;:::i;:::-;238:14271:7;;;2793:5;238:14271;;;;;6265:13;;;238:14271;;;;;;;;;;;6322:11;6332:1;6322:11;;:26;;;;;;238:14271;;;;-1:-1:-1;;238:14271:7;6332:1;238:14271;;;6408:15;;;238:14271;;;2817:1;6447:13;;238:14271;;;;;;;;;;7055:28;6447:30;6332:1;238:14271;6447:30;;6443:90;;238:14271;-1:-1:-1;6564:47:7;;;6642:26;6578:15;;;238:14271;6564:47;6672:4;238:14271;;;2817:1;238:14271;6642:26;;:::i;:::-;238:14271;;6708:31;238:14271;;6708:31;;:::i;:::-;238:14271;6812:12;6776:21;;;;:::i;:::-;6812:12;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;6812:12;238:14271;;6812:23;;;;238:14271;;;6884:8;238:14271;;;;;;;6332:1;238:14271;;6884:8;;:::i;:::-;238:14271;;;;;;;;;7055:28;238:14271;6808:232;238:14271;;;;7018:10;238:14271;6957:8;238:14271;;;;;6957:8;:::i;:::-;238:14271;;;;;;;7018:10;;:::i;:::-;6808:232;;6564:47;6642:26;6596:15;;;238:14271;6564:47;;6443:90;6493:15;;;238:14271;6443:90;;;238:14271;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;6322:26;6337:11;6347:1;6337:11;;6322:26;;238:14271;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9924:9;238:14271;9828:26;;238:14271;;;9916:1;9919:14;;;;;;;10456:29;;10512:27;10456:29;;:::i;:::-;10512:27;;:::i;:::-;10550:26;238:14271;;;9916:1;10641:14;;;;;;;238:14271;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;10657:3::-;238:14271;10657:3;238:14271;;;9974:5;238:14271;;;;;;10002:13;10724;;238:14271;;10723:14;10719:462;238:14271;;;-1:-1:-1;238:14271:7;;;;10761:9;238:14271;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;10761:22;;;;238:14271;10761:48;;10719:462;10757:129;;;10657:3;:::i;:::-;10626:13;;10757:129;10848:14;10833:34;10848:14;;;:::i;:::-;10833:34;;;:::i;:::-;238:14271;10657:3;:::i;10761:48::-;238:14271;;;;;10787:9;238:14271;;;;;;;;;;;;;;10787:22;;10761:48;;;10719:462;10950:15;;238:14271;9916:1;10950:20;;:46;;;;10719:462;10949:120;;;;10719:462;10924:243;;10657:3;10924:243;11127:16;11110:38;11127:16;;;:::i;:::-;11110:38;;;:::i;10949:120::-;11041:1;11022:20;;;:46;;;10949:120;;;;11022:46;-1:-1:-1;238:14271:7;;;;11046:9;238:14271;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;11046:22;;11022:46;;10950;10974:9;238:14271;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;10974:22;;;-1:-1:-1;10950:46:7;;9935:3;238:14271;;;9974:5;238:14271;;;;;;10002:13;;;238:14271;;10001:14;9997:420;238:14271;;;-1:-1:-1;238:14271:7;;;;10039:9;238:14271;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;10039:22;;;;238:14271;10039:48;;9997:420;10035:109;;;9997:420;9935:3;9997:420;9935:3;:::i;:::-;9904:13;;10035:109;10111:14;;9935:3;10111:14;;:::i;:::-;10035:109;;;;;10039:48;238:14271;;;;;10065:9;238:14271;;;;;;;;;;;;;;10065:22;;10039:48;;;9997:420;10208:15;;238:14271;9916:1;10208:20;;:46;;;;9997:420;10207:120;;;;9997:420;10182:221;;;9935:3;9997:420;9935:3;:::i;10182:221::-;10368:16;;9935:3;10368:16;;:::i;:::-;10182:221;;;;;10207:120;10299:1;10280:20;;;:46;;;10207:120;;;;10280:46;-1:-1:-1;238:14271:7;;;;10304:9;238:14271;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;10304:22;;10280:46;;10208;10232:9;238:14271;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;10232:22;;;-1:-1:-1;10208:46:7;;238:14271;;;;;;-1:-1:-1;;238:14271:7;;;;;358:33;238:14271;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;1500:62:0;;:::i;:::-;12849:4:7;12831:22;;238:14271;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;-1:-1:-1;;;;;238:14271:7;5184:10;5173:21;;;:42;;;;;;;5229:29;;;5253:1;5229:29;;3542:15;238:14271;;3528:29;238:14271;;;;;;;3608:23;238:14271;;;3678:11;;238:14271;3678:11;:::i;:::-;238:14271;3678:11;238:14271;4164:13;238:14271;;;;;;;;:::i;:::-;;;;3718:588;;;;238:14271;3718:588;238:14271;3718:588;;238:14271;;3718:588;;;238:14271;3718:588;;;;238:14271;3718:588;;;;238:14271;;3718:588;;;238:14271;;;3718:588;;238:14271;;;;3718:588;;238:14271;;;3718:588;;;238:14271;;3718:588;;;238:14271;;3718:588;;;238:14271;;3718:588;;;238:14271;;3718:588;;;238:14271;3718:588;;;238:14271;3718:588;;;238:14271;;;;;;;;3718:588;;;238:14271;;;;3718:588;;;238:14271;;;3699:5;3718:588;238:14271;;;;;;;;3718:588;;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;:::i;:::-;;;;;;5229:29;238:14271;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;3718:588;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;:::i;:::-;;;;;;;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;3718:588;;;238:14271;;;;;;;;;;4164:13;238:14271;;;;;;;4164:13;238:14271;;;3718:588;;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;:::i;:::-;;;;;;;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;3718:588;;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;3699:5;238:14271;;;;:::i;:::-;;;;;;;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;3699:5;238:14271;;;;3718:588;;;238:14271;;;;;;3718:588;;238:14271;;;;;;3718:588;;238:14271;;;;;3718:588;;;238:14271;;;;;3718:588;;;238:14271;;;;;3718:588;;;238:14271;3678:11;238:14271;;;;3718:588;;;238:14271;;;;;;;;;;;;;;;;;;;;;;3718:588;;;238:14271;;;;;3718:588;;;238:14271;;;;;3718:588;;;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;:::i;:::-;;;;;;;;3718:588;238:14271;;;;;;;;;;;;;3718:588;-1:-1:-1;;;;;;;;;;;238:14271:7;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;3718:588;;;238:14271;;-1:-1:-1;;;;;238:14271:7;;;;;;;;3718:588;238:14271;;;;;3678:11;238:14271;;;4164:13;238:14271;;3718:588;238:14271;;;;;;;;;;;3718:588;238:14271;;;;:::i;:::-;;;;;;;;;;3718:588;238:14271;;;;:::i;:::-;;;3718:588;238:14271;;;;;3718:588;238:14271;;;;;;;;;;;;;;;;3718:588;238:14271;;;;:::i;:::-;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;3718:588;238:14271;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;3718:588;-1:-1:-1;;;;;;;;;;;238:14271:7;;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;3718:588;238:14271;;;;;3699:5;238:14271;;;3718:588;238:14271;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;;;-1:-1:-1;238:14271:7;;;;;;;3699:5;238:14271;;;;3718:588;238:14271;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;3699:5;238:14271;;;;3718:588;238:14271;;;;;3699:5;238:14271;;;3718:588;238:14271;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;-1:-1:-1;238:14271:7;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;3718:588;238:14271;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;;;3718:588;238:14271;;;;;3699:5;238:14271;;;3718:588;238:14271;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;-1:-1:-1;238:14271:7;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;3718:588;238:14271;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;;;3718:588;238:14271;;;;;3699:5;238:14271;;;3718:588;238:14271;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;-1:-1:-1;238:14271:7;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;3718:588;238:14271;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:13;238:14271;;;;;;;;;;;;;;;;;;;3718:588;238:14271;;;;;;;;;;;;;;;;;;;;;;;;3718:588;238:14271;;;;;3699:5;238:14271;;;3718:588;238:14271;;;;;;;;;;;;;;3699:5;238:14271;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;-1:-1:-1;238:14271:7;;;5229:29;238:14271;5229:29;;;5173:42;;;;;;238:14271;;;;;;-1:-1:-1;;238:14271:7;;;;1500:62:0;;:::i;:::-;3004:6;238:14271:7;;-1:-1:-1;;;;;;238:14271:7;;;;;;;-1:-1:-1;;;;;238:14271:7;3052:40:0;238:14271:7;;3052:40:0;238:14271:7;;;;;;;-1:-1:-1;;238:14271:7;;;;;;13624:7;238:14271;13600:252;13620:18;;;;;;238:14271;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;-1:-1:-1;;238:14271:7;;;;;;;;;13942:17;;;238:14271;;13990:18;;;;;;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14010:3;14062:10;;;:::i;:::-;238:14271;;;;;;;;;;;;;;;;13680:11;238:14271;;;13680:37;238:14271;;;;;14050:37;238:14271;14050:41;;;:102;;;14010:3;14029:437;;14010:3;;;;;238:14271;;13975:13;;14029:437;14249:10;;;;;;14444:7;14249:10;;238:14271;14249:10;;:::i;:::-;238:14271;;;;;;;14308:10;;;;;:::i;:::-;238:14271;;;;;;;;;;;;;;;;14296:37;238:14271;14382:10;;;;:::i;:::-;238:14271;;;;;;;;;;;;;14370:37;238:14271;;;;;;;;:::i;:::-;;;14202:224;;;238:14271;;14202:224;;238:14271;14185:241;;;;:::i;:::-;;;;;;:::i;:::-;;14444:7;:::i;:::-;14029:437;;;;;;;14050:102;14123:10;;;;;:::i;:::-;238:14271;;;;;;;;;;;;;;;;14111:37;238:14271;14111:41;;14050:102;;238:14271;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;13640:3;13692:10;;;:::i;:::-;238:14271;;;;;;;;;;;;;;;;;13680:11;238:14271;;;;;;13680:37;238:14271;;;13680:37;238:14271;13680:41;;;;:102;;;13640:3;13659:183;;;;;;13640:3;238:14271;;13605:13;;13659:183;13815:12;;238:14271;13815:12;;:::i;:::-;13659:183;;;;;13680:102;13753:10;;;;;;;;:::i;:::-;238:14271;;;;;;;;;;;;;13741:37;238:14271;13741:41;;13680:102;;;;;;238:14271;;;;;;-1:-1:-1;;238:14271:7;;;;;;1500:62:0;;:::i;:::-;13071:4:7;13051:24;;238:14271;;;;13193:28;238:14271;13146:32;238:14271;;;;;;13193:28;238:14271;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;2793:5;238:14271;;2785:55;2817:1;2793:20;238:14271;;;2793:20;238:14271;2793:25;2785:55;:::i;:::-;238:14271;;;2793:5;238:14271;;2632:22;238:14271;;;2632:22;238:14271;2614:15;:40;238:14271;;;;;;2793:5;238:14271;;2940:24;238:14271;;;2940:24;238:14271;2614:15;2922:42;238:14271;;;;2322:103:6;;;:::i;:::-;238:14271:7;8497:1;;8487:11;;;;:26;;;;;238:14271;;;;8550:10;;238:14271;;8606:10;238:14271;;;-1:-1:-1;;;1829:53:3;;;;8634:10:7;1829:53:3;;;238:14271:7;8654:4;238:14271;;;;;;;;;;;1829:53:3;;-1:-1:-1;;;;;238:14271:7;;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;1829:53:3;238:14271:7;;;1829:53:3;:::i;:::-;238:14271:7;;;2940:24;238:14271;;;;;;;;;;;:::i;:::-;8634:10;238:14271;;8720:167;;;238:14271;;;;;8720:167;;2614:15;238:14271;;;8720:167;;238:14271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;2817:1;238:14271;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;;;;;8606:10;238:14271;;;;;;;;;;;;;;;8908:247;;;;238:14271;;;8939:9;238:14271;;;;;8634:10;238:14271;;;;;;;8939:39;238:14271;;;8939:39;:::i;:::-;238:14271;;;;;2793:5;238:14271;;8992:24;238:14271;;;8992:24;:34;238:14271;;;8992:34;:::i;:::-;238:14271;;8908:247;8634:10;238:14271;;2632:22;238:14271;;;;;;;;9169:44;9165:156;;8908:247;238:14271;;;;;;;9331:37;:47;238:14271;;;9331:47;:::i;:::-;238:14271;;;;;;;;;;;;;;9394:43;238:14271;8634:10;9394:43;;238:14271;;;9165:156;9229:7;238:14271;;;;;;;;;;;;9229:7;238:14271;;:::i;:::-;;;;;;2817:1;238:14271;8634:10;;238:14271;;;;;;;;;8634:10;238:14271;;2632:22;238:14271;;;;;8634:10;;238:14271;;;;;;;9165:156;;;;;8908:247;238:14271;;;9057:9;238:14271;;;;;8634:10;238:14271;;;;;;;9057:39;238:14271;;;9057:39;:::i;:::-;238:14271;;;;;2793:5;238:14271;;9110:24;238:14271;;;9110:24;:34;238:14271;;;9110:34;:::i;:::-;238:14271;;8908:247;;238:14271;;;;;;;;;1829:53:3;238:14271:7;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;8487:26;8502:11;8512:1;8502:11;;8487:26;;238:14271;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;1711:24;238:14271;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;:::i;:::-;;;;;1416:64;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;328:24;238:14271;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;3065:5;238:14271;;;3065:22;238:14271;;;3065:22;238:14271;;;;;2322:103:6;;:::i;:::-;238:14271:7;;;;;3065:5;238:14271;;;;;11364:15;;;238:14271;;11364:20;;11360:1179;238:14271;;;;11784:91;238:14271;;;;;;11422:9;238:14271;;;;;11440:10;238:14271;;;;11814:61;238:14271;;;;11473:15;11465:54;11473:15;;;11465:54;:::i;:::-;11815:24;11725:16;11560:15;;;238:14271;11610:15;11686:4;11654:28;11667:15;11610;;;238:14271;11667:15;;238:14271;11654:28;;:::i;:::-;238:14271;11725:16;;:::i;:::-;11815:24;;:::i;:::-;11814:61;:::i;:::-;11784:91;;:::i;:::-;238:14271;;;;11422:9;238:14271;;;;;11440:10;238:14271;;;;;;;;;11360:1179;12561:10;238:14271;;12549:11;238:14271;;12549:37;238:14271;;;12549:37;:50;238:14271;;;12549:50;:::i;:::-;238:14271;;12549:37;238:14271;12645:9;;12561:10;;;;-1:-1:-1;;;;;238:14271:7;12645:9;:::i;:::-;238:14271;;;;;;;;12670:37;238:14271;12561:10;12670:37;;238:14271;;;;11360:1179;11962:1;11943:20;11939:600;;11360:1179;;;;11939:600;238:14271;;;12001:9;12390:91;238:14271;;;;;12019:10;238:14271;;;;12420:61;238:14271;;;;12052:15;12044:54;12052:15;;;12044:54;:::i;:::-;12421:24;12331:16;12139:15;;;238:14271;12189:15;12265:4;12233:28;12246:15;12189;;;238:14271;12246:15;;238:14271;12233:28;;:::i;12390:91::-;238:14271;;;;12001:9;238:14271;;;;;12019:10;238:14271;;;;;;;;;11939:600;;;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;7484:13;238:14271;;7504:9;238:14271;7479:296;7499:14;;;;;;;238:14271;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;-1:-1:-1;;238:14271:7;;;;;;;;7839:17;;238:14271;7871:13;238:14271;7886:14;;;;;;;238:14271;;;;;;;;;;;;;;;;;;;;;;;7555:5;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;7902:3;238:14271;;;7555:5;238:14271;;;;;;;7942:17;;7555;7942;;238:14271;;;;;;;;7942:36;;:81;;;7902:3;7942:155;;;7902:3;7921:276;;7902:3;;;;;;;;:::i;:::-;7871:13;;7921:276;7902:3;238:14271;;;8175:7;238:14271;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7504:9;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;8130:27;;;;:::i;:::-;;;;;;:::i;8175:7::-;7921:276;;;;;;;7942:155;-1:-1:-1;;;;;;238:14271:7;;8044:21;;7942:155;8044:52;-1:-1:-1;8069:16:7;;;238:14271;-1:-1:-1;;;;;238:14271:7;;;;;8069:27;7942:155;;:81;238:14271;;;7998:15;;;238:14271;7998:25;7942:81;;238:14271;;;;;:::i;:::-;;;;;;;;;;7515:3;238:14271;;;7555:5;238:14271;;;;;;;;;7555:17;;;238:14271;;;;7555:36;:81;;;;7515:3;7555:155;;;7515:3;7534:231;;;7515:3;;;;:::i;:::-;7484:13;;7534:231;7743:7;;7515:3;7743:7;;:::i;:::-;7534:231;;;;;7555:155;-1:-1:-1;;;;;238:14271:7;;7657:21;;-1:-1:-1;7657:52:7;;;;7555:155;;;;;7657:52;7682:16;;238:14271;-1:-1:-1;;;;;238:14271:7;;;;;7682:27;;-1:-1:-1;7657:52:7;;;7555:81;7611:15;;;238:14271;;;7611:25;;-1:-1:-1;7555:81:7;;238:14271;;;;;;;;;;;;;;;1500:62:0;;:::i;:::-;2322:103:6;;:::i;:::-;13329:10:7;238:14271;;;-1:-1:-1;;;13329:35:7;;13358:4;238:14271;13329:35;;238:14271;-1:-1:-1;;;;;238:14271:7;;;;;13329:35;238:14271;;;;13329:35;;;;;;;;238:14271;13329:35;;;238:14271;13329:45;;238:14271;;13463:6;238:14271;;;;;13463:6;;:::i;:::-;238:14271;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;13329:35;;;;;;;;;;;;;;;;;;:::i;:::-;;;238:14271;;;;;;;13329:35;;;;;;;;;238:14271;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;7237:5;238:14271;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;7237:5;238:14271;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;1373:37;238:14271;;;;;;;1373:37;238:14271;1373:37;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;238:14271;;;;;1373:37;238:14271;1373:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;238:14271;1373:37;;;;238:14271;1373:37;;;238:14271;1373:37;;;238:14271;1373:37;;;;238:14271;1373:37;;;;238:14271;1373:37;;;;238:14271;;;1373:37;;;;238:14271;1373:37;;;;238:14271;1373:37;;;;;;:::i;:::-;238:14271;;;;;;;1373:37;;;238:14271;;;;1373:37;;238:14271;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;:::o;:::-;;;;;;-1:-1:-1;238:14271:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;238:14271:7;;;;;;;;-1:-1:-1;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;238:14271:7;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;238:14271:7;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;238:14271:7;;;;;;-1:-1:-1;;238:14271:7;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;238:14271:7;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;238:14271:7;;-1:-1:-1;238:14271:7;;;;;;-1:-1:-1;238:14271:7;:::o;:::-;;;;;;;;;;;;;9229:7;238:14271;;;;;;9229:7;-1:-1:-1;238:14271:7;;;;-1:-1:-1;238:14271:7;:::o;:::-;;;;;;;:::i;:::-;;;-1:-1:-1;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;-1:-1:-1;;;;;238:14271:7;;;;;;;;;:::o;:::-;-1:-1:-1;;238:14271:7;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;-1:-1:-1;;;238:14271:7;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;1796:162:0:-;238:14271:7;;-1:-1:-1;;;;;238:14271:7;735:10:5;1855:23:0;1851:101;;1796:162::o;1851:101::-;238:14271:7;;-1:-1:-1;;;1901:40:0;;735:10:5;1901:40:0;;;238:14271:7;;;1901:40:0;2431:307:6;1755:1;2558:7;238:14271:7;2558:18:6;2554:86;;1755:1;2558:7;238:14271:7;2431:307:6:o;2554:86::-;238:14271:7;;-1:-1:-1;;;2599:30:6;;;;;1303:160:3;238:14271:7;;-1:-1:-1;;;1412:43:3;;;;-1:-1:-1;;;;;238:14271:7;;;1412:43:3;;;238:14271:7;;;;;;;;;1412:43:3;;;;;;238:14271:7;1412:43:3;:::i;:::-;238:14271:7;;;;;;2847:1:4;3510:55;2847:1;3462:31;;;;;;;;;;;;238:14271:7;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;3462:31:4;238:14271:7;;;;3510:55:4;;:::i;:::-;238:14271:7;;;4551:22:3;;;;:57;;;;238:14271:7;4547:135:3;;;;;4059:629;:::o;4547:135::-;238:14271:7;;;;4631:40:3;;;;;;;;;238:14271:7;4631:40:3;4551:57;4578:30;;;;;3462:31:4;4578:30:3;;;238:14271:7;;;;3462:31:4;4578:30:3;238:14271:7;;;;;;;;;;4551:57:3;;;;;;238:14271:7;;;;;;;;;;;;4625:582:4;;4797:8;;-1:-1:-1;238:14271:7;;5874:21:4;:17;;6046:142;;;;;;5870:383;238:14271:7;;-1:-1:-1;;;6225:17:4;;;;;4793:408;238:14271:7;;5045:22:4;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;238:14271:7;;-1:-1:-1;;;5121:24:4;;-1:-1:-1;;;;;238:14271:7;;;5121:24:4;;;238:14271:7;;;5121:24:4;5045:49;5071:18;;;:23;5045:49;
Swarm Source
ipfs://29ff545447a0b254d058528b819ca9ea0b3d364f7be4572055130683bcf34214
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in S
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.