Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Staking
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-07 */ pragma solidity ^0.5.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; function initialize() internal { // Storing an initial non-zero value makes deployment a bit more // expensive, but in exchange the refund on every call to nonReentrant // will be lower in amount. Since refunds are capped to a percetange of // the total transaction's gas, it is best to keep them low in cases // like this one, to increase the likelihood of the full refund coming // into effect. _notEntered = true; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } interface IPOWERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } interface IPOWToken { function updateIncomeRate() external; function incomeToken() external view returns(uint256); function incomeRate() external view returns(uint256); function startMiningTime() external view returns (uint256); function mint(address to, uint value) external; function remainingAmount() external view returns(uint256); function rewardToken() external view returns(uint256); function stakingRewardRate() external view returns(uint256); function lpStakingRewardRate() external view returns(uint256); function rewardPeriodFinish() external view returns(uint256); function claimIncome(address to, uint256 amount) external; function claimReward(address to, uint256 amount) external; } interface ILpStaking { function lpIncomeRateChanged() external; function lpRewardRateChanged() external; } contract Staking is ReentrancyGuard{ using SafeMath for uint256; using SafeERC20 for IERC20; bool internal initialized; address public owner; address public lpStaking; bool public emergencyStop; address public hashRateToken; uint256 public incomeLastUpdateTime; uint256 public incomePerTokenStored; mapping(address => uint256) public userIncomePerTokenPaid; mapping(address => uint256) public incomes; mapping(address => uint256) public accumulatedIncomes; uint256 public rewardLastUpdateTime; uint256 public rewardPerTokenStored; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; mapping(address => uint256) public balances; uint256 public totalSupply; function initialize(address newOwner, address _hashRateToken, address _lpStaking) public { require(!initialized, "already initialized"); require(newOwner != address(0), "new owner is the zero address"); super.initialize(); initialized = true; owner = newOwner; hashRateToken = _hashRateToken; lpStaking = _lpStaking; } function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0), "new owner is the zero address"); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } function setEmergencyStop(bool _emergencyStop) external onlyOwner { emergencyStop = _emergencyStop; } function weiToSatoshi(uint256 amount) public pure returns (uint256) { return amount.div(10**10); } function stakeWithPermit(uint256 amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external nonReentrant updateIncome(msg.sender) updateReward(msg.sender) { require(amount > 0, "Cannot stake 0"); notifyLpStakingUpdateIncome(); balances[msg.sender] = balances[msg.sender].add(amount); totalSupply = totalSupply.add(amount); // permit IPOWERC20(hashRateToken).permit(msg.sender, address(this), amount, deadline, v, r, s); IERC20(hashRateToken).safeTransferFrom(msg.sender, address(this), amount); emit Staked(msg.sender, amount); } function stake(uint256 amount) external nonReentrant updateIncome(msg.sender) updateReward(msg.sender) { require(amount > 0, "Cannot stake 0"); notifyLpStakingUpdateIncome(); balances[msg.sender] = balances[msg.sender].add(amount); totalSupply = totalSupply.add(amount); IERC20(hashRateToken).safeTransferFrom(msg.sender, address(this), amount); emit Staked(msg.sender, amount); } function withdraw(uint256 amount) public nonReentrant updateIncome(msg.sender) updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); notifyLpStakingUpdateIncome(); totalSupply = totalSupply.sub(amount); balances[msg.sender] = balances[msg.sender].sub(amount); IERC20(hashRateToken).safeTransfer(msg.sender, amount); emit Withdrawn(msg.sender, amount); } function exit() external { withdraw(balances[msg.sender]); getIncome(); getReward(); } function incomeRateChanged() external updateIncome(address(0)) { } function getCurIncomeRate() public view returns (uint256) { uint startMiningTime = IPOWToken(hashRateToken).startMiningTime(); //not start mining yet. if (block.timestamp <= startMiningTime) { return 0; } uint256 incomeRate = IPOWToken(hashRateToken).incomeRate(); return incomeRate; } function incomePerToken() public view returns (uint256) { uint startMiningTime = IPOWToken(hashRateToken).startMiningTime(); //not start mining yet. if (block.timestamp <= startMiningTime) { return 0; } uint256 _incomeLastUpdateTime = incomeLastUpdateTime; if (_incomeLastUpdateTime == 0) { _incomeLastUpdateTime = startMiningTime; } uint256 incomeRate = getCurIncomeRate(); uint256 normalIncome = block.timestamp.sub(_incomeLastUpdateTime).mul(incomeRate); return incomePerTokenStored.add(normalIncome); } function incomeEarned(address account) external view returns (uint256) { uint256 income = _incomeEarned(account); return weiToSatoshi(income); } function _incomeEarned(address account) internal view returns (uint256) { return balances[account].mul(incomePerToken().sub(userIncomePerTokenPaid[account])).div(1e18).add(incomes[account]); } function getUserAccumulatedWithdrawIncome(address account) public view returns (uint256) { uint256 amount = accumulatedIncomes[account]; return weiToSatoshi(amount); } function getIncome() public nonReentrant updateIncome(msg.sender) nonEmergencyStop { uint256 income = incomes[msg.sender]; if (income > 0) { accumulatedIncomes[msg.sender] = accumulatedIncomes[msg.sender].add(income); incomes[msg.sender] = 0; uint256 amount = weiToSatoshi(income); IPOWToken(hashRateToken).claimIncome(msg.sender, amount); emit IncomePaid(msg.sender, income); } } function notifyLpStakingUpdateIncome() internal { if (lpStaking != address(0)) { ILpStaking(lpStaking).lpIncomeRateChanged(); } } function lastTimeRewardApplicable() public view returns (uint256) { uint256 periodFinish = IPOWToken(hashRateToken).rewardPeriodFinish(); return Math.min(block.timestamp, periodFinish); } function rewardRateChanged() external updateReward(address(0)) { rewardLastUpdateTime = block.timestamp; } function rewardPerToken() public view returns (uint256) { if (totalSupply == 0) { return rewardPerTokenStored; } uint256 rewardRate = IPOWToken(hashRateToken).stakingRewardRate(); return rewardPerTokenStored.add( lastTimeRewardApplicable().sub(rewardLastUpdateTime).mul(rewardRate).mul(1e18).div(totalSupply) ); } function rewardEarned(address account) public view returns (uint256) { return balances[account].mul(rewardPerToken().sub(userRewardPerTokenPaid[account])).div(1e18).add(rewards[account]); } function getReward() public nonReentrant updateReward(msg.sender) nonEmergencyStop { uint256 reward = rewards[msg.sender]; if (reward > 0) { rewards[msg.sender] = 0; IPOWToken(hashRateToken).claimReward(msg.sender, reward); emit RewardPaid(msg.sender, reward); } } function inCaseTokensGetStuck(address _token, uint256 _amount) external onlyOwner { require(_token != hashRateToken, 'hashRateToken cannot transfer.'); IERC20(_token).safeTransfer(msg.sender, _amount); } /* ========== MODIFIERS ========== */ modifier updateIncome(address account) { uint startMiningTime = IPOWToken(hashRateToken).startMiningTime(); if (block.timestamp > startMiningTime) { incomePerTokenStored = incomePerToken(); incomeLastUpdateTime = block.timestamp; if (account != address(0)) { incomes[account] = _incomeEarned(account); userIncomePerTokenPaid[account] = incomePerTokenStored; } } _; } modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); rewardLastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = rewardEarned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } modifier nonEmergencyStop() { require(emergencyStop == false, "emergency stop"); _; } modifier onlyOwner() { require(msg.sender == owner, "!owner"); _; } /* ========== EVENTS ========== */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event ParamSetterChanged(address indexed previousSetter, address indexed newSetter); event Staked(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event IncomePaid(address indexed user, uint256 income); event RewardPaid(address indexed user, uint256 reward); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"income","type":"uint256"}],"name":"IncomePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousSetter","type":"address"},{"indexed":true,"internalType":"address","name":"newSetter","type":"address"}],"name":"ParamSetterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accumulatedIncomes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"emergencyStop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurIncomeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getIncome","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserAccumulatedWithdrawIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hashRateToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"inCaseTokensGetStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"incomeEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incomeLastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incomePerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incomePerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"incomeRateChanged","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"incomes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"address","name":"_hashRateToken","type":"address"},{"internalType":"address","name":"_lpStaking","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lpStaking","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rewardEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardLastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rewardRateChanged","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_emergencyStop","type":"bool"}],"name":"setEmergencyStop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"stakeWithPermit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userIncomePerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"weiToSatoshi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50613dd1806100206000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063a694fc3a11610125578063df136d65116100ad578063f09996a61161007c578063f09996a6146108b9578063f113163614610911578063f247e3de1461091b578063f2fde38b14610925578063fbcef25a1461096957610211565b8063df136d65146107e0578063dfb5d9b4146107fe578063e9fad8ee14610856578063ecd9ba821461086057610211565b8063c899ce49116100f4578063c899ce4914610710578063cba85c701461072e578063cd3daf9d14610786578063d28a9498146107a4578063d7d1d07c146107c257610211565b8063a694fc3a146105e0578063c0c53b8b1461060e578063c6d758cb14610692578063c73d7c7b146106e057610211565b806363a599a4116101a85780638da5cb5b116101775780638da5cb5b146104da5780638f72d5451461052457806390d093691461056e5780639bf1401c14610578578063a1ae4752146105c257610211565b806363a599a4146103ea57806379ac67a41461040c57806380faa57d146104645780638b8763471461048257610211565b806327e235e3116101e457806327e235e3146103025780632e1a7d4d1461035a5780633d18b91214610388578063454ae7771461039257610211565b80630700037d14610216578063164cbc681461026e57806316ba6bf31461028c57806318160ddd146102e4575b600080fd5b6102586004803603602081101561022c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109ab565b6040518082815260200191505060405180910390f35b6102766109c3565b6040518082815260200191505060405180910390f35b6102ce600480360360208110156102a257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109c9565b6040518082815260200191505060405180910390f35b6102ec610ae7565b6040518082815260200191505060405180910390f35b6103446004803603602081101561031857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aed565b6040518082815260200191505060405180910390f35b6103866004803603602081101561037057600080fd5b8101908080359060200190929190505050610b05565b005b610390610ffa565b005b6103d4600480360360208110156103a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c2565b6040518082815260200191505060405180910390f35b6103f26113e1565b604051808215151515815260200191505060405180910390f35b61044e6004803603602081101561042257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113f4565b6040518082815260200191505060405180910390f35b61046c61140c565b6040518082815260200191505060405180910390f35b6104c46004803603602081101561049857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114c4565b6040518082815260200191505060405180910390f35b6104e26114dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61052c611502565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610576611528565b005b610580611617565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ca61163d565b6040518082815260200191505060405180910390f35b61060c600480360360208110156105f657600080fd5b8101908080359060200190929190505050611643565b005b6106906004803603606081101561062457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b3a565b005b6106de600480360360408110156106a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d4b565b005b61070e600480360360208110156106f657600080fd5b81019080803515159060200190929190505050611f01565b005b610718611fe1565b6040518082815260200191505060405180910390f35b6107706004803603602081101561074457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612102565b6040518082815260200191505060405180910390f35b61078e61211a565b6040518082815260200191505060405180910390f35b6107ac61224e565b6040518082815260200191505060405180910390f35b6107ca612254565b6040518082815260200191505060405180910390f35b6107e86123bd565b6040518082815260200191505060405180910390f35b6108406004803603602081101561081457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c3565b6040518082815260200191505060405180910390f35b61085e6123db565b005b6108b7600480360360a081101561087657600080fd5b810190808035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612435565b005b6108fb600480360360208110156108cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a4b565b6040518082815260200191505060405180910390f35b610919612aa1565b005b610923612c32565b005b6109676004803603602081101561093b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613147565b005b6109956004803603602081101561097f57600080fd5b810190808035906020019092919050505061336d565b6040518082815260200191505060405180910390f35b600b6020528060005260406000206000915090505481565b60085481565b6000610ae0600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ad2670de0b6b3a7640000610ac4610a76600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a6861211a565b61338e90919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d890919063ffffffff16565b61345e90919063ffffffff16565b6134a890919063ffffffff16565b9050919050565b600d5481565b600c6020528060005260406000206000915090505481565b6000809054906101000a900460ff16610b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff021916908315150217905550336000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b158015610c0b57600080fd5b505afa158015610c1f573d6000803e3d6000fd5b505050506040513d6020811015610c3557600080fd5b8101908080519060200190929190505050905080421115610d2d57610c58611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610d2c57610ca282613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b33610d3661211a565b600981905550610d4461140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e1157610d87816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008411610e87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b610e8f61364e565b610ea484600d5461338e90919063ffffffff16565b600d81905550610efc84600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338e90919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f8c3385600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166137299092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5856040518082815260200191505060405180910390a250505060016000806101000a81548160ff02191690831515021790555050565b6000809054906101000a900460ff1661107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff0219169083151502179055503361109e61211a565b6009819055506110ac61140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611179576110ef816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60001515600160149054906101000a900460ff16151514611202576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f656d657267656e63792073746f7000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156113a4576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663174e31c433836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561133d57600080fd5b505af1158015611351573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040518082815260200191505060405180910390a25b505060016000806101000a81548160ff021916908315150217905550565b6000806113ce83613530565b90506113d98161336d565b915050919050565b600160149054906101000a900460ff1681565b60076020528060005260406000206000915090505481565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663279084a66040518163ffffffff1660e01b815260040160206040518083038186803b15801561147757600080fd5b505afa15801561148b573d6000803e3d6000fd5b505050506040513d60208110156114a157600080fd5b810190808051906020019092919050505090506114be42826137fa565b91505090565b600a6020528060005260406000206000915090505481565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061153261211a565b60098190555061154061140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461160d57611583816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b4260088190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b6000809054906101000a900460ff166116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff021916908315150217905550336000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b15801561174957600080fd5b505afa15801561175d573d6000803e3d6000fd5b505050506040513d602081101561177357600080fd5b810190808051906020019092919050505090508042111561186b57611796611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461186a576117e082613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b3361187461211a565b60098190555061188261140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461194f576118c5816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600084116119c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b6119cd61364e565b611a1f84600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a890919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a7784600d546134a890919063ffffffff16565b600d81905550611acc333086600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613813909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d856040518082815260200191505060405180910390a250505060016000806101000a81548160ff02191690831515021790555050565b600060019054906101000a900460ff1615611bbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6e6577206f776e657220697320746865207a65726f206164647265737300000081525060200191505060405180910390fd5b611c68613919565b6001600060016101000a81548160ff02191690831515021790555082600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f216f776e6572000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6861736852617465546f6b656e2063616e6e6f74207472616e736665722e000081525060200191505060405180910390fd5b611efd33828473ffffffffffffffffffffffffffffffffffffffff166137299092919063ffffffff16565b5050565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f216f776e6572000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160146101000a81548160ff02191690831515021790555050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d602081101561207657600080fd5b8101908080519060200190929190505050905080421161209a5760009150506120ff565b6000600354905060008114156120ae578190505b60006120b8612254565b905060006120e1826120d3854261338e90919063ffffffff16565b6133d890919063ffffffff16565b90506120f8816004546134a890919063ffffffff16565b9450505050505b90565b60066020528060005260406000206000915090505481565b600080600d54141561213057600954905061224b565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f3fc2df6040518163ffffffff1660e01b815260040160206040518083038186803b15801561219a57600080fd5b505afa1580156121ae573d6000803e3d6000fd5b505050506040513d60208110156121c457600080fd5b81019080805190602001909291905050509050612247612236600d54612228670de0b6b3a764000061221a8661220c6008546121fe61140c565b61338e90919063ffffffff16565b6133d890919063ffffffff16565b6133d890919063ffffffff16565b61345e90919063ffffffff16565b6009546134a890919063ffffffff16565b9150505b90565b60035481565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b1580156122bf57600080fd5b505afa1580156122d3573d6000803e3d6000fd5b505050506040513d60208110156122e957600080fd5b8101908080519060200190929190505050905080421161230d5760009150506123ba565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aa3119ee6040518163ffffffff1660e01b815260040160206040518083038186803b15801561237757600080fd5b505afa15801561238b573d6000803e3d6000fd5b505050506040513d60208110156123a157600080fd5b8101908080519060200190929190505050905080925050505b90565b60095481565b60056020528060005260406000206000915090505481565b612423600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b05565b61242b612c32565b612433610ffa565b565b6000809054906101000a900460ff166124b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff021916908315150217905550336000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b15801561253b57600080fd5b505afa15801561254f573d6000803e3d6000fd5b505050506040513d602081101561256557600080fd5b810190808051906020019092919050505090508042111561265d57612588611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461265c576125d282613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b3361266661211a565b60098190555061267461140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612741576126b7816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600088116127b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b6127bf61364e565b61281188600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a890919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061286988600d546134a890919063ffffffff16565b600d81905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d505accf33308b8b8b8b8b6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b505050506129d933308a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613813909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d896040518082815260200191505060405180910390a250505060016000806101000a81548160ff0219169083151502179055505050505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612a998161336d565b915050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0c57600080fd5b505afa158015612b20573d6000803e3d6000fd5b505050506040513d6020811015612b3657600080fd5b8101908080519060200190929190505050905080421115612c2e57612b59611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c2d57612ba382613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5050565b6000809054906101000a900460ff16612cb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff021916908315150217905550336000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b158015612d3857600080fd5b505afa158015612d4c573d6000803e3d6000fd5b505050506040513d6020811015612d6257600080fd5b8101908080519060200190929190505050905080421115612e5a57612d85611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e5957612dcf82613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b60001515600160149054906101000a900460ff16151514612ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f656d657267656e63792073746f7000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561312857612f8281600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a890919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006130158261336d565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636117d0a933836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f26435983069d9b34d528794d1550173e657479ac9a02c70ae09434b978548cea836040518082815260200191505060405180910390a2505b50505060016000806101000a81548160ff021916908315150217905550565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461320a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f216f776e6572000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6e6577206f776e657220697320746865207a65726f206164647265737300000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006133876402540be4008361345e90919063ffffffff16565b9050919050565b60006133d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613935565b905092915050565b6000808314156133eb5760009050613458565b60008284029050828482816133fc57fe5b0414613453576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613d526021913960400191505060405180910390fd5b809150505b92915050565b60006134a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139f5565b905092915050565b600080828401905083811015613526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000613647600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613639670de0b6b3a764000061362b6135dd600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cf611fe1565b61338e90919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d890919063ffffffff16565b61345e90919063ffffffff16565b6134a890919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461372757600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347aec8366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561370e57600080fd5b505af1158015613722573d6000803e3d6000fd5b505050505b565b6137f5838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613abb565b505050565b6000818310613809578161380b565b825b905092915050565b613913848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613abb565b50505050565b60016000806101000a81548160ff021916908315150217905550565b60008383111582906139e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139a757808201518184015260208101905061398c565b50505050905090810190601f1680156139d45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613aa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a66578082015181840152602081019050613a4b565b50505050905090810190601f168015613a935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613aad57fe5b049050809150509392505050565b613ada8273ffffffffffffffffffffffffffffffffffffffff16613d06565b613b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310613b9b5780518252602082019150602081019050602083039250613b78565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613bfd576040519150601f19603f3d011682016040523d82523d6000602084013e613c02565b606091505b509150915081613c7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115613d0057808060200190516020811015613c9957600080fd5b8101908080519060200190929190505050613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613d73602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015613d4857506000801b8214155b9250505091905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582008267491edd341afa30e4aabdba4d582f92b9164fa6e5070428eba69006f044a64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c8063a694fc3a11610125578063df136d65116100ad578063f09996a61161007c578063f09996a6146108b9578063f113163614610911578063f247e3de1461091b578063f2fde38b14610925578063fbcef25a1461096957610211565b8063df136d65146107e0578063dfb5d9b4146107fe578063e9fad8ee14610856578063ecd9ba821461086057610211565b8063c899ce49116100f4578063c899ce4914610710578063cba85c701461072e578063cd3daf9d14610786578063d28a9498146107a4578063d7d1d07c146107c257610211565b8063a694fc3a146105e0578063c0c53b8b1461060e578063c6d758cb14610692578063c73d7c7b146106e057610211565b806363a599a4116101a85780638da5cb5b116101775780638da5cb5b146104da5780638f72d5451461052457806390d093691461056e5780639bf1401c14610578578063a1ae4752146105c257610211565b806363a599a4146103ea57806379ac67a41461040c57806380faa57d146104645780638b8763471461048257610211565b806327e235e3116101e457806327e235e3146103025780632e1a7d4d1461035a5780633d18b91214610388578063454ae7771461039257610211565b80630700037d14610216578063164cbc681461026e57806316ba6bf31461028c57806318160ddd146102e4575b600080fd5b6102586004803603602081101561022c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109ab565b6040518082815260200191505060405180910390f35b6102766109c3565b6040518082815260200191505060405180910390f35b6102ce600480360360208110156102a257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109c9565b6040518082815260200191505060405180910390f35b6102ec610ae7565b6040518082815260200191505060405180910390f35b6103446004803603602081101561031857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aed565b6040518082815260200191505060405180910390f35b6103866004803603602081101561037057600080fd5b8101908080359060200190929190505050610b05565b005b610390610ffa565b005b6103d4600480360360208110156103a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c2565b6040518082815260200191505060405180910390f35b6103f26113e1565b604051808215151515815260200191505060405180910390f35b61044e6004803603602081101561042257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113f4565b6040518082815260200191505060405180910390f35b61046c61140c565b6040518082815260200191505060405180910390f35b6104c46004803603602081101561049857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114c4565b6040518082815260200191505060405180910390f35b6104e26114dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61052c611502565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610576611528565b005b610580611617565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ca61163d565b6040518082815260200191505060405180910390f35b61060c600480360360208110156105f657600080fd5b8101908080359060200190929190505050611643565b005b6106906004803603606081101561062457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b3a565b005b6106de600480360360408110156106a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d4b565b005b61070e600480360360208110156106f657600080fd5b81019080803515159060200190929190505050611f01565b005b610718611fe1565b6040518082815260200191505060405180910390f35b6107706004803603602081101561074457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612102565b6040518082815260200191505060405180910390f35b61078e61211a565b6040518082815260200191505060405180910390f35b6107ac61224e565b6040518082815260200191505060405180910390f35b6107ca612254565b6040518082815260200191505060405180910390f35b6107e86123bd565b6040518082815260200191505060405180910390f35b6108406004803603602081101561081457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c3565b6040518082815260200191505060405180910390f35b61085e6123db565b005b6108b7600480360360a081101561087657600080fd5b810190808035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612435565b005b6108fb600480360360208110156108cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a4b565b6040518082815260200191505060405180910390f35b610919612aa1565b005b610923612c32565b005b6109676004803603602081101561093b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613147565b005b6109956004803603602081101561097f57600080fd5b810190808035906020019092919050505061336d565b6040518082815260200191505060405180910390f35b600b6020528060005260406000206000915090505481565b60085481565b6000610ae0600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ad2670de0b6b3a7640000610ac4610a76600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a6861211a565b61338e90919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d890919063ffffffff16565b61345e90919063ffffffff16565b6134a890919063ffffffff16565b9050919050565b600d5481565b600c6020528060005260406000206000915090505481565b6000809054906101000a900460ff16610b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff021916908315150217905550336000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b158015610c0b57600080fd5b505afa158015610c1f573d6000803e3d6000fd5b505050506040513d6020811015610c3557600080fd5b8101908080519060200190929190505050905080421115610d2d57610c58611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610d2c57610ca282613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b33610d3661211a565b600981905550610d4461140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e1157610d87816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008411610e87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b610e8f61364e565b610ea484600d5461338e90919063ffffffff16565b600d81905550610efc84600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338e90919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f8c3385600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166137299092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5856040518082815260200191505060405180910390a250505060016000806101000a81548160ff02191690831515021790555050565b6000809054906101000a900460ff1661107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff0219169083151502179055503361109e61211a565b6009819055506110ac61140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611179576110ef816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60001515600160149054906101000a900460ff16151514611202576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f656d657267656e63792073746f7000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156113a4576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663174e31c433836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561133d57600080fd5b505af1158015611351573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040518082815260200191505060405180910390a25b505060016000806101000a81548160ff021916908315150217905550565b6000806113ce83613530565b90506113d98161336d565b915050919050565b600160149054906101000a900460ff1681565b60076020528060005260406000206000915090505481565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663279084a66040518163ffffffff1660e01b815260040160206040518083038186803b15801561147757600080fd5b505afa15801561148b573d6000803e3d6000fd5b505050506040513d60208110156114a157600080fd5b810190808051906020019092919050505090506114be42826137fa565b91505090565b600a6020528060005260406000206000915090505481565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061153261211a565b60098190555061154061140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461160d57611583816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b4260088190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b6000809054906101000a900460ff166116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff021916908315150217905550336000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b15801561174957600080fd5b505afa15801561175d573d6000803e3d6000fd5b505050506040513d602081101561177357600080fd5b810190808051906020019092919050505090508042111561186b57611796611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461186a576117e082613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b3361187461211a565b60098190555061188261140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461194f576118c5816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600084116119c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b6119cd61364e565b611a1f84600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a890919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a7784600d546134a890919063ffffffff16565b600d81905550611acc333086600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613813909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d856040518082815260200191505060405180910390a250505060016000806101000a81548160ff02191690831515021790555050565b600060019054906101000a900460ff1615611bbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6e6577206f776e657220697320746865207a65726f206164647265737300000081525060200191505060405180910390fd5b611c68613919565b6001600060016101000a81548160ff02191690831515021790555082600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f216f776e6572000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6861736852617465546f6b656e2063616e6e6f74207472616e736665722e000081525060200191505060405180910390fd5b611efd33828473ffffffffffffffffffffffffffffffffffffffff166137299092919063ffffffff16565b5050565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f216f776e6572000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160146101000a81548160ff02191690831515021790555050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d602081101561207657600080fd5b8101908080519060200190929190505050905080421161209a5760009150506120ff565b6000600354905060008114156120ae578190505b60006120b8612254565b905060006120e1826120d3854261338e90919063ffffffff16565b6133d890919063ffffffff16565b90506120f8816004546134a890919063ffffffff16565b9450505050505b90565b60066020528060005260406000206000915090505481565b600080600d54141561213057600954905061224b565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f3fc2df6040518163ffffffff1660e01b815260040160206040518083038186803b15801561219a57600080fd5b505afa1580156121ae573d6000803e3d6000fd5b505050506040513d60208110156121c457600080fd5b81019080805190602001909291905050509050612247612236600d54612228670de0b6b3a764000061221a8661220c6008546121fe61140c565b61338e90919063ffffffff16565b6133d890919063ffffffff16565b6133d890919063ffffffff16565b61345e90919063ffffffff16565b6009546134a890919063ffffffff16565b9150505b90565b60035481565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b1580156122bf57600080fd5b505afa1580156122d3573d6000803e3d6000fd5b505050506040513d60208110156122e957600080fd5b8101908080519060200190929190505050905080421161230d5760009150506123ba565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aa3119ee6040518163ffffffff1660e01b815260040160206040518083038186803b15801561237757600080fd5b505afa15801561238b573d6000803e3d6000fd5b505050506040513d60208110156123a157600080fd5b8101908080519060200190929190505050905080925050505b90565b60095481565b60056020528060005260406000206000915090505481565b612423600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b05565b61242b612c32565b612433610ffa565b565b6000809054906101000a900460ff166124b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff021916908315150217905550336000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b15801561253b57600080fd5b505afa15801561254f573d6000803e3d6000fd5b505050506040513d602081101561256557600080fd5b810190808051906020019092919050505090508042111561265d57612588611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461265c576125d282613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b3361266661211a565b60098190555061267461140c565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612741576126b7816109c9565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600088116127b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b6127bf61364e565b61281188600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a890919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061286988600d546134a890919063ffffffff16565b600d81905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d505accf33308b8b8b8b8b6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b505050506129d933308a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613813909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d896040518082815260200191505060405180910390a250505060016000806101000a81548160ff0219169083151502179055505050505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612a998161336d565b915050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0c57600080fd5b505afa158015612b20573d6000803e3d6000fd5b505050506040513d6020811015612b3657600080fd5b8101908080519060200190929190505050905080421115612c2e57612b59611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c2d57612ba382613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5050565b6000809054906101000a900460ff16612cb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff021916908315150217905550336000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0eb10936040518163ffffffff1660e01b815260040160206040518083038186803b158015612d3857600080fd5b505afa158015612d4c573d6000803e3d6000fd5b505050506040513d6020811015612d6257600080fd5b8101908080519060200190929190505050905080421115612e5a57612d85611fe1565b60048190555042600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e5957612dcf82613530565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b60001515600160149054906101000a900460ff16151514612ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f656d657267656e63792073746f7000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561312857612f8281600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a890919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006130158261336d565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636117d0a933836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f26435983069d9b34d528794d1550173e657479ac9a02c70ae09434b978548cea836040518082815260200191505060405180910390a2505b50505060016000806101000a81548160ff021916908315150217905550565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461320a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f216f776e6572000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6e6577206f776e657220697320746865207a65726f206164647265737300000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006133876402540be4008361345e90919063ffffffff16565b9050919050565b60006133d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613935565b905092915050565b6000808314156133eb5760009050613458565b60008284029050828482816133fc57fe5b0414613453576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613d526021913960400191505060405180910390fd5b809150505b92915050565b60006134a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139f5565b905092915050565b600080828401905083811015613526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000613647600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613639670de0b6b3a764000061362b6135dd600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cf611fe1565b61338e90919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d890919063ffffffff16565b61345e90919063ffffffff16565b6134a890919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461372757600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347aec8366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561370e57600080fd5b505af1158015613722573d6000803e3d6000fd5b505050505b565b6137f5838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613abb565b505050565b6000818310613809578161380b565b825b905092915050565b613913848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613abb565b50505050565b60016000806101000a81548160ff021916908315150217905550565b60008383111582906139e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139a757808201518184015260208101905061398c565b50505050905090810190601f1680156139d45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613aa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a66578082015181840152602081019050613a4b565b50505050905090810190601f168015613a935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613aad57fe5b049050809150509392505050565b613ada8273ffffffffffffffffffffffffffffffffffffffff16613d06565b613b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310613b9b5780518252602082019150602081019050602083039250613b78565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613bfd576040519150601f19603f3d011682016040523d82523d6000602084013e613c02565b606091505b509150915081613c7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115613d0057808060200190516020811015613c9957600080fd5b8101908080519060200190929190505050613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613d73602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015613d4857506000801b8214155b9250505091905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582008267491edd341afa30e4aabdba4d582f92b9164fa6e5070428eba69006f044a64736f6c63430005110032
Deployed Bytecode Sourcemap
20055:8759:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20055:8759:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20731:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20731:42:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20583:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26457:203;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26457:203:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20832:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20782:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20782:43:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22810:429;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22810:429:0;;;;;;;;;;;;;;;;;:::i;:::-;;26668:335;;;:::i;:::-;;24460:167;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24460:167:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20255:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20521:53;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20521:53:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25705:210;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20667:57;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20667:57:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20197:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20287:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25923:120;;;:::i;:::-;;20224:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20366:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22361:441;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22361:441:0;;;;;;;;;;;;;;;;;:::i;:::-;;20867:386;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20867:386:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27011:226;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27011:226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21496:115;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21496:115:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;23821:631;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20472:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20472:42:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26051:398;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20324:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23454:359;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20625:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20408:57;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20408:57:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23247:118;;;:::i;:::-;;21739:614;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;21739:614:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24849:190;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24849:190:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23373:73;;;:::i;:::-;;25047:477;;;:::i;:::-;;21261:227;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21261:227:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;21619:112;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21619:112:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20731:42;;;;;;;;;;;;;;;;;:::o;20583:35::-;;;;:::o;26457:203::-;26517:7;26544:108;26635:7;:16;26643:7;26635:16;;;;;;;;;;;;;;;;26544:86;26625:4;26544:76;26566:53;26587:22;:31;26610:7;26587:31;;;;;;;;;;;;;;;;26566:16;:14;:16::i;:::-;:20;;:53;;;;:::i;:::-;26544:8;:17;26553:7;26544:17;;;;;;;;;;;;;;;;:21;;:76;;;;:::i;:::-;:80;;:86;;;;:::i;:::-;:90;;:108;;;;:::i;:::-;26537:115;;26457:203;;;:::o;20832:26::-;;;;:::o;20782:43::-;;;;;;;;;;;;;;;;;:::o;22810:429::-;17696:11;;;;;;;;;;;17688:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17835:5;17821:11;;:19;;;;;;;;;;;;;;;;;;22877:10;27341:20;27374:13;;;;;;;;;;;27364:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27364:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27364:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27364:42:0;;;;;;;;;;;;;;;;27341:65;;27439:15;27421;:33;27417:348;;;27494:16;:14;:16::i;:::-;27471:20;:39;;;;27548:15;27525:20;:38;;;;27601:1;27582:21;;:7;:21;;;27578:176;;27643:22;27657:7;27643:13;:22::i;:::-;27624:7;:16;27632:7;27624:16;;;;;;;;;;;;;;;:41;;;;27718:20;;27684:22;:31;27707:7;27684:31;;;;;;;;;;;;;;;:54;;;;27578:176;27417:348;22902:10;27865:16;:14;:16::i;:::-;27842:20;:39;;;;27915:26;:24;:26::i;:::-;27892:20;:49;;;;27975:1;27956:21;;:7;:21;;;27952:163;;28013:21;28026:7;28013:12;:21::i;:::-;27994:7;:16;28002:7;27994:16;;;;;;;;;;;;;;;:40;;;;28083:20;;28049:22;:31;28072:7;28049:31;;;;;;;;;;;;;;;:54;;;;27952:163;22942:1;22933:6;:10;22925:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22976:29;:27;:29::i;:::-;23032:23;23048:6;23032:11;;:15;;:23;;;;:::i;:::-;23018:11;:37;;;;23089:32;23114:6;23089:8;:20;23098:10;23089:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;23066:8;:20;23075:10;23066:20;;;;;;;;;;;;;;;:55;;;;23132:54;23167:10;23179:6;23139:13;;;;;;;;;;;23132:34;;;;:54;;;;;:::i;:::-;23212:10;23202:29;;;23224:6;23202:29;;;;;;;;;;;;;;;;;;27775:1;17853;;18015:4;18001:11;;:18;;;;;;;;;;;;;;;;;;22810:429;:::o;26668:335::-;17696:11;;;;;;;;;;;17688:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17835:5;17821:11;;:19;;;;;;;;;;;;;;;;;;26722:10;27865:16;:14;:16::i;:::-;27842:20;:39;;;;27915:26;:24;:26::i;:::-;27892:20;:49;;;;27975:1;27956:21;;:7;:21;;;27952:163;;28013:21;28026:7;28013:12;:21::i;:::-;27994:7;:16;28002:7;27994:16;;;;;;;;;;;;;;;:40;;;;28083:20;;28049:22;:31;28072:7;28049:31;;;;;;;;;;;;;;;:54;;;;27952:163;28206:5;28189:22;;:13;;;;;;;;;;;:22;;;28181:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26762:14;26779:7;:19;26787:10;26779:19;;;;;;;;;;;;;;;;26762:36;;26822:1;26813:6;:10;26809:187;;;26862:1;26840:7;:19;26848:10;26840:19;;;;;;;;;;;;;;;:23;;;;26888:13;;;;;;;;;;;26878:36;;;26915:10;26927:6;26878:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26878:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26878:56:0;;;;26965:10;26954:30;;;26977:6;26954:30;;;;;;;;;;;;;;;;;;26809:187;28241:1;17853;18015:4;18001:11;;:18;;;;;;;;;;;;;;;;;;26668:335::o;24460:167::-;24522:7;24542:14;24559:22;24573:7;24559:13;:22::i;:::-;24542:39;;24599:20;24612:6;24599:12;:20::i;:::-;24592:27;;;24460:167;;;:::o;20255:25::-;;;;;;;;;;;;;:::o;20521:53::-;;;;;;;;;;;;;;;;;:::o;25705:210::-;25762:7;25782:20;25815:13;;;;;;;;;;;25805:43;;;:45;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25805:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25805:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25805:45:0;;;;;;;;;;;;;;;;25782:68;;25868:39;25877:15;25894:12;25868:8;:39::i;:::-;25861:46;;;25705:210;:::o;20667:57::-;;;;;;;;;;;;;;;;;:::o;20197:20::-;;;;;;;;;;;;;:::o;20287:28::-;;;;;;;;;;;;;:::o;25923:120::-;25982:1;27865:16;:14;:16::i;:::-;27842:20;:39;;;;27915:26;:24;:26::i;:::-;27892:20;:49;;;;27975:1;27956:21;;:7;:21;;;27952:163;;28013:21;28026:7;28013:12;:21::i;:::-;27994:7;:16;28002:7;27994:16;;;;;;;;;;;;;;;:40;;;;28083:20;;28049:22;:31;28072:7;28049:31;;;;;;;;;;;;;;;:54;;;;27952:163;26020:15;25997:20;:38;;;;25923:120;:::o;20224:24::-;;;;;;;;;;;;;:::o;20366:35::-;;;;:::o;22361:441::-;17696:11;;;;;;;;;;;17688:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17835:5;17821:11;;:19;;;;;;;;;;;;;;;;;;22427:10;27341:20;27374:13;;;;;;;;;;;27364:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27364:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27364:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27364:42:0;;;;;;;;;;;;;;;;27341:65;;27439:15;27421;:33;27417:348;;;27494:16;:14;:16::i;:::-;27471:20;:39;;;;27548:15;27525:20;:38;;;;27601:1;27582:21;;:7;:21;;;27578:176;;27643:22;27657:7;27643:13;:22::i;:::-;27624:7;:16;27632:7;27624:16;;;;;;;;;;;;;;;:41;;;;27718:20;;27684:22;:31;27707:7;27684:31;;;;;;;;;;;;;;;:54;;;;27578:176;27417:348;22452:10;27865:16;:14;:16::i;:::-;27842:20;:39;;;;27915:26;:24;:26::i;:::-;27892:20;:49;;;;27975:1;27956:21;;:7;:21;;;27952:163;;28013:21;28026:7;28013:12;:21::i;:::-;27994:7;:16;28002:7;27994:16;;;;;;;;;;;;;;;:40;;;;28083:20;;28049:22;:31;28072:7;28049:31;;;;;;;;;;;;;;;:54;;;;27952:163;22492:1;22483:6;:10;22475:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22523:29;:27;:29::i;:::-;22588:32;22613:6;22588:8;:20;22597:10;22588:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22565:8;:20;22574:10;22565:20;;;;;;;;;;;;;;;:55;;;;22645:23;22661:6;22645:11;;:15;;:23;;;;:::i;:::-;22631:11;:37;;;;22679:73;22718:10;22738:4;22745:6;22686:13;;;;;;;;;;;22679:38;;;;:73;;;;;;:::i;:::-;22775:10;22768:26;;;22787:6;22768:26;;;;;;;;;;;;;;;;;;27775:1;17853;;18015:4;18001:11;;:18;;;;;;;;;;;;;;;;;;22361:441;:::o;20867:386::-;20976:11;;;;;;;;;;;20975:12;20967:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21050:1;21030:22;;:8;:22;;;;21022:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21097:18;:16;:18::i;:::-;21140:4;21126:11;;:18;;;;;;;;;;;;;;;;;;21163:8;21155:5;;:16;;;;;;;;;;;;;;;;;;21198:14;21182:13;;:30;;;;;;;;;;;;;;;;;;21235:10;21223:9;;:22;;;;;;;;;;;;;;;;;;20867:386;;;:::o;27011:226::-;28312:5;;;;;;;;;;;28298:19;;:10;:19;;;28290:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27122:13;;;;;;;;;;;27112:23;;:6;:23;;;;27104:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27181:48;27209:10;27221:7;27188:6;27181:27;;;;:48;;;;;:::i;:::-;27011:226;;:::o;21496:115::-;28312:5;;;;;;;;;;;28298:19;;:10;:19;;;28290:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21589:14;21573:13;;:30;;;;;;;;;;;;;;;;;;21496:115;:::o;23821:631::-;23868:7;23888:20;23921:13;;;;;;;;;;;23911:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23911:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23911:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23911:42:0;;;;;;;;;;;;;;;;23888:65;;24020:15;24001;:34;23997:75;;24059:1;24052:8;;;;;23997:75;24084:29;24116:20;;24084:52;;24176:1;24151:21;:26;24147:98;;;24218:15;24194:39;;24147:98;24257:18;24278;:16;:18::i;:::-;24257:39;;24307:20;24330:58;24377:10;24330:42;24350:21;24330:15;:19;;:42;;;;:::i;:::-;:46;;:58;;;;:::i;:::-;24307:81;;24406:38;24431:12;24406:20;;:24;;:38;;;;:::i;:::-;24399:45;;;;;;23821:631;;:::o;20472:42::-;;;;;;;;;;;;;;;;;:::o;26051:398::-;26098:7;26137:1;26122:11;;:16;26118:76;;;26162:20;;26155:27;;;;26118:76;26204:18;26235:13;;;;;;;;;;;26225:42;;;:44;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26225:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26225:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26225:44:0;;;;;;;;;;;;;;;;26204:65;;26296:145;26335:95;26418:11;;26335:78;26408:4;26335:68;26392:10;26335:52;26366:20;;26335:26;:24;:26::i;:::-;:30;;:52;;;;:::i;:::-;:56;;:68;;;;:::i;:::-;:72;;:78;;;;:::i;:::-;:82;;:95;;;;:::i;:::-;26296:20;;:24;;:145;;;;:::i;:::-;26280:161;;;26051:398;;:::o;20324:35::-;;;;:::o;23454:359::-;23503:7;23523:20;23556:13;;;;;;;;;;;23546:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23546:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23546:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23546:42:0;;;;;;;;;;;;;;;;23523:65;;23655:15;23636;:34;23632:75;;23694:1;23687:8;;;;;23632:75;23719:18;23750:13;;;;;;;;;;;23740:35;;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23740:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23740:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23740:37:0;;;;;;;;;;;;;;;;23719:58;;23795:10;23788:17;;;;23454:359;;:::o;20625:35::-;;;;:::o;20408:57::-;;;;;;;;;;;;;;;;;:::o;23247:118::-;23283:30;23292:8;:20;23301:10;23292:20;;;;;;;;;;;;;;;;23283:8;:30::i;:::-;23324:11;:9;:11::i;:::-;23346;:9;:11::i;:::-;23247:118::o;21739:614::-;17696:11;;;;;;;;;;;17688:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17835:5;17821:11;;:19;;;;;;;;;;;;;;;;;;21861:10;27341:20;27374:13;;;;;;;;;;;27364:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27364:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27364:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27364:42:0;;;;;;;;;;;;;;;;27341:65;;27439:15;27421;:33;27417:348;;;27494:16;:14;:16::i;:::-;27471:20;:39;;;;27548:15;27525:20;:38;;;;27601:1;27582:21;;:7;:21;;;27578:176;;27643:22;27657:7;27643:13;:22::i;:::-;27624:7;:16;27632:7;27624:16;;;;;;;;;;;;;;;:41;;;;27718:20;;27684:22;:31;27707:7;27684:31;;;;;;;;;;;;;;;:54;;;;27578:176;27417:348;21886:10;27865:16;:14;:16::i;:::-;27842:20;:39;;;;27915:26;:24;:26::i;:::-;27892:20;:49;;;;27975:1;27956:21;;:7;:21;;;27952:163;;28013:21;28026:7;28013:12;:21::i;:::-;27994:7;:16;28002:7;27994:16;;;;;;;;;;;;;;;:40;;;;28083:20;;28049:22;:31;28072:7;28049:31;;;;;;;;;;;;;;;:54;;;;27952:163;21926:1;21917:6;:10;21909:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21957:29;:27;:29::i;:::-;22022:32;22047:6;22022:8;:20;22031:10;22022:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21999:8;:20;22008:10;21999:20;;;;;;;;;;;;;;;:55;;;;22079:23;22095:6;22079:11;;:15;;:23;;;;:::i;:::-;22065:11;:37;;;;22144:13;;;;;;;;;;;22134:31;;;22166:10;22186:4;22193:6;22201:8;22211:1;22214;22217;22134:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22134:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22134:85:0;;;;22230:73;22269:10;22289:4;22296:6;22237:13;;;;;;;;;;;22230:38;;;;:73;;;;;;:::i;:::-;22326:10;22319:26;;;22338:6;22319:26;;;;;;;;;;;;;;;;;;27775:1;17853;;18015:4;18001:11;;:18;;;;;;;;;;;;;;;;;;21739:614;;;;;:::o;24849:190::-;24929:7;24949:14;24966:18;:27;24985:7;24966:27;;;;;;;;;;;;;;;;24949:44;;25011:20;25024:6;25011:12;:20::i;:::-;25004:27;;;24849:190;;;:::o;23373:73::-;23432:1;27341:20;27374:13;;;;;;;;;;;27364:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27364:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27364:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27364:42:0;;;;;;;;;;;;;;;;27341:65;;27439:15;27421;:33;27417:348;;;27494:16;:14;:16::i;:::-;27471:20;:39;;;;27548:15;27525:20;:38;;;;27601:1;27582:21;;:7;:21;;;27578:176;;27643:22;27657:7;27643:13;:22::i;:::-;27624:7;:16;27632:7;27624:16;;;;;;;;;;;;;;;:41;;;;27718:20;;27684:22;:31;27707:7;27684:31;;;;;;;;;;;;;;;:54;;;;27578:176;27417:348;23373:73;;:::o;25047:477::-;17696:11;;;;;;;;;;;17688:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17835:5;17821:11;;:19;;;;;;;;;;;;;;;;;;25101:10;27341:20;27374:13;;;;;;;;;;;27364:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27364:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27364:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27364:42:0;;;;;;;;;;;;;;;;27341:65;;27439:15;27421;:33;27417:348;;;27494:16;:14;:16::i;:::-;27471:20;:39;;;;27548:15;27525:20;:38;;;;27601:1;27582:21;;:7;:21;;;27578:176;;27643:22;27657:7;27643:13;:22::i;:::-;27624:7;:16;27632:7;27624:16;;;;;;;;;;;;;;;:41;;;;27718:20;;27684:22;:31;27707:7;27684:31;;;;;;;;;;;;;;;:54;;;;27578:176;27417:348;28206:5;28189:22;;:13;;;;;;;;;;;:22;;;28181:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25141:14;25158:7;:19;25166:10;25158:19;;;;;;;;;;;;;;;;25141:36;;25201:1;25192:6;:10;25188:329;;;25252:42;25287:6;25252:18;:30;25271:10;25252:30;;;;;;;;;;;;;;;;:34;;:42;;;;:::i;:::-;25219:18;:30;25238:10;25219:30;;;;;;;;;;;;;;;:75;;;;25331:1;25309:7;:19;25317:10;25309:19;;;;;;;;;;;;;;;:23;;;;25347:14;25364:20;25377:6;25364:12;:20::i;:::-;25347:37;;25409:13;;;;;;;;;;;25399:36;;;25436:10;25448:6;25399:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25399:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25399:56:0;;;;25486:10;25475:30;;;25498:6;25475:30;;;;;;;;;;;;;;;;;;25188:329;;28241:1;17853;;18015:4;18001:11;;:18;;;;;;;;;;;;;;;;;;25047:477::o;21261:227::-;28312:5;;;;;;;;;;;28298:19;;:10;:19;;;28290:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21364:1;21344:22;;:8;:22;;;;21336:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21444:8;21416:37;;21437:5;;;;;;;;;;;21416:37;;;;;;;;;;;;21472:8;21464:5;;:16;;;;;;;;;;;;;;;;;;21261:227;:::o;21619:112::-;21678:7;21705:18;21716:6;21705;:10;;:18;;;;:::i;:::-;21698:25;;21619:112;;;:::o;2087:136::-;2145:7;2172:43;2176:1;2179;2172:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2165:50;;2087:136;;;;:::o;3003:471::-;3061:7;3311:1;3306;:6;3302:47;;;3336:1;3329:8;;;;3302:47;3361:9;3377:1;3373;:5;3361:17;;3406:1;3401;3397;:5;;;;;;:10;3389:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3465:1;3458:8;;;3003:471;;;;;:::o;3942:132::-;4000:7;4027:39;4031:1;4034;4027:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4020:46;;3942:132;;;;:::o;1631:181::-;1689:7;1709:9;1725:1;1721;:5;1709:17;;1750:1;1745;:6;;1737:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1803:1;1796:8;;;1631:181;;;;:::o;24635:206::-;24698:7;24725:108;24816:7;:16;24824:7;24816:16;;;;;;;;;;;;;;;;24725:86;24806:4;24725:76;24747:53;24768:22;:31;24791:7;24768:31;;;;;;;;;;;;;;;;24747:16;:14;:16::i;:::-;:20;;:53;;;;:::i;:::-;24725:8;:17;24734:7;24725:17;;;;;;;;;;;;;;;;:21;;:76;;;;:::i;:::-;:80;;:86;;;;:::i;:::-;:90;;:108;;;;:::i;:::-;24718:115;;24635:206;;;:::o;25532:165::-;25616:1;25595:23;;:9;;;;;;;;;;;:23;;;25591:99;;25646:9;;;;;;;;;;;25635:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25635:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25635:43:0;;;;25591:99;25532:165::o;12579:176::-;12662:85;12681:5;12711;:14;;;:23;;;;12736:2;12740:5;12688:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12688:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;12688:58:0;12662:18;:85::i;:::-;12579:176;;;:::o;374:106::-;432:7;463:1;459;:5;:13;;471:1;459:13;;;467:1;459:13;452:20;;374:106;;;;:::o;12763:204::-;12864:95;12883:5;12913;:18;;;:27;;;;12942:4;12948:2;12952:5;12890:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12890:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;12890:68:0;12864:18;:95::i;:::-;12763:204;;;;:::o;16711:486::-;17185:4;17171:11;;:18;;;;;;;;;;;;;;;;;;16711:486::o;2560:192::-;2646:7;2679:1;2674;:6;;2682:12;2666:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2666:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2706:9;2722:1;2718;:5;2706:17;;2743:1;2736:8;;;2560:192;;;;;:::o;4604:345::-;4690:7;4789:1;4785;:5;4792:12;4777:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4777:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4816:9;4832:1;4828;:5;;;;;;4816:17;;4940:1;4933:8;;;4604:345;;;;;:::o;14618:1114::-;15222:27;15230:5;15222:25;;;:27::i;:::-;15214:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15359:12;15373:23;15408:5;15400:19;;15420:4;15400:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;15400:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;15358:67:0;;;;15444:7;15436:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15525:1;15505:10;:17;:21;15501:224;;;15647:10;15636:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15636:30:0;;;;;;;;;;;;;;;;15628:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15501:224;14618:1114;;;;:::o;9703:619::-;9763:4;10025:16;10052:19;10074:66;10052:88;;;;10243:7;10231:20;10219:32;;10283:11;10271:8;:23;;:42;;;;;10310:3;10298:15;;:8;:15;;10271:42;10263:51;;;;9703:619;;;:::o
Swarm Source
bzzr://08267491edd341afa30e4aabdba4d582f92b9164fa6e5070428eba69006f044a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.