Overview
FTM Balance
0 FTM
FTM Value
$0.00More Info
Private Name Tags
ContractCreator:
Sponsored
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 33261961 | 747 days ago | IN | Create: OxdV1Rewards | 0 FTM | 8.3132272 |
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
33261961 | 747 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Contract Name:
OxdV1Rewards
Compiler Version
v0.5.17+commit.d19bba13
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.5.17; // Part: Address 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. * * > 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. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // Part: IERC20 interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through `transferFrom`. This is * zero by default. * * This value changes when `approve` or `transferFrom` are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * > Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an `Approval` event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to `approve`. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // Part: IOxLens (Here because pragma 0.5.17) interface IOxLens { function solidInflationSinceInception() external view returns (uint256); function partnersRewardsPoolAddress() external view returns (address); function oxSolidAddress() external view returns (address); function solidAddress() external view returns (address); function tokensAllowlist() external view returns (ITokensAllowlist); } // Part: IPartnersRewards (Here because pragma 0.5.17) interface IPartnersRewards { function stake(uint256) external; function withdraw(uint256) external; function getReward() external; function earned(address, address) external view returns (uint256); function rewardTokensLength() external view returns (uint256); function rewardTokens(uint256) external view returns (address); } // Part: IOxdV1Redeem (Here because pragma 0.5.17) interface IOxdV1Redeem { function oxdV1Burnt(address account) external view returns (uint256); } // Part: TokensAllowlist (Here because pragma 0.5.17) interface ITokensAllowlist { function periodBetweenClaimBribe() external view returns (uint256); } // Part: Math 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); } } // Part: Owned contract Owned { address public owner; address public nominatedOwner; constructor(address _owner) public { owner = _owner; emit OwnerChanged(address(0), _owner); } function nominateNewOwner(address _owner) external onlyOwner { nominatedOwner = _owner; emit OwnerNominated(_owner); } function acceptOwnership() external { require( msg.sender == nominatedOwner, "You must be nominated before you can accept ownership" ); emit OwnerChanged(owner, nominatedOwner); owner = nominatedOwner; nominatedOwner = address(0); } modifier onlyOwner() { _onlyOwner(); _; } function _onlyOwner() private view { require( msg.sender == owner, "Only the contract owner may perform this action" ); } event OwnerNominated(address newOwner); event OwnerChanged(address oldOwner, address newOwner); } // Part: ReentrancyGuard contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor() internal { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require( localCounter == _guardCounter, "ReentrancyGuard: reentrant call" ); } } // Part: SafeMath 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) { require(b <= a, "SafeMath: subtraction overflow"); 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-solidity/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) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); 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) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } // Part: Pausable contract Pausable is Owned { uint256 public lastPauseTime; bool public paused; constructor() internal { // This contract is abstract, and thus cannot be instantiated directly require(owner != address(0), "Owner must be set"); // Paused will be false, and lastPauseTime will be 0 upon initialisation } /** * @notice Change the paused state of the contract * @dev Only the contract owner may call this. */ function setPaused(bool _paused) external onlyOwner { // Ensure we're actually changing the state before we do anything if (_paused == paused) { return; } // Set our paused state. paused = _paused; // If applicable, set the last pause time. if (paused) { lastPauseTime = now; } // Let everyone know that our pause state has changed. emit PauseChanged(paused); } event PauseChanged(bool isPaused); modifier notPaused() { require( !paused, "This action cannot be performed while the contract is paused" ); _; } } // Part: SafeERC20 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 ); 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" ); } } } // Part: ProxyImplementation contract ProxyImplementation { bool public proxyStorageInitialized; /** * @notice Nothing in constructor, since it only affects the logic address, not the storage address * @dev public visibility so it compiles for 0.6.12 */ constructor() public {} /** * @notice Only allow proxy's storage to be initialized once */ modifier checkProxyInitialized() { require( !proxyStorageInitialized, "Can only initialize proxy storage once" ); proxyStorageInitialized = true; _; } } // File: MultiRewards.sol contract OxdV1Rewards is ReentrancyGuard, Pausable, ProxyImplementation { using SafeMath for uint256; using SafeERC20 for IERC20; /* ========== STATE VARIABLES ========== */ struct Reward { address rewardsDistributor; uint256 rewardsDuration; uint256 periodFinish; uint256 rewardRate; uint256 lastUpdateTime; uint256 rewardPerTokenStored; } IERC20 public stakingToken; mapping(address => Reward) public rewardData; address[] public legacyRewardTokens; // legacy reward tokens, not overriden so people can claim their legacy rewards // user -> reward token -> amount mapping(address => mapping(address => uint256)) public userRewardPerTokenPaid; mapping(address => mapping(address => uint256)) public rewards; uint256 private _totalSupply; mapping(address => uint256) private _balances; //oxd contracts IOxLens internal oxLens; IPartnersRewards internal partnersRewardsPool; IERC20 internal oxdV1; IERC20 internal oxSolid; IERC20 internal solid; IOxdV1Redeem internal oxdV1Redeem; //oxd addresses address public oxdV1Address; address public partnersRewardsPoolAddress; address public oxdV1RedeemAddress; //burning calcs uint256 public oxdV1SnapshotTotalSupply = 1294802716773849662269150314; uint256 public oxdV1veSOLID = 2376588000000000000000000; uint256 public basis = 10000; uint256 public stakingCapMultiplier = 10000; // cooldown periods uint256 public nextClaimRewardsTimestamp; address[] public rewardTokens; // new list to replace legacy reward tokens // distributor -> is approved to add rewards mapping(address => bool) public operator; /* ========== CONSTRUCTOR ========== */ /** * @dev Since this is meant to be a proxy's implementation, DO NOT implement logic in this constructor, use initializeProxyStorage() instead */ constructor(address _owner, address _stakingToken) public Owned(_owner) { // initializeProxyStorage(_owner, _stakingToken); } // /** // * @notice Initialize proxy storage // */ // function initializeProxyStorage(address _owner, address _stakingToken) // public // checkProxyInitialized // { // // From Owned // owner = _owner; // // ReentrancyGuard's constructor's not needed // stakingToken = IERC20(_stakingToken); // } // function initialize( // address _oxLens, // address _oxdV1, // IOxdV1Redeem _oxdV1Redeem // ) public { // require(address(oxLens) == address(0), "Already initialized"); // oxLens = IOxLens(_oxLens); // partnersRewardsPool = IPartnersRewards( // oxLens.partnersRewardsPoolAddress() // ); // oxdV1 = IERC20(_oxdV1); // oxSolid = IERC20(oxLens.oxSolidAddress()); // solid = IERC20(oxLens.solidAddress()); // oxdV1Address = _oxdV1; // partnersRewardsPoolAddress = oxLens.partnersRewardsPoolAddress(); // oxdV1RedeemAddress = address(_oxdV1Redeem); // oxdV1Redeem = _oxdV1Redeem; // } function addReward( address _rewardsToken, address _rewardsDistributor, uint256 _rewardsDuration ) external onlyOwnerOrOperator { _addReward(_rewardsToken, _rewardsDistributor, _rewardsDuration); } function _addReward( address _rewardsToken, address _rewardsDistributor, uint256 _rewardsDuration ) internal { rewardTokens.push(_rewardsToken); rewardData[_rewardsToken].rewardsDistributor = _rewardsDistributor; rewardData[_rewardsToken].rewardsDuration = _rewardsDuration; } /* ========== VIEWS ========== */ function totalSupply() external view returns (uint256) { return _totalSupply; } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function lastTimeRewardApplicable(address _rewardsToken) public view returns (uint256) { return Math.min(block.timestamp, rewardData[_rewardsToken].periodFinish); } function rewardTokensLength() external view returns (uint256) { return rewardTokens.length; } function rewardPerToken(address _rewardsToken) public view returns (uint256) { if (_totalSupply == 0) { return rewardData[_rewardsToken].rewardPerTokenStored; } return rewardData[_rewardsToken].rewardPerTokenStored.add( lastTimeRewardApplicable(_rewardsToken) .sub(rewardData[_rewardsToken].lastUpdateTime) .mul(rewardData[_rewardsToken].rewardRate) .mul(1e18) .div(_totalSupply) ); } function earned(address account, address _rewardsToken) public view returns (uint256) { return _balances[account] .mul( rewardPerToken(_rewardsToken).sub( userRewardPerTokenPaid[account][_rewardsToken] ) ) .div(1e18) .add(rewards[account][_rewardsToken]); } function getRewardForDuration(address _rewardsToken) external view returns (uint256) { return rewardData[_rewardsToken].rewardRate.mul( rewardData[_rewardsToken].rewardsDuration ); } function stakingCap(address account) public view returns (uint256 cap) { uint256 _burnt = oxdV1Burnt(account); cap = _burnt .mul(oxdV1veSOLID) .mul(oxLens.solidInflationSinceInception()) .mul(stakingCapMultiplier) .div(oxdV1SnapshotTotalSupply) .div(1e18) .div(basis); //inflation is 1e18 based //stakingCapMultiplier is basis based } function oxdV1Burnt(address account) public view returns (uint256) { return oxdV1Redeem.oxdV1Burnt(account); } /* ========== MUTATIVE FUNCTIONS ========== */ function setRewardsDistributor( address _rewardsToken, address _rewardsDistributor ) external onlyOwnerOrOperator { rewardData[_rewardsToken].rewardsDistributor = _rewardsDistributor; } function stake(uint256 amount) external { stakeFor(msg.sender, amount); } function stakeFor(address account, uint256 amount) public nonReentrant notPaused updateReward(account) { require(amount > 0, "Cannot stake 0"); uint256 _newBalance = _balances[account].add(amount); require( _newBalance <= stakingCap(account) || msg.sender == oxdV1RedeemAddress, "Exceeds staking cap." ); stakingToken.safeTransferFrom(msg.sender, address(this), amount); //stake into partnersRewardsPoolAddress stakingToken.approve(partnersRewardsPoolAddress, amount); partnersRewardsPool.stake(amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _newBalance; emit Staked(account, amount); } function withdraw(uint256 amount) public nonReentrant updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); partnersRewardsPool.withdraw(amount); stakingToken.safeTransfer(msg.sender, amount); emit Withdrawn(msg.sender, amount); } function getReward() public nonReentrant updateReward(msg.sender) { for (uint256 i; i < rewardTokens.length; i++) { address _rewardsToken = rewardTokens[i]; uint256 reward = rewards[msg.sender][_rewardsToken]; if (reward > 0) { rewards[msg.sender][_rewardsToken] = 0; IERC20(_rewardsToken).safeTransfer(msg.sender, reward); emit RewardPaid(msg.sender, _rewardsToken, reward); } } } function exit() external { withdraw(_balances[msg.sender]); getReward(); } /* ========== RESTRICTED FUNCTIONS ========== */ function setOperator(address candidate, bool status) public onlyOwner { require( operator[candidate] != status, "Candidate already in this state" ); operator[candidate] = status; emit OperatorStatus(candidate, status); } /** * @notice Sets stakingCapMultiplier * @param _stakingCapMultiplier desired amount for the multiplier used to cap oxSOLID staking amount based on oxdV1Burnt */ function setStakingCapMultiplier(uint256 _stakingCapMultiplier) external onlyOwner { stakingCapMultiplier = _stakingCapMultiplier; } function notifyRewardAmount(address _rewardsToken, uint256 reward) internal { if (block.timestamp >= rewardData[_rewardsToken].periodFinish) { rewardData[_rewardsToken].rewardRate = reward.div( rewardData[_rewardsToken].rewardsDuration ); } else { uint256 remaining = rewardData[_rewardsToken].periodFinish.sub( block.timestamp ); uint256 leftover = remaining.mul( rewardData[_rewardsToken].rewardRate ); rewardData[_rewardsToken].rewardRate = reward.add(leftover).div( rewardData[_rewardsToken].rewardsDuration ); } rewardData[_rewardsToken].lastUpdateTime = block.timestamp; rewardData[_rewardsToken].periodFinish = block.timestamp.add( rewardData[_rewardsToken].rewardsDuration ); emit RewardAdded(reward); } // Added to support recovering LP Rewards from other systems such as BAL to be distributed to holders function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner { require( tokenAddress != address(stakingToken), "Cannot withdraw staking token" ); require( rewardData[tokenAddress].lastUpdateTime == 0, "Cannot withdraw reward token" ); IERC20(tokenAddress).safeTransfer(owner, tokenAmount); emit Recovered(tokenAddress, tokenAmount); } function setRewardsDuration(address _rewardsToken, uint256 _rewardsDuration) external onlyOwnerOrOperator { require(_rewardsDuration > 0, "Reward duration must be non-zero"); // record previous data rewardData[_rewardsToken].rewardPerTokenStored = rewardPerToken( _rewardsToken ); // cache leftover rewards, if any uint256 leftover; if (rewardData[_rewardsToken].periodFinish > block.timestamp) { uint256 remaining = rewardData[_rewardsToken].periodFinish.sub( block.timestamp ); leftover = remaining.mul(rewardData[_rewardsToken].rewardRate); } // change rewardsDuration rewardData[_rewardsToken].rewardsDuration = _rewardsDuration; // reallocate leftover rewards into the a new period with the new duration rewardData[_rewardsToken].rewardRate = leftover.div( rewardData[_rewardsToken].rewardsDuration ); // update new periodFinish rewardData[_rewardsToken].periodFinish = block.timestamp.add( rewardData[_rewardsToken].rewardsDuration ); rewardData[_rewardsToken].lastUpdateTime = block.timestamp; emit RewardsDurationUpdated( _rewardsToken, rewardData[_rewardsToken].rewardsDuration ); } /* ========== MODIFIERS ========== */ modifier updateReward(address account) { uint256 _rewardTokensLength = partnersRewardsPool.rewardTokensLength(); address _rewardToken; uint256 _earned; // only get reward from upstream if not called by oxdV1Redeem if ( msg.sender != oxdV1RedeemAddress && block.timestamp > nextClaimRewardsTimestamp ) { // get rewards data from partners rewards uint256[] memory _balanceBefore = new uint256[]( _rewardTokensLength ); { for (uint256 i; i < _rewardTokensLength; i++) { _rewardToken = partnersRewardsPool.rewardTokens(i); _balanceBefore[i] = IERC20(_rewardToken).balanceOf( address(this) ); //going to rely on the permissioned nature of our tokensAllowlist to prevent junk tokens if (rewardData[_rewardToken].rewardsDuration == 0) { _addReward(_rewardToken, address(this), 86400 * 7); } } } partnersRewardsPool.getReward(); // notifyRewardAmount if balance increased uint256[] memory _balanceAfter = new uint256[](_rewardTokensLength); { for (uint256 i; i < _rewardTokensLength; i++) { address _rewardToken = partnersRewardsPool.rewardTokens(i); _balanceAfter[i] = IERC20(_rewardToken).balanceOf( address(this) ); uint256 _earned = _balanceAfter[i].sub(_balanceBefore[i]); if (_earned > 0) { notifyRewardAmount(_rewardToken, _earned); } } } nextClaimRewardsTimestamp = block.timestamp.add( ITokensAllowlist(oxLens.tokensAllowlist()) .periodBetweenClaimBribe() ); } { for (uint256 i; i < rewardTokens.length; i++) { address token = rewardTokens[i]; rewardData[token].rewardPerTokenStored = rewardPerToken(token); rewardData[token].lastUpdateTime = lastTimeRewardApplicable( token ); if (account != address(0)) { rewards[account][token] = earned(account, token); userRewardPerTokenPaid[account][token] = rewardData[token] .rewardPerTokenStored; } } } _; } modifier onlyOwnerOrOperator() { require( operator[msg.sender] || msg.sender == owner, "Only the owner or operator may perform this action" ); _; } /* ========== EVENTS ========== */ event RewardAdded(uint256 reward); event Staked(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid( address indexed user, address indexed rewardsToken, uint256 reward ); event RewardsDurationUpdated(address token, uint256 newDuration); event Recovered(address token, uint256 amount); event OperatorStatus(address candidate, bool status); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"candidate","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"OperatorStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"PauseChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","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":true,"internalType":"address","name":"rewardsToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_rewardsDistributor","type":"address"},{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"addReward","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":"basis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"earned","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":true,"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastPauseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"legacyRewardTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nextClaimRewardsTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oxdV1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"oxdV1Burnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oxdV1RedeemAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oxdV1SnapshotTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oxdV1veSOLID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"partnersRewardsPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proxyStorageInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardData","outputs":[{"internalType":"address","name":"rewardsDistributor","type":"address"},{"internalType":"uint256","name":"rewardsDuration","type":"uint256"},{"internalType":"uint256","name":"periodFinish","type":"uint256"},{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"rewardPerTokenStored","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardTokensLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"candidate","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_rewardsDistributor","type":"address"}],"name":"setRewardsDistributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"setRewardsDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_stakingCapMultiplier","type":"uint256"}],"name":"setStakingCapMultiplier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stakingCap","outputs":[{"internalType":"uint256","name":"cap","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakingCapMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526b042f0923ec5e81aa600bd46a6014556a01f74317f8791eb6b000006015556127106016556127106017553480156200003c57600080fd5b5060405162005d0338038062005d03833981810160405260408110156200006257600080fd5b81019080805190602001909291908051906020019092919050505081600160008190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c600082604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000226576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4f776e6572206d7573742062652073657400000000000000000000000000000081525060200191505060405180910390fd5b5050615acb80620002386000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c806370a0823111610151578063a694fc3a116100c3578063d176525e11610087578063d176525e14610c43578063e70b9e2714610c9b578063e9fad8ee14610d13578063f122977714610d1d578063f385cecb14610d75578063f4262b1114610d9357610269565b8063a694fc3a14610b13578063b625459d14610b41578063bcd1101414610b5f578063bf199e6214610bb7578063d0ed26ae14610bd557610269565b80638980f11f116101155780638980f11f146109c15780638da5cb5b14610a0f5780638dd9105314610a5957806391b4ded914610a7b5780639a30739114610a99578063a611e4dc14610af557610269565b806370a0823114610889578063729c1823146108e157806372f702f3146108ff57806379ba5097146109495780637bb7bed11461095357610269565b806337bd7f94116101ea578063558a7297116101ae578063558a7297146106fb5780635c975abb1461074b5780635dcb67371461076d578063638634ee1461079b5780636a0c9fa4146107f35780637035ab981461081157610269565b806337bd7f941461052e5780633d18b9121461059c5780633f695b45146105a657806348e5d9f81461060a57806353a47bb7146106b157610269565b80631c0b05d7116102315780631c0b05d7146103a2578063211dc32d146103ec5780632378bea6146104645780632e1a7d4d146104b25780632ee40908146104e057610269565b8063022e14bf1461026e578063111134cb146102b85780631627540c1461031057806316c38b3c1461035457806318160ddd14610384575b600080fd5b610276610ddd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fa600480360360208110156102ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e03565b6040518082815260200191505060405180910390f35b6103526004803603602081101561032657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ee6565b005b6103826004803603602081101561036a57600080fd5b81019080803515159060200190929190505050610f95565b005b61038c611042565b6040518082815260200191505060405180910390f35b6103aa61104c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61044e6004803603604081101561040257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611072565b6040518082815260200191505060405180910390f35b6104b06004803603604081101561047a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061120c565b005b6104de600480360360208110156104c857600080fd5b810190808035906020019092919050505061173f565b005b61052c600480360360408110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123b5565b005b61055a6004803603602081101561054457600080fd5b8101908080359060200190929190505050613277565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a46132b3565b005b610608600480360360408110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ed3565b005b61064c6004803603602081101561062057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614052565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b6106b96140ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107496004803603604081101561071157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506140d4565b005b61075361426c565b604051808215151515815260200191505060405180910390f35b6107996004803603602081101561078357600080fd5b810190808035906020019092919050505061427f565b005b6107dd600480360360208110156107b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614291565b6040518082815260200191505060405180910390f35b6107fb6142e6565b6040518082815260200191505060405180910390f35b6108736004803603604081101561082757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142ec565b6040518082815260200191505060405180910390f35b6108cb6004803603602081101561089f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614311565b6040518082815260200191505060405180910390f35b6108e961435a565b6040518082815260200191505060405180910390f35b610907614360565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610951614386565b005b61097f6004803603602081101561096957600080fd5b81019080803590602001909291905050506145ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a0d600480360360408110156109d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506145ea565b005b610a1761482a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a61614850565b604051808215151515815260200191505060405180910390f35b610a83614863565b6040518082815260200191505060405180910390f35b610adb60048036036020811015610aaf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614869565b604051808215151515815260200191505060405180910390f35b610afd614889565b6040518082815260200191505060405180910390f35b610b3f60048036036020811015610b2957600080fd5b810190808035906020019092919050505061488f565b005b610b4961489c565b6040518082815260200191505060405180910390f35b610ba160048036036020811015610b7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506148a2565b6040518082815260200191505060405180910390f35b610bbf614942565b6040518082815260200191505060405180910390f35b610c4160048036036060811015610beb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061494f565b005b610c8560048036036020811015610c5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614a59565b6040518082815260200191505060405180910390f35b610cfd60048036036040811015610cb157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614b8e565b6040518082815260200191505060405180910390f35b610d1b614bb3565b005b610d5f60048036036020811015610d3357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614c05565b6040518082815260200191505060405180910390f35b610d7d614d96565b6040518082815260200191505060405180910390f35b610d9b614d9c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663111134cb836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610ea457600080fd5b505afa158015610eb8573d6000803e3d6000fd5b505050506040513d6020811015610ece57600080fd5b81019080805190602001909291905050509050919050565b610eee614dc2565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b610f9d614dc2565b600460009054906101000a900460ff1615158115151415610fbd5761103f565b80600460006101000a81548160ff021916908315150217905550600460009054906101000a900460ff1615610ff457426003819055505b7f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5600460009054906101000a900460ff16604051808215151515815260200191505060405180910390a15b50565b6000600954905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611204600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111f6670de0b6b3a76400006111e861119a600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461118c89614c05565b614e6a90919063ffffffff16565b600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ef390919063ffffffff16565b614f7990919063ffffffff16565b61500890919063ffffffff16565b905092915050565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806112b15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806159af6032913960400191505060405180910390fd5b6000811161137c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f526577617264206475726174696f6e206d757374206265206e6f6e2d7a65726f81525060200191505060405180910390fd5b61138582614c05565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550600042600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156114c957600061146e42600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614e6a90919063ffffffff16565b90506114c5600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015482614ef390919063ffffffff16565b9150505b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611565600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015482614f7990919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550611600600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101544261500890919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555042600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055507fad2f86b01ed93b4b3a150d448c61a4f5d8d38075d3c0c64cc0a26fd6e1f4954583600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b60016000808282540192505081905550600080549050336000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf199e626040518163ffffffff1660e01b815260040160206040518083038186803b1580156117c057600080fd5b505afa1580156117d4573d6000803e3d6000fd5b505050506040513d60208110156117ea57600080fd5b81019080805190602001909291905050509050600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561185f575060185442115b15611e6d576060836040519080825280602002602001820160405280156118955781602001602082028038833980820191505090505b50905060005b84811015611a8a57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561191657600080fd5b505afa15801561192a573d6000803e3d6000fd5b505050506040513d602081101561194057600080fd5b810190808051906020019092919050505093508373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119d057600080fd5b505afa1580156119e4573d6000803e3d6000fd5b505050506040513d60208110156119fa57600080fd5b8101908080519060200190929190505050828281518110611a1757fe5b6020026020010181815250506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541415611a7d57611a7c843062093a80615090565b5b808060010191505061189b565b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611af557600080fd5b505af1158015611b09573d6000803e3d6000fd5b50505050606084604051908082528060200260200182016040528015611b3e5781602001602082028038833980820191505090505b50905060005b85811015611d2e576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611bc157600080fd5b505afa158015611bd5573d6000803e3d6000fd5b505050506040513d6020811015611beb57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c7b57600080fd5b505afa158015611c8f573d6000803e3d6000fd5b505050506040513d6020811015611ca557600080fd5b8101908080519060200190929190505050838381518110611cc257fe5b6020026020010181815250506000611d09858481518110611cdf57fe5b6020026020010151858581518110611cf357fe5b6020026020010151614e6a90919063ffffffff16565b90506000811115611d1f57611d1e82826151c3565b5b50508080600101915050611b44565b50611e64600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f666c1806040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9a57600080fd5b505afa158015611dae573d6000803e3d6000fd5b505050506040513d6020811015611dc457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663d3bf01d46040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1a57600080fd5b505afa158015611e2e573d6000803e3d6000fd5b505050506040513d6020811015611e4457600080fd5b81019080805190602001909291905050504261500890919063ffffffff16565b60188190555050505b60005b6019805490508110156120e757600060198281548110611e8c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611ec281614c05565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550611f1181614291565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146120d957611f958682611072565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080600101915050611e70565b506000861161215e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b61217386600954614e6a90919063ffffffff16565b6009819055506121cb86600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e6a90919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d876040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561228357600080fd5b505af1158015612297573d6000803e3d6000fd5b505050506122e83387600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661552b9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5876040518082815260200191505060405180910390a25050505060005481146123b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5050565b60016000808282540192505081905550600080549050600460009054906101000a900460ff1615612431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180615a31603c913960400191505060405180910390fd5b826000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf199e626040518163ffffffff1660e01b815260040160206040518083038186803b15801561249c57600080fd5b505afa1580156124b0573d6000803e3d6000fd5b505050506040513d60208110156124c657600080fd5b81019080805190602001909291905050509050600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561253b575060185442115b15612b49576060836040519080825280602002602001820160405280156125715781602001602082028038833980820191505090505b50905060005b8481101561276657600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125f257600080fd5b505afa158015612606573d6000803e3d6000fd5b505050506040513d602081101561261c57600080fd5b810190808051906020019092919050505093508373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126ac57600080fd5b505afa1580156126c0573d6000803e3d6000fd5b505050506040513d60208110156126d657600080fd5b81019080805190602001909291905050508282815181106126f357fe5b6020026020010181815250506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154141561275957612758843062093a80615090565b5b8080600101915050612577565b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156127d157600080fd5b505af11580156127e5573d6000803e3d6000fd5b5050505060608460405190808252806020026020018201604052801561281a5781602001602082028038833980820191505090505b50905060005b85811015612a0a576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561289d57600080fd5b505afa1580156128b1573d6000803e3d6000fd5b505050506040513d60208110156128c757600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561295757600080fd5b505afa15801561296b573d6000803e3d6000fd5b505050506040513d602081101561298157600080fd5b810190808051906020019092919050505083838151811061299e57fe5b60200260200101818152505060006129e58584815181106129bb57fe5b60200260200101518585815181106129cf57fe5b6020026020010151614e6a90919063ffffffff16565b905060008111156129fb576129fa82826151c3565b5b50508080600101915050612820565b50612b40600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f666c1806040518163ffffffff1660e01b815260040160206040518083038186803b158015612a7657600080fd5b505afa158015612a8a573d6000803e3d6000fd5b505050506040513d6020811015612aa057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663d3bf01d46040518163ffffffff1660e01b815260040160206040518083038186803b158015612af657600080fd5b505afa158015612b0a573d6000803e3d6000fd5b505050506040513d6020811015612b2057600080fd5b81019080805190602001909291905050504261500890919063ffffffff16565b60188190555050505b60005b601980549050811015612dc357600060198281548110612b6857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612b9e81614c05565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550612bed81614291565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612db557612c718682611072565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080600101915050612b4c565b5060008611612e3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b6000612e8e87600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461500890919063ffffffff16565b9050612e9988614a59565b81111580612ef45750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612f66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f45786365656473207374616b696e67206361702e00000000000000000000000081525060200191505060405180910390fd5b612fb5333089600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166155fc909392919063ffffffff16565b600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561308057600080fd5b505af1158015613094573d6000803e3d6000fd5b505050506040513d60208110156130aa57600080fd5b810190808051906020019092919050505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a694fc3a886040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561313157600080fd5b505af1158015613145573d6000803e3d6000fd5b5050505061315e8760095461500890919063ffffffff16565b60098190555080600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d886040518082815260200191505060405180910390a250505050506000548114613272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b505050565b6006818154811061328457fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000808282540192505081905550600080549050336000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf199e626040518163ffffffff1660e01b815260040160206040518083038186803b15801561333457600080fd5b505afa158015613348573d6000803e3d6000fd5b505050506040513d602081101561335e57600080fd5b81019080805190602001909291905050509050600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156133d3575060185442115b156139e1576060836040519080825280602002602001820160405280156134095781602001602082028038833980820191505090505b50905060005b848110156135fe57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561348a57600080fd5b505afa15801561349e573d6000803e3d6000fd5b505050506040513d60208110156134b457600080fd5b810190808051906020019092919050505093508373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561354457600080fd5b505afa158015613558573d6000803e3d6000fd5b505050506040513d602081101561356e57600080fd5b810190808051906020019092919050505082828151811061358b57fe5b6020026020010181815250506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414156135f1576135f0843062093a80615090565b5b808060010191505061340f565b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561366957600080fd5b505af115801561367d573d6000803e3d6000fd5b505050506060846040519080825280602002602001820160405280156136b25781602001602082028038833980820191505090505b50905060005b858110156138a2576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561373557600080fd5b505afa158015613749573d6000803e3d6000fd5b505050506040513d602081101561375f57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156137ef57600080fd5b505afa158015613803573d6000803e3d6000fd5b505050506040513d602081101561381957600080fd5b810190808051906020019092919050505083838151811061383657fe5b602002602001018181525050600061387d85848151811061385357fe5b602002602001015185858151811061386757fe5b6020026020010151614e6a90919063ffffffff16565b905060008111156138935761389282826151c3565b5b505080806001019150506136b8565b506139d8600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f666c1806040518163ffffffff1660e01b815260040160206040518083038186803b15801561390e57600080fd5b505afa158015613922573d6000803e3d6000fd5b505050506040513d602081101561393857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663d3bf01d46040518163ffffffff1660e01b815260040160206040518083038186803b15801561398e57600080fd5b505afa1580156139a2573d6000803e3d6000fd5b505050506040513d60208110156139b857600080fd5b81019080805190602001909291905050504261500890919063ffffffff16565b60188190555050505b60005b601980549050811015613c5b57600060198281548110613a0057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050613a3681614c05565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550613a8581614291565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614613c4d57613b098682611072565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5080806001019150506139e4565b5060005b601980549050811015613e5457600060198281548110613c7b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115613e45576000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ddf33828473ffffffffffffffffffffffffffffffffffffffff1661552b9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f540798df468d7b23d11f156fdb954cb19ad414d150722a7b6d55ba369dea792e836040518082815260200191505060405180910390a35b50508080600101915050613c5f565b50505050506000548114613ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b50565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613f785750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613fcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806159af6032913960400191505060405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154905086565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6140dc614dc2565b801515601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156141a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e64696461746520616c726561647920696e20746869732073746174650081525060200191505060405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc33803bef81a951b5fa7cc5c0244c93e628dcc19b4daa9bd05e910ae4dc571158282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a15050565b600460009054906101000a900460ff1681565b614287614dc2565b8060178190555050565b60006142df42600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154615702565b9050919050565b60185481565b6007602052816000526040600020602052806000526040600020600091509150505481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60175481565b600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461442c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018061597a6035913960400191505060405180910390fd5b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601981815481106145bb57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6145f2614dc2565b600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156146b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f74207769746864726177207374616b696e6720746f6b656e00000081525060200191505060405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401541461476e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e6e6f742077697468647261772072657761726420746f6b656e0000000081525060200191505060405180910390fd5b6147bb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff1661552b9092919063ffffffff16565b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900460ff1681565b60035481565b601a6020528060005260406000206000915054906101000a900460ff1681565b60155481565b61489933826123b5565b50565b60145481565b600061493b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614ef390919063ffffffff16565b9050919050565b6000601980549050905090565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806149f45750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b614a49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806159af6032913960400191505060405180910390fd5b614a54838383615090565b505050565b600080614a6583610e03565b9050614b86601654614b78670de0b6b3a7640000614b6a601454614b5c601754614b4e600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368b16a146040518163ffffffff1660e01b815260040160206040518083038186803b158015614af057600080fd5b505afa158015614b04573d6000803e3d6000fd5b505050506040513d6020811015614b1a57600080fd5b8101908080519060200190929190505050614b406015548c614ef390919063ffffffff16565b614ef390919063ffffffff16565b614ef390919063ffffffff16565b614f7990919063ffffffff16565b614f7990919063ffffffff16565b614f7990919063ffffffff16565b915050919050565b6008602052816000526040600020602052806000526040600020600091509150505481565b614bfb600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461173f565b614c036132b3565b565b6000806009541415614c5b57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501549050614d91565b614d8e614d3d600954614d2f670de0b6b3a7640000614d21600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614d13600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154614d058b614291565b614e6a90919063ffffffff16565b614ef390919063ffffffff16565b614ef390919063ffffffff16565b614f7990919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461500890919063ffffffff16565b90505b919050565b60165481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806159e1602f913960400191505060405180910390fd5b565b600082821115614ee2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b600080831415614f065760009050614f73565b6000828402905082848281614f1757fe5b0414614f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615a106021913960400191505060405180910390fd5b809150505b92915050565b6000808211614ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481614ffb57fe5b0490508091505092915050565b600080828401905083811015615086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60198390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015442106152ac57615261600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015482614f7990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555061540e565b600061530342600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614e6a90919063ffffffff16565b9050600061535c600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015483614ef390919063ffffffff16565b90506153c5600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546153b7838661500890919063ffffffff16565b614f7990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555050505b42600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506154aa600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101544261500890919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d816040518082815260200191505060405180910390a15050565b6155f7838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061571b565b505050565b6156fc848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061571b565b50505050565b60008183106157115781615713565b825b905092915050565b61573a8273ffffffffffffffffffffffffffffffffffffffff16615966565b6157ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106157fb57805182526020820191506020810190506020830392506157d8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461585d576040519150601f19603f3d011682016040523d82523d6000602084013e615862565b606091505b5091509150816158da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115615960578080602001905160208110156158f957600080fd5b810190808051906020019092919050505061595f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615a6d602a913960400191505060405180910390fd5b5b50505050565b600080823b90506000811191505091905056fe596f75206d757374206265206e6f6d696e61746564206265666f726520796f752063616e20616363657074206f776e6572736869704f6e6c7920746865206f776e6572206f72206f70657261746f72206d617920706572666f726d207468697320616374696f6e4f6e6c792074686520636f6e7472616374206f776e6572206d617920706572666f726d207468697320616374696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775468697320616374696f6e2063616e6e6f7420626520706572666f726d6564207768696c652074686520636f6e7472616374206973207061757365645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820b19d304755f1766282217ecd2e693465195fa4551e2c326bd5ada7a49b77f83764736f6c63430005110032000000000000000000000000da001323a345f0109a1b3a6570e4ac8d7f7f6593000000000000000000000000da0053f0befcbcac208a3f867bb243716734d809
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102695760003560e01c806370a0823111610151578063a694fc3a116100c3578063d176525e11610087578063d176525e14610c43578063e70b9e2714610c9b578063e9fad8ee14610d13578063f122977714610d1d578063f385cecb14610d75578063f4262b1114610d9357610269565b8063a694fc3a14610b13578063b625459d14610b41578063bcd1101414610b5f578063bf199e6214610bb7578063d0ed26ae14610bd557610269565b80638980f11f116101155780638980f11f146109c15780638da5cb5b14610a0f5780638dd9105314610a5957806391b4ded914610a7b5780639a30739114610a99578063a611e4dc14610af557610269565b806370a0823114610889578063729c1823146108e157806372f702f3146108ff57806379ba5097146109495780637bb7bed11461095357610269565b806337bd7f94116101ea578063558a7297116101ae578063558a7297146106fb5780635c975abb1461074b5780635dcb67371461076d578063638634ee1461079b5780636a0c9fa4146107f35780637035ab981461081157610269565b806337bd7f941461052e5780633d18b9121461059c5780633f695b45146105a657806348e5d9f81461060a57806353a47bb7146106b157610269565b80631c0b05d7116102315780631c0b05d7146103a2578063211dc32d146103ec5780632378bea6146104645780632e1a7d4d146104b25780632ee40908146104e057610269565b8063022e14bf1461026e578063111134cb146102b85780631627540c1461031057806316c38b3c1461035457806318160ddd14610384575b600080fd5b610276610ddd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fa600480360360208110156102ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e03565b6040518082815260200191505060405180910390f35b6103526004803603602081101561032657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ee6565b005b6103826004803603602081101561036a57600080fd5b81019080803515159060200190929190505050610f95565b005b61038c611042565b6040518082815260200191505060405180910390f35b6103aa61104c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61044e6004803603604081101561040257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611072565b6040518082815260200191505060405180910390f35b6104b06004803603604081101561047a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061120c565b005b6104de600480360360208110156104c857600080fd5b810190808035906020019092919050505061173f565b005b61052c600480360360408110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123b5565b005b61055a6004803603602081101561054457600080fd5b8101908080359060200190929190505050613277565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a46132b3565b005b610608600480360360408110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ed3565b005b61064c6004803603602081101561062057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614052565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b6106b96140ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107496004803603604081101561071157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506140d4565b005b61075361426c565b604051808215151515815260200191505060405180910390f35b6107996004803603602081101561078357600080fd5b810190808035906020019092919050505061427f565b005b6107dd600480360360208110156107b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614291565b6040518082815260200191505060405180910390f35b6107fb6142e6565b6040518082815260200191505060405180910390f35b6108736004803603604081101561082757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142ec565b6040518082815260200191505060405180910390f35b6108cb6004803603602081101561089f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614311565b6040518082815260200191505060405180910390f35b6108e961435a565b6040518082815260200191505060405180910390f35b610907614360565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610951614386565b005b61097f6004803603602081101561096957600080fd5b81019080803590602001909291905050506145ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a0d600480360360408110156109d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506145ea565b005b610a1761482a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a61614850565b604051808215151515815260200191505060405180910390f35b610a83614863565b6040518082815260200191505060405180910390f35b610adb60048036036020811015610aaf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614869565b604051808215151515815260200191505060405180910390f35b610afd614889565b6040518082815260200191505060405180910390f35b610b3f60048036036020811015610b2957600080fd5b810190808035906020019092919050505061488f565b005b610b4961489c565b6040518082815260200191505060405180910390f35b610ba160048036036020811015610b7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506148a2565b6040518082815260200191505060405180910390f35b610bbf614942565b6040518082815260200191505060405180910390f35b610c4160048036036060811015610beb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061494f565b005b610c8560048036036020811015610c5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614a59565b6040518082815260200191505060405180910390f35b610cfd60048036036040811015610cb157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614b8e565b6040518082815260200191505060405180910390f35b610d1b614bb3565b005b610d5f60048036036020811015610d3357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614c05565b6040518082815260200191505060405180910390f35b610d7d614d96565b6040518082815260200191505060405180910390f35b610d9b614d9c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663111134cb836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610ea457600080fd5b505afa158015610eb8573d6000803e3d6000fd5b505050506040513d6020811015610ece57600080fd5b81019080805190602001909291905050509050919050565b610eee614dc2565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b610f9d614dc2565b600460009054906101000a900460ff1615158115151415610fbd5761103f565b80600460006101000a81548160ff021916908315150217905550600460009054906101000a900460ff1615610ff457426003819055505b7f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5600460009054906101000a900460ff16604051808215151515815260200191505060405180910390a15b50565b6000600954905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611204600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111f6670de0b6b3a76400006111e861119a600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461118c89614c05565b614e6a90919063ffffffff16565b600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ef390919063ffffffff16565b614f7990919063ffffffff16565b61500890919063ffffffff16565b905092915050565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806112b15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806159af6032913960400191505060405180910390fd5b6000811161137c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f526577617264206475726174696f6e206d757374206265206e6f6e2d7a65726f81525060200191505060405180910390fd5b61138582614c05565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550600042600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156114c957600061146e42600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614e6a90919063ffffffff16565b90506114c5600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015482614ef390919063ffffffff16565b9150505b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611565600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015482614f7990919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550611600600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101544261500890919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555042600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055507fad2f86b01ed93b4b3a150d448c61a4f5d8d38075d3c0c64cc0a26fd6e1f4954583600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b60016000808282540192505081905550600080549050336000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf199e626040518163ffffffff1660e01b815260040160206040518083038186803b1580156117c057600080fd5b505afa1580156117d4573d6000803e3d6000fd5b505050506040513d60208110156117ea57600080fd5b81019080805190602001909291905050509050600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561185f575060185442115b15611e6d576060836040519080825280602002602001820160405280156118955781602001602082028038833980820191505090505b50905060005b84811015611a8a57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561191657600080fd5b505afa15801561192a573d6000803e3d6000fd5b505050506040513d602081101561194057600080fd5b810190808051906020019092919050505093508373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119d057600080fd5b505afa1580156119e4573d6000803e3d6000fd5b505050506040513d60208110156119fa57600080fd5b8101908080519060200190929190505050828281518110611a1757fe5b6020026020010181815250506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541415611a7d57611a7c843062093a80615090565b5b808060010191505061189b565b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611af557600080fd5b505af1158015611b09573d6000803e3d6000fd5b50505050606084604051908082528060200260200182016040528015611b3e5781602001602082028038833980820191505090505b50905060005b85811015611d2e576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611bc157600080fd5b505afa158015611bd5573d6000803e3d6000fd5b505050506040513d6020811015611beb57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c7b57600080fd5b505afa158015611c8f573d6000803e3d6000fd5b505050506040513d6020811015611ca557600080fd5b8101908080519060200190929190505050838381518110611cc257fe5b6020026020010181815250506000611d09858481518110611cdf57fe5b6020026020010151858581518110611cf357fe5b6020026020010151614e6a90919063ffffffff16565b90506000811115611d1f57611d1e82826151c3565b5b50508080600101915050611b44565b50611e64600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f666c1806040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9a57600080fd5b505afa158015611dae573d6000803e3d6000fd5b505050506040513d6020811015611dc457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663d3bf01d46040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1a57600080fd5b505afa158015611e2e573d6000803e3d6000fd5b505050506040513d6020811015611e4457600080fd5b81019080805190602001909291905050504261500890919063ffffffff16565b60188190555050505b60005b6019805490508110156120e757600060198281548110611e8c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611ec281614c05565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550611f1181614291565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146120d957611f958682611072565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080600101915050611e70565b506000861161215e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b61217386600954614e6a90919063ffffffff16565b6009819055506121cb86600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e6a90919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d876040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561228357600080fd5b505af1158015612297573d6000803e3d6000fd5b505050506122e83387600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661552b9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5876040518082815260200191505060405180910390a25050505060005481146123b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5050565b60016000808282540192505081905550600080549050600460009054906101000a900460ff1615612431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180615a31603c913960400191505060405180910390fd5b826000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf199e626040518163ffffffff1660e01b815260040160206040518083038186803b15801561249c57600080fd5b505afa1580156124b0573d6000803e3d6000fd5b505050506040513d60208110156124c657600080fd5b81019080805190602001909291905050509050600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561253b575060185442115b15612b49576060836040519080825280602002602001820160405280156125715781602001602082028038833980820191505090505b50905060005b8481101561276657600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125f257600080fd5b505afa158015612606573d6000803e3d6000fd5b505050506040513d602081101561261c57600080fd5b810190808051906020019092919050505093508373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126ac57600080fd5b505afa1580156126c0573d6000803e3d6000fd5b505050506040513d60208110156126d657600080fd5b81019080805190602001909291905050508282815181106126f357fe5b6020026020010181815250506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154141561275957612758843062093a80615090565b5b8080600101915050612577565b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156127d157600080fd5b505af11580156127e5573d6000803e3d6000fd5b5050505060608460405190808252806020026020018201604052801561281a5781602001602082028038833980820191505090505b50905060005b85811015612a0a576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561289d57600080fd5b505afa1580156128b1573d6000803e3d6000fd5b505050506040513d60208110156128c757600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561295757600080fd5b505afa15801561296b573d6000803e3d6000fd5b505050506040513d602081101561298157600080fd5b810190808051906020019092919050505083838151811061299e57fe5b60200260200101818152505060006129e58584815181106129bb57fe5b60200260200101518585815181106129cf57fe5b6020026020010151614e6a90919063ffffffff16565b905060008111156129fb576129fa82826151c3565b5b50508080600101915050612820565b50612b40600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f666c1806040518163ffffffff1660e01b815260040160206040518083038186803b158015612a7657600080fd5b505afa158015612a8a573d6000803e3d6000fd5b505050506040513d6020811015612aa057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663d3bf01d46040518163ffffffff1660e01b815260040160206040518083038186803b158015612af657600080fd5b505afa158015612b0a573d6000803e3d6000fd5b505050506040513d6020811015612b2057600080fd5b81019080805190602001909291905050504261500890919063ffffffff16565b60188190555050505b60005b601980549050811015612dc357600060198281548110612b6857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612b9e81614c05565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550612bed81614291565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612db557612c718682611072565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080600101915050612b4c565b5060008611612e3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b6000612e8e87600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461500890919063ffffffff16565b9050612e9988614a59565b81111580612ef45750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612f66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f45786365656473207374616b696e67206361702e00000000000000000000000081525060200191505060405180910390fd5b612fb5333089600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166155fc909392919063ffffffff16565b600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561308057600080fd5b505af1158015613094573d6000803e3d6000fd5b505050506040513d60208110156130aa57600080fd5b810190808051906020019092919050505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a694fc3a886040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561313157600080fd5b505af1158015613145573d6000803e3d6000fd5b5050505061315e8760095461500890919063ffffffff16565b60098190555080600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d886040518082815260200191505060405180910390a250505050506000548114613272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b505050565b6006818154811061328457fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000808282540192505081905550600080549050336000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf199e626040518163ffffffff1660e01b815260040160206040518083038186803b15801561333457600080fd5b505afa158015613348573d6000803e3d6000fd5b505050506040513d602081101561335e57600080fd5b81019080805190602001909291905050509050600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156133d3575060185442115b156139e1576060836040519080825280602002602001820160405280156134095781602001602082028038833980820191505090505b50905060005b848110156135fe57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561348a57600080fd5b505afa15801561349e573d6000803e3d6000fd5b505050506040513d60208110156134b457600080fd5b810190808051906020019092919050505093508373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561354457600080fd5b505afa158015613558573d6000803e3d6000fd5b505050506040513d602081101561356e57600080fd5b810190808051906020019092919050505082828151811061358b57fe5b6020026020010181815250506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414156135f1576135f0843062093a80615090565b5b808060010191505061340f565b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561366957600080fd5b505af115801561367d573d6000803e3d6000fd5b505050506060846040519080825280602002602001820160405280156136b25781602001602082028038833980820191505090505b50905060005b858110156138a2576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bb7bed1836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561373557600080fd5b505afa158015613749573d6000803e3d6000fd5b505050506040513d602081101561375f57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156137ef57600080fd5b505afa158015613803573d6000803e3d6000fd5b505050506040513d602081101561381957600080fd5b810190808051906020019092919050505083838151811061383657fe5b602002602001018181525050600061387d85848151811061385357fe5b602002602001015185858151811061386757fe5b6020026020010151614e6a90919063ffffffff16565b905060008111156138935761389282826151c3565b5b505080806001019150506136b8565b506139d8600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f666c1806040518163ffffffff1660e01b815260040160206040518083038186803b15801561390e57600080fd5b505afa158015613922573d6000803e3d6000fd5b505050506040513d602081101561393857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663d3bf01d46040518163ffffffff1660e01b815260040160206040518083038186803b15801561398e57600080fd5b505afa1580156139a2573d6000803e3d6000fd5b505050506040513d60208110156139b857600080fd5b81019080805190602001909291905050504261500890919063ffffffff16565b60188190555050505b60005b601980549050811015613c5b57600060198281548110613a0057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050613a3681614c05565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550613a8581614291565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614613c4d57613b098682611072565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5080806001019150506139e4565b5060005b601980549050811015613e5457600060198281548110613c7b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115613e45576000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ddf33828473ffffffffffffffffffffffffffffffffffffffff1661552b9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f540798df468d7b23d11f156fdb954cb19ad414d150722a7b6d55ba369dea792e836040518082815260200191505060405180910390a35b50508080600101915050613c5f565b50505050506000548114613ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b50565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613f785750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613fcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806159af6032913960400191505060405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154905086565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6140dc614dc2565b801515601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156141a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e64696461746520616c726561647920696e20746869732073746174650081525060200191505060405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc33803bef81a951b5fa7cc5c0244c93e628dcc19b4daa9bd05e910ae4dc571158282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a15050565b600460009054906101000a900460ff1681565b614287614dc2565b8060178190555050565b60006142df42600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154615702565b9050919050565b60185481565b6007602052816000526040600020602052806000526040600020600091509150505481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60175481565b600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461442c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018061597a6035913960400191505060405180910390fd5b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601981815481106145bb57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6145f2614dc2565b600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156146b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f74207769746864726177207374616b696e6720746f6b656e00000081525060200191505060405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401541461476e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e6e6f742077697468647261772072657761726420746f6b656e0000000081525060200191505060405180910390fd5b6147bb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff1661552b9092919063ffffffff16565b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900460ff1681565b60035481565b601a6020528060005260406000206000915054906101000a900460ff1681565b60155481565b61489933826123b5565b50565b60145481565b600061493b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614ef390919063ffffffff16565b9050919050565b6000601980549050905090565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806149f45750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b614a49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806159af6032913960400191505060405180910390fd5b614a54838383615090565b505050565b600080614a6583610e03565b9050614b86601654614b78670de0b6b3a7640000614b6a601454614b5c601754614b4e600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368b16a146040518163ffffffff1660e01b815260040160206040518083038186803b158015614af057600080fd5b505afa158015614b04573d6000803e3d6000fd5b505050506040513d6020811015614b1a57600080fd5b8101908080519060200190929190505050614b406015548c614ef390919063ffffffff16565b614ef390919063ffffffff16565b614ef390919063ffffffff16565b614f7990919063ffffffff16565b614f7990919063ffffffff16565b614f7990919063ffffffff16565b915050919050565b6008602052816000526040600020602052806000526040600020600091509150505481565b614bfb600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461173f565b614c036132b3565b565b6000806009541415614c5b57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501549050614d91565b614d8e614d3d600954614d2f670de0b6b3a7640000614d21600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614d13600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154614d058b614291565b614e6a90919063ffffffff16565b614ef390919063ffffffff16565b614ef390919063ffffffff16565b614f7990919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461500890919063ffffffff16565b90505b919050565b60165481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806159e1602f913960400191505060405180910390fd5b565b600082821115614ee2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b600080831415614f065760009050614f73565b6000828402905082848281614f1757fe5b0414614f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615a106021913960400191505060405180910390fd5b809150505b92915050565b6000808211614ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481614ffb57fe5b0490508091505092915050565b600080828401905083811015615086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60198390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015442106152ac57615261600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015482614f7990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555061540e565b600061530342600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614e6a90919063ffffffff16565b9050600061535c600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015483614ef390919063ffffffff16565b90506153c5600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546153b7838661500890919063ffffffff16565b614f7990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555050505b42600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506154aa600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101544261500890919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d816040518082815260200191505060405180910390a15050565b6155f7838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061571b565b505050565b6156fc848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061571b565b50505050565b60008183106157115781615713565b825b905092915050565b61573a8273ffffffffffffffffffffffffffffffffffffffff16615966565b6157ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106157fb57805182526020820191506020810190506020830392506157d8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461585d576040519150601f19603f3d011682016040523d82523d6000602084013e615862565b606091505b5091509150816158da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115615960578080602001905160208110156158f957600080fd5b810190808051906020019092919050505061595f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615a6d602a913960400191505060405180910390fd5b5b50505050565b600080823b90506000811191505091905056fe596f75206d757374206265206e6f6d696e61746564206265666f726520796f752063616e20616363657074206f776e6572736869704f6e6c7920746865206f776e6572206f72206f70657261746f72206d617920706572666f726d207468697320616374696f6e4f6e6c792074686520636f6e7472616374206f776e6572206d617920706572666f726d207468697320616374696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775468697320616374696f6e2063616e6e6f7420626520706572666f726d6564207768696c652074686520636f6e7472616374206973207061757365645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820b19d304755f1766282217ecd2e693465195fa4551e2c326bd5ada7a49b77f83764736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000da001323a345f0109a1b3a6570e4ac8d7f7f6593000000000000000000000000da0053f0befcbcac208a3f867bb243716734d809
-----Decoded View---------------
Arg [0] : _owner (address): 0xDA001323a345F0109A1B3A6570E4ac8D7f7F6593
Arg [1] : _stakingToken (address): 0xDA0053F0bEfCbcaC208A3f867BB243716734D809
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000da001323a345f0109a1b3a6570e4ac8d7f7f6593
Arg [1] : 000000000000000000000000da0053f0befcbcac208a3f867bb243716734d809
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.