More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 412 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 16246506 | 664 days ago | IN | 0 ETH | 0.00207766 | ||||
Claim | 16215775 | 668 days ago | IN | 0 ETH | 0.00166767 | ||||
Claim | 16104889 | 684 days ago | IN | 0 ETH | 0.00185308 | ||||
Claim | 16104501 | 684 days ago | IN | 0 ETH | 0.00209879 | ||||
Claim | 16104491 | 684 days ago | IN | 0 ETH | 0.00194344 | ||||
Claim | 16104474 | 684 days ago | IN | 0 ETH | 0.00181655 | ||||
Claim | 16104388 | 684 days ago | IN | 0 ETH | 0.0019861 | ||||
Claim | 16104279 | 684 days ago | IN | 0 ETH | 0.00206938 | ||||
Deposit Wci | 16104195 | 684 days ago | IN | 0 ETH | 0.001348 | ||||
Claim | 16102327 | 684 days ago | IN | 0 ETH | 0.00196754 | ||||
Claim | 16101474 | 684 days ago | IN | 0 ETH | 0.00208236 | ||||
Claim | 16101466 | 684 days ago | IN | 0 ETH | 0.00277183 | ||||
Claim | 16101465 | 684 days ago | IN | 0 ETH | 0.00268441 | ||||
Claim | 16101205 | 684 days ago | IN | 0 ETH | 0.00243821 | ||||
Deposit Wci | 16100386 | 684 days ago | IN | 0 ETH | 0.00140032 | ||||
Claim | 16100139 | 685 days ago | IN | 0 ETH | 0.00173928 | ||||
Claim | 16100058 | 685 days ago | IN | 0 ETH | 0.00181172 | ||||
Claim | 16099982 | 685 days ago | IN | 0 ETH | 0.00190488 | ||||
Claim | 16099980 | 685 days ago | IN | 0 ETH | 0.00187189 | ||||
Claim | 16099956 | 685 days ago | IN | 0 ETH | 0.00181783 | ||||
Claim | 16099952 | 685 days ago | IN | 0 ETH | 0.0018569 | ||||
Claim | 16099935 | 685 days ago | IN | 0 ETH | 0.00172877 | ||||
Claim | 16099914 | 685 days ago | IN | 0 ETH | 0.00190704 | ||||
Claim | 16099907 | 685 days ago | IN | 0 ETH | 0.00186322 | ||||
Claim | 16099904 | 685 days ago | IN | 0 ETH | 0.00146501 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Contract Name:
BettingRouter
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // File: contracts\Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.13; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: contracts\Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.13; /** * @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 Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts\IBettingPair.sol pragma solidity ^0.8.13; interface IBettingPair { enum CHOICE { WIN, DRAW, LOSE } enum BETSTATUS { BETTING, REVIEWING, CLAIMING } enum TOKENTYPE { ETH, WCI } function setBetData( address[] memory _account, uint256[] memory _playerWin, uint256[] memory _playerDraw, uint256[] memory _playerLose, uint256[] memory _playerWinWci, uint256[] memory _playerDrawWci, uint256[] memory _playerLoseWci, uint256[] memory _betHistoryWin, uint256[] memory _betHistoryDraw, uint256[] memory _betHistoryLose, uint256[] memory _betHistoryWinWci, uint256[] memory _betHistoryDrawWci, uint256[] memory _betHistoryLoseWci, uint256[] memory _claimHistory, uint256[] memory _claimHistoryWci, uint256 _totalBet, uint256 _totalBetWci, uint256 _totalBetWin, uint256 _totalBetDraw, uint256 _totalBetLose, uint256 _totalBetWinWci, uint256 _totalBetDrawWci, uint256 _totalBetLoseWci, BETSTATUS _status, CHOICE _result ) external; function bet(address, uint256, CHOICE, TOKENTYPE) external; function claim(address, TOKENTYPE) external returns (uint256[] memory); function calcEarning(address, TOKENTYPE) external view returns (uint256[] memory); function calcMultiplier(TOKENTYPE) external view returns (uint256[] memory); function getPlayerBetAmount(address, TOKENTYPE) external view returns (uint256[] memory); function getPlayerClaimHistory(address, TOKENTYPE) external view returns (uint256); function getBetResult() external view returns (CHOICE); function setBetResult(CHOICE _result) external; function getBetStatus() external view returns (BETSTATUS); function setBetStatus(BETSTATUS _status) external; function getTotalBet(TOKENTYPE) external view returns (uint256); function getTotalBetPerChoice(TOKENTYPE) external view returns (uint256[] memory); function getWciTokenThreshold() external view returns (uint256); function setWciTokenThreshold(uint256) external; } // File: contracts\SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.13; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File: contracts\IERC20.sol pragma solidity ^0.8.13; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts\BettingPair.sol pragma solidity ^0.8.13; /* * @This contract actually doesn't manage token and coin transfer. * @It is responsible for only amount management. */ contract BettingPair is Ownable, IBettingPair { using SafeMath for uint256; mapping(address => mapping(TOKENTYPE => mapping(CHOICE => uint256))) players; mapping(address => mapping(TOKENTYPE => mapping(CHOICE => uint256))) betHistory; mapping(address => mapping(TOKENTYPE => uint256)) claimHistory; CHOICE betResult; BETSTATUS betStatus = BETSTATUS.BETTING; mapping(TOKENTYPE => uint256) totalBet; mapping(TOKENTYPE => mapping(CHOICE => uint256)) totalBetPerChoice; IERC20 public wciToken = IERC20(0xC5a9BC46A7dbe1c6dE493E84A18f02E70E2c5A32); uint256 wciTokenThreshold = 50000 * 10**9; // 50,000 WCI as a threshold. constructor() {} /* * @Functions to recover the past bets */ function setBetData( address[] calldata _account, uint256[] calldata _playerWin, uint256[] calldata _playerDraw, uint256[] calldata _playerLose, uint256[] calldata _playerWinWci, uint256[] calldata _playerDrawWci, uint256[] calldata _playerLoseWci, uint256[] calldata _betHistoryWin, uint256[] calldata _betHistoryDraw, uint256[] calldata _betHistoryLose, uint256[] calldata _betHistoryWinWci, uint256[] calldata _betHistoryDrawWci, uint256[] calldata _betHistoryLoseWci, uint256[] calldata _claimHistory, uint256[] calldata _claimHistoryWci, uint256 _totalBet, uint256 _totalBetWci, uint256 _totalBetWin, uint256 _totalBetDraw, uint256 _totalBetLose, uint256 _totalBetWinWci, uint256 _totalBetDrawWci, uint256 _totalBetLoseWci, BETSTATUS _status, CHOICE _result ) external override onlyOwner { for (uint256 i=0; i<_account.length; i++) { players[_account[i]][TOKENTYPE.ETH][CHOICE.WIN] = _playerWin[i]; players[_account[i]][TOKENTYPE.ETH][CHOICE.DRAW] = _playerDraw[i]; players[_account[i]][TOKENTYPE.ETH][CHOICE.LOSE] = _playerLose[i]; players[_account[i]][TOKENTYPE.WCI][CHOICE.WIN] = _playerWinWci[i]; players[_account[i]][TOKENTYPE.WCI][CHOICE.DRAW] = _playerDrawWci[i]; players[_account[i]][TOKENTYPE.WCI][CHOICE.LOSE] = _playerLoseWci[i]; betHistory[_account[i]][TOKENTYPE.ETH][CHOICE.WIN] = _betHistoryWin[i]; betHistory[_account[i]][TOKENTYPE.ETH][CHOICE.DRAW] = _betHistoryDraw[i]; betHistory[_account[i]][TOKENTYPE.ETH][CHOICE.LOSE] = _betHistoryLose[i]; betHistory[_account[i]][TOKENTYPE.WCI][CHOICE.WIN] = _betHistoryWinWci[i]; betHistory[_account[i]][TOKENTYPE.WCI][CHOICE.DRAW] = _betHistoryDrawWci[i]; betHistory[_account[i]][TOKENTYPE.WCI][CHOICE.LOSE] = _betHistoryLoseWci[i]; claimHistory[_account[i]][TOKENTYPE.ETH] = _claimHistory[i]; claimHistory[_account[i]][TOKENTYPE.WCI] = _claimHistoryWci[i]; totalBet[TOKENTYPE.ETH] = _totalBet; totalBet[TOKENTYPE.WCI] = _totalBetWci; totalBetPerChoice[TOKENTYPE.ETH][CHOICE.WIN] = _totalBetWin; totalBetPerChoice[TOKENTYPE.ETH][CHOICE.DRAW] = _totalBetDraw; totalBetPerChoice[TOKENTYPE.ETH][CHOICE.LOSE] = _totalBetLose; totalBetPerChoice[TOKENTYPE.WCI][CHOICE.WIN] = _totalBetWinWci; totalBetPerChoice[TOKENTYPE.WCI][CHOICE.DRAW] = _totalBetDrawWci; totalBetPerChoice[TOKENTYPE.WCI][CHOICE.LOSE] = _totalBetLoseWci; betStatus = _status; betResult = _result; } } /* * @Function to bet (Main function). * @params: * _player: user wallet address * _amount: bet amount * _choice: bet choice (3 choices - First team wins, draws and loses) * _token: Users can bet using ETH or WCI */ function bet(address _player, uint256 _amount, CHOICE _choice, TOKENTYPE _token) external override onlyOwner { require(betStatus == BETSTATUS.BETTING, "You can not bet at this time."); totalBet[_token] += _amount; totalBetPerChoice[_token][_choice] += _amount; players[_player][_token][_choice] += _amount; betHistory[_player][_token][_choice] += _amount; } /* * @Function to claim earnings from bet. * @It returns how many ether or WCI user will earn from bet. */ function claim(address _player, TOKENTYPE _token) external override onlyOwner returns (uint256[] memory) { require(betStatus == BETSTATUS.CLAIMING, "You can not claim at this time."); uint256[] memory res = calculateEarning(_player, betResult, _token); claimHistory[_player][_token] = res[0]; players[_player][_token][CHOICE.WIN] = 0; players[_player][_token][CHOICE.DRAW] = 0; players[_player][_token][CHOICE.LOSE] = 0; return res; } /* * @returns an array of 7 elements. The first element is user's winning amount and the second element is * site owner's profit which will be transferred to tax collector wallet. The remaining amounts are collateral * token amounts. */ function calculateEarning(address _player, CHOICE _choice, TOKENTYPE _token) internal view returns (uint256[] memory) { uint256[] memory res = new uint256[](2); uint256 userBal = players[_player][_token][_choice]; // If there are no opponent bets, the player will claim his original bet amount. if (totalBetPerChoice[_token][CHOICE.WIN] == totalBet[_token] && players[_player][_token][CHOICE.WIN] > 0) { res[0] = betHistory[_player][_token][CHOICE.WIN]; return res; } else if (totalBetPerChoice[_token][CHOICE.DRAW] == totalBet[_token] && players[_player][_token][CHOICE.DRAW] > 0) { res[0] = betHistory[_player][_token][CHOICE.DRAW]; return res; } else if (totalBetPerChoice[_token][CHOICE.LOSE] == totalBet[_token] && players[_player][_token][CHOICE.LOSE] > 0) { res[0] = betHistory[_player][_token][CHOICE.LOSE]; return res; } else if (totalBetPerChoice[_token][_choice] == 0) { return res; } uint256 _wciTokenBal = wciToken.balanceOf(_player); // If the token is ETH, the player will take 5% tax if he holds enough WCI token. Otherwise he will take 10% tax. if (_token == TOKENTYPE.ETH) { if (_wciTokenBal >= wciTokenThreshold) { res[0] = userBal + userBal.mul(totalBet[_token]-totalBetPerChoice[_token][_choice]).mul(19).div(20).div(totalBetPerChoice[_token][_choice]); res[1] = userBal.mul(totalBet[_token]-totalBetPerChoice[_token][_choice]).div(20).div(totalBetPerChoice[_token][_choice]); } else { res[0] = userBal + userBal.mul(totalBet[_token]-totalBetPerChoice[_token][_choice]).mul(9).div(10).div(totalBetPerChoice[_token][_choice]); res[1] = userBal.mul(totalBet[_token]-totalBetPerChoice[_token][_choice]).div(10).div(totalBetPerChoice[_token][_choice]); } } // If the token is WCI, there is no tax. else if (_token == TOKENTYPE.WCI) { res[0] = totalBet[_token].mul(userBal).div(totalBetPerChoice[_token][_choice]); } return res; } /* * @Function to calculate earning for given player and token. */ function calcEarning(address _player, TOKENTYPE _token) external override view onlyOwner returns (uint256[] memory) { uint256[] memory res = new uint256[](3); res[0] = calculateEarning(_player, CHOICE.WIN, _token)[0]; res[1] = calculateEarning(_player, CHOICE.DRAW, _token)[0]; res[2] = calculateEarning(_player, CHOICE.LOSE, _token)[0]; return res; } // Calculate how many times reward will player take. It uses 10% tax formula to give users the approximate multiplier before bet. function calculateMultiplier(CHOICE _choice, IBettingPair.TOKENTYPE _token) internal view returns (uint256) { if (_token == IBettingPair.TOKENTYPE.ETH) { if (totalBetPerChoice[_token][_choice] == 0) { return 1000; } else { return totalBet[_token].mul(900).div(totalBetPerChoice[_token][_choice]) + 100; } } else { if (totalBetPerChoice[_token][_choice] == 0) { return 980; } else { return totalBet[_token].mul(1000).div(totalBetPerChoice[_token][_choice]); } } } /* * @Function to calculate multiplier. */ function calcMultiplier(IBettingPair.TOKENTYPE _token) external override view onlyOwner returns (uint256[] memory) { uint256[] memory res = new uint256[](3); res[0] = calculateMultiplier(CHOICE.WIN, _token); res[1] = calculateMultiplier(CHOICE.DRAW, _token); res[2] = calculateMultiplier(CHOICE.LOSE, _token); return res; } /* * @Function to get player bet amount. * @It uses betHistory variable because players variable is initialized to zero if user claims. */ function getPlayerBetAmount(address _player, TOKENTYPE _token) external override view onlyOwner returns (uint256[] memory) { uint256[] memory arr = new uint256[](3); arr[0] = betHistory[_player][_token][CHOICE.WIN]; arr[1] = betHistory[_player][_token][CHOICE.DRAW]; arr[2] = betHistory[_player][_token][CHOICE.LOSE]; return arr; } /* * @Function to get player claim history. */ function getPlayerClaimHistory(address _player, TOKENTYPE _token) external override view onlyOwner returns (uint256) { return claimHistory[_player][_token]; } /* * @Function to get bet result. */ function getBetResult() external view override onlyOwner returns (CHOICE) { return betResult; } /* * @Function to set the bet result. */ function setBetResult(CHOICE _result) external override onlyOwner { betResult = _result; betStatus = BETSTATUS.CLAIMING; } /* * @Function to get bet status. */ function getBetStatus() external view override onlyOwner returns (BETSTATUS) { return betStatus; } /* * @Function to set bet status. */ function setBetStatus(BETSTATUS _status) external override onlyOwner { betStatus = _status; } /* * @Function to get total bet amount. */ function getTotalBet(TOKENTYPE _token) external view override onlyOwner returns (uint256) { return totalBet[_token]; } /* * @Function to get total bet amounts per choice. * @There are 3 choices(WIN, DRAW, LOSE) so it returns an array of 3 elements. */ function getTotalBetPerChoice(TOKENTYPE _token) external view override onlyOwner returns (uint256[] memory) { uint256[] memory arr = new uint256[](3); arr[0] = totalBetPerChoice[_token][CHOICE.WIN]; arr[1] = totalBetPerChoice[_token][CHOICE.DRAW]; arr[2] = totalBetPerChoice[_token][CHOICE.LOSE]; return arr; } /* * @Function to get WCI token threshold. */ function getWciTokenThreshold() external view override onlyOwner returns (uint256) { return wciTokenThreshold; } /* * @Function to set WCI token threshold. */ function setWciTokenThreshold(uint256 _threshold) external override onlyOwner { wciTokenThreshold = _threshold; } } // File: contracts\BettingRouter.sol pragma solidity ^0.8.13; contract BettingRouter is Ownable { using SafeMath for uint256; mapping (uint256 => address) pairs; // All pair contract addresses uint256 matchId; address taxCollectorAddress = 0xC9dc42525637a96Ac978C81e35f059201c5039c8; // Tax collector address uint256 totalClaimEth; uint256 totalClaimWci; uint256 totalWinnerCountEth; uint256 totalWinnerCountWci; uint256 wciTax = 2; IERC20 wciToken = IERC20(0xC5a9BC46A7dbe1c6dE493E84A18f02E70E2c5A32); constructor() {} /* * @Check if the input pair id is valid */ modifier onlyValidPair(uint256 _id) { require(_id >= 0 && _id < matchId, "Invalid pair id."); _; } /* * @Check if the amount condition meets per token */ modifier betConditions(uint _amount, IBettingPair.TOKENTYPE _token) { if (_token == IBettingPair.TOKENTYPE.ETH) { require(_amount >= 0.01 ether, "Insuffisant amount, please increase your bet!"); } else if (_token == IBettingPair.TOKENTYPE.WCI) { require(_amount >= 1000 gwei, "Insuffisant amount, please increase your bet!"); } _; } /* * @Function to create one pair for a match */ function createOne() public onlyOwner { BettingPair _pair = new BettingPair(); pairs[matchId] = address(_pair); matchId ++; } /* * Function for betting with ethers. * This function should be separated from other betting function because this is payable function. */ function betEther(uint256 _pairId, IBettingPair.CHOICE _choice) external payable onlyValidPair(_pairId) betConditions(msg.value, IBettingPair.TOKENTYPE.ETH) { IBettingPair(pairs[_pairId]).bet(msg.sender, msg.value, _choice, IBettingPair.TOKENTYPE.ETH); } /* * Function for betting with WCI. * This function should be separated from ETH and other tokens because this token's transferFrom function has default tax rate. */ function betWCI(uint256 _pairId, uint256 _betAmount, IBettingPair.CHOICE _choice) external onlyValidPair(_pairId) betConditions(_betAmount, IBettingPair.TOKENTYPE.WCI) { wciToken.transferFrom(msg.sender, address(this), _betAmount); // Apply 5% tax to all bet amounts. IBettingPair(pairs[_pairId]).bet(msg.sender, _betAmount.mul(100-wciTax).div(100), _choice, IBettingPair.TOKENTYPE.WCI); } /* * @Function to claim earnings. */ function claim(uint256 _pairId, IBettingPair.TOKENTYPE _token) external onlyValidPair(_pairId) { uint256[] memory claimInfo = IBettingPair(pairs[_pairId]).claim(msg.sender, _token); uint256 _amountClaim = claimInfo[0]; uint256 _amountTax = claimInfo[1]; require(_amountClaim > 0, "You do not have any profit in this bet"); if (_token == IBettingPair.TOKENTYPE.ETH) { payable(msg.sender).transfer(_amountClaim); payable(taxCollectorAddress).transfer(_amountTax); } else if (_token == IBettingPair.TOKENTYPE.WCI) { wciToken.transfer(msg.sender, _amountClaim); } if (_token == IBettingPair.TOKENTYPE.ETH) { totalClaimEth += _amountClaim; totalWinnerCountEth ++; } else { totalClaimWci += _amountClaim; totalWinnerCountWci ++; } } /* * @Function to withdraw tokens from router contract. */ function withdrawPFromRouter(uint256 _amount, IBettingPair.TOKENTYPE _token) external onlyOwner { if (_token == IBettingPair.TOKENTYPE.ETH) { payable(owner()).transfer(_amount); } else if (_token == IBettingPair.TOKENTYPE.WCI) { wciToken.transfer(owner(), _amount); } } /* * @Function to get player bet information with triple data per match(per player choice). * @There are 3 types of information - first part(1/3 of total) is player bet amount information. Second part(1/3 of total) is multiplier information. Third part(1/3 of total) is player earning information. * @These information were separated before but merged to one function because of capacity of contract. */ function getBetTripleInformation(address _player, IBettingPair.TOKENTYPE _token) external view returns (uint256[] memory) { uint256[] memory res = new uint256[](matchId * 9); for (uint256 i=0; i<matchId; i++) { uint256[] memory oneAmount = IBettingPair(pairs[i]).getPlayerBetAmount(_player, _token); res[i*3] = oneAmount[0]; res[i*3 + 1] = oneAmount[1]; res[i*3 + 2] = oneAmount[2]; uint256[] memory oneMultiplier = IBettingPair(pairs[i]).calcMultiplier(_token); res[matchId*3 + i*3] = oneMultiplier[0]; res[matchId*3 + i*3 + 1] = oneMultiplier[1]; res[matchId*3 + i*3 + 2] = oneMultiplier[2]; uint256[] memory oneClaim = IBettingPair(pairs[i]).calcEarning(_player, _token); res[matchId*6 + i*3] = oneClaim[0]; res[matchId*6 + i*3 + 1] = oneClaim[1]; res[matchId*6 + i*3 + 2] = oneClaim[2]; } return res; } /* * @Function to get player bet information with single data per match. */ function getBetSingleInformation(address _player, IBettingPair.TOKENTYPE _token) external view returns (uint256[] memory) { uint256[] memory res = new uint256[](matchId * 4); for (uint256 i=0; i<matchId; i++) { res[i] = uint256(IBettingPair(pairs[i]).getBetStatus()); res[matchId + i] = uint256(IBettingPair(pairs[i]).getBetResult()); res[matchId*2 + i] = IBettingPair(pairs[i]).getPlayerClaimHistory(_player, _token); res[matchId*3 + i] = IBettingPair(pairs[i]).getTotalBet(_token); } return res; } /* * @Function to get the newly creating match id. */ function getMatchId() external view returns (uint256) { return matchId; } /* * @Function to get tax collector address */ function getTaxCollectorAddress() external view returns (address) { return taxCollectorAddress; } /* * @Function to get match status per token. * @This includes total claim amount and total winner count. */ function getBetStatsData() external view returns (uint256, uint256, uint256, uint256) { return (totalClaimEth, totalWinnerCountEth, totalClaimWci, totalWinnerCountWci); } /* * @Function to set bet status data. * @This function is needed because we upgraded the smart contract for several times and each time we upgrade * the smart contract, we need to set these values so that they can continue to count. */ function setBetStatsData(uint256 _totalClaim, uint256 _totalWinnerCount, IBettingPair.TOKENTYPE _token) external onlyOwner { if (_token == IBettingPair.TOKENTYPE.ETH) { totalClaimEth = _totalClaim; totalWinnerCountEth = _totalWinnerCount; } else { totalClaimWci = _totalClaim; totalWinnerCountWci = _totalWinnerCount; } } /* * @Function to get WCI token threshold. * @Users tax rate(5% or 10%) will be controlled by this value. */ function getWciTokenThreshold() external view returns (uint256) { if (matchId == 0) return 50000 * 10**9; else return IBettingPair(pairs[0]).getWciTokenThreshold(); } /* * @Function to get WCI token tax amount. */ function getWciTax() external view returns (uint256) { return wciTax; } /* * @Function to set WCI token tax amount. */ function setWciTax(uint256 tax) external onlyOwner { require(tax >= 0 && tax < 100, "Tax should be between 0 and 100"); wciTax = tax; } /* * @Function to set bet result. */ function setBetResult(uint256 _pairId, IBettingPair.CHOICE _result) external onlyOwner onlyValidPair(_pairId) { IBettingPair(pairs[_pairId]).setBetResult(_result); } /* * @Function to set bet status. */ function setBetStatus(uint256 _pairId, IBettingPair.BETSTATUS _status) external onlyValidPair(_pairId) { IBettingPair(pairs[_pairId]).setBetStatus(_status); } /* * @Function to set tax collector address. */ function setTaxCollectorAddress(address _address) external onlyOwner { taxCollectorAddress = _address; } /* * @Function to set WCI token threshold. */ function setWciTokenThreshold(uint256 _threshold) external onlyOwner { for (uint256 i=0; i<matchId; i++) { IBettingPair(pairs[i]).setWciTokenThreshold(_threshold); } } /* * @Function to deposit ETH. */ function depositEth() external payable { require(msg.value >= 0.01 ether, "Minimum deposit amount is 0.01"); } /* * @Function to deposit WCI */ function depositWci(uint256 amount) external onlyOwner { require(amount >= 1000 * 10 ** 9, "Minimum deposit WCI amount is 1000"); wciToken.transferFrom(msg.sender, address(this), amount); } /* * @Function to initiate the bets */ function initiateBets( uint256 _pairId, address[] calldata _account, uint256[] calldata _playerWin, uint256[] calldata _playerDraw, uint256[] calldata _playerLose, uint256[] calldata _playerWinWci, uint256[] calldata _playerDrawWci, uint256[] calldata _playerLoseWci, uint256[] calldata _betHistoryWin, uint256[] calldata _betHistoryDraw, uint256[] calldata _betHistoryLose, uint256[] calldata _betHistoryWinWci, uint256[] calldata _betHistoryDrawWci, uint256[] calldata _betHistoryLoseWci, uint256[] calldata _claimHistory, uint256[] calldata _claimHistoryWci, uint256 _totalBet, uint256 _totalBetWci, uint256 _totalBetWin, uint256 _totalBetDraw, uint256 _totalBetLose, uint256 _totalBetWinWci, uint256 _totalBetDrawWci, uint256 _totalBetLoseWci, IBettingPair.BETSTATUS _status, IBettingPair.CHOICE _result ) external onlyValidPair(_pairId) onlyOwner { IBettingPair(pairs[_pairId]).setBetData( _account, _playerWin, _playerDraw, _playerLose, _playerWinWci, _playerDrawWci, _playerLoseWci, _betHistoryWin, _betHistoryDraw, _betHistoryLose, _betHistoryWinWci, _betHistoryDrawWci, _betHistoryLoseWci, _claimHistory, _claimHistoryWci, _totalBet, _totalBetWci, _totalBetWin, _totalBetDraw, _totalBetLose, _totalBetWinWci, _totalBetDrawWci, _totalBetLoseWci, _status, _result ); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "byzantium" }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_pairId","type":"uint256"},{"internalType":"enum IBettingPair.CHOICE","name":"_choice","type":"uint8"}],"name":"betEther","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairId","type":"uint256"},{"internalType":"uint256","name":"_betAmount","type":"uint256"},{"internalType":"enum IBettingPair.CHOICE","name":"_choice","type":"uint8"}],"name":"betWCI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairId","type":"uint256"},{"internalType":"enum IBettingPair.TOKENTYPE","name":"_token","type":"uint8"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositWci","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"},{"internalType":"enum IBettingPair.TOKENTYPE","name":"_token","type":"uint8"}],"name":"getBetSingleInformation","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBetStatsData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"},{"internalType":"enum IBettingPair.TOKENTYPE","name":"_token","type":"uint8"}],"name":"getBetTripleInformation","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMatchId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxCollectorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWciTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWciTokenThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairId","type":"uint256"},{"internalType":"address[]","name":"_account","type":"address[]"},{"internalType":"uint256[]","name":"_playerWin","type":"uint256[]"},{"internalType":"uint256[]","name":"_playerDraw","type":"uint256[]"},{"internalType":"uint256[]","name":"_playerLose","type":"uint256[]"},{"internalType":"uint256[]","name":"_playerWinWci","type":"uint256[]"},{"internalType":"uint256[]","name":"_playerDrawWci","type":"uint256[]"},{"internalType":"uint256[]","name":"_playerLoseWci","type":"uint256[]"},{"internalType":"uint256[]","name":"_betHistoryWin","type":"uint256[]"},{"internalType":"uint256[]","name":"_betHistoryDraw","type":"uint256[]"},{"internalType":"uint256[]","name":"_betHistoryLose","type":"uint256[]"},{"internalType":"uint256[]","name":"_betHistoryWinWci","type":"uint256[]"},{"internalType":"uint256[]","name":"_betHistoryDrawWci","type":"uint256[]"},{"internalType":"uint256[]","name":"_betHistoryLoseWci","type":"uint256[]"},{"internalType":"uint256[]","name":"_claimHistory","type":"uint256[]"},{"internalType":"uint256[]","name":"_claimHistoryWci","type":"uint256[]"},{"internalType":"uint256","name":"_totalBet","type":"uint256"},{"internalType":"uint256","name":"_totalBetWci","type":"uint256"},{"internalType":"uint256","name":"_totalBetWin","type":"uint256"},{"internalType":"uint256","name":"_totalBetDraw","type":"uint256"},{"internalType":"uint256","name":"_totalBetLose","type":"uint256"},{"internalType":"uint256","name":"_totalBetWinWci","type":"uint256"},{"internalType":"uint256","name":"_totalBetDrawWci","type":"uint256"},{"internalType":"uint256","name":"_totalBetLoseWci","type":"uint256"},{"internalType":"enum IBettingPair.BETSTATUS","name":"_status","type":"uint8"},{"internalType":"enum IBettingPair.CHOICE","name":"_result","type":"uint8"}],"name":"initiateBets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairId","type":"uint256"},{"internalType":"enum IBettingPair.CHOICE","name":"_result","type":"uint8"}],"name":"setBetResult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalClaim","type":"uint256"},{"internalType":"uint256","name":"_totalWinnerCount","type":"uint256"},{"internalType":"enum IBettingPair.TOKENTYPE","name":"_token","type":"uint8"}],"name":"setBetStatsData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairId","type":"uint256"},{"internalType":"enum IBettingPair.BETSTATUS","name":"_status","type":"uint8"}],"name":"setBetStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTaxCollectorAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setWciTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setWciTokenThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"enum IBettingPair.TOKENTYPE","name":"_token","type":"uint8"}],"name":"withdrawPFromRouter","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080806040523461009c576000805433600160a060020a03198083168217845573c5a9bc46a7dbe1c6de493e84a18f02e70e2c5a32939092600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a373c9dc42525637a96ac978c81e35f059201c5039c8816003541617600355600260085560095416176009556147eb90816100a28239f35b600080fdfe61042060405260043610156200001457600080fd5b60006102e0527c0100000000000000000000000000000000000000000000000000000000600035048062c8f4e314620016855780630c75bb3614620016495780630f8ea5e61462001581578063153dc182146200155e5780632d6f41fa14620014db5780632faf3ea61462001259578063382429c514620010c75780633c0fdb961462001008578063439370b11462000f9b5780634abecc461462000f2057806369356d471462000ed85780637f1bee231462000eac5780638da5cb5b1462000e81578063a6b2c2b21462000d5a578063c6d755d81462000c95578063d3610b6814620008f8578063d57bd3ba14620008d5578063dcf48b6c1462000887578063ead0ffd5146200085d578063ebae940b1462000736578063f109c099146200066d578063f2fde38b14620005895763f34b6634146200015357600080fd5b346200058257620001643662001d4e565b906002546009810292811593828104600914851715620004f3576200018c9094939462002161565b936102e05190836003810204600314851715948460068102046006141715945b848310620001c85760405180620001c4898262001d80565b0390f35b826102e051526001602052600160a060020a0360406102e051205416604051907f17a45cd7000000000000000000000000000000000000000000000000000000008252816102e051918180620002238a8960048401620020d2565b03915afa90811562000538576102e0519162000565575b506200024681620020f6565b5184600381020460031485151715620004f35762000268600386028a6200213f565b5262000274816200211d565b5190600385026001810110620004f357620002a2916200029b600160038802018b6200213f565b526200212e565b51600384026002810110620004f357620002c360026003860201896200213f565b52826102e051526001602052600160a060020a0360406102e05120541690604051917f170b381100000000000000000000000000000000000000000000000000000000835262000317600484018762001f7b565b826024816102e051935afa91821562000538576102e0519262000546575b506200034182620020f6565b5190620004f357620003656200035e600386026003890262002153565b896200213f565b5262000371816200211d565b519062000385600385026003880262002153565b91600183018311620004f3576200029b6001620003a494018a6200213f565b5194600095620003bb600385026003880262002153565b600281018111620004f3576002620003d59101896200213f565b52826102e051526001602052600160a060020a0360406102e05120541690604051917f888f8080000000000000000000000000000000000000000000000000000000008352826102e051918180620004328a8960048401620020d2565b03915afa91821562000538576102e0519262000510575b506200045582620020f6565b5190620004f357620004726200035e600386026006890262002153565b526200047e816200211d565b519062000492600385026006880262002153565b91600183018311620004f3576200029b6001620004b194018a6200213f565b51600092620004c7600382026006880262002153565b9160028301809311620004f357620004e4620004eb938a6200213f565b5262001e19565b9194620001ac565b60e060020a634e487b71026102e05152601160045260246102e051fd5b6200053091923d8091833e62000527818362001f34565b8101906200204f565b903862000449565b6040513d6102e051823e3d90fd5b6200055d91923d8091833e62000527818362001f34565b903862000335565b6200057b913d8091833e62000527818362001f34565b386200023a565b6102e05180fd5b34620005825760203660031901126200058257620005a662001d37565b620005b062001dbd565b600160a060020a03809116801562000600576102e05191825482600160a060020a03198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b608460405160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b34620005825760403660031901126200058257602435600435600382101562000582576200069f600254821062001e42565b6102e0515260016020526102e051600160a060020a0360408220541690813b15620007335750604051917f6c5f66cf000000000000000000000000000000000000000000000000000000008352620006f78162001f57565b6004830152816024816102e05180945af1801562000538576200071c575b6102e05180f35b620007279062001f06565b6102e051801562000715575b80fd5b346200058257620007473662001d16565b6200075162001dbd565b60028110156200084057806200079657506102e05180808093600160a060020a038254168282156200078c575bf11562000538576102e05180f35b506108fc6200077e565b600114620007a6575b5062000715565b6009546102e08051546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03918216600482015260248101949094529051602092849260449284929091165af180156200053857156200079f57620008309060203d811162000838575b62000827818362001f34565b81019062001f89565b50806200079f565b503d6200081b565b60e060020a634e487b71026102e05152602160045260246102e051fd5b3462000582576102e05180600319360112620007335760206200087f62002199565b604051908152f35b3462000582576060366003190112620005825760243560043560443560028110156200058257620008b762001dbd565b620008c9576004556006556102e05180f35b60055560075562000715565b3462000582576102e0518060031936011262000733576020600854604051908152f35b346200058257620009093662001d4e565b600254906004820291801592818104600414841715620004f3576200092e9062002161565b936102e0515b8281106200094c5760405180620001c4888262001d80565b806102e05152600160205260046020600160a060020a0360406102e051205416604051928380927f1fa859e80000000000000000000000000000000000000000000000000000000082525afa90811562000538576102e0519162000c53575b50620009b78162001f57565b620009c382886200213f565b52806102e05152600160205260046020600160a060020a0360406102e051205416604051928380927f3f3a279d0000000000000000000000000000000000000000000000000000000082525afa90811562000538576102e0519162000c11575b5062000a2f8162001f57565b62000a4662000a3f838662002153565b886200213f565b52806102e051526001602052600160a060020a0360406102e051205416602060405180927f7901f7f5000000000000000000000000000000000000000000000000000000008252818062000a9f8a8960048401620020d2565b03915afa90811562000538576102e0519162000bd9575b50836002810204600214861715620004f35762000adb62000a3f836002870262002153565b52806102e0515260016020526020600160a060020a0360406102e051205416604051918280927f8c4d25e700000000000000000000000000000000000000000000000000000000825262000b33600483018a62001f7b565b60249384915afa91821562000538576102e0519262000b9a575b5084600381020460031487171562000b7f57509062000b7991620004e46200035e836003880262002153565b62000934565b60e060020a634e487b71026102e0515260116004526102e051fd5b9091506020813d60201162000bd0575b8162000bb96020938362001f34565b8101031262000bcb5751908862000b4d565b600080fd5b3d915062000baa565b90506020813d60201162000c08575b8162000bf76020938362001f34565b8101031262000bcb57518762000ab6565b3d915062000be8565b90506020813d60201162000c4a575b8162000c2f6020938362001f34565b81010312620005825751600381101562000582578762000a23565b3d915062000c20565b90506020813d60201162000c8c575b8162000c716020938362001f34565b810103126200058257516003811015620005825787620009ab565b3d915062000c62565b3462000582576102e05180600319360112620007335762000cb562001dbd565b60405161253c908181019181831067ffffffffffffffff84111762000d3d576200227a8239806102e05192039082f090811562000d3157506002546102e051526001602052600160a060020a0360406102e051209116600160a060020a031982541617905562000d2760025462001e19565b6002556102e05180f35b604051903d90823e3d90fd5b60e060020a634e487b71026102e05152604160045260246102e051fd5b3462000582576020366003190112620005825760043562000d7a62001dbd565b64e8d4a51000811062000e14576009546040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101929092526102e0516020918391606491839190600160a060020a03165af18015620005385762000df1576102e05180f35b62000e0c9060203d8111620008385762000827818362001f34565b508062000715565b608460405160e560020a62461bcd02815260206004820152602260248201527f4d696e696d756d206465706f7369742057434920616d6f756e7420697320313060448201527f30300000000000000000000000000000000000000000000000000000000000006064820152fd5b3462000582576102e051806003193601126200073357600160a060020a036020915416604051908152f35b3462000582576102e0518060031936011262000733576020600160a060020a0360035416604051908152f35b34620005825760203660031901126200058257600160a060020a0362000efd62001d37565b62000f0762001dbd565b16600160a060020a031960035416176003556102e05180f35b3462000582576020366003190112620005825760043562000f4062001dbd565b606481101562000f54576008556102e05180f35b606460405160e560020a62461bcd02815260206004820152601f60248201527f5461782073686f756c64206265206265747765656e203020616e6420313030006044820152fd5b6102e051806003193601126200073357662386f26fc10000341062000fc1576102e05180f35b606460405160e560020a62461bcd02815260206004820152601e60248201527f4d696e696d756d206465706f73697420616d6f756e7420697320302e303100006044820152fd5b620010133662001cf5565b9062001023600254821062001e42565b62001038662386f26fc1000034101562001e91565b6102e0515260016020526102e051600160a060020a0360408220541690813b15620007335750604051917f51afb3dd0000000000000000000000000000000000000000000000000000000083523360048401523460248401526200109c8162001f57565b604483015260006064830152816084816102e05180945af1801562000538576200071c576102e05180f35b3462000582576060366003190112620005825760443560243560043560038310156200058257620010fc600254821062001e42565b6200110f64e8d4a5100083101562001e91565b6009546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526102e051600160a060020a0393926020918391606491839188165af18015620005385762001236575b506102e0515260016020526102e051906040822054169160085460640391606483116200121c5750606491620011aa9162001fa3565b0491813b156200058257604051927f51afb3dd0000000000000000000000000000000000000000000000000000000084523360048501526024840152620011f18162001f57565b604483015260016064830152816084816102e05180945af1801562000538576200071c576102e05180f35b60e060020a634e487b71029052601160045260246102e051fd5b620012519060203d8111620008385762000827818362001f34565b508462001174565b3462000582576200126a3662001d16565b906200127a600254821062001e42565b6102e051526001602052600160a060020a03908160406102e05120541691604051927ee93d31000000000000000000000000000000000000000000000000000000008452836102e051918180620012d6873360048401620020d2565b03916102e051905af192831562000538576102e05193620014bc575b506200130a6200130284620020f6565b51936200211d565b5183156200144f576002831015918262000840578315938415620013bf57506102e051808080883382f1156200053857600354166102e0518083819493829493839415620013b5575bf11562000538575b6200084057156200138e57620013749060045462002153565b6004556200138460065462001e19565b6006556102e05180f35b6200139c9060055462002153565b600555620013ac60075462001e19565b60075562000715565b506108fc62001353565b92509050600160009214620013d6575b506200135b565b6009546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690526102e051909260209284926044928492165af18015620005385715620013cf57620014479060203d8111620008385762000827818362001f34565b5083620013cf565b608460405160e560020a62461bcd02815260206004820152602660248201527f596f7520646f206e6f74206861766520616e792070726f66697420696e20746860448201527f69732062657400000000000000000000000000000000000000000000000000006064820152fd5b620014d391933d8091833e62000527818362001f34565b9183620012f2565b346200058257620014ec3662001cf5565b90620014f762001dbd565b62001506600254821062001e42565b6102e0515260016020526102e051600160a060020a0360408220541690813b15620007335750604051917ff43c0eca000000000000000000000000000000000000000000000000000000008352620006f78162001f57565b3462000582576102e0518060031936011262000733576020600254604051908152f35b3462000582576020806003193601126200058257600435620015a262001dbd565b6102e0515b6002548110156200071557806102e05152600183526102e051600160a060020a0360408220541690813b15620007335750604051907f0f8ea5e6000000000000000000000000000000000000000000000000000000008252836004830152816024816102e05180945af18015620005385762001630575b506200162a9062001e19565b620015a7565b6200163b9062001f06565b6102e05180156200161e5780fd5b3462000582576102e051806003193601126200073357608060045460065460055460075491604051938452602084015260408301526060820152f35b3462000bcb5761034036600319011262000bcb5760243567ffffffffffffffff811162000bcb57620016bc90369060040162001cc2565b610300526102605260443567ffffffffffffffff811162000bcb57620016e790369060040162001cc2565b6101c05260c05260643567ffffffffffffffff811162000bcb576200171190369060040162001cc2565b610220526102405260843567ffffffffffffffff811162000bcb576200173c90369060040162001cc2565b6102a05260805260a43567ffffffffffffffff811162000bcb576200176690369060040162001cc2565b60c43567ffffffffffffffff811162000bcb576200178990369060040162001cc2565b9060e43567ffffffffffffffff811162000bcb57620017ad90369060040162001cc2565b6102c0529167ffffffffffffffff610104351162000bcb57620017d7366101043560040162001cc2565b6103c05260a05267ffffffffffffffff610124351162000bcb5762001803366101243560040162001cc2565b610340526101e05267ffffffffffffffff610144351162000bcb5762001830366101443560040162001cc2565b6101a0526101605267ffffffffffffffff610164351162000bcb576200185d366101643560040162001cc2565b610360526104005267ffffffffffffffff610184351162000bcb576200188a366101843560040162001cc2565b610380526101805267ffffffffffffffff6101a4351162000bcb57620018b7366101a43560040162001cc2565b610320526101405267ffffffffffffffff6101c4351162000bcb57620018e4366101c43560040162001cc2565b610120526103a05267ffffffffffffffff6101e4351162000bcb5762001911366101e43560040162001cc2565b60e05261020052600361030435101562000bcb57600361032435101562000bcb576002546200194560043591821062001e42565b6200194f62001dbd565b6102e0515260016020526102e051600160a060020a0360408220541680610100523b156200073357507fd89613ac00000000000000000000000000000000000000000000000000000000604051806103e052526103e0516103206004820152610324610300519101526103446103e051016102805261026051946102e051955b6103005187101562001a0e578035600160a060020a038116809103620005825760019160209161028051528161028051016102805201960195620019cf565b5062001b5062001b3162001b1262001af562001bcc9762001ad962001bad9862001b8e9862001ac262001b6f9962001bea9e6103e05160246003198261028051030191015262001aab62001a8e62001a70610280516101c05160c0516200223c565b6103e05160446003198284030191015261022051610240516200223c565b6103e0516064600319828403019101526102a0516080516200223c565b916103e0516084600319828603019101526200223c565b916103e05160a4600319828603019101526200223c565b906103e05160c4600319828503019101526102c051906200223c565b6103e05160e4600319828403019101526103c05160a0516200223c565b6103e05161010460031982840301910152610340516101e0516200223c565b6103e051610124600319828403019101526101a051610160516200223c565b6103e0516101446003198284030191015261036051610400516200223c565b6103e0516101646003198284030191015261038051610180516200223c565b6103e0516101846003198284030191015261032051610140516200223c565b6103e0516101a460031982840301910152610120516103a0516200223c565b6103e0516101c46003198284030191015260e051610200516200223c565b61020480356101e46103e0510152610224908135906103e0510152610244908135906103e0510152610264908135906103e0510152610284908135906103e05101526102a4908135906103e05101526102c4908135906103e05101526102e4908135906103e051015262001c616103043562001f57565b61030435906103e051015262001c7a6103243562001f57565b610324356103046103e05101526102e051906103e0518091038183610100515af18015620005385762001cae576102e05180f35b62001cbc6103e05162001f06565b62000715565b9181601f8401121562000bcb5782359167ffffffffffffffff831162000bcb5760208085019481850201011162000bcb57565b604090600319011262000bcb5760043590602435600381101562000bcb5790565b604090600319011262000bcb5760043590602435600281101562000bcb5790565b60043590600160a060020a038216820362000bcb57565b604090600319011262000bcb57600435600160a060020a038116810362000bcb5790602435600281101562000bcb5790565b6020908160408183019282815285518094520193019160005b82811062001da8575050505090565b83518552938101939281019260010162001d99565b600160a060020a0360005416330362001dd257565b606460405160e560020a62461bcd02815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b600019811462001e295760010190565b60e060020a634e487b7102600052601160045260246000fd5b1562001e4a57565b606460405160e560020a62461bcd02815260206004820152601060248201527f496e76616c696420706169722069642e000000000000000000000000000000006044820152fd5b1562001e9957565b608460405160e560020a62461bcd02815260206004820152602d60248201527f496e737566666973616e7420616d6f756e742c20706c6561736520696e63726560448201527f61736520796f75722062657421000000000000000000000000000000000000006064820152fd5b67ffffffffffffffff811162001f1b57604052565b60e060020a634e487b7102600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111762001f1b57604052565b6003111562001f6257565b60e060020a634e487b7102600052602160045260246000fd5b90600282101562001f625752565b9081602091031262000bcb5751801515810362000bcb5790565b9081156200202f5780820291820480820362001e29570362001fc25790565b608460405160e560020a62461bcd02815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152fd5b5050600090565b67ffffffffffffffff811162001f1b5760208091020190565b602090818184031262000bcb5780519067ffffffffffffffff821162000bcb57019180601f8401121562000bcb5782516200208a8162002036565b936200209a604051958662001f34565b8185528380808701930282010192831162000bcb578301905b828210620020c2575050505090565b81518152908301908301620020b3565b916020620020f4929493600160a060020a036040820196168152019062001f7b565b565b805115620021045760200190565b60e060020a634e487b7102600052603260045260246000fd5b805160011015620021045760400190565b805160021015620021045760600190565b805182101562002104576020809202010190565b9190820180921162001e2957565b906200216d8262002036565b6200217c604051918262001f34565b82815280926200218f601f199162002036565b0190602036910137565b600254620021ab57652d79883d200090565b6000808052600160205260046020600160a060020a03604084205416604051928380927fead0ffd50000000000000000000000000000000000000000000000000000000082525afa91821562000d315780926200220757505090565b9091506020823d821162002233575b81620022256020938362001f34565b810103126200073357505190565b3d915062002216565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831162000bcb57602080930280928483013701019056fe6080806040523461008e576000805433600160a060020a03198083168217845573c5a9bc46a7dbe1c6de493e84a18f02e70e2c5a32939092600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361ff0019600454166004556007541617600755652d79883d20006008556124a890816100948239f35b600080fdfe610460604052600436101561001357600080fd5b7c0100000000000000000000000000000000000000000000000000000000600035048062e93d31146111185780630f8ea5e6146110f7578063170b38111461107e57806317a45cd714610f905780631fa859e814610f5e5780633f3a279d14610f2c57806351afb3dd14610dd35780636c5f66cf14610d8a5780637901f7f514610d53578063888f808014610cd45780638c4d25e714610c9b5780638da5cb5b14610c74578063be6573bb14610c4d578063d89613ac14610300578063ead0ffd5146102da578063f2fde38b146101ff578063f43c0eca146101b65763f4b4b304146100fe57600080fd5b346101b15760203660031901126101b15760043560028110156101b1576101ad90610127611319565b610189604051916101378361141c565b60038352606036602085013761014c816113b1565b60008052602052604060002054610162846113ef565b5261016c816113b1565b6001600052602052604060002054610183846113fc565b526113b1565b60026000526020526040600020546101a08261140c565b526040519182918261128b565b0390f35b600080fd5b346101b15760203660031901126101b15760043560038110156101b157610200906101df611319565b6101e8816112c6565b60ff60045491169061ffff19161717600455600080f35b346101b15760203660031901126101b157610218611246565b610220611319565b600160a060020a0380911690811561026d5760005482600160a060020a0319821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b608460405160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b346101b15760003660031901126101b1576102f3611319565b6020600854604051908152f35b346101b1576103203660031901126101b15760043567ffffffffffffffff81116101b1576103329036906004016112e9565b6103a0526104205260243567ffffffffffffffff81116101b15761035a9036906004016112e9565b60a0526101005260443567ffffffffffffffff81116101b1576103819036906004016112e9565b610280526101e05260643567ffffffffffffffff81116101b1576103a99036906004016112e9565b6103c0526101a05260843567ffffffffffffffff81116101b1576103d19036906004016112e9565b6104005260e05267ffffffffffffffff60a435116101b1576103f83660a4356004016112e9565b610160526103205267ffffffffffffffff60c435116101b1576104203660c4356004016112e9565b6102c0526101205267ffffffffffffffff60e435116101b1576104483660e4356004016112e9565b610440526103e05267ffffffffffffffff61010435116101b15761047236610104356004016112e9565b610180526103005267ffffffffffffffff61012435116101b15761049c36610124356004016112e9565b610240526101405267ffffffffffffffff61014435116101b1576104c636610144356004016112e9565b60c0526101c05267ffffffffffffffff61016435116101b1576104ef36610164356004016112e9565b6102e0526102205267ffffffffffffffff61018435116101b15761051936610184356004016112e9565b610260526103605267ffffffffffffffff6101a435116101b157610543366101a4356004016112e9565b6102a05260805267ffffffffffffffff6101c435116101b15761056c366101c4356004016112e9565b610200526103405260036102e43510156101b15760036103043510156101b157610594611319565b6000610380525b6103a0516103805190811015610c4b576105bb9060a05161010051611374565b35600160a060020a036105e06105db610380516103a05161042051611374565b611384565b166000526001602052604060002060008052602052604060002060205260406000205561061761038051610280516101e051611374565b35600160a060020a036106376105db610380516103a05161042051611374565b16600052600160205260406000206000805260205260406000206001600052602052604060002055610673610380516103c0516101a051611374565b35600160a060020a036106936105db610380516103a05161042051611374565b166000526001602052604060002060008052602052604060002060026000526020526040600020556106ce610380516104005160e051611374565b35600160a060020a036106ee6105db610380516103a05161042051611374565b1660005260016020526040600020600160005260205260406000206000805260205260406000205561072a610380516101605161032051611374565b35600160a060020a0361074a6105db610380516103a05161042051611374565b166000526001602052604060002060016000526020526040600020602052604060002055610782610380516102c05161012051611374565b35600160a060020a036107a26105db610380516103a05161042051611374565b16600052600160205260406000206001600052602052604060002060026000526020526040600020556107df61038051610440516103e051611374565b35600160a060020a036107ff6105db610380516103a05161042051611374565b1660005260026020526040600020600080526020526040600020602052604060002055610836610380516101805161030051611374565b35600160a060020a036108566105db610380516103a05161042051611374565b16600052600260205260406000206000805260205260406000206001600052602052604060002055610892610380516102405161014051611374565b35600160a060020a036108b26105db610380516103a05161042051611374565b166000526002602052604060002060008052602052604060002060026000526020526040600020556108ed6103805160c0516101c051611374565b35600160a060020a0361090d6105db610380516103a05161042051611374565b16600052600260205260406000206001600052602052604060002060008052602052604060002055610949610380516102e05161022051611374565b35600160a060020a036109696105db610380516103a05161042051611374565b1660005260026020526040600020600160005260205260406000206020526040600020556109a1610380516102605161036051611374565b35600160a060020a036109c16105db610380516103a05161042051611374565b16600052600260205260406000206001600052602052604060002060026000526020526040600020556109fd610380516102a051608051611374565b35600160a060020a03610a1d6105db610380516103a05161042051611374565b166000526003602052604060002060008052602052604060002055610a4c610380516102005161034051611374565b35600160a060020a03610a6c6105db610380516103a05161042051611374565b1660009081526003602090815260408083206001845282528220929092556101e4357f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc55610204357f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b55610224357f25de49357469a04e2e0a55d7b7cd85100a918cf55d734f01066d3fdc0f7b9d3255610244357f7c836334d5ab49f854acdcda28542386b2e447238f01a7b550cf4b73e9b03dc555610264357f3c482f52128b8e7c79a8c64b5cb21db10ef8ac55884ff031453ef660972fabef55610284357f558e8cd53b467e9e56a1fc646b287819bef55e9e9b1cef531285b78fb892c6f5556102a4357f0f44af8394d12f4d2493817decf7ae460f4010dc707becaefcc522b156cf891455600290527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a3190526102c4357fc5ab4a74920faf8555678fb3de0a5cca786df401ae6d7a3376075739d60be5a455610bed6102e4356112c6565b600454610bfc610304356112c6565b61ffff19166102e4356101000261ff0016176103043560ff1617600455610380516000198114610c32576001016103805261059b565b60e060020a634e487b7102600052601160045260246000fd5b005b346101b15760003660031901126101b1576020600160a060020a0360075416604051908152f35b346101b15760003660031901126101b1576020600160a060020a0360005416604051908152f35b346101b15760203660031901126101b15760043560028110156101b157610ccb602091610cc6611319565b611398565b54604051908152f35b346101b1576101ad610d1c610d49610ceb3661125c565b610cf6939193611319565b60405193610d038561141c565b600385526060366020870137610d21610d1c838361149c565b6113ef565b51610d2b866113ef565b52610d39610d1c8383611824565b51610d43866113fc565b52611b2f565b516101a08261140c565b346101b1576020610ccb600160a060020a03610d6e3661125c565b9190610d78611319565b166000526003835260406000206113ca565b346101b15760203660031901126101b15760043560038110156101b157610daf611319565b610db8816112c6565b61ff006101006004549202169061ff00191617600455600080f35b346101b15760803660031901126101b157610dec611246565b602435906044359060038210156101b15760643560028110156101b157610e11611319565b60ff6101006004540416610e24816112c6565b610ee557600160a060020a03610ec192610e3d83611398565b610e488782546113e2565b9055610e53836113b1565b610e5c866112c6565b856000526020526040600020610e738782546113e2565b905516806000526001602052610e8d8260406000206113ca565b610e96856112c6565b846000526020526040600020610ead8682546113e2565b9055600052600260205260406000206113ca565b90610ecb816112c6565b600052602052610ee160406000209182546113e2565b9055005b606460405160e560020a62461bcd02815260206004820152601d60248201527f596f752063616e206e6f742062657420617420746869732074696d652e0000006044820152fd5b346101b15760003660031901126101b157610f45611319565b602060ff6004541660405190610f5a816112c6565b8152f35b346101b15760003660031901126101b157610f77611319565b602060ff610100600454041660405190610f5a816112c6565b346101b157610f9e3661125c565b90610fa7611319565b61103860405192610fb78461141c565b60038452600160a060020a0360209360603686880137168060005260028452610fe48260406000206113ca565b600080528452604060002054610ff9866113ef565b5280600052600284526110108260406000206113ca565b60016000528452604060002054611026866113fc565b526000526002835260406000206113ca565b9060026000525260406000205490805160021015611065576101ad9160608201526040519182918261128b565b60e060020a634e487b7102600052603260045260246000fd5b346101b15760203660031901126101b15760043560028110156101b1576101ad906110a7611319565b6110ee604051916110b78361141c565b6003835260603660208501376110cc8161223c565b6110d5846113ef565b526110df81612320565b6110e8846113fc565b526123c9565b6101a08261140c565b346101b15760203660031901126101b157611110611319565b600435600855005b346101b1576111263661125c565b61112e611319565b60045491600260ff610100850416611145816112c6565b036111ff576111e561115e8360ff6101ad961684611d88565b92600160a060020a03611170856113ef565b519316806000526020936003855261118c8360406000206113ca565b5580600052600184526111a38260406000206113ca565b6000805284526000604081205580600052600184526111c68260406000206113ca565b60016000528452600060408120556000526001835260406000206113ca565b90600260005252600060408120556040519182918261128b565b606460405160e560020a62461bcd02815260206004820152601f60248201527f596f752063616e206e6f7420636c61696d20617420746869732074696d652e006044820152fd5b60043590600160a060020a03821682036101b157565b60409060031901126101b157600435600160a060020a03811681036101b1579060243560028110156101b15790565b6020908160408183019282815285518094520193019160005b8281106112b2575050505090565b8351855293810193928101926001016112a4565b600311156112d057565b60e060020a634e487b7102600052602160045260246000fd5b9181601f840112156101b15782359167ffffffffffffffff83116101b1576020808501948185020101116101b157565b600160a060020a0360005416330361132d57565b606460405160e560020a62461bcd02815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b9190811015611065576020020190565b35600160a060020a03811681036101b15790565b60028110156112d0576000526005602052604060002090565b60028110156112d0576000526006602052604060002090565b9060028110156112d057600052602052604060002090565b91908201809211610c3257565b8051156110655760200190565b8051600110156110655760400190565b8051600210156110655760600190565b6080810190811067ffffffffffffffff82111761143857604052565b60e060020a634e487b7102600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761143857604052565b90601f8019910116810190811067ffffffffffffffff82111761143857604052565b91908203918211610c3257565b906040908151926114ac84611451565b600291828552602090843683880137600160a060020a03809316936000948086526001948585526114df848989206113ca565b878052855287872054906114f2856113b1565b88805286528888205461150486611398565b541480611801575b15611539575050611525939450855283528484206113ca565b90828052522054611535826113ef565b5290565b611542856113b1565b87895286528888205461155486611398565b5414806117de575b156115835750508552825284842061157491906113ca565b918352522054611535826113ef565b6115918597929394976113b1565b8789528652888820546115a386611398565b5414806117bb575b156115c557505050906115749185528383528585206113ca565b6115d68598969599979293996113b1565b868052855286862054156117af5784906007541693602488518096819360e060020a6370a0823102835260048301525afa9283156117a5578593611772575b5086101561175b57856117175750600854116116e9576116d060146116c96116dd9761169461168e8461167561167061166a8d61165b61165482611398565b54916113b1565b8d80528c528d8d20549061148f565b866121c0565b61215f565b0461167f8b6113b1565b898052885289892054906121e5565b826113e2565b61169d8b6113ef565b526116c36116aa89611398565b546116b48a6113b1565b8880528752888820549061148f565b906121c0565b04946113b1565b90828052522054906121e5565b611535826113fc565b90565b6116d0600a6116c96116dd9761169461168e8461167561171261166a8d61165b61165482611398565b6120c3565b90508414611728575b505050505090565b6116d06117416117479661173b87611398565b546121c0565b946113b1565b611750826113ef565b523880808080611720565b60248460e060020a634e487b710281526021600452fd5b9092508381813d831161179e575b61178a818361146d565b8101031261179a57519138611615565b8480fd5b503d611780565b86513d87823e3d90fd5b50505050505050505090565b508388528186526117ce858a8a206113ca565b87895286528888205415156115ab565b508288528686526117f1858a8a206113ca565b878952865288882054151561155c565b50828852868652611814858a8a206113ca565b888052865288882054151561150c565b9060409081519261183484611451565b600291828552602090843683880137600160a060020a0380931693600094808652600194858552611867848989206113ca565b8688528552878720549061187a856113b1565b88805286528888205461188c86611398565b541480611b0c575b156118ad575050611525939450855283528484206113ca565b6118b6856113b1565b8789528652888820546118c886611398565b541480611ae9575b156118e85750508552825284842061157491906113ca565b6118f68597929394976113b1565b87895286528888205461190886611398565b541480611ac6575b1561192a57505050906115749185528383528585206113ca565b61193b8598969493999792956113b1565b858752845286862054156117af5783906007541692602488518095819360e060020a6370a0823102835260048301525afa9182156117a5578592611a97575b5086101561175b5785611a575760085411611a2a57611a1e6014611a176116dd986119e861168e846119cf61167061166a8e8e8e8e8e6119c36119bc86611398565b54956113b1565b9183525220549061148f565b046119d98c6113b1565b898b5288528a8a2054906121e5565b6119f18c6113ef565b526116c36119fe8a611398565b54611a088b6113b1565b888a528752898920549061148f565b04956113b1565b918352522054906121e5565b611a1e600a611a176116dd986119e861168e846119cf61171261166a8e8e8e8e8e6119c36119bc86611398565b50818514611a69575b50505050505090565b611a1e611a7c611a829761173b88611398565b956113b1565b611a8b826113ef565b52388080808080611a60565b9091508281813d8311611abf575b611aaf818361146d565b8101031261179a5751903861197a565b503d611aa5565b50838852818652611ad9858a8a206113ca565b8789528652888820541515611910565b50828852868652611afc858a8a206113ca565b87895286528888205415156118d0565b50828852868652611b1f858a8a206113ca565b8880528652888820541515611894565b90604090815192611b3f84611451565b600291828552602090843683880137600160a060020a0380931693600094808652600194858552611b72848989206113ca565b83885285528787205490611b85856113b1565b888052865288882054611b9786611398565b541480611d65575b15611bb8575050611525939450855283528484206113ca565b611bc1856113b1565b878952865288882054611bd386611398565b541480611d42575b15611bf35750508552825284842061157491906113ca565b611c018597929394976113b1565b878952865288882054611c1386611398565b541480611d1f575b15611c3557505050906115749185528383528585206113ca565b611c4585989694939997956113b1565b858752845286862054156117af5783906007541692602488518095819360e060020a6370a0823102835260048301525afa9182156117a5578592611cf0575b5083871015611cd95786611cc8575060085411611a2a57611a1e6014611a176116dd986119e861168e846119cf61167061166a8e8e8e8e8e6119c36119bc86611398565b90508514611a695750505050505090565b60248560e060020a634e487b710281526021600452fd5b9091508281813d8311611d18575b611d08818361146d565b8101031261179a57519038611c84565b503d611cfe565b50838852818652611d32858a8a206113ca565b8789528652888820541515611c1b565b50828852868652611d55858a8a206113ca565b8789528652888820541515611bdb565b50828852868652611d78858a8a206113ca565b8880528652888820541515611b9f565b604091825193611d9785611451565b600290818652602091853684890137600160a060020a03809516600095818752600195868652611dc9858a8a206113ca565b611dd2826112c6565b81895286528888205491611de5866113b1565b898052875289892054611df787611398565b54148061207d575b15611e1957505050611525939450855283528484206113ca565b611e22866113b1565b888a52875289892054611e3487611398565b54148061205a575b15611e55575050508552825284842061157491906113ca565b611e64869892939495986113b1565b888a52875289892054611e7687611398565b541480612037575b15611e995750505050906115749185528383528585206113ca565b611eab86999795949a989293966113b1565b611eb4876112c6565b8688528552878720541561202a5784906007541693602489518096819360e060020a6370a0823102835260048301525afa928315612020578693611fed575b50871015611cd95786611fc9575060085411611f9c57611f876014611a176116dd98611f5e61168e84611f4b61167061166a8e8e8e8e8e611f366119bc86611398565b91611f40816112c6565b83525220549061148f565b04611f558c6113b1565b6119d98a6112c6565b611f678c6113ef565b526116c3611f748a611398565b54611f7e8b6113b1565b611a08896112c6565b91611f91816112c6565b8352522054906121e5565b611f87600a611a176116dd98611f5e61168e84611f4b61171261166a8e8e8e8e8e611f366119bc86611398565b90508514611fda5750505050505090565b611f87611a7c611a829761173b88611398565b9092508381813d8311612019575b612005818361146d565b8101031261201557519138611ef3565b8580fd5b503d611ffb565b87513d88823e3d90fd5b5050505050505050505090565b5084895281875261204a868b8b206113ca565b888a528752898920541515611e7e565b5083895287875261206d868b8b206113ca565b888a528752898920541515611e3c565b50838952878752612090868b8b206113ca565b8980528752898920541515611dff565b81156120aa570490565b60e060020a634e487b7102600052601260045260246000fd5b8015612159576009810290808204600903610c32576120e4600991836120a0565b036120ec5790565b608460405160e560020a62461bcd02815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152fd5b50600090565b8015612159576013810290808204601303610c32576120e4601391836120a0565b8015612159576103e8808202918083048203610c32576120e490836120a0565b801561215957610384808202918083048203610c32576120e490836120a0565b9081156121de57808202918083048203610c32576120e490836120a0565b5050600090565b9080156121f5576116e6916120a0565b606460405160e560020a62461bcd02815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152fd5b60028110156112d057806122c957612253816113b1565b906000918280526020526040822054156000146122725750506103e890565b8061229161228b6122856122a294611398565b546121a0565b916113b1565b8380526020526040832054906121e5565b90606482018092116122b2575090565b8060e060020a634e487b7102602492526011600452fd5b6122d2816113b1565b906000918280526020526040822054156000146122f15750506103d490565b60406116e69261231261230c61230685611398565b54612180565b936113b1565b8180526020522054906121e5565b60028110156112d0578061237c57612337816113b1565b90600091600183526020526040822054156000146123575750506103e890565b8061236a61228b6122856122a294611398565b600184526020526040832054906121e5565b612385816113b1565b6001600052602052604060002054156000146123a257506103d490565b806123b561228b6123066116e694611398565b6001600052602052604060002054906121e5565b60028110156112d05780612425576123e0816113b1565b90600091600283526020526040822054156000146124005750506103e890565b8061241361228b6122856122a294611398565b600284526020526040832054906121e5565b61242e816113b1565b60026000526020526040600020541560001461244b57506103d490565b8061245e61228b6123066116e694611398565b6002600052602052604060002054906121e556fea264697066735822122007193feb09e3e2ce9e5704b8a20d6c4ccc2f5ec3d458e49fd26acbfa054ea9e364736f6c63430008110033a2646970667358221220a357496d3e5ca4ce6c78d67df89113909dc4a34d23ecbfe3b51915605331fe3d64736f6c63430008110033
Deployed Bytecode
0x61042060405260043610156200001457600080fd5b60006102e0527c0100000000000000000000000000000000000000000000000000000000600035048062c8f4e314620016855780630c75bb3614620016495780630f8ea5e61462001581578063153dc182146200155e5780632d6f41fa14620014db5780632faf3ea61462001259578063382429c514620010c75780633c0fdb961462001008578063439370b11462000f9b5780634abecc461462000f2057806369356d471462000ed85780637f1bee231462000eac5780638da5cb5b1462000e81578063a6b2c2b21462000d5a578063c6d755d81462000c95578063d3610b6814620008f8578063d57bd3ba14620008d5578063dcf48b6c1462000887578063ead0ffd5146200085d578063ebae940b1462000736578063f109c099146200066d578063f2fde38b14620005895763f34b6634146200015357600080fd5b346200058257620001643662001d4e565b906002546009810292811593828104600914851715620004f3576200018c9094939462002161565b936102e05190836003810204600314851715948460068102046006141715945b848310620001c85760405180620001c4898262001d80565b0390f35b826102e051526001602052600160a060020a0360406102e051205416604051907f17a45cd7000000000000000000000000000000000000000000000000000000008252816102e051918180620002238a8960048401620020d2565b03915afa90811562000538576102e0519162000565575b506200024681620020f6565b5184600381020460031485151715620004f35762000268600386028a6200213f565b5262000274816200211d565b5190600385026001810110620004f357620002a2916200029b600160038802018b6200213f565b526200212e565b51600384026002810110620004f357620002c360026003860201896200213f565b52826102e051526001602052600160a060020a0360406102e05120541690604051917f170b381100000000000000000000000000000000000000000000000000000000835262000317600484018762001f7b565b826024816102e051935afa91821562000538576102e0519262000546575b506200034182620020f6565b5190620004f357620003656200035e600386026003890262002153565b896200213f565b5262000371816200211d565b519062000385600385026003880262002153565b91600183018311620004f3576200029b6001620003a494018a6200213f565b5194600095620003bb600385026003880262002153565b600281018111620004f3576002620003d59101896200213f565b52826102e051526001602052600160a060020a0360406102e05120541690604051917f888f8080000000000000000000000000000000000000000000000000000000008352826102e051918180620004328a8960048401620020d2565b03915afa91821562000538576102e0519262000510575b506200045582620020f6565b5190620004f357620004726200035e600386026006890262002153565b526200047e816200211d565b519062000492600385026006880262002153565b91600183018311620004f3576200029b6001620004b194018a6200213f565b51600092620004c7600382026006880262002153565b9160028301809311620004f357620004e4620004eb938a6200213f565b5262001e19565b9194620001ac565b60e060020a634e487b71026102e05152601160045260246102e051fd5b6200053091923d8091833e62000527818362001f34565b8101906200204f565b903862000449565b6040513d6102e051823e3d90fd5b6200055d91923d8091833e62000527818362001f34565b903862000335565b6200057b913d8091833e62000527818362001f34565b386200023a565b6102e05180fd5b34620005825760203660031901126200058257620005a662001d37565b620005b062001dbd565b600160a060020a03809116801562000600576102e05191825482600160a060020a03198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b608460405160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b34620005825760403660031901126200058257602435600435600382101562000582576200069f600254821062001e42565b6102e0515260016020526102e051600160a060020a0360408220541690813b15620007335750604051917f6c5f66cf000000000000000000000000000000000000000000000000000000008352620006f78162001f57565b6004830152816024816102e05180945af1801562000538576200071c575b6102e05180f35b620007279062001f06565b6102e051801562000715575b80fd5b346200058257620007473662001d16565b6200075162001dbd565b60028110156200084057806200079657506102e05180808093600160a060020a038254168282156200078c575bf11562000538576102e05180f35b506108fc6200077e565b600114620007a6575b5062000715565b6009546102e08051546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03918216600482015260248101949094529051602092849260449284929091165af180156200053857156200079f57620008309060203d811162000838575b62000827818362001f34565b81019062001f89565b50806200079f565b503d6200081b565b60e060020a634e487b71026102e05152602160045260246102e051fd5b3462000582576102e05180600319360112620007335760206200087f62002199565b604051908152f35b3462000582576060366003190112620005825760243560043560443560028110156200058257620008b762001dbd565b620008c9576004556006556102e05180f35b60055560075562000715565b3462000582576102e0518060031936011262000733576020600854604051908152f35b346200058257620009093662001d4e565b600254906004820291801592818104600414841715620004f3576200092e9062002161565b936102e0515b8281106200094c5760405180620001c4888262001d80565b806102e05152600160205260046020600160a060020a0360406102e051205416604051928380927f1fa859e80000000000000000000000000000000000000000000000000000000082525afa90811562000538576102e0519162000c53575b50620009b78162001f57565b620009c382886200213f565b52806102e05152600160205260046020600160a060020a0360406102e051205416604051928380927f3f3a279d0000000000000000000000000000000000000000000000000000000082525afa90811562000538576102e0519162000c11575b5062000a2f8162001f57565b62000a4662000a3f838662002153565b886200213f565b52806102e051526001602052600160a060020a0360406102e051205416602060405180927f7901f7f5000000000000000000000000000000000000000000000000000000008252818062000a9f8a8960048401620020d2565b03915afa90811562000538576102e0519162000bd9575b50836002810204600214861715620004f35762000adb62000a3f836002870262002153565b52806102e0515260016020526020600160a060020a0360406102e051205416604051918280927f8c4d25e700000000000000000000000000000000000000000000000000000000825262000b33600483018a62001f7b565b60249384915afa91821562000538576102e0519262000b9a575b5084600381020460031487171562000b7f57509062000b7991620004e46200035e836003880262002153565b62000934565b60e060020a634e487b71026102e0515260116004526102e051fd5b9091506020813d60201162000bd0575b8162000bb96020938362001f34565b8101031262000bcb5751908862000b4d565b600080fd5b3d915062000baa565b90506020813d60201162000c08575b8162000bf76020938362001f34565b8101031262000bcb57518762000ab6565b3d915062000be8565b90506020813d60201162000c4a575b8162000c2f6020938362001f34565b81010312620005825751600381101562000582578762000a23565b3d915062000c20565b90506020813d60201162000c8c575b8162000c716020938362001f34565b810103126200058257516003811015620005825787620009ab565b3d915062000c62565b3462000582576102e05180600319360112620007335762000cb562001dbd565b60405161253c908181019181831067ffffffffffffffff84111762000d3d576200227a8239806102e05192039082f090811562000d3157506002546102e051526001602052600160a060020a0360406102e051209116600160a060020a031982541617905562000d2760025462001e19565b6002556102e05180f35b604051903d90823e3d90fd5b60e060020a634e487b71026102e05152604160045260246102e051fd5b3462000582576020366003190112620005825760043562000d7a62001dbd565b64e8d4a51000811062000e14576009546040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101929092526102e0516020918391606491839190600160a060020a03165af18015620005385762000df1576102e05180f35b62000e0c9060203d8111620008385762000827818362001f34565b508062000715565b608460405160e560020a62461bcd02815260206004820152602260248201527f4d696e696d756d206465706f7369742057434920616d6f756e7420697320313060448201527f30300000000000000000000000000000000000000000000000000000000000006064820152fd5b3462000582576102e051806003193601126200073357600160a060020a036020915416604051908152f35b3462000582576102e0518060031936011262000733576020600160a060020a0360035416604051908152f35b34620005825760203660031901126200058257600160a060020a0362000efd62001d37565b62000f0762001dbd565b16600160a060020a031960035416176003556102e05180f35b3462000582576020366003190112620005825760043562000f4062001dbd565b606481101562000f54576008556102e05180f35b606460405160e560020a62461bcd02815260206004820152601f60248201527f5461782073686f756c64206265206265747765656e203020616e6420313030006044820152fd5b6102e051806003193601126200073357662386f26fc10000341062000fc1576102e05180f35b606460405160e560020a62461bcd02815260206004820152601e60248201527f4d696e696d756d206465706f73697420616d6f756e7420697320302e303100006044820152fd5b620010133662001cf5565b9062001023600254821062001e42565b62001038662386f26fc1000034101562001e91565b6102e0515260016020526102e051600160a060020a0360408220541690813b15620007335750604051917f51afb3dd0000000000000000000000000000000000000000000000000000000083523360048401523460248401526200109c8162001f57565b604483015260006064830152816084816102e05180945af1801562000538576200071c576102e05180f35b3462000582576060366003190112620005825760443560243560043560038310156200058257620010fc600254821062001e42565b6200110f64e8d4a5100083101562001e91565b6009546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526102e051600160a060020a0393926020918391606491839188165af18015620005385762001236575b506102e0515260016020526102e051906040822054169160085460640391606483116200121c5750606491620011aa9162001fa3565b0491813b156200058257604051927f51afb3dd0000000000000000000000000000000000000000000000000000000084523360048501526024840152620011f18162001f57565b604483015260016064830152816084816102e05180945af1801562000538576200071c576102e05180f35b60e060020a634e487b71029052601160045260246102e051fd5b620012519060203d8111620008385762000827818362001f34565b508462001174565b3462000582576200126a3662001d16565b906200127a600254821062001e42565b6102e051526001602052600160a060020a03908160406102e05120541691604051927ee93d31000000000000000000000000000000000000000000000000000000008452836102e051918180620012d6873360048401620020d2565b03916102e051905af192831562000538576102e05193620014bc575b506200130a6200130284620020f6565b51936200211d565b5183156200144f576002831015918262000840578315938415620013bf57506102e051808080883382f1156200053857600354166102e0518083819493829493839415620013b5575bf11562000538575b6200084057156200138e57620013749060045462002153565b6004556200138460065462001e19565b6006556102e05180f35b6200139c9060055462002153565b600555620013ac60075462001e19565b60075562000715565b506108fc62001353565b92509050600160009214620013d6575b506200135b565b6009546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690526102e051909260209284926044928492165af18015620005385715620013cf57620014479060203d8111620008385762000827818362001f34565b5083620013cf565b608460405160e560020a62461bcd02815260206004820152602660248201527f596f7520646f206e6f74206861766520616e792070726f66697420696e20746860448201527f69732062657400000000000000000000000000000000000000000000000000006064820152fd5b620014d391933d8091833e62000527818362001f34565b9183620012f2565b346200058257620014ec3662001cf5565b90620014f762001dbd565b62001506600254821062001e42565b6102e0515260016020526102e051600160a060020a0360408220541690813b15620007335750604051917ff43c0eca000000000000000000000000000000000000000000000000000000008352620006f78162001f57565b3462000582576102e0518060031936011262000733576020600254604051908152f35b3462000582576020806003193601126200058257600435620015a262001dbd565b6102e0515b6002548110156200071557806102e05152600183526102e051600160a060020a0360408220541690813b15620007335750604051907f0f8ea5e6000000000000000000000000000000000000000000000000000000008252836004830152816024816102e05180945af18015620005385762001630575b506200162a9062001e19565b620015a7565b6200163b9062001f06565b6102e05180156200161e5780fd5b3462000582576102e051806003193601126200073357608060045460065460055460075491604051938452602084015260408301526060820152f35b3462000bcb5761034036600319011262000bcb5760243567ffffffffffffffff811162000bcb57620016bc90369060040162001cc2565b610300526102605260443567ffffffffffffffff811162000bcb57620016e790369060040162001cc2565b6101c05260c05260643567ffffffffffffffff811162000bcb576200171190369060040162001cc2565b610220526102405260843567ffffffffffffffff811162000bcb576200173c90369060040162001cc2565b6102a05260805260a43567ffffffffffffffff811162000bcb576200176690369060040162001cc2565b60c43567ffffffffffffffff811162000bcb576200178990369060040162001cc2565b9060e43567ffffffffffffffff811162000bcb57620017ad90369060040162001cc2565b6102c0529167ffffffffffffffff610104351162000bcb57620017d7366101043560040162001cc2565b6103c05260a05267ffffffffffffffff610124351162000bcb5762001803366101243560040162001cc2565b610340526101e05267ffffffffffffffff610144351162000bcb5762001830366101443560040162001cc2565b6101a0526101605267ffffffffffffffff610164351162000bcb576200185d366101643560040162001cc2565b610360526104005267ffffffffffffffff610184351162000bcb576200188a366101843560040162001cc2565b610380526101805267ffffffffffffffff6101a4351162000bcb57620018b7366101a43560040162001cc2565b610320526101405267ffffffffffffffff6101c4351162000bcb57620018e4366101c43560040162001cc2565b610120526103a05267ffffffffffffffff6101e4351162000bcb5762001911366101e43560040162001cc2565b60e05261020052600361030435101562000bcb57600361032435101562000bcb576002546200194560043591821062001e42565b6200194f62001dbd565b6102e0515260016020526102e051600160a060020a0360408220541680610100523b156200073357507fd89613ac00000000000000000000000000000000000000000000000000000000604051806103e052526103e0516103206004820152610324610300519101526103446103e051016102805261026051946102e051955b6103005187101562001a0e578035600160a060020a038116809103620005825760019160209161028051528161028051016102805201960195620019cf565b5062001b5062001b3162001b1262001af562001bcc9762001ad962001bad9862001b8e9862001ac262001b6f9962001bea9e6103e05160246003198261028051030191015262001aab62001a8e62001a70610280516101c05160c0516200223c565b6103e05160446003198284030191015261022051610240516200223c565b6103e0516064600319828403019101526102a0516080516200223c565b916103e0516084600319828603019101526200223c565b916103e05160a4600319828603019101526200223c565b906103e05160c4600319828503019101526102c051906200223c565b6103e05160e4600319828403019101526103c05160a0516200223c565b6103e05161010460031982840301910152610340516101e0516200223c565b6103e051610124600319828403019101526101a051610160516200223c565b6103e0516101446003198284030191015261036051610400516200223c565b6103e0516101646003198284030191015261038051610180516200223c565b6103e0516101846003198284030191015261032051610140516200223c565b6103e0516101a460031982840301910152610120516103a0516200223c565b6103e0516101c46003198284030191015260e051610200516200223c565b61020480356101e46103e0510152610224908135906103e0510152610244908135906103e0510152610264908135906103e0510152610284908135906103e05101526102a4908135906103e05101526102c4908135906103e05101526102e4908135906103e051015262001c616103043562001f57565b61030435906103e051015262001c7a6103243562001f57565b610324356103046103e05101526102e051906103e0518091038183610100515af18015620005385762001cae576102e05180f35b62001cbc6103e05162001f06565b62000715565b9181601f8401121562000bcb5782359167ffffffffffffffff831162000bcb5760208085019481850201011162000bcb57565b604090600319011262000bcb5760043590602435600381101562000bcb5790565b604090600319011262000bcb5760043590602435600281101562000bcb5790565b60043590600160a060020a038216820362000bcb57565b604090600319011262000bcb57600435600160a060020a038116810362000bcb5790602435600281101562000bcb5790565b6020908160408183019282815285518094520193019160005b82811062001da8575050505090565b83518552938101939281019260010162001d99565b600160a060020a0360005416330362001dd257565b606460405160e560020a62461bcd02815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b600019811462001e295760010190565b60e060020a634e487b7102600052601160045260246000fd5b1562001e4a57565b606460405160e560020a62461bcd02815260206004820152601060248201527f496e76616c696420706169722069642e000000000000000000000000000000006044820152fd5b1562001e9957565b608460405160e560020a62461bcd02815260206004820152602d60248201527f496e737566666973616e7420616d6f756e742c20706c6561736520696e63726560448201527f61736520796f75722062657421000000000000000000000000000000000000006064820152fd5b67ffffffffffffffff811162001f1b57604052565b60e060020a634e487b7102600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111762001f1b57604052565b6003111562001f6257565b60e060020a634e487b7102600052602160045260246000fd5b90600282101562001f625752565b9081602091031262000bcb5751801515810362000bcb5790565b9081156200202f5780820291820480820362001e29570362001fc25790565b608460405160e560020a62461bcd02815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152fd5b5050600090565b67ffffffffffffffff811162001f1b5760208091020190565b602090818184031262000bcb5780519067ffffffffffffffff821162000bcb57019180601f8401121562000bcb5782516200208a8162002036565b936200209a604051958662001f34565b8185528380808701930282010192831162000bcb578301905b828210620020c2575050505090565b81518152908301908301620020b3565b916020620020f4929493600160a060020a036040820196168152019062001f7b565b565b805115620021045760200190565b60e060020a634e487b7102600052603260045260246000fd5b805160011015620021045760400190565b805160021015620021045760600190565b805182101562002104576020809202010190565b9190820180921162001e2957565b906200216d8262002036565b6200217c604051918262001f34565b82815280926200218f601f199162002036565b0190602036910137565b600254620021ab57652d79883d200090565b6000808052600160205260046020600160a060020a03604084205416604051928380927fead0ffd50000000000000000000000000000000000000000000000000000000082525afa91821562000d315780926200220757505090565b9091506020823d821162002233575b81620022256020938362001f34565b810103126200073357505190565b3d915062002216565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831162000bcb57602080930280928483013701019056fe6080806040523461008e576000805433600160a060020a03198083168217845573c5a9bc46a7dbe1c6de493e84a18f02e70e2c5a32939092600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361ff0019600454166004556007541617600755652d79883d20006008556124a890816100948239f35b600080fdfe610460604052600436101561001357600080fd5b7c0100000000000000000000000000000000000000000000000000000000600035048062e93d31146111185780630f8ea5e6146110f7578063170b38111461107e57806317a45cd714610f905780631fa859e814610f5e5780633f3a279d14610f2c57806351afb3dd14610dd35780636c5f66cf14610d8a5780637901f7f514610d53578063888f808014610cd45780638c4d25e714610c9b5780638da5cb5b14610c74578063be6573bb14610c4d578063d89613ac14610300578063ead0ffd5146102da578063f2fde38b146101ff578063f43c0eca146101b65763f4b4b304146100fe57600080fd5b346101b15760203660031901126101b15760043560028110156101b1576101ad90610127611319565b610189604051916101378361141c565b60038352606036602085013761014c816113b1565b60008052602052604060002054610162846113ef565b5261016c816113b1565b6001600052602052604060002054610183846113fc565b526113b1565b60026000526020526040600020546101a08261140c565b526040519182918261128b565b0390f35b600080fd5b346101b15760203660031901126101b15760043560038110156101b157610200906101df611319565b6101e8816112c6565b60ff60045491169061ffff19161717600455600080f35b346101b15760203660031901126101b157610218611246565b610220611319565b600160a060020a0380911690811561026d5760005482600160a060020a0319821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b608460405160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b346101b15760003660031901126101b1576102f3611319565b6020600854604051908152f35b346101b1576103203660031901126101b15760043567ffffffffffffffff81116101b1576103329036906004016112e9565b6103a0526104205260243567ffffffffffffffff81116101b15761035a9036906004016112e9565b60a0526101005260443567ffffffffffffffff81116101b1576103819036906004016112e9565b610280526101e05260643567ffffffffffffffff81116101b1576103a99036906004016112e9565b6103c0526101a05260843567ffffffffffffffff81116101b1576103d19036906004016112e9565b6104005260e05267ffffffffffffffff60a435116101b1576103f83660a4356004016112e9565b610160526103205267ffffffffffffffff60c435116101b1576104203660c4356004016112e9565b6102c0526101205267ffffffffffffffff60e435116101b1576104483660e4356004016112e9565b610440526103e05267ffffffffffffffff61010435116101b15761047236610104356004016112e9565b610180526103005267ffffffffffffffff61012435116101b15761049c36610124356004016112e9565b610240526101405267ffffffffffffffff61014435116101b1576104c636610144356004016112e9565b60c0526101c05267ffffffffffffffff61016435116101b1576104ef36610164356004016112e9565b6102e0526102205267ffffffffffffffff61018435116101b15761051936610184356004016112e9565b610260526103605267ffffffffffffffff6101a435116101b157610543366101a4356004016112e9565b6102a05260805267ffffffffffffffff6101c435116101b15761056c366101c4356004016112e9565b610200526103405260036102e43510156101b15760036103043510156101b157610594611319565b6000610380525b6103a0516103805190811015610c4b576105bb9060a05161010051611374565b35600160a060020a036105e06105db610380516103a05161042051611374565b611384565b166000526001602052604060002060008052602052604060002060205260406000205561061761038051610280516101e051611374565b35600160a060020a036106376105db610380516103a05161042051611374565b16600052600160205260406000206000805260205260406000206001600052602052604060002055610673610380516103c0516101a051611374565b35600160a060020a036106936105db610380516103a05161042051611374565b166000526001602052604060002060008052602052604060002060026000526020526040600020556106ce610380516104005160e051611374565b35600160a060020a036106ee6105db610380516103a05161042051611374565b1660005260016020526040600020600160005260205260406000206000805260205260406000205561072a610380516101605161032051611374565b35600160a060020a0361074a6105db610380516103a05161042051611374565b166000526001602052604060002060016000526020526040600020602052604060002055610782610380516102c05161012051611374565b35600160a060020a036107a26105db610380516103a05161042051611374565b16600052600160205260406000206001600052602052604060002060026000526020526040600020556107df61038051610440516103e051611374565b35600160a060020a036107ff6105db610380516103a05161042051611374565b1660005260026020526040600020600080526020526040600020602052604060002055610836610380516101805161030051611374565b35600160a060020a036108566105db610380516103a05161042051611374565b16600052600260205260406000206000805260205260406000206001600052602052604060002055610892610380516102405161014051611374565b35600160a060020a036108b26105db610380516103a05161042051611374565b166000526002602052604060002060008052602052604060002060026000526020526040600020556108ed6103805160c0516101c051611374565b35600160a060020a0361090d6105db610380516103a05161042051611374565b16600052600260205260406000206001600052602052604060002060008052602052604060002055610949610380516102e05161022051611374565b35600160a060020a036109696105db610380516103a05161042051611374565b1660005260026020526040600020600160005260205260406000206020526040600020556109a1610380516102605161036051611374565b35600160a060020a036109c16105db610380516103a05161042051611374565b16600052600260205260406000206001600052602052604060002060026000526020526040600020556109fd610380516102a051608051611374565b35600160a060020a03610a1d6105db610380516103a05161042051611374565b166000526003602052604060002060008052602052604060002055610a4c610380516102005161034051611374565b35600160a060020a03610a6c6105db610380516103a05161042051611374565b1660009081526003602090815260408083206001845282528220929092556101e4357f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc55610204357f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b55610224357f25de49357469a04e2e0a55d7b7cd85100a918cf55d734f01066d3fdc0f7b9d3255610244357f7c836334d5ab49f854acdcda28542386b2e447238f01a7b550cf4b73e9b03dc555610264357f3c482f52128b8e7c79a8c64b5cb21db10ef8ac55884ff031453ef660972fabef55610284357f558e8cd53b467e9e56a1fc646b287819bef55e9e9b1cef531285b78fb892c6f5556102a4357f0f44af8394d12f4d2493817decf7ae460f4010dc707becaefcc522b156cf891455600290527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a3190526102c4357fc5ab4a74920faf8555678fb3de0a5cca786df401ae6d7a3376075739d60be5a455610bed6102e4356112c6565b600454610bfc610304356112c6565b61ffff19166102e4356101000261ff0016176103043560ff1617600455610380516000198114610c32576001016103805261059b565b60e060020a634e487b7102600052601160045260246000fd5b005b346101b15760003660031901126101b1576020600160a060020a0360075416604051908152f35b346101b15760003660031901126101b1576020600160a060020a0360005416604051908152f35b346101b15760203660031901126101b15760043560028110156101b157610ccb602091610cc6611319565b611398565b54604051908152f35b346101b1576101ad610d1c610d49610ceb3661125c565b610cf6939193611319565b60405193610d038561141c565b600385526060366020870137610d21610d1c838361149c565b6113ef565b51610d2b866113ef565b52610d39610d1c8383611824565b51610d43866113fc565b52611b2f565b516101a08261140c565b346101b1576020610ccb600160a060020a03610d6e3661125c565b9190610d78611319565b166000526003835260406000206113ca565b346101b15760203660031901126101b15760043560038110156101b157610daf611319565b610db8816112c6565b61ff006101006004549202169061ff00191617600455600080f35b346101b15760803660031901126101b157610dec611246565b602435906044359060038210156101b15760643560028110156101b157610e11611319565b60ff6101006004540416610e24816112c6565b610ee557600160a060020a03610ec192610e3d83611398565b610e488782546113e2565b9055610e53836113b1565b610e5c866112c6565b856000526020526040600020610e738782546113e2565b905516806000526001602052610e8d8260406000206113ca565b610e96856112c6565b846000526020526040600020610ead8682546113e2565b9055600052600260205260406000206113ca565b90610ecb816112c6565b600052602052610ee160406000209182546113e2565b9055005b606460405160e560020a62461bcd02815260206004820152601d60248201527f596f752063616e206e6f742062657420617420746869732074696d652e0000006044820152fd5b346101b15760003660031901126101b157610f45611319565b602060ff6004541660405190610f5a816112c6565b8152f35b346101b15760003660031901126101b157610f77611319565b602060ff610100600454041660405190610f5a816112c6565b346101b157610f9e3661125c565b90610fa7611319565b61103860405192610fb78461141c565b60038452600160a060020a0360209360603686880137168060005260028452610fe48260406000206113ca565b600080528452604060002054610ff9866113ef565b5280600052600284526110108260406000206113ca565b60016000528452604060002054611026866113fc565b526000526002835260406000206113ca565b9060026000525260406000205490805160021015611065576101ad9160608201526040519182918261128b565b60e060020a634e487b7102600052603260045260246000fd5b346101b15760203660031901126101b15760043560028110156101b1576101ad906110a7611319565b6110ee604051916110b78361141c565b6003835260603660208501376110cc8161223c565b6110d5846113ef565b526110df81612320565b6110e8846113fc565b526123c9565b6101a08261140c565b346101b15760203660031901126101b157611110611319565b600435600855005b346101b1576111263661125c565b61112e611319565b60045491600260ff610100850416611145816112c6565b036111ff576111e561115e8360ff6101ad961684611d88565b92600160a060020a03611170856113ef565b519316806000526020936003855261118c8360406000206113ca565b5580600052600184526111a38260406000206113ca565b6000805284526000604081205580600052600184526111c68260406000206113ca565b60016000528452600060408120556000526001835260406000206113ca565b90600260005252600060408120556040519182918261128b565b606460405160e560020a62461bcd02815260206004820152601f60248201527f596f752063616e206e6f7420636c61696d20617420746869732074696d652e006044820152fd5b60043590600160a060020a03821682036101b157565b60409060031901126101b157600435600160a060020a03811681036101b1579060243560028110156101b15790565b6020908160408183019282815285518094520193019160005b8281106112b2575050505090565b8351855293810193928101926001016112a4565b600311156112d057565b60e060020a634e487b7102600052602160045260246000fd5b9181601f840112156101b15782359167ffffffffffffffff83116101b1576020808501948185020101116101b157565b600160a060020a0360005416330361132d57565b606460405160e560020a62461bcd02815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b9190811015611065576020020190565b35600160a060020a03811681036101b15790565b60028110156112d0576000526005602052604060002090565b60028110156112d0576000526006602052604060002090565b9060028110156112d057600052602052604060002090565b91908201809211610c3257565b8051156110655760200190565b8051600110156110655760400190565b8051600210156110655760600190565b6080810190811067ffffffffffffffff82111761143857604052565b60e060020a634e487b7102600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761143857604052565b90601f8019910116810190811067ffffffffffffffff82111761143857604052565b91908203918211610c3257565b906040908151926114ac84611451565b600291828552602090843683880137600160a060020a03809316936000948086526001948585526114df848989206113ca565b878052855287872054906114f2856113b1565b88805286528888205461150486611398565b541480611801575b15611539575050611525939450855283528484206113ca565b90828052522054611535826113ef565b5290565b611542856113b1565b87895286528888205461155486611398565b5414806117de575b156115835750508552825284842061157491906113ca565b918352522054611535826113ef565b6115918597929394976113b1565b8789528652888820546115a386611398565b5414806117bb575b156115c557505050906115749185528383528585206113ca565b6115d68598969599979293996113b1565b868052855286862054156117af5784906007541693602488518096819360e060020a6370a0823102835260048301525afa9283156117a5578593611772575b5086101561175b57856117175750600854116116e9576116d060146116c96116dd9761169461168e8461167561167061166a8d61165b61165482611398565b54916113b1565b8d80528c528d8d20549061148f565b866121c0565b61215f565b0461167f8b6113b1565b898052885289892054906121e5565b826113e2565b61169d8b6113ef565b526116c36116aa89611398565b546116b48a6113b1565b8880528752888820549061148f565b906121c0565b04946113b1565b90828052522054906121e5565b611535826113fc565b90565b6116d0600a6116c96116dd9761169461168e8461167561171261166a8d61165b61165482611398565b6120c3565b90508414611728575b505050505090565b6116d06117416117479661173b87611398565b546121c0565b946113b1565b611750826113ef565b523880808080611720565b60248460e060020a634e487b710281526021600452fd5b9092508381813d831161179e575b61178a818361146d565b8101031261179a57519138611615565b8480fd5b503d611780565b86513d87823e3d90fd5b50505050505050505090565b508388528186526117ce858a8a206113ca565b87895286528888205415156115ab565b508288528686526117f1858a8a206113ca565b878952865288882054151561155c565b50828852868652611814858a8a206113ca565b888052865288882054151561150c565b9060409081519261183484611451565b600291828552602090843683880137600160a060020a0380931693600094808652600194858552611867848989206113ca565b8688528552878720549061187a856113b1565b88805286528888205461188c86611398565b541480611b0c575b156118ad575050611525939450855283528484206113ca565b6118b6856113b1565b8789528652888820546118c886611398565b541480611ae9575b156118e85750508552825284842061157491906113ca565b6118f68597929394976113b1565b87895286528888205461190886611398565b541480611ac6575b1561192a57505050906115749185528383528585206113ca565b61193b8598969493999792956113b1565b858752845286862054156117af5783906007541692602488518095819360e060020a6370a0823102835260048301525afa9182156117a5578592611a97575b5086101561175b5785611a575760085411611a2a57611a1e6014611a176116dd986119e861168e846119cf61167061166a8e8e8e8e8e6119c36119bc86611398565b54956113b1565b9183525220549061148f565b046119d98c6113b1565b898b5288528a8a2054906121e5565b6119f18c6113ef565b526116c36119fe8a611398565b54611a088b6113b1565b888a528752898920549061148f565b04956113b1565b918352522054906121e5565b611a1e600a611a176116dd986119e861168e846119cf61171261166a8e8e8e8e8e6119c36119bc86611398565b50818514611a69575b50505050505090565b611a1e611a7c611a829761173b88611398565b956113b1565b611a8b826113ef565b52388080808080611a60565b9091508281813d8311611abf575b611aaf818361146d565b8101031261179a5751903861197a565b503d611aa5565b50838852818652611ad9858a8a206113ca565b8789528652888820541515611910565b50828852868652611afc858a8a206113ca565b87895286528888205415156118d0565b50828852868652611b1f858a8a206113ca565b8880528652888820541515611894565b90604090815192611b3f84611451565b600291828552602090843683880137600160a060020a0380931693600094808652600194858552611b72848989206113ca565b83885285528787205490611b85856113b1565b888052865288882054611b9786611398565b541480611d65575b15611bb8575050611525939450855283528484206113ca565b611bc1856113b1565b878952865288882054611bd386611398565b541480611d42575b15611bf35750508552825284842061157491906113ca565b611c018597929394976113b1565b878952865288882054611c1386611398565b541480611d1f575b15611c3557505050906115749185528383528585206113ca565b611c4585989694939997956113b1565b858752845286862054156117af5783906007541692602488518095819360e060020a6370a0823102835260048301525afa9182156117a5578592611cf0575b5083871015611cd95786611cc8575060085411611a2a57611a1e6014611a176116dd986119e861168e846119cf61167061166a8e8e8e8e8e6119c36119bc86611398565b90508514611a695750505050505090565b60248560e060020a634e487b710281526021600452fd5b9091508281813d8311611d18575b611d08818361146d565b8101031261179a57519038611c84565b503d611cfe565b50838852818652611d32858a8a206113ca565b8789528652888820541515611c1b565b50828852868652611d55858a8a206113ca565b8789528652888820541515611bdb565b50828852868652611d78858a8a206113ca565b8880528652888820541515611b9f565b604091825193611d9785611451565b600290818652602091853684890137600160a060020a03809516600095818752600195868652611dc9858a8a206113ca565b611dd2826112c6565b81895286528888205491611de5866113b1565b898052875289892054611df787611398565b54148061207d575b15611e1957505050611525939450855283528484206113ca565b611e22866113b1565b888a52875289892054611e3487611398565b54148061205a575b15611e55575050508552825284842061157491906113ca565b611e64869892939495986113b1565b888a52875289892054611e7687611398565b541480612037575b15611e995750505050906115749185528383528585206113ca565b611eab86999795949a989293966113b1565b611eb4876112c6565b8688528552878720541561202a5784906007541693602489518096819360e060020a6370a0823102835260048301525afa928315612020578693611fed575b50871015611cd95786611fc9575060085411611f9c57611f876014611a176116dd98611f5e61168e84611f4b61167061166a8e8e8e8e8e611f366119bc86611398565b91611f40816112c6565b83525220549061148f565b04611f558c6113b1565b6119d98a6112c6565b611f678c6113ef565b526116c3611f748a611398565b54611f7e8b6113b1565b611a08896112c6565b91611f91816112c6565b8352522054906121e5565b611f87600a611a176116dd98611f5e61168e84611f4b61171261166a8e8e8e8e8e611f366119bc86611398565b90508514611fda5750505050505090565b611f87611a7c611a829761173b88611398565b9092508381813d8311612019575b612005818361146d565b8101031261201557519138611ef3565b8580fd5b503d611ffb565b87513d88823e3d90fd5b5050505050505050505090565b5084895281875261204a868b8b206113ca565b888a528752898920541515611e7e565b5083895287875261206d868b8b206113ca565b888a528752898920541515611e3c565b50838952878752612090868b8b206113ca565b8980528752898920541515611dff565b81156120aa570490565b60e060020a634e487b7102600052601260045260246000fd5b8015612159576009810290808204600903610c32576120e4600991836120a0565b036120ec5790565b608460405160e560020a62461bcd02815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152fd5b50600090565b8015612159576013810290808204601303610c32576120e4601391836120a0565b8015612159576103e8808202918083048203610c32576120e490836120a0565b801561215957610384808202918083048203610c32576120e490836120a0565b9081156121de57808202918083048203610c32576120e490836120a0565b5050600090565b9080156121f5576116e6916120a0565b606460405160e560020a62461bcd02815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152fd5b60028110156112d057806122c957612253816113b1565b906000918280526020526040822054156000146122725750506103e890565b8061229161228b6122856122a294611398565b546121a0565b916113b1565b8380526020526040832054906121e5565b90606482018092116122b2575090565b8060e060020a634e487b7102602492526011600452fd5b6122d2816113b1565b906000918280526020526040822054156000146122f15750506103d490565b60406116e69261231261230c61230685611398565b54612180565b936113b1565b8180526020522054906121e5565b60028110156112d0578061237c57612337816113b1565b90600091600183526020526040822054156000146123575750506103e890565b8061236a61228b6122856122a294611398565b600184526020526040832054906121e5565b612385816113b1565b6001600052602052604060002054156000146123a257506103d490565b806123b561228b6123066116e694611398565b6001600052602052604060002054906121e5565b60028110156112d05780612425576123e0816113b1565b90600091600283526020526040822054156000146124005750506103e890565b8061241361228b6122856122a294611398565b600284526020526040832054906121e5565b61242e816113b1565b60026000526020526040600020541560001461244b57506103d490565b8061245e61228b6123066116e694611398565b6002600052602052604060002054906121e556fea264697066735822122007193feb09e3e2ce9e5704b8a20d6c4ccc2f5ec3d458e49fd26acbfa054ea9e364736f6c63430008110033a2646970667358221220a357496d3e5ca4ce6c78d67df89113909dc4a34d23ecbfe3b51915605331fe3d64736f6c63430008110033
Deployed Bytecode Sourcemap
24894:11124:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29422:7;24894:11124;29432:1;24894:11124;;;;;;;;;29432:1;24894:11124;;;;;;29408:26;;;;;;:::i;:::-;29452:11;24894:11124;29452:11;24894:11124;;29604:1;24894:11124;;;29604:1;24894:11124;;;;;;30093:1;24894:11124;;;30093:1;24894:11124;;;29447:786;29465:9;;;;;;24894:11124;;;;;;;:::i;:::-;;;;29476:3;24894:11124;;;;29538:5;24894:11124;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;29525:58;24894:11124;29525:58;;24894:11124;;;29525:58;;;;;;24894:11124;29525:58;;;:::i;:::-;;;;;;;;;;24894:11124;29525:58;;;;29476:3;29609:12;;;;:::i;:::-;24894:11124;;29604:1;24894:11124;;;29604:1;24894:11124;;;;;;;29598:23;29604:1;24894:11124;;29598:23;;:::i;:::-;24894:11124;29651:12;;;:::i;:::-;24894:11124;;29604:1;24894:11124;;29538:5;24894:11124;;-1:-1:-1;24894:11124:0;;29693:12;24894:11124;29636:27;29538:5;29604:1;24894:11124;;;29636:27;;:::i;:::-;24894:11124;29693:12;:::i;:::-;24894:11124;29604:1;24894:11124;;29422:7;24894:11124;;-1:-1:-1;24894:11124:0;;29678:27;29422:7;29604:1;24894:11124;;;29678:27;;:::i;:::-;24894:11124;;;;;29538:5;24894:11124;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;29755:45;24894:11124;29755:45;;24894:11124;;29755:45;;24894:11124;;:::i;:::-;;;;;;29755:45;;;;;;;;24894:11124;29755:45;;;;29476:3;29838:16;;;;:::i;:::-;24894:11124;;;;29815:39;29819:15;29604:1;24894:11124;;29604:1;24894:11124;;29819:15;:::i;:::-;29815:39;;:::i;:::-;24894:11124;29896:16;;;:::i;:::-;24894:11124;;29873:15;29604:1;24894:11124;;29604:1;24894:11124;;29873:15;:::i;:::-;24894:11124;29538:5;24894:11124;;;;;;29869:43;29538:5;29954:16;24894:11124;;29869:43;;:::i;29954:16::-;24894:11124;;;;29931:15;29604:1;24894:11124;;29604:1;24894:11124;;29931:15;:::i;:::-;29422:7;24894:11124;;;;;;29422:7;29927:43;24894:11124;;29927:43;;:::i;:::-;24894:11124;;;;;29538:5;24894:11124;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;30015:51;24894:11124;30015:51;;24894:11124;;;30015:51;;;;;;24894:11124;30015:51;;;:::i;:::-;;;;;;;;;;24894:11124;30015:51;;;;29476:3;30104:11;;;;:::i;:::-;24894:11124;;;;30081:34;30085:15;29604:1;24894:11124;;30093:1;24894:11124;;30085:15;:::i;30081:34::-;24894:11124;30157:11;;;:::i;:::-;24894:11124;;30134:15;29604:1;24894:11124;;30093:1;24894:11124;;30134:15;:::i;:::-;24894:11124;29538:5;24894:11124;;;;;;30130:38;29538:5;30210:11;24894:11124;;30130:38;;:::i;30210:11::-;24894:11124;;;30187:15;29604:1;24894:11124;;30093:1;24894:11124;;30187:15;:::i;:::-;24894:11124;29422:7;24894:11124;;;;;;;30183:38;29476:3;30183:38;;;:::i;:::-;24894:11124;29476:3;:::i;:::-;29452:11;;;;24894:11124;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;30015:51;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;24894:11124;;;;;;;;;;29755:45;;;;;;;;;;;;;:::i;:::-;;;;;29525:58;;;;;;;;;;;;:::i;:::-;;;;24894:11124;;;;;;;;;;;-1:-1:-1;;24894:11124:0;;;;;;:::i;:::-;1970:65;;:::i;:::-;-1:-1:-1;;;;;24894:11124:0;;;2657:22;;24894:11124;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;3072:40;;;;24894:11124;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24894:11124:0;;;;;;;;;;;;;;25534:54;25560:7;24894:11124;25554:13;;25534:54;:::i;:::-;24894:11124;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;33431:50;;;;;;24894:11124;;;33431:50;24894:11124;33431:50;;24894:11124;;;:::i;:::-;;33431:50;;24894:11124;;;;;;33431:50;;;;;;;;;;24894:11124;;;;;33431:50;;;;:::i;:::-;24894:11124;;;;33431:50;24894:11124;;;;;;;;;;;:::i;:::-;1970:65;;:::i;:::-;24894:11124;;;;;;28590:36;;;24894:11124;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;28643:34;;;;;28586:213;28643:34;;;;24894:11124;;;;28643:34;;;;;28586:213;24894:11124;28699:36;28695:104;;28586:213;;;;28695:104;28752:8;24894:11124;;;;;;;;28752:35;;-1:-1:-1;;;;;24894:11124:0;;;;28752:35;;24894:11124;;;;;;;;;;28752:35;;24894:11124;;;;;;;;;28752:35;;;;;;;28695:104;28752:35;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;28695:104;;28752:35;;;;;24894:11124;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;24894:11124:0;;;;;;;;;;;;;;;;1970:65;;:::i;:::-;32042:36;;24894:11124;;32137:39;24894:11124;;;;;32038:264;32209:27;24894:11124;32251:39;24894:11124;32038:264;;24894:11124;;;;;;;;;;;;;;;32776:6;24894:11124;;;;;;;;;;;;;;:::i;:::-;30540:7;24894:11124;;;;;;;;;;;;;;;;;;;30526:26;;;:::i;:::-;30570:11;24894:11124;30570:11;30583:9;;;;;;24894:11124;;;;;;;:::i;30594:3::-;24894:11124;;;;30644:5;24894:11124;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;30631:37;;;;24894:11124;30631:37;;;;;;;;;24894:11124;30631:37;;;;30594:3;24894:11124;;;;:::i;:::-;30614:55;;;;:::i;:::-;24894:11124;;;;;30644:5;24894:11124;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;30711:37;;;;24894:11124;30711:37;;;;;;;;;24894:11124;30711:37;;;;30594:3;24894:11124;;;;:::i;:::-;30684:65;30688:11;;;;:::i;:::-;30684:65;;:::i;:::-;24894:11124;;;;;30644:5;24894:11124;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;30785:61;;24894:11124;30785:61;;;;;;;24894:11124;30785:61;;;:::i;:::-;;;;;;;;;;24894:11124;30785:61;;;;30594:3;24894:11124;;30540:7;24894:11124;;;30540:7;24894:11124;;;;;;30764:82;30768:13;24894:11124;30540:7;24894:11124;;30768:13;:::i;30764:82::-;24894:11124;;;;;30644:5;24894:11124;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;30882:42;;;;24894:11124;30882:42;;24894:11124;;30882:42;;24894:11124;;:::i;:::-;;30882:42;;;;;;;;;;24894:11124;30882:42;;;;30594:3;24894:11124;;30873:1;24894:11124;;;30873:1;24894:11124;;;;;;;;30594:3;24894:11124;30861:63;30865:13;24894:11124;30873:1;24894:11124;;30865:13;:::i;30594:3::-;30570:11;;24894:11124;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;30882:42;;;;24894:11124;30882:42;;24894:11124;30882:42;;;;;;24894:11124;30882:42;;;:::i;:::-;;;24894:11124;;;;;30882:42;;;;24894:11124;;;;30882:42;;;-1:-1:-1;30882:42:0;;30785:61;;;24894:11124;30785:61;;24894:11124;30785:61;;;;;;24894:11124;30785:61;;;:::i;:::-;;;24894:11124;;;;;30785:61;;;;;;-1:-1:-1;30785:61:0;;30711:37;;;24894:11124;30711:37;;24894:11124;30711:37;;;;;;24894:11124;30711:37;;;:::i;:::-;;;24894:11124;;;;;30873:1;24894:11124;;;;;30711:37;;;;;;-1:-1:-1;30711:37:0;;30631;;;24894:11124;30631:37;;24894:11124;30631:37;;;;;;24894:11124;30631:37;;;:::i;:::-;;;24894:11124;;;;;30873:1;24894:11124;;;;;30631:37;;;;;;-1:-1:-1;30631:37:0;;24894:11124;;;;;;;;;;;;;;1970:65;;:::i;:::-;24894:11124;;26226:17;;;;;;;;;;;;;;;;;;24894:11124;;;26226:17;;;;;;;;;;24894:11124;26260:7;24894:11124;;;;26254:5;24894:11124;;-1:-1:-1;;;;;24894:11124:0;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;26296:10;26260:7;24894:11124;26296:10;:::i;:::-;26260:7;24894:11124;;;;;26226:17;24894:11124;;;;;;;;;;26226:17;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;-1:-1:-1;;24894:11124:0;;;;;;1970:65;;:::i;:::-;34271:14;34261:24;;24894:11124;;34335:8;24894:11124;;;;34335:56;;34357:10;24894:11124;34335:56;;24894:11124;34377:4;24894:11124;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24894:11124:0;34335:56;;;;;;;;24894:11124;;;;34335:56;;;24894:11124;34335:56;;;;;;;;;:::i;:::-;;;;;24894:11124;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;-1:-1:-1;;24894:11124:0;;;;-1:-1:-1;;;;;24894:11124:0;;:::i;:::-;1970:65;;:::i;:::-;24894:11124;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;-1:-1:-1;;24894:11124:0;;;;;;1970:65;;:::i;:::-;32948:3;32942:9;;24894:11124;;;32998:12;24894:11124;;;;;;32948:3;24894:11124;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34078:10;34065:9;:23;24894:11124;;;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25534:54;25560:7;24894:11124;25554:13;;25534:54;:::i;:::-;25822:79;25841:10;26618:9;25830:21;;25822:79;:::i;:::-;24894:11124;;;25542:8;24894:11124;;;;-1:-1:-1;;;;;24894:11124:0;;;;;26673:92;;;;;;24894:11124;;;26673:92;24894:11124;26673:92;;26706:10;24894:11124;26673:92;;24894:11124;26618:9;24894:11124;;;;;;;:::i;:::-;;;;;;;;;;;;;;;26673:92;;;;;;;;;;24894:11124;;;;;;;;;;-1:-1:-1;;24894:11124:0;;;;;;;;;;;;;;;;25534:54;25560:7;24894:11124;25554:13;;25534:54;:::i;:::-;25976:78;25995:9;25984:20;;;25976:78;:::i;:::-;27169:8;24894:11124;;;;27169:60;;27191:10;24894:11124;27169:60;;24894:11124;27211:4;24894:11124;;;;;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;27169:60;;;;;;;;24894:11124;;;;;;;;;;;;;;;;;27351:6;24894:11124;27347:3;24894:11124;;27347:3;24894:11124;;;;27332:26;27347:3;27332:26;;;;:::i;:::-;24894:11124;27287:118;;;;;;24894:11124;;27287:118;24894:11124;27287:118;;27191:10;24894:11124;27287:118;;24894:11124;;;;;;;;:::i;:::-;;;;;;27347:3;24894:11124;;;;;;;;27287:118;;;;;;;;;;24894:11124;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;27169:60;;;24894:11124;27169:60;;;;;;;;;:::i;:::-;;;;;24894:11124;;;;;;;:::i;:::-;;25534:54;25560:7;24894:11124;25554:13;;25534:54;:::i;:::-;24894:11124;;;25542:8;24894:11124;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;27608:54;24894:11124;27608:54;;24894:11124;;;27643:10;;;27608:54;27643:10;;24894:11124;27608:54;;;:::i;:::-;;24894:11124;;;27608:54;;;;;;;;24894:11124;27608:54;;;;24894:11124;27696:12;27740;27696;;;:::i;:::-;24894:11124;27740:12;;:::i;:::-;24894:11124;27771:16;;24894:11124;;25560:7;24894:11124;;;;;;;27847:36;;;;;;;24894:11124;;;27643:10;;;;;27900:42;;;;;27965:19;24894:11124;;;27957:49;;;;;;;;;;;;;;27843:293;27957:49;;;;27843:293;24894:11124;;28160:36;;;28213:29;24894:11124;;;28213:29;:::i;:::-;24894:11124;;28257:22;;24894:11124;28257:22;:::i;:::-;;24894:11124;;;;;28156:234;28312:29;24894:11124;28312:29;24894:11124;28312:29;:::i;:::-;;24894:11124;28356:22;;24894:11124;28356:22;:::i;:::-;;24894:11124;28156:234;;27957:49;;;;;27843:293;24894:11124;;;;25542:8;24894:11124;28028:36;;28024:112;;27843:293;;;;28024:112;28081:8;24894:11124;;;;28081:43;;27643:10;24894:11124;28081:43;;24894:11124;;;;;;;;;;;;;;;;;;;;28081:43;;;;;;;28024:112;28081:43;;;24894:11124;28081:43;;;;;;;;;:::i;:::-;;;28024:112;;24894:11124;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;27608:54;;;;;;;;;;;;;:::i;:::-;;;;;24894:11124;;;;;;;:::i;:::-;1970:65;;;:::i;:::-;25534:54;25560:7;24894:11124;25554:13;;25534:54;:::i;:::-;24894:11124;;;25542:8;24894:11124;;;;-1:-1:-1;;;;;24894:11124:0;;;;;33199:50;;;;;;24894:11124;;;33199:50;24894:11124;33199:50;;24894:11124;;;:::i;:::-;;;;;;;;;;;;;;;31115:7;24894:11124;;;;;;;;;;;;;;;;;;;;;;1970:65;;:::i;:::-;24894:11124;33832:11;33856:3;33847:7;24894:11124;33845:9;;;;;24894:11124;;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;33876:55;;;;;;24894:11124;;;33876:55;24894:11124;33876:55;;;24894:11124;33876:55;;24894:11124;;;;;;33876:55;;;;;;;;;;33856:3;;;;;:::i;:::-;33832:11;;33876:55;;;;:::i;:::-;24894:11124;;;;33876:55;24894:11124;;;;;;;;;;;;;;;;;;;;31568:19;24894:11124;31589:13;24894:11124;31604:19;24894:11124;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24894:11124:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25560:7;24894:11124;25534:54;24894:11124;;25554:13;;;25534:54;:::i;:::-;1970:65;;:::i;:::-;24894:11124;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;35437:570;;;;24894:11124;;;;35437:570;;;;;;24894:11124;;35437:570;;24894:11124;;;;;;;;35437:570;;24894:11124;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24894:11124:0;;;;;-1:-1:-1;24894:11124:0;;-1:-1:-1;24894:11124:0;-1:-1:-1;24894:11124:0;;-1:-1:-1;24894:11124:0;-1:-1:-1;35437:570:0;;24894:11124;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;35437:570;;;24894:11124;;;;;;;;;;;:::i;:::-;35437:570;;;24894:11124;;;;;;;;;;;:::i;:::-;35437:570;;;24894:11124;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;35437:570;;24894:11124;;;;;;;;;;;;;;;:::i;:::-;;;;;35437:570;;24894:11124;;;;;;35437:570;;;24894:11124;;;;;;35437:570;;;24894:11124;;;;;;35437:570;;;24894:11124;;;;;;35437:570;;;24894:11124;;;;;;35437:570;;;24894:11124;;;;;;35437:570;;;24894:11124;;;;;;35437:570;;;24894:11124;;;;;;:::i;:::-;;;35437:570;;;24894:11124;;;;;;:::i;:::-;;;;35437:570;;24894:11124;;;;35437:570;;;;;;;;24894:11124;35437:570;;;;;;;;;24894:11124;;;;35437:570;;;;;:::i;:::-;;;24894:11124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;2281:132;-1:-1:-1;;;;;2189:6:0;24894:11124;;773:10;2345:23;24894:11124;;2281:132::o;24894:11124::-;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24894:11124:0;;;;;;;:::o;:::-;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;24894:11124:0;;;:::o;:::-;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;8378:220::-;;8460:6;;8456:20;;24894:11124;;;;;;;;;;;8523:10;24894:11124;;8378:220;:::o;24894:11124::-;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;;;;;;;;;;;;;8456:20;8468:8;;8465:1;8468:8;:::o;24894:11124::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;24894:11124:0;;;;;;;;;;;27621:5;24894:11124;;;;;;;:::o;:::-;;;29422:7;24894:11124;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;32446:189::-;32525:7;24894:11124;32525:7;;32546:13;32539:20;:::o;32521:106::-;-1:-1:-1;24894:11124:0;;;32595:5;24894:11124;;32582:45;24894:11124;-1:-1:-1;;;;;24894:11124:0;;;;;;;32582:45;;;;24894:11124;32582:45;;;;;;;;;;;;;32575:52;;;:::o;32582:45::-;;;;24894:11124;32582:45;;;;;;;;;24894:11124;32582:45;;;:::i;:::-;;;24894:11124;;;;;;32575:52;:::o;32582:45::-;;;-1:-1:-1;32582:45:0;;24894:11124;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://a357496d3e5ca4ce6c78d67df89113909dc4a34d23ecbfe3b51915605331fe3d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,611.9 | 0.8 | $2,089.52 |
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.