Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 50 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Withdraw | 17157973 | 450 days ago | IN | 0 ETH | 0.0027621 | ||||
Un Stake | 14208716 | 889 days ago | IN | 0 ETH | 0.00485212 | ||||
Un Stake | 13670544 | 973 days ago | IN | 0 ETH | 0.00757706 | ||||
Un Stake | 13631076 | 979 days ago | IN | 0 ETH | 0.01489433 | ||||
Un Stake | 13620956 | 981 days ago | IN | 0 ETH | 0.01187113 | ||||
Un Stake | 13612793 | 982 days ago | IN | 0 ETH | 0.01117554 | ||||
Un Stake | 13612671 | 982 days ago | IN | 0 ETH | 0.01332594 | ||||
Un Stake | 13610008 | 982 days ago | IN | 0 ETH | 0.0145863 | ||||
Un Stake | 13605848 | 983 days ago | IN | 0 ETH | 0.0098845 | ||||
Un Stake | 13600999 | 984 days ago | IN | 0 ETH | 0.01268852 | ||||
Un Stake | 13600833 | 984 days ago | IN | 0 ETH | 0.01128945 | ||||
Un Stake | 13596636 | 984 days ago | IN | 0 ETH | 0.02020951 | ||||
Un Stake | 13596605 | 984 days ago | IN | 0 ETH | 0.01925966 | ||||
Un Stake | 13595838 | 985 days ago | IN | 0 ETH | 0.01651557 | ||||
Un Stake | 13593713 | 985 days ago | IN | 0 ETH | 0.01533163 | ||||
Un Stake | 13593616 | 985 days ago | IN | 0 ETH | 0.0180538 | ||||
Un Stake | 13593514 | 985 days ago | IN | 0 ETH | 0.01342749 | ||||
Un Stake | 13593322 | 985 days ago | IN | 0 ETH | 0.01008304 | ||||
Deposit WETH | 13593315 | 985 days ago | IN | 2.9 ETH | 0.00574347 | ||||
Deposit WETH | 13593290 | 985 days ago | IN | 0.1 ETH | 0.00819798 | ||||
Stake | 13346918 | 1024 days ago | IN | 0 ETH | 0.01802738 | ||||
Stake | 13259193 | 1037 days ago | IN | 0 ETH | 0.01450811 | ||||
Stake | 13210575 | 1045 days ago | IN | 0 ETH | 0.01534756 | ||||
Stake | 13190939 | 1048 days ago | IN | 0 ETH | 0.03363311 | ||||
Stake | 13059101 | 1068 days ago | IN | 0 ETH | 0.01104293 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14208716 | 889 days ago | 0.01499395 ETH | ||||
14208716 | 889 days ago | 0.01499395 ETH | ||||
13670544 | 973 days ago | 0.06090117 ETH | ||||
13670544 | 973 days ago | 0.06090117 ETH | ||||
13631076 | 979 days ago | 0.33308958 ETH | ||||
13631076 | 979 days ago | 0.33308958 ETH | ||||
13620956 | 981 days ago | 0.03337867 ETH | ||||
13620956 | 981 days ago | 0.03337867 ETH | ||||
13612793 | 982 days ago | 0.14722473 ETH | ||||
13612793 | 982 days ago | 0.14722473 ETH | ||||
13612671 | 982 days ago | 0.02781986 ETH | ||||
13612671 | 982 days ago | 0.02781986 ETH | ||||
13610008 | 982 days ago | 0.01039426 ETH | ||||
13610008 | 982 days ago | 0.01039426 ETH | ||||
13600999 | 984 days ago | 0.03631587 ETH | ||||
13600999 | 984 days ago | 0.03631587 ETH | ||||
13600833 | 984 days ago | 0.12890776 ETH | ||||
13600833 | 984 days ago | 0.12890776 ETH | ||||
13596636 | 984 days ago | 0.14331121 ETH | ||||
13596636 | 984 days ago | 0.14331121 ETH | ||||
13596605 | 984 days ago | 0.36161385 ETH | ||||
13596605 | 984 days ago | 0.36161385 ETH | ||||
13595838 | 985 days ago | 0.52847065 ETH | ||||
13595838 | 985 days ago | 0.52847065 ETH | ||||
13593713 | 985 days ago | 0.01461442 ETH |
Loading...
Loading
Contract Name:
OROWETHFarm
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-11 */ // Sources flattened with hardhat v2.5.0 https://hardhat.org // File contracts/libraries/Context.sol // SPDX-License-Identifier: MIT; pragma solidity >=0.6.0 <=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 GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File contracts/abstract/Pausable.sol pragma solidity >=0.6.0 <=0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File contracts/abstract/Ownable.sol pragma solidity >=0.6.0 <=0.8.0; abstract contract Ownable is Pausable { address public _owner; address public _admin; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor(address ownerAddress) { _owner = _msgSender(); _admin = ownerAddress; emit OwnershipTransferred(address(0), _owner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyAdmin() { require(_admin == _msgSender(), "Ownable: caller is not the Admin"); _; } /** * @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 onlyAdmin { emit OwnershipTransferred(_owner, _admin); _owner = _admin; } /** * @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; } } // File contracts/libraries/SafeMath.sol pragma solidity ^0.7.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File contracts/interfaces/IERC20.sol pragma solidity ^0.7.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 ); } // File contracts/interfaces/IWETH9.sol pragma solidity =0.7.6; /// @title Interface for WETH9 interface IWETH9 is IERC20 { /// @notice Deposit ether to get wrapped ether function deposit() external payable; /// @notice Withdraw wrapped ether to get ether function withdraw(uint256) external; } // File contracts/abstract/Admin.sol pragma solidity ^0.7.0; abstract contract Admin is Ownable { struct tokenInfo { bool isExist; uint8 decimal; uint256 userMinStake; uint256 userMaxStake; uint256 totalMaxStake; uint256 lockableDays; bool optionableStatus; } using SafeMath for uint256; address[] public tokens; mapping(address => address[]) public tokensSequenceList; mapping(address => tokenInfo) public tokenDetails; mapping(address => uint256) public rewardCap; mapping(address => mapping(address => uint256)) public tokenDailyDistribution; mapping(address => mapping(address => bool)) public tokenBlockedStatus; uint256[] public intervalDays = [1, 8]; uint256 public constant DAYS = 1 days; uint256 public constant HOURS = 1 hours; uint256 public stakeDuration; uint256 public refPercentage; uint256 public optionableBenefit; event TokenDetails( address indexed tokenAddress, uint256 userMinStake, uint256 userMaxStake, uint256 totalMaxStake, uint256 updatedTime ); event LockableTokenDetails( address indexed tokenAddress, uint256 lockableDys, bool optionalbleStatus, uint256 updatedTime ); event DailyDistributionDetails( address indexed stakedTokenAddress, address indexed rewardTokenAddress, uint256 rewards, uint256 time ); event SequenceDetails( address indexed stakedTokenAddress, address[] rewardTokenSequence, uint256 time ); event StakeDurationDetails(uint256 updatedDuration, uint256 time); event OptionableBenefitDetails(uint256 updatedBenefit, uint256 time); event ReferrerPercentageDetails(uint256 updatedRefPercentage, uint256 time); event IntervalDaysDetails(uint256[] updatedIntervals, uint256 time); event BlockedDetails( address indexed stakedTokenAddress, address indexed rewardTokenAddress, bool blockedStatus, uint256 time ); event WithdrawDetails( address indexed tokenAddress, uint256 withdrawalAmount, uint256 time ); IWETH9 public WETH; constructor(address _owner, address _wethAddress) Ownable(_owner) { stakeDuration = 180 days; refPercentage = 2500000000000000000; WETH = IWETH9(_wethAddress); } function updateWETH(address _newWETHAddress) external onlyOwner returns (bool) { WETH = IWETH9(_newWETHAddress); return true; } function addToken( address tokenAddress, uint256 userMinStake, uint256 userMaxStake, uint256 totalStake, uint8 decimal ) public onlyOwner returns (bool) { if (!(tokenDetails[tokenAddress].isExist)) tokens.push(tokenAddress); tokenDetails[tokenAddress].isExist = true; tokenDetails[tokenAddress].decimal = decimal; tokenDetails[tokenAddress].userMinStake = userMinStake; tokenDetails[tokenAddress].userMaxStake = userMaxStake; tokenDetails[tokenAddress].totalMaxStake = totalStake; emit TokenDetails( tokenAddress, userMinStake, userMaxStake, totalStake, block.timestamp ); return true; } function setDailyDistribution( address[] memory stakedToken, address[] memory rewardToken, uint256[] memory dailyDistribution ) public onlyOwner { require( stakedToken.length == rewardToken.length && rewardToken.length == dailyDistribution.length, "Invalid Input" ); for (uint8 i = 0; i < stakedToken.length; i++) { require( tokenDetails[stakedToken[i]].isExist && tokenDetails[rewardToken[i]].isExist, "Token not exist" ); tokenDailyDistribution[stakedToken[i]][ rewardToken[i] ] = dailyDistribution[i]; emit DailyDistributionDetails( stakedToken[i], rewardToken[i], dailyDistribution[i], block.timestamp ); } } function updateSequence( address stakedToken, address[] memory rewardTokenSequence ) public onlyOwner { tokensSequenceList[stakedToken] = new address[](0); require(tokenDetails[stakedToken].isExist, "Staked Token Not Exist"); for (uint8 i = 0; i < rewardTokenSequence.length; i++) { require( rewardTokenSequence.length <= tokens.length, "Invalid Input" ); require( tokenDetails[rewardTokenSequence[i]].isExist, "Reward Token Not Exist" ); tokensSequenceList[stakedToken].push(rewardTokenSequence[i]); } emit SequenceDetails( stakedToken, tokensSequenceList[stakedToken], block.timestamp ); } function updateToken( address tokenAddress, uint256 userMinStake, uint256 userMaxStake, uint256 totalStake ) public onlyOwner { require(tokenDetails[tokenAddress].isExist, "Token Not Exist"); tokenDetails[tokenAddress].userMinStake = userMinStake; tokenDetails[tokenAddress].userMaxStake = userMaxStake; tokenDetails[tokenAddress].totalMaxStake = totalStake; emit TokenDetails( tokenAddress, userMinStake, userMaxStake, totalStake, block.timestamp ); } function lockableToken( address tokenAddress, uint8 lockableStatus, uint256 lockedDays, bool optionableStatus ) public onlyOwner { require( lockableStatus == 1 || lockableStatus == 2 || lockableStatus == 3, "Invalid Lockable Status" ); require(tokenDetails[tokenAddress].isExist == true, "Token Not Exist"); if (lockableStatus == 1) { tokenDetails[tokenAddress].lockableDays = block.timestamp.add( lockedDays ); } else if (lockableStatus == 2) tokenDetails[tokenAddress].lockableDays = 0; else if (lockableStatus == 3) tokenDetails[tokenAddress].optionableStatus = optionableStatus; emit LockableTokenDetails( tokenAddress, tokenDetails[tokenAddress].lockableDays, tokenDetails[tokenAddress].optionableStatus, block.timestamp ); } function updateStakeDuration(uint256 durationTime) public onlyOwner { stakeDuration = durationTime; emit StakeDurationDetails(stakeDuration, block.timestamp); } function updateRefPercentage(uint256 refPer) public onlyOwner { refPercentage = refPer; emit ReferrerPercentageDetails(refPercentage, block.timestamp); } function updateIntervalDays(uint256[] memory _interval) public onlyOwner { intervalDays = new uint256[](0); for (uint8 i = 0; i < _interval.length; i++) { uint256 noD = stakeDuration.div(DAYS); require(noD > _interval[i], "Invalid Interval Day"); intervalDays.push(_interval[i]); } emit IntervalDaysDetails(intervalDays, block.timestamp); } function changeTokenBlockedStatus( address stakedToken, address rewardToken, bool status ) public onlyOwner { require( tokenDetails[stakedToken].isExist && tokenDetails[rewardToken].isExist, "Token not exist" ); tokenBlockedStatus[stakedToken][rewardToken] = status; emit BlockedDetails( stakedToken, rewardToken, tokenBlockedStatus[stakedToken][rewardToken], block.timestamp ); } function safeWithdraw(address tokenAddress, uint256 amount) public onlyOwner { require( IERC20(tokenAddress).balanceOf(address(this)) >= amount, "Insufficient Balance" ); require( IERC20(tokenAddress).transfer(_owner, amount), "Transfer failed" ); emit WithdrawDetails(tokenAddress, amount, block.timestamp); } function safeWithdrawETH(uint256 amount) external onlyOwner { require( WETH.balanceOf(address(this)) >= amount, "Insufficient Balance" ); // withdraw the WETH WETH.withdraw(amount); // then transfer to owner address (bool success, ) = _owner.call{value: amount}(""); require(success, "SafeWithdrawETH execution failed"); emit WithdrawDetails(address(WETH), amount, block.timestamp); } function viewTokensCount() external view returns (uint256) { return tokens.length; } } // File contracts/OROWETHFarm.sol pragma solidity ^0.7.6; /** * @title Unifarm Contract * @author OroPocket */ contract OROWETHFarm is Admin { // Wrappers over Solidity's arithmetic operations using SafeMath for uint256; // Stores Stake Details struct stakeInfo { address user; bool[] isActive; address[] referrer; address[] tokenAddress; uint256[] stakeId; uint256[] stakedAmount; uint256[] startTime; } // Mapping mapping(address => stakeInfo) public stakingDetails; mapping(address => mapping(address => uint256)) public userTotalStaking; mapping(address => uint256) public totalStaking; uint256 public poolStartTime; // Events event Stake( address indexed userAddress, uint256 stakeId, address indexed referrerAddress, address indexed tokenAddress, uint256 stakedAmount, uint256 time ); event Claim( address indexed userAddress, address indexed stakedTokenAddress, address indexed tokenAddress, uint256 claimRewards, uint256 time ); event UnStake( address indexed userAddress, address indexed unStakedtokenAddress, uint256 unStakedAmount, uint256 time, uint256 stakeId ); event ReferralEarn( address indexed userAddress, address indexed callerAddress, address indexed rewardTokenAddress, uint256 rewardAmount, uint256 time ); constructor(address _WETHAddress) Admin(_msgSender(), _WETHAddress) { poolStartTime = block.timestamp; } /** * @notice do not forget to receive ETH */ receive() external payable {} function depositWETH() external payable onlyOwner returns (bool) { WETH.deposit{value: msg.value}(); return true; } /** * @notice Stake tokens to earn rewards * @param tokenAddress Staking token address * @param amount Amount of tokens to be staked */ function stake( address referrerAddress, address tokenAddress, uint256 amount ) external whenNotPaused { // checks require( _msgSender() != referrerAddress, "STAKE: invalid referrer address" ); require( tokenDetails[tokenAddress].isExist, "STAKE : Token is not Exist" ); require( userTotalStaking[_msgSender()][tokenAddress].add(amount) >= tokenDetails[tokenAddress].userMinStake, "STAKE : Min Amount should be within permit" ); require( userTotalStaking[_msgSender()][tokenAddress].add(amount) <= tokenDetails[tokenAddress].userMaxStake, "STAKE : Max Amount should be within permit" ); require( totalStaking[tokenAddress].add(amount) <= tokenDetails[tokenAddress].totalMaxStake, "STAKE : Maxlimit exceeds" ); require( poolStartTime.add(stakeDuration) > block.timestamp, "STAKE: Staking Time Completed" ); // Storing stake details stakingDetails[_msgSender()].stakeId.push( stakingDetails[_msgSender()].stakeId.length ); stakingDetails[_msgSender()].isActive.push(true); stakingDetails[_msgSender()].user = _msgSender(); stakingDetails[_msgSender()].referrer.push(referrerAddress); stakingDetails[_msgSender()].tokenAddress.push(tokenAddress); stakingDetails[_msgSender()].startTime.push(block.timestamp); // Update total staking amount stakingDetails[_msgSender()].stakedAmount.push(amount); totalStaking[tokenAddress] = totalStaking[tokenAddress].add(amount); userTotalStaking[_msgSender()][tokenAddress] = userTotalStaking[ _msgSender() ][tokenAddress].add(amount); // Transfer tokens from userf to contract require( IERC20(tokenAddress).transferFrom( _msgSender(), address(this), amount ), "Transfer Failed" ); // Emit state changes emit Stake( _msgSender(), (stakingDetails[_msgSender()].stakeId.length.sub(1)), referrerAddress, tokenAddress, amount, block.timestamp ); } /** * @notice Claim accumulated rewards * @param stakeId Stake ID of the user * @param stakedAmount Staked amount of the user */ function claimRewards( address userAddress, uint256 stakeId, uint256 stakedAmount, uint256 totalStake ) internal { // Local variables uint256 interval; uint256 endOfProfit; interval = poolStartTime.add(stakeDuration); // Interval calculation if (interval > block.timestamp) endOfProfit = block.timestamp; else endOfProfit = poolStartTime.add(stakeDuration); interval = endOfProfit.sub( stakingDetails[userAddress].startTime[stakeId] ); uint256[2] memory stakeData; stakeData[0] = (stakedAmount); stakeData[1] = (totalStake); // Reward calculation if (interval >= HOURS) _rewardCalculationETH(userAddress, stakeId, stakeData, interval); } function _rewardCalculationETH( address userAddress, uint256 stakeId, uint256[2] memory stakingData, uint256 interval ) internal { uint256 rewardsEarnedETH; uint256 refEarned; uint256[2] memory noOfDays; noOfDays[1] = interval.div(HOURS); noOfDays[0] = interval.div(DAYS); rewardsEarnedETH = noOfDays[1].mul( getOneDayReward( stakingData[0], stakingDetails[userAddress].tokenAddress[stakeId], address(WETH), stakingData[1] ) ); // withdraw the WETH WETH.withdraw(rewardsEarnedETH); if (stakingDetails[userAddress].referrer[stakeId] != address(0)) { refEarned = (rewardsEarnedETH.mul(refPercentage)).div(100 ether); rewardsEarnedETH = rewardsEarnedETH.sub(refEarned); (bool success, ) = stakingDetails[userAddress] .referrer[stakeId] .call{value: refEarned}(""); require(success, "Transfer Failed"); emit ReferralEarn( stakingDetails[userAddress].referrer[stakeId], _msgSender(), address(WETH), refEarned, block.timestamp ); } sendETH( userAddress, stakingDetails[userAddress].tokenAddress[stakeId], address(WETH), rewardsEarnedETH ); } /** * @notice Get rewards for one day * @param stakedAmount Stake amount of the user * @param stakedToken Staked token address of the user * @param rewardToken Reward token address * @return reward One dayh reward for the user */ function getOneDayReward( uint256 stakedAmount, address stakedToken, address rewardToken, uint256 totalStake ) public view returns (uint256 reward) { reward = ( stakedAmount.mul(tokenDailyDistribution[stakedToken][rewardToken]) ).div(totalStake); } /** * @notice Get rewards for one day * @param stakedToken Stake amount of the user * @param tokenAddress Reward token address * @param amount Amount to be transferred as reward */ function sendETH( address userAddress, address stakedToken, address tokenAddress, uint256 amount ) internal { // Checks if (tokenAddress != address(0)) { (bool success, ) = userAddress.call{value: amount}(""); require(success, "Transfer failed"); // Emit state changes emit Claim( userAddress, stakedToken, tokenAddress, amount, block.timestamp ); } } /** * @notice Unstake and claim rewards * @param stakeId Stake ID of the user */ function unStake(address userAddress, uint256 stakeId) external whenNotPaused returns (bool) { require( _msgSender() == userAddress || _msgSender() == _owner, "UNSTAKE: Invalid User Entry" ); address stakedToken = stakingDetails[userAddress].tokenAddress[stakeId]; // lockableDays check require( tokenDetails[stakedToken].lockableDays <= block.timestamp, "UNSTAKE: Token Locked" ); // optional lock check if (tokenDetails[stakedToken].optionableStatus) require( stakingDetails[userAddress].startTime[stakeId].add( stakeDuration ) <= block.timestamp, "UNSTAKE: Locked in optional lock" ); // Checks require( stakingDetails[userAddress].stakedAmount[stakeId] > 0 || stakingDetails[userAddress].isActive[stakeId] == true, "UNSTAKE : Already Claimed (or) Insufficient Staked" ); // State updation uint256 stakedAmount = stakingDetails[userAddress].stakedAmount[ stakeId ]; uint256 totalStaking1 = totalStaking[stakedToken]; stakingDetails[userAddress].stakedAmount[stakeId] = 0; stakingDetails[userAddress].isActive[stakeId] = false; // Balance check require( IERC20(stakingDetails[userAddress].tokenAddress[stakeId]).balanceOf( address(this) ) >= stakedAmount, "UNSTAKE : Insufficient Balance" ); // Transfer staked token back to user IERC20(stakingDetails[userAddress].tokenAddress[stakeId]).transfer( userAddress, stakedAmount ); claimRewards(userAddress, stakeId, stakedAmount, totalStaking1); // Emit state changes emit UnStake( userAddress, stakingDetails[userAddress].tokenAddress[stakeId], stakedAmount, block.timestamp, stakeId ); return true; } function emergencyUnstake( uint256 stakeId, address userAddress, uint256 rewardsEarnedETH ) external onlyOwner { // Checks require( stakingDetails[userAddress].stakedAmount[stakeId] > 0 && stakingDetails[userAddress].isActive[stakeId] == true, "EMERGENCY : Already Claimed (or) Insufficient Staked" ); // Balance check require( IERC20(stakingDetails[userAddress].tokenAddress[stakeId]).balanceOf( address(this) ) >= stakingDetails[userAddress].stakedAmount[stakeId], "EMERGENCY : Insufficient Balance" ); uint256 stakeAmount = stakingDetails[userAddress].stakedAmount[stakeId]; stakingDetails[userAddress].isActive[stakeId] = false; stakingDetails[userAddress].stakedAmount[stakeId] = 0; IERC20(stakingDetails[userAddress].tokenAddress[stakeId]).transfer( userAddress, stakeAmount ); WETH.withdraw(rewardsEarnedETH); uint256 refEarned; if (stakingDetails[userAddress].referrer[stakeId] != address(0)) { refEarned = (rewardsEarnedETH.mul(refPercentage)).div(100 ether); rewardsEarnedETH = rewardsEarnedETH.sub(refEarned); (bool success, ) = stakingDetails[userAddress] .referrer[stakeId] .call{value: refEarned}(""); require(success, "Transfer Failed"); emit ReferralEarn( stakingDetails[userAddress].referrer[stakeId], _msgSender(), address(WETH), refEarned, block.timestamp ); } sendETH( userAddress, stakingDetails[userAddress].tokenAddress[stakeId], address(WETH), rewardsEarnedETH ); // Emit state changes emit UnStake( userAddress, stakingDetails[userAddress].tokenAddress[stakeId], stakeAmount, block.timestamp, stakeId ); } /** * @notice View staking details * @param _user User address */ function viewStakingDetails(address _user) public view returns ( address[] memory, address[] memory, bool[] memory, uint256[] memory, uint256[] memory, uint256[] memory ) { return ( stakingDetails[_user].referrer, stakingDetails[_user].tokenAddress, stakingDetails[_user].isActive, stakingDetails[_user].stakeId, stakingDetails[_user].stakedAmount, stakingDetails[_user].startTime ); } function pause() external onlyOwner returns (bool) { _pause(); return true; } function unpause() external onlyOwner returns (bool) { _unpause(); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_WETHAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakedTokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"rewardTokenAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"blockedStatus","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"BlockedDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":true,"internalType":"address","name":"stakedTokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"claimRewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakedTokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"rewardTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"DailyDistributionDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"updatedIntervals","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"IntervalDaysDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"lockableDys","type":"uint256"},{"indexed":false,"internalType":"bool","name":"optionalbleStatus","type":"bool"},{"indexed":false,"internalType":"uint256","name":"updatedTime","type":"uint256"}],"name":"LockableTokenDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedBenefit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"OptionableBenefitDetails","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":true,"internalType":"address","name":"callerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"rewardTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ReferralEarn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedRefPercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ReferrerPercentageDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakedTokenAddress","type":"address"},{"indexed":false,"internalType":"address[]","name":"rewardTokenSequence","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SequenceDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":true,"internalType":"address","name":"referrerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"StakeDurationDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"userMinStake","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userMaxStake","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalMaxStake","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"updatedTime","type":"uint256"}],"name":"TokenDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":true,"internalType":"address","name":"unStakedtokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"unStakedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"UnStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"withdrawalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"WithdrawDetails","type":"event"},{"inputs":[],"name":"DAYS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HOURS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH9","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"userMinStake","type":"uint256"},{"internalType":"uint256","name":"userMaxStake","type":"uint256"},{"internalType":"uint256","name":"totalStake","type":"uint256"},{"internalType":"uint8","name":"decimal","type":"uint8"}],"name":"addToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"stakedToken","type":"address"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTokenBlockedStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositWETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"rewardsEarnedETH","type":"uint256"}],"name":"emergencyUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"address","name":"stakedToken","type":"address"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"totalStake","type":"uint256"}],"name":"getOneDayReward","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"intervalDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint8","name":"lockableStatus","type":"uint8"},{"internalType":"uint256","name":"lockedDays","type":"uint256"},{"internalType":"bool","name":"optionableStatus","type":"bool"}],"name":"lockableToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"optionableBenefit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"safeWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"safeWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"stakedToken","type":"address[]"},{"internalType":"address[]","name":"rewardToken","type":"address[]"},{"internalType":"uint256[]","name":"dailyDistribution","type":"uint256[]"}],"name":"setDailyDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrerAddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingDetails","outputs":[{"internalType":"address","name":"user","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"tokenBlockedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"tokenDailyDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenDetails","outputs":[{"internalType":"bool","name":"isExist","type":"bool"},{"internalType":"uint8","name":"decimal","type":"uint8"},{"internalType":"uint256","name":"userMinStake","type":"uint256"},{"internalType":"uint256","name":"userMaxStake","type":"uint256"},{"internalType":"uint256","name":"totalMaxStake","type":"uint256"},{"internalType":"uint256","name":"lockableDays","type":"uint256"},{"internalType":"bool","name":"optionableStatus","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensSequenceList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalStaking","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":"userAddress","type":"address"},{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"unStake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_interval","type":"uint256[]"}],"name":"updateIntervalDays","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"refPer","type":"uint256"}],"name":"updateRefPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"stakedToken","type":"address"},{"internalType":"address[]","name":"rewardTokenSequence","type":"address[]"}],"name":"updateSequence","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"durationTime","type":"uint256"}],"name":"updateStakeDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"userMinStake","type":"uint256"},{"internalType":"uint256","name":"userMaxStake","type":"uint256"},{"internalType":"uint256","name":"totalStake","type":"uint256"}],"name":"updateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWETHAddress","type":"address"}],"name":"updateWETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userTotalStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"viewStakingDetails","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"bool[]","name":"","type":"bool[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTokensCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405260016080908152600860a08190526200001f91600262000122565b503480156200002d57600080fd5b5060405162004b0a38038062004b0a833981810160405260208110156200005357600080fd5b50516200005f6200011e565b6000805460ff191690558181620000756200011e565b60008054610100600160a81b0319166101006001600160a01b03938416810291909117808355600180546001600160a01b031916868616179055604051919004909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062ed4e006009556722b1c8c1227a0000600a55600c80546001600160a01b0319166001600160a01b03929092169190911790555050426010556200018e565b3390565b82805482825590600052602060002090810192821562000165579160200282015b8281111562000165578251829060ff1690559160200191906001019062000143565b506200017392915062000177565b5090565b5b8082111562000173576000815560010162000178565b61496c806200019e6000396000f3fe6080604052600436106102605760003560e01c80638456cb5911610144578063cdd033c8116100b6578063dd4be6831161007a578063dd4be68314610d33578063e0a79b1614610da4578063e5c4686914610dd7578063f2fde38b14610dec578063fbfcd24114610e1f578063fe9440d714610e3457610267565b8063cdd033c814610a74578063d431350614610ab9578063d43c953514610b03578063d768779a14610cb5578063d939381414610cfa57610267565b8063a572611d11610108578063a572611d14610989578063ad5c4648146109c8578063b104e006146109dd578063b2bdfa7b14610a07578063bf6eac2f14610a1c578063c549e6b914610a5f57610267565b80638456cb591461084457806385d895ef1461085957806388125f791461086e578063a019cb4b14610898578063a4f3f0e5146108cb57610267565b806340a16688116101dd578063539cd3b4116101a1578063539cd3b41461076f57806356117e5d146107a85780635c975abb146107d25780635f96dc11146107e7578063715018a6146107fc5780637bdb8cd31461081157610267565b806340a166881461066057806340f02ab6146106ae5780634cd36531146106c35780634f64b2be1461070c5780635058c4601461073657610267565b80631d2002e7116102245780631d2002e7146103ea5780631de3df2c1461041457806326fa24e91461043057806328523eb6146106105780633f4ba83a1461064b57610267565b806301193ad71461026c57806301bc45c91461031c57806304a624c61461034d5780631320da8b14610374578063187739a4146103af57610267565b3661026757005b600080fd5b34801561027857600080fd5b5061031a6004803603602081101561028f57600080fd5b810190602081018135600160201b8111156102a957600080fd5b8201836020820111156102bb57600080fd5b803590602001918460208302840111600160201b831117156102dc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610e67945050505050565b005b34801561032857600080fd5b5061033161102a565b604080516001600160a01b039092168252519081900360200190f35b34801561035957600080fd5b50610362611039565b60408051918252519081900360200190f35b34801561038057600080fd5b506103626004803603604081101561039757600080fd5b506001600160a01b038135811691602001351661103f565b3480156103bb57600080fd5b50610362600480360360408110156103d257600080fd5b506001600160a01b038135811691602001351661105c565b3480156103f657600080fd5b5061031a6004803603602081101561040d57600080fd5b5035611079565b61041c611118565b604080519115158252519081900360200190f35b34801561043c57600080fd5b506104636004803603602081101561045357600080fd5b50356001600160a01b03166111e7565b6040518080602001806020018060200180602001806020018060200187810387528d818151815260200191508051906020019060200280838360005b838110156104b757818101518382015260200161049f565b5050505090500187810386528c818151815260200191508051906020019060200280838360005b838110156104f65781810151838201526020016104de565b5050505090500187810385528b818151815260200191508051906020019060200280838360005b8381101561053557818101518382015260200161051d565b5050505090500187810384528a818151815260200191508051906020019060200280838360005b8381101561057457818101518382015260200161055c565b50505050905001878103835289818151815260200191508051906020019060200280838360005b838110156105b357818101518382015260200161059b565b50505050905001878103825288818151815260200191508051906020019060200280838360005b838110156105f25781810151838201526020016105da565b505050509050019c5050505050505050505050505060405180910390f35b34801561061c57600080fd5b5061041c6004803603604081101561063357600080fd5b506001600160a01b038135811691602001351661145d565b34801561065757600080fd5b5061041c61147d565b34801561066c57600080fd5b5061041c600480360360a081101561068357600080fd5b5080356001600160a01b0316906020810135906040810135906060810135906080013560ff166114ea565b3480156106ba57600080fd5b5061036261164f565b3480156106cf57600080fd5b50610362600480360360808110156106e657600080fd5b508035906001600160a01b03602082013581169160408101359091169060600135611655565b34801561071857600080fd5b506103316004803603602081101561072f57600080fd5b503561169d565b34801561074257600080fd5b5061031a6004803603604081101561075957600080fd5b506001600160a01b0381351690602001356116c7565b34801561077b57600080fd5b506103316004803603604081101561079257600080fd5b506001600160a01b038135169060200135611909565b3480156107b457600080fd5b5061031a600480360360208110156107cb57600080fd5b5035611941565b3480156107de57600080fd5b5061041c611bbd565b3480156107f357600080fd5b50610362611bc6565b34801561080857600080fd5b5061031a611bcc565b34801561081d57600080fd5b506103626004803603602081101561083457600080fd5b50356001600160a01b0316611ca4565b34801561085057600080fd5b5061041c611cb6565b34801561086557600080fd5b50610362611d1d565b34801561087a57600080fd5b5061031a6004803603602081101561089157600080fd5b5035611d23565b3480156108a457600080fd5b50610331600480360360208110156108bb57600080fd5b50356001600160a01b0316611dc2565b3480156108d757600080fd5b5061031a600480360360408110156108ee57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561091857600080fd5b82018360208201111561092a57600080fd5b803590602001918460208302840111600160201b8311171561094b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611ddd945050505050565b34801561099557600080fd5b5061031a600480360360608110156109ac57600080fd5b508035906001600160a01b0360208201351690604001356120c2565b3480156109d457600080fd5b506103316127c4565b3480156109e957600080fd5b5061036260048036036020811015610a0057600080fd5b50356127d3565b348015610a1357600080fd5b506103316127f4565b348015610a2857600080fd5b5061031a60048036036060811015610a3f57600080fd5b506001600160a01b03813581169160208101359091169060400135612808565b348015610a6b57600080fd5b50610362612f76565b348015610a8057600080fd5b5061031a60048036036060811015610a9757600080fd5b506001600160a01b038135811691602081013590911690604001351515612f7d565b348015610ac557600080fd5b5061031a60048036036080811015610adc57600080fd5b506001600160a01b038135169060ff602082013516906040810135906060013515156130d9565b348015610b0f57600080fd5b5061031a60048036036060811015610b2657600080fd5b810190602081018135600160201b811115610b4057600080fd5b820183602082011115610b5257600080fd5b803590602001918460208302840111600160201b83111715610b7357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610bc257600080fd5b820183602082011115610bd457600080fd5b803590602001918460208302840111600160201b83111715610bf557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c4457600080fd5b820183602082011115610c5657600080fd5b803590602001918460208302840111600160201b83111715610c7757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613312945050505050565b348015610cc157600080fd5b5061031a60048036036080811015610cd857600080fd5b506001600160a01b0381351690602081013590604081013590606001356135c2565b348015610d0657600080fd5b5061041c60048036036040811015610d1d57600080fd5b506001600160a01b0381351690602001356136f7565b348015610d3f57600080fd5b50610d6660048036036020811015610d5657600080fd5b50356001600160a01b0316613d29565b60408051971515885260ff9096166020880152868601949094526060860192909252608085015260a0840152151560c0830152519081900360e00190f35b348015610db057600080fd5b5061036260048036036020811015610dc757600080fd5b50356001600160a01b0316613d6d565b348015610de357600080fd5b50610362613d7f565b348015610df857600080fd5b5061031a60048036036020811015610e0f57600080fd5b50356001600160a01b0316613d85565b348015610e2b57600080fd5b50610362613e8d565b348015610e4057600080fd5b5061041c60048036036020811015610e5757600080fd5b50356001600160a01b0316613e93565b610e6f613f17565b60005461010090046001600160a01b03908116911614610ec4576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6040805160008152602081019182905251610ee191600891614742565b5060005b81518160ff161015610fa857600954600090610f049062015180613f1b565b9050828260ff1681518110610f1557fe5b60200260200101518111610f67576040805162461bcd60e51b8152602060048201526014602482015273496e76616c696420496e74657276616c2044617960601b604482015290519081900360640190fd5b6008838360ff1681518110610f7857fe5b60209081029190910181015182546001818101855560009485529290932090920191909155919091019050610ee5565b507f29635226d0b00834767b0cf38daca8dc0fe978152b0a8a5b39eb2811263523616008426040518080602001838152602001828103825284818154815260200191508054801561101857602002820191906000526020600020905b815481526020019060010190808311611004575b5050935050505060405180910390a150565b6001546001600160a01b031681565b600b5481565b600e60209081526000928352604080842090915290825290205481565b600660209081526000928352604080842090915290825290205481565b611081613f17565b60005461010090046001600160a01b039081169116146110d6576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b600a8190556040805182815242602082015281517f886f1c6ee47e76ca7e1c7715d9662c5cbc03a9215b76899c702e3d1c38d1ee43929181900390910190a150565b6000611122613f17565b60005461010090046001600160a01b03908116911614611177576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b600c60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111c757600080fd5b505af11580156111db573d6000803e3d6000fd5b50505050506001905090565b6001600160a01b0381166000908152600d6020908152604091829020600281018054845181850281018501909552808552606094859485948594859485949193600384019360018101936004820193600583019360069093019288919083018282801561127d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161125f575b50505050509550848054806020026020016040519081016040528092919081815260200182805480156112d957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112bb575b505050505094508380548060200260200160405190810160405280929190818152602001828054801561134b57602002820191906000526020600020906000905b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161131a5790505b505050505093508280548060200260200160405190810160405280929190818152602001828054801561139d57602002820191906000526020600020905b815481526020019060010190808311611389575b50505050509250818054806020026020016040519081016040528092919081815260200182805480156113ef57602002820191906000526020600020905b8154815260200190600101908083116113db575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561144157602002820191906000526020600020905b81548152602001906001019080831161142d575b5050505050905095509550955095509550955091939550919395565b600760209081526000928352604080842090915290825290205460ff1681565b6000611487613f17565b60005461010090046001600160a01b039081169116146114dc576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6114e4613f64565b50600190565b60006114f4613f17565b60005461010090046001600160a01b03908116911614611549576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b03861660009081526004602052604090205460ff166115b557600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b0386166000818152600460209081526040918290208054600160ff19909116811761ff00191661010060ff891602178255810189905560028101889055600301869055815188815290810187905280820186905242606082015290517f6b9e42b75b3aa79aee18ba04bd3f6dedba2d3e55228fadb89fd22817f7ef81ac916080908290030190a250600195945050505050565b60095481565b6001600160a01b03808416600090815260066020908152604080832093861683529290529081205461169490839061168e908890614004565b90613f1b565b95945050505050565b600281815481106116ad57600080fd5b6000918252602090912001546001600160a01b0316905081565b6116cf613f17565b60005461010090046001600160a01b03908116911614611724576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b80826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561177257600080fd5b505afa158015611786573d6000803e3d6000fd5b505050506040513d602081101561179c57600080fd5b505110156117e8576040805162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015290519081900360640190fd5b816001600160a01b031663a9059cbb600060019054906101000a90046001600160a01b0316836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561185457600080fd5b505af1158015611868573d6000803e3d6000fd5b505050506040513d602081101561187e57600080fd5b50516118c3576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6040805182815242602082015281516001600160a01b038516927fcb92e2679de255302c9b8d0673cbdf8ef54667e943bf8f049bcaf6a85926ba1a928290030190a25050565b6003602052816000526040600020818154811061192557600080fd5b6000918252602090912001546001600160a01b03169150829050565b611949613f17565b60005461010090046001600160a01b0390811691161461199e576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b600c54604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156119e857600080fd5b505afa1580156119fc573d6000803e3d6000fd5b505050506040513d6020811015611a1257600080fd5b50511015611a5e576040805162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015290519081900360640190fd5b600c5460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015611aab57600080fd5b505af1158015611abf573d6000803e3d6000fd5b50506000805460405191935061010090046001600160a01b0316915083908381818185875af1925050503d8060008114611b15576040519150601f19603f3d011682016040523d82523d6000602084013e611b1a565b606091505b5050905080611b70576040805162461bcd60e51b815260206004820181905260248201527f53616665576974686472617745544820657865637574696f6e206661696c6564604482015290519081900360640190fd5b600c546040805184815242602082015281516001600160a01b03909316927fcb92e2679de255302c9b8d0673cbdf8ef54667e943bf8f049bcaf6a85926ba1a929181900390910190a25050565b60005460ff1690565b60105481565b611bd4613f17565b6001546001600160a01b03908116911614611c36576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652041646d696e604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693610100909204909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60056020526000908152604090205481565b6000611cc0613f17565b60005461010090046001600160a01b03908116911614611d15576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6114e461405d565b60025490565b611d2b613f17565b60005461010090046001600160a01b03908116911614611d80576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b60098190556040805182815242602082015281517ff676bd50ed08b41fe017c9b4b7606b132ed9afafd39cbe090006c602170638bf929181900390910190a150565b600d602052600090815260409020546001600160a01b031681565b611de5613f17565b60005461010090046001600160a01b03908116911614611e3a576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b60408051600080825260208083018085526001600160a01b038716835260039091529290209051611e6b929061478d565b506001600160a01b03821660009081526004602052604090205460ff16611ed2576040805162461bcd60e51b815260206004820152601660248201527514dd185ad95908151bdad95b88139bdd08115e1a5cdd60521b604482015290519081900360640190fd5b60005b81518160ff16101561201b5760025482511115611f29576040805162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b604482015290519081900360640190fd5b60046000838360ff1681518110611f3c57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16611fad576040805162461bcd60e51b815260206004820152601660248201527514995dd85c9908151bdad95b88139bdd08115e1a5cdd60521b604482015290519081900360640190fd5b6001600160a01b03831660009081526003602052604090208251839060ff8416908110611fd657fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501611ed5565b506001600160a01b03821660008181526003602090815260409182902082514292810183905283815281549381018490527f533d99224d362fcbe71ce5ff0a8b2d61a9c08b8d1df27aab851edb881f3fb16b9391929181906060820190859080156120af57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612091575b5050935050505060405180910390a25050565b6120ca613f17565b60005461010090046001600160a01b0390811691161461211f576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600d6020526040812060050180548590811061214657fe5b90600052602060002001541180156121a857506001600160a01b0382166000908152600d6020526040902060010180548490811061218057fe5b90600052602060002090602091828204019190069054906101000a900460ff16151560011515145b6121e35760405162461bcd60e51b81526004018080602001828103825260348152602001806149036034913960400191505060405180910390fd5b6001600160a01b0382166000908152600d6020526040902060050180548490811061220a57fe5b9060005260206000200154600d6000846001600160a01b03166001600160a01b03168152602001908152602001600020600301848154811061224857fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b50511015612316576040805162461bcd60e51b815260206004820181905260248201527f454d455247454e4359203a20496e73756666696369656e742042616c616e6365604482015290519081900360640190fd5b6001600160a01b0382166000908152600d6020526040812060050180548590811061233d57fe5b906000526020600020015490506000600d6000856001600160a01b03166001600160a01b03168152602001908152602001600020600101858154811061237f57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083151502179055506000600d6000856001600160a01b03166001600160a01b0316815260200190815260200160002060050185815481106123dd57fe5b60009182526020808320909101929092556001600160a01b0385168152600d9091526040902060030180548590811061241257fe5b60009182526020808320909101546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018790529151919092169363a9059cbb93604480850194919392918390030190829087803b15801561247257600080fd5b505af1158015612486573d6000803e3d6000fd5b505050506040513d602081101561249c57600080fd5b5050600c5460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156124eb57600080fd5b505af11580156124ff573d6000803e3d6000fd5b505050506001600160a01b0383166000908152600d6020526040812060020180548291908790811061252d57fe5b6000918252602090912001546001600160a01b0316146126e95761256968056bc75e2d6310000061168e600a548661400490919063ffffffff16565b905061257583826140e0565b6001600160a01b0385166000908152600d6020526040812060020180549295509091879081106125a157fe5b60009182526020822001546040516001600160a01b039091169184919081818185875af1925050503d80600081146125f5576040519150601f19603f3d011682016040523d82523d6000602084013e6125fa565b606091505b5050905080612642576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b600c546001600160a01b0316612656613f17565b6001600160a01b0316600d6000886001600160a01b03166001600160a01b03168152602001908152602001600020600201888154811061269257fe5b6000918252602091829020015460408051878152429381019390935280516001600160a01b03909216927fcc30edb66a991e48ca3676c277d3a35485ebfaf3016fa9536663b2689c8f5eef929081900390910190a4505b6001600160a01b0384166000908152600d6020526040902060030180546127389186918890811061271657fe5b600091825260209091200154600c546001600160a01b03918216911686614122565b6001600160a01b0384166000908152600d6020526040902060030180548690811061275f57fe5b60009182526020918290200154604080518581524293810193909352828101889052516001600160a01b0391821692918716917fa4b627609e711628747558b171b04b9636337afdadac065ee7113fb91eab0b72919081900360600190a35050505050565b600c546001600160a01b031681565b600881815481106127e357600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b031681565b612810611bbd565b15612855576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b826001600160a01b0316612867613f17565b6001600160a01b031614156128c3576040805162461bcd60e51b815260206004820152601f60248201527f5354414b453a20696e76616c6964207265666572726572206164647265737300604482015290519081900360640190fd5b6001600160a01b03821660009081526004602052604090205460ff16612930576040805162461bcd60e51b815260206004820152601a60248201527f5354414b45203a20546f6b656e206973206e6f74204578697374000000000000604482015290519081900360640190fd5b6001600160a01b0382166000908152600460205260408120600101549061298e908390600e9061295e613f17565b6001600160a01b03908116825260208083019390935260409182016000908120918916815292529020549061422d565b10156129cb5760405162461bcd60e51b815260040180806020018281038252602a8152602001806148a7602a913960400191505060405180910390fd5b6001600160a01b038216600090815260046020526040812060020154906129f9908390600e9061295e613f17565b1115612a365760405162461bcd60e51b815260040180806020018281038252602a81526020018061487d602a913960400191505060405180910390fd5b6001600160a01b038216600090815260046020908152604080832060030154600f90925290912054612a68908361422d565b1115612abb576040805162461bcd60e51b815260206004820152601860248201527f5354414b45203a204d61786c696d697420657863656564730000000000000000604482015290519081900360640190fd5b42612ad360095460105461422d90919063ffffffff16565b11612b25576040805162461bcd60e51b815260206004820152601d60248201527f5354414b453a205374616b696e672054696d6520436f6d706c65746564000000604482015290519081900360640190fd5b600d6000612b31613f17565b6001600160a01b03166001600160a01b03168152602001908152602001600020600401600d6000612b60613f17565b6001600160a01b03168152602080820192909252604001600090812060040154835460018101855593825291812090920155600d90612b9d613f17565b6001600160a01b031681526020808201929092526040016000908120600190810180549182018155825290829020918104909101805460ff601f9093166101000a92830219169091179055612bf0613f17565b600d6000612bfc613f17565b6001600160a01b0390811682526020820192909252604001600090812080546001600160a01b03191693909216929092179055600d90612c3a613f17565b6001600160a01b03908116825260208083019390935260409091016000908120600201805460018101825590825292812090920180546001600160a01b031916918616919091179055600d90612c8e613f17565b6001600160a01b03908116825260208083019390935260409091016000908120600301805460018101825590825292812090920180546001600160a01b031916918516919091179055600d90612ce2613f17565b6001600160a01b031681526020808201929092526040016000908120600601805460018101825590825291812042920191909155600d90612d21613f17565b6001600160a01b039081168252602080830193909352604091820160009081206005018054600181018255908252848220018590559085168152600f909252902054612d6d908261422d565b6001600160a01b0383166000908152600f6020526040812091909155612dca908290600e90612d9a613f17565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549061422d565b600e6000612dd6613f17565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120919091556323b872dd612e13613f17565b30846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015612e6b57600080fd5b505af1158015612e7f573d6000803e3d6000fd5b505050506040513d6020811015612e9557600080fd5b5051612eda576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b0316612ef6613f17565b6001600160a01b03167f8d0a98609f00f26e55cd12ea38ffb8a0dfad170f6f001d682185fdce4ff42444612f546001600d6000612f31613f17565b6001600160a01b03168152602081019190915260400160002060040154906140e0565b60408051918252602082018790524282820152519081900360600190a4505050565b6201518081565b612f85613f17565b60005461010090046001600160a01b03908116911614612fda576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b03831660009081526004602052604090205460ff16801561301a57506001600160a01b03821660009081526004602052604090205460ff165b61305d576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08195e1a5cdd608a1b604482015290519081900360640190fd5b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff19168615151790819055825160ff90911615158152429181019190915281517f38dc54047237de43b07dc5d3a0cd9a29485be07da55d5611ddc91102542938ad929181900390910190a3505050565b6130e1613f17565b60005461010090046001600160a01b03908116911614613136576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b8260ff166001148061314b57508260ff166002145b8061315957508260ff166003145b6131aa576040805162461bcd60e51b815260206004820152601760248201527f496e76616c6964204c6f636b61626c6520537461747573000000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526004602052604090205460ff16151560011461320e576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b88139bdd08115e1a5cdd608a1b604482015290519081900360640190fd5b8260ff166001141561324657613224428361422d565b6001600160a01b038516600090815260046020819052604090912001556132a7565b8260ff1660021415613273576001600160a01b0384166000908152600460208190526040822001556132a7565b8260ff16600314156132a7576001600160a01b0384166000908152600460205260409020600501805460ff19168215151790555b6001600160a01b03841660008181526004602081815260409283902091820154600590920154835192835260ff16151590820152428183015290517f4030f7d2425e172fe94d03a4cfd07dcdbc4909529bdf15d2732aa1559ff9be7c9181900360600190a250505050565b61331a613f17565b60005461010090046001600160a01b0390811691161461336f576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b81518351148015613381575080518251145b6133c2576040805162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b604482015290519081900360640190fd5b60005b83518160ff1610156135bc5760046000858360ff16815181106133e457fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16801561344d575060046000848360ff168151811061342557fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff165b613490576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08195e1a5cdd608a1b604482015290519081900360640190fd5b818160ff168151811061349f57fe5b602002602001015160066000868460ff16815181106134ba57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858460ff16815181106134f357fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550828160ff168151811061352e57fe5b60200260200101516001600160a01b0316848260ff168151811061354e57fe5b60200260200101516001600160a01b03167f2dc18c352fdd373a4dc83a7156d0dfe95082bd4d820bda50fa65ee3bcf8648f3848460ff168151811061358f57fe5b602002602001015142604051808381526020018281526020019250505060405180910390a36001016133c5565b50505050565b6135ca613f17565b60005461010090046001600160a01b0390811691161461361f576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b03841660009081526004602052604090205460ff1661367e576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b88139bdd08115e1a5cdd608a1b604482015290519081900360640190fd5b6001600160a01b0384166000818152600460209081526040918290206001810187905560028101869055600301849055815186815290810185905280820184905242606082015290517f6b9e42b75b3aa79aee18ba04bd3f6dedba2d3e55228fadb89fd22817f7ef81ac9181900360800190a250505050565b6000613701611bbd565b15613746576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b826001600160a01b0316613758613f17565b6001600160a01b0316148061378c575060005461010090046001600160a01b0316613781613f17565b6001600160a01b0316145b6137dd576040805162461bcd60e51b815260206004820152601b60248201527f554e5354414b453a20496e76616c6964205573657220456e7472790000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600d6020526040812060030180548490811061380457fe5b60009182526020808320909101546001600160a01b03168083526004918290526040909220015490915042101561387a576040805162461bcd60e51b8152602060048201526015602482015274155394d51052d14e88151bdad95b88131bd8dad959605a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090206005015460ff161561394457426138f1600954600d6000886001600160a01b03166001600160a01b0316815260200190815260200160002060060186815481106138d857fe5b906000526020600020015461422d90919063ffffffff16565b1115613944576040805162461bcd60e51b815260206004820181905260248201527f554e5354414b453a204c6f636b656420696e206f7074696f6e616c206c6f636b604482015290519081900360640190fd5b6001600160a01b0384166000908152600d6020526040812060050180548590811061396b57fe5b906000526020600020015411806139cc57506001600160a01b0384166000908152600d602052604090206001018054849081106139a457fe5b90600052602060002090602091828204019190069054906101000a900460ff16151560011515145b613a075760405162461bcd60e51b81526004018080602001828103825260328152602001806148d16032913960400191505060405180910390fd5b6001600160a01b0384166000908152600d60205260408120600501805485908110613a2e57fe5b60009182526020808320909101546001600160a01b038086168452600f8352604080852054918a168552600d90935291832060050180549194509192919087908110613a7657fe5b60009182526020808320909101929092556001600160a01b0388168152600d90915260408120600101805487908110613aab57fe5b90600052602060002090602091828204019190066101000a81548160ff02191690831515021790555081600d6000886001600160a01b03166001600160a01b031681526020019081526020016000206003018681548110613b0857fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015613b5757600080fd5b505afa158015613b6b573d6000803e3d6000fd5b505050506040513d6020811015613b8157600080fd5b50511015613bd6576040805162461bcd60e51b815260206004820152601e60248201527f554e5354414b45203a20496e73756666696369656e742042616c616e63650000604482015290519081900360640190fd5b6001600160a01b0386166000908152600d60205260409020600301805486908110613bfd57fe5b60009182526020808320909101546040805163a9059cbb60e01b81526001600160a01b038b81166004830152602482018890529151919092169363a9059cbb93604480850194919392918390030190829087803b158015613c5d57600080fd5b505af1158015613c71573d6000803e3d6000fd5b505050506040513d6020811015613c8757600080fd5b50613c96905086868484614287565b6001600160a01b0386166000908152600d60205260409020600301805486908110613cbd57fe5b60009182526020918290200154604080518581524293810193909352828101889052516001600160a01b0391821692918916917fa4b627609e711628747558b171b04b9636337afdadac065ee7113fb91eab0b72919081900360600190a3600193505050505b92915050565b600460208190526000918252604090912080546001820154600283015460038401549484015460059094015460ff8085169661010090950481169593949293911687565b600f6020526000908152604090205481565b600a5481565b613d8d613f17565b60005461010090046001600160a01b03908116911614613de2576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b038116613e275760405162461bcd60e51b81526004018080602001828103825260268152602001806148166026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b610e1081565b6000613e9d613f17565b60005461010090046001600160a01b03908116911614613ef2576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b50600c80546001600160a01b0383166001600160a01b03199091161790556001919050565b3390565b6000613f5d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061433c565b9392505050565b613f6c611bbd565b613fb4576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613fe7613f17565b604080516001600160a01b039092168252519081900360200190a1565b60008261401357506000613d23565b8282028284828161402057fe5b0414613f5d5760405162461bcd60e51b815260040180806020018281038252602181526020018061483c6021913960400191505060405180910390fd5b614065611bbd565b156140aa576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613fe7613f17565b6000613f5d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506143de565b6001600160a01b038216156135bc576040516000906001600160a01b0386169083908381818185875af1925050503d806000811461417c576040519150601f19603f3d011682016040523d82523d6000602084013e614181565b606091505b50509050806141c9576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b0316866001600160a01b03167fcd5e4f020ddad29434c2200a9edf2f8d7ec30f0d787f03b528ab7279aab0acbe8542604051808381526020018281526020019250505060405180910390a45050505050565b600082820183811015613f5d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806142a160095460105461422d90919063ffffffff16565b9150428211156142b25750426142c4565b6009546010546142c19161422d565b90505b6001600160a01b0386166000908152600d60205260409020600601805461430a9190879081106142f057fe5b9060005260206000200154826140e090919063ffffffff16565b91506143146147e2565b84815260208101849052610e1083106143335761433387878386614438565b50505050505050565b600081836143c85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561438d578181015183820152602001614375565b50505050905090810190601f1680156143ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816143d457fe5b0495945050505050565b600081848411156144305760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561438d578181015183820152602001614375565b505050900390565b6000806144436147e2565b61444f84610e10613f1b565b60208201526144618462015180613f1b565b815284516001600160a01b0388166000908152600d6020526040902060030180546144ca926144bf9290918a90811061449657fe5b600091825260209091200154600c546001600160a01b0391821691168960016020020151611655565b602083015190614004565b600c5460408051632e1a7d4d60e01b81526004810184905290519295506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b15801561451a57600080fd5b505af115801561452e573d6000803e3d6000fd5b505050506001600160a01b0387166000908152600d6020526040812060020180548890811061455957fe5b6000918252602090912001546001600160a01b0316146147155761459568056bc75e2d6310000061168e600a548661400490919063ffffffff16565b91506145a183836140e0565b6001600160a01b0388166000908152600d6020526040812060020180549295509091889081106145cd57fe5b60009182526020822001546040516001600160a01b039091169185919081818185875af1925050503d8060008114614621576040519150601f19603f3d011682016040523d82523d6000602084013e614626565b606091505b505090508061466e576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b600c546001600160a01b0316614682613f17565b6001600160a01b0316600d60008b6001600160a01b03166001600160a01b0316815260200190815260200160002060020189815481106146be57fe5b6000918252602091829020015460408051888152429381019390935280516001600160a01b03909216927fcc30edb66a991e48ca3676c277d3a35485ebfaf3016fa9536663b2689c8f5eef929081900390910190a4505b6001600160a01b0387166000908152600d6020526040902060030180546143339189918990811061271657fe5b82805482825590600052602060002090810192821561477d579160200282015b8281111561477d578251825591602001919060010190614762565b50614789929150614800565b5090565b82805482825590600052602060002090810192821561477d579160200282015b8281111561477d57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906147ad565b60405180604001604052806002906020820280368337509192915050565b5b80821115614789576000815560010161480156fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725354414b45203a204d617820416d6f756e742073686f756c642062652077697468696e207065726d69745354414b45203a204d696e20416d6f756e742073686f756c642062652077697468696e207065726d6974554e5354414b45203a20416c726561647920436c61696d656420286f722920496e73756666696369656e74205374616b6564454d455247454e4359203a20416c726561647920436c61696d656420286f722920496e73756666696369656e74205374616b6564a2646970667358221220068de2aa0926e900993c46389d3174dc393ded8b3ccc36a26be94fd8d022ab9d64736f6c63430007060033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106102605760003560e01c80638456cb5911610144578063cdd033c8116100b6578063dd4be6831161007a578063dd4be68314610d33578063e0a79b1614610da4578063e5c4686914610dd7578063f2fde38b14610dec578063fbfcd24114610e1f578063fe9440d714610e3457610267565b8063cdd033c814610a74578063d431350614610ab9578063d43c953514610b03578063d768779a14610cb5578063d939381414610cfa57610267565b8063a572611d11610108578063a572611d14610989578063ad5c4648146109c8578063b104e006146109dd578063b2bdfa7b14610a07578063bf6eac2f14610a1c578063c549e6b914610a5f57610267565b80638456cb591461084457806385d895ef1461085957806388125f791461086e578063a019cb4b14610898578063a4f3f0e5146108cb57610267565b806340a16688116101dd578063539cd3b4116101a1578063539cd3b41461076f57806356117e5d146107a85780635c975abb146107d25780635f96dc11146107e7578063715018a6146107fc5780637bdb8cd31461081157610267565b806340a166881461066057806340f02ab6146106ae5780634cd36531146106c35780634f64b2be1461070c5780635058c4601461073657610267565b80631d2002e7116102245780631d2002e7146103ea5780631de3df2c1461041457806326fa24e91461043057806328523eb6146106105780633f4ba83a1461064b57610267565b806301193ad71461026c57806301bc45c91461031c57806304a624c61461034d5780631320da8b14610374578063187739a4146103af57610267565b3661026757005b600080fd5b34801561027857600080fd5b5061031a6004803603602081101561028f57600080fd5b810190602081018135600160201b8111156102a957600080fd5b8201836020820111156102bb57600080fd5b803590602001918460208302840111600160201b831117156102dc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610e67945050505050565b005b34801561032857600080fd5b5061033161102a565b604080516001600160a01b039092168252519081900360200190f35b34801561035957600080fd5b50610362611039565b60408051918252519081900360200190f35b34801561038057600080fd5b506103626004803603604081101561039757600080fd5b506001600160a01b038135811691602001351661103f565b3480156103bb57600080fd5b50610362600480360360408110156103d257600080fd5b506001600160a01b038135811691602001351661105c565b3480156103f657600080fd5b5061031a6004803603602081101561040d57600080fd5b5035611079565b61041c611118565b604080519115158252519081900360200190f35b34801561043c57600080fd5b506104636004803603602081101561045357600080fd5b50356001600160a01b03166111e7565b6040518080602001806020018060200180602001806020018060200187810387528d818151815260200191508051906020019060200280838360005b838110156104b757818101518382015260200161049f565b5050505090500187810386528c818151815260200191508051906020019060200280838360005b838110156104f65781810151838201526020016104de565b5050505090500187810385528b818151815260200191508051906020019060200280838360005b8381101561053557818101518382015260200161051d565b5050505090500187810384528a818151815260200191508051906020019060200280838360005b8381101561057457818101518382015260200161055c565b50505050905001878103835289818151815260200191508051906020019060200280838360005b838110156105b357818101518382015260200161059b565b50505050905001878103825288818151815260200191508051906020019060200280838360005b838110156105f25781810151838201526020016105da565b505050509050019c5050505050505050505050505060405180910390f35b34801561061c57600080fd5b5061041c6004803603604081101561063357600080fd5b506001600160a01b038135811691602001351661145d565b34801561065757600080fd5b5061041c61147d565b34801561066c57600080fd5b5061041c600480360360a081101561068357600080fd5b5080356001600160a01b0316906020810135906040810135906060810135906080013560ff166114ea565b3480156106ba57600080fd5b5061036261164f565b3480156106cf57600080fd5b50610362600480360360808110156106e657600080fd5b508035906001600160a01b03602082013581169160408101359091169060600135611655565b34801561071857600080fd5b506103316004803603602081101561072f57600080fd5b503561169d565b34801561074257600080fd5b5061031a6004803603604081101561075957600080fd5b506001600160a01b0381351690602001356116c7565b34801561077b57600080fd5b506103316004803603604081101561079257600080fd5b506001600160a01b038135169060200135611909565b3480156107b457600080fd5b5061031a600480360360208110156107cb57600080fd5b5035611941565b3480156107de57600080fd5b5061041c611bbd565b3480156107f357600080fd5b50610362611bc6565b34801561080857600080fd5b5061031a611bcc565b34801561081d57600080fd5b506103626004803603602081101561083457600080fd5b50356001600160a01b0316611ca4565b34801561085057600080fd5b5061041c611cb6565b34801561086557600080fd5b50610362611d1d565b34801561087a57600080fd5b5061031a6004803603602081101561089157600080fd5b5035611d23565b3480156108a457600080fd5b50610331600480360360208110156108bb57600080fd5b50356001600160a01b0316611dc2565b3480156108d757600080fd5b5061031a600480360360408110156108ee57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561091857600080fd5b82018360208201111561092a57600080fd5b803590602001918460208302840111600160201b8311171561094b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611ddd945050505050565b34801561099557600080fd5b5061031a600480360360608110156109ac57600080fd5b508035906001600160a01b0360208201351690604001356120c2565b3480156109d457600080fd5b506103316127c4565b3480156109e957600080fd5b5061036260048036036020811015610a0057600080fd5b50356127d3565b348015610a1357600080fd5b506103316127f4565b348015610a2857600080fd5b5061031a60048036036060811015610a3f57600080fd5b506001600160a01b03813581169160208101359091169060400135612808565b348015610a6b57600080fd5b50610362612f76565b348015610a8057600080fd5b5061031a60048036036060811015610a9757600080fd5b506001600160a01b038135811691602081013590911690604001351515612f7d565b348015610ac557600080fd5b5061031a60048036036080811015610adc57600080fd5b506001600160a01b038135169060ff602082013516906040810135906060013515156130d9565b348015610b0f57600080fd5b5061031a60048036036060811015610b2657600080fd5b810190602081018135600160201b811115610b4057600080fd5b820183602082011115610b5257600080fd5b803590602001918460208302840111600160201b83111715610b7357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610bc257600080fd5b820183602082011115610bd457600080fd5b803590602001918460208302840111600160201b83111715610bf557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c4457600080fd5b820183602082011115610c5657600080fd5b803590602001918460208302840111600160201b83111715610c7757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613312945050505050565b348015610cc157600080fd5b5061031a60048036036080811015610cd857600080fd5b506001600160a01b0381351690602081013590604081013590606001356135c2565b348015610d0657600080fd5b5061041c60048036036040811015610d1d57600080fd5b506001600160a01b0381351690602001356136f7565b348015610d3f57600080fd5b50610d6660048036036020811015610d5657600080fd5b50356001600160a01b0316613d29565b60408051971515885260ff9096166020880152868601949094526060860192909252608085015260a0840152151560c0830152519081900360e00190f35b348015610db057600080fd5b5061036260048036036020811015610dc757600080fd5b50356001600160a01b0316613d6d565b348015610de357600080fd5b50610362613d7f565b348015610df857600080fd5b5061031a60048036036020811015610e0f57600080fd5b50356001600160a01b0316613d85565b348015610e2b57600080fd5b50610362613e8d565b348015610e4057600080fd5b5061041c60048036036020811015610e5757600080fd5b50356001600160a01b0316613e93565b610e6f613f17565b60005461010090046001600160a01b03908116911614610ec4576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6040805160008152602081019182905251610ee191600891614742565b5060005b81518160ff161015610fa857600954600090610f049062015180613f1b565b9050828260ff1681518110610f1557fe5b60200260200101518111610f67576040805162461bcd60e51b8152602060048201526014602482015273496e76616c696420496e74657276616c2044617960601b604482015290519081900360640190fd5b6008838360ff1681518110610f7857fe5b60209081029190910181015182546001818101855560009485529290932090920191909155919091019050610ee5565b507f29635226d0b00834767b0cf38daca8dc0fe978152b0a8a5b39eb2811263523616008426040518080602001838152602001828103825284818154815260200191508054801561101857602002820191906000526020600020905b815481526020019060010190808311611004575b5050935050505060405180910390a150565b6001546001600160a01b031681565b600b5481565b600e60209081526000928352604080842090915290825290205481565b600660209081526000928352604080842090915290825290205481565b611081613f17565b60005461010090046001600160a01b039081169116146110d6576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b600a8190556040805182815242602082015281517f886f1c6ee47e76ca7e1c7715d9662c5cbc03a9215b76899c702e3d1c38d1ee43929181900390910190a150565b6000611122613f17565b60005461010090046001600160a01b03908116911614611177576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b600c60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111c757600080fd5b505af11580156111db573d6000803e3d6000fd5b50505050506001905090565b6001600160a01b0381166000908152600d6020908152604091829020600281018054845181850281018501909552808552606094859485948594859485949193600384019360018101936004820193600583019360069093019288919083018282801561127d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161125f575b50505050509550848054806020026020016040519081016040528092919081815260200182805480156112d957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112bb575b505050505094508380548060200260200160405190810160405280929190818152602001828054801561134b57602002820191906000526020600020906000905b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161131a5790505b505050505093508280548060200260200160405190810160405280929190818152602001828054801561139d57602002820191906000526020600020905b815481526020019060010190808311611389575b50505050509250818054806020026020016040519081016040528092919081815260200182805480156113ef57602002820191906000526020600020905b8154815260200190600101908083116113db575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561144157602002820191906000526020600020905b81548152602001906001019080831161142d575b5050505050905095509550955095509550955091939550919395565b600760209081526000928352604080842090915290825290205460ff1681565b6000611487613f17565b60005461010090046001600160a01b039081169116146114dc576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6114e4613f64565b50600190565b60006114f4613f17565b60005461010090046001600160a01b03908116911614611549576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b03861660009081526004602052604090205460ff166115b557600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b0386166000818152600460209081526040918290208054600160ff19909116811761ff00191661010060ff891602178255810189905560028101889055600301869055815188815290810187905280820186905242606082015290517f6b9e42b75b3aa79aee18ba04bd3f6dedba2d3e55228fadb89fd22817f7ef81ac916080908290030190a250600195945050505050565b60095481565b6001600160a01b03808416600090815260066020908152604080832093861683529290529081205461169490839061168e908890614004565b90613f1b565b95945050505050565b600281815481106116ad57600080fd5b6000918252602090912001546001600160a01b0316905081565b6116cf613f17565b60005461010090046001600160a01b03908116911614611724576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b80826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561177257600080fd5b505afa158015611786573d6000803e3d6000fd5b505050506040513d602081101561179c57600080fd5b505110156117e8576040805162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015290519081900360640190fd5b816001600160a01b031663a9059cbb600060019054906101000a90046001600160a01b0316836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561185457600080fd5b505af1158015611868573d6000803e3d6000fd5b505050506040513d602081101561187e57600080fd5b50516118c3576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6040805182815242602082015281516001600160a01b038516927fcb92e2679de255302c9b8d0673cbdf8ef54667e943bf8f049bcaf6a85926ba1a928290030190a25050565b6003602052816000526040600020818154811061192557600080fd5b6000918252602090912001546001600160a01b03169150829050565b611949613f17565b60005461010090046001600160a01b0390811691161461199e576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b600c54604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156119e857600080fd5b505afa1580156119fc573d6000803e3d6000fd5b505050506040513d6020811015611a1257600080fd5b50511015611a5e576040805162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015290519081900360640190fd5b600c5460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015611aab57600080fd5b505af1158015611abf573d6000803e3d6000fd5b50506000805460405191935061010090046001600160a01b0316915083908381818185875af1925050503d8060008114611b15576040519150601f19603f3d011682016040523d82523d6000602084013e611b1a565b606091505b5050905080611b70576040805162461bcd60e51b815260206004820181905260248201527f53616665576974686472617745544820657865637574696f6e206661696c6564604482015290519081900360640190fd5b600c546040805184815242602082015281516001600160a01b03909316927fcb92e2679de255302c9b8d0673cbdf8ef54667e943bf8f049bcaf6a85926ba1a929181900390910190a25050565b60005460ff1690565b60105481565b611bd4613f17565b6001546001600160a01b03908116911614611c36576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652041646d696e604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693610100909204909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60056020526000908152604090205481565b6000611cc0613f17565b60005461010090046001600160a01b03908116911614611d15576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6114e461405d565b60025490565b611d2b613f17565b60005461010090046001600160a01b03908116911614611d80576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b60098190556040805182815242602082015281517ff676bd50ed08b41fe017c9b4b7606b132ed9afafd39cbe090006c602170638bf929181900390910190a150565b600d602052600090815260409020546001600160a01b031681565b611de5613f17565b60005461010090046001600160a01b03908116911614611e3a576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b60408051600080825260208083018085526001600160a01b038716835260039091529290209051611e6b929061478d565b506001600160a01b03821660009081526004602052604090205460ff16611ed2576040805162461bcd60e51b815260206004820152601660248201527514dd185ad95908151bdad95b88139bdd08115e1a5cdd60521b604482015290519081900360640190fd5b60005b81518160ff16101561201b5760025482511115611f29576040805162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b604482015290519081900360640190fd5b60046000838360ff1681518110611f3c57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16611fad576040805162461bcd60e51b815260206004820152601660248201527514995dd85c9908151bdad95b88139bdd08115e1a5cdd60521b604482015290519081900360640190fd5b6001600160a01b03831660009081526003602052604090208251839060ff8416908110611fd657fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501611ed5565b506001600160a01b03821660008181526003602090815260409182902082514292810183905283815281549381018490527f533d99224d362fcbe71ce5ff0a8b2d61a9c08b8d1df27aab851edb881f3fb16b9391929181906060820190859080156120af57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612091575b5050935050505060405180910390a25050565b6120ca613f17565b60005461010090046001600160a01b0390811691161461211f576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600d6020526040812060050180548590811061214657fe5b90600052602060002001541180156121a857506001600160a01b0382166000908152600d6020526040902060010180548490811061218057fe5b90600052602060002090602091828204019190069054906101000a900460ff16151560011515145b6121e35760405162461bcd60e51b81526004018080602001828103825260348152602001806149036034913960400191505060405180910390fd5b6001600160a01b0382166000908152600d6020526040902060050180548490811061220a57fe5b9060005260206000200154600d6000846001600160a01b03166001600160a01b03168152602001908152602001600020600301848154811061224857fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b50511015612316576040805162461bcd60e51b815260206004820181905260248201527f454d455247454e4359203a20496e73756666696369656e742042616c616e6365604482015290519081900360640190fd5b6001600160a01b0382166000908152600d6020526040812060050180548590811061233d57fe5b906000526020600020015490506000600d6000856001600160a01b03166001600160a01b03168152602001908152602001600020600101858154811061237f57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083151502179055506000600d6000856001600160a01b03166001600160a01b0316815260200190815260200160002060050185815481106123dd57fe5b60009182526020808320909101929092556001600160a01b0385168152600d9091526040902060030180548590811061241257fe5b60009182526020808320909101546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018790529151919092169363a9059cbb93604480850194919392918390030190829087803b15801561247257600080fd5b505af1158015612486573d6000803e3d6000fd5b505050506040513d602081101561249c57600080fd5b5050600c5460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156124eb57600080fd5b505af11580156124ff573d6000803e3d6000fd5b505050506001600160a01b0383166000908152600d6020526040812060020180548291908790811061252d57fe5b6000918252602090912001546001600160a01b0316146126e95761256968056bc75e2d6310000061168e600a548661400490919063ffffffff16565b905061257583826140e0565b6001600160a01b0385166000908152600d6020526040812060020180549295509091879081106125a157fe5b60009182526020822001546040516001600160a01b039091169184919081818185875af1925050503d80600081146125f5576040519150601f19603f3d011682016040523d82523d6000602084013e6125fa565b606091505b5050905080612642576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b600c546001600160a01b0316612656613f17565b6001600160a01b0316600d6000886001600160a01b03166001600160a01b03168152602001908152602001600020600201888154811061269257fe5b6000918252602091829020015460408051878152429381019390935280516001600160a01b03909216927fcc30edb66a991e48ca3676c277d3a35485ebfaf3016fa9536663b2689c8f5eef929081900390910190a4505b6001600160a01b0384166000908152600d6020526040902060030180546127389186918890811061271657fe5b600091825260209091200154600c546001600160a01b03918216911686614122565b6001600160a01b0384166000908152600d6020526040902060030180548690811061275f57fe5b60009182526020918290200154604080518581524293810193909352828101889052516001600160a01b0391821692918716917fa4b627609e711628747558b171b04b9636337afdadac065ee7113fb91eab0b72919081900360600190a35050505050565b600c546001600160a01b031681565b600881815481106127e357600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b031681565b612810611bbd565b15612855576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b826001600160a01b0316612867613f17565b6001600160a01b031614156128c3576040805162461bcd60e51b815260206004820152601f60248201527f5354414b453a20696e76616c6964207265666572726572206164647265737300604482015290519081900360640190fd5b6001600160a01b03821660009081526004602052604090205460ff16612930576040805162461bcd60e51b815260206004820152601a60248201527f5354414b45203a20546f6b656e206973206e6f74204578697374000000000000604482015290519081900360640190fd5b6001600160a01b0382166000908152600460205260408120600101549061298e908390600e9061295e613f17565b6001600160a01b03908116825260208083019390935260409182016000908120918916815292529020549061422d565b10156129cb5760405162461bcd60e51b815260040180806020018281038252602a8152602001806148a7602a913960400191505060405180910390fd5b6001600160a01b038216600090815260046020526040812060020154906129f9908390600e9061295e613f17565b1115612a365760405162461bcd60e51b815260040180806020018281038252602a81526020018061487d602a913960400191505060405180910390fd5b6001600160a01b038216600090815260046020908152604080832060030154600f90925290912054612a68908361422d565b1115612abb576040805162461bcd60e51b815260206004820152601860248201527f5354414b45203a204d61786c696d697420657863656564730000000000000000604482015290519081900360640190fd5b42612ad360095460105461422d90919063ffffffff16565b11612b25576040805162461bcd60e51b815260206004820152601d60248201527f5354414b453a205374616b696e672054696d6520436f6d706c65746564000000604482015290519081900360640190fd5b600d6000612b31613f17565b6001600160a01b03166001600160a01b03168152602001908152602001600020600401600d6000612b60613f17565b6001600160a01b03168152602080820192909252604001600090812060040154835460018101855593825291812090920155600d90612b9d613f17565b6001600160a01b031681526020808201929092526040016000908120600190810180549182018155825290829020918104909101805460ff601f9093166101000a92830219169091179055612bf0613f17565b600d6000612bfc613f17565b6001600160a01b0390811682526020820192909252604001600090812080546001600160a01b03191693909216929092179055600d90612c3a613f17565b6001600160a01b03908116825260208083019390935260409091016000908120600201805460018101825590825292812090920180546001600160a01b031916918616919091179055600d90612c8e613f17565b6001600160a01b03908116825260208083019390935260409091016000908120600301805460018101825590825292812090920180546001600160a01b031916918516919091179055600d90612ce2613f17565b6001600160a01b031681526020808201929092526040016000908120600601805460018101825590825291812042920191909155600d90612d21613f17565b6001600160a01b039081168252602080830193909352604091820160009081206005018054600181018255908252848220018590559085168152600f909252902054612d6d908261422d565b6001600160a01b0383166000908152600f6020526040812091909155612dca908290600e90612d9a613f17565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549061422d565b600e6000612dd6613f17565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120919091556323b872dd612e13613f17565b30846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015612e6b57600080fd5b505af1158015612e7f573d6000803e3d6000fd5b505050506040513d6020811015612e9557600080fd5b5051612eda576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b0316612ef6613f17565b6001600160a01b03167f8d0a98609f00f26e55cd12ea38ffb8a0dfad170f6f001d682185fdce4ff42444612f546001600d6000612f31613f17565b6001600160a01b03168152602081019190915260400160002060040154906140e0565b60408051918252602082018790524282820152519081900360600190a4505050565b6201518081565b612f85613f17565b60005461010090046001600160a01b03908116911614612fda576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b03831660009081526004602052604090205460ff16801561301a57506001600160a01b03821660009081526004602052604090205460ff165b61305d576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08195e1a5cdd608a1b604482015290519081900360640190fd5b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff19168615151790819055825160ff90911615158152429181019190915281517f38dc54047237de43b07dc5d3a0cd9a29485be07da55d5611ddc91102542938ad929181900390910190a3505050565b6130e1613f17565b60005461010090046001600160a01b03908116911614613136576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b8260ff166001148061314b57508260ff166002145b8061315957508260ff166003145b6131aa576040805162461bcd60e51b815260206004820152601760248201527f496e76616c6964204c6f636b61626c6520537461747573000000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526004602052604090205460ff16151560011461320e576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b88139bdd08115e1a5cdd608a1b604482015290519081900360640190fd5b8260ff166001141561324657613224428361422d565b6001600160a01b038516600090815260046020819052604090912001556132a7565b8260ff1660021415613273576001600160a01b0384166000908152600460208190526040822001556132a7565b8260ff16600314156132a7576001600160a01b0384166000908152600460205260409020600501805460ff19168215151790555b6001600160a01b03841660008181526004602081815260409283902091820154600590920154835192835260ff16151590820152428183015290517f4030f7d2425e172fe94d03a4cfd07dcdbc4909529bdf15d2732aa1559ff9be7c9181900360600190a250505050565b61331a613f17565b60005461010090046001600160a01b0390811691161461336f576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b81518351148015613381575080518251145b6133c2576040805162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b604482015290519081900360640190fd5b60005b83518160ff1610156135bc5760046000858360ff16815181106133e457fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16801561344d575060046000848360ff168151811061342557fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff165b613490576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08195e1a5cdd608a1b604482015290519081900360640190fd5b818160ff168151811061349f57fe5b602002602001015160066000868460ff16815181106134ba57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858460ff16815181106134f357fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550828160ff168151811061352e57fe5b60200260200101516001600160a01b0316848260ff168151811061354e57fe5b60200260200101516001600160a01b03167f2dc18c352fdd373a4dc83a7156d0dfe95082bd4d820bda50fa65ee3bcf8648f3848460ff168151811061358f57fe5b602002602001015142604051808381526020018281526020019250505060405180910390a36001016133c5565b50505050565b6135ca613f17565b60005461010090046001600160a01b0390811691161461361f576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b03841660009081526004602052604090205460ff1661367e576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b88139bdd08115e1a5cdd608a1b604482015290519081900360640190fd5b6001600160a01b0384166000818152600460209081526040918290206001810187905560028101869055600301849055815186815290810185905280820184905242606082015290517f6b9e42b75b3aa79aee18ba04bd3f6dedba2d3e55228fadb89fd22817f7ef81ac9181900360800190a250505050565b6000613701611bbd565b15613746576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b826001600160a01b0316613758613f17565b6001600160a01b0316148061378c575060005461010090046001600160a01b0316613781613f17565b6001600160a01b0316145b6137dd576040805162461bcd60e51b815260206004820152601b60248201527f554e5354414b453a20496e76616c6964205573657220456e7472790000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600d6020526040812060030180548490811061380457fe5b60009182526020808320909101546001600160a01b03168083526004918290526040909220015490915042101561387a576040805162461bcd60e51b8152602060048201526015602482015274155394d51052d14e88151bdad95b88131bd8dad959605a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090206005015460ff161561394457426138f1600954600d6000886001600160a01b03166001600160a01b0316815260200190815260200160002060060186815481106138d857fe5b906000526020600020015461422d90919063ffffffff16565b1115613944576040805162461bcd60e51b815260206004820181905260248201527f554e5354414b453a204c6f636b656420696e206f7074696f6e616c206c6f636b604482015290519081900360640190fd5b6001600160a01b0384166000908152600d6020526040812060050180548590811061396b57fe5b906000526020600020015411806139cc57506001600160a01b0384166000908152600d602052604090206001018054849081106139a457fe5b90600052602060002090602091828204019190069054906101000a900460ff16151560011515145b613a075760405162461bcd60e51b81526004018080602001828103825260328152602001806148d16032913960400191505060405180910390fd5b6001600160a01b0384166000908152600d60205260408120600501805485908110613a2e57fe5b60009182526020808320909101546001600160a01b038086168452600f8352604080852054918a168552600d90935291832060050180549194509192919087908110613a7657fe5b60009182526020808320909101929092556001600160a01b0388168152600d90915260408120600101805487908110613aab57fe5b90600052602060002090602091828204019190066101000a81548160ff02191690831515021790555081600d6000886001600160a01b03166001600160a01b031681526020019081526020016000206003018681548110613b0857fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015613b5757600080fd5b505afa158015613b6b573d6000803e3d6000fd5b505050506040513d6020811015613b8157600080fd5b50511015613bd6576040805162461bcd60e51b815260206004820152601e60248201527f554e5354414b45203a20496e73756666696369656e742042616c616e63650000604482015290519081900360640190fd5b6001600160a01b0386166000908152600d60205260409020600301805486908110613bfd57fe5b60009182526020808320909101546040805163a9059cbb60e01b81526001600160a01b038b81166004830152602482018890529151919092169363a9059cbb93604480850194919392918390030190829087803b158015613c5d57600080fd5b505af1158015613c71573d6000803e3d6000fd5b505050506040513d6020811015613c8757600080fd5b50613c96905086868484614287565b6001600160a01b0386166000908152600d60205260409020600301805486908110613cbd57fe5b60009182526020918290200154604080518581524293810193909352828101889052516001600160a01b0391821692918916917fa4b627609e711628747558b171b04b9636337afdadac065ee7113fb91eab0b72919081900360600190a3600193505050505b92915050565b600460208190526000918252604090912080546001820154600283015460038401549484015460059094015460ff8085169661010090950481169593949293911687565b600f6020526000908152604090205481565b600a5481565b613d8d613f17565b60005461010090046001600160a01b03908116911614613de2576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b6001600160a01b038116613e275760405162461bcd60e51b81526004018080602001828103825260268152602001806148166026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b610e1081565b6000613e9d613f17565b60005461010090046001600160a01b03908116911614613ef2576040805162461bcd60e51b8152602060048201819052602482015260008051602061485d833981519152604482015290519081900360640190fd5b50600c80546001600160a01b0383166001600160a01b03199091161790556001919050565b3390565b6000613f5d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061433c565b9392505050565b613f6c611bbd565b613fb4576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613fe7613f17565b604080516001600160a01b039092168252519081900360200190a1565b60008261401357506000613d23565b8282028284828161402057fe5b0414613f5d5760405162461bcd60e51b815260040180806020018281038252602181526020018061483c6021913960400191505060405180910390fd5b614065611bbd565b156140aa576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613fe7613f17565b6000613f5d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506143de565b6001600160a01b038216156135bc576040516000906001600160a01b0386169083908381818185875af1925050503d806000811461417c576040519150601f19603f3d011682016040523d82523d6000602084013e614181565b606091505b50509050806141c9576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b0316866001600160a01b03167fcd5e4f020ddad29434c2200a9edf2f8d7ec30f0d787f03b528ab7279aab0acbe8542604051808381526020018281526020019250505060405180910390a45050505050565b600082820183811015613f5d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806142a160095460105461422d90919063ffffffff16565b9150428211156142b25750426142c4565b6009546010546142c19161422d565b90505b6001600160a01b0386166000908152600d60205260409020600601805461430a9190879081106142f057fe5b9060005260206000200154826140e090919063ffffffff16565b91506143146147e2565b84815260208101849052610e1083106143335761433387878386614438565b50505050505050565b600081836143c85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561438d578181015183820152602001614375565b50505050905090810190601f1680156143ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816143d457fe5b0495945050505050565b600081848411156144305760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561438d578181015183820152602001614375565b505050900390565b6000806144436147e2565b61444f84610e10613f1b565b60208201526144618462015180613f1b565b815284516001600160a01b0388166000908152600d6020526040902060030180546144ca926144bf9290918a90811061449657fe5b600091825260209091200154600c546001600160a01b0391821691168960016020020151611655565b602083015190614004565b600c5460408051632e1a7d4d60e01b81526004810184905290519295506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b15801561451a57600080fd5b505af115801561452e573d6000803e3d6000fd5b505050506001600160a01b0387166000908152600d6020526040812060020180548890811061455957fe5b6000918252602090912001546001600160a01b0316146147155761459568056bc75e2d6310000061168e600a548661400490919063ffffffff16565b91506145a183836140e0565b6001600160a01b0388166000908152600d6020526040812060020180549295509091889081106145cd57fe5b60009182526020822001546040516001600160a01b039091169185919081818185875af1925050503d8060008114614621576040519150601f19603f3d011682016040523d82523d6000602084013e614626565b606091505b505090508061466e576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b600c546001600160a01b0316614682613f17565b6001600160a01b0316600d60008b6001600160a01b03166001600160a01b0316815260200190815260200160002060020189815481106146be57fe5b6000918252602091829020015460408051888152429381019390935280516001600160a01b03909216927fcc30edb66a991e48ca3676c277d3a35485ebfaf3016fa9536663b2689c8f5eef929081900390910190a4505b6001600160a01b0387166000908152600d6020526040902060030180546143339189918990811061271657fe5b82805482825590600052602060002090810192821561477d579160200282015b8281111561477d578251825591602001919060010190614762565b50614789929150614800565b5090565b82805482825590600052602060002090810192821561477d579160200282015b8281111561477d57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906147ad565b60405180604001604052806002906020820280368337509192915050565b5b80821115614789576000815560010161480156fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725354414b45203a204d617820416d6f756e742073686f756c642062652077697468696e207065726d69745354414b45203a204d696e20416d6f756e742073686f756c642062652077697468696e207065726d6974554e5354414b45203a20416c726561647920436c61696d656420286f722920496e73756666696369656e74205374616b6564454d455247454e4359203a20416c726561647920436c61696d656420286f722920496e73756666696369656e74205374616b6564a2646970667358221220068de2aa0926e900993c46389d3174dc393ded8b3ccc36a26be94fd8d022ab9d64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _WETHAddress (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode Sourcemap
23409:13991:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21233:424;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21233:424:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21233:424:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21233:424:0;;-1:-1:-1;21233:424:0;;-1:-1:-1;;;;;21233:424:0:i;:::-;;3485:21;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3485:21:0;;;;;;;;;;;;;;14828:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23874:71;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23874:71:0;;;;;;;;;;:::i;14453:86::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14453:86:0;;;;;;;;;;:::i;21049:176::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21049:176:0;;:::i;25122:138::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;36572:605;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36572:605:0;-1:-1:-1;;;;;36572:605:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14546:70;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14546:70:0;;;;;;;;;;:::i;37293:104::-;;;;;;;;;;;;;:::i;16611:792::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16611:792:0;;-1:-1:-1;;;;;16611:792:0;;;;;;;;;;;;;;;;;;;;;;;:::i;14758:28::-;;;;;;;;;;;;;:::i;30804:325::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30804:325:0;;;-1:-1:-1;;;;;30804:325:0;;;;;;;;;;;;;;;;;;;:::i;14254:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14254:23:0;;:::i;22232:437::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22232:437:0;;;;;;;;:::i;14284:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14284:55:0;;;;;;;;:::i;22677:489::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22677:489:0;;:::i;2144:86::-;;;;;;;;;;;;;:::i;24006:28::-;;;;;;;;;;;;;:::i;4668:132::-;;;;;;;;;;;;;:::i;14402:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14402:44:0;-1:-1:-1;;;;;14402:44:0;;:::i;37185:100::-;;;;;;;;;;;;;:::i;23174:98::-;;;;;;;;;;;;;:::i;20858:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20858:183:0;;:::i;23816:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23816:51:0;-1:-1:-1;;;;;23816:51:0;;:::i;18369:847::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18369:847:0;;;;;;;;;;;;;;;-1:-1:-1;;;18369:847:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18369:847:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18369:847:0;;-1:-1:-1;18369:847:0;;-1:-1:-1;;;;;18369:847:0:i;34265:2210::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34265:2210:0;;;-1:-1:-1;;;;;34265:2210:0;;;;;;;;;;:::i;16193:18::-;;;;;;;;;;;;;:::i;14623:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14623:38:0;;:::i;3457:21::-;;;;;;;;;;;;;:::i;25435:2512::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25435:2512:0;;;;;;;;;;;;;;;;;:::i;14668:37::-;;;;;;;;;;;;;:::i;21665:559::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21665:559:0;;;;;;;;;;;;;;;;;;;:::i;19851:999::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19851:999:0;;;;;;;;;;;;;;;;;;;;;;:::i;17411:950::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17411:950:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17411:950:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17411:950:0;;;;;;;;-1:-1:-1;17411:950:0;;-1:-1:-1;;;;;17411:950:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17411:950:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17411:950:0;;;;;;;;-1:-1:-1;17411:950:0;;-1:-1:-1;;;;;17411:950:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17411:950:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17411:950:0;;-1:-1:-1;17411:950:0;;-1:-1:-1;;;;;17411:950:0:i;19224:619::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19224:619:0;;;;;;;;;;;;;;;;;;:::i;32043:2214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32043:2214:0;;;;;;;;:::i;14346:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14346:49:0;-1:-1:-1;;;;;14346:49:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23952:47;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23952:47:0;-1:-1:-1;;;;;23952:47:0;;:::i;14793:28::-;;;;;;;;;;;;;:::i;4955:281::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4955:281:0;-1:-1:-1;;;;;4955:281:0;;:::i;14712:39::-;;;;;;;;;;;;;:::i;16421:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16421:182:0;-1:-1:-1;;;;;16421:182:0;;:::i;21233:424::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;21332:16:::1;::::0;;21346:1:::1;21332:16:::0;;::::1;::::0;::::1;::::0;;;;21317:31;::::1;::::0;:12:::1;::::0;:31:::1;:::i;:::-;;21366:7;21361:221;21383:9;:16;21379:1;:20;;;21361:221;;;21435:13;::::0;21421:11:::1;::::0;21435:23:::1;::::0;14699:6:::1;21435:17;:23::i;:::-;21421:37;;21487:9;21497:1;21487:12;;;;;;;;;;;;;;;;21481:3;:18;21473:51;;;::::0;;-1:-1:-1;;;21473:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21473:51:0;;;;;;;;;;;;;::::1;;21539:12;21557:9;21567:1;21557:12;;;;;;;;;;;::::0;;::::1;::::0;;;;;;;21539:31;;::::1;::::0;;::::1;::::0;;-1:-1:-1;21539:31:0;;;;;;;;;::::1;::::0;;;;21401:3;;;::::1;::::0;-1:-1:-1;21361:221:0::1;;;;21599:50;21619:12;21633:15;21599:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21233:424:::0;:::o;3485:21::-;;;-1:-1:-1;;;;;3485:21:0;;:::o;14828:32::-;;;;:::o;23874:71::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14453:86::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;21049:176::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;21122:13:::1;:22:::0;;;21160:57:::1;::::0;;;;;21201:15:::1;21160:57;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;21049:176:::0;:::o;25122:138::-;25181:4;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;25198:4:::1;;;;;;;;;-1:-1:-1::0;;;;;25198:4:0::1;-1:-1:-1::0;;;;;25198:12:0::1;;25218:9;25198:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;25248:4;25241:11;;25122:138:::0;:::o;36572:605::-;-1:-1:-1;;;;;36895:21:0;;;;;;:14;:21;;;;;;;;;:30;;;36873:296;;;;;;;;;;;;;;;;;36677:16;;;;;;;;;;;;36895:30;;36940:34;;;;36989:30;;;;37034:29;;;;37078:34;;;;37127:31;;;;;36895:30;;36873:296;;;36895:30;36873:296;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36873:296:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36873:296:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36572:605;;;;;;;:::o;14546:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37293:104::-;37340:4;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;37357:10:::1;:8;:10::i;:::-;-1:-1:-1::0;37385:4:0::1;37293:104:::0;:::o;16611:792::-;16808:4;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16831:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;:34;::::1;;16825:68;;16868:6;:25:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;16868:25:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;16868:25:0::1;-1:-1:-1::0;;;;;16868:25:0;::::1;;::::0;;16825:68:::1;-1:-1:-1::0;;;;;16906:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;;;:41;;16943:4:::1;-1:-1:-1::0;;16906:41:0;;::::1;::::0;::::1;-1:-1:-1::0;;16958:44:0::1;16906:41;;16958:44:::0;::::1;;;::::0;;17013:39;::::1;:54:::0;;;17078:39:::1;::::0;::::1;:54:::0;;;17143:40:::1;;:53:::0;;;17214:159;;;;;;;::::1;::::0;;;;;;;;;17347:15:::1;17214:159:::0;;;;;;::::1;::::0;;;;;;;;::::1;-1:-1:-1::0;17391:4:0::1;16611:792:::0;;;;;;;:::o;14758:28::-;;;;:::o;30804:325::-;-1:-1:-1;;;;;31045:35:0;;;30977:14;31045:35;;;:22;:35;;;;;;;;:48;;;;;;;;;;;;31013:108;;31110:10;;31028:66;;:12;;:16;:66::i;:::-;31013:96;;:108::i;:::-;31004:117;30804:325;-1:-1:-1;;;;;30804:325:0:o;14254:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14254:23:0;;-1:-1:-1;14254:23:0;:::o;22232:437::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;22414:6:::1;22372:12;-1:-1:-1::0;;;;;22365:30:0::1;;22404:4;22365:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;22365:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22365:45:0;:55:::1;;22343:125;;;::::0;;-1:-1:-1;;;22343:125:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22343:125:0;;;;;;;;;;;;;::::1;;22508:12;-1:-1:-1::0;;;;;22501:29:0::1;;22531:6;;;;;;;;;-1:-1:-1::0;;;;;22531:6:0::1;22539;22501:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;22501:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22501:45:0;22479:110:::1;;;::::0;;-1:-1:-1;;;22479:110:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22479:110:0;;;;;;;;;;;;;::::1;;22607:54;::::0;;;;;22645:15:::1;22607:54;::::0;::::1;::::0;;;-1:-1:-1;;;;;22607:54:0;::::1;::::0;::::1;::::0;;;;;;::::1;22232:437:::0;;:::o;14284:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14284:55:0;;-1:-1:-1;14284:55:0;;-1:-1:-1;14284:55:0:o;22677:489::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;22770:4:::1;::::0;:29:::1;::::0;;-1:-1:-1;;;22770:29:0;;22793:4:::1;22770:29;::::0;::::1;::::0;;;22803:6;;-1:-1:-1;;;;;22770:4:0::1;::::0;:14:::1;::::0;:29;;;;;::::1;::::0;;;;;;;;:4;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22770:29:0;:39:::1;;22748:109;;;::::0;;-1:-1:-1;;;22748:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22748:109:0;;;;;;;;;;;;;::::1;;22898:4;::::0;:21:::1;::::0;;-1:-1:-1;;;22898:21:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;22898:4:0;;::::1;::::0;:13:::1;::::0;:21;;;;;:4:::1;::::0;:21;;;;;;;;:4;;:21;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22974:12:0::1;22992:6:::0;;:30:::1;::::0;22974:12;;-1:-1:-1;22992:6:0::1;::::0;::::1;-1:-1:-1::0;;;;;22992:6:0::1;::::0;-1:-1:-1;23011:6:0;;22974:12;22992:30;22974:12;22992:30;23011:6;22992;:30:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22973:49;;;23041:7;23033:52;;;::::0;;-1:-1:-1;;;23033:52:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23127:4;::::0;23103:55:::1;::::0;;;;;23142:15:::1;23103:55;::::0;::::1;::::0;;;-1:-1:-1;;;;;23127:4:0;;::::1;::::0;23103:55:::1;::::0;;;;;;;;;::::1;4096:1;22677:489:::0;:::o;2144:86::-;2191:4;2215:7;;;2144:86;:::o;24006:28::-;;;;:::o;4668:132::-;4248:12;:10;:12::i;:::-;4238:6;;-1:-1:-1;;;;;4238:6:0;;;:22;;;4230:67;;;;;-1:-1:-1;;;4230:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4759:6:::1;::::0;::::1;4751::::0;;4730:36:::1;::::0;-1:-1:-1;;;;;4759:6:0;;::::1;::::0;::::1;4751::::0;;::::1;::::0;;::::1;::::0;4730:36:::1;::::0;::::1;4786:6;::::0;::::1;4777:15:::0;;-1:-1:-1;;;;;4786:6:0;;::::1;;4777:15;-1:-1:-1::0;;;;;;4777:15:0;;::::1;::::0;;;::::1;::::0;;4668:132::o;14402:44::-;;;;;;;;;;;;;:::o;37185:100::-;37230:4;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;37247:8:::1;:6;:8::i;23174:98::-:0;23251:6;:13;23174:98;:::o;20858:183::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;20937:13:::1;:28:::0;;;20981:52:::1;::::0;;;;;21017:15:::1;20981:52;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;20858:183:::0;:::o;23816:51::-;;;;;;;;;;;;-1:-1:-1;;;;;23816:51:0;;:::o;18369:847::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;18539:16:::1;::::0;;18553:1:::1;18539:16:::0;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;18505:31:0;::::1;::::0;;:18:::1;:31:::0;;;;;;:50;;::::1;::::0;18539:16;18505:50:::1;:::i;:::-;-1:-1:-1::0;;;;;;18574:25:0;::::1;;::::0;;;:12:::1;:25;::::0;;;;:33;::::1;;18566:68;;;::::0;;-1:-1:-1;;;18566:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;18566:68:0;;;;;;;;;;;;;::::1;;18650:7;18645:418;18667:19;:26;18663:1;:30;;;18645:418;;;18771:6;:13:::0;18741:26;;:43:::1;;18715:118;;;::::0;;-1:-1:-1;;;18715:118:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;18715:118:0;;;;;;;;;;;;;::::1;;18874:12;:36;18887:19;18907:1;18887:22;;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18874:36:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;18874:36:0;:44;::::1;;18848:128;;;::::0;;-1:-1:-1;;;18848:128:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;18848:128:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;18991:31:0;::::1;;::::0;;;:18:::1;:31;::::0;;;;19028:22;;:19;;:22:::1;::::0;::::1;::::0;;::::1;;;;;;::::0;;::::1;::::0;;;;;;;18991:60;;::::1;::::0;;::::1;::::0;;-1:-1:-1;18991:60:0;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;18991:60:0::1;-1:-1:-1::0;;;;;18991:60:0;;::::1;::::0;;;::::1;::::0;;;18695:3:::1;18645:418;;;-1:-1:-1::0;;;;;;19080:128:0;::::1;19136:31;::::0;;;:18:::1;:31;::::0;;;;;;;;19080:128;;19182:15:::1;19080:128:::0;;::::1;::::0;;;;;;;;;;;;;;::::1;::::0;19136:31;;19182:15;19080:128;;;;;;19136:31;;19080:128;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;19080:128:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;18369:847:::0;;:::o;34265:2210::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34460:27:0;::::1;34512:1;34460:27:::0;;;:14:::1;:27;::::0;;;;:40:::1;;:49:::0;;34501:7;;34460:49;::::1;;;;;;;;;;;;;:53;:127;;;;-1:-1:-1::0;;;;;;34534:27:0;::::1;;::::0;;;:14:::1;:27;::::0;;;;:36:::1;;:45:::0;;34571:7;;34534:45;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;34583:4;34534:53;;;34460:127;34438:229;;;;-1:-1:-1::0;;;34438:229:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;34846:27:0;::::1;;::::0;;;:14:::1;:27;::::0;;;;:40:::1;;:49:::0;;34887:7;;34846:49;::::1;;;;;;;;;;;;;34735:14;:27;34750:11;-1:-1:-1::0;;;;;34735:27:0::1;-1:-1:-1::0;;;;;34735:27:0::1;;;;;;;;;;;;:40;;34776:7;34735:49;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;34728:114:::1;::::0;;-1:-1:-1;;;34728:114:0;;34822:4:::1;34728:114;::::0;::::1;::::0;;;-1:-1:-1;;;;;34735:49:0;;::::1;::::0;34728:67:::1;::::0;:114;;;;;;;;;;34735:49;34728:114;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34728:114:0;:167:::1;;34706:249;;;::::0;;-1:-1:-1;;;34706:249:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;34990:27:0;::::1;34968:19;34990:27:::0;;;:14:::1;:27;::::0;;;;:40:::1;;:49:::0;;35031:7;;34990:49;::::1;;;;;;;;;;;;;34968:71;;35100:5;35052:14;:27;35067:11;-1:-1:-1::0;;;;;35052:27:0::1;-1:-1:-1::0;;;;;35052:27:0::1;;;;;;;;;;;;:36;;35089:7;35052:45;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;35168:1;35116:14;:27;35131:11;-1:-1:-1::0;;;;;35116:27:0::1;-1:-1:-1::0;;;;;35116:27:0::1;;;;;;;;;;;;:40;;35157:7;35116:49;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;:53:::0;;;;-1:-1:-1;;;;;35189:27:0;::::1;::::0;;:14:::1;:27:::0;;;;;;:40:::1;;:49:::0;;35230:7;;35189:49;::::1;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;35182:129:::1;::::0;;-1:-1:-1;;;35182:129:0;;-1:-1:-1;;;;;35182:129:0;;::::1;;::::0;::::1;::::0;;;;;;;;;35189:49;;;::::1;::::0;35182:66:::1;::::0;:129;;;;;35189:49;;35182:129;;;;;;;;;35189:49;35182:129;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;35324:4:0::1;::::0;:31:::1;::::0;;-1:-1:-1;;;35324:31:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;35324:4:0;;::::1;::::0;:13:::1;::::0;:31;;;;;:4:::1;::::0;:31;;;;;;;;:4;;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;;35402:27:0;::::1;35368:17;35402:27:::0;;;:14:::1;:27;::::0;;;;:36:::1;;:45:::0;;35368:17;;35402:36;35439:7;;35402:45;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35402:45:0::1;:59;35398:655;;35490:52;35532:9;35491:35;35512:13;;35491:16;:20;;:35;;;;:::i;35490:52::-;35478:64:::0;-1:-1:-1;35576:31:0::1;:16:::0;35478:64;35576:20:::1;:31::i;:::-;-1:-1:-1::0;;;;;35643:27:0;::::1;35625:12;35643:27:::0;;;:14:::1;:27;::::0;;;;:54:::1;;:63:::0;;35557:50;;-1:-1:-1;35625:12:0;;35698:7;;35643:63;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;:108:::1;::::0;-1:-1:-1;;;;;35643:63:0;;::::1;::::0;35737:9;;35643:108;;:63;:108;35737:9;35643:63;:108:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35624:127;;;35776:7;35768:35;;;::::0;;-1:-1:-1;;;35768:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35768:35:0;;;;;;;;;;;;;::::1;;35959:4;::::0;-1:-1:-1;;;;;35959:4:0::1;35920:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;35825:216:0::1;35856:14;:27;35871:11;-1:-1:-1::0;;;;;35856:27:0::1;-1:-1:-1::0;;;;;35856:27:0::1;;;;;;;;;;;;:36;;35893:7;35856:45;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;35825:216:::1;::::0;;;;;36011:15:::1;35825:216:::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;35856:45:0;;::::1;::::0;35825:216:::1;::::0;;;;;;;;;::::1;35398:655;;-1:-1:-1::0;;;;;36113:27:0;::::1;;::::0;;;:14:::1;:27;::::0;;;;:40:::1;;:49:::0;;36065:167:::1;::::0;36087:11;;36154:7;;36113:49;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;36185:4:::1;::::0;-1:-1:-1;;;;;36113:49:0;;::::1;::::0;36185:4:::1;36205:16:::0;36065:7:::1;:167::i;:::-;-1:-1:-1::0;;;;;36329:27:0;::::1;;::::0;;;:14:::1;:27;::::0;;;;:40:::1;;:49:::0;;36370:7;;36329:49;::::1;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;36281:186:::1;::::0;;;;;36419:15:::1;36281:186:::0;;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;36329:49:0;;::::1;::::0;36281:186;;::::1;::::0;::::1;::::0;;;;;;;;::::1;4096:1;;34265:2210:::0;;;:::o;16193:18::-;;;-1:-1:-1;;;;;16193:18:0;;:::o;14623:38::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14623:38:0;:::o;3457:21::-;;;;;;-1:-1:-1;;;;;3457:21:0;;:::o;25435:2512::-;2470:8;:6;:8::i;:::-;2469:9;2461:38;;;;;-1:-1:-1;;;2461:38:0;;;;;;;;;;;;-1:-1:-1;;;2461:38:0;;;;;;;;;;;;;;;25638:15:::1;-1:-1:-1::0;;;;;25622:31:0::1;:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;25622:31:0::1;;;25600:112;;;::::0;;-1:-1:-1;;;25600:112:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;25745:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;:34;::::1;;25723:110;;;::::0;;-1:-1:-1;;;25723:110:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;25943:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;:39:::1;;::::0;;25866:56:::1;::::0;25915:6;;25866:16:::1;::::0;25883:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;25866:30:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;25866:30:0;;;:44;;::::1;::::0;;;;;;;;:48:::1;:56::i;:::-;:116;;25844:208;;;;-1:-1:-1::0;;;25844:208:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26162:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;:39:::1;;::::0;;26085:56:::1;::::0;26134:6;;26085:16:::1;::::0;26102:12:::1;:10;:12::i;26085:56::-;:116;;26063:208;;;;-1:-1:-1::0;;;26063:208:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26363:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;;:40:::1;;::::0;26304:12:::1;:26:::0;;;;;;;:38:::1;::::0;26335:6;26304:30:::1;:38::i;:::-;:99;;26282:173;;;::::0;;-1:-1:-1;;;26282:173:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26525:15;26490:32;26508:13;;26490;;:17;;:32;;;;:::i;:::-;:50;26468:129;;;::::0;;-1:-1:-1;;;26468:129:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26644:14;:28;26659:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;26644:28:0::1;-1:-1:-1::0;;;;;26644:28:0::1;;;;;;;;;;;;:36;;26700:14;:28;26715:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;26700:28:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;26700:28:0;;;:36:::1;;:43:::0;26644:110;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;26765:14:::1;::::0;26780:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;26765:28:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;26765:28:0;;;:37:::1;::::0;;::::1;:48:::0;;;;::::1;::::0;;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;::::0;;::::1;;;::::0;;::::1;::::0;;26860:12:::1;:10;:12::i;:::-;26824:14;:28;26839:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;26824:28:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26824:28:0;;;:48;;-1:-1:-1;;;;;;26824:48:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;26883:14:::1;::::0;26898:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;26883:28:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;26883:28:0;;;:37:::1;;:59:::0;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26883:59:0::1;::::0;;::::1;::::0;;;::::1;::::0;;26953:14:::1;::::0;26968:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;26953:28:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;26953:28:0;;;:41:::1;;:60:::0;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26953:60:0::1;::::0;;::::1;::::0;;;::::1;::::0;;27024:14:::1;::::0;27039:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;27024:28:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;27024:28:0;;;:38:::1;;:60:::0;;::::1;::::0;::::1;::::0;;;;;;;;27068:15:::1;27024:60:::0;::::1;::::0;;;;27137:14:::1;::::0;27152:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;27137:28:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;27137:28:0;;;:41:::1;;:54:::0;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;;;27231:26;;::::1;::::0;;:12:::1;:26:::0;;;;;;:38:::1;::::0;27184:6;27231:30:::1;:38::i;:::-;-1:-1:-1::0;;;;;27202:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;:67;;;;27327:80:::1;::::0;27400:6;;27327:16:::1;::::0;27358:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;27327:54:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;27327:54:0;;;:68;;::::1;::::0;;;;;;;;:72:::1;:80::i;:::-;27280:16;:30;27297:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;27280:30:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;27280:30:0;;;:44;;::::1;::::0;;;;;;;;;:127;;;;27493:33:::1;27545:12;:10;:12::i;:::-;27584:4;27608:6;27493:136;;;;;;;;;;;;;-1:-1:-1::0;;;;;27493:136:0::1;;;;;;-1:-1:-1::0;;;;;27493:136:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27493:136:0;27471:201:::1;;;::::0;;-1:-1:-1;;;27471:201:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27471:201:0;;;;;;;;;;;;;::::1;;27865:12;-1:-1:-1::0;;;;;27721:218:0::1;27835:15;-1:-1:-1::0;;;;;27721:218:0::1;27741:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;27721:218:0::1;;27769:50;27817:1;27769:14;:28;27784:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;27769:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27769:28:0;:36:::1;;:43:::0;;:47:::1;:50::i;:::-;27721:218;::::0;;;;;::::1;::::0;::::1;::::0;;;27913:15:::1;27721:218:::0;;;;;;;;;;;;::::1;25435:2512:::0;;;:::o;14668:37::-;14699:6;14668:37;:::o;21665:559::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21838:25:0;::::1;;::::0;;;:12:::1;:25;::::0;;;;:33;::::1;;:87:::0;::::1;;;-1:-1:-1::0;;;;;;21892:25:0;::::1;;::::0;;;:12:::1;:25;::::0;;;;:33;::::1;;21838:87;21816:152;;;::::0;;-1:-1:-1;;;21816:152:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21816:152:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;21979:31:0;;::::1;;::::0;;;:18:::1;:31;::::0;;;;;;;:44;;::::1;::::0;;;;;;;;;;:53;;-1:-1:-1;;21979:53:0::1;::::0;::::1;;;::::0;;;;22050:166;;21979:53:::1;22131:44:::0;;::::1;22050:166;;::::0;;22190:15:::1;22050:166:::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;21665:559:::0;;;:::o;19851:999::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;20054:14:::1;:19;;20072:1;20054:19;:42;;;;20077:14;:19;;20095:1;20077:19;20054:42;:65;;;;20100:14;:19;;20118:1;20100:19;20054:65;20032:138;;;::::0;;-1:-1:-1;;;20032:138:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;20189:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;:34;::::1;;:42;;:34:::0;:42:::1;20181:70;;;::::0;;-1:-1:-1;;;20181:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20181:70:0;;;;;;;;;;;;;::::1;;20268:14;:19;;20286:1;20268:19;20264:360;;;20346:63;:15;20384:10:::0;20346:19:::1;:63::i;:::-;-1:-1:-1::0;;;;;20304:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;;:39:::1;:105:::0;20264:360:::1;;;20431:14;:19;;20449:1;20431:19;20427:197;;;-1:-1:-1::0;;;;;20465:26:0;::::1;20507:1;20465:26:::0;;;:12:::1;:26;::::0;;;;;;:39:::1;:43:::0;20427:197:::1;;;20528:14;:19;;20546:1;20528:19;20524:100;;;-1:-1:-1::0;;;;;20562:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;:43:::1;;:62:::0;;-1:-1:-1;;20562:62:0::1;::::0;::::1;;;::::0;;20524:100:::1;-1:-1:-1::0;;;;;20642:200:0;::::1;20704:26;::::0;;;:12:::1;:26;::::0;;;;;;;;:39;;::::1;::::0;20758:43:::1;::::0;;::::1;::::0;20642:200;;;;;20758:43:::1;;20642:200;;::::0;;::::1;::::0;20816:15:::1;20642:200:::0;;;;;;::::1;::::0;;;;;;;::::1;19851:999:::0;;;;:::o;17411:950::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;17643:11:::1;:18;17621:11;:18;:40;:107;;;;;17704:17;:24;17682:11;:18;:46;17621:107;17599:170;;;::::0;;-1:-1:-1;;;17599:170:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17599:170:0;;;;;;;;;;;;;::::1;;17787:7;17782:572;17804:11;:18;17800:1;:22;;;17782:572;;;17870:12;:28;17883:11;17895:1;17883:14;;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;17870:28:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;17870:28:0;:36;::::1;;:97:::0;::::1;;;;17931:12;:28;17944:11;17956:1;17944:14;;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;17931:28:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;17931:28:0;:36;::::1;;17870:97;17844:174;;;::::0;;-1:-1:-1;;;17844:174:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17844:174:0;;;;;;;;;;;;;::::1;;18122:17;18140:1;18122:20;;;;;;;;;;;;;;;;18033:22;:38;18056:11;18068:1;18056:14;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;18033:38:0::1;-1:-1:-1::0;;;;;18033:38:0::1;;;;;;;;;;;;:86;18090:11;18102:1;18090:14;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;18033:86:0::1;-1:-1:-1::0;;;;;18033:86:0::1;;;;;;;;;;;;:109;;;;18240:11;18252:1;18240:14;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;18164:178:0::1;18207:11;18219:1;18207:14;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;18164:178:0::1;;18273:17;18291:1;18273:20;;;;;;;;;;;;;;;;18312:15;18164:178;;;;;;;;;;;;;;;;;;;;;;;;17824:3;;17782:572;;;;17411:950:::0;;;:::o;19224:619::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19410:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;:34;::::1;;19402:62;;;::::0;;-1:-1:-1;;;19402:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19402:62:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;19475:26:0;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;;;:39:::1;::::0;::::1;:54:::0;;;19540:39:::1;::::0;::::1;:54:::0;;;19605:40:::1;;:53:::0;;;19676:159;;;;;;;::::1;::::0;;;;;;;;;19809:15:::1;19676:159:::0;;;;;;::::1;::::0;;;;;;;::::1;19224:619:::0;;;;:::o;32043:2214::-;32157:4;2470:8;:6;:8::i;:::-;2469:9;2461:38;;;;;-1:-1:-1;;;2461:38:0;;;;;;;;;;;;-1:-1:-1;;;2461:38:0;;;;;;;;;;;;;;;32217:11:::1;-1:-1:-1::0;;;;;32201:27:0::1;:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;32201:27:0::1;;:53;;;-1:-1:-1::0;32248:6:0::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;32248:6:0::1;32232:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;32232:22:0::1;;32201:53;32179:130;;;::::0;;-1:-1:-1;;;32179:130:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32344:27:0;::::1;32322:19;32344:27:::0;;;:14:::1;:27;::::0;;;;:40:::1;;:49:::0;;32385:7;;32344:49;::::1;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;32344:49:0::1;32459:25:::0;;;:12:::1;:25:::0;;;;;;;;:38:::1;::::0;32344:49;;-1:-1:-1;32501:15:0::1;-1:-1:-1::0;32459:57:0::1;32437:128;;;::::0;;-1:-1:-1;;;32437:128:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32437:128:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32614:25:0;::::1;;::::0;;;:12:::1;:25;::::0;;;;:42:::1;;::::0;::::1;;32610:279;;;32806:15;32697:105;32770:13;;32697:14;:27;32712:11;-1:-1:-1::0;;;;;32697:27:0::1;-1:-1:-1::0;;;;;32697:27:0::1;;;;;;;;;;;;:37;;32735:7;32697:46;;;;;;;;;;;;;;;;:50;;:105;;;;:::i;:::-;:124;;32671:218;;;::::0;;-1:-1:-1;;;32671:218:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32943:27:0;::::1;32995:1;32943:27:::0;;;:14:::1;:27;::::0;;;;:40:::1;;:49:::0;;32984:7;;32943:49;::::1;;;;;;;;;;;;;:53;:127;;;-1:-1:-1::0;;;;;;33017:27:0;::::1;;::::0;;;:14:::1;:27;::::0;;;;:36:::1;;:45:::0;;33054:7;;33017:45;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;33066:4;33017:53;;;32943:127;32921:227;;;;-1:-1:-1::0;;;32921:227:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;33211:27:0;::::1;33188:20;33211:27:::0;;;:14:::1;:27;::::0;;;;:40:::1;;:73:::0;;33266:7;;33211:73;::::1;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;33319:25:0;;::::1;::::0;;:12:::1;:25:::0;;;;;;;33357:27;;::::1;::::0;;:14:::1;:27:::0;;;;;;:40:::1;;:49:::0;;33211:73;;-1:-1:-1;33319:25:0;;33211:73;33357:40;33398:7;;33357:49;::::1;;;;;;::::0;;;::::1;::::0;;;;;::::1;:53:::0;;;;-1:-1:-1;;;;;33421:27:0;::::1;::::0;;:14:::1;:27:::0;;;;;;:36:::1;;:45:::0;;33458:7;;33421:45;::::1;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33653:12;33542:14;:27;33557:11;-1:-1:-1::0;;;;;33542:27:0::1;-1:-1:-1::0;;;;;33542:27:0::1;;;;;;;;;;;;:40;;33583:7;33542:49;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;33535:114:::1;::::0;;-1:-1:-1;;;33535:114:0;;33629:4:::1;33535:114;::::0;::::1;::::0;;;-1:-1:-1;;;;;33542:49:0;;::::1;::::0;33535:67:::1;::::0;:114;;;;;;;;;;33542:49;33535:114;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33535:114:0;:130:::1;;33513:210;;;::::0;;-1:-1:-1;;;33513:210:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;33790:27:0;::::1;;::::0;;;:14:::1;:27;::::0;;;;:40:::1;;:49:::0;;33831:7;;33790:49;::::1;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;33783:130:::1;::::0;;-1:-1:-1;;;33783:130:0;;-1:-1:-1;;;;;33783:130:0;;::::1;;::::0;::::1;::::0;;;;;;;;;33790:49;;;::::1;::::0;33783:66:::1;::::0;:130;;;;;33790:49;;33783:130;;;;;;;;;33790:49;33783:130;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33926:63:0::1;::::0;-1:-1:-1;33939:11:0;33952:7;33961:12;33975:13;33926:12:::1;:63::i;:::-;-1:-1:-1::0;;;;;34086:27:0;::::1;;::::0;;;:14:::1;:27;::::0;;;;:40:::1;;:49:::0;;34127:7;;34086:49;::::1;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;34038:187:::1;::::0;;;;;34177:15:::1;34038:187:::0;;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;34086:49:0;;::::1;::::0;34038:187;;::::1;::::0;::::1;::::0;;;;;;;;::::1;34245:4;34238:11;;;;;2510:1;32043:2214:::0;;;;:::o;14346:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23952:47::-;;;;;;;;;;;;;:::o;14793:28::-;;;;:::o;4955:281::-;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;5058:22:0;::::1;5036:110;;;;-1:-1:-1::0;;;5036:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5183:6;::::0;;5162:38:::1;::::0;-1:-1:-1;;;;;5162:38:0;;::::1;::::0;5183:6:::1;::::0;;::::1;;::::0;5162:38:::1;::::0;::::1;5211:6;:17:::0;;-1:-1:-1;;;;;5211:17:0;;::::1;;;-1:-1:-1::0;;;;;;5211:17:0;;::::1;::::0;;;::::1;::::0;;4955:281::o;14712:39::-;14744:7;14712:39;:::o;16421:182::-;16521:4;4036:12;:10;:12::i;:::-;4026:6;;;;;-1:-1:-1;;;;;4026:6:0;;;:22;;;4018:67;;;;;-1:-1:-1;;;4018:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4018:67:0;;;;;;;;;;;;;;;-1:-1:-1;16543:4:0::1;:30:::0;;-1:-1:-1;;;;;16543:30:0;::::1;-1:-1:-1::0;;;;;;16543:30:0;;::::1;;::::0;;;16421:182;;;:::o;722:106::-;810:10;722:106;:::o;8495:132::-;8553:7;8580:39;8584:1;8587;8580:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8573:46;8495:132;-1:-1:-1;;;8495:132:0:o;3203:120::-;2747:8;:6;:8::i;:::-;2739:41;;;;;-1:-1:-1;;;2739:41:0;;;;;;;;;;;;-1:-1:-1;;;2739:41:0;;;;;;;;;;;;;;;3272:5:::1;3262:15:::0;;-1:-1:-1;;3262:15:0::1;::::0;;3293:22:::1;3302:12;:10;:12::i;:::-;3293:22;::::0;;-1:-1:-1;;;;;3293:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;3203:120::o:0;7548:471::-;7606:7;7851:6;7847:47;;-1:-1:-1;7881:1:0;7874:8;;7847:47;7918:5;;;7922:1;7918;:5;:1;7942:5;;;;;:10;7934:56;;;;-1:-1:-1;;;7934:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2944:118;2470:8;:6;:8::i;:::-;2469:9;2461:38;;;;;-1:-1:-1;;;2461:38:0;;;;;;;;;;;;-1:-1:-1;;;2461:38:0;;;;;;;;;;;;;;;3004:7:::1;:14:::0;;-1:-1:-1;;3004:14:0::1;3014:4;3004:14;::::0;;3034:20:::1;3041:12;:10;:12::i;6624:136::-:0;6682:7;6709:43;6713:1;6716;6709:43;;;;;;;;;;;;;;;;;:3;:43::i;31353:578::-;-1:-1:-1;;;;;31536:26:0;;;31532:392;;31598:35;;31580:12;;-1:-1:-1;;;;;31598:16:0;;;31622:6;;31580:12;31598:35;31580:12;31598:35;31622:6;31598:16;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31579:54;;;31658:7;31650:35;;;;;-1:-1:-1;;;31650:35:0;;;;;;;;;;;;-1:-1:-1;;;31650:35:0;;;;;;;;;;;;;;;31826:12;-1:-1:-1;;;;;31742:170:0;31796:11;-1:-1:-1;;;;;31742:170:0;31766:11;-1:-1:-1;;;;;31742:170:0;;31857:6;31882:15;31742:170;;;;;;;;;;;;;;;;;;;;;;;;31532:392;31353:578;;;;:::o;6160:181::-;6218:7;6250:5;;;6274:6;;;;6266:46;;;;;-1:-1:-1;;;6266:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;28115:843;28308:16;28335:19;28378:32;28396:13;;28378;;:17;;:32;;;;:::i;:::-;28367:43;;28471:15;28460:8;:26;28456:123;;;-1:-1:-1;28502:15:0;28456:123;;;28565:13;;28547;;:32;;:17;:32::i;:::-;28533:46;;28456:123;-1:-1:-1;;;;;28633:27:0;;;;;;:14;:27;;;;;:37;;:46;;28603:87;;28633:37;28671:7;;28633:46;;;;;;;;;;;;;;28603:11;:15;;:87;;;;:::i;:::-;28592:98;;28701:27;;:::i;:::-;28739:29;;;:12;28779;;:27;;;14744:7;28854:17;;28850:100;;28886:64;28908:11;28921:7;28930:9;28941:8;28886:21;:64::i;:::-;28115:843;;;;;;;:::o;9123:225::-;9243:7;9278:12;9271:5;9263:28;;;;-1:-1:-1;;;9263:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9302:9;9318:1;9314;:5;;;;;;;9123:225;-1:-1:-1;;;;;9123:225:0:o;7063:226::-;7183:7;7219:12;7211:6;;;;7203:29;;;;-1:-1:-1;;;7203:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7255:5:0;;;7063:226::o;28966:1557::-;29147:24;29182:17;29210:26;;:::i;:::-;29263:19;:8;14744:7;29263:12;:19::i;:::-;29249:11;;;:33;29307:18;:8;14699:6;29307:12;:18::i;:::-;29293:32;;29421:14;;-1:-1:-1;;;;;29454:27:0;;29302:1;29454:27;;;:14;29293:11;29454:27;;;;:40;;:49;;29357:237;;29387:196;;29421:14;;29495:7;;29454:49;;;;;;;;;;;;;;;;29530:4;;-1:-1:-1;;;;;29454:49:0;;;;29530:4;29554:11;29454:49;29554:14;;;;29387:15;:196::i;:::-;29357:11;;;;;:15;:237::i;:::-;29637:4;;:31;;;-1:-1:-1;;;29637:31:0;;;;;;;;;;29338:256;;-1:-1:-1;;;;;;29637:4:0;;;;:13;;:31;;;;;:4;;:31;;;;;;;;:4;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;29685:27:0;;29742:1;29685:27;;;:14;:27;;;;;:36;;:45;;29722:7;;29685:45;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29685:45:0;:59;29681:655;;29773:52;29815:9;29774:35;29795:13;;29774:16;:20;;:35;;;;:::i;29773:52::-;29761:64;-1:-1:-1;29859:31:0;:16;29761:64;29859:20;:31::i;:::-;-1:-1:-1;;;;;29926:27:0;;29908:12;29926:27;;;:14;:27;;;;;:54;;:63;;29840:50;;-1:-1:-1;29908:12:0;;29981:7;;29926:63;;;;;;;;;;;;;;;:108;;-1:-1:-1;;;;;29926:63:0;;;;30020:9;;29926:108;;:63;:108;30020:9;29926:63;:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29907:127;;;30059:7;30051:35;;;;;-1:-1:-1;;;30051:35:0;;;;;;;;;;;;-1:-1:-1;;;30051:35:0;;;;;;;;;;;;;;;30242:4;;-1:-1:-1;;;;;30242:4:0;30203:12;:10;:12::i;:::-;-1:-1:-1;;;;;30108:216:0;30139:14;:27;30154:11;-1:-1:-1;;;;;30139:27:0;-1:-1:-1;;;;;30139:27:0;;;;;;;;;;;;:36;;30176:7;30139:45;;;;;;;;;;;;;;;;;;;30108:216;;;;;;30294:15;30108:216;;;;;;;;;-1:-1:-1;;;;;30139:45:0;;;;30108:216;;;;;;;;;;;29681:655;;-1:-1:-1;;;;;30396:27:0;;;;;;:14;:27;;;;;:40;;:49;;30348:167;;30370:11;;30437:7;;30396:49;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://068de2aa0926e900993c46389d3174dc393ded8b3ccc36a26be94fd8d022ab9d
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.