More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 11,166 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 14504827 | 996 days ago | IN | 0 ETH | 0.00423321 | ||||
Withdraw | 13644924 | 1130 days ago | IN | 0 ETH | 0.01756607 | ||||
Withdraw | 12776514 | 1266 days ago | IN | 0 ETH | 0.00683243 | ||||
Withdraw | 12711270 | 1276 days ago | IN | 0 ETH | 0.00123177 | ||||
Get Reward | 12640852 | 1287 days ago | IN | 0 ETH | 0.00523974 | ||||
Get Reward | 11899949 | 1401 days ago | IN | 0 ETH | 0.00629808 | ||||
Get Reward | 11899942 | 1401 days ago | IN | 0 ETH | 0.00629808 | ||||
Withdraw | 11899938 | 1401 days ago | IN | 0 ETH | 0.0084318 | ||||
Get Reward | 11899931 | 1401 days ago | IN | 0 ETH | 0.01930679 | ||||
Withdraw | 11843817 | 1410 days ago | IN | 0 ETH | 0.02676894 | ||||
Withdraw | 11731115 | 1427 days ago | IN | 0 ETH | 0.00661248 | ||||
Exit | 11692395 | 1433 days ago | IN | 0 ETH | 0.03983768 | ||||
Exit | 11678404 | 1435 days ago | IN | 0 ETH | 0.01535508 | ||||
Withdraw | 11594645 | 1448 days ago | IN | 0 ETH | 0.01039947 | ||||
Withdraw | 11585127 | 1449 days ago | IN | 0 ETH | 0.021013 | ||||
Exit | 11406756 | 1477 days ago | IN | 0 ETH | 0.0133596 | ||||
Exit | 11344191 | 1486 days ago | IN | 0 ETH | 0.00356442 | ||||
Withdraw | 11342585 | 1487 days ago | IN | 0 ETH | 0.00206509 | ||||
Withdraw | 11323958 | 1490 days ago | IN | 0 ETH | 0.0029106 | ||||
Withdraw | 11315284 | 1491 days ago | IN | 0 ETH | 0.00532458 | ||||
Withdraw | 11314317 | 1491 days ago | IN | 0 ETH | 0.00778654 | ||||
Withdraw | 11271981 | 1498 days ago | IN | 0 ETH | 0.00170794 | ||||
Withdraw | 11271979 | 1498 days ago | IN | 0 ETH | 0.00238742 | ||||
Get Reward | 11271964 | 1498 days ago | IN | 0 ETH | 0.00417908 | ||||
Get Reward | 11260691 | 1499 days ago | IN | 0 ETH | 0.00113368 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
YFVStakeV2
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-09-01 */ /* ____ __ __ __ _ / __/__ __ ___ / /_ / / ___ / /_ (_)__ __ _\ \ / // // _ \/ __// _ \/ -_)/ __// / \ \ / /___/ \_, //_//_/\__//_//_/\__/ \__//_/ /_\_\ /___/ * Synthetix: YFIRewards.sol * * Docs: https://docs.synthetix.io/ * * * MIT License * =========== * * Copyright (c) 2020 Synthetix * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ // File: @openzeppelin/contracts/math/Math.sol pragma solidity 0.5.17; /** * @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); } } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity 0.5.17; /** * @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; } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity 0.5.17; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal {} // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/ownership/Ownable.sol pragma solidity 0.5.17; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity 0.5.17; /** * @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); function mint(address account, uint amount) external; function burn(uint amount) external; /** * @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); /** YFV, vUSD, vETH has minters **/ function minters(address account) external view 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); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity 0.5.17; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing 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. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // 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 != 0x0 && codehash != accountHash); } /** * @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"); } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity 0.5.17; /** * @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"); } } } // File: contracts/IRewardDistributionRecipient.sol pragma solidity 0.5.17; contract IRewardDistributionRecipient is Ownable { address public rewardReferral; function notifyRewardAmount(uint256 reward) external; function setRewardReferral(address _rewardReferral) external onlyOwner { rewardReferral = _rewardReferral; } } // File: contracts/CurveRewards.sol pragma solidity 0.5.17; contract LPTokenWrapper { using SafeMath for uint256; using SafeERC20 for IERC20; using Address for address; IERC20 public yfv = IERC20(0x45f24BaEef268BB6d63AEe5129015d69702BCDfa); uint256 private _totalSupply; mapping(address => uint256) private _balances; function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf(address account) public view returns (uint256) { return _balances[account]; } function tokenStake(uint256 amount, uint256 actualStakeAmount) internal { _totalSupply = _totalSupply.add(actualStakeAmount); _balances[msg.sender] = _balances[msg.sender].add(actualStakeAmount); yfv.safeTransferFrom(msg.sender, address(this), amount); } function tokenStakeOnBehalf(address stakeFor, uint256 amount, uint256 actualStakeAmount) internal { _totalSupply = _totalSupply.add(actualStakeAmount); _balances[stakeFor] = _balances[stakeFor].add(actualStakeAmount); yfv.safeTransferFrom(msg.sender, address(this), amount); } function tokenWithdraw(uint256 amount, uint256 actualWithdrawAmount) internal { _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); yfv.safeTransfer(msg.sender, actualWithdrawAmount); } } interface IYFVReferral { function setReferrer(address farmer, address referrer) external; function getReferrer(address farmer) external view returns (address); } contract YFVStakeV2 is LPTokenWrapper, IRewardDistributionRecipient { IERC20 public vUSD = IERC20(0x1B8E12F839BD4e73A47adDF76cF7F0097d74c14C); IERC20 public vETH = IERC20(0x76A034e76Aa835363056dd418611E4f81870f16e); uint256 public vETH_REWARD_FRACTION_RATE = 1000; uint256 public constant DURATION = 7 days; uint8 public constant NUMBER_EPOCHS = 38; uint256 public constant REFERRAL_COMMISSION_PERCENT = 1; uint256 public currentEpochReward = 0; uint256 public totalAccumulatedReward = 0; uint8 public currentEpoch = 0; uint256 public starttime = 1598968800; // Tuesday, September 1, 2020 2:00:00 PM (GMT+0) uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; uint256 public constant DEFAULT_EPOCH_REWARD = 230000 * (10 ** 9); // 230,000 vUSD (and 230 vETH) uint256 public constant TOTAL_REWARD = DEFAULT_EPOCH_REWARD * NUMBER_EPOCHS; // 8,740,000 vUSD (and 8,740 vETH) uint256 public epochReward = DEFAULT_EPOCH_REWARD; uint256 public minStakingAmount = 90 ether; uint256 public unstakingFrozenTime = 40 hours; // ** DISABLED AT BEGINNING - WILL SET IT BY GOVERNANCE AFTER VIP-1.1 // ** unlockWithdrawFee = 0.1%: stakers will need to pay 0.1% (sent to insurance fund)of amount they want to withdraw if the coin still frozen // ** lowStakeDepositFee = 0.1%: stakers still can stake with low amount but need to pay 0.1% (sent to insurance fund) // specially, if lowStakeDepositFee = 10000 -> low amount stakers will not pay anything (richmen pay tax, not poormen) // ** highStakeDepositFee = 0.1%: stakers need to pay 0.1% of extra amount more than 90 YFV (sent to insurance fund) uint256 public lowStakeDepositFee = 0; // per ten thousand (eg. 15 -> 0.15%) uint256 public highStakeDepositFee = 0; // per ten thousand (eg. 15 -> 0.15%) uint256 public unlockWithdrawFee = 0; // per ten thousand (eg. 15 -> 0.15%) address public yfvInsuranceFund = 0xb7b2Ea8A1198368f950834875047aA7294A2bDAa; // set to Governance Multisig at start mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; mapping(address => uint256) public lastStakeTimes; mapping(address => uint256) public accumulatedStakingPower; // will accumulate every time staker does getReward() mapping(address => bool) public whitelistedPools; // for stake on behalf event RewardAdded(uint256 reward); event YfvRewardAdded(uint256 reward); event Burned(uint256 reward); event Staked(address indexed user, uint256 amount, uint256 actualStakeAmount); event Withdrawn(address indexed user, uint256 amount, uint256 actualWithdrawAmount); event RewardPaid(address indexed user, uint256 reward); event CommissionPaid(address indexed user, uint256 reward); constructor() public { whitelistedPools[0x62a9fE913eb596C8faC0936fd2F51064022ba22e] = true; // BAL Pool whitelistedPools[0x70b83A7f5E83B3698d136887253E0bf426C9A117] = true; // YFI Pool whitelistedPools[0x1c990fC37F399C935625b815975D0c9fAD5C31A1] = true; // BAT Pool whitelistedPools[0x752037bfEf024Bd2669227BF9068cb22840174B0] = true; // REN Pool whitelistedPools[0x9b74774f55C0351fD064CfdfFd35dB002C433092] = true; // KNC Pool whitelistedPools[0xFBDE07329FFc9Ec1b70f639ad388B94532b5E063] = true; // BTC Pool whitelistedPools[0x67FfB615EAEb8aA88fF37cCa6A32e322286a42bb] = true; // ETH Pool whitelistedPools[0x196CF719251579cBc850dED0e47e972b3d7810Cd] = true; // LINK Pool whitelistedPools[msg.sender] = true; // to be able to stakeOnBehalf farmer who have stucked fund in Pool Stake v1. } function addWhitelistedPool(address _addressPool) public onlyOwner { whitelistedPools[_addressPool] = true; } function removeWhitelistedPool(address _addressPool) public onlyOwner { whitelistedPools[_addressPool] = false; } function setYfvInsuranceFund(address _yfvInsuranceFund) public onlyOwner { yfvInsuranceFund = _yfvInsuranceFund; } function setEpochReward(uint256 _epochReward) public onlyOwner { require(_epochReward <= DEFAULT_EPOCH_REWARD * 10, "Insane big _epochReward!"); // At most 10x only epochReward = _epochReward; } function setMinStakingAmount(uint256 _minStakingAmount) public onlyOwner { minStakingAmount = _minStakingAmount; } function setUnstakingFrozenTime(uint256 _unstakingFrozenTime) public onlyOwner { unstakingFrozenTime = _unstakingFrozenTime; } function setStakeDepositFee(uint256 _lowStakeDepositFee, uint256 _highStakeDepositFee) public onlyOwner { require(_lowStakeDepositFee <= 100 || _lowStakeDepositFee == 10000, "Dont be too greedy"); // <= 1% OR set to 10000 to disable low stake fee require(_highStakeDepositFee <= 100, "Dont be too greedy"); // <= 1% lowStakeDepositFee = _lowStakeDepositFee; highStakeDepositFee = _highStakeDepositFee; } function setUnlockWithdrawFee(uint256 _unlockWithdrawFee) public onlyOwner { require(_unlockWithdrawFee <= 1000, "Dont be too greedy"); // <= 10% unlockWithdrawFee = _unlockWithdrawFee; } // To upgrade vUSD contract (v1 is still experimental, we may need vUSDv2 with rebase() function working soon - then governance will call this upgrade) function upgradeVUSDContract(address _vUSDContract) public onlyOwner { vUSD = IERC20(_vUSDContract); } // To upgrade vETH contract (v1 is still experimental, we may need vETHv2 with rebase() function working soon - then governance will call this upgrade) function upgradeVETHContract(address _vETHContract) public onlyOwner { vETH = IERC20(_vETHContract); } modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } function lastTimeRewardApplicable() public view returns (uint256) { return Math.min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { if (totalSupply() == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( lastTimeRewardApplicable() .sub(lastUpdateTime) .mul(rewardRate) .mul(1e18) .div(totalSupply()) ); } // vUSD balance function earned(address account) public view returns (uint256) { uint256 calculatedEarned = balanceOf(account) .mul(rewardPerToken().sub(userRewardPerTokenPaid[account])) .div(1e18) .add(rewards[account]); uint256 poolBalance = vUSD.balanceOf(address(this)); // some rare case the reward can be slightly bigger than real number, we need to check against how much we have left in pool if (calculatedEarned > poolBalance) return poolBalance; return calculatedEarned; } function stakingPower(address account) public view returns (uint256) { return accumulatedStakingPower[account].add(earned(account)); } function vETHBalance(address account) public view returns (uint256) { return earned(account).div(vETH_REWARD_FRACTION_RATE); } function stake(uint256 amount, address referrer) public updateReward(msg.sender) checkNextEpoch { require(amount >= 1 szabo, "Do not stake dust"); require(referrer != msg.sender, "You cannot refer yourself."); uint256 actualStakeAmount = amount; uint256 depositFee = 0; if (minStakingAmount > 0) { if (amount < minStakingAmount && lowStakeDepositFee < 10000) { // if amount is less than minStakingAmount and lowStakeDepositFee is not disabled // if governance does not allow low stake if (lowStakeDepositFee == 0) require(amount >= minStakingAmount, "Cannot stake below minStakingAmount"); // otherwise depositFee will be calculated based on the rate else depositFee = amount.mul(lowStakeDepositFee).div(10000); } else if (amount > minStakingAmount && highStakeDepositFee > 0) { // if amount is greater than minStakingAmount and governance decides richman to pay tax (of the extra amount) depositFee = amount.sub(minStakingAmount).mul(highStakeDepositFee).div(10000); } if (depositFee > 0) { actualStakeAmount = amount.sub(depositFee); } } super.tokenStake(amount, actualStakeAmount); lastStakeTimes[msg.sender] = block.timestamp; emit Staked(msg.sender, amount, actualStakeAmount); if (depositFee > 0) { if (yfvInsuranceFund != address(0)) { // send fee to insurance yfv.safeTransfer(yfvInsuranceFund, depositFee); emit RewardPaid(yfvInsuranceFund, depositFee); } else { // or burn yfv.burn(depositFee); emit Burned(depositFee); } } if (rewardReferral != address(0) && referrer != address(0)) { IYFVReferral(rewardReferral).setReferrer(msg.sender, referrer); } } function stakeOnBehalf(address stakeFor, uint256 amount) public updateReward(stakeFor) checkNextEpoch { require(amount >= 1 szabo, "Do not stake dust"); require(whitelistedPools[msg.sender], "Sorry hackers, you should stay away from us (YFV community signed)"); uint256 actualStakeAmount = amount; uint256 depositFee = 0; if (minStakingAmount > 0) { if (amount < minStakingAmount && lowStakeDepositFee < 10000) { // if amount is less than minStakingAmount and lowStakeDepositFee is not disabled // if governance does not allow low stake if (lowStakeDepositFee == 0) require(amount >= minStakingAmount, "Cannot stake below minStakingAmount"); // otherwise depositFee will be calculated based on the rate else depositFee = amount.mul(lowStakeDepositFee).div(10000); } else if (amount > minStakingAmount && highStakeDepositFee > 0) { // if amount is greater than minStakingAmount and governance decides richman to pay tax (of the extra amount) depositFee = amount.sub(minStakingAmount).mul(highStakeDepositFee).div(10000); } if (depositFee > 0) { actualStakeAmount = amount.sub(depositFee); } } super.tokenStakeOnBehalf(stakeFor, amount, actualStakeAmount); lastStakeTimes[stakeFor] = block.timestamp; emit Staked(stakeFor, amount, actualStakeAmount); if (depositFee > 0) { actualStakeAmount = amount.sub(depositFee); if (yfvInsuranceFund != address(0)) { // send fee to insurance yfv.safeTransfer(yfvInsuranceFund, depositFee); emit RewardPaid(yfvInsuranceFund, depositFee); } else { // or burn yfv.burn(depositFee); emit Burned(depositFee); } } } function unfrozenStakeTime(address account) public view returns (uint256) { return lastStakeTimes[account] + unstakingFrozenTime; } function withdraw(uint256 amount) public updateReward(msg.sender) checkNextEpoch { require(amount > 0, "Cannot withdraw 0"); uint256 actualWithdrawAmount = amount; if (block.timestamp < unfrozenStakeTime(msg.sender)) { // if coin is still frozen and governance does not allow stakers to unstake before timer ends if (unlockWithdrawFee == 0) revert("Coin is still frozen"); // otherwise withdrawFee will be calculated based on the rate uint256 withdrawFee = amount.mul(unlockWithdrawFee).div(10000); actualWithdrawAmount = amount.sub(withdrawFee); if (yfvInsuranceFund != address(0)) { // send fee to insurance yfv.safeTransfer(yfvInsuranceFund, withdrawFee); emit RewardPaid(yfvInsuranceFund, withdrawFee); } else { // or burn yfv.burn(withdrawFee); emit Burned(withdrawFee); } } super.tokenWithdraw(amount, actualWithdrawAmount); emit Withdrawn(msg.sender, amount, actualWithdrawAmount); } function exit() external { withdraw(balanceOf(msg.sender)); getReward(); } function getReward() public updateReward(msg.sender) checkNextEpoch { uint256 reward = rewards[msg.sender]; if (reward > 0) { accumulatedStakingPower[msg.sender] = accumulatedStakingPower[msg.sender].add(rewards[msg.sender]); rewards[msg.sender] = 0; vUSD.safeTransfer(msg.sender, reward); vETH.safeTransfer(msg.sender, reward.div(vETH_REWARD_FRACTION_RATE)); emit RewardPaid(msg.sender, reward); } } modifier checkNextEpoch() { require(periodFinish > 0, "Pool has not started"); if (block.timestamp >= periodFinish) { currentEpochReward = epochReward; if (totalAccumulatedReward.add(currentEpochReward) > TOTAL_REWARD) { currentEpochReward = TOTAL_REWARD.sub(totalAccumulatedReward); // limit total reward } if (currentEpochReward > 0) { if (!vUSD.minters(address(this)) || !vETH.minters(address(this))) { currentEpochReward = 0; } else { vUSD.mint(address(this), currentEpochReward); vETH.mint(address(this), currentEpochReward.div(vETH_REWARD_FRACTION_RATE)); totalAccumulatedReward = totalAccumulatedReward.add(currentEpochReward); } currentEpoch++; } rewardRate = currentEpochReward.div(DURATION); lastUpdateTime = block.timestamp; periodFinish = block.timestamp.add(DURATION); emit RewardAdded(currentEpochReward); } _; } // Start the pool with reward amount for this epoch function notifyRewardAmount(uint256 reward) external onlyOwner updateReward(address(0)) { require(periodFinish == 0, "Only can call once to start staking"); currentEpochReward = reward; if (totalAccumulatedReward.add(currentEpochReward) > TOTAL_REWARD) { currentEpochReward = TOTAL_REWARD.sub(totalAccumulatedReward); // limit total reward } lastUpdateTime = block.timestamp; if (block.timestamp < starttime) { // epoch zero periodFinish = starttime; rewardRate = reward.div(periodFinish.sub(block.timestamp)); } else { // 1st epoch periodFinish = lastUpdateTime.add(DURATION); rewardRate = reward.div(DURATION); currentEpoch++; } vUSD.mint(address(this), reward); vETH.mint(address(this), reward.div(vETH_REWARD_FRACTION_RATE)); totalAccumulatedReward = totalAccumulatedReward.add(reward); emit RewardAdded(reward); } // This function allows governance to take unsupported tokens out of the contract, since this pool exists longer than the other pools. // This is in an effort to make someone whole, should they seriously mess up. // There is no guarantee governance will vote to return these. // It also allows for removal of airdropped tokens. function governanceRecoverUnsupported(IERC20 _token, uint256 amount, address to) external { // only gov require(msg.sender == owner(), "!governance"); // cant take staked asset require(_token != yfv, "yfv"); // cant take reward asset require(_token != vUSD, "vUSD"); require(_token != vETH, "vETH"); // transfer to _token.safeTransfer(to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"CommissionPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","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"},{"indexed":false,"internalType":"uint256","name":"actualStakeAmount","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"},{"indexed":false,"internalType":"uint256","name":"actualWithdrawAmount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"YfvRewardAdded","type":"event"},{"constant":true,"inputs":[],"name":"DEFAULT_EPOCH_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NUMBER_EPOCHS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFERRAL_COMMISSION_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accumulatedStakingPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addressPool","type":"address"}],"name":"addWhitelistedPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentEpoch","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentEpochReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"epochReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"highStakeDepositFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastStakeTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lowStakeDepositFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minStakingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addressPool","type":"address"}],"name":"removeWhitelistedPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardReferral","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"uint256","name":"_epochReward","type":"uint256"}],"name":"setEpochReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_minStakingAmount","type":"uint256"}],"name":"setMinStakingAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_rewardReferral","type":"address"}],"name":"setRewardReferral","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_lowStakeDepositFee","type":"uint256"},{"internalType":"uint256","name":"_highStakeDepositFee","type":"uint256"}],"name":"setStakeDepositFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_unlockWithdrawFee","type":"uint256"}],"name":"setUnlockWithdrawFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_unstakingFrozenTime","type":"uint256"}],"name":"setUnstakingFrozenTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_yfvInsuranceFund","type":"address"}],"name":"setYfvInsuranceFund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"stakeFor","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeOnBehalf","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stakingPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"starttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalAccumulatedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"account","type":"address"}],"name":"unfrozenStakeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unlockWithdrawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unstakingFrozenTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_vETHContract","type":"address"}],"name":"upgradeVETHContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_vUSDContract","type":"address"}],"name":"upgradeVUSDContract","outputs":[],"payable":false,"stateMutability":"nonpayable","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":[],"name":"vETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"vETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vETH_REWARD_FRACTION_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vUSD","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedPools","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"yfv","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"yfvInsuranceFund","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600080546001600160a01b03199081167345f24baeef268bb6d63aee5129015d69702bcdfa178255600580548216731b8e12f839bd4e73a47addf76cf7f0097d74c14c1790556006805482167376a034e76aa835363056dd418611e4f81870f16e1790556103e860075560088290556009829055600a805460ff19169055635f4e53e0600b55600c829055600d82905565d12f0c4c60006010556804e1003b28d928000060115562023280601255601382905560148290556015919091556016805490911673b7b2ea8a1198368f950834875047aa7294a2bdaa179055348015620000ee57600080fd5b50620001026001600160e01b03620002bc16565b600380546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3601b6020527f443703d69d9a6e4305608b4c52db7d89c8cc57c05e79e2e80864c48380df0dd28054600160ff1991821681179092557f3646082d0dea02dddc331fa6f6da65297e9091fe256d2d36798b27cf60ac541880548216831790557f0138aa39a8fb2c00311cdd7719178f238b311830f882df7758595a75023c18db80548216831790557f1afea48809f19c5fdda9159eb3962d69fac50c5f66600e4356e0befd95284a0f80548216831790557f18d2f86ae7accaf3a61d330f2fc36e0c18d68db4e50e86163736b56753bd676480548216831790557f6989b79d6cbcad3e85848f32f2b4a8f23b59d94f31da5373c091bd1ac8e1f4ac80548216831790557f38ad574fd2d78813082f79dce0fdfa0259307c3b44577209e6b4f124b7d25b9d80548216831790557feca7169a7967e7b97d4a2ddcddf792406d4feeed162f2a1d302345cbd8c0efa380548216831790553360009081526040902080549091169091179055620002c0565b3390565b61371980620002d06000396000f3fe608060405234801561001057600080fd5b50600436106103a25760003560e01c806376671808116101e9578063ae49a74b1161010f578063df136d65116100ad578063ebe2b12b1161007c578063ebe2b12b14610892578063ef675d5a1461089a578063f2fde38b146108a2578063ffe48902146108c8576103a2565b8063df136d6514610854578063e68e035b1461085c578063e9b46e6d14610864578063e9fad8ee1461088a576103a2565b8063c8f33c91116100e9578063c8f33c911461081f578063c93df6e414610827578063cd3daf9d14610844578063d5b70d491461084c576103a2565b8063ae49a74b146107d4578063ba79f6b0146107fa578063c8333bb214610817576103a2565b80638b876347116101875780639080dbee116101565780639080dbee146107635780639da9532614610789578063a457536c146107a6578063a8cb13df146107ae576103a2565b80638b876347146107255780638da588971461074b5780638da5cb5b146107535780638f32d59b1461075b576103a2565b80637b0a47ee116101c35780637b0a47ee146106e75780637c714659146106ef5780637f91fb72146106f757806380faa57d1461071d576103a2565b806376671808146106ab57806379a7d1be146106b35780637acb7757146106bb576103a2565b80632e1a7d4d116102ce57806354575af41161026c57806370a082311161023b57806370a0823114610652578063715018a6146106785780637171888b146106805780637318a730146106a3576103a2565b806354575af41461059f57806360d47088146105d5578063612d669e146105fb57806367bea49314610618576103a2565b80633d62bbe1116102a85780633d62bbe11461051f578063460b5ee21461054557806353220a421461057157806353e8036a14610579576103a2565b80632e1a7d4d146104dd5780633c6b16ab146104fa5780633d18b91214610517576103a2565b80631604e416116103465780631be05289116103155780631be052891461049f578063207e821d146104a757806323ffd84d146104af57806325c065b1146104d5576103a2565b80631604e4161461047f57806317837baa1461048757806318160ddd1461048f5780631ae722ed14610497576103a2565b806304e01d871161038257806304e01d871461040f5780630700037d146104175780630cdb43c41461043d5780630fcfc6a814610461576103a2565b80622dcfb9146103a75780628cc262146103cf57806303ed436114610407575b600080fd5b6103cd600480360360208110156103bd57600080fd5b50356001600160a01b03166108ee565b005b6103f5600480360360208110156103e557600080fd5b50356001600160a01b0316610957565b60408051918252519081900360200190f35b6103f5610a71565b6103f5610a77565b6103f56004803603602081101561042d57600080fd5b50356001600160a01b0316610a7d565b610445610a8f565b604080516001600160a01b039092168252519081900360200190f35b610469610a9e565b6040805160ff9092168252519081900360200190f35b6103f5610aa3565b6103f5610aa9565b6103f5610aaf565b610445610ab6565b6103f5610ac5565b6103f5610acc565b6103cd600480360360208110156104c557600080fd5b50356001600160a01b0316610ad2565b6103f5610b3b565b6103cd600480360360208110156104f357600080fd5b5035610b41565b6103cd6004803603602081101561051057600080fd5b50356110f5565b6103cd6113dc565b6103f56004803603602081101561053557600080fd5b50356001600160a01b0316611846565b6103cd6004803603604081101561055b57600080fd5b506001600160a01b03813516906020013561185d565b6103f5611ef8565b6103cd6004803603602081101561058f57600080fd5b50356001600160a01b0316611efd565b6103cd600480360360608110156105b557600080fd5b506001600160a01b03813581169160208101359160409091013516611f66565b6103f5600480360360208110156105eb57600080fd5b50356001600160a01b03166120c1565b6103cd6004803603602081101561061157600080fd5b50356120e3565b61063e6004803603602081101561062e57600080fd5b50356001600160a01b031661212f565b604080519115158252519081900360200190f35b6103f56004803603602081101561066857600080fd5b50356001600160a01b0316612144565b6103cd61215f565b6103cd6004803603604081101561069657600080fd5b50803590602001356121f0565b6104456122e4565b6104696122f3565b6104456122fc565b6103cd600480360360408110156106d157600080fd5b50803590602001356001600160a01b031661230b565b6103f5612a2d565b6103f5612a33565b6103f56004803603602081101561070d57600080fd5b50356001600160a01b0316612a3d565b6103f5612a4f565b6103f56004803603602081101561073b57600080fd5b50356001600160a01b0316612a62565b6103f5612a74565b610445612a7a565b61063e612a89565b6103cd6004803603602081101561077957600080fd5b50356001600160a01b0316612aaf565b6103cd6004803603602081101561079f57600080fd5b5035612b1a565b610445612b66565b6103cd600480360360208110156107c457600080fd5b50356001600160a01b0316612b75565b6103cd600480360360208110156107ea57600080fd5b50356001600160a01b0316612bdd565b6103cd6004803603602081101561081057600080fd5b5035612c46565b6103f5612cee565b6103f5612cf9565b6103cd6004803603602081101561083d57600080fd5b5035612cff565b6103f5612d97565b6103f5612deb565b6103f5612df1565b6103f5612df7565b6103f56004803603602081101561087a57600080fd5b50356001600160a01b0316612dfd565b6103cd612e0f565b6103f5612e2a565b6103f5612e30565b6103cd600480360360208110156108b857600080fd5b50356001600160a01b0316612e36565b6103f5600480360360208110156108de57600080fd5b50356001600160a01b0316612e89565b6108f6612a89565b610935576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260186020908152604080832054601790925282205482916109d8916109cc90670de0b6b3a7640000906109c0906109ab9061099f612d97565b9063ffffffff612ebc16565b6109b489612144565b9063ffffffff612f0516565b9063ffffffff612f5e16565b9063ffffffff612fa016565b600554604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610a2957600080fd5b505afa158015610a3d573d6000803e3d6000fd5b505050506040513d6020811015610a5357600080fd5b5051905080821115610a68579150610a6c9050565b5090505b919050565b60135481565b60075481565b60186020526000908152604090205481565b6004546001600160a01b031681565b602681565b60105481565b60125481565b6001545b90565b6016546001600160a01b031681565b62093a8081565b60095481565b610ada612a89565b610b19576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60115481565b33610b4a612d97565b600f55610b55612a4f565b600e556001600160a01b03811615610b9c57610b7081610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b6000600c5411610bea576040805162461bcd60e51b8152602060048201526014602482015273141bdbdb081a185cc81b9bdd081cdd185c9d195960621b604482015290519081900360640190fd5b600c544210610ed5576010546008819055600954661f0cfbd356400091610c17919063ffffffff612fa016565b1115610c3c57600954610c3890661f0cfbd35640009063ffffffff612ebc16565b6008555b60085415610e7c5760055460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b158015610c8f57600080fd5b505afa158015610ca3573d6000803e3d6000fd5b505050506040513d6020811015610cb957600080fd5b50511580610d3b575060065460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b158015610d0d57600080fd5b505afa158015610d21573d6000803e3d6000fd5b505050506040513d6020811015610d3757600080fd5b5051155b15610d4a576000600855610e65565b600554600854604080516340c10f1960e01b81523060048201526024810192909252516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b50506006546007546008546001600160a01b0390921693506340c10f1992503091610de49163ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610e3357600080fd5b505af1158015610e47573d6000803e3d6000fd5b5050600854600954610e619350915063ffffffff612fa016565b6009555b600a805460ff8082166001011660ff199091161790555b600854610e929062093a8063ffffffff612f5e16565b600d5542600e819055610eae9062093a8063ffffffff612fa016565b600c5560085460408051918252516000805160206136378339815191529181900360200190a15b60008211610f1e576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b81610f28336120c1565b4210156110ac57601554610f7a576040805162461bcd60e51b815260206004820152601460248201527321b7b4b71034b99039ba34b63610333937bd32b760611b604482015290519081900360640190fd5b6000610f976127106109c060155487612f0590919063ffffffff16565b9050610fa9848263ffffffff612ebc16565b6016549092506001600160a01b03161561101557601654600054610fe0916001600160a01b0391821691168363ffffffff612ffa16565b6016546040805183815290516001600160a01b03909216916000805160206135af8339815191529181900360200190a26110aa565b6000805460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216926342966c689260248084019382900301818387803b15801561105d57600080fd5b505af1158015611071573d6000803e3d6000fd5b50506040805184815290517fd83c63197e8e676d80ab0122beba9a9d20f3828839e9a1d6fe81d242e9cd7e6e9350908190036020019150a15b505b6110b6838261304c565b6040805184815260208101839052815133927f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6928290030190a2505050565b6110fd612a89565b61113c576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6000611146612d97565b600f55611151612a4f565b600e556001600160a01b038116156111985761116c81610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b600c54156111d75760405162461bcd60e51b81526004018080602001828103825260238152602001806136c26023913960400191505060405180910390fd5b6008829055600954661f0cfbd3564000906111f8908463ffffffff612fa016565b111561121d5760095461121990661f0cfbd35640009063ffffffff612ebc16565b6008555b42600e819055600b54111561125d57600b54600c81905561125590611248904263ffffffff612ebc16565b839063ffffffff612f5e16565b600d556112a3565b600e546112739062093a8063ffffffff612fa016565b600c556112898262093a8063ffffffff612f5e16565b600d55600a805460ff8082166001011660ff199091161790555b600554604080516340c10f1960e01b81523060048201526024810185905290516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b1580156112f657600080fd5b505af115801561130a573d6000803e3d6000fd5b50506006546007546001600160a01b0390911692506340c10f199150309061133990869063ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561138857600080fd5b505af115801561139c573d6000803e3d6000fd5b50506009546113b4925090508363ffffffff612fa016565b6009556040805183815290516000805160206136378339815191529181900360200190a15050565b336113e5612d97565b600f556113f0612a4f565b600e556001600160a01b038116156114375761140b81610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b6000600c5411611485576040805162461bcd60e51b8152602060048201526014602482015273141bdbdb081a185cc81b9bdd081cdd185c9d195960621b604482015290519081900360640190fd5b600c544210611770576010546008819055600954661f0cfbd3564000916114b2919063ffffffff612fa016565b11156114d7576009546114d390661f0cfbd35640009063ffffffff612ebc16565b6008555b600854156117175760055460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b15801561152a57600080fd5b505afa15801561153e573d6000803e3d6000fd5b505050506040513d602081101561155457600080fd5b505115806115d6575060065460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d60208110156115d257600080fd5b5051155b156115e5576000600855611700565b600554600854604080516340c10f1960e01b81523060048201526024810192909252516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b50506006546007546008546001600160a01b0390921693506340c10f199250309161167f9163ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156116ce57600080fd5b505af11580156116e2573d6000803e3d6000fd5b50506008546009546116fc9350915063ffffffff612fa016565b6009555b600a805460ff8082166001011660ff199091161790555b60085461172d9062093a8063ffffffff612f5e16565b600d5542600e8190556117499062093a8063ffffffff612fa016565b600c5560085460408051918252516000805160206136378339815191529181900360200190a15b3360009081526018602052604090205480156118425733600090815260186020908152604080832054601a909252909120546117b19163ffffffff612fa016565b336000818152601a602090815260408083209490945560189052918220919091556005546117eb916001600160a01b039091169083612ffa565b61181d3361180460075484612f5e90919063ffffffff16565b6006546001600160a01b0316919063ffffffff612ffa16565b60408051828152905133916000805160206135af833981519152919081900360200190a25b5050565b60006118576007546109c084610957565b92915050565b81611866612d97565b600f55611871612a4f565b600e556001600160a01b038116156118b85761188c81610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b6000600c5411611906576040805162461bcd60e51b8152602060048201526014602482015273141bdbdb081a185cc81b9bdd081cdd185c9d195960621b604482015290519081900360640190fd5b600c544210611bf1576010546008819055600954661f0cfbd356400091611933919063ffffffff612fa016565b11156119585760095461195490661f0cfbd35640009063ffffffff612ebc16565b6008555b60085415611b985760055460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b1580156119ab57600080fd5b505afa1580156119bf573d6000803e3d6000fd5b505050506040513d60208110156119d557600080fd5b50511580611a57575060065460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b158015611a2957600080fd5b505afa158015611a3d573d6000803e3d6000fd5b505050506040513d6020811015611a5357600080fd5b5051155b15611a66576000600855611b81565b600554600854604080516340c10f1960e01b81523060048201526024810192909252516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b50506006546007546008546001600160a01b0390921693506340c10f1992503091611b009163ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b5050600854600954611b7d9350915063ffffffff612fa016565b6009555b600a805460ff8082166001011660ff199091161790555b600854611bae9062093a8063ffffffff612f5e16565b600d5542600e819055611bca9062093a8063ffffffff612fa016565b600c5560085460408051918252516000805160206136378339815191529181900360200190a15b64e8d4a51000821015611c3f576040805162461bcd60e51b8152602060048201526011602482015270111bc81b9bdd081cdd185ad948191d5cdd607a1b604482015290519081900360640190fd5b336000908152601b602052604090205460ff16611c8d5760405162461bcd60e51b81526004018080602001828103825260428152602001806135f56042913960600191505060405180910390fd5b601154829060009015611d785760115484108015611cae5750612710601354105b15611d2357601354611d0057601154841015611cfb5760405162461bcd60e51b815260040180806020018281038252602381526020018061358c6023913960400191505060405180910390fd5b611d1e565b611d1b6127106109c060135487612f0590919063ffffffff16565b90505b611d5f565b60115484118015611d3657506000601454115b15611d5f57611d5c6127106109c06014546109b460115489612ebc90919063ffffffff16565b90505b8015611d7857611d75848263ffffffff612ebc16565b91505b611d838585846130ad565b6001600160a01b038516600081815260196020908152604091829020429055815187815290810185905281517f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90929181900390910190a28015611ef157611df0848263ffffffff612ebc16565b6016549092506001600160a01b031615611e5c57601654600054611e27916001600160a01b0391821691168363ffffffff612ffa16565b6016546040805183815290516001600160a01b03909216916000805160206135af8339815191529181900360200190a2611ef1565b6000805460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216926342966c689260248084019382900301818387803b158015611ea457600080fd5b505af1158015611eb8573d6000803e3d6000fd5b50506040805184815290517fd83c63197e8e676d80ab0122beba9a9d20f3828839e9a1d6fe81d242e9cd7e6e9350908190036020019150a15b5050505050565b600181565b611f05612a89565b611f44576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b611f6e612a7a565b6001600160a01b0316336001600160a01b031614611fc1576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6000546001600160a01b038481169116141561200a576040805162461bcd60e51b81526020600482015260036024820152623cb33b60e91b604482015290519081900360640190fd5b6005546001600160a01b0384811691161415612056576040805162461bcd60e51b815260206004808301919091526024820152631d9554d160e21b604482015290519081900360640190fd5b6006546001600160a01b03848116911614156120a2576040805162461bcd60e51b815260206004808301919091526024820152630ec8aa8960e31b604482015290519081900360640190fd5b6120bc6001600160a01b038416828463ffffffff612ffa16565b505050565b6012546001600160a01b03821660009081526019602052604090205401919050565b6120eb612a89565b61212a576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b601155565b601b6020526000908152604090205460ff1681565b6001600160a01b031660009081526002602052604090205490565b612167612a89565b6121a6576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b6121f8612a89565b612237576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b606482111580612248575081612710145b61228e576040805162461bcd60e51b8152602060048201526012602482015271446f6e7420626520746f6f2067726565647960701b604482015290519081900360640190fd5b60648111156122d9576040805162461bcd60e51b8152602060048201526012602482015271446f6e7420626520746f6f2067726565647960701b604482015290519081900360640190fd5b601391909155601455565b6000546001600160a01b031681565b600a5460ff1681565b6006546001600160a01b031681565b33612314612d97565b600f5561231f612a4f565b600e556001600160a01b038116156123665761233a81610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b6000600c54116123b4576040805162461bcd60e51b8152602060048201526014602482015273141bdbdb081a185cc81b9bdd081cdd185c9d195960621b604482015290519081900360640190fd5b600c54421061269f576010546008819055600954661f0cfbd3564000916123e1919063ffffffff612fa016565b11156124065760095461240290661f0cfbd35640009063ffffffff612ebc16565b6008555b600854156126465760055460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b15801561245957600080fd5b505afa15801561246d573d6000803e3d6000fd5b505050506040513d602081101561248357600080fd5b50511580612505575060065460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b1580156124d757600080fd5b505afa1580156124eb573d6000803e3d6000fd5b505050506040513d602081101561250157600080fd5b5051155b1561251457600060085561262f565b600554600854604080516340c10f1960e01b81523060048201526024810192909252516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b15801561256a57600080fd5b505af115801561257e573d6000803e3d6000fd5b50506006546007546008546001600160a01b0390921693506340c10f19925030916125ae9163ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156125fd57600080fd5b505af1158015612611573d6000803e3d6000fd5b505060085460095461262b9350915063ffffffff612fa016565b6009555b600a805460ff8082166001011660ff199091161790555b60085461265c9062093a8063ffffffff612f5e16565b600d5542600e8190556126789062093a8063ffffffff612fa016565b600c5560085460408051918252516000805160206136378339815191529181900360200190a15b64e8d4a510008310156126ed576040805162461bcd60e51b8152602060048201526011602482015270111bc81b9bdd081cdd185ad948191d5cdd607a1b604482015290519081900360640190fd5b6001600160a01b03821633141561274b576040805162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420726566657220796f757273656c662e000000000000604482015290519081900360640190fd5b601154839060009015612836576011548510801561276c5750612710601354105b156127e1576013546127be576011548510156127b95760405162461bcd60e51b815260040180806020018281038252602381526020018061358c6023913960400191505060405180910390fd5b6127dc565b6127d96127106109c060135488612f0590919063ffffffff16565b90505b61281d565b601154851180156127f457506000601454115b1561281d5761281a6127106109c06014546109b46011548a612ebc90919063ffffffff16565b90505b801561283657612833858263ffffffff612ebc16565b91505b612840858361311e565b33600081815260196020908152604091829020429055815188815290810185905281517f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90929181900390910190a28015612992576016546001600160a01b0316156128fd576016546000546128c8916001600160a01b0391821691168363ffffffff612ffa16565b6016546040805183815290516001600160a01b03909216916000805160206135af8339815191529181900360200190a2612992565b6000805460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216926342966c689260248084019382900301818387803b15801561294557600080fd5b505af1158015612959573d6000803e3d6000fd5b50506040805184815290517fd83c63197e8e676d80ab0122beba9a9d20f3828839e9a1d6fe81d242e9cd7e6e9350908190036020019150a15b6004546001600160a01b0316158015906129b457506001600160a01b03841615155b15611ef157600480546040805163bbddaca360e01b815233938101939093526001600160a01b038781166024850152905191169163bbddaca391604480830192600092919082900301818387803b158015612a0e57600080fd5b505af1158015612a22573d6000803e3d6000fd5b505050505050505050565b600d5481565b65d12f0c4c600081565b60196020526000908152604090205481565b6000612a5d42600c54613180565b905090565b60176020526000908152604090205481565b600b5481565b6003546001600160a01b031690565b6003546000906001600160a01b0316612aa0613196565b6001600160a01b031614905090565b612ab7612a89565b612af6576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601b60205260409020805460ff19166001179055565b612b22612a89565b612b61576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b601255565b6005546001600160a01b031681565b612b7d612a89565b612bbc576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601b60205260409020805460ff19169055565b612be5612a89565b612c24576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b0392909216919091179055565b612c4e612a89565b612c8d576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b66082bd67afbc000811115612ce9576040805162461bcd60e51b815260206004820152601860248201527f496e73616e6520626967205f65706f6368526577617264210000000000000000604482015290519081900360640190fd5b601055565b661f0cfbd356400081565b600e5481565b612d07612a89565b612d46576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6103e8811115612d92576040805162461bcd60e51b8152602060048201526012602482015271446f6e7420626520746f6f2067726565647960701b604482015290519081900360640190fd5b601555565b6000612da1610aaf565b612dae5750600f54610ab3565b612a5d612ddc612dbc610aaf565b6109c0670de0b6b3a76400006109b4600d546109b4600e5461099f612a4f565b600f549063ffffffff612fa016565b60145481565b600f5481565b60085481565b601a6020526000908152604090205481565b612e20612e1b33612144565b610b41565b612e286113dc565b565b600c5481565b60155481565b612e3e612a89565b612e7d576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b612e868161319a565b50565b6000611857612e9783610957565b6001600160a01b0384166000908152601a60205260409020549063ffffffff612fa016565b6000612efe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061323b565b9392505050565b600082612f1457506000611857565b82820282848281612f2157fe5b0414612efe5760405162461bcd60e51b81526004018080602001828103825260218152602001806136576021913960400191505060405180910390fd5b6000612efe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132d2565b600082820183811015612efe576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526120bc908490613337565b60015461305f908363ffffffff612ebc16565b60015533600090815260026020526040902054613082908363ffffffff612ebc16565b336000818152600260205260408120929092559054611842916001600160a01b039091169083612ffa565b6001546130c0908263ffffffff612fa016565b6001556001600160a01b0383166000908152600260205260409020546130ec908263ffffffff612fa016565b6001600160a01b0380851660009081526002602052604081209290925590546120bc911633308563ffffffff6134f516565b600154613131908263ffffffff612fa016565b60015533600090815260026020526040902054613154908263ffffffff612fa016565b336000818152600260205260408120929092559054611842916001600160a01b039091169030856134f5565b600081831061318f5781612efe565b5090919050565b3390565b6001600160a01b0381166131df5760405162461bcd60e51b81526004018080602001828103825260268152602001806135cf6026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600081848411156132ca5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561328f578181015183820152602001613277565b50505050905090810190601f1680156132bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836133215760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561328f578181015183820152602001613277565b50600083858161332d57fe5b0495945050505050565b613349826001600160a01b031661354f565b61339a576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106133d85780518252601f1990920191602091820191016133b9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461343a576040519150601f19603f3d011682016040523d82523d6000602084013e61343f565b606091505b509150915081613496576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156134ef578080602001905160208110156134b257600080fd5b50516134ef5760405162461bcd60e51b815260040180806020018281038252602a815260200180613698602a913960400191505060405180910390fd5b50505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526134ef908590613337565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906135835750808214155b94935050505056fe43616e6e6f74207374616b652062656c6f77206d696e5374616b696e67416d6f756e74e2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04864f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536f727279206861636b6572732c20796f752073686f756c64207374617920617761792066726f6d207573202859465620636f6d6d756e697479207369676e656429de88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565644f6e6c792063616e2063616c6c206f6e636520746f207374617274207374616b696e67a265627a7a7231582024598059ae6f3fbbcac05bd3586f8c00a98cf14b62c6089dfab141e3526ff60364736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103a25760003560e01c806376671808116101e9578063ae49a74b1161010f578063df136d65116100ad578063ebe2b12b1161007c578063ebe2b12b14610892578063ef675d5a1461089a578063f2fde38b146108a2578063ffe48902146108c8576103a2565b8063df136d6514610854578063e68e035b1461085c578063e9b46e6d14610864578063e9fad8ee1461088a576103a2565b8063c8f33c91116100e9578063c8f33c911461081f578063c93df6e414610827578063cd3daf9d14610844578063d5b70d491461084c576103a2565b8063ae49a74b146107d4578063ba79f6b0146107fa578063c8333bb214610817576103a2565b80638b876347116101875780639080dbee116101565780639080dbee146107635780639da9532614610789578063a457536c146107a6578063a8cb13df146107ae576103a2565b80638b876347146107255780638da588971461074b5780638da5cb5b146107535780638f32d59b1461075b576103a2565b80637b0a47ee116101c35780637b0a47ee146106e75780637c714659146106ef5780637f91fb72146106f757806380faa57d1461071d576103a2565b806376671808146106ab57806379a7d1be146106b35780637acb7757146106bb576103a2565b80632e1a7d4d116102ce57806354575af41161026c57806370a082311161023b57806370a0823114610652578063715018a6146106785780637171888b146106805780637318a730146106a3576103a2565b806354575af41461059f57806360d47088146105d5578063612d669e146105fb57806367bea49314610618576103a2565b80633d62bbe1116102a85780633d62bbe11461051f578063460b5ee21461054557806353220a421461057157806353e8036a14610579576103a2565b80632e1a7d4d146104dd5780633c6b16ab146104fa5780633d18b91214610517576103a2565b80631604e416116103465780631be05289116103155780631be052891461049f578063207e821d146104a757806323ffd84d146104af57806325c065b1146104d5576103a2565b80631604e4161461047f57806317837baa1461048757806318160ddd1461048f5780631ae722ed14610497576103a2565b806304e01d871161038257806304e01d871461040f5780630700037d146104175780630cdb43c41461043d5780630fcfc6a814610461576103a2565b80622dcfb9146103a75780628cc262146103cf57806303ed436114610407575b600080fd5b6103cd600480360360208110156103bd57600080fd5b50356001600160a01b03166108ee565b005b6103f5600480360360208110156103e557600080fd5b50356001600160a01b0316610957565b60408051918252519081900360200190f35b6103f5610a71565b6103f5610a77565b6103f56004803603602081101561042d57600080fd5b50356001600160a01b0316610a7d565b610445610a8f565b604080516001600160a01b039092168252519081900360200190f35b610469610a9e565b6040805160ff9092168252519081900360200190f35b6103f5610aa3565b6103f5610aa9565b6103f5610aaf565b610445610ab6565b6103f5610ac5565b6103f5610acc565b6103cd600480360360208110156104c557600080fd5b50356001600160a01b0316610ad2565b6103f5610b3b565b6103cd600480360360208110156104f357600080fd5b5035610b41565b6103cd6004803603602081101561051057600080fd5b50356110f5565b6103cd6113dc565b6103f56004803603602081101561053557600080fd5b50356001600160a01b0316611846565b6103cd6004803603604081101561055b57600080fd5b506001600160a01b03813516906020013561185d565b6103f5611ef8565b6103cd6004803603602081101561058f57600080fd5b50356001600160a01b0316611efd565b6103cd600480360360608110156105b557600080fd5b506001600160a01b03813581169160208101359160409091013516611f66565b6103f5600480360360208110156105eb57600080fd5b50356001600160a01b03166120c1565b6103cd6004803603602081101561061157600080fd5b50356120e3565b61063e6004803603602081101561062e57600080fd5b50356001600160a01b031661212f565b604080519115158252519081900360200190f35b6103f56004803603602081101561066857600080fd5b50356001600160a01b0316612144565b6103cd61215f565b6103cd6004803603604081101561069657600080fd5b50803590602001356121f0565b6104456122e4565b6104696122f3565b6104456122fc565b6103cd600480360360408110156106d157600080fd5b50803590602001356001600160a01b031661230b565b6103f5612a2d565b6103f5612a33565b6103f56004803603602081101561070d57600080fd5b50356001600160a01b0316612a3d565b6103f5612a4f565b6103f56004803603602081101561073b57600080fd5b50356001600160a01b0316612a62565b6103f5612a74565b610445612a7a565b61063e612a89565b6103cd6004803603602081101561077957600080fd5b50356001600160a01b0316612aaf565b6103cd6004803603602081101561079f57600080fd5b5035612b1a565b610445612b66565b6103cd600480360360208110156107c457600080fd5b50356001600160a01b0316612b75565b6103cd600480360360208110156107ea57600080fd5b50356001600160a01b0316612bdd565b6103cd6004803603602081101561081057600080fd5b5035612c46565b6103f5612cee565b6103f5612cf9565b6103cd6004803603602081101561083d57600080fd5b5035612cff565b6103f5612d97565b6103f5612deb565b6103f5612df1565b6103f5612df7565b6103f56004803603602081101561087a57600080fd5b50356001600160a01b0316612dfd565b6103cd612e0f565b6103f5612e2a565b6103f5612e30565b6103cd600480360360208110156108b857600080fd5b50356001600160a01b0316612e36565b6103f5600480360360208110156108de57600080fd5b50356001600160a01b0316612e89565b6108f6612a89565b610935576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260186020908152604080832054601790925282205482916109d8916109cc90670de0b6b3a7640000906109c0906109ab9061099f612d97565b9063ffffffff612ebc16565b6109b489612144565b9063ffffffff612f0516565b9063ffffffff612f5e16565b9063ffffffff612fa016565b600554604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610a2957600080fd5b505afa158015610a3d573d6000803e3d6000fd5b505050506040513d6020811015610a5357600080fd5b5051905080821115610a68579150610a6c9050565b5090505b919050565b60135481565b60075481565b60186020526000908152604090205481565b6004546001600160a01b031681565b602681565b60105481565b60125481565b6001545b90565b6016546001600160a01b031681565b62093a8081565b60095481565b610ada612a89565b610b19576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60115481565b33610b4a612d97565b600f55610b55612a4f565b600e556001600160a01b03811615610b9c57610b7081610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b6000600c5411610bea576040805162461bcd60e51b8152602060048201526014602482015273141bdbdb081a185cc81b9bdd081cdd185c9d195960621b604482015290519081900360640190fd5b600c544210610ed5576010546008819055600954661f0cfbd356400091610c17919063ffffffff612fa016565b1115610c3c57600954610c3890661f0cfbd35640009063ffffffff612ebc16565b6008555b60085415610e7c5760055460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b158015610c8f57600080fd5b505afa158015610ca3573d6000803e3d6000fd5b505050506040513d6020811015610cb957600080fd5b50511580610d3b575060065460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b158015610d0d57600080fd5b505afa158015610d21573d6000803e3d6000fd5b505050506040513d6020811015610d3757600080fd5b5051155b15610d4a576000600855610e65565b600554600854604080516340c10f1960e01b81523060048201526024810192909252516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b50506006546007546008546001600160a01b0390921693506340c10f1992503091610de49163ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610e3357600080fd5b505af1158015610e47573d6000803e3d6000fd5b5050600854600954610e619350915063ffffffff612fa016565b6009555b600a805460ff8082166001011660ff199091161790555b600854610e929062093a8063ffffffff612f5e16565b600d5542600e819055610eae9062093a8063ffffffff612fa016565b600c5560085460408051918252516000805160206136378339815191529181900360200190a15b60008211610f1e576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b81610f28336120c1565b4210156110ac57601554610f7a576040805162461bcd60e51b815260206004820152601460248201527321b7b4b71034b99039ba34b63610333937bd32b760611b604482015290519081900360640190fd5b6000610f976127106109c060155487612f0590919063ffffffff16565b9050610fa9848263ffffffff612ebc16565b6016549092506001600160a01b03161561101557601654600054610fe0916001600160a01b0391821691168363ffffffff612ffa16565b6016546040805183815290516001600160a01b03909216916000805160206135af8339815191529181900360200190a26110aa565b6000805460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216926342966c689260248084019382900301818387803b15801561105d57600080fd5b505af1158015611071573d6000803e3d6000fd5b50506040805184815290517fd83c63197e8e676d80ab0122beba9a9d20f3828839e9a1d6fe81d242e9cd7e6e9350908190036020019150a15b505b6110b6838261304c565b6040805184815260208101839052815133927f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6928290030190a2505050565b6110fd612a89565b61113c576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6000611146612d97565b600f55611151612a4f565b600e556001600160a01b038116156111985761116c81610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b600c54156111d75760405162461bcd60e51b81526004018080602001828103825260238152602001806136c26023913960400191505060405180910390fd5b6008829055600954661f0cfbd3564000906111f8908463ffffffff612fa016565b111561121d5760095461121990661f0cfbd35640009063ffffffff612ebc16565b6008555b42600e819055600b54111561125d57600b54600c81905561125590611248904263ffffffff612ebc16565b839063ffffffff612f5e16565b600d556112a3565b600e546112739062093a8063ffffffff612fa016565b600c556112898262093a8063ffffffff612f5e16565b600d55600a805460ff8082166001011660ff199091161790555b600554604080516340c10f1960e01b81523060048201526024810185905290516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b1580156112f657600080fd5b505af115801561130a573d6000803e3d6000fd5b50506006546007546001600160a01b0390911692506340c10f199150309061133990869063ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561138857600080fd5b505af115801561139c573d6000803e3d6000fd5b50506009546113b4925090508363ffffffff612fa016565b6009556040805183815290516000805160206136378339815191529181900360200190a15050565b336113e5612d97565b600f556113f0612a4f565b600e556001600160a01b038116156114375761140b81610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b6000600c5411611485576040805162461bcd60e51b8152602060048201526014602482015273141bdbdb081a185cc81b9bdd081cdd185c9d195960621b604482015290519081900360640190fd5b600c544210611770576010546008819055600954661f0cfbd3564000916114b2919063ffffffff612fa016565b11156114d7576009546114d390661f0cfbd35640009063ffffffff612ebc16565b6008555b600854156117175760055460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b15801561152a57600080fd5b505afa15801561153e573d6000803e3d6000fd5b505050506040513d602081101561155457600080fd5b505115806115d6575060065460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d60208110156115d257600080fd5b5051155b156115e5576000600855611700565b600554600854604080516340c10f1960e01b81523060048201526024810192909252516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b50506006546007546008546001600160a01b0390921693506340c10f199250309161167f9163ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156116ce57600080fd5b505af11580156116e2573d6000803e3d6000fd5b50506008546009546116fc9350915063ffffffff612fa016565b6009555b600a805460ff8082166001011660ff199091161790555b60085461172d9062093a8063ffffffff612f5e16565b600d5542600e8190556117499062093a8063ffffffff612fa016565b600c5560085460408051918252516000805160206136378339815191529181900360200190a15b3360009081526018602052604090205480156118425733600090815260186020908152604080832054601a909252909120546117b19163ffffffff612fa016565b336000818152601a602090815260408083209490945560189052918220919091556005546117eb916001600160a01b039091169083612ffa565b61181d3361180460075484612f5e90919063ffffffff16565b6006546001600160a01b0316919063ffffffff612ffa16565b60408051828152905133916000805160206135af833981519152919081900360200190a25b5050565b60006118576007546109c084610957565b92915050565b81611866612d97565b600f55611871612a4f565b600e556001600160a01b038116156118b85761188c81610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b6000600c5411611906576040805162461bcd60e51b8152602060048201526014602482015273141bdbdb081a185cc81b9bdd081cdd185c9d195960621b604482015290519081900360640190fd5b600c544210611bf1576010546008819055600954661f0cfbd356400091611933919063ffffffff612fa016565b11156119585760095461195490661f0cfbd35640009063ffffffff612ebc16565b6008555b60085415611b985760055460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b1580156119ab57600080fd5b505afa1580156119bf573d6000803e3d6000fd5b505050506040513d60208110156119d557600080fd5b50511580611a57575060065460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b158015611a2957600080fd5b505afa158015611a3d573d6000803e3d6000fd5b505050506040513d6020811015611a5357600080fd5b5051155b15611a66576000600855611b81565b600554600854604080516340c10f1960e01b81523060048201526024810192909252516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b50506006546007546008546001600160a01b0390921693506340c10f1992503091611b009163ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b5050600854600954611b7d9350915063ffffffff612fa016565b6009555b600a805460ff8082166001011660ff199091161790555b600854611bae9062093a8063ffffffff612f5e16565b600d5542600e819055611bca9062093a8063ffffffff612fa016565b600c5560085460408051918252516000805160206136378339815191529181900360200190a15b64e8d4a51000821015611c3f576040805162461bcd60e51b8152602060048201526011602482015270111bc81b9bdd081cdd185ad948191d5cdd607a1b604482015290519081900360640190fd5b336000908152601b602052604090205460ff16611c8d5760405162461bcd60e51b81526004018080602001828103825260428152602001806135f56042913960600191505060405180910390fd5b601154829060009015611d785760115484108015611cae5750612710601354105b15611d2357601354611d0057601154841015611cfb5760405162461bcd60e51b815260040180806020018281038252602381526020018061358c6023913960400191505060405180910390fd5b611d1e565b611d1b6127106109c060135487612f0590919063ffffffff16565b90505b611d5f565b60115484118015611d3657506000601454115b15611d5f57611d5c6127106109c06014546109b460115489612ebc90919063ffffffff16565b90505b8015611d7857611d75848263ffffffff612ebc16565b91505b611d838585846130ad565b6001600160a01b038516600081815260196020908152604091829020429055815187815290810185905281517f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90929181900390910190a28015611ef157611df0848263ffffffff612ebc16565b6016549092506001600160a01b031615611e5c57601654600054611e27916001600160a01b0391821691168363ffffffff612ffa16565b6016546040805183815290516001600160a01b03909216916000805160206135af8339815191529181900360200190a2611ef1565b6000805460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216926342966c689260248084019382900301818387803b158015611ea457600080fd5b505af1158015611eb8573d6000803e3d6000fd5b50506040805184815290517fd83c63197e8e676d80ab0122beba9a9d20f3828839e9a1d6fe81d242e9cd7e6e9350908190036020019150a15b5050505050565b600181565b611f05612a89565b611f44576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b611f6e612a7a565b6001600160a01b0316336001600160a01b031614611fc1576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6000546001600160a01b038481169116141561200a576040805162461bcd60e51b81526020600482015260036024820152623cb33b60e91b604482015290519081900360640190fd5b6005546001600160a01b0384811691161415612056576040805162461bcd60e51b815260206004808301919091526024820152631d9554d160e21b604482015290519081900360640190fd5b6006546001600160a01b03848116911614156120a2576040805162461bcd60e51b815260206004808301919091526024820152630ec8aa8960e31b604482015290519081900360640190fd5b6120bc6001600160a01b038416828463ffffffff612ffa16565b505050565b6012546001600160a01b03821660009081526019602052604090205401919050565b6120eb612a89565b61212a576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b601155565b601b6020526000908152604090205460ff1681565b6001600160a01b031660009081526002602052604090205490565b612167612a89565b6121a6576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b6121f8612a89565b612237576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b606482111580612248575081612710145b61228e576040805162461bcd60e51b8152602060048201526012602482015271446f6e7420626520746f6f2067726565647960701b604482015290519081900360640190fd5b60648111156122d9576040805162461bcd60e51b8152602060048201526012602482015271446f6e7420626520746f6f2067726565647960701b604482015290519081900360640190fd5b601391909155601455565b6000546001600160a01b031681565b600a5460ff1681565b6006546001600160a01b031681565b33612314612d97565b600f5561231f612a4f565b600e556001600160a01b038116156123665761233a81610957565b6001600160a01b038216600090815260186020908152604080832093909355600f546017909152919020555b6000600c54116123b4576040805162461bcd60e51b8152602060048201526014602482015273141bdbdb081a185cc81b9bdd081cdd185c9d195960621b604482015290519081900360640190fd5b600c54421061269f576010546008819055600954661f0cfbd3564000916123e1919063ffffffff612fa016565b11156124065760095461240290661f0cfbd35640009063ffffffff612ebc16565b6008555b600854156126465760055460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b15801561245957600080fd5b505afa15801561246d573d6000803e3d6000fd5b505050506040513d602081101561248357600080fd5b50511580612505575060065460408051633d1bb33160e21b815230600482015290516001600160a01b039092169163f46eccc491602480820192602092909190829003018186803b1580156124d757600080fd5b505afa1580156124eb573d6000803e3d6000fd5b505050506040513d602081101561250157600080fd5b5051155b1561251457600060085561262f565b600554600854604080516340c10f1960e01b81523060048201526024810192909252516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b15801561256a57600080fd5b505af115801561257e573d6000803e3d6000fd5b50506006546007546008546001600160a01b0390921693506340c10f19925030916125ae9163ffffffff612f5e16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156125fd57600080fd5b505af1158015612611573d6000803e3d6000fd5b505060085460095461262b9350915063ffffffff612fa016565b6009555b600a805460ff8082166001011660ff199091161790555b60085461265c9062093a8063ffffffff612f5e16565b600d5542600e8190556126789062093a8063ffffffff612fa016565b600c5560085460408051918252516000805160206136378339815191529181900360200190a15b64e8d4a510008310156126ed576040805162461bcd60e51b8152602060048201526011602482015270111bc81b9bdd081cdd185ad948191d5cdd607a1b604482015290519081900360640190fd5b6001600160a01b03821633141561274b576040805162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420726566657220796f757273656c662e000000000000604482015290519081900360640190fd5b601154839060009015612836576011548510801561276c5750612710601354105b156127e1576013546127be576011548510156127b95760405162461bcd60e51b815260040180806020018281038252602381526020018061358c6023913960400191505060405180910390fd5b6127dc565b6127d96127106109c060135488612f0590919063ffffffff16565b90505b61281d565b601154851180156127f457506000601454115b1561281d5761281a6127106109c06014546109b46011548a612ebc90919063ffffffff16565b90505b801561283657612833858263ffffffff612ebc16565b91505b612840858361311e565b33600081815260196020908152604091829020429055815188815290810185905281517f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90929181900390910190a28015612992576016546001600160a01b0316156128fd576016546000546128c8916001600160a01b0391821691168363ffffffff612ffa16565b6016546040805183815290516001600160a01b03909216916000805160206135af8339815191529181900360200190a2612992565b6000805460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216926342966c689260248084019382900301818387803b15801561294557600080fd5b505af1158015612959573d6000803e3d6000fd5b50506040805184815290517fd83c63197e8e676d80ab0122beba9a9d20f3828839e9a1d6fe81d242e9cd7e6e9350908190036020019150a15b6004546001600160a01b0316158015906129b457506001600160a01b03841615155b15611ef157600480546040805163bbddaca360e01b815233938101939093526001600160a01b038781166024850152905191169163bbddaca391604480830192600092919082900301818387803b158015612a0e57600080fd5b505af1158015612a22573d6000803e3d6000fd5b505050505050505050565b600d5481565b65d12f0c4c600081565b60196020526000908152604090205481565b6000612a5d42600c54613180565b905090565b60176020526000908152604090205481565b600b5481565b6003546001600160a01b031690565b6003546000906001600160a01b0316612aa0613196565b6001600160a01b031614905090565b612ab7612a89565b612af6576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601b60205260409020805460ff19166001179055565b612b22612a89565b612b61576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b601255565b6005546001600160a01b031681565b612b7d612a89565b612bbc576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601b60205260409020805460ff19169055565b612be5612a89565b612c24576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b0392909216919091179055565b612c4e612a89565b612c8d576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b66082bd67afbc000811115612ce9576040805162461bcd60e51b815260206004820152601860248201527f496e73616e6520626967205f65706f6368526577617264210000000000000000604482015290519081900360640190fd5b601055565b661f0cfbd356400081565b600e5481565b612d07612a89565b612d46576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b6103e8811115612d92576040805162461bcd60e51b8152602060048201526012602482015271446f6e7420626520746f6f2067726565647960701b604482015290519081900360640190fd5b601555565b6000612da1610aaf565b612dae5750600f54610ab3565b612a5d612ddc612dbc610aaf565b6109c0670de0b6b3a76400006109b4600d546109b4600e5461099f612a4f565b600f549063ffffffff612fa016565b60145481565b600f5481565b60085481565b601a6020526000908152604090205481565b612e20612e1b33612144565b610b41565b612e286113dc565b565b600c5481565b60155481565b612e3e612a89565b612e7d576040805162461bcd60e51b81526020600482018190526024820152600080516020613678833981519152604482015290519081900360640190fd5b612e868161319a565b50565b6000611857612e9783610957565b6001600160a01b0384166000908152601a60205260409020549063ffffffff612fa016565b6000612efe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061323b565b9392505050565b600082612f1457506000611857565b82820282848281612f2157fe5b0414612efe5760405162461bcd60e51b81526004018080602001828103825260218152602001806136576021913960400191505060405180910390fd5b6000612efe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132d2565b600082820183811015612efe576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526120bc908490613337565b60015461305f908363ffffffff612ebc16565b60015533600090815260026020526040902054613082908363ffffffff612ebc16565b336000818152600260205260408120929092559054611842916001600160a01b039091169083612ffa565b6001546130c0908263ffffffff612fa016565b6001556001600160a01b0383166000908152600260205260409020546130ec908263ffffffff612fa016565b6001600160a01b0380851660009081526002602052604081209290925590546120bc911633308563ffffffff6134f516565b600154613131908263ffffffff612fa016565b60015533600090815260026020526040902054613154908263ffffffff612fa016565b336000818152600260205260408120929092559054611842916001600160a01b039091169030856134f5565b600081831061318f5781612efe565b5090919050565b3390565b6001600160a01b0381166131df5760405162461bcd60e51b81526004018080602001828103825260268152602001806135cf6026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600081848411156132ca5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561328f578181015183820152602001613277565b50505050905090810190601f1680156132bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836133215760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561328f578181015183820152602001613277565b50600083858161332d57fe5b0495945050505050565b613349826001600160a01b031661354f565b61339a576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106133d85780518252601f1990920191602091820191016133b9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461343a576040519150601f19603f3d011682016040523d82523d6000602084013e61343f565b606091505b509150915081613496576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156134ef578080602001905160208110156134b257600080fd5b50516134ef5760405162461bcd60e51b815260040180806020018281038252602a815260200180613698602a913960400191505060405180910390fd5b50505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526134ef908590613337565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906135835750808214155b94935050505056fe43616e6e6f74207374616b652062656c6f77206d696e5374616b696e67416d6f756e74e2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04864f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536f727279206861636b6572732c20796f752073686f756c64207374617920617761792066726f6d207573202859465620636f6d6d756e697479207369676e656429de88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565644f6e6c792063616e2063616c6c206f6e636520746f207374617274207374616b696e67a265627a7a7231582024598059ae6f3fbbcac05bd3586f8c00a98cf14b62c6089dfab141e3526ff60364736f6c63430005110032
Deployed Bytecode Sourcemap
23496:16653:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23496:16653:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21725:122;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21725:122:0;-1:-1:-1;;;;;21725:122:0;;:::i;:::-;;30369:543;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30369:543:0;-1:-1:-1;;;;;30369:543:0;;:::i;:::-;;;;;;;;;;;;;;;;25298:37;;;:::i;23729:47::-;;;:::i;25734:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25734:42:0;-1:-1:-1;;;;;25734:42:0;;:::i;21626:29::-;;;:::i;:::-;;;;-1:-1:-1;;;;;21626:29:0;;;;;;;;;;;;;;23833:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24543:49;;;:::i;24648:45::-;;;:::i;22221:91::-;;;:::i;25546:76::-;;;:::i;23785:41::-;;;:::i;23990:::-;;;:::i;29082:116::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29082:116:0;-1:-1:-1;;;;;29082:116:0;;:::i;24599:42::-;;;:::i;35375:1123::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35375:1123:0;;:::i;38344:1009::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38344:1009:0;;:::i;36611:501::-;;;:::i;31076:140::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31076:140:0;-1:-1:-1;;;;;31076:140:0;;:::i;33240:1974::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;33240:1974:0;;;;;;;;:::i;23882:55::-;;;:::i;29363:116::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29363:116:0;-1:-1:-1;;;;;29363:116:0;;:::i;39709:437::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;39709:437:0;;;;;;;;;;;;;;;;;:::i;35222:145::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35222:145:0;-1:-1:-1;;;;;35222:145:0;;:::i;27971:128::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27971:128:0;;:::i;25962:48::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25962:48:0;-1:-1:-1;;;;;25962:48:0;;:::i;:::-;;;;;;;;;;;;;;;;;;22320:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22320:110:0;-1:-1:-1;;;;;22320:110:0;;:::i;10697:140::-;;;:::i;28255:444::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28255:444:0;;;;;;;:::i;22053:70::-;;;:::i;24038:29::-;;;:::i;23649:71::-;;;:::i;31224:2008::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31224:2008:0;;;;;;-1:-1:-1;;;;;31224:2008:0;;:::i;24205:29::-;;;:::i;24321:65::-;;;:::i;25783:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25783:49:0;-1:-1:-1;;;;;25783:49:0;;:::i;29825:131::-;;;:::i;25670:57::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25670:57:0;-1:-1:-1;;;;;25670:57:0;;:::i;24074:37::-;;;:::i;9886:79::-;;;:::i;10252:94::-;;;:::i;27344:123::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27344:123:0;-1:-1:-1;;;;;27344:123:0;;:::i;28107:140::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28107:140:0;;:::i;23571:71::-;;;:::i;27475:127::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27475:127:0;-1:-1:-1;;;;;27475:127:0;;:::i;27610:128::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27610:128:0;-1:-1:-1;;;;;27610:128:0;;:::i;27746:217::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27746:217:0;;:::i;24424:75::-;;;:::i;24241:29::-;;;:::i;28707:210::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28707:210:0;;:::i;29964:376::-;;;:::i;25380:38::-;;;:::i;24277:35::-;;;:::i;23946:37::-;;;:::i;25841:58::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25841:58:0;-1:-1:-1;;;;;25841:58:0;;:::i;36506:97::-;;;:::i;24167:31::-;;;:::i;25463:36::-;;;:::i;10992:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10992:109:0;-1:-1:-1;;;;;10992:109:0;;:::i;30920:148::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30920:148:0;-1:-1:-1;;;;;30920:148:0;;:::i;21725:122::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;21807:14;:32;;-1:-1:-1;;;;;;21807:32:0;-1:-1:-1;;;;;21807:32:0;;;;;;;;;;21725:122::o;30369:543::-;-1:-1:-1;;;;;30592:16:0;;30423:7;30592:16;;;:7;:16;;;;;;;;;30524:22;:31;;;;;;30423:7;;30470:139;;:107;;30572:4;;30470:87;;30503:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;30470:18;30480:7;30470:9;:18::i;:::-;:32;:87;:32;:87;:::i;:::-;:101;:107;:101;:107;:::i;:::-;:121;:139;:121;:139;:::i;:::-;30642:4;;:29;;;-1:-1:-1;;;30642:29:0;;30665:4;30642:29;;;;;;30443:166;;-1:-1:-1;30620:19:0;;-1:-1:-1;;;;;30642:4:0;;;;:14;;:29;;;;;;;;;;;;;;;:4;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;30642:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30642:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30642:29:0;;-1:-1:-1;30820:30:0;;;30816:54;;;30859:11;-1:-1:-1;30852:18:0;;-1:-1:-1;30852:18:0;30816:54;-1:-1:-1;30888:16:0;-1:-1:-1;30369:543:0;;;;:::o;25298:37::-;;;;:::o;23729:47::-;;;;:::o;25734:42::-;;;;;;;;;;;;;:::o;21626:29::-;;;-1:-1:-1;;;;;21626:29:0;;:::o;23833:40::-;23871:2;23833:40;:::o;24543:49::-;;;;:::o;24648:45::-;;;;:::o;22221:91::-;22292:12;;22221:91;;:::o;25546:76::-;;;-1:-1:-1;;;;;25546:76:0;;:::o;23785:41::-;23820:6;23785:41;:::o;23990:::-;;;;:::o;29082:116::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;29162:4;:28;;-1:-1:-1;;;;;;29162:28:0;-1:-1:-1;;;;;29162:28:0;;;;;;;;;;29082:116::o;24599:42::-;;;;:::o;35375:1123::-;35429:10;29560:16;:14;:16::i;:::-;29537:20;:39;29604:26;:24;:26::i;:::-;29587:14;:43;-1:-1:-1;;;;;29645:21:0;;;29641:157;;29702:15;29709:7;29702:6;:15::i;:::-;-1:-1:-1;;;;;29683:16:0;;;;;;:7;:16;;;;;;;;:34;;;;29766:20;;29732:22;:31;;;;;;:54;29641:157;37180:1;37165:12;;:16;37157:49;;;;;-1:-1:-1;;;37157:49:0;;;;;;;;;;;;-1:-1:-1;;;37157:49:0;;;;;;;;;;;;;;;37240:12;;37221:15;:31;37217:1043;;37290:11;;37269:18;:32;;;37322:22;;24463:36;;37322:46;;:22;:46;:26;:46;:::i;:::-;:61;37318:185;;;37442:22;;37425:40;;24463:36;;37425:40;:16;:40;:::i;:::-;37404:18;:61;37318:185;37523:18;;:22;37519:511;;37571:4;;:27;;;-1:-1:-1;;;37571:27:0;;37592:4;37571:27;;;;;;-1:-1:-1;;;;;37571:4:0;;;;:12;;:27;;;;;;;;;;;;;;;:4;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;37571:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37571:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37571:27:0;37570:28;;:60;;-1:-1:-1;37603:4:0;;:27;;;-1:-1:-1;;;37603:27:0;;37624:4;37603:27;;;;;;-1:-1:-1;;;;;37603:4:0;;;;:12;;:27;;;;;;;;;;;;;;;:4;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;37603:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37603:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37603:27:0;37602:28;37570:60;37566:416;;;37676:1;37655:18;:22;37566:416;;;37726:4;;37751:18;;37726:44;;;-1:-1:-1;;;37726:44:0;;37744:4;37726:44;;;;;;;;;;;;-1:-1:-1;;;;;37726:4:0;;;;:9;;:44;;;;;:4;;:44;;;;;;;;:4;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;37726:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37793:4:0;;37841:25;;37818:18;;-1:-1:-1;;;;;37793:4:0;;;;-1:-1:-1;37793:9:0;;-1:-1:-1;37811:4:0;;37818:49;;;:22;:49;:::i;:::-;37793:75;;;;;;;;;;;;;-1:-1:-1;;;;;37793:75:0;-1:-1:-1;;;;;37793:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37793:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37943:18:0;;37916:22;;:46;;-1:-1:-1;37916:22:0;-1:-1:-1;37916:46:0;:26;:46;:::i;:::-;37891:22;:71;37566:416;38000:12;:14;;;;;;;;;-1:-1:-1;;38000:14:0;;;;;;37519:511;38059:18;;:32;;23820:6;38059:32;:22;:32;:::i;:::-;38046:10;:45;38123:15;38106:14;:32;;;38168:29;;23820:6;38168:29;:19;:29;:::i;:::-;38153:12;:44;38229:18;;38217:31;;;;;;;-1:-1:-1;;;;;;;;;;;38217:31:0;;;;;;;;37217:1043;35484:1;35475:6;:10;35467:40;;;;;-1:-1:-1;;;35467:40:0;;;;;;;;;;;;-1:-1:-1;;;35467:40:0;;;;;;;;;;;;;;;35549:6;35588:29;35606:10;35588:17;:29::i;:::-;35570:15;:47;35566:798;;;35745:17;;35741:58;;35769:30;;;-1:-1:-1;;;35769:30:0;;;;;;;;;;;;-1:-1:-1;;;35769:30:0;;;;;;;;;;;;;;35741:58;35891:19;35913:40;35947:5;35913:29;35924:17;;35913:6;:10;;:29;;;;:::i;:40::-;35891:62;-1:-1:-1;35991:23:0;:6;35891:62;35991:23;:10;:23;:::i;:::-;36033:16;;35968:46;;-1:-1:-1;;;;;;36033:16:0;:30;36029:324;;36126:16;;;36109:3;:47;;-1:-1:-1;;;;;36109:3:0;;;;36126:16;36144:11;36109:47;:16;:47;:::i;:::-;36191:16;;36180:41;;;;;;;;-1:-1:-1;;;;;36191:16:0;;;;-1:-1:-1;;;;;;;;;;;36180:41:0;;;;;;;;36029:324;;;36273:3;;;:21;;;-1:-1:-1;;;36273:21:0;;;;;;;;;;-1:-1:-1;;;;;36273:3:0;;;;:8;;:21;;;;;;;;;;:3;;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;36273:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;36318:19:0;;;;;;;;;;-1:-1:-1;36318:19:0;;;;;;;-1:-1:-1;36318:19:0;36029:324;35566:798;;36374:49;36394:6;36402:20;36374:19;:49::i;:::-;36439:51;;;;;;;;;;;;;;36449:10;;36439:51;;;;;;;;38270:1;35375:1123;;:::o;38344:1009::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;38428:1;29560:16;:14;:16::i;:::-;29537:20;:39;29604:26;:24;:26::i;:::-;29587:14;:43;-1:-1:-1;;;;;29645:21:0;;;29641:157;;29702:15;29709:7;29702:6;:15::i;:::-;-1:-1:-1;;;;;29683:16:0;;;;;;:7;:16;;;;;;;;:34;;;;29766:20;;29732:22;:31;;;;;;:54;29641:157;38451:12;;:17;38443:65;;;;-1:-1:-1;;;38443:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38519:18;:27;;;38561:22;;24463:36;;38561:46;;38540:6;38561:46;:26;:46;:::i;:::-;:61;38557:177;;;38677:22;;38660:40;;24463:36;;38660:40;:16;:40;:::i;:::-;38639:18;:61;38557:177;38761:15;38744:14;:32;;;38809:9;;-1:-1:-1;38787:337:0;;;38864:9;;38849:12;:24;;;38901:45;;38912:33;;38929:15;38912:33;:16;:33;:::i;:::-;38901:6;;:45;:10;:45;:::i;:::-;38888:10;:58;38787:337;;;39007:14;;:28;;23820:6;39007:28;:18;:28;:::i;:::-;38992:12;:43;39063:20;:6;23820;39063:20;:10;:20;:::i;:::-;39050:10;:33;39098:12;:14;;;;;;;;;-1:-1:-1;;39098:14:0;;;;;;38787:337;39134:4;;:32;;;-1:-1:-1;;;39134:32:0;;39152:4;39134:32;;;;;;;;;;;;-1:-1:-1;;;;;39134:4:0;;;;:9;;:32;;;;;:4;;:32;;;;;;;;:4;;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;39134:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;39177:4:0;;39213:25;;-1:-1:-1;;;;;39177:4:0;;;;-1:-1:-1;39177:9:0;;-1:-1:-1;39195:4:0;;39202:37;;:6;;:37;:10;:37;:::i;:::-;39177:63;;;;;;;;;;;;;-1:-1:-1;;;;;39177:63:0;-1:-1:-1;;;;;39177:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39177:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;39276:22:0;;:34;;-1:-1:-1;39276:22:0;-1:-1:-1;39303:6:0;39276:34;:26;:34;:::i;:::-;39251:22;:59;39326:19;;;;;;;;-1:-1:-1;;;;;;;;;;;39326:19:0;;;;;;;;10155:1;38344:1009;:::o;36611:501::-;36652:10;29560:16;:14;:16::i;:::-;29537:20;:39;29604:26;:24;:26::i;:::-;29587:14;:43;-1:-1:-1;;;;;29645:21:0;;;29641:157;;29702:15;29709:7;29702:6;:15::i;:::-;-1:-1:-1;;;;;29683:16:0;;;;;;:7;:16;;;;;;;;:34;;;;29766:20;;29732:22;:31;;;;;;:54;29641:157;37180:1;37165:12;;:16;37157:49;;;;;-1:-1:-1;;;37157:49:0;;;;;;;;;;;;-1:-1:-1;;;37157:49:0;;;;;;;;;;;;;;;37240:12;;37221:15;:31;37217:1043;;37290:11;;37269:18;:32;;;37322:22;;24463:36;;37322:46;;:22;:46;:26;:46;:::i;:::-;:61;37318:185;;;37442:22;;37425:40;;24463:36;;37425:40;:16;:40;:::i;:::-;37404:18;:61;37318:185;37523:18;;:22;37519:511;;37571:4;;:27;;;-1:-1:-1;;;37571:27:0;;37592:4;37571:27;;;;;;-1:-1:-1;;;;;37571:4:0;;;;:12;;:27;;;;;;;;;;;;;;;:4;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;37571:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37571:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37571:27:0;37570:28;;:60;;-1:-1:-1;37603:4:0;;:27;;;-1:-1:-1;;;37603:27:0;;37624:4;37603:27;;;;;;-1:-1:-1;;;;;37603:4:0;;;;:12;;:27;;;;;;;;;;;;;;;:4;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;37603:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37603:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37603:27:0;37602:28;37570:60;37566:416;;;37676:1;37655:18;:22;37566:416;;;37726:4;;37751:18;;37726:44;;;-1:-1:-1;;;37726:44:0;;37744:4;37726:44;;;;;;;;;;;;-1:-1:-1;;;;;37726:4:0;;;;:9;;:44;;;;;:4;;:44;;;;;;;;:4;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;37726:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37793:4:0;;37841:25;;37818:18;;-1:-1:-1;;;;;37793:4:0;;;;-1:-1:-1;37793:9:0;;-1:-1:-1;37811:4:0;;37818:49;;;:22;:49;:::i;:::-;37793:75;;;;;;;;;;;;;-1:-1:-1;;;;;37793:75:0;-1:-1:-1;;;;;37793:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37793:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37943:18:0;;37916:22;;:46;;-1:-1:-1;37916:22:0;-1:-1:-1;37916:46:0;:26;:46;:::i;:::-;37891:22;:71;37566:416;38000:12;:14;;;;;;;;;-1:-1:-1;;38000:14:0;;;;;;37519:511;38059:18;;:32;;23820:6;38059:32;:22;:32;:::i;:::-;38046:10;:45;38123:15;38106:14;:32;;;38168:29;;23820:6;38168:29;:19;:29;:::i;:::-;38153:12;:44;38229:18;;38217:31;;;;;;;-1:-1:-1;;;;;;;;;;;38217:31:0;;;;;;;;37217:1043;36715:10;36690:14;36707:19;;;:7;:19;;;;;;36741:10;;36737:368;;36854:10;36846:19;;;;:7;:19;;;;;;;;;36806:23;:35;;;;;;;:60;;;:39;:60;:::i;:::-;36792:10;36768:35;;;;:23;:35;;;;;;;;:98;;;;36881:7;:19;;;;;:23;;;;36921:4;;:37;;-1:-1:-1;;;;;36921:4:0;;;;36951:6;36921:17;:37::i;:::-;36973:68;36991:10;37003:37;37014:25;;37003:6;:10;;:37;;;;:::i;:::-;36973:4;;-1:-1:-1;;;;;36973:4:0;;:68;;:17;:68;:::i;:::-;37063:30;;;;;;;;37074:10;;-1:-1:-1;;;;;;;;;;;37063:30:0;;;;;;;;;36737:368;38270:1;36611:501;:::o;31076:140::-;31135:7;31162:46;31182:25;;31162:15;31169:7;31162:6;:15::i;:46::-;31155:53;31076:140;-1:-1:-1;;31076:140:0:o;33240:1974::-;33317:8;29560:16;:14;:16::i;:::-;29537:20;:39;29604:26;:24;:26::i;:::-;29587:14;:43;-1:-1:-1;;;;;29645:21:0;;;29641:157;;29702:15;29709:7;29702:6;:15::i;:::-;-1:-1:-1;;;;;29683:16:0;;;;;;:7;:16;;;;;;;;:34;;;;29766:20;;29732:22;:31;;;;;;:54;29641:157;37180:1;37165:12;;:16;37157:49;;;;;-1:-1:-1;;;37157:49:0;;;;;;;;;;;;-1:-1:-1;;;37157:49:0;;;;;;;;;;;;;;;37240:12;;37221:15;:31;37217:1043;;37290:11;;37269:18;:32;;;37322:22;;24463:36;;37322:46;;:22;:46;:26;:46;:::i;:::-;:61;37318:185;;;37442:22;;37425:40;;24463:36;;37425:40;:16;:40;:::i;:::-;37404:18;:61;37318:185;37523:18;;:22;37519:511;;37571:4;;:27;;;-1:-1:-1;;;37571:27:0;;37592:4;37571:27;;;;;;-1:-1:-1;;;;;37571:4:0;;;;:12;;:27;;;;;;;;;;;;;;;:4;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;37571:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37571:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37571:27:0;37570:28;;:60;;-1:-1:-1;37603:4:0;;:27;;;-1:-1:-1;;;37603:27:0;;37624:4;37603:27;;;;;;-1:-1:-1;;;;;37603:4:0;;;;:12;;:27;;;;;;;;;;;;;;;:4;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;37603:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37603:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37603:27:0;37602:28;37570:60;37566:416;;;37676:1;37655:18;:22;37566:416;;;37726:4;;37751:18;;37726:44;;;-1:-1:-1;;;37726:44:0;;37744:4;37726:44;;;;;;;;;;;;-1:-1:-1;;;;;37726:4:0;;;;:9;;:44;;;;;:4;;:44;;;;;;;;:4;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;37726:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37793:4:0;;37841:25;;37818:18;;-1:-1:-1;;;;;37793:4:0;;;;-1:-1:-1;37793:9:0;;-1:-1:-1;37811:4:0;;37818:49;;;:22;:49;:::i;:::-;37793:75;;;;;;;;;;;;;-1:-1:-1;;;;;37793:75:0;-1:-1:-1;;;;;37793:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37793:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37943:18:0;;37916:22;;:46;;-1:-1:-1;37916:22:0;-1:-1:-1;37916:46:0;:26;:46;:::i;:::-;37891:22;:71;37566:416;38000:12;:14;;;;;;;;;-1:-1:-1;;38000:14:0;;;;;;37519:511;38059:18;;:32;;23820:6;38059:32;:22;:32;:::i;:::-;38046:10;:45;38123:15;38106:14;:32;;;38168:29;;23820:6;38168:29;:19;:29;:::i;:::-;38153:12;:44;38229:18;;38217:31;;;;;;;-1:-1:-1;;;;;;;;;;;38217:31:0;;;;;;;;37217:1043;33371:7;33361:6;:17;;33353:47;;;;;-1:-1:-1;;;33353:47:0;;;;;;;;;;;;-1:-1:-1;;;33353:47:0;;;;;;;;;;;;;;;33436:10;33419:28;;;;:16;:28;;;;;;;;33411:107;;;;-1:-1:-1;;;33411:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33611:16;;33557:6;;33529:25;;33611:20;33607:983;;33661:16;;33652:6;:25;:55;;;;;33702:5;33681:18;;:26;33652:55;33648:820;;;33892:18;;33888:261;;33935:16;;33925:6;:26;;33917:74;;;;-1:-1:-1;;;33917:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33888:261;;;34108:41;34143:5;34108:30;34119:18;;34108:6;:10;;:30;;;;:::i;:41::-;34095:54;;33888:261;33648:820;;;34184:16;;34175:6;:25;:52;;;;;34226:1;34204:19;;:23;34175:52;34171:297;;;34388:64;34446:5;34388:53;34421:19;;34388:28;34399:16;;34388:6;:10;;:28;;;;:::i;:64::-;34375:77;;34171:297;34486:14;;34482:97;;34541:22;:6;34552:10;34541:22;:10;:22;:::i;:::-;34521:42;;34482:97;34600:61;34625:8;34635:6;34643:17;34600:24;:61::i;:::-;-1:-1:-1;;;;;34672:24:0;;;;;;:14;:24;;;;;;;;;34699:15;34672:42;;34730:43;;;;;;;;;;;;;;;;;;;;;;;;34788:14;;34784:423;;34839:22;:6;34850:10;34839:22;:10;:22;:::i;:::-;34880:16;;34819:42;;-1:-1:-1;;;;;;34880:16:0;:30;34876:320;;34973:16;;;34956:3;:46;;-1:-1:-1;;;;;34956:3:0;;;;34973:16;34991:10;34956:46;:16;:46;:::i;:::-;35037:16;;35026:40;;;;;;;;-1:-1:-1;;;;;35037:16:0;;;;-1:-1:-1;;;;;;;;;;;35026:40:0;;;;;;;;34876:320;;;35118:3;;;:20;;;-1:-1:-1;;;35118:20:0;;;;;;;;;;-1:-1:-1;;;;;35118:3:0;;;;:8;;:20;;;;;;;;;;:3;;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;35118:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;35162:18:0;;;;;;;;;;-1:-1:-1;35162:18:0;;;;;;;-1:-1:-1;35162:18:0;34876:320;38270:1;;33240:1974;;;:::o;23882:55::-;23936:1;23882:55;:::o;29363:116::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;29443:4;:28;;-1:-1:-1;;;;;;29443:28:0;-1:-1:-1;;;;;29443:28:0;;;;;;;;;;29363:116::o;39709:437::-;39853:7;:5;:7::i;:::-;-1:-1:-1;;;;;39839:21:0;:10;-1:-1:-1;;;;;39839:21:0;;39831:45;;;;;-1:-1:-1;;;39831:45:0;;;;;;;;;;;;-1:-1:-1;;;39831:45:0;;;;;;;;;;;;;;;39940:3;;-1:-1:-1;;;;;39930:13:0;;;39940:3;;39930:13;;39922:29;;;;;-1:-1:-1;;;39922:29:0;;;;;;;;;;;;-1:-1:-1;;;39922:29:0;;;;;;;;;;;;;;;40015:4;;-1:-1:-1;;;;;40005:14:0;;;40015:4;;40005:14;;39997:31;;;;;-1:-1:-1;;;39997:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;39997:31:0;;;;;;;;;;;;;;;40057:4;;-1:-1:-1;;;;;40047:14:0;;;40057:4;;40047:14;;40039:31;;;;;-1:-1:-1;;;40039:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;40039:31:0;;;;;;;;;;;;;;;40107;-1:-1:-1;;;;;40107:19:0;;40127:2;40131:6;40107:31;:19;:31;:::i;:::-;39709:437;;;:::o;35222:145::-;35340:19;;-1:-1:-1;;;;;35314:23:0;;35287:7;35314:23;;;:14;:23;;;;;;:45;35222:145;;;:::o;27971:128::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;28055:16;:36;27971:128::o;25962:48::-;;;;;;;;;;;;;;;:::o;22320:110::-;-1:-1:-1;;;;;22404:18:0;22377:7;22404:18;;;:9;:18;;;;;;;22320:110::o;10697:140::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;10780:6;;10759:40;;10796:1;;-1:-1:-1;;;;;10780:6:0;;10759:40;;10796:1;;10759:40;10810:6;:19;;-1:-1:-1;;;;;;10810:19:0;;;10697:140::o;28255:444::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;28401:3;28378:19;:26;;:58;;;;28408:19;28431:5;28408:28;28378:58;28370:89;;;;;-1:-1:-1;;;28370:89:0;;;;;;;;;;;;-1:-1:-1;;;28370:89:0;;;;;;;;;;;;;;;28552:3;28528:20;:27;;28520:58;;;;;-1:-1:-1;;;28520:58:0;;;;;;;;;;;;-1:-1:-1;;;28520:58:0;;;;;;;;;;;;;;;28598:18;:40;;;;28649:19;:42;28255:444::o;22053:70::-;;;-1:-1:-1;;;;;22053:70:0;;:::o;24038:29::-;;;;;;:::o;23649:71::-;;;-1:-1:-1;;;;;23649:71:0;;:::o;31224:2008::-;31293:10;29560:16;:14;:16::i;:::-;29537:20;:39;29604:26;:24;:26::i;:::-;29587:14;:43;-1:-1:-1;;;;;29645:21:0;;;29641:157;;29702:15;29709:7;29702:6;:15::i;:::-;-1:-1:-1;;;;;29683:16:0;;;;;;:7;:16;;;;;;;;:34;;;;29766:20;;29732:22;:31;;;;;;:54;29641:157;37180:1;37165:12;;:16;37157:49;;;;;-1:-1:-1;;;37157:49:0;;;;;;;;;;;;-1:-1:-1;;;37157:49:0;;;;;;;;;;;;;;;37240:12;;37221:15;:31;37217:1043;;37290:11;;37269:18;:32;;;37322:22;;24463:36;;37322:46;;:22;:46;:26;:46;:::i;:::-;:61;37318:185;;;37442:22;;37425:40;;24463:36;;37425:40;:16;:40;:::i;:::-;37404:18;:61;37318:185;37523:18;;:22;37519:511;;37571:4;;:27;;;-1:-1:-1;;;37571:27:0;;37592:4;37571:27;;;;;;-1:-1:-1;;;;;37571:4:0;;;;:12;;:27;;;;;;;;;;;;;;;:4;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;37571:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37571:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37571:27:0;37570:28;;:60;;-1:-1:-1;37603:4:0;;:27;;;-1:-1:-1;;;37603:27:0;;37624:4;37603:27;;;;;;-1:-1:-1;;;;;37603:4:0;;;;:12;;:27;;;;;;;;;;;;;;;:4;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;37603:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37603:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37603:27:0;37602:28;37570:60;37566:416;;;37676:1;37655:18;:22;37566:416;;;37726:4;;37751:18;;37726:44;;;-1:-1:-1;;;37726:44:0;;37744:4;37726:44;;;;;;;;;;;;-1:-1:-1;;;;;37726:4:0;;;;:9;;:44;;;;;:4;;:44;;;;;;;;:4;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;37726:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37793:4:0;;37841:25;;37818:18;;-1:-1:-1;;;;;37793:4:0;;;;-1:-1:-1;37793:9:0;;-1:-1:-1;37811:4:0;;37818:49;;;:22;:49;:::i;:::-;37793:75;;;;;;;;;;;;;-1:-1:-1;;;;;37793:75:0;-1:-1:-1;;;;;37793:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37793:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37943:18:0;;37916:22;;:46;;-1:-1:-1;37916:22:0;-1:-1:-1;37916:46:0;:26;:46;:::i;:::-;37891:22;:71;37566:416;38000:12;:14;;;;;;;;;-1:-1:-1;;38000:14:0;;;;;;37519:511;38059:18;;:32;;23820:6;38059:32;:22;:32;:::i;:::-;38046:10;:45;38123:15;38106:14;:32;;;38168:29;;23820:6;38168:29;:19;:29;:::i;:::-;38153:12;:44;38229:18;;38217:31;;;;;;;-1:-1:-1;;;;;;;;;;;38217:31:0;;;;;;;;37217:1043;31349:7;31339:6;:17;;31331:47;;;;;-1:-1:-1;;;31331:47:0;;;;;;;;;;;;-1:-1:-1;;;31331:47:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31397:22:0;;31409:10;31397:22;;31389:61;;;;;-1:-1:-1;;;31389:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31543:16;;31489:6;;31461:25;;31543:20;31539:981;;31593:16;;31584:6;:25;:55;;;;;31634:5;31613:18;;:26;31584:55;31580:818;;;31824:18;;31820:259;;31867:16;;31857:6;:26;;31849:74;;;;-1:-1:-1;;;31849:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31820:259;;;32038:41;32073:5;32038:30;32049:18;;32038:6;:10;;:30;;;;:::i;:41::-;32025:54;;31820:259;31580:818;;;32114:16;;32105:6;:25;:52;;;;;32156:1;32134:19;;:23;32105:52;32101:297;;;32318:64;32376:5;32318:53;32351:19;;32318:28;32329:16;;32318:6;:10;;:28;;;;:::i;:64::-;32305:77;;32101:297;32416:14;;32412:97;;32471:22;:6;32482:10;32471:22;:10;:22;:::i;:::-;32451:42;;32412:97;32530:43;32547:6;32555:17;32530:16;:43::i;:::-;32599:10;32584:26;;;;:14;:26;;;;;;;;;32613:15;32584:44;;32644:45;;;;;;;;;;;;;;;;;;;;;;;;32704:14;;32700:366;;32739:16;;-1:-1:-1;;;;;32739:16:0;:30;32735:320;;32832:16;;;32815:3;:46;;-1:-1:-1;;;;;32815:3:0;;;;32832:16;32850:10;32815:46;:16;:46;:::i;:::-;32896:16;;32885:40;;;;;;;;-1:-1:-1;;;;;32896:16:0;;;;-1:-1:-1;;;;;;;;;;;32885:40:0;;;;;;;;32735:320;;;32977:3;;;:20;;;-1:-1:-1;;;32977:20:0;;;;;;;;;;-1:-1:-1;;;;;32977:3:0;;;;:8;;:20;;;;;;;;;;:3;;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;32977:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33021:18:0;;;;;;;;;;-1:-1:-1;33021:18:0;;;;;;;-1:-1:-1;33021:18:0;32735:320;33080:14;;-1:-1:-1;;;;;33080:14:0;:28;;;;:54;;-1:-1:-1;;;;;;33112:22:0;;;;33080:54;33076:149;;;33164:14;;;33151:62;;;-1:-1:-1;;;33151:62:0;;33192:10;33151:62;;;;;;;-1:-1:-1;;;;;33151:62:0;;;;;;;;;33164:14;;;33151:40;;:62;;;;;33164:14;;33151:62;;;;;;;33164:14;;33151:62;;;5:2:-1;;;;30:1;27;20:12;5:2;33151:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33151:62:0;;;;38270:1;;31224:2008;;;:::o;24205:29::-;;;;:::o;24321:65::-;24368:18;24321:65;:::o;25783:49::-;;;;;;;;;;;;;:::o;29825:131::-;29882:7;29909:39;29918:15;29935:12;;29909:8;:39::i;:::-;29902:46;;29825:131;:::o;25670:57::-;;;;;;;;;;;;;:::o;24074:37::-;;;;:::o;9886:79::-;9951:6;;-1:-1:-1;;;;;9951:6:0;9886:79;:::o;10252:94::-;10332:6;;10292:4;;-1:-1:-1;;;;;10332:6:0;10316:12;:10;:12::i;:::-;-1:-1:-1;;;;;10316:22:0;;10309:29;;10252:94;:::o;27344:123::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27422:30:0;;;;;:16;:30;;;;;:37;;-1:-1:-1;;27422:37:0;27455:4;27422:37;;;27344:123::o;28107:140::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;28197:19;:42;28107:140::o;23571:71::-;;;-1:-1:-1;;;;;23571:71:0;;:::o;27475:127::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27556:30:0;27589:5;27556:30;;;:16;:30;;;;;:38;;-1:-1:-1;;27556:38:0;;;27475:127::o;27610:128::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;27694:16;:36;;-1:-1:-1;;;;;;27694:36:0;-1:-1:-1;;;;;27694:36:0;;;;;;;;;;27610:128::o;27746:217::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;27844:25;27828:41;;;27820:78;;;;;-1:-1:-1;;;27820:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27929:11;:26;27746:217::o;24424:75::-;24463:36;24424:75;:::o;24241:29::-;;;;:::o;28707:210::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;28823:4;28801:18;:26;;28793:57;;;;;-1:-1:-1;;;28793:57:0;;;;;;;;;;;;-1:-1:-1;;;28793:57:0;;;;;;;;;;;;;;;28871:17;:38;28707:210::o;29964:376::-;30011:7;30035:13;:11;:13::i;:::-;30031:78;;-1:-1:-1;30077:20:0;;30070:27;;30031:78;30135:197;30174:147;30307:13;:11;:13::i;:::-;30174:114;30283:4;30174:90;30253:10;;30174:60;30219:14;;30174:26;:24;:26::i;:147::-;30135:20;;;:197;:24;:197;:::i;25380:38::-;;;;:::o;24277:35::-;;;;:::o;23946:37::-;;;;:::o;25841:58::-;;;;;;;;;;;;;:::o;36506:97::-;36542:31;36551:21;36561:10;36551:9;:21::i;:::-;36542:8;:31::i;:::-;36584:11;:9;:11::i;:::-;36506:97::o;24167:31::-;;;;:::o;25463:36::-;;;;:::o;10992:109::-;10098:9;:7;:9::i;:::-;10090:54;;;;;-1:-1:-1;;;10090:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10090:54:0;;;;;;;;;;;;;;;11065:28;11084:8;11065:18;:28::i;:::-;10992:109;:::o;30920:148::-;30980:7;31007:53;31044:15;31051:7;31044:6;:15::i;:::-;-1:-1:-1;;;;;31007:32:0;;;;;;:23;:32;;;;;;;:53;:36;:53;:::i;3628:136::-;3686:7;3713:43;3717:1;3720;3713:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3706:50;3628:136;-1:-1:-1;;;3628:136:0:o;4544:471::-;4602:7;4847:6;4843:47;;-1:-1:-1;4877:1:0;4870:8;;4843:47;4914:5;;;4918:1;4914;:5;:1;4938:5;;;;;:10;4930:56;;;;-1:-1:-1;;;4930:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5483:132;5541:7;5568:39;5572:1;5575;5568:39;;;;;;;;;;;;;;;;;:3;:39::i;3172:181::-;3230:7;3262:5;;;3286:6;;;;3278:46;;;;;-1:-1:-1;;;3278:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;18327:176;18436:58;;;-1:-1:-1;;;;;18436:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18436:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18410:85:0;;18429:5;;18410:18;:85::i;23048:265::-;23152:12;;:24;;23169:6;23152:24;:16;:24;:::i;:::-;23137:12;:39;23221:10;23211:21;;;;:9;:21;;;;;;:33;;23237:6;23211:33;:25;:33;:::i;:::-;23197:10;23187:21;;;;:9;:21;;;;;:57;;;;23255:3;;:50;;-1:-1:-1;;;;;23255:3:0;;;;23284:20;23255:16;:50::i;22732:308::-;22856:12;;:35;;22873:17;22856:35;:16;:35;:::i;:::-;22841:12;:50;-1:-1:-1;;;;;22924:19:0;;;;;;:9;:19;;;;;;:42;;22948:17;22924:42;:23;:42;:::i;:::-;-1:-1:-1;;;;;22902:19:0;;;;;;;:9;:19;;;;;:64;;;;22977:3;;:55;;:3;22998:10;23018:4;23025:6;22977:55;:20;:55;:::i;22438:286::-;22536:12;;:35;;22553:17;22536:35;:16;:35;:::i;:::-;22521:12;:50;22616:10;22606:21;;;;:9;:21;;;;;;:44;;22632:17;22606:44;:25;:44;:::i;:::-;22592:10;22582:21;;;;:9;:21;;;;;:68;;;;22661:3;;:55;;-1:-1:-1;;;;;22661:3:0;;;;22702:4;22709:6;22661:20;:55::i;1834:106::-;1892:7;1923:1;1919;:5;:13;;1931:1;1919:13;;;-1:-1:-1;1927:1:0;;1834:106;-1:-1:-1;1834:106:0:o;8626:98::-;8706:10;8626:98;:::o;11207:229::-;-1:-1:-1;;;;;11281:22:0;;11273:73;;;;-1:-1:-1;;;11273:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11383:6;;11362:38;;-1:-1:-1;;;;;11362:38:0;;;;11383:6;;11362:38;;11383:6;;11362:38;11411:6;:17;;-1:-1:-1;;;;;;11411:17:0;-1:-1:-1;;;;;11411:17:0;;;;;;;;;;11207:229::o;4101:192::-;4187:7;4223:12;4215:6;;;;4207:29;;;;-1:-1:-1;;;4207:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4207:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4259:5:0;;;4101:192::o;6145:345::-;6231:7;6333:12;6326:5;6318:28;;;;-1:-1:-1;;;6318:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6318:28:0;;6357:9;6373:1;6369;:5;;;;;;;6145:345;-1:-1:-1;;;;;6145:345:0:o;20366:1113::-;20970:27;20978:5;-1:-1:-1;;;;;20970:25:0;;:27::i;:::-;20962:71;;;;;-1:-1:-1;;;20962:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21107:12;21121:23;21156:5;-1:-1:-1;;;;;21148:19:0;21168:4;21148:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;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;;;21148: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;;21106:67:0;;;;21192:7;21184:52;;;;;-1:-1:-1;;;21184:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21253:17;;:21;21249:223;;21394:10;21383:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21383:30:0;21375:85;;;;-1:-1:-1;;;21375:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20366:1113;;;;:::o;18511:204::-;18638:68;;;-1:-1:-1;;;;;18638:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18638:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18612:95:0;;18631:5;;18612:18;:95::i;15168:808::-;15228:4;15886:20;;15730:66;15925:15;;;;;:42;;;15956:11;15944:8;:23;;15925:42;15917:51;15168:808;-1:-1:-1;;;;15168:808:0:o
Swarm Source
bzzr://24598059ae6f3fbbcac05bd3586f8c00a98cf14b62c6089dfab141e3526ff603
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.