Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 62 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Owner Withdrawal | 18017330 | 415 days ago | IN | 0 ETH | 0.00074423 | ||||
Withdraw All Pos... | 17850056 | 439 days ago | IN | 0 ETH | 0.00101414 | ||||
Withdraw All Pos... | 17844015 | 440 days ago | IN | 0 ETH | 0.00144538 | ||||
Declare Winner | 17843958 | 440 days ago | IN | 0 ETH | 0.00137188 | ||||
Close Entries | 17843874 | 440 days ago | IN | 0 ETH | 0.00097488 | ||||
Add To Position | 17843850 | 440 days ago | IN | 0.08 ETH | 0.00269898 | ||||
Add To Position | 17843842 | 440 days ago | IN | 0.12 ETH | 0.00283078 | ||||
Open Entries | 17843806 | 440 days ago | IN | 0 ETH | 0.00125788 | ||||
Close Entries | 17843782 | 440 days ago | IN | 0 ETH | 0.00084909 | ||||
Withdraw All Pos... | 17843778 | 440 days ago | IN | 0 ETH | 0.00163267 | ||||
Open Entries | 17843775 | 440 days ago | IN | 0 ETH | 0.00133457 | ||||
Create Game With... | 17843768 | 440 days ago | IN | 0 ETH | 0.00293983 | ||||
Declare Winner | 17843759 | 440 days ago | IN | 0 ETH | 0.00119294 | ||||
Close Entries | 17843526 | 440 days ago | IN | 0 ETH | 0.0007862 | ||||
Add To Position | 17843513 | 440 days ago | IN | 0.05 ETH | 0.00169757 | ||||
Add To Position | 17843513 | 440 days ago | IN | 1 ETH | 0.00210006 | ||||
Add To Position | 17843511 | 440 days ago | IN | 0.02 ETH | 0.00207678 | ||||
Add To Position | 17843505 | 440 days ago | IN | 1 ETH | 0.00168877 | ||||
Add To Position | 17843435 | 440 days ago | IN | 0.2 ETH | 0.00218197 | ||||
Add To Position | 17843317 | 440 days ago | IN | 0.2 ETH | 0.00198655 | ||||
Add To Position | 17843304 | 440 days ago | IN | 0.05 ETH | 0.00271875 | ||||
Open Entries | 17843302 | 440 days ago | IN | 0 ETH | 0.00176163 | ||||
Withdraw All Pos... | 17842954 | 440 days ago | IN | 0 ETH | 0.00223356 | ||||
Create Game With... | 17842605 | 440 days ago | IN | 0 ETH | 0.00347435 | ||||
Set Default Min ... | 17842509 | 440 days ago | IN | 0 ETH | 0.00090088 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18017330 | 415 days ago | 3.28 ETH | ||||
17850056 | 439 days ago | 0.24 ETH | ||||
17844015 | 440 days ago | 0.4 ETH | ||||
17843778 | 440 days ago | 2 ETH | ||||
17842954 | 440 days ago | 0.1 ETH | ||||
17836879 | 441 days ago | 1 ETH | ||||
17836677 | 441 days ago | 0.4 ETH | ||||
17836669 | 441 days ago | 4 ETH | ||||
17836668 | 441 days ago | 0.1 ETH | ||||
17835940 | 441 days ago | 0.2 ETH |
Loading...
Loading
Contract Name:
Livestreambets
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT /* [Website] https://www.livestreambets.gg [Twitter/X] https://twitter.com/livestreambets [Telegram] https://t.me/livestreambetsgg */ pragma solidity ^0.8.19; import "hardhat/console.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; contract Livestreambets is Ownable, Pausable, ReentrancyGuard { enum GameStatus { EntriesClosed, EntriesOpen, Expired, // Terminal state WinnerDeclared, // Terminal state Cancelled // Terminal state } struct Position { uint256 amount; bool hasWithdrawn; } struct Game { uint256 expiresAt; uint256 options; uint256 minPositionSize; // individual position minimum size uint256 maxAmountPerOption; // maximum total amount that can be bet on a single option across all account positions uint256 winner; bool entriesOpen; bool winnerDeclared; bool cancelled; bool rakeRecorded; } // Game management uint256 public defaultExpirationPeriod; uint256 public maxOptions; uint256 public defaultMinPositionSize; uint256 public defaultMaxAmountPerOption; address public gameManager; Game[] public games; // Rake management uint256 public earnedRakeAmount; uint256 public claimedRakeAmount; address payable public rakeRecipient; // SEE: positionKeyHash mapping(bytes32 => Position) public positions; // SEE: gameOptionKeyHash mapping(bytes32 => uint256) public totalOfAllPositionsForGameOption; error NotAllowed(); error InvalidGameStatus(); error PositionSizeTooSmall(); error MaxAmountForOptionExceeded(); error WithdrawalFailed(); error InvalidGameConfiguration(); error InvalidGame(); error InvalidGameOption(); error EmptyPosition(); error InvalidAmount(); error GameNotFinished(); event WinnerDeclared(uint256 gameId, uint256 winningOptionId); event AddedToPosition( uint256 gameId, uint256 optionId, address account, uint256 originalPositionSize, uint256 amountAddedToPosition ); event GameCreated(uint256 indexed gameId); event UserWithdrawal( uint256 gameId, uint256 optionId, address account, uint256 amount ); event BulkUserWithdrawal(uint256 gameId, address account, uint256 amount); event RakeWithdrawn(uint256 amount); event StatusChange( uint256 gameId, GameStatus oldStatus, GameStatus newStatus ); event OwnerDeposit(uint256 amount); event OwnerWithdrawal(uint256 amount); modifier checkGameId(uint256 gameId_) { if (gameId_ >= games.length) { revert InvalidGame(); } _; } modifier onlyOwnerOrGameManager() { require( msg.sender == owner() || msg.sender == gameManager, "Caller is neither the owner nor game manager" ); _; } constructor(address payable rakeRecipient_, address gameManager_) { setDefaultExpirationPeriod(3 days); setMaxOptions(10); setDefaultMinPositionSize(0.1 ether); setDefaultMaxAmountPerOption(1 ether); setRakeRecipient(rakeRecipient_); setGameManager(gameManager_); } function positionKeyHash( uint256 gameId_, address account_, uint256 optionId_ ) public pure returns (bytes32) { return keccak256(abi.encodePacked(gameId_, account_, optionId_)); } function gameOptionKeyHash( uint256 gameId_, uint256 optionId_ ) public pure returns (bytes32) { return keccak256(abi.encodePacked(gameId_, optionId_)); } function gameCount() public view returns (uint256) { return games.length; } function gameStatus( uint256 gameId_ ) public view checkGameId(gameId_) returns (GameStatus) { Game storage game = games[gameId_]; return _gameStatus(game); } // Check terminal states first, then check non-terminal states. function _gameStatus(Game storage game) internal view returns (GameStatus) { // Terminal state (manual). if (game.winnerDeclared) { return GameStatus.WinnerDeclared; } // Terminal state (manual). if (game.cancelled) { return GameStatus.Cancelled; } // Terminal state (automatic). if (block.timestamp > game.expiresAt) { return GameStatus.Expired; } // Non-terminal state (manual). if (game.entriesOpen) { return GameStatus.EntriesOpen; } // Non-terminal state (manual). return GameStatus.EntriesClosed; } ////////// Game management functions ////////// function createGameWithDefaults( uint256 options_ ) external onlyOwnerOrGameManager { createGame( defaultExpirationPeriod, options_, defaultMinPositionSize, defaultMaxAmountPerOption ); } function createGame( uint256 expirationPeriod_, uint256 options_, uint256 minPositionSize_, uint256 maxAmountPerOption_ ) public onlyOwnerOrGameManager { // A race must have at least 2 options and at most maxOptions. if (options_ < 2 || options_ > maxOptions) { revert InvalidGameConfiguration(); } // Create the game and push it onto the games array. games.push( Game( block.timestamp + expirationPeriod_, // uint256 expiresAt options_, // uint256 options minPositionSize_, // uint256 minPositionSize; maxAmountPerOption_, // uint256 maxAmountPerOption 0, // uint256 winner false, // bool entriesOpen false, // bool winnerDeclared false, // bool cancelled false // bool rakeRecorded ) ); // Emit event. emit GameCreated(games.length - 1); } function openEntries( uint256 gameId_ ) external onlyOwnerOrGameManager checkGameId(gameId_) { Game storage game = games[gameId_]; // Game must be in EntriesClosed state. GameStatus gameStatus__ = _gameStatus(game); if (gameStatus__ != GameStatus.EntriesClosed) { revert InvalidGameStatus(); } // Open the game for betting. game.entriesOpen = true; // Emit event. emit StatusChange(gameId_, gameStatus__, GameStatus.EntriesOpen); } function closeEntries( uint256 gameId_ ) external onlyOwnerOrGameManager checkGameId(gameId_) { Game storage game = games[gameId_]; // Game must be in EntriesOpen state. GameStatus gameStatus__ = _gameStatus(game); if (gameStatus__ != GameStatus.EntriesOpen) { revert InvalidGameStatus(); } // Open the game for betting. game.entriesOpen = false; // Emit event. emit StatusChange(gameId_, gameStatus__, GameStatus.EntriesClosed); } function cancelGame( uint256 gameId_ ) external onlyOwnerOrGameManager checkGameId(gameId_) { Game storage game = games[gameId_]; GameStatus gameStatus__ = _gameStatus(game); // Game must be in a cancellable state (either EntriesOpen or EntriesClosed). if ( gameStatus__ != GameStatus.EntriesOpen && gameStatus__ != GameStatus.EntriesClosed ) { revert InvalidGameStatus(); } // Cancel the game. game.cancelled = true; // Emit event. emit StatusChange(gameId_, gameStatus__, GameStatus.Cancelled); } function declareWinner( uint256 gameId_, uint256 winningOptionId_ ) external onlyOwnerOrGameManager checkGameId(gameId_) { Game storage game = games[gameId_]; GameStatus gameStatus__ = _gameStatus(game); // Game must be in EntriesClosed state. if (gameStatus__ != GameStatus.EntriesClosed) { revert InvalidGameStatus(); } // Check that the winner is within the possible range of options. if (winningOptionId_ >= game.options) { revert InvalidGameOption(); } // Save the winner. game.winnerDeclared = true; game.winner = winningOptionId_; // Emit events. emit WinnerDeclared(gameId_, winningOptionId_); emit StatusChange(gameId_, gameStatus__, GameStatus.EntriesOpen); } function withdrawRake(uint256 amount_) public onlyOwner nonReentrant { // Check that the amount is available to claim. if (amount_ > claimableRakeAmount()) { revert InvalidAmount(); } // Record the amount claimed. claimedRakeAmount += amount_; // Pay out earnings to account using .call(). (bool success, ) = rakeRecipient.call{value: amount_}(""); // Revert if unsuccessful. if (!success) { revert WithdrawalFailed(); } // Emit event emit RakeWithdrawn(amount_); } function withdrawAllAvailableRake() external onlyOwner { withdrawRake(claimableRakeAmount()); } function claimableRakeAmount() public view returns (uint256) { return earnedRakeAmount - claimedRakeAmount; } // Convenience external view function to get the total of all positions for a game. function totalsOfAllPositionsForAllGameOptions( uint256 gameId_ ) external view checkGameId(gameId_) returns (uint256[] memory) { Game storage game = games[gameId_]; uint256[] memory totals = new uint256[](game.options); for (uint256 i = 0; i < game.options; i++) { totals[i] = totalOfAllPositionsForGameOption[ gameOptionKeyHash(gameId_, i) ]; } return totals; } function totalLockedInGame( uint256 gameId_ ) external view checkGameId(gameId_) returns (uint256) { Game storage game = games[gameId_]; uint256 total = 0; for (uint256 i = 0; i < game.options; i++) { total += totalOfAllPositionsForGameOption[ gameOptionKeyHash(gameId_, i) ]; } return total; } // Convenience external view function to get all of a user's positions for a game. function positionsForGameForAccount( uint256 gameId_, address account_ ) external view checkGameId(gameId_) returns (Position[] memory) { Game storage game = games[gameId_]; Position[] memory positions__ = new Position[](game.options); for (uint256 i = 0; i < game.options; i++) { positions__[i] = positions[positionKeyHash(gameId_, account_, i)]; } return positions__; } // Convenience external view function to get a user's total committed to a game. function totalCommittedToGameForAccount( uint256 gameId_, address account_ ) external view checkGameId(gameId_) returns (uint256) { Game storage game = games[gameId_]; uint256 total = 0; for (uint256 i = 0; i < game.options; i++) { total += positions[positionKeyHash(gameId_, account_, i)].amount; } return total; } // Compute losing positions to allow them to be withdrawn by the owner, and record the amount in earnedRakeAmount. function recordRake( uint256 gameId_ ) external onlyOwner checkGameId(gameId_) { Game storage game = games[gameId_]; GameStatus gameStatus__ = _gameStatus(game); // Ensure that the winner has been declared, so we can add up the losing positions. if (gameStatus__ != GameStatus.WinnerDeclared) { revert InvalidGameStatus(); } // Ensure that the rake has not already been computed for this game. if (game.rakeRecorded) { revert NotAllowed(); } // Compute the total amount of rake available to be claimed. for (uint256 i = 0; i < game.options; i++) { // Skip the winning option. if (i == game.winner) { continue; } // Get the total of all losing positions. // Add the amount to the total claimable rake for the owner. earnedRakeAmount += totalOfAllPositionsForGameOption[ gameOptionKeyHash(gameId_, i) ]; } // Record that the rake was calculated for this game. game.rakeRecorded = true; } // Handle the 3 terminal states (Expired, Cancelled, and WinnerSelected), and allow users to withdraw their positions and winnings where eligible. function withdrawAllPositionsAndWinningsFromGame( uint256 gameId_ ) external checkGameId(gameId_) whenNotPaused nonReentrant { Game storage game = games[gameId_]; GameStatus gameStatus__ = _gameStatus(game); if (gameStatus__ == GameStatus.WinnerDeclared) { // If a winner has been selected, only allow winners to withdraw their winnings. _processWithdrawalForWinnerDeclaredState(gameId_, game.winner); } else if ( gameStatus__ == GameStatus.Expired || gameStatus__ == GameStatus.Cancelled ) { // If the game is Expired or Cancelled, allow all users to withdraw all their positions. _processFullWithdrawalForAllOfUsersPositions(gameId_, game.options); } else { revert InvalidGameStatus(); } } // Used in cases where we want the user to be able to withdraw all the money they have committed to the game (Expired and Cancelled states). function _processFullWithdrawalForAllOfUsersPositions( uint256 gameId_, uint256 gameOptions_ ) internal { uint256 totalAmountForWithdrawal = 0; for (uint256 i = 0; i < gameOptions_; i++) { Position storage position = positions[ positionKeyHash(gameId_, msg.sender, i) ]; // Check if the account has already withdrawn their winnings. if (position.hasWithdrawn) { continue; } // Check if the account holds the position. if (position.amount == 0) { continue; } // Record that the account has withdrawn their position. position.hasWithdrawn = true; // Add the amount to the total amount for withdrawal. totalAmountForWithdrawal += position.amount; } // Check that the total amount for withdrawal is greater than 0. if (totalAmountForWithdrawal == 0) { revert EmptyPosition(); } // Bulk payout to account. (bool success, ) = msg.sender.call{value: totalAmountForWithdrawal}(""); // Revert if unsuccessful. if (!success) { revert WithdrawalFailed(); } // Emit event emit BulkUserWithdrawal(gameId_, msg.sender, totalAmountForWithdrawal); } // Used in cases where there is a winner declared (WinnerDeclared state only), and we want users who held that position to be able to withdraw their winnings. function _processWithdrawalForWinnerDeclaredState( uint256 gameId_, uint256 winningGameOptionId_ ) internal { // Get the account's winning position. Position storage position = positions[ positionKeyHash(gameId_, msg.sender, winningGameOptionId_) ]; // Check if the account has already withdrawn their winnings. if (position.hasWithdrawn) { revert WithdrawalFailed(); } // Check if the account holds the position. if (position.amount == 0) { revert EmptyPosition(); } // Calculate the winnings using 2:1 odds. This final value includes the original position amount and the winnings. uint256 totalEligibleForWithdrawal = position.amount * 2; position.hasWithdrawn = true; // Pay out earnings to account. (bool success, ) = msg.sender.call{value: totalEligibleForWithdrawal}( "" ); // Revert if unsuccessful. if (!success) { revert WithdrawalFailed(); } // Emit event emit UserWithdrawal( gameId_, winningGameOptionId_, msg.sender, totalEligibleForWithdrawal ); } function addToPosition( uint256 gameId_, uint256 optionId_ ) external payable checkGameId(gameId_) nonReentrant whenNotPaused { Game storage game = games[gameId_]; GameStatus gameStatus__ = _gameStatus(game); // Check that the game is open for betting. if (gameStatus__ != GameStatus.EntriesOpen) { revert InvalidGameStatus(); } // Check that the option is within the possible range of options. if (optionId_ >= game.options) { revert InvalidGameOption(); } // Retrieve the user's current position. Position storage position = positions[ positionKeyHash(gameId_, msg.sender, optionId_) ]; // Check that the total amount for the position is at least the minBetSize uint256 newPositionSize = position.amount + msg.value; if (newPositionSize < game.minPositionSize) { revert PositionSizeTooSmall(); } // Check that the total sum of positions on the option does not exceed maxAmountPerOption. bytes32 gameOptionKey = gameOptionKeyHash(gameId_, optionId_); uint256 newTotalAmountCommitted = totalOfAllPositionsForGameOption[ gameOptionKey ] + msg.value; if (newTotalAmountCommitted > game.maxAmountPerOption) { revert MaxAmountForOptionExceeded(); } // Save the new position. totalOfAllPositionsForGameOption[ gameOptionKey ] = newTotalAmountCommitted; position.amount = newPositionSize; // Emit event. emit AddedToPosition( gameId_, optionId_, msg.sender, position.amount, // account's original position size msg.value // amount added to account's position ); } ////////// Admin config functions ////////// function setDefaultExpirationPeriod( uint256 defaultExpirationPeriod_ ) public onlyOwner { defaultExpirationPeriod = defaultExpirationPeriod_; } function setDefaultMinPositionSize( uint256 defaultMinPositionSize_ ) public onlyOwner { defaultMinPositionSize = defaultMinPositionSize_; } function setDefaultMaxAmountPerOption( uint256 defaultMaxAmountPerOption_ ) public onlyOwner { defaultMaxAmountPerOption = defaultMaxAmountPerOption_; } function setMaxOptions(uint256 maxOptions_) public onlyOwner { maxOptions = maxOptions_; } function setRakeRecipient(address payable rakeRecipient_) public onlyOwner { rakeRecipient = rakeRecipient_; } function setGameManager(address gameManager_) public onlyOwner { gameManager = gameManager_; } function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } ////////// Admin balance management functions ////////// function ownerDeposit() external payable onlyOwner { if (msg.value == 0) { revert InvalidAmount(); } // Emit event. emit OwnerDeposit(msg.value); } function ownerWithdrawal(uint256 amount_) external onlyOwner { // Check that the amount is available to claim. if (amount_ > address(this).balance || amount_ == 0) { revert InvalidAmount(); } // Pay out earnings to account using .call(). (bool success, ) = msg.sender.call{value: amount_}(""); // Revert if unsuccessful. if (!success) { revert WithdrawalFailed(); } // Emit event emit OwnerWithdrawal(amount_); } ////////// Fallback functions ////////// fallback() external { revert NotAllowed(); } receive() external payable { revert NotAllowed(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = 0x000000000000000000636F6e736F6c652e6c6f67; function _sendLogPayload(bytes memory payload) private view { address consoleAddress = CONSOLE_ADDRESS; /// @solidity memory-safe-assembly assembly { pop(staticcall(gas(), consoleAddress, add(payload, 32), mload(payload), 0, 0)) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); } function logUint(uint256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint256 p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1)); } function log(uint256 p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1)); } function log(uint256 p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1)); } function log(uint256 p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1)); } function log(string memory p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint256 p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2)); } function log(uint256 p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2)); } function log(uint256 p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2)); } function log(uint256 p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2)); } function log(uint256 p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2)); } function log(uint256 p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2)); } function log(uint256 p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2)); } function log(uint256 p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2)); } function log(uint256 p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2)); } function log(uint256 p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2)); } function log(uint256 p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2)); } function log(uint256 p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2)); } function log(uint256 p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2)); } function log(string memory p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2)); } function log(string memory p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2)); } function log(string memory p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2)); } function log(string memory p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2)); } function log(bool p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2)); } function log(bool p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2)); } function log(bool p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2)); } function log(address p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2)); } function log(address p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2)); } function log(address p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"rakeRecipient_","type":"address"},{"internalType":"address","name":"gameManager_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EmptyPosition","type":"error"},{"inputs":[],"name":"GameNotFinished","type":"error"},{"inputs":[],"name":"InvalidAmount","type":"error"},{"inputs":[],"name":"InvalidGame","type":"error"},{"inputs":[],"name":"InvalidGameConfiguration","type":"error"},{"inputs":[],"name":"InvalidGameOption","type":"error"},{"inputs":[],"name":"InvalidGameStatus","type":"error"},{"inputs":[],"name":"MaxAmountForOptionExceeded","type":"error"},{"inputs":[],"name":"NotAllowed","type":"error"},{"inputs":[],"name":"PositionSizeTooSmall","type":"error"},{"inputs":[],"name":"WithdrawalFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"optionId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"originalPositionSize","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountAddedToPosition","type":"uint256"}],"name":"AddedToPosition","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BulkUserWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"GameCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OwnerDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OwnerWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RakeWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"enum Livestreambets.GameStatus","name":"oldStatus","type":"uint8"},{"indexed":false,"internalType":"enum Livestreambets.GameStatus","name":"newStatus","type":"uint8"}],"name":"StatusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"optionId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UserWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"winningOptionId","type":"uint256"}],"name":"WinnerDeclared","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"},{"internalType":"uint256","name":"optionId_","type":"uint256"}],"name":"addToPosition","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"}],"name":"cancelGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimableRakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimedRakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"}],"name":"closeEntries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"expirationPeriod_","type":"uint256"},{"internalType":"uint256","name":"options_","type":"uint256"},{"internalType":"uint256","name":"minPositionSize_","type":"uint256"},{"internalType":"uint256","name":"maxAmountPerOption_","type":"uint256"}],"name":"createGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"options_","type":"uint256"}],"name":"createGameWithDefaults","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"},{"internalType":"uint256","name":"winningOptionId_","type":"uint256"}],"name":"declareWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultExpirationPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultMaxAmountPerOption","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultMinPositionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earnedRakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"},{"internalType":"uint256","name":"optionId_","type":"uint256"}],"name":"gameOptionKeyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"}],"name":"gameStatus","outputs":[{"internalType":"enum Livestreambets.GameStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"expiresAt","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"},{"internalType":"uint256","name":"minPositionSize","type":"uint256"},{"internalType":"uint256","name":"maxAmountPerOption","type":"uint256"},{"internalType":"uint256","name":"winner","type":"uint256"},{"internalType":"bool","name":"entriesOpen","type":"bool"},{"internalType":"bool","name":"winnerDeclared","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"bool","name":"rakeRecorded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxOptions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"}],"name":"openEntries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"ownerWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"},{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"optionId_","type":"uint256"}],"name":"positionKeyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"positions","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"hasWithdrawn","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"},{"internalType":"address","name":"account_","type":"address"}],"name":"positionsForGameForAccount","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"hasWithdrawn","type":"bool"}],"internalType":"struct Livestreambets.Position[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rakeRecipient","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"}],"name":"recordRake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"defaultExpirationPeriod_","type":"uint256"}],"name":"setDefaultExpirationPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"defaultMaxAmountPerOption_","type":"uint256"}],"name":"setDefaultMaxAmountPerOption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"defaultMinPositionSize_","type":"uint256"}],"name":"setDefaultMinPositionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"gameManager_","type":"address"}],"name":"setGameManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxOptions_","type":"uint256"}],"name":"setMaxOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"rakeRecipient_","type":"address"}],"name":"setRakeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"},{"internalType":"address","name":"account_","type":"address"}],"name":"totalCommittedToGameForAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"}],"name":"totalLockedInGame","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"totalOfAllPositionsForGameOption","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"}],"name":"totalsOfAllPositionsForAllGameOptions","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllAvailableRake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId_","type":"uint256"}],"name":"withdrawAllPositionsAndWinningsFromGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"withdrawRake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620041bc380380620041bc83398181016040528101906200003791906200043f565b620000576200004b620000fa60201b60201c565b6200010260201b60201c565b60008060146101000a81548160ff021916908315150217905550600180819055506200008c6203f480620001c660201b60201c565b6200009e600a620001e060201b60201c565b620000b767016345785d8a0000620001fa60201b60201c565b620000d0670de0b6b3a76400006200021460201b60201c565b620000e1826200022e60201b60201c565b620000f2816200028260201b60201c565b505062000509565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001d6620002d660201b60201c565b8060028190555050565b620001f0620002d660201b60201c565b8060038190555050565b6200020a620002d660201b60201c565b8060048190555050565b62000224620002d660201b60201c565b8060058190555050565b6200023e620002d660201b60201c565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b62000292620002d660201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620002e6620000fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200030c6200036760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000365576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035c90620004e7565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003c28262000395565b9050919050565b620003d481620003b5565b8114620003e057600080fd5b50565b600081519050620003f481620003c9565b92915050565b6000620004078262000395565b9050919050565b6200041981620003fa565b81146200042557600080fd5b50565b60008151905062000439816200040e565b92915050565b6000806040838503121562000459576200045862000390565b5b60006200046985828601620003e3565b92505060206200047c8582860162000428565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620004cf60208362000486565b9150620004dc8262000497565b602082019050919050565b600060208201905081810360008301526200050281620004c0565b9050919050565b613ca380620005196000396000f3fe6080604052600436106102765760003560e01c806379afb9291161014f578063b0090ea3116100c1578063daf75c051161007a578063daf75c051461098a578063dff3f3b9146109c7578063e90ae59c146109f0578063ee0d48f614610a19578063ef78411114610a42578063f2fde38b14610a6d576102ad565b8063b0090ea314610890578063b01b810c146108a7578063b2a5bab8146108d0578063b7127e411461090d578063bdaae1e714610936578063c6b052661461095f576102ad565b80639106447c116101135780639106447c1461077257806396e5075a1461079b57806399c76246146107c45780639f20daaa146107ed578063a345758e1461082a578063a8e492d914610853576102ad565b806379afb929146106c05780637b1aa45f146106fd5780638456cb59146107075780638b6ae4121461071e5780638da5cb5b14610747576102ad565b80634738638b116101e8578063544ed9b4116101ac578063544ed9b4146105d65780635c975abb146105ff5780635df170771461062a5780635e68fc061461065557806369958ab914610680578063715018a6146106a9576102ad565b80634738638b146104da578063483fcb87146105175780634a7e75f4146105425780634d1975b41461056d578063514ea4bf14610598576102ad565b806328df30bc1161023a57806328df30bc146103d95780632c542ede146104045780632d9398771461042057806334239c9c14610449578063347e1e0a146104865780633f4ba83a146104c3576102ad565b80630482a329146102ec5780630511c17c14610317578063117a5b90146103425780631643c8c4146103875780631ba3a9c3146103b0576102ad565b366102ad576040517f3d693ada00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156102b957600080fd5b506040517f3d693ada00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156102f857600080fd5b50610301610a96565b60405161030e9190612ecb565b60405180910390f35b34801561032357600080fd5b5061032c610aad565b6040516103399190612ecb565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190612f17565b610ab3565b60405161037e99989796959493929190612f5f565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190612fec565b610b45565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190612f17565b610dc1565b005b3480156103e557600080fd5b506103ee610f31565b6040516103fb919061306d565b60405180910390f35b61041e60048036038101906104199190612fec565b610f57565b005b34801561042c57600080fd5b5061044760048036038101906104429190612f17565b6111cd565b005b34801561045557600080fd5b50610470600480360381019061046b9190612f17565b6113c9565b60405161047d91906130ff565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190613158565b611442565b6040516104ba9190613294565b60405180910390f35b3480156104cf57600080fd5b506104d861159f565b005b3480156104e657600080fd5b5061050160048036038101906104fc91906132ec565b6115b1565b60405161050e9190612ecb565b60405180910390f35b34801561052357600080fd5b5061052c6115c9565b6040516105399190612ecb565b60405180910390f35b34801561054e57600080fd5b506105576115cf565b6040516105649190612ecb565b60405180910390f35b34801561057957600080fd5b506105826115d5565b60405161058f9190612ecb565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba91906132ec565b6115e2565b6040516105cd929190613319565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190612f17565b611613565b005b34801561060b57600080fd5b5061061461180f565b6040516106219190613342565b60405180910390f35b34801561063657600080fd5b5061063f611825565b60405161064c9190612ecb565b60405180910390f35b34801561066157600080fd5b5061066a61182b565b6040516106779190612ecb565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190612f17565b611831565b005b3480156106b557600080fd5b506106be611a60565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190612f17565b611a74565b6040516106f4919061340c565b60405180910390f35b610705611b96565b005b34801561071357600080fd5b5061071c611c11565b005b34801561072a57600080fd5b5061074560048036038101906107409190612f17565b611c23565b005b34801561075357600080fd5b5061075c611d05565b604051610769919061343d565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190612f17565b611d2e565b005b3480156107a757600080fd5b506107c260048036038101906107bd9190612f17565b611d40565b005b3480156107d057600080fd5b506107eb60048036038101906107e69190612f17565b611d52565b005b3480156107f957600080fd5b50610814600480360381019061080f9190613158565b611d64565b6040516108219190612ecb565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c9190613484565b611e29565b005b34801561085f57600080fd5b5061087a600480360381019061087591906134b1565b611e75565b6040516108879190613513565b60405180910390f35b34801561089c57600080fd5b506108a5611eab565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190612f17565b611ec5565b005b3480156108dc57600080fd5b506108f760048036038101906108f29190612fec565b61206e565b6040516109049190613513565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f919061352e565b6120a1565b005b34801561094257600080fd5b5061095d6004803603810190610958919061355b565b6120ed565b005b34801561096b57600080fd5b5061097461237d565b604051610981919061343d565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac9190612f17565b6123a3565b6040516109be9190612ecb565b60405180910390f35b3480156109d357600080fd5b506109ee60048036038101906109e99190612f17565b612463565b005b3480156109fc57600080fd5b50610a176004803603810190610a129190612f17565b61258e565b005b348015610a2557600080fd5b50610a406004803603810190610a3b9190612f17565b612700565b005b348015610a4e57600080fd5b50610a57612712565b604051610a649190612ecb565b60405180910390f35b348015610a7957600080fd5b50610a946004803603810190610a8f919061352e565b612718565b005b6000600954600854610aa891906135f1565b905090565b60045481565b60078181548110610ac357600080fd5b90600052602060002090600602016000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060050160019054906101000a900460ff16908060050160029054906101000a900460ff16908060050160039054906101000a900460ff16905089565b610b4d611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610bd35750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906136a8565b60405180910390fd5b816007805490508110610c51576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078481548110610c6757610c666136c8565b5b906000526020600020906006020190506000610c828261279b565b905060006004811115610c9857610c97613088565b5b816004811115610cab57610caa613088565b5b14610ce2576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600101548410610d1f576040517fcb7c84b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260050160016101000a81548160ff0219169083151502179055508382600401819055507fd620cad007f711f526385f9e9ecc931ea58b1285ae09a10d659b1eb9e3f374658585604051610d769291906136f7565b60405180910390a17feef47ba4363cae9212bc3abe2892d33ef395cd9cda8ef23d2ff34b6f296f1f9e85826001604051610db293929190613720565b60405180910390a15050505050565b806007805490508110610e00576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e0861281c565b610e10612866565b600060078381548110610e2657610e256136c8565b5b906000526020600020906006020190506000610e418261279b565b905060036004811115610e5757610e56613088565b5b816004811115610e6a57610e69613088565b5b03610e8257610e7d8483600401546128b5565b610f23565b60026004811115610e9657610e95613088565b5b816004811115610ea957610ea8613088565b5b1480610ed85750600480811115610ec357610ec2613088565b5b816004811115610ed657610ed5613088565b5b145b15610ef057610eeb848360010154612a76565b610f22565b6040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5050610f2d612c35565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b816007805490508110610f96576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f9e612866565b610fa661281c565b600060078481548110610fbc57610fbb6136c8565b5b906000526020600020906006020190506000610fd78261279b565b905060016004811115610fed57610fec613088565b5b81600481111561100057610fff613088565b5b14611037576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600101548410611074576040517fcb7c84b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600b6000611085883389611e75565b8152602001908152602001600020905060003482600001546110a79190613757565b905083600201548110156110e7576040517f99c3460e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f3888861206e565b9050600034600c6000848152602001908152602001600020546111169190613757565b90508560030154811115611156576040517ffdb59c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c6000848152602001908152602001600020819055508284600001819055507f942a77644519640071b23ff6ee3b7b47dd6a4738c5775fbb1760ec2b646038808989338760000154346040516111b295949392919061378b565b60405180910390a15050505050506111c8612c35565b505050565b6111d5611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061125b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61129a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611291906136a8565b60405180910390fd5b8060078054905081106112d9576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600783815481106112ef576112ee6136c8565b5b90600052602060002090600602019050600061130a8261279b565b9050600060048111156113205761131f613088565b5b81600481111561133357611332613088565b5b1461136a576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260050160006101000a81548160ff0219169083151502179055507feef47ba4363cae9212bc3abe2892d33ef395cd9cda8ef23d2ff34b6f296f1f9e848260016040516113bb93929190613720565b60405180910390a150505050565b600081600780549050811061140a576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600784815481106114205761141f6136c8565b5b906000526020600020906006020190506114398161279b565b92505050919050565b6060826007805490508110611483576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078581548110611499576114986136c8565b5b906000526020600020906006020190506000816001015467ffffffffffffffff8111156114c9576114c86137de565b5b60405190808252806020026020018201604052801561150257816020015b6114ef612e96565b8152602001906001900390816114e75790505b50905060005b826001015481101561159257600b6000611523898985611e75565b8152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff161515151581525050828281518110611574576115736136c8565b5b6020026020010181905250808061158a9061380d565b915050611508565b5080935050505092915050565b6115a7612c3e565b6115af612cbc565b565b600c6020528060005260406000206000915090505481565b60055481565b60085481565b6000600780549050905090565b600b6020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b61161b611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116a15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d7906136a8565b60405180910390fd5b80600780549050811061171f576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078381548110611735576117346136c8565b5b9060005260206000209060060201905060006117508261279b565b90506001600481111561176657611765613088565b5b81600481111561177957611778613088565b5b146117b0576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260050160006101000a81548160ff0219169083151502179055507feef47ba4363cae9212bc3abe2892d33ef395cd9cda8ef23d2ff34b6f296f1f9e8482600060405161180193929190613720565b60405180910390a150505050565b60008060149054906101000a900460ff16905090565b60035481565b60095481565b611839611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118bf5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f5906136a8565b60405180910390fd5b80600780549050811061193d576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078381548110611953576119526136c8565b5b90600052602060002090600602019050600061196e8261279b565b90506001600481111561198457611983613088565b5b81600481111561199757611996613088565b5b141580156119ca5750600060048111156119b4576119b3613088565b5b8160048111156119c7576119c6613088565b5b14155b15611a01576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260050160026101000a81548160ff0219169083151502179055507feef47ba4363cae9212bc3abe2892d33ef395cd9cda8ef23d2ff34b6f296f1f9e84826004604051611a5293929190613720565b60405180910390a150505050565b611a68612c3e565b611a726000612d1e565b565b6060816007805490508110611ab5576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078481548110611acb57611aca6136c8565b5b906000526020600020906006020190506000816001015467ffffffffffffffff811115611afb57611afa6137de565b5b604051908082528060200260200182016040528015611b295781602001602082028036833780820191505090505b50905060005b8260010154811015611b8a57600c6000611b49888461206e565b815260200190815260200160002054828281518110611b6b57611b6a6136c8565b5b6020026020010181815250508080611b829061380d565b915050611b2f565b50809350505050919050565b611b9e612c3e565b60003403611bd8576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fb5dccff0c2e7a9547b26fe7dbfbfbd99813a8711e4baf7f2ec73cd69655dfe2c34604051611c079190612ecb565b60405180910390a1565b611c19612c3e565b611c21612de2565b565b611c2b611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cb15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce7906136a8565b60405180910390fd5b611d02600254826004546005546120ed565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d36612c3e565b8060028190555050565b611d48612c3e565b8060048190555050565b611d5a612c3e565b8060058190555050565b6000826007805490508110611da5576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078581548110611dbb57611dba6136c8565b5b906000526020600020906006020190506000805b8260010154811015611e1c57600b6000611dea898985611e75565b81526020019081526020016000206000015482611e079190613757565b91508080611e149061380d565b915050611dcf565b5080935050505092915050565b611e31612c3e565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838383604051602001611e8c939291906138be565b6040516020818303038152906040528051906020012090509392505050565b611eb3612c3e565b611ec3611ebe610a96565b61258e565b565b611ecd612c3e565b806007805490508110611f0c576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078381548110611f2257611f216136c8565b5b906000526020600020906006020190506000611f3d8261279b565b905060036004811115611f5357611f52613088565b5b816004811115611f6657611f65613088565b5b14611f9d576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160050160039054906101000a900460ff1615611fe6576040517f3d693ada00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b826001015481101561204a57826004015481031561203757600c600061200f878461206e565b8152602001908152602001600020546008600082825461202f9190613757565b925050819055505b80806120429061380d565b915050611fe9565b5060018260050160036101000a81548160ff02191690831515021790555050505050565b600082826040516020016120839291906138fb565b60405160208183030381529060405280519060200120905092915050565b6120a9612c3e565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120f5611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061217b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b1906136a8565b60405180910390fd5b60028310806121ca575060035483115b15612201576040517f177adf0300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007604051806101200160405280864261221b9190613757565b815260200185815260200184815260200183815260200160008152602001600015158152602001600015158152602001600015158152602001600015158152509080600181540180825580915050600190039060005260206000209060060201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e08201518160050160026101000a81548160ff0219169083151502179055506101008201518160050160036101000a81548160ff0219169083151502179055505050600160078054905061234b91906135f1565b7fbd19c47e9925eb6f7be8bb1c13a841e0240aaeaf17f217e90022e9c8eb66877f60405160405180910390a250505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008160078054905081106123e4576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600784815481106123fa576123f96136c8565b5b906000526020600020906006020190506000805b826001015481101561245757600c6000612428888461206e565b815260200190815260200160002054826124429190613757565b9150808061244f9061380d565b91505061240e565b50809350505050919050565b61246b612c3e565b478111806124795750600081145b156124b0576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16826040516124d690613958565b60006040518083038185875af1925050503d8060008114612513576040519150601f19603f3d011682016040523d82523d6000602084013e612518565b606091505b5050905080612553576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f36a8cfbf7655e6019c9246e01ded1d727877ea135a5dcc275658e566fab1e978826040516125829190612ecb565b60405180910390a15050565b612596612c3e565b61259e612866565b6125a6610a96565b8111156125df576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600960008282546125f19190613757565b925050819055506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161264090613958565b60006040518083038185875af1925050503d806000811461267d576040519150601f19603f3d011682016040523d82523d6000602084013e612682565b606091505b50509050806126bd576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa50c5d86b7fe5903552dca0219d47d925b98990b9d14c1f7291481f7a9298822826040516126ec9190612ecb565b60405180910390a1506126fd612c35565b50565b612708612c3e565b8060038190555050565b60025481565b612720612c3e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361278f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612786906139df565b60405180910390fd5b61279881612d1e565b50565b60008160050160019054906101000a900460ff16156127bd5760039050612817565b8160050160029054906101000a900460ff16156127dd5760049050612817565b81600001544211156127f25760029050612817565b8160050160009054906101000a900460ff16156128125760019050612817565b600090505b919050565b61282461180f565b15612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90613a4b565b60405180910390fd5b565b6002600154036128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a290613ab7565b60405180910390fd5b6002600181905550565b6000600b60006128c6853386611e75565b815260200190815260200160002090508060010160009054906101000a900460ff161561291f576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600001540361295d576040517f4dfbbff300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600282600001546129709190613ad7565b905060018260010160006101000a81548160ff02191690831515021790555060003373ffffffffffffffffffffffffffffffffffffffff16826040516129b590613958565b60006040518083038185875af1925050503d80600081146129f2576040519150601f19603f3d011682016040523d82523d6000602084013e6129f7565b606091505b5050905080612a32576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fe5c7778b97408103623fad96d2d801c69d572015cb790d3cb8530fce38c44f0385853385604051612a679493929190613b19565b60405180910390a15050505050565b6000805b82811015612b16576000600b6000612a93873386611e75565b815260200190815260200160002090508060010160009054906101000a900460ff1615612ac05750612b03565b6000816000015403612ad25750612b03565b60018160010160006101000a81548160ff021916908315150217905550806000015483612aff9190613757565b9250505b8080612b0e9061380d565b915050612a7a565b5060008103612b51576040517f4dfbbff300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1682604051612b7790613958565b60006040518083038185875af1925050503d8060008114612bb4576040519150601f19603f3d011682016040523d82523d6000602084013e612bb9565b606091505b5050905080612bf4576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f91d59bcf762c6c32cba8bd570c6c925b6d1c8bee1be34a6777c4191e194debdd843384604051612c2793929190613b5e565b60405180910390a150505050565b60018081905550565b612c46612e45565b73ffffffffffffffffffffffffffffffffffffffff16612c64611d05565b73ffffffffffffffffffffffffffffffffffffffff1614612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613be1565b60405180910390fd5b565b612cc4612e4d565b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612d07612e45565b604051612d14919061343d565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612dea61281c565b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e2e612e45565b604051612e3b919061343d565b60405180910390a1565b600033905090565b612e5561180f565b612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b90613c4d565b60405180910390fd5b565b6040518060400160405280600081526020016000151581525090565b6000819050919050565b612ec581612eb2565b82525050565b6000602082019050612ee06000830184612ebc565b92915050565b600080fd5b612ef481612eb2565b8114612eff57600080fd5b50565b600081359050612f1181612eeb565b92915050565b600060208284031215612f2d57612f2c612ee6565b5b6000612f3b84828501612f02565b91505092915050565b60008115159050919050565b612f5981612f44565b82525050565b600061012082019050612f75600083018c612ebc565b612f82602083018b612ebc565b612f8f604083018a612ebc565b612f9c6060830189612ebc565b612fa96080830188612ebc565b612fb660a0830187612f50565b612fc360c0830186612f50565b612fd060e0830185612f50565b612fde610100830184612f50565b9a9950505050505050505050565b6000806040838503121561300357613002612ee6565b5b600061301185828601612f02565b925050602061302285828601612f02565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130578261302c565b9050919050565b6130678161304c565b82525050565b6000602082019050613082600083018461305e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581106130c8576130c7613088565b5b50565b60008190506130d9826130b7565b919050565b60006130e9826130cb565b9050919050565b6130f9816130de565b82525050565b600060208201905061311460008301846130f0565b92915050565b60006131258261302c565b9050919050565b6131358161311a565b811461314057600080fd5b50565b6000813590506131528161312c565b92915050565b6000806040838503121561316f5761316e612ee6565b5b600061317d85828601612f02565b925050602061318e85828601613143565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131cd81612eb2565b82525050565b6131dc81612f44565b82525050565b6040820160008201516131f860008501826131c4565b50602082015161320b60208501826131d3565b50505050565b600061321d83836131e2565b60408301905092915050565b6000602082019050919050565b600061324182613198565b61324b81856131a3565b9350613256836131b4565b8060005b8381101561328757815161326e8882613211565b975061327983613229565b92505060018101905061325a565b5085935050505092915050565b600060208201905081810360008301526132ae8184613236565b905092915050565b6000819050919050565b6132c9816132b6565b81146132d457600080fd5b50565b6000813590506132e6816132c0565b92915050565b60006020828403121561330257613301612ee6565b5b6000613310848285016132d7565b91505092915050565b600060408201905061332e6000830185612ebc565b61333b6020830184612f50565b9392505050565b60006020820190506133576000830184612f50565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061339583836131c4565b60208301905092915050565b6000602082019050919050565b60006133b98261335d565b6133c38185613368565b93506133ce83613379565b8060005b838110156133ff5781516133e68882613389565b97506133f1836133a1565b9250506001810190506133d2565b5085935050505092915050565b6000602082019050818103600083015261342681846133ae565b905092915050565b6134378161311a565b82525050565b6000602082019050613452600083018461342e565b92915050565b6134618161304c565b811461346c57600080fd5b50565b60008135905061347e81613458565b92915050565b60006020828403121561349a57613499612ee6565b5b60006134a88482850161346f565b91505092915050565b6000806000606084860312156134ca576134c9612ee6565b5b60006134d886828701612f02565b93505060206134e986828701613143565b92505060406134fa86828701612f02565b9150509250925092565b61350d816132b6565b82525050565b60006020820190506135286000830184613504565b92915050565b60006020828403121561354457613543612ee6565b5b600061355284828501613143565b91505092915050565b6000806000806080858703121561357557613574612ee6565b5b600061358387828801612f02565b945050602061359487828801612f02565b93505060406135a587828801612f02565b92505060606135b687828801612f02565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135fc82612eb2565b915061360783612eb2565b925082820390508181111561361f5761361e6135c2565b5b92915050565b600082825260208201905092915050565b7f43616c6c6572206973206e65697468657220746865206f776e6572206e6f722060008201527f67616d65206d616e616765720000000000000000000000000000000000000000602082015250565b6000613692602c83613625565b915061369d82613636565b604082019050919050565b600060208201905081810360008301526136c181613685565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060408201905061370c6000830185612ebc565b6137196020830184612ebc565b9392505050565b60006060820190506137356000830186612ebc565b61374260208301856130f0565b61374f60408301846130f0565b949350505050565b600061376282612eb2565b915061376d83612eb2565b9250828201905080821115613785576137846135c2565b5b92915050565b600060a0820190506137a06000830188612ebc565b6137ad6020830187612ebc565b6137ba604083018661342e565b6137c76060830185612ebc565b6137d46080830184612ebc565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061381882612eb2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361384a576138496135c2565b5b600182019050919050565b6000819050919050565b61387061386b82612eb2565b613855565b82525050565b60008160601b9050919050565b600061388e82613876565b9050919050565b60006138a082613883565b9050919050565b6138b86138b38261311a565b613895565b82525050565b60006138ca828661385f565b6020820191506138da82856138a7565b6014820191506138ea828461385f565b602082019150819050949350505050565b6000613907828561385f565b602082019150613917828461385f565b6020820191508190509392505050565b600081905092915050565b50565b6000613942600083613927565b915061394d82613932565b600082019050919050565b600061396382613935565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139c9602683613625565b91506139d48261396d565b604082019050919050565b600060208201905081810360008301526139f8816139bc565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613a35601083613625565b9150613a40826139ff565b602082019050919050565b60006020820190508181036000830152613a6481613a28565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613aa1601f83613625565b9150613aac82613a6b565b602082019050919050565b60006020820190508181036000830152613ad081613a94565b9050919050565b6000613ae282612eb2565b9150613aed83612eb2565b9250828202613afb81612eb2565b91508282048414831517613b1257613b116135c2565b5b5092915050565b6000608082019050613b2e6000830187612ebc565b613b3b6020830186612ebc565b613b48604083018561342e565b613b556060830184612ebc565b95945050505050565b6000606082019050613b736000830186612ebc565b613b80602083018561342e565b613b8d6040830184612ebc565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bcb602083613625565b9150613bd682613b95565b602082019050919050565b60006020820190508181036000830152613bfa81613bbe565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613c37601483613625565b9150613c4282613c01565b602082019050919050565b60006020820190508181036000830152613c6681613c2a565b905091905056fea2646970667358221220b423eb98b61015ea2b8d28e6489de25d9cba4f4eb1f433879539042d1032336164736f6c634300081300330000000000000000000000007fb1075d7c8884da98181740ebecf6b1a10663a80000000000000000000000007fb1075d7c8884da98181740ebecf6b1a10663a8
Deployed Bytecode
0x6080604052600436106102765760003560e01c806379afb9291161014f578063b0090ea3116100c1578063daf75c051161007a578063daf75c051461098a578063dff3f3b9146109c7578063e90ae59c146109f0578063ee0d48f614610a19578063ef78411114610a42578063f2fde38b14610a6d576102ad565b8063b0090ea314610890578063b01b810c146108a7578063b2a5bab8146108d0578063b7127e411461090d578063bdaae1e714610936578063c6b052661461095f576102ad565b80639106447c116101135780639106447c1461077257806396e5075a1461079b57806399c76246146107c45780639f20daaa146107ed578063a345758e1461082a578063a8e492d914610853576102ad565b806379afb929146106c05780637b1aa45f146106fd5780638456cb59146107075780638b6ae4121461071e5780638da5cb5b14610747576102ad565b80634738638b116101e8578063544ed9b4116101ac578063544ed9b4146105d65780635c975abb146105ff5780635df170771461062a5780635e68fc061461065557806369958ab914610680578063715018a6146106a9576102ad565b80634738638b146104da578063483fcb87146105175780634a7e75f4146105425780634d1975b41461056d578063514ea4bf14610598576102ad565b806328df30bc1161023a57806328df30bc146103d95780632c542ede146104045780632d9398771461042057806334239c9c14610449578063347e1e0a146104865780633f4ba83a146104c3576102ad565b80630482a329146102ec5780630511c17c14610317578063117a5b90146103425780631643c8c4146103875780631ba3a9c3146103b0576102ad565b366102ad576040517f3d693ada00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156102b957600080fd5b506040517f3d693ada00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156102f857600080fd5b50610301610a96565b60405161030e9190612ecb565b60405180910390f35b34801561032357600080fd5b5061032c610aad565b6040516103399190612ecb565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190612f17565b610ab3565b60405161037e99989796959493929190612f5f565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190612fec565b610b45565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190612f17565b610dc1565b005b3480156103e557600080fd5b506103ee610f31565b6040516103fb919061306d565b60405180910390f35b61041e60048036038101906104199190612fec565b610f57565b005b34801561042c57600080fd5b5061044760048036038101906104429190612f17565b6111cd565b005b34801561045557600080fd5b50610470600480360381019061046b9190612f17565b6113c9565b60405161047d91906130ff565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190613158565b611442565b6040516104ba9190613294565b60405180910390f35b3480156104cf57600080fd5b506104d861159f565b005b3480156104e657600080fd5b5061050160048036038101906104fc91906132ec565b6115b1565b60405161050e9190612ecb565b60405180910390f35b34801561052357600080fd5b5061052c6115c9565b6040516105399190612ecb565b60405180910390f35b34801561054e57600080fd5b506105576115cf565b6040516105649190612ecb565b60405180910390f35b34801561057957600080fd5b506105826115d5565b60405161058f9190612ecb565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba91906132ec565b6115e2565b6040516105cd929190613319565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190612f17565b611613565b005b34801561060b57600080fd5b5061061461180f565b6040516106219190613342565b60405180910390f35b34801561063657600080fd5b5061063f611825565b60405161064c9190612ecb565b60405180910390f35b34801561066157600080fd5b5061066a61182b565b6040516106779190612ecb565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190612f17565b611831565b005b3480156106b557600080fd5b506106be611a60565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190612f17565b611a74565b6040516106f4919061340c565b60405180910390f35b610705611b96565b005b34801561071357600080fd5b5061071c611c11565b005b34801561072a57600080fd5b5061074560048036038101906107409190612f17565b611c23565b005b34801561075357600080fd5b5061075c611d05565b604051610769919061343d565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190612f17565b611d2e565b005b3480156107a757600080fd5b506107c260048036038101906107bd9190612f17565b611d40565b005b3480156107d057600080fd5b506107eb60048036038101906107e69190612f17565b611d52565b005b3480156107f957600080fd5b50610814600480360381019061080f9190613158565b611d64565b6040516108219190612ecb565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c9190613484565b611e29565b005b34801561085f57600080fd5b5061087a600480360381019061087591906134b1565b611e75565b6040516108879190613513565b60405180910390f35b34801561089c57600080fd5b506108a5611eab565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190612f17565b611ec5565b005b3480156108dc57600080fd5b506108f760048036038101906108f29190612fec565b61206e565b6040516109049190613513565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f919061352e565b6120a1565b005b34801561094257600080fd5b5061095d6004803603810190610958919061355b565b6120ed565b005b34801561096b57600080fd5b5061097461237d565b604051610981919061343d565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac9190612f17565b6123a3565b6040516109be9190612ecb565b60405180910390f35b3480156109d357600080fd5b506109ee60048036038101906109e99190612f17565b612463565b005b3480156109fc57600080fd5b50610a176004803603810190610a129190612f17565b61258e565b005b348015610a2557600080fd5b50610a406004803603810190610a3b9190612f17565b612700565b005b348015610a4e57600080fd5b50610a57612712565b604051610a649190612ecb565b60405180910390f35b348015610a7957600080fd5b50610a946004803603810190610a8f919061352e565b612718565b005b6000600954600854610aa891906135f1565b905090565b60045481565b60078181548110610ac357600080fd5b90600052602060002090600602016000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060050160019054906101000a900460ff16908060050160029054906101000a900460ff16908060050160039054906101000a900460ff16905089565b610b4d611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610bd35750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906136a8565b60405180910390fd5b816007805490508110610c51576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078481548110610c6757610c666136c8565b5b906000526020600020906006020190506000610c828261279b565b905060006004811115610c9857610c97613088565b5b816004811115610cab57610caa613088565b5b14610ce2576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600101548410610d1f576040517fcb7c84b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260050160016101000a81548160ff0219169083151502179055508382600401819055507fd620cad007f711f526385f9e9ecc931ea58b1285ae09a10d659b1eb9e3f374658585604051610d769291906136f7565b60405180910390a17feef47ba4363cae9212bc3abe2892d33ef395cd9cda8ef23d2ff34b6f296f1f9e85826001604051610db293929190613720565b60405180910390a15050505050565b806007805490508110610e00576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e0861281c565b610e10612866565b600060078381548110610e2657610e256136c8565b5b906000526020600020906006020190506000610e418261279b565b905060036004811115610e5757610e56613088565b5b816004811115610e6a57610e69613088565b5b03610e8257610e7d8483600401546128b5565b610f23565b60026004811115610e9657610e95613088565b5b816004811115610ea957610ea8613088565b5b1480610ed85750600480811115610ec357610ec2613088565b5b816004811115610ed657610ed5613088565b5b145b15610ef057610eeb848360010154612a76565b610f22565b6040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5050610f2d612c35565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b816007805490508110610f96576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f9e612866565b610fa661281c565b600060078481548110610fbc57610fbb6136c8565b5b906000526020600020906006020190506000610fd78261279b565b905060016004811115610fed57610fec613088565b5b81600481111561100057610fff613088565b5b14611037576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600101548410611074576040517fcb7c84b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600b6000611085883389611e75565b8152602001908152602001600020905060003482600001546110a79190613757565b905083600201548110156110e7576040517f99c3460e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f3888861206e565b9050600034600c6000848152602001908152602001600020546111169190613757565b90508560030154811115611156576040517ffdb59c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c6000848152602001908152602001600020819055508284600001819055507f942a77644519640071b23ff6ee3b7b47dd6a4738c5775fbb1760ec2b646038808989338760000154346040516111b295949392919061378b565b60405180910390a15050505050506111c8612c35565b505050565b6111d5611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061125b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61129a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611291906136a8565b60405180910390fd5b8060078054905081106112d9576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600783815481106112ef576112ee6136c8565b5b90600052602060002090600602019050600061130a8261279b565b9050600060048111156113205761131f613088565b5b81600481111561133357611332613088565b5b1461136a576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260050160006101000a81548160ff0219169083151502179055507feef47ba4363cae9212bc3abe2892d33ef395cd9cda8ef23d2ff34b6f296f1f9e848260016040516113bb93929190613720565b60405180910390a150505050565b600081600780549050811061140a576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600784815481106114205761141f6136c8565b5b906000526020600020906006020190506114398161279b565b92505050919050565b6060826007805490508110611483576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078581548110611499576114986136c8565b5b906000526020600020906006020190506000816001015467ffffffffffffffff8111156114c9576114c86137de565b5b60405190808252806020026020018201604052801561150257816020015b6114ef612e96565b8152602001906001900390816114e75790505b50905060005b826001015481101561159257600b6000611523898985611e75565b8152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff161515151581525050828281518110611574576115736136c8565b5b6020026020010181905250808061158a9061380d565b915050611508565b5080935050505092915050565b6115a7612c3e565b6115af612cbc565b565b600c6020528060005260406000206000915090505481565b60055481565b60085481565b6000600780549050905090565b600b6020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b61161b611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116a15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d7906136a8565b60405180910390fd5b80600780549050811061171f576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078381548110611735576117346136c8565b5b9060005260206000209060060201905060006117508261279b565b90506001600481111561176657611765613088565b5b81600481111561177957611778613088565b5b146117b0576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260050160006101000a81548160ff0219169083151502179055507feef47ba4363cae9212bc3abe2892d33ef395cd9cda8ef23d2ff34b6f296f1f9e8482600060405161180193929190613720565b60405180910390a150505050565b60008060149054906101000a900460ff16905090565b60035481565b60095481565b611839611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118bf5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f5906136a8565b60405180910390fd5b80600780549050811061193d576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078381548110611953576119526136c8565b5b90600052602060002090600602019050600061196e8261279b565b90506001600481111561198457611983613088565b5b81600481111561199757611996613088565b5b141580156119ca5750600060048111156119b4576119b3613088565b5b8160048111156119c7576119c6613088565b5b14155b15611a01576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260050160026101000a81548160ff0219169083151502179055507feef47ba4363cae9212bc3abe2892d33ef395cd9cda8ef23d2ff34b6f296f1f9e84826004604051611a5293929190613720565b60405180910390a150505050565b611a68612c3e565b611a726000612d1e565b565b6060816007805490508110611ab5576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078481548110611acb57611aca6136c8565b5b906000526020600020906006020190506000816001015467ffffffffffffffff811115611afb57611afa6137de565b5b604051908082528060200260200182016040528015611b295781602001602082028036833780820191505090505b50905060005b8260010154811015611b8a57600c6000611b49888461206e565b815260200190815260200160002054828281518110611b6b57611b6a6136c8565b5b6020026020010181815250508080611b829061380d565b915050611b2f565b50809350505050919050565b611b9e612c3e565b60003403611bd8576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fb5dccff0c2e7a9547b26fe7dbfbfbd99813a8711e4baf7f2ec73cd69655dfe2c34604051611c079190612ecb565b60405180910390a1565b611c19612c3e565b611c21612de2565b565b611c2b611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cb15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce7906136a8565b60405180910390fd5b611d02600254826004546005546120ed565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d36612c3e565b8060028190555050565b611d48612c3e565b8060048190555050565b611d5a612c3e565b8060058190555050565b6000826007805490508110611da5576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078581548110611dbb57611dba6136c8565b5b906000526020600020906006020190506000805b8260010154811015611e1c57600b6000611dea898985611e75565b81526020019081526020016000206000015482611e079190613757565b91508080611e149061380d565b915050611dcf565b5080935050505092915050565b611e31612c3e565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838383604051602001611e8c939291906138be565b6040516020818303038152906040528051906020012090509392505050565b611eb3612c3e565b611ec3611ebe610a96565b61258e565b565b611ecd612c3e565b806007805490508110611f0c576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060078381548110611f2257611f216136c8565b5b906000526020600020906006020190506000611f3d8261279b565b905060036004811115611f5357611f52613088565b5b816004811115611f6657611f65613088565b5b14611f9d576040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160050160039054906101000a900460ff1615611fe6576040517f3d693ada00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b826001015481101561204a57826004015481031561203757600c600061200f878461206e565b8152602001908152602001600020546008600082825461202f9190613757565b925050819055505b80806120429061380d565b915050611fe9565b5060018260050160036101000a81548160ff02191690831515021790555050505050565b600082826040516020016120839291906138fb565b60405160208183030381529060405280519060200120905092915050565b6120a9612c3e565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120f5611d05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061217b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b1906136a8565b60405180910390fd5b60028310806121ca575060035483115b15612201576040517f177adf0300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007604051806101200160405280864261221b9190613757565b815260200185815260200184815260200183815260200160008152602001600015158152602001600015158152602001600015158152602001600015158152509080600181540180825580915050600190039060005260206000209060060201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e08201518160050160026101000a81548160ff0219169083151502179055506101008201518160050160036101000a81548160ff0219169083151502179055505050600160078054905061234b91906135f1565b7fbd19c47e9925eb6f7be8bb1c13a841e0240aaeaf17f217e90022e9c8eb66877f60405160405180910390a250505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008160078054905081106123e4576040517f57e25a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600784815481106123fa576123f96136c8565b5b906000526020600020906006020190506000805b826001015481101561245757600c6000612428888461206e565b815260200190815260200160002054826124429190613757565b9150808061244f9061380d565b91505061240e565b50809350505050919050565b61246b612c3e565b478111806124795750600081145b156124b0576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16826040516124d690613958565b60006040518083038185875af1925050503d8060008114612513576040519150601f19603f3d011682016040523d82523d6000602084013e612518565b606091505b5050905080612553576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f36a8cfbf7655e6019c9246e01ded1d727877ea135a5dcc275658e566fab1e978826040516125829190612ecb565b60405180910390a15050565b612596612c3e565b61259e612866565b6125a6610a96565b8111156125df576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600960008282546125f19190613757565b925050819055506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161264090613958565b60006040518083038185875af1925050503d806000811461267d576040519150601f19603f3d011682016040523d82523d6000602084013e612682565b606091505b50509050806126bd576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa50c5d86b7fe5903552dca0219d47d925b98990b9d14c1f7291481f7a9298822826040516126ec9190612ecb565b60405180910390a1506126fd612c35565b50565b612708612c3e565b8060038190555050565b60025481565b612720612c3e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361278f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612786906139df565b60405180910390fd5b61279881612d1e565b50565b60008160050160019054906101000a900460ff16156127bd5760039050612817565b8160050160029054906101000a900460ff16156127dd5760049050612817565b81600001544211156127f25760029050612817565b8160050160009054906101000a900460ff16156128125760019050612817565b600090505b919050565b61282461180f565b15612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90613a4b565b60405180910390fd5b565b6002600154036128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a290613ab7565b60405180910390fd5b6002600181905550565b6000600b60006128c6853386611e75565b815260200190815260200160002090508060010160009054906101000a900460ff161561291f576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600001540361295d576040517f4dfbbff300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600282600001546129709190613ad7565b905060018260010160006101000a81548160ff02191690831515021790555060003373ffffffffffffffffffffffffffffffffffffffff16826040516129b590613958565b60006040518083038185875af1925050503d80600081146129f2576040519150601f19603f3d011682016040523d82523d6000602084013e6129f7565b606091505b5050905080612a32576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fe5c7778b97408103623fad96d2d801c69d572015cb790d3cb8530fce38c44f0385853385604051612a679493929190613b19565b60405180910390a15050505050565b6000805b82811015612b16576000600b6000612a93873386611e75565b815260200190815260200160002090508060010160009054906101000a900460ff1615612ac05750612b03565b6000816000015403612ad25750612b03565b60018160010160006101000a81548160ff021916908315150217905550806000015483612aff9190613757565b9250505b8080612b0e9061380d565b915050612a7a565b5060008103612b51576040517f4dfbbff300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1682604051612b7790613958565b60006040518083038185875af1925050503d8060008114612bb4576040519150601f19603f3d011682016040523d82523d6000602084013e612bb9565b606091505b5050905080612bf4576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f91d59bcf762c6c32cba8bd570c6c925b6d1c8bee1be34a6777c4191e194debdd843384604051612c2793929190613b5e565b60405180910390a150505050565b60018081905550565b612c46612e45565b73ffffffffffffffffffffffffffffffffffffffff16612c64611d05565b73ffffffffffffffffffffffffffffffffffffffff1614612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613be1565b60405180910390fd5b565b612cc4612e4d565b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612d07612e45565b604051612d14919061343d565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612dea61281c565b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e2e612e45565b604051612e3b919061343d565b60405180910390a1565b600033905090565b612e5561180f565b612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b90613c4d565b60405180910390fd5b565b6040518060400160405280600081526020016000151581525090565b6000819050919050565b612ec581612eb2565b82525050565b6000602082019050612ee06000830184612ebc565b92915050565b600080fd5b612ef481612eb2565b8114612eff57600080fd5b50565b600081359050612f1181612eeb565b92915050565b600060208284031215612f2d57612f2c612ee6565b5b6000612f3b84828501612f02565b91505092915050565b60008115159050919050565b612f5981612f44565b82525050565b600061012082019050612f75600083018c612ebc565b612f82602083018b612ebc565b612f8f604083018a612ebc565b612f9c6060830189612ebc565b612fa96080830188612ebc565b612fb660a0830187612f50565b612fc360c0830186612f50565b612fd060e0830185612f50565b612fde610100830184612f50565b9a9950505050505050505050565b6000806040838503121561300357613002612ee6565b5b600061301185828601612f02565b925050602061302285828601612f02565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130578261302c565b9050919050565b6130678161304c565b82525050565b6000602082019050613082600083018461305e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581106130c8576130c7613088565b5b50565b60008190506130d9826130b7565b919050565b60006130e9826130cb565b9050919050565b6130f9816130de565b82525050565b600060208201905061311460008301846130f0565b92915050565b60006131258261302c565b9050919050565b6131358161311a565b811461314057600080fd5b50565b6000813590506131528161312c565b92915050565b6000806040838503121561316f5761316e612ee6565b5b600061317d85828601612f02565b925050602061318e85828601613143565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131cd81612eb2565b82525050565b6131dc81612f44565b82525050565b6040820160008201516131f860008501826131c4565b50602082015161320b60208501826131d3565b50505050565b600061321d83836131e2565b60408301905092915050565b6000602082019050919050565b600061324182613198565b61324b81856131a3565b9350613256836131b4565b8060005b8381101561328757815161326e8882613211565b975061327983613229565b92505060018101905061325a565b5085935050505092915050565b600060208201905081810360008301526132ae8184613236565b905092915050565b6000819050919050565b6132c9816132b6565b81146132d457600080fd5b50565b6000813590506132e6816132c0565b92915050565b60006020828403121561330257613301612ee6565b5b6000613310848285016132d7565b91505092915050565b600060408201905061332e6000830185612ebc565b61333b6020830184612f50565b9392505050565b60006020820190506133576000830184612f50565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061339583836131c4565b60208301905092915050565b6000602082019050919050565b60006133b98261335d565b6133c38185613368565b93506133ce83613379565b8060005b838110156133ff5781516133e68882613389565b97506133f1836133a1565b9250506001810190506133d2565b5085935050505092915050565b6000602082019050818103600083015261342681846133ae565b905092915050565b6134378161311a565b82525050565b6000602082019050613452600083018461342e565b92915050565b6134618161304c565b811461346c57600080fd5b50565b60008135905061347e81613458565b92915050565b60006020828403121561349a57613499612ee6565b5b60006134a88482850161346f565b91505092915050565b6000806000606084860312156134ca576134c9612ee6565b5b60006134d886828701612f02565b93505060206134e986828701613143565b92505060406134fa86828701612f02565b9150509250925092565b61350d816132b6565b82525050565b60006020820190506135286000830184613504565b92915050565b60006020828403121561354457613543612ee6565b5b600061355284828501613143565b91505092915050565b6000806000806080858703121561357557613574612ee6565b5b600061358387828801612f02565b945050602061359487828801612f02565b93505060406135a587828801612f02565b92505060606135b687828801612f02565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135fc82612eb2565b915061360783612eb2565b925082820390508181111561361f5761361e6135c2565b5b92915050565b600082825260208201905092915050565b7f43616c6c6572206973206e65697468657220746865206f776e6572206e6f722060008201527f67616d65206d616e616765720000000000000000000000000000000000000000602082015250565b6000613692602c83613625565b915061369d82613636565b604082019050919050565b600060208201905081810360008301526136c181613685565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060408201905061370c6000830185612ebc565b6137196020830184612ebc565b9392505050565b60006060820190506137356000830186612ebc565b61374260208301856130f0565b61374f60408301846130f0565b949350505050565b600061376282612eb2565b915061376d83612eb2565b9250828201905080821115613785576137846135c2565b5b92915050565b600060a0820190506137a06000830188612ebc565b6137ad6020830187612ebc565b6137ba604083018661342e565b6137c76060830185612ebc565b6137d46080830184612ebc565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061381882612eb2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361384a576138496135c2565b5b600182019050919050565b6000819050919050565b61387061386b82612eb2565b613855565b82525050565b60008160601b9050919050565b600061388e82613876565b9050919050565b60006138a082613883565b9050919050565b6138b86138b38261311a565b613895565b82525050565b60006138ca828661385f565b6020820191506138da82856138a7565b6014820191506138ea828461385f565b602082019150819050949350505050565b6000613907828561385f565b602082019150613917828461385f565b6020820191508190509392505050565b600081905092915050565b50565b6000613942600083613927565b915061394d82613932565b600082019050919050565b600061396382613935565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139c9602683613625565b91506139d48261396d565b604082019050919050565b600060208201905081810360008301526139f8816139bc565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613a35601083613625565b9150613a40826139ff565b602082019050919050565b60006020820190508181036000830152613a6481613a28565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613aa1601f83613625565b9150613aac82613a6b565b602082019050919050565b60006020820190508181036000830152613ad081613a94565b9050919050565b6000613ae282612eb2565b9150613aed83612eb2565b9250828202613afb81612eb2565b91508282048414831517613b1257613b116135c2565b5b5092915050565b6000608082019050613b2e6000830187612ebc565b613b3b6020830186612ebc565b613b48604083018561342e565b613b556060830184612ebc565b95945050505050565b6000606082019050613b736000830186612ebc565b613b80602083018561342e565b613b8d6040830184612ebc565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bcb602083613625565b9150613bd682613b95565b602082019050919050565b60006020820190508181036000830152613bfa81613bbe565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613c37601483613625565b9150613c4282613c01565b602082019050919050565b60006020820190508181036000830152613c6681613c2a565b905091905056fea2646970667358221220b423eb98b61015ea2b8d28e6489de25d9cba4f4eb1f433879539042d1032336164736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007fb1075d7c8884da98181740ebecf6b1a10663a80000000000000000000000007fb1075d7c8884da98181740ebecf6b1a10663a8
-----Decoded View---------------
Arg [0] : rakeRecipient_ (address): 0x7fB1075D7C8884Da98181740EbECf6B1a10663A8
Arg [1] : gameManager_ (address): 0x7fB1075D7C8884Da98181740EbECf6B1a10663A8
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007fb1075d7c8884da98181740ebecf6b1a10663a8
Arg [1] : 0000000000000000000000007fb1075d7c8884da98181740ebecf6b1a10663a8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.