Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x3f46639cc0d29b7bc80e20c8381656f66e7af02f63d249e910d3733f874bb586 | Deposit | (pending) | 30 hrs ago | IN | 0 ETH | (Pending) | |||
0x7f704dbe5a9c6a4eac17c61b22dae76123c507ba1ce3139d22230c81799e340b | Deposit | (pending) | 30 hrs ago | IN | 0 ETH | (Pending) | |||
Withdraw | 21252911 | 18 days ago | IN | 0 ETH | 0.00236236 | ||||
Harvest | 21252906 | 18 days ago | IN | 0 ETH | 0.00893179 | ||||
Withdraw | 21236543 | 20 days ago | IN | 0 ETH | 0.00201814 | ||||
Harvest | 21236537 | 20 days ago | IN | 0 ETH | 0.00582786 | ||||
Harvest | 21212483 | 23 days ago | IN | 0 ETH | 0.00291108 | ||||
Withdraw | 21187089 | 27 days ago | IN | 0 ETH | 0.00318834 | ||||
Withdraw | 21187089 | 27 days ago | IN | 0 ETH | 0.00626582 | ||||
Withdraw | 21186922 | 27 days ago | IN | 0 ETH | 0.01456336 | ||||
Withdraw | 21186802 | 27 days ago | IN | 0 ETH | 0.00356033 | ||||
Harvest | 21182378 | 27 days ago | IN | 0 ETH | 0.01717271 | ||||
Withdraw | 21134614 | 34 days ago | IN | 0 ETH | 0.00054306 | ||||
Harvest | 21134611 | 34 days ago | IN | 0 ETH | 0.0008368 | ||||
Harvest | 21100098 | 39 days ago | IN | 0 ETH | 0.00105258 | ||||
Withdraw | 21085306 | 41 days ago | IN | 0 ETH | 0.00062917 | ||||
Withdraw | 21084841 | 41 days ago | IN | 0 ETH | 0.00060261 | ||||
Harvest | 21084743 | 41 days ago | IN | 0 ETH | 0.00176113 | ||||
Withdraw | 21071136 | 43 days ago | IN | 0 ETH | 0.0007268 | ||||
Withdraw | 20996079 | 53 days ago | IN | 0 ETH | 0.0011314 | ||||
Withdraw | 20991680 | 54 days ago | IN | 0 ETH | 0.00245985 | ||||
Withdraw | 20979923 | 56 days ago | IN | 0 ETH | 0.00169324 | ||||
Harvest | 20979467 | 56 days ago | IN | 0 ETH | 0.00568407 | ||||
Withdraw | 20977430 | 56 days ago | IN | 0 ETH | 0.00399824 | ||||
Withdraw | 20902197 | 67 days ago | IN | 0 ETH | 0.00180395 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TimeWarpPool
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./access/Ownable.sol"; import "./interfaces/IERC20.sol"; import "./utils/token/SafeERC20.sol"; import "./StakingLocks.sol"; contract TimeWarpPool is Ownable, StakingLocks { event Deposit(LockType _lockType, uint256 _amount, uint256 _amountStacked); event Withdraw(uint256 _amount, uint256 _amountWithdraw); event Harvest(LockType _lockType, uint256 _amount, uint32 _lastRewardIndex); event Compound(LockType _lockType, uint256 _amount, uint32 _lastRewardIndex); event RewardPay(uint256 _amount, uint256 _accumulatedFee); using SafeERC20 for IERC20; IERC20 public erc20Deposit; IERC20 public erc20Reward; bool private initialized; bool private unlockAll; uint256 public accumulatedFee; uint256 public depositFeePercent = 0; uint256 public depositFeePrecision = 1000; uint256 public withdrawFeePercent = 0; uint256 public withdrawFeePrecision = 1000; uint8 public constant MAX_LOOPS = 100; uint256 public precision = 10000000000; uint32 public lastReward; struct Reward { uint256 amount; uint256 totalStacked; } // -------------- New -------------- mapping(address => LockType) public userLock; mapping(address => uint256) public userStacked; mapping(address => uint256) public expirationDeposit; mapping(address => uint32) public userLastReward; mapping(LockType => uint256) public totalStacked; mapping(LockType => mapping(uint32 => Reward)) public rewards; function init(address _erc20Deposit, address _erc20Reward) external onlyOwner { require(!initialized, "Initialized"); erc20Deposit = IERC20(_erc20Deposit); erc20Reward = IERC20(_erc20Reward); _initLocks(); initialized = true; } function setUnlockAll(bool _flag) external onlyOwner { unlockAll = _flag; } function setPrecision(uint256 _precision) external onlyOwner { precision = _precision; } function setDepositFee(uint256 _feePercent, uint256 _feePrecision) external onlyOwner { depositFeePercent = _feePercent; depositFeePrecision = _feePrecision; } function setWithdrawFee(uint256 _feePercent, uint256 _feePrecision) external onlyOwner { withdrawFeePercent = _feePercent; withdrawFeePrecision = _feePrecision; } function deposit(LockType _lockType, uint256 _amount, bool _comp) external { require(_amount > 0, "The amount of the deposit must not be zero"); require(erc20Deposit.allowance(_msgSender(), address(this)) >= _amount, "Not enough allowance"); LockType lastLock = userLock[_msgSender()]; require(lastLock == LockType.NULL || _lockType >= lastLock, "You cannot decrease the time of locking"); uint256 amountStacked; if (address(erc20Deposit) == address(erc20Reward)) { uint256 part = depositFeePercent * _amount / depositFeePrecision; amountStacked = _amount - part; accumulatedFee = accumulatedFee + part; } else { amountStacked = _amount; } erc20Deposit.safeTransferFrom(_msgSender(), address(this), _amount); if (_lockType >= lastLock) { (uint256 amountReward, uint32 lastRewardIndex) = getReward(_msgSender(), 0); require(lastRewardIndex == lastReward, "We cannot get reward in one transaction"); if (amountReward > 0) { if (_comp && address(erc20Deposit) == address(erc20Reward)) { _compound(lastLock, amountReward, lastRewardIndex); } else { _harvest(lastLock, amountReward, lastRewardIndex); } } } userLock[_msgSender()] = _lockType; if (lastLock == LockType.NULL || _lockType == lastLock) { // If we deposit to current stacking period, or make first deposit userStacked[_msgSender()] = userStacked[_msgSender()] + amountStacked; totalStacked[_lockType] = totalStacked[_lockType] + amountStacked; } else if (_lockType > lastLock) { // If we increase stacking period totalStacked[lastLock] = totalStacked[lastLock] - userStacked[_msgSender()]; userStacked[_msgSender()] = userStacked[_msgSender()] + amountStacked; totalStacked[_lockType] = totalStacked[_lockType] + userStacked[_msgSender()]; } userLastReward[_msgSender()] = lastReward; if (lastLock == LockType.NULL || _lockType > lastLock) { // If we have first deposit, or increase lock time expirationDeposit[_msgSender()] = block.timestamp + locks[_lockType].period; } emit Deposit(_lockType, _amount, amountStacked); } function withdraw(uint256 amount) external { require(userStacked[_msgSender()] >= amount, "Withdrawal amount is more than balance"); require(userLock[_msgSender()] != LockType.NULL, "You do not have locked tokens"); require( block.timestamp > expirationDeposit[_msgSender()] || unlockAll, "Expiration time of the deposit is not over" ); (uint256 amountReward, uint32 lastRewardIndex) = getReward(_msgSender(), 0); require(lastRewardIndex == lastReward, "We cannot get reward in one transaction"); if (amountReward > 0) { _harvest(userLock[_msgSender()], amountReward, lastRewardIndex); } uint256 amountWithdraw; if (address(erc20Deposit) == address(erc20Reward)) { uint256 part = withdrawFeePercent * amount / withdrawFeePrecision; amountWithdraw = amount - part; accumulatedFee = accumulatedFee + part; } else { amountWithdraw = amount; } totalStacked[userLock[_msgSender()]] = totalStacked[userLock[_msgSender()]] - amount; userStacked[_msgSender()] = userStacked[_msgSender()] - amount; if (userStacked[_msgSender()] == 0) { userLock[_msgSender()] = LockType.NULL; } erc20Deposit.safeTransfer(_msgSender(), amountWithdraw); emit Withdraw(amount, amountWithdraw); } function reward(uint256 amount) external onlyOwner { require(amount > 0, "The amount of the reward must not be zero"); require(erc20Reward.allowance(_msgSender(), address(this)) >= amount, "Not enough allowance"); erc20Reward.safeTransferFrom(_msgSender(), address(this), amount); uint256 _stakedWithMultipliers = stakedWithMultipliers(); uint256 amountWithAccumFee = address(erc20Deposit) == address(erc20Reward) ? amount + accumulatedFee : amount; uint256 distributed; uint32 _lastReward = lastReward + 1; for (uint8 i = 0; i < lockTypes.length; i++) { if (i == lockTypes.length - 1) { uint256 remainder = amountWithAccumFee - distributed; rewards[lockTypes[i]][_lastReward] = Reward( remainder, totalStacked[lockTypes[i]] ); break; } uint256 staked = stakedWithMultiplier(lockTypes[i]); uint256 amountPart = staked * precision * amountWithAccumFee / _stakedWithMultipliers / precision; rewards[lockTypes[i]][_lastReward] = Reward( amountPart, totalStacked[lockTypes[i]] ); distributed += amountPart; } lastReward = _lastReward; emit RewardPay(amount, accumulatedFee); accumulatedFee = 0; } function compound() public { require(userLock[_msgSender()] != LockType.NULL, "You do not have locked tokens"); require(address(erc20Deposit) == address(erc20Reward), "Method not available"); require(userLastReward[_msgSender()] != lastReward, "You have no accumulated reward"); (uint256 amountReward, uint32 lastRewardIndex) = getReward(_msgSender(), 0); _compound(userLock[_msgSender()], amountReward, lastRewardIndex); } function harvest() public { require(userLock[_msgSender()] != LockType.NULL, "You do not have locked tokens"); require(userLastReward[_msgSender()] != lastReward, "You have no accumulated reward"); (uint256 amountReward, uint32 lastRewardIndex) = getReward(_msgSender(), 0); _harvest(userLock[_msgSender()], amountReward, lastRewardIndex); } function _compound(LockType _userLock, uint256 _amountReward, uint32 lastRewardIndex) internal { userStacked[_msgSender()] = userStacked[_msgSender()] + _amountReward; totalStacked[_userLock] = totalStacked[_userLock] + _amountReward; userLastReward[_msgSender()] = lastRewardIndex; emit Compound(_userLock, _amountReward, lastRewardIndex); } function _harvest(LockType _userLock, uint256 _amountReward, uint32 lastRewardIndex) internal { userLastReward[_msgSender()] = lastRewardIndex; erc20Reward.safeTransfer(_msgSender(), _amountReward); emit Harvest(_userLock, _amountReward, lastRewardIndex); } function stakedWithMultipliers() public view returns (uint256) { uint256 reserves; for (uint8 i = 0; i < lockTypes.length; i++) { reserves = reserves + stakedWithMultiplier(lockTypes[i]); } return reserves; } function totalStakedInPools() public view returns (uint256) { uint256 reserves; for (uint8 i = 0; i < lockTypes.length; i++) { reserves = reserves + totalStacked[lockTypes[i]]; } return reserves; } function stakedWithMultiplier(LockType _lockType) public view returns (uint256) { return totalStacked[_lockType] * locks[_lockType].multiplicator / 10; } function getReward(address _user, uint32 _lastRewardIndex) public view returns (uint256 amount, uint32 lastRewardIndex) { uint256 _amount; if (userLock[_user] == LockType.NULL) { return (0, lastReward); } uint32 rewardIterator = _lastRewardIndex != 0 ? _lastRewardIndex : userLastReward[_user]; uint32 maxRewardIterator = lastReward - rewardIterator > MAX_LOOPS ? rewardIterator + MAX_LOOPS : lastReward; while (rewardIterator < maxRewardIterator) { rewardIterator++; Reward memory reward = rewards[userLock[_user]][rewardIterator]; _amount = _amount + (userStacked[_user] * precision * reward.amount / reward.totalStacked / precision); } lastRewardIndex = rewardIterator; amount = _amount; } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; contract StakingLocks { enum LockType { NULL, HOURS1, DAYS30, DAYS180, DAYS365, DAYS730} LockType[5] lockTypes = [LockType.HOURS1, LockType.DAYS30, LockType.DAYS180, LockType.DAYS365, LockType.DAYS730]; struct LockData { uint32 period; uint8 multiplicator; // 11 factor is equal 1.1 } mapping(LockType => LockData) public locks; // All our locks function _initLocks() internal { locks[LockType.HOURS1] = LockData(1 hours, 10); locks[LockType.DAYS30] = LockData(30 days, 12); locks[LockType.DAYS180] = LockData(180 days, 13); locks[LockType.DAYS365] = LockData(365 days, 15); locks[LockType.DAYS730] = LockData(730 days, 20); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on 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; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../interfaces/IERC20.sol"; import "../Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { 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)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ 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) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - 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. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "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"); } } }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": false, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_lastRewardIndex","type":"uint32"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amountStacked","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_lastRewardIndex","type":"uint32"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_accumulatedFee","type":"uint256"}],"name":"RewardPay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amountWithdraw","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAX_LOOPS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accumulatedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_comp","type":"bool"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFeePrecision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20Deposit","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20Reward","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"expirationDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint32","name":"_lastRewardIndex","type":"uint32"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"lastRewardIndex","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Deposit","type":"address"},{"internalType":"address","name":"_erc20Reward","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastReward","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"","type":"uint8"}],"name":"locks","outputs":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint8","name":"multiplicator","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"precision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"","type":"uint8"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalStacked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"},{"internalType":"uint256","name":"_feePrecision","type":"uint256"}],"name":"setDepositFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_precision","type":"uint256"}],"name":"setPrecision","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setUnlockAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"},{"internalType":"uint256","name":"_feePrecision","type":"uint256"}],"name":"setWithdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"}],"name":"stakedWithMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedWithMultipliers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"","type":"uint8"}],"name":"totalStacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedInPools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastReward","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLock","outputs":[{"internalType":"enum StakingLocks.LockType","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userStacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeePrecision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060a00160405280600160058111156200004a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111562000083577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160026005811115620000c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115620000fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600360058111156200013c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111562000175577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160046005811115620001b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115620001ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020016005808111156200022d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111562000266577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81525060019060056200027b92919062000367565b5060006006556103e860075560006008556103e86009556402540be400600a55348015620002a857600080fd5b506000620002bb6200035f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200045d565b600033905090565b826005601f016020900481019282156200042b5791602002820160005b83821115620003fa57835183826101000a81548160ff02191690836005811115620003d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550926020019260010160208160000104928301926001030262000384565b8015620004295782816101000a81549060ff0219169055600101602081600001049283019260010302620003fa565b505b5090506200043a91906200043e565b5090565b5b80821115620004595760008160009055506001016200043f565b5090565b6155ef806200046d6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80639e3cf02e1161011a578063d03eb861116100ad578063e8e85feb1161007c578063e8e85feb146105e2578063f09a4016146105fe578063f2fde38b1461061a578063f69e204614610636578063f8ce31641461064057610206565b8063d03eb86114610533578063d17f742a14610564578063d3b5dc3b14610594578063e3139118146105b257610206565b8063c960e3ac116100e9578063c960e3ac146104a9578063c9b17149146104d9578063ca8689ee146104f7578063cc1252ae1461051557610206565b80639e3cf02e14610435578063a242dff214610453578063a9fb763c14610471578063b07d29c71461048d57610206565b8063495ef7051161019d578063715018a61161016c578063715018a61461038f578063725fd1a21461039957806388c10f2a146103c95780638d50f59f146103f95780638da5cb5b1461041757610206565b8063495ef705146102f45780635617a6e8146103125780635dd86241146103425780637143e8c01461035e57610206565b80632e1a7d4d116101d95780632e1a7d4d1461029257806337a2eb71146102ae5780634641257d146102cc578063469815c0146102d657610206565b8063100281591461020b578063176f832e1461023c57806322f7efcb146102585780632c686a9414610274575b600080fd5b6102256004803603810190610220919061467d565b61065e565b6040516102339291906150fd565b60405180910390f35b610256600480360381019061025191906146b9565b61068f565b005b610272600480360381019061026d919061462e565b610715565b005b61027c611634565b60405161028991906150e2565b60405180910390f35b6102ac60048036038101906102a791906146b9565b61163a565b005b6102b6611ddf565b6040516102c39190615193565b60405180910390f35b6102d4611de4565b005b6102de61201d565b6040516102eb91906150e2565b60405180910390f35b6102fc61212d565b60405161030991906150e2565b60405180910390f35b61032c60048036038101906103279190614512565b612133565b6040516103399190614e37565b60405180910390f35b61035c6004803603810190610357919061470b565b612153565b005b61037860048036038101906103739190614577565b6121e1565b604051610386929190615126565b60405180910390f35b61039761255b565b005b6103b360048036038101906103ae9190614605565b612695565b6040516103c091906150e2565b60405180910390f35b6103e360048036038101906103de9190614512565b6126ad565b6040516103f091906150e2565b60405180910390f35b6104016126c5565b60405161040e9190614e1c565b60405180910390f35b61041f6126eb565b60405161042c9190614d78565b60405180910390f35b61043d612714565b60405161044a9190614e1c565b60405180910390f35b61045b61273a565b60405161046891906150e2565b60405180910390f35b61048b600480360381019061048691906146b9565b612740565b005b6104a760048036038101906104a291906145b3565b612f51565b005b6104c360048036038101906104be9190614605565b612fea565b6040516104d091906150e2565b60405180910390f35b6104e1613124565b6040516104ee919061514f565b60405180910390f35b6104ff61313a565b60405161050c91906150e2565b60405180910390f35b61051d6131cf565b60405161052a91906150e2565b60405180910390f35b61054d60048036038101906105489190614605565b6131d5565b60405161055b92919061516a565b60405180910390f35b61057e60048036038101906105799190614512565b613216565b60405161058b919061514f565b60405180910390f35b61059c613239565b6040516105a991906150e2565b60405180910390f35b6105cc60048036038101906105c79190614512565b61323f565b6040516105d991906150e2565b60405180910390f35b6105fc60048036038101906105f7919061470b565b613257565b005b6106186004803603810190610613919061453b565b6132e5565b005b610634600480360381019061062f9190614512565b61345a565b005b61063e613603565b005b6106486138ee565b60405161065591906150e2565b60405180910390f35b6011602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b6106976138f4565b73ffffffffffffffffffffffffffffffffffffffff166106b56126eb565b73ffffffffffffffffffffffffffffffffffffffff161461070b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070290614fc2565b60405180910390fd5b80600a8190555050565b60008211610758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074f906150c2565b60405180910390fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e61079f6138f4565b306040518363ffffffff1660e01b81526004016107bd929190614d93565b60206040518083038186803b1580156107d557600080fd5b505afa1580156107e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080d91906146e2565b101561084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084590615002565b60405180910390fd5b6000600c600061085c6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060058111156108e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816005811115610919577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14806109955750806005811115610959577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b846005811115610992577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b10155b6109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90614f82565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610a9557600060075485600654610a6191906152a1565b610a6b9190615270565b90508085610a7991906152fb565b915080600554610a8991906151e0565b60058190555050610a99565b8390505b610aef610aa46138f4565b3086600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166138fc909392919063ffffffff16565b816005811115610b28577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115610b61577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b10610c8957600080610b7b610b746138f4565b60006121e1565b91509150600b60009054906101000a900463ffffffff1663ffffffff168163ffffffff1614610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690614ee2565b60405180910390fd5b6000821115610c8657848015610c645750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610c7957610c74848383613985565b610c85565b610c84848383613bdc565b5b5b50505b84600c6000610c966138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836005811115610d18577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060006005811115610d57577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b826005811115610d90577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1480610e0b5750816005811115610dd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115610e09577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b15610fc75780600d6000610e1d6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e6291906151e0565b600d6000610e6e6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060106000876005811115610eea577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115610f22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054610f3b91906151e0565b60106000876005811115610f78577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115610fb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002081905550611395565b816005811115611000577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115611039577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b111561139457600d600061104b6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008460058111156110c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156110fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000205461111491906152fb565b60106000846005811115611151577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611189577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555080600d60006111a86138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ed91906151e0565b600d60006111f96138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60006112436138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008760058111156112bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156112f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000205461130c91906151e0565b60106000876005811115611349577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611381577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055505b5b600b60009054906101000a900463ffffffff16600f60006113b46138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555060006005811115611446577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b82600581111561147f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14806114fa57508160058111156114bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560058111156114f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b115b156115f2576002600086600581111561153c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611574577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16426115a791906151e0565b600e60006115b36138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b7fd42bb066022bc335a7416ea93e58076c615424965740cdeb2263132458823b1885858360405161162593929190614e52565b60405180910390a15050505050565b60075481565b80600d60006116476138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba906150a2565b60405180910390fd5b600060058111156116fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600c60006117096138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611789577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190614fe2565b60405180910390fd5b600e60006117d66138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442118061182a5750600460159054906101000a900460ff165b611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186090614f62565b60405180910390fd5b60008061187e6118776138f4565b60006121e1565b91509150600b60009054906101000a900463ffffffff1663ffffffff168163ffffffff16146118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990614ee2565b60405180910390fd5b600082111561194a57611949600c60006118fa6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168383613bdc565b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a0b576000600954856008546119d791906152a1565b6119e19190615270565b905080856119ef91906152fb565b9150806005546119ff91906151e0565b60058190555050611a0f565b8390505b8360106000600c6000611a206138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611aa0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611ad8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054611af191906152fb565b60106000600c6000611b016138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611b81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611bb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555083600d6000611bd86138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c1d91906152fb565b600d6000611c296138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600d6000611c756138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611d4c576000600c6000611cc46138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836005811115611d46577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055505b611da0611d576138f4565b82600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cd59092919063ffffffff16565b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c88482604051611dd19291906150fd565b60405180910390a150505050565b606481565b60006005811115611e1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600c6000611e2a6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611eaa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290614fe2565b60405180910390fd5b600b60009054906101000a900463ffffffff1663ffffffff16600f6000611f106138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff161415611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990615062565b60405180910390fd5b600080611fb7611fb06138f4565b60006121e1565b91509150612019600c6000611fca6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168383613bdc565b5050565b60008060005b60058160ff161015612125576010600060018360ff1660058110612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660058111156120be577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156120f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020548261211091906151e0565b9150808061211d90615471565b915050612023565b508091505090565b60085481565b600c6020528060005260406000206000915054906101000a900460ff1681565b61215b6138f4565b73ffffffffffffffffffffffffffffffffffffffff166121796126eb565b73ffffffffffffffffffffffffffffffffffffffff16146121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c690614fc2565b60405180910390fd5b81600681905550806007819055505050565b600080600080600581111561221f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660058111156122a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156122c9576000600b60009054906101000a900463ffffffff169250925050612554565b6000808563ffffffff16141561232e57600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16612330565b845b90506000606460ff1682600b60009054906101000a900463ffffffff16612357919061532f565b63ffffffff161161237a57600b60009054906101000a900463ffffffff1661238b565b606460ff168261238a9190615236565b5b90505b8063ffffffff168263ffffffff16101561254a5781806123ad90615444565b925050600060116000600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600581111561243b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612473577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008463ffffffff1663ffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050600a5481602001518260000151600a54600d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251991906152a1565b61252391906152a1565b61252d9190615270565b6125379190615270565b8461254291906151e0565b93505061238e565b8193508294505050505b9250929050565b6125636138f4565b73ffffffffffffffffffffffffffffffffffffffff166125816126eb565b73ffffffffffffffffffffffffffffffffffffffff16146125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614fc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60106020528060005260406000206000915090505481565b600e6020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6127486138f4565b73ffffffffffffffffffffffffffffffffffffffff166127666126eb565b73ffffffffffffffffffffffffffffffffffffffff16146127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b390614fc2565b60405180910390fd5b600081116127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f690614fa2565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6128466138f4565b306040518363ffffffff1660e01b8152600401612864929190614d93565b60206040518083038186803b15801561287c57600080fd5b505afa158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b491906146e2565b10156128f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ec90615002565b60405180910390fd5b61294b6129006138f4565b3083600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166138fc909392919063ffffffff16565b600061295561313a565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d657826129e5565b600554836129e491906151e0565b5b90506000806001600b60009054906101000a900463ffffffff16612a099190615236565b905060005b60058160ff161015612ee55760016005612a2891906152fb565b8160ff161415612c3b5760008385612a4091906152fb565b905060405180604001604052808281526020016010600060018660ff1660058110612a94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612ae2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612b1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020548152506011600060018560ff1660058110612b6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612bbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612bf3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008563ffffffff1663ffffffff168152602001908152602001600020600082015181600001556020820151816001015590505050612ee5565b6000612c9860018360ff1660058110612c7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff16612fea565b90506000600a548787600a5485612caf91906152a1565b612cb991906152a1565b612cc39190615270565b612ccd9190615270565b905060405180604001604052808281526020016010600060018760ff1660058110612d21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612da7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020548152506011600060018660ff1660058110612dfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612e48577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612e80577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508085612ece91906151e0565b945050508080612edd90615471565b915050612a0e565b5080600b60006101000a81548163ffffffff021916908363ffffffff1602179055507f511bb6e9e69d3477c8790b56d57c156144c962089ae6cd11d828109fb56cffe285600554604051612f3a9291906150fd565b60405180910390a160006005819055505050505050565b612f596138f4565b73ffffffffffffffffffffffffffffffffffffffff16612f776126eb565b73ffffffffffffffffffffffffffffffffffffffff1614612fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc490614fc2565b60405180910390fd5b80600460156101000a81548160ff02191690831515021790555050565b6000600a6002600084600581111561302b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613063577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060000160049054906101000a900460ff1660ff16601060008560058111156130c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156130fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000205461311391906152a1565b61311d9190615270565b9050919050565b600b60009054906101000a900463ffffffff1681565b60008060005b60058160ff1610156131c7576131a760018260ff166005811061318c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff16612fea565b826131b291906151e0565b915080806131bf90615471565b915050613140565b508091505090565b60065481565b60026020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900460ff16905082565b600f6020528060005260406000206000915054906101000a900463ffffffff1681565b600a5481565b600d6020528060005260406000206000915090505481565b61325f6138f4565b73ffffffffffffffffffffffffffffffffffffffff1661327d6126eb565b73ffffffffffffffffffffffffffffffffffffffff16146132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ca90614fc2565b60405180910390fd5b81600881905550806009819055505050565b6132ed6138f4565b73ffffffffffffffffffffffffffffffffffffffff1661330b6126eb565b73ffffffffffffffffffffffffffffffffffffffff1614613361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335890614fc2565b60405180910390fd5b600460149054906101000a900460ff16156133b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a890615042565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061343b613d5b565b6001600460146101000a81548160ff0219169083151502179055505050565b6134626138f4565b73ffffffffffffffffffffffffffffffffffffffff166134806126eb565b73ffffffffffffffffffffffffffffffffffffffff16146134d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cd90614fc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353d90614f02565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600581111561363d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600c60006136496138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660058111156136c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370190614fe2565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146137bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b390614f22565b60405180910390fd5b600b60009054906101000a900463ffffffff1663ffffffff16600f60006137e16138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff161415613873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386a90615062565b60405180910390fd5b6000806138886138816138f4565b60006121e1565b915091506138ea600c600061389b6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168383613985565b5050565b60055481565b600033905090565b61397f846323b872dd60e01b85858560405160240161391d93929190614dbc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614212565b50505050565b81600d60006139926138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d791906151e0565b600d60006139e36138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160106000856005811115613a5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613a97577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054613ab091906151e0565b60106000856005811115613aed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613b25577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555080600f6000613b446138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055507f99a2ce12b0e009e5696a913c2dd72b3b444cbf1741ffd3a9f241b9d71b364f23838383604051613bcf93929190614e89565b60405180910390a1505050565b80600f6000613be96138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550613c95613c4c6138f4565b83600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cd59092919063ffffffff16565b7f1cba73c85d3b8253c47ae88a86a3dce6e18d417d06ddbc156faff7a764041e2d838383604051613cc893929190614e89565b60405180910390a1505050565b613d568363a9059cbb60e01b8484604051602401613cf4929190614df3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614212565b505050565b6040518060400160405280610e1063ffffffff168152602001600a60ff168152506002600060016005811115613dba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613df2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff160217905550905050604051806040016040528062278d0063ffffffff168152602001600c60ff168152506002600060026005811115613eab577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613ee3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff160217905550905050604051806040016040528062ed4e0063ffffffff168152602001600d60ff168152506002600060036005811115613f9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613fd4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff16021790555090505060405180604001604052806301e1338063ffffffff168152602001600f60ff16815250600260006004600581111561408e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156140c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff16021790555090505060405180604001604052806303c2670063ffffffff168152602001601460ff168152506002600060058081111561417f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156141b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff160217905550905050565b6000614274826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166142d99092919063ffffffff16565b90506000815111156142d4578080602001905181019061429491906145dc565b6142d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142ca90615082565b60405180910390fd5b5b505050565b60606142e884846000856142f1565b90509392505050565b606082471015614336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432d90614f42565b60405180910390fd5b61433f85614405565b61437e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161437590615022565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516143a79190614d61565b60006040518083038185875af1925050503d80600081146143e4576040519150601f19603f3d011682016040523d82523d6000602084013e6143e9565b606091505b50915091506143f9828286614418565b92505050949350505050565b600080823b905060008111915050919050565b6060831561442857829050614478565b60008351111561443b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161446f9190614ec0565b60405180910390fd5b9392505050565b60008135905061448e8161554d565b92915050565b6000813590506144a381615564565b92915050565b6000815190506144b881615564565b92915050565b6000813590506144cd8161557b565b92915050565b6000813590506144e28161558b565b92915050565b6000815190506144f78161558b565b92915050565b60008135905061450c816155a2565b92915050565b60006020828403121561452457600080fd5b60006145328482850161447f565b91505092915050565b6000806040838503121561454e57600080fd5b600061455c8582860161447f565b925050602061456d8582860161447f565b9150509250929050565b6000806040838503121561458a57600080fd5b60006145988582860161447f565b92505060206145a9858286016144fd565b9150509250929050565b6000602082840312156145c557600080fd5b60006145d384828501614494565b91505092915050565b6000602082840312156145ee57600080fd5b60006145fc848285016144a9565b91505092915050565b60006020828403121561461757600080fd5b6000614625848285016144be565b91505092915050565b60008060006060848603121561464357600080fd5b6000614651868287016144be565b9350506020614662868287016144d3565b925050604061467386828701614494565b9150509250925092565b6000806040838503121561469057600080fd5b600061469e858286016144be565b92505060206146af858286016144fd565b9150509250929050565b6000602082840312156146cb57600080fd5b60006146d9848285016144d3565b91505092915050565b6000602082840312156146f457600080fd5b6000614702848285016144e8565b91505092915050565b6000806040838503121561471e57600080fd5b600061472c858286016144d3565b925050602061473d858286016144d3565b9150509250929050565b61475081615363565b82525050565b6000614761826151ae565b61476b81856151c4565b935061477b818560208601615411565b80840191505092915050565b614790816153db565b82525050565b61479f816153ff565b82525050565b60006147b0826151b9565b6147ba81856151cf565b93506147ca818560208601615411565b6147d381615528565b840191505092915050565b60006147eb6027836151cf565b91507f57652063616e6e6f74206765742072657761726420696e206f6e65207472616e60008301527f73616374696f6e000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148516026836151cf565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148b76014836151cf565b91507f4d6574686f64206e6f7420617661696c61626c650000000000000000000000006000830152602082019050919050565b60006148f76026836151cf565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061495d602a836151cf565b91507f45787069726174696f6e2074696d65206f6620746865206465706f736974206960008301527f73206e6f74206f766572000000000000000000000000000000000000000000006020830152604082019050919050565b60006149c36027836151cf565b91507f596f752063616e6e6f74206465637265617365207468652074696d65206f662060008301527f6c6f636b696e67000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a296029836151cf565b91507f54686520616d6f756e74206f662074686520726577617264206d757374206e6f60008301527f74206265207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a8f6020836151cf565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614acf601d836151cf565b91507f596f7520646f206e6f742068617665206c6f636b656420746f6b656e730000006000830152602082019050919050565b6000614b0f6014836151cf565b91507f4e6f7420656e6f75676820616c6c6f77616e63650000000000000000000000006000830152602082019050919050565b6000614b4f601d836151cf565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614b8f600b836151cf565b91507f496e697469616c697a65640000000000000000000000000000000000000000006000830152602082019050919050565b6000614bcf601e836151cf565b91507f596f752068617665206e6f20616363756d756c617465642072657761726400006000830152602082019050919050565b6000614c0f602a836151cf565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c756026836151cf565b91507f5769746864726177616c20616d6f756e74206973206d6f7265207468616e206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614cdb602a836151cf565b91507f54686520616d6f756e74206f6620746865206465706f736974206d757374206e60008301527f6f74206265207a65726f000000000000000000000000000000000000000000006020830152604082019050919050565b614d3d816153b4565b82525050565b614d4c816153be565b82525050565b614d5b816153ce565b82525050565b6000614d6d8284614756565b915081905092915050565b6000602082019050614d8d6000830184614747565b92915050565b6000604082019050614da86000830185614747565b614db56020830184614747565b9392505050565b6000606082019050614dd16000830186614747565b614dde6020830185614747565b614deb6040830184614d34565b949350505050565b6000604082019050614e086000830185614747565b614e156020830184614d34565b9392505050565b6000602082019050614e316000830184614787565b92915050565b6000602082019050614e4c6000830184614796565b92915050565b6000606082019050614e676000830186614796565b614e746020830185614d34565b614e816040830184614d34565b949350505050565b6000606082019050614e9e6000830186614796565b614eab6020830185614d34565b614eb86040830184614d43565b949350505050565b60006020820190508181036000830152614eda81846147a5565b905092915050565b60006020820190508181036000830152614efb816147de565b9050919050565b60006020820190508181036000830152614f1b81614844565b9050919050565b60006020820190508181036000830152614f3b816148aa565b9050919050565b60006020820190508181036000830152614f5b816148ea565b9050919050565b60006020820190508181036000830152614f7b81614950565b9050919050565b60006020820190508181036000830152614f9b816149b6565b9050919050565b60006020820190508181036000830152614fbb81614a1c565b9050919050565b60006020820190508181036000830152614fdb81614a82565b9050919050565b60006020820190508181036000830152614ffb81614ac2565b9050919050565b6000602082019050818103600083015261501b81614b02565b9050919050565b6000602082019050818103600083015261503b81614b42565b9050919050565b6000602082019050818103600083015261505b81614b82565b9050919050565b6000602082019050818103600083015261507b81614bc2565b9050919050565b6000602082019050818103600083015261509b81614c02565b9050919050565b600060208201905081810360008301526150bb81614c68565b9050919050565b600060208201905081810360008301526150db81614cce565b9050919050565b60006020820190506150f76000830184614d34565b92915050565b60006040820190506151126000830185614d34565b61511f6020830184614d34565b9392505050565b600060408201905061513b6000830185614d34565b6151486020830184614d43565b9392505050565b60006020820190506151646000830184614d43565b92915050565b600060408201905061517f6000830185614d43565b61518c6020830184614d52565b9392505050565b60006020820190506151a86000830184614d52565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006151eb826153b4565b91506151f6836153b4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561522b5761522a61549b565b5b828201905092915050565b6000615241826153be565b915061524c836153be565b92508263ffffffff038211156152655761526461549b565b5b828201905092915050565b600061527b826153b4565b9150615286836153b4565b925082615296576152956154ca565b5b828204905092915050565b60006152ac826153b4565b91506152b7836153b4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152f0576152ef61549b565b5b828202905092915050565b6000615306826153b4565b9150615311836153b4565b9250828210156153245761532361549b565b5b828203905092915050565b600061533a826153be565b9150615345836153be565b9250828210156153585761535761549b565b5b828203905092915050565b600061536e82615394565b9050919050565b60008115159050919050565b600081905061538f82615539565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006153e6826153ed565b9050919050565b60006153f882615394565b9050919050565b600061540a82615381565b9050919050565b60005b8381101561542f578082015181840152602081019050615414565b8381111561543e576000848401525b50505050565b600061544f826153be565b915063ffffffff8214156154665761546561549b565b5b600182019050919050565b600061547c826153ce565b915060ff8214156154905761548f61549b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000601f19601f8301169050919050565b6006811061554a576155496154f9565b5b50565b61555681615363565b811461556157600080fd5b50565b61556d81615375565b811461557857600080fd5b50565b6006811061558857600080fd5b50565b615594816153b4565b811461559f57600080fd5b50565b6155ab816153be565b81146155b657600080fd5b5056fea26469706673582212208cec3afe26269598b8d05cc4769d297cc2d36a1be60c600257e5b4bdca5e72fd64736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c80639e3cf02e1161011a578063d03eb861116100ad578063e8e85feb1161007c578063e8e85feb146105e2578063f09a4016146105fe578063f2fde38b1461061a578063f69e204614610636578063f8ce31641461064057610206565b8063d03eb86114610533578063d17f742a14610564578063d3b5dc3b14610594578063e3139118146105b257610206565b8063c960e3ac116100e9578063c960e3ac146104a9578063c9b17149146104d9578063ca8689ee146104f7578063cc1252ae1461051557610206565b80639e3cf02e14610435578063a242dff214610453578063a9fb763c14610471578063b07d29c71461048d57610206565b8063495ef7051161019d578063715018a61161016c578063715018a61461038f578063725fd1a21461039957806388c10f2a146103c95780638d50f59f146103f95780638da5cb5b1461041757610206565b8063495ef705146102f45780635617a6e8146103125780635dd86241146103425780637143e8c01461035e57610206565b80632e1a7d4d116101d95780632e1a7d4d1461029257806337a2eb71146102ae5780634641257d146102cc578063469815c0146102d657610206565b8063100281591461020b578063176f832e1461023c57806322f7efcb146102585780632c686a9414610274575b600080fd5b6102256004803603810190610220919061467d565b61065e565b6040516102339291906150fd565b60405180910390f35b610256600480360381019061025191906146b9565b61068f565b005b610272600480360381019061026d919061462e565b610715565b005b61027c611634565b60405161028991906150e2565b60405180910390f35b6102ac60048036038101906102a791906146b9565b61163a565b005b6102b6611ddf565b6040516102c39190615193565b60405180910390f35b6102d4611de4565b005b6102de61201d565b6040516102eb91906150e2565b60405180910390f35b6102fc61212d565b60405161030991906150e2565b60405180910390f35b61032c60048036038101906103279190614512565b612133565b6040516103399190614e37565b60405180910390f35b61035c6004803603810190610357919061470b565b612153565b005b61037860048036038101906103739190614577565b6121e1565b604051610386929190615126565b60405180910390f35b61039761255b565b005b6103b360048036038101906103ae9190614605565b612695565b6040516103c091906150e2565b60405180910390f35b6103e360048036038101906103de9190614512565b6126ad565b6040516103f091906150e2565b60405180910390f35b6104016126c5565b60405161040e9190614e1c565b60405180910390f35b61041f6126eb565b60405161042c9190614d78565b60405180910390f35b61043d612714565b60405161044a9190614e1c565b60405180910390f35b61045b61273a565b60405161046891906150e2565b60405180910390f35b61048b600480360381019061048691906146b9565b612740565b005b6104a760048036038101906104a291906145b3565b612f51565b005b6104c360048036038101906104be9190614605565b612fea565b6040516104d091906150e2565b60405180910390f35b6104e1613124565b6040516104ee919061514f565b60405180910390f35b6104ff61313a565b60405161050c91906150e2565b60405180910390f35b61051d6131cf565b60405161052a91906150e2565b60405180910390f35b61054d60048036038101906105489190614605565b6131d5565b60405161055b92919061516a565b60405180910390f35b61057e60048036038101906105799190614512565b613216565b60405161058b919061514f565b60405180910390f35b61059c613239565b6040516105a991906150e2565b60405180910390f35b6105cc60048036038101906105c79190614512565b61323f565b6040516105d991906150e2565b60405180910390f35b6105fc60048036038101906105f7919061470b565b613257565b005b6106186004803603810190610613919061453b565b6132e5565b005b610634600480360381019061062f9190614512565b61345a565b005b61063e613603565b005b6106486138ee565b60405161065591906150e2565b60405180910390f35b6011602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b6106976138f4565b73ffffffffffffffffffffffffffffffffffffffff166106b56126eb565b73ffffffffffffffffffffffffffffffffffffffff161461070b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070290614fc2565b60405180910390fd5b80600a8190555050565b60008211610758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074f906150c2565b60405180910390fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e61079f6138f4565b306040518363ffffffff1660e01b81526004016107bd929190614d93565b60206040518083038186803b1580156107d557600080fd5b505afa1580156107e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080d91906146e2565b101561084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084590615002565b60405180910390fd5b6000600c600061085c6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060058111156108e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816005811115610919577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14806109955750806005811115610959577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b846005811115610992577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b10155b6109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90614f82565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610a9557600060075485600654610a6191906152a1565b610a6b9190615270565b90508085610a7991906152fb565b915080600554610a8991906151e0565b60058190555050610a99565b8390505b610aef610aa46138f4565b3086600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166138fc909392919063ffffffff16565b816005811115610b28577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115610b61577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b10610c8957600080610b7b610b746138f4565b60006121e1565b91509150600b60009054906101000a900463ffffffff1663ffffffff168163ffffffff1614610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690614ee2565b60405180910390fd5b6000821115610c8657848015610c645750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610c7957610c74848383613985565b610c85565b610c84848383613bdc565b5b5b50505b84600c6000610c966138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836005811115610d18577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060006005811115610d57577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b826005811115610d90577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1480610e0b5750816005811115610dd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115610e09577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b15610fc75780600d6000610e1d6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e6291906151e0565b600d6000610e6e6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060106000876005811115610eea577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115610f22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054610f3b91906151e0565b60106000876005811115610f78577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115610fb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002081905550611395565b816005811115611000577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115611039577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b111561139457600d600061104b6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008460058111156110c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156110fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000205461111491906152fb565b60106000846005811115611151577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611189577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555080600d60006111a86138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ed91906151e0565b600d60006111f96138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60006112436138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008760058111156112bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156112f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000205461130c91906151e0565b60106000876005811115611349577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611381577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055505b5b600b60009054906101000a900463ffffffff16600f60006113b46138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555060006005811115611446577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b82600581111561147f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14806114fa57508160058111156114bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560058111156114f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b115b156115f2576002600086600581111561153c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611574577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16426115a791906151e0565b600e60006115b36138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b7fd42bb066022bc335a7416ea93e58076c615424965740cdeb2263132458823b1885858360405161162593929190614e52565b60405180910390a15050505050565b60075481565b80600d60006116476138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba906150a2565b60405180910390fd5b600060058111156116fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600c60006117096138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611789577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190614fe2565b60405180910390fd5b600e60006117d66138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442118061182a5750600460159054906101000a900460ff165b611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186090614f62565b60405180910390fd5b60008061187e6118776138f4565b60006121e1565b91509150600b60009054906101000a900463ffffffff1663ffffffff168163ffffffff16146118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990614ee2565b60405180910390fd5b600082111561194a57611949600c60006118fa6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168383613bdc565b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a0b576000600954856008546119d791906152a1565b6119e19190615270565b905080856119ef91906152fb565b9150806005546119ff91906151e0565b60058190555050611a0f565b8390505b8360106000600c6000611a206138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611aa0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611ad8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054611af191906152fb565b60106000600c6000611b016138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611b81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611bb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555083600d6000611bd86138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c1d91906152fb565b600d6000611c296138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600d6000611c756138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611d4c576000600c6000611cc46138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836005811115611d46577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055505b611da0611d576138f4565b82600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cd59092919063ffffffff16565b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c88482604051611dd19291906150fd565b60405180910390a150505050565b606481565b60006005811115611e1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600c6000611e2a6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611eaa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290614fe2565b60405180910390fd5b600b60009054906101000a900463ffffffff1663ffffffff16600f6000611f106138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff161415611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990615062565b60405180910390fd5b600080611fb7611fb06138f4565b60006121e1565b91509150612019600c6000611fca6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168383613bdc565b5050565b60008060005b60058160ff161015612125576010600060018360ff1660058110612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660058111156120be577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156120f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020548261211091906151e0565b9150808061211d90615471565b915050612023565b508091505090565b60085481565b600c6020528060005260406000206000915054906101000a900460ff1681565b61215b6138f4565b73ffffffffffffffffffffffffffffffffffffffff166121796126eb565b73ffffffffffffffffffffffffffffffffffffffff16146121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c690614fc2565b60405180910390fd5b81600681905550806007819055505050565b600080600080600581111561221f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660058111156122a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156122c9576000600b60009054906101000a900463ffffffff169250925050612554565b6000808563ffffffff16141561232e57600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16612330565b845b90506000606460ff1682600b60009054906101000a900463ffffffff16612357919061532f565b63ffffffff161161237a57600b60009054906101000a900463ffffffff1661238b565b606460ff168261238a9190615236565b5b90505b8063ffffffff168263ffffffff16101561254a5781806123ad90615444565b925050600060116000600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600581111561243b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612473577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008463ffffffff1663ffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050600a5481602001518260000151600a54600d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251991906152a1565b61252391906152a1565b61252d9190615270565b6125379190615270565b8461254291906151e0565b93505061238e565b8193508294505050505b9250929050565b6125636138f4565b73ffffffffffffffffffffffffffffffffffffffff166125816126eb565b73ffffffffffffffffffffffffffffffffffffffff16146125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614fc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60106020528060005260406000206000915090505481565b600e6020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6127486138f4565b73ffffffffffffffffffffffffffffffffffffffff166127666126eb565b73ffffffffffffffffffffffffffffffffffffffff16146127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b390614fc2565b60405180910390fd5b600081116127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f690614fa2565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6128466138f4565b306040518363ffffffff1660e01b8152600401612864929190614d93565b60206040518083038186803b15801561287c57600080fd5b505afa158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b491906146e2565b10156128f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ec90615002565b60405180910390fd5b61294b6129006138f4565b3083600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166138fc909392919063ffffffff16565b600061295561313a565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d657826129e5565b600554836129e491906151e0565b5b90506000806001600b60009054906101000a900463ffffffff16612a099190615236565b905060005b60058160ff161015612ee55760016005612a2891906152fb565b8160ff161415612c3b5760008385612a4091906152fb565b905060405180604001604052808281526020016010600060018660ff1660058110612a94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612ae2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612b1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020548152506011600060018560ff1660058110612b6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612bbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612bf3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008563ffffffff1663ffffffff168152602001908152602001600020600082015181600001556020820151816001015590505050612ee5565b6000612c9860018360ff1660058110612c7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff16612fea565b90506000600a548787600a5485612caf91906152a1565b612cb991906152a1565b612cc39190615270565b612ccd9190615270565b905060405180604001604052808281526020016010600060018760ff1660058110612d21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612da7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020548152506011600060018660ff1660058110612dfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612e48577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612e80577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508085612ece91906151e0565b945050508080612edd90615471565b915050612a0e565b5080600b60006101000a81548163ffffffff021916908363ffffffff1602179055507f511bb6e9e69d3477c8790b56d57c156144c962089ae6cd11d828109fb56cffe285600554604051612f3a9291906150fd565b60405180910390a160006005819055505050505050565b612f596138f4565b73ffffffffffffffffffffffffffffffffffffffff16612f776126eb565b73ffffffffffffffffffffffffffffffffffffffff1614612fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc490614fc2565b60405180910390fd5b80600460156101000a81548160ff02191690831515021790555050565b6000600a6002600084600581111561302b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613063577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060000160049054906101000a900460ff1660ff16601060008560058111156130c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156130fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000205461311391906152a1565b61311d9190615270565b9050919050565b600b60009054906101000a900463ffffffff1681565b60008060005b60058160ff1610156131c7576131a760018260ff166005811061318c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff16612fea565b826131b291906151e0565b915080806131bf90615471565b915050613140565b508091505090565b60065481565b60026020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900460ff16905082565b600f6020528060005260406000206000915054906101000a900463ffffffff1681565b600a5481565b600d6020528060005260406000206000915090505481565b61325f6138f4565b73ffffffffffffffffffffffffffffffffffffffff1661327d6126eb565b73ffffffffffffffffffffffffffffffffffffffff16146132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ca90614fc2565b60405180910390fd5b81600881905550806009819055505050565b6132ed6138f4565b73ffffffffffffffffffffffffffffffffffffffff1661330b6126eb565b73ffffffffffffffffffffffffffffffffffffffff1614613361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335890614fc2565b60405180910390fd5b600460149054906101000a900460ff16156133b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a890615042565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061343b613d5b565b6001600460146101000a81548160ff0219169083151502179055505050565b6134626138f4565b73ffffffffffffffffffffffffffffffffffffffff166134806126eb565b73ffffffffffffffffffffffffffffffffffffffff16146134d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cd90614fc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353d90614f02565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600581111561363d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600c60006136496138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660058111156136c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370190614fe2565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146137bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b390614f22565b60405180910390fd5b600b60009054906101000a900463ffffffff1663ffffffff16600f60006137e16138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff161415613873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386a90615062565b60405180910390fd5b6000806138886138816138f4565b60006121e1565b915091506138ea600c600061389b6138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168383613985565b5050565b60055481565b600033905090565b61397f846323b872dd60e01b85858560405160240161391d93929190614dbc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614212565b50505050565b81600d60006139926138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d791906151e0565b600d60006139e36138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160106000856005811115613a5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613a97577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054613ab091906151e0565b60106000856005811115613aed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613b25577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555080600f6000613b446138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055507f99a2ce12b0e009e5696a913c2dd72b3b444cbf1741ffd3a9f241b9d71b364f23838383604051613bcf93929190614e89565b60405180910390a1505050565b80600f6000613be96138f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550613c95613c4c6138f4565b83600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cd59092919063ffffffff16565b7f1cba73c85d3b8253c47ae88a86a3dce6e18d417d06ddbc156faff7a764041e2d838383604051613cc893929190614e89565b60405180910390a1505050565b613d568363a9059cbb60e01b8484604051602401613cf4929190614df3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614212565b505050565b6040518060400160405280610e1063ffffffff168152602001600a60ff168152506002600060016005811115613dba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613df2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff160217905550905050604051806040016040528062278d0063ffffffff168152602001600c60ff168152506002600060026005811115613eab577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613ee3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff160217905550905050604051806040016040528062ed4e0063ffffffff168152602001600d60ff168152506002600060036005811115613f9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613fd4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff16021790555090505060405180604001604052806301e1338063ffffffff168152602001600f60ff16815250600260006004600581111561408e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156140c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff16021790555090505060405180604001604052806303c2670063ffffffff168152602001601460ff168152506002600060058081111561417f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156141b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff160217905550905050565b6000614274826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166142d99092919063ffffffff16565b90506000815111156142d4578080602001905181019061429491906145dc565b6142d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142ca90615082565b60405180910390fd5b5b505050565b60606142e884846000856142f1565b90509392505050565b606082471015614336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432d90614f42565b60405180910390fd5b61433f85614405565b61437e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161437590615022565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516143a79190614d61565b60006040518083038185875af1925050503d80600081146143e4576040519150601f19603f3d011682016040523d82523d6000602084013e6143e9565b606091505b50915091506143f9828286614418565b92505050949350505050565b600080823b905060008111915050919050565b6060831561442857829050614478565b60008351111561443b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161446f9190614ec0565b60405180910390fd5b9392505050565b60008135905061448e8161554d565b92915050565b6000813590506144a381615564565b92915050565b6000815190506144b881615564565b92915050565b6000813590506144cd8161557b565b92915050565b6000813590506144e28161558b565b92915050565b6000815190506144f78161558b565b92915050565b60008135905061450c816155a2565b92915050565b60006020828403121561452457600080fd5b60006145328482850161447f565b91505092915050565b6000806040838503121561454e57600080fd5b600061455c8582860161447f565b925050602061456d8582860161447f565b9150509250929050565b6000806040838503121561458a57600080fd5b60006145988582860161447f565b92505060206145a9858286016144fd565b9150509250929050565b6000602082840312156145c557600080fd5b60006145d384828501614494565b91505092915050565b6000602082840312156145ee57600080fd5b60006145fc848285016144a9565b91505092915050565b60006020828403121561461757600080fd5b6000614625848285016144be565b91505092915050565b60008060006060848603121561464357600080fd5b6000614651868287016144be565b9350506020614662868287016144d3565b925050604061467386828701614494565b9150509250925092565b6000806040838503121561469057600080fd5b600061469e858286016144be565b92505060206146af858286016144fd565b9150509250929050565b6000602082840312156146cb57600080fd5b60006146d9848285016144d3565b91505092915050565b6000602082840312156146f457600080fd5b6000614702848285016144e8565b91505092915050565b6000806040838503121561471e57600080fd5b600061472c858286016144d3565b925050602061473d858286016144d3565b9150509250929050565b61475081615363565b82525050565b6000614761826151ae565b61476b81856151c4565b935061477b818560208601615411565b80840191505092915050565b614790816153db565b82525050565b61479f816153ff565b82525050565b60006147b0826151b9565b6147ba81856151cf565b93506147ca818560208601615411565b6147d381615528565b840191505092915050565b60006147eb6027836151cf565b91507f57652063616e6e6f74206765742072657761726420696e206f6e65207472616e60008301527f73616374696f6e000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148516026836151cf565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148b76014836151cf565b91507f4d6574686f64206e6f7420617661696c61626c650000000000000000000000006000830152602082019050919050565b60006148f76026836151cf565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061495d602a836151cf565b91507f45787069726174696f6e2074696d65206f6620746865206465706f736974206960008301527f73206e6f74206f766572000000000000000000000000000000000000000000006020830152604082019050919050565b60006149c36027836151cf565b91507f596f752063616e6e6f74206465637265617365207468652074696d65206f662060008301527f6c6f636b696e67000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a296029836151cf565b91507f54686520616d6f756e74206f662074686520726577617264206d757374206e6f60008301527f74206265207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a8f6020836151cf565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614acf601d836151cf565b91507f596f7520646f206e6f742068617665206c6f636b656420746f6b656e730000006000830152602082019050919050565b6000614b0f6014836151cf565b91507f4e6f7420656e6f75676820616c6c6f77616e63650000000000000000000000006000830152602082019050919050565b6000614b4f601d836151cf565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614b8f600b836151cf565b91507f496e697469616c697a65640000000000000000000000000000000000000000006000830152602082019050919050565b6000614bcf601e836151cf565b91507f596f752068617665206e6f20616363756d756c617465642072657761726400006000830152602082019050919050565b6000614c0f602a836151cf565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c756026836151cf565b91507f5769746864726177616c20616d6f756e74206973206d6f7265207468616e206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614cdb602a836151cf565b91507f54686520616d6f756e74206f6620746865206465706f736974206d757374206e60008301527f6f74206265207a65726f000000000000000000000000000000000000000000006020830152604082019050919050565b614d3d816153b4565b82525050565b614d4c816153be565b82525050565b614d5b816153ce565b82525050565b6000614d6d8284614756565b915081905092915050565b6000602082019050614d8d6000830184614747565b92915050565b6000604082019050614da86000830185614747565b614db56020830184614747565b9392505050565b6000606082019050614dd16000830186614747565b614dde6020830185614747565b614deb6040830184614d34565b949350505050565b6000604082019050614e086000830185614747565b614e156020830184614d34565b9392505050565b6000602082019050614e316000830184614787565b92915050565b6000602082019050614e4c6000830184614796565b92915050565b6000606082019050614e676000830186614796565b614e746020830185614d34565b614e816040830184614d34565b949350505050565b6000606082019050614e9e6000830186614796565b614eab6020830185614d34565b614eb86040830184614d43565b949350505050565b60006020820190508181036000830152614eda81846147a5565b905092915050565b60006020820190508181036000830152614efb816147de565b9050919050565b60006020820190508181036000830152614f1b81614844565b9050919050565b60006020820190508181036000830152614f3b816148aa565b9050919050565b60006020820190508181036000830152614f5b816148ea565b9050919050565b60006020820190508181036000830152614f7b81614950565b9050919050565b60006020820190508181036000830152614f9b816149b6565b9050919050565b60006020820190508181036000830152614fbb81614a1c565b9050919050565b60006020820190508181036000830152614fdb81614a82565b9050919050565b60006020820190508181036000830152614ffb81614ac2565b9050919050565b6000602082019050818103600083015261501b81614b02565b9050919050565b6000602082019050818103600083015261503b81614b42565b9050919050565b6000602082019050818103600083015261505b81614b82565b9050919050565b6000602082019050818103600083015261507b81614bc2565b9050919050565b6000602082019050818103600083015261509b81614c02565b9050919050565b600060208201905081810360008301526150bb81614c68565b9050919050565b600060208201905081810360008301526150db81614cce565b9050919050565b60006020820190506150f76000830184614d34565b92915050565b60006040820190506151126000830185614d34565b61511f6020830184614d34565b9392505050565b600060408201905061513b6000830185614d34565b6151486020830184614d43565b9392505050565b60006020820190506151646000830184614d43565b92915050565b600060408201905061517f6000830185614d43565b61518c6020830184614d52565b9392505050565b60006020820190506151a86000830184614d52565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006151eb826153b4565b91506151f6836153b4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561522b5761522a61549b565b5b828201905092915050565b6000615241826153be565b915061524c836153be565b92508263ffffffff038211156152655761526461549b565b5b828201905092915050565b600061527b826153b4565b9150615286836153b4565b925082615296576152956154ca565b5b828204905092915050565b60006152ac826153b4565b91506152b7836153b4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152f0576152ef61549b565b5b828202905092915050565b6000615306826153b4565b9150615311836153b4565b9250828210156153245761532361549b565b5b828203905092915050565b600061533a826153be565b9150615345836153be565b9250828210156153585761535761549b565b5b828203905092915050565b600061536e82615394565b9050919050565b60008115159050919050565b600081905061538f82615539565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006153e6826153ed565b9050919050565b60006153f882615394565b9050919050565b600061540a82615381565b9050919050565b60005b8381101561542f578082015181840152602081019050615414565b8381111561543e576000848401525b50505050565b600061544f826153be565b915063ffffffff8214156154665761546561549b565b5b600182019050919050565b600061547c826153ce565b915060ff8214156154905761548f61549b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000601f19601f8301169050919050565b6006811061554a576155496154f9565b5b50565b61555681615363565b811461556157600080fd5b50565b61556d81615375565b811461557857600080fd5b50565b6006811061558857600080fd5b50565b615594816153b4565b811461559f57600080fd5b50565b6155ab816153be565b81146155b657600080fd5b5056fea26469706673582212208cec3afe26269598b8d05cc4769d297cc2d36a1be60c600257e5b4bdca5e72fd64736f6c63430008000033
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.