Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Remove Stabl... | 5672262 | 62 days ago | IN | 0 S | 0.00257917 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PegasusAggregator
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 1000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "hardhat/console.sol"; interface IRouter { function WETH() external pure returns (address); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); } interface IWeth { function deposit() external payable; function withdraw(uint256) external; } contract PegasusAggregator is Ownable { struct DEX { string name; address routerAddress; bool active; } struct Quote { string dexName; address dexRouter; uint256 amountIn; uint256 amountOut; address[] path; } struct Token { string symbol; string name; address tokenAddress; uint8 decimals; uint256 chainId; string logouri; bool active; } struct Staker { uint256 stakedAmount; uint256 rewardDebt; uint256 unclaimedRewards; // Changed to single uint256 for WBNB rewards } // Staking and Fee Distribution IERC20 public stakingToken; address public teamFeeCollector; bool public distributeFeesToStakers; uint256 public accRewardPerShare; uint256 private constant REWARD_PRECISION = 1e12; mapping(address => Staker) public stakers; mapping(uint256 => address) public stableCoinForChain; //stores the stable coin for each chain //total staked amount uint256 public totalStaked; // Fee denominator for percentage calculations (100% = 10000) uint256 private constant FEE_DENOMINATOR = 10000; // Initial fee of 0.2% = 20 basis points uint256 private swapFeePercent = 20; //For very low amounts uint256 public constant MIN_FEE_TO_CONVERT = 0.001 ether; DEX[] public supportedDexes; mapping(uint256 => Token[]) public tokensByChain; // chainId => Token[] mapping(address => bool) public isSupportedToken; // shows that a token is supported event TokenAdded(string symbol, address tokenAddress, uint256 chainId); event TokenRemoved(address tokenAddress, uint256 chainId); event TokenUpdated(string symbol, address tokenAddress, uint256 chainId); event SwapExecuted(address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut, address router, address recipient); event Staked(address indexed user, uint256 amount); event Unstaked(address indexed user, uint256 amount); event RewardClaimed(address indexed user, uint256 amount); event FeeDistributionModeChanged(bool distributeToStakers); event StakingTokenSet(address token); event FeeUpdated(uint256 oldFee, uint256 newFee); event RewardDistributed(uint256 amount); event SmallFeeCollected(address token, uint256 amount); constructor(address _stakingToken) Ownable(msg.sender) { require(_stakingToken != address(0), "Invalid staking token"); stakingToken = IERC20(_stakingToken); teamFeeCollector = msg.sender; distributeFeesToStakers = false; accRewardPerShare = 5e10; } // Function to update fee percentage function updateFeePercent(uint256 newFeePercent) external onlyOwner { require(newFeePercent <= 100, "Fee cannot exceed 1%"); // Safety check emit FeeUpdated(swapFeePercent, newFeePercent); swapFeePercent = newFeePercent; } // Calculate fee amount and final amount after fee function calculateFee(uint256 amount) public view returns (uint256 feeAmount, uint256 finalAmount) { feeAmount = amount * swapFeePercent / FEE_DENOMINATOR; finalAmount = amount - feeAmount; return (feeAmount, finalAmount); } function stake(uint256 amount) external { require(amount > 0, "Cannot stake 0"); // Update rewards before changing stake updateReward(msg.sender); stakingToken.transferFrom(msg.sender, address(this), amount); stakers[msg.sender].stakedAmount += amount; totalStaked += amount; // Update reward debt stakers[msg.sender].rewardDebt = (stakers[msg.sender].stakedAmount * accRewardPerShare) / REWARD_PRECISION; emit Staked(msg.sender, amount); } function updateReward(address user) internal { if (totalStaked > 0) { Staker storage staker = stakers[user]; uint256 pending = (staker.stakedAmount * accRewardPerShare / REWARD_PRECISION) - staker.rewardDebt; staker.unclaimedRewards += pending; staker.rewardDebt = (staker.stakedAmount * accRewardPerShare) / REWARD_PRECISION; } } function claimReward() external { updateReward(msg.sender); uint256 reward = stakers[msg.sender].unclaimedRewards; if (reward > 0) { stakers[msg.sender].unclaimedRewards = 0; // Transfer Native rewards (bool success, ) = msg.sender.call{value: reward}(""); require(success, "BNB transfer failed"); emit RewardClaimed(msg.sender, reward); } } function unstake(uint256 amount) external { require(amount > 0, "Cannot unstake 0"); require(stakers[msg.sender].stakedAmount >= amount, "Insufficient stake"); updateReward(msg.sender); stakers[msg.sender].stakedAmount -= amount; totalStaked -= amount; // Update reward debt stakers[msg.sender].rewardDebt = (stakers[msg.sender].stakedAmount * accRewardPerShare) / REWARD_PRECISION; (bool success, ) = msg.sender.call{value: amount}(""); require(success, "BNB transfer failed"); emit Unstaked(msg.sender, amount); } function addToken( string calldata symbol, string calldata name, address tokenAddress, uint8 decimals, uint256 chainId, string calldata logoUri ) external onlyOwner { require(!isSupportedToken[tokenAddress], "Token already exists"); require(tokenAddress != address(0), "Invalid token address"); Token memory newToken = Token({ symbol: symbol, name: name, tokenAddress: tokenAddress, decimals: decimals, chainId: chainId, logouri: logoUri, active: true }); tokensByChain[chainId].push(newToken); isSupportedToken[tokenAddress] = true; emit TokenAdded(symbol, tokenAddress, chainId); } function removeToken(address tokenAddress, uint256 chainId) external onlyOwner { require(isSupportedToken[tokenAddress], "Token not found"); Token[] storage tokens = tokensByChain[chainId]; for (uint i = 0; i < tokens.length; i++) { if (tokens[i].tokenAddress == tokenAddress) { tokens[i] = tokens[tokens.length - 1]; tokens.pop(); isSupportedToken[tokenAddress] = false; emit TokenRemoved(tokenAddress, chainId); break; } } } function updateToken( address tokenAddress, uint256 chainId, bool isActive ) external onlyOwner { require(isSupportedToken[tokenAddress], "Token not found"); Token[] storage tokens = tokensByChain[chainId]; for (uint i = 0; i < tokens.length; i++) { if (tokens[i].tokenAddress == tokenAddress) { tokens[i].active = isActive; emit TokenUpdated(tokens[i].symbol, tokenAddress, chainId); break; } } } function getAllTokens(uint256 chainId) external view returns (Token[] memory) { return tokensByChain[chainId]; } function getQuotes( address tokenIn, address tokenOut, uint256 amount, bool isExactIn ) internal view returns (Quote[] memory) { Quote[] memory quotes = new Quote[](supportedDexes.length); uint256 validQuotes = 0; for (uint i = 0; i < supportedDexes.length; i++) { if (!supportedDexes[i].active) continue; address WBNB = IRouter(supportedDexes[i].routerAddress).WETH(); // Try direct path address[] memory path = new address[](2); path[0] = tokenIn; path[1] = tokenOut; // Try WETH path address[] memory wethPath = new address[](3); wethPath[0] = tokenIn; wethPath[1] = WBNB; wethPath[2] = tokenOut; // Try reverse WETH path address[] memory reverseWethPath = new address[](3); reverseWethPath[0] = tokenIn; reverseWethPath[1] = WBNB; reverseWethPath[2] = tokenOut; IRouter router = IRouter(supportedDexes[i].routerAddress); try router.getAmountsOut(amount, path) returns (uint[] memory amounts) { if (isExactIn) { quotes[validQuotes] = Quote({ dexName: supportedDexes[i].name, dexRouter: supportedDexes[i].routerAddress, amountIn: amount, amountOut: amounts[1], path: path }); validQuotes++; } } catch { // If direct path fails, try through WETH try router.getAmountsOut(amount, wethPath) returns (uint[] memory amounts) { if (isExactIn) { quotes[validQuotes] = Quote({ dexName: supportedDexes[i].name, dexRouter: supportedDexes[i].routerAddress, amountIn: amount, amountOut: amounts[2], path: wethPath }); validQuotes++; } } catch { // If WETH path fails, try reverse WETH path try router.getAmountsOut(amount, reverseWethPath) returns (uint[] memory amounts) { if (isExactIn) { quotes[validQuotes] = Quote({ dexName: supportedDexes[i].name, dexRouter: supportedDexes[i].routerAddress, amountIn: amount, amountOut: amounts[2], path: reverseWethPath }); validQuotes++; } } catch {} } } } // Resize array to remove empty quotes assembly { mstore(quotes, validQuotes) } return quotes; } function getBestQuote( address tokenIn, address tokenOut, uint256 amount, bool isExactIn ) external view returns (Quote memory) { Quote[] memory quotes = getQuotes(tokenIn, tokenOut, amount, isExactIn); // console.log(quotes, "in hereeee"); require(quotes.length > 0, "No valid quotes found"); uint256 bestIndex = 0; uint256 bestAmount = isExactIn ? 0 : type(uint256).max; // console.log(quotes, "in hereeee two"); for (uint i = 0; i < quotes.length; i++) { if (isExactIn) { if (quotes[i].amountOut > bestAmount) { bestAmount = quotes[i].amountOut; bestIndex = i; } } else { if (quotes[i].amountIn < bestAmount) { bestAmount = quotes[i].amountIn; bestIndex = i; } } } return quotes[bestIndex]; } function calculateMinimumFeeAmount(address router, address tokenOut) public view returns (uint256) { address WBNB = IRouter(router).WETH(); address[] memory path = new address[](2); path[0] = tokenOut; path[1] = WBNB; uint[] memory amounts = IRouter(router).getAmountsIn(MIN_FEE_TO_CONVERT, path); return amounts[0]; } function executeSwap( address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOutMin, address router, address recipient, uint256 deadline ) external returns (uint256) { require(isSupportedToken[tokenIn] && isSupportedToken[tokenOut], "Unsupported tokens"); require(recipient != address(0), "Invalid recipient"); //get the WBNB address address WBNB = IRouter(router).WETH(); // Transfer tokens from sender to this contract IERC20(tokenIn).transferFrom(msg.sender, address(this), amountIn); // Approve router to spend tokens IERC20(tokenIn).approve(router, amountIn); uint[] memory amounts; address[] memory usedPath; // Try direct path address[] memory directPath = new address[](2); directPath [0] = tokenIn; directPath [1] = tokenOut; // Try WETH path address[] memory wethPath = new address[](3); wethPath[0] = tokenIn; wethPath[1] = WBNB; wethPath[2] = tokenOut; // Try reverse WETH path address[] memory reverseWethPath = new address[](3); reverseWethPath[0] = tokenIn; reverseWethPath[1] = WBNB; reverseWethPath[2] = tokenOut; // Try each path try IRouter(router).swapExactTokensForTokens( amountIn, amountOutMin, directPath, address(this), deadline ) returns (uint[] memory _amounts) { amounts = _amounts; usedPath = directPath; } catch { try IRouter(router).swapExactTokensForTokens( amountIn, amountOutMin, wethPath, address(this), deadline ) returns (uint[] memory _amounts) { amounts = _amounts; usedPath = wethPath; } catch { try IRouter(router).swapExactTokensForTokens( amountIn, amountOutMin, reverseWethPath, address(this), deadline ) returns (uint[] memory _amounts) { amounts = _amounts; usedPath = reverseWethPath; } catch { revert("No valid path found"); } } } // Calculate fee (uint256 feeAmount, uint256 finalAmount) = calculateFee(amounts[amounts.length - 1]); // Handle fees based on minimum conversion amount if (distributeFeesToStakers && totalStaked > 0) { if (tokenOut != WBNB) { // Calculate minimum fee amount worth converting uint256 minFeeRequired = calculateMinimumFeeAmount(router, tokenOut); if (feeAmount >= minFeeRequired) { // Convert fees to Native token address[] memory feePath = new address[](2); feePath[0] = tokenOut; feePath[1] = WBNB; //get current contract balance uint256 balanceBefore = address(this).balance; IERC20(tokenOut).approve(router, feeAmount); IRouter(router).swapExactTokensForETH( feeAmount, 0, feePath, address(this), deadline); uint256 receivedBNB = address(this).balance - balanceBefore; // Update rewards only if conversion happened if (receivedBNB > 0) { accRewardPerShare += (address(this).balance * REWARD_PRECISION) / totalStaked; emit RewardDistributed(address(this).balance); } } else { // If fee is too small, send to team instead IERC20(tokenOut).transfer(teamFeeCollector, feeAmount); emit SmallFeeCollected(tokenOut, feeAmount); } } else { // Handle WBNB fees if (feeAmount >= MIN_FEE_TO_CONVERT) { IWeth(WBNB).withdraw(feeAmount); accRewardPerShare += (feeAmount * REWARD_PRECISION) / totalStaked; emit RewardDistributed(feeAmount); } else { // If fee is too small, send to team IERC20(WBNB).transfer(teamFeeCollector, feeAmount); emit SmallFeeCollected(WBNB, feeAmount); } } } else { // If staking is disabled, send fees to team (automate by converting to bnb before sending to team) IERC20(tokenOut).transfer(teamFeeCollector, feeAmount); } // Transfer final amount to recipient IERC20(tokenOut).transfer(recipient, finalAmount); emit SwapExecuted(tokenIn, tokenOut, amounts[0], amounts[1], router, recipient); return amounts[1]; } //view functions function getStakerInfo(address _staker) external view returns ( uint256 stakedAmount, uint256 rewardDebt, uint256 unclaimedRewards ) { Staker storage staker = stakers[_staker]; return (staker.stakedAmount, staker.rewardDebt, staker.unclaimedRewards); } function getPendingRewards(address _staker) external view returns (uint256) { Staker storage staker = stakers[_staker]; uint256 pending = ((staker.stakedAmount * accRewardPerShare) / REWARD_PRECISION) - staker.rewardDebt; return staker.unclaimedRewards + pending; } // Admin functions function setFeeDistributionMode(bool _distributeToStakers) external onlyOwner { distributeFeesToStakers = _distributeToStakers; emit FeeDistributionModeChanged(_distributeToStakers); } function updateStakingToken(address _newToken) external onlyOwner { require(_newToken != address(0), "invalid address"); stakingToken = IERC20(_newToken); } function setTeamFeeCollector(address _collector) external onlyOwner { require(_collector != address(0), "Invalid address"); teamFeeCollector = _collector; } function getDexes() external view returns(DEX[] memory) { return supportedDexes; } function getADex(address _dexRouter) external view returns (string memory name, uint256 index, address routerAddress, bool active) { require(_dexRouter != address(0), "Invalid router address"); for (uint256 i = 0; i < supportedDexes.length; i++) { if (supportedDexes[i].routerAddress == _dexRouter) { return (supportedDexes[i].name, i, supportedDexes[i].routerAddress, supportedDexes[i].active); } } revert("DEX not found"); } function addDex(string calldata name, address router) external onlyOwner { require(router != address(0), "invalid address"); supportedDexes.push(DEX(name, router, true)); } function updateDex(string calldata name, address router, bool active, uint256 index) external onlyOwner { require(router != address(0), "invalid router address"); require(index < supportedDexes.length, "Invalid index"); supportedDexes[index].name = name; supportedDexes[index].routerAddress = router; supportedDexes[index].active = active; } function removeDex(string calldata name) external onlyOwner { for (uint i = 0; i < supportedDexes.length; i++) { if (keccak256(bytes(supportedDexes[i].name)) == keccak256(bytes(name))) { supportedDexes[i] = supportedDexes[supportedDexes.length - 1]; supportedDexes.pop(); return; } } revert("DEX not found"); } function toggleDex(uint256 index, bool active) external onlyOwner { require(index < supportedDexes.length, "Invalid index"); supportedDexes[index].active = active; } // Emergency functions function rescueTokens(address token, address to, uint256 amount) external onlyOwner { IERC20(token).transfer(to, amount); } function updateOwner(address newOwner) external onlyOwner { transferOwnership(newOwner); } function addRemoveStableCoinForSupportedChain(uint256 _chainId, address _stableAddress) external onlyOwner { require(_stableAddress != address(0), "invalid stable address"); stableCoinForChain[_chainId] = _stableAddress; } //pricing function getTokenPrice(address token, uint256 chainId) public view returns (uint256) { // Get WETH/WBNB address from first router address wrappedNative = IRouter(supportedDexes[0].routerAddress).WETH(); // Get stablecoin for this chain from your token registry address stablecoin = stableCoinForChain[chainId]; require(stablecoin != address(0), "No stablecoin found for chain"); // If token is wrapped native, return its price directly against stablecoin if (token == wrappedNative) { return getPriceFromStable(wrappedNative, stablecoin); } // Try to get price directly in stable first uint256 priceInUSD = getPriceFromStable(token, stablecoin); if (priceInUSD > 0) { return priceInUSD; } // If no direct stable pair, get price through wrapped native uint256 priceInNative = getPriceInWrappedNative(token, wrappedNative); console.log(priceInNative, "price in native, should return 400"); if (priceInNative > 0) { uint256 nativePrice = getPriceFromStable(wrappedNative, stablecoin); return (priceInNative * nativePrice) / 1e18; } revert("No liquid pairs found"); } function getPriceFromStable(address token, address stable) internal view returns (uint256) { uint256 bestAmount = 0; uint256 amountIn = 1e18; // Use 1 token as input for (uint i = 0; i < supportedDexes.length; i++) { if (!supportedDexes[i].active) continue; address[] memory path = new address[](2); path[0] = token; path[1] = stable; try IRouter(supportedDexes[i].routerAddress).getAmountsOut(amountIn, path) returns (uint[] memory amounts) { if (amounts[1] > bestAmount) { bestAmount = amounts[1]; } } catch {} } return bestAmount; } function getPriceInWrappedNative(address token, address wrappedNative) internal view returns (uint256) { uint256 bestAmount = 0; uint256 amountIn = 1e18; for (uint i = 0; i < supportedDexes.length; i++) { if (!supportedDexes[i].active) continue; address[] memory path = new address[](2); path[0] = token; path[1] = wrappedNative; try IRouter(supportedDexes[i].routerAddress).getAmountsOut(amountIn, path) returns (uint[] memory amounts) { if (amounts[1] > bestAmount) { bestAmount = amounts[1]; } } catch {} } return bestAmount; } // Allow contract to receive BNB receive() external payable {} fallback() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = 0x000000000000000000636F6e736F6c652e6c6f67; function _sendLogPayloadImplementation(bytes memory payload) internal view { address consoleAddress = CONSOLE_ADDRESS; /// @solidity memory-safe-assembly assembly { pop( staticcall( gas(), consoleAddress, add(payload, 32), mload(payload), 0, 0 ) ) } } function _castToPure( function(bytes memory) internal view fnIn ) internal pure returns (function(bytes memory) pure fnOut) { assembly { fnOut := fnIn } } function _sendLogPayload(bytes memory payload) internal pure { _castToPure(_sendLogPayloadImplementation)(payload); } function log() internal pure { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int256 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); } function logUint(uint256 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function logString(string memory p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint256 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function log(string memory p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint256 p0, uint256 p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1)); } function log(uint256 p0, string memory p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1)); } function log(uint256 p0, bool p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1)); } function log(uint256 p0, address p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1)); } function log(string memory p0, uint256 p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1)); } function log(string memory p0, string memory p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint256 p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1)); } function log(bool p0, string memory p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint256 p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1)); } function log(address p0, string memory p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint256 p0, uint256 p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2)); } function log(uint256 p0, string memory p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2)); } function log(uint256 p0, string memory p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2)); } function log(uint256 p0, string memory p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2)); } function log(uint256 p0, string memory p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2)); } function log(uint256 p0, bool p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2)); } function log(uint256 p0, bool p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2)); } function log(uint256 p0, bool p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2)); } function log(uint256 p0, bool p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2)); } function log(uint256 p0, address p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2)); } function log(uint256 p0, address p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2)); } function log(uint256 p0, address p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2)); } function log(uint256 p0, address p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2)); } function log(string memory p0, uint256 p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2)); } function log(string memory p0, uint256 p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2)); } function log(string memory p0, uint256 p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2)); } function log(string memory p0, uint256 p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint256 p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2)); } function log(bool p0, uint256 p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2)); } function log(bool p0, uint256 p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2)); } function log(bool p0, uint256 p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint256 p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2)); } function log(address p0, uint256 p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2)); } function log(address p0, uint256 p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2)); } function log(address p0, uint256 p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
{ "viaIR": true, "optimizer": { "enabled": true, "runs": 1000 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_stakingToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"distributeToStakers","type":"bool"}],"name":"FeeDistributionModeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SmallFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"StakingTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"SwapExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"TokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"TokenRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"TokenUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"MIN_FEE_TO_CONVERT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accRewardPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"router","type":"address"}],"name":"addDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"address","name":"_stableAddress","type":"address"}],"name":"addRemoveStableCoinForSupportedChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"logoUri","type":"string"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateFee","outputs":[{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"uint256","name":"finalAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"calculateMinimumFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeFeesToStakers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"executeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dexRouter","type":"address"}],"name":"getADex","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"getAllTokens","outputs":[{"components":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"logouri","type":"string"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct PegasusAggregator.Token[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isExactIn","type":"bool"}],"name":"getBestQuote","outputs":[{"components":[{"internalType":"string","name":"dexName","type":"string"},{"internalType":"address","name":"dexRouter","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"internalType":"struct PegasusAggregator.Quote","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDexes","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct PegasusAggregator.DEX[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"getPendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"getStakerInfo","outputs":[{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"unclaimedRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSupportedToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"removeDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"removeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_distributeToStakers","type":"bool"}],"name":"setFeeDistributionMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collector","type":"address"}],"name":"setTeamFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stableCoinForChain","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"unclaimedRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supportedDexes","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFeeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"name":"toggleDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensByChain","outputs":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"logouri","type":"string"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","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":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"updateDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFeePercent","type":"uint256"}],"name":"updateFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newToken","type":"address"}],"name":"updateStakingToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"name":"updateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60803461014857601f6142d038819003918201601f19168301916001600160401b0383118484101761014d5780849260209460405283398101031261014857516001600160a01b038116908190036101485733156101325760008054336001600160a01b03198216811783556040519290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3601460075581156100f05750600180546001600160a01b031916919091179055600280546001600160a81b0319163360ff60a01b1916179055640ba43b740060035560405161416c90816101648239f35b62461bcd60e51b815260206004820152601560248201527f496e76616c6964207374616b696e6720746f6b656e00000000000000000000006044820152606490fd5b631e4fbdf760e01b600052600060045260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610010575b005b60003560e01c80630ae9c2771461029b57806313baf1e6146102965780632182e46714610291578063240028e81461028c57806329907fb4146102875780632e17de781461028257806331dc228f1461027d5780634c984d38146102785780636990b58214610273578063715018a61461026e57806372f702f314610269578063733bdef0146102415780637765fd0d146102645780637a4ee3d71461025f578063817b1cd21461025a57806381ee07151461025557806383ad068c14610250578063880cdc311461024b5780638da5cb5b146102465780639168ae7214610241578063939d62371461023c57806399a5d747146102375780639b396b65146102325780639ed12c311461022d578063a457253314610228578063a694fc3a14610223578063afb94d551461021e578063b5d52d1a14610219578063b88a802f14610214578063ba1471321461020f578063c145ed501461020a578063c643483714610205578063c9f7153c14610200578063cc21392e146101fb578063cea9d26f146101f6578063cedfbff2146101f1578063f05c5fed146101ec578063f2fde38b146101e7578063f6ed2017146101e2578063fa972c66146101dd5763fda493c90361000e576126a0565b612587565b612495565b612478565b6123d7565b6122d4565b612234565b612139565b612040565b611f99565b611da6565b611d80565b611cf2565b611ccb565b6112bd565b611163565b6110ff565b611091565b61104f565b611021565b611003565b610c76565b610fdc565b610f68565b610f19565b610ef7565b610ed9565b610e7a565b610d6b565b610c4f565b610bf6565b6109f6565b610968565b61092c565b6107c4565b61078f565b61074c565b6106ae565b610525565b6104a1565b634e487b7160e01b600052603260045260246000fd5b6008548110156102d557600860005260206000209060011b0190600090565b6102a0565b600854156102d557600860009081527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee391565b90600182811c9216801561033d575b602083101461032757565b634e487b7160e01b600052602260045260246000fd5b91607f169161031c565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761037957604052565b610347565b60e0810190811067ffffffffffffffff82111761037957604052565b90601f8019910116810190811067ffffffffffffffff82111761037957604052565b90604051918260008254926103d08461030d565b808452936001811690811561043e57506001146103f7575b506103f59250038361039a565b565b90506000929192526020600020906000915b8183106104225750509060206103f592820101386103e8565b6020919350806001915483858901015201910190918492610409565b9050602092506103f594915060ff191682840152151560051b820101386103e8565b919082519283825260005b84811061048c575050826000602080949584010152601f8019910116010190565b8060208092840101518282860101520161046b565b3461050f57602036600319011261050f5760043560085481101561050f576104cb6104f0916102b6565b5060016104d7826103bc565b91015460ff604051938493606085526060850190610460565b916001600160a01b038116602085015260a01c16151560408301520390f35b600080fd5b6001600160a01b0381160361050f57565b3461050f57604036600319011261050f5760043561054281610514565b60243561054d613b46565b61057c610577610570846001600160a01b0316600052600a602052604060002090565b5460ff1690565b61275c565b610590816000526009602052604060002090565b6001600160a01b038316929060005b81548082101561000e57856001600160a01b036105d060026105c1868861250a565b5001546001600160a01b031690565b16146105df575060010161059f565b7fbe9bb4bdca0a094babd75e3a98b1d2e2390633430d0a2f6e2b9970e2ee03fb2e9550610632929161062761061f61061961062d946127bd565b8561250a565b50918461250a565b90612939565b612a9d565b61065c610652826001600160a01b0316600052600a602052604060002090565b805460ff19169055565b604080516001600160a01b039092168252602082019290925290819081015b0390a1005b9181601f8401121561050f5782359167ffffffffffffffff831161050f576020838186019501011161050f57565b3461050f5760c036600319011261050f5760043567ffffffffffffffff811161050f576106df903690600401610680565b60243567ffffffffffffffff811161050f576106ff903690600401610680565b60449391933561070e81610514565b6064359060ff8216820361050f576084359260a4359667ffffffffffffffff881161050f5761074461000e983690600401610680565b979096612af4565b3461050f57602036600319011261050f576001600160a01b0360043561077181610514565b16600052600a602052602060ff604060002054166040519015158152f35b3461050f57602036600319011261050f57600435600052600560205260206001600160a01b0360406000205416604051908152f35b3461050f57602036600319011261050f5760043580156108e857610807816107ff336001600160a01b03166000526004602052604060002090565b541015612fc7565b61081033613b88565b33600090815260046020526040902061082a8282546127cc565b905561084061083b826006546127cc565b600655565b61087861086d610863336001600160a01b03166000526004602052604060002090565b5460035490612a2a565b64e8d4a51000900490565b6001610897336001600160a01b03166000526004602052604060002090565b01556108b3600080808085335af16108ad613032565b50613062565b60405190815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759080602081015b0390a2005b606460405162461bcd60e51b815260206004820152601060248201527f43616e6e6f7420756e7374616b652030000000000000000000000000000000006044820152fd5b3461050f57604036600319011261050f57602061096060043561094e81610514565b6024359061095b82610514565b613279565b604051908152f35b3461050f57602036600319011261050f576001600160a01b0360043561098d81610514565b610995613b46565b1680156109b2576001600160a01b03196002541617600255600080f35b606460405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152fd5b3461050f57604036600319011261050f5760043567ffffffffffffffff811161050f57610a27903690600401610680565b90610a686001600160a01b03602435610a3f81610514565b610a47613b46565b1691610a5483151561335e565b60405193610a618561035d565b3691612cf4565b82526020820190815260408201600181526008546801000000000000000081101561037957806001610a9d92016008556102b6565b939093610be6575192835167ffffffffffffffff811161037957610acb81610ac5845461030d565b84612806565b6020601f8211600114610b6a576001610b409493610b0c84610b3a95610b1e9561000e9b600092610b5f575b50508160011b916000199060031b1c19161790565b81555b0194516001600160a01b031690565b84906001600160a01b03166001600160a01b0319825416179055565b51151590565b908054909160ff60a01b1990911690151560a01b60ff60a01b16179055565b015190503880610af7565b601f19821695610b7f84600052602060002090565b9660005b818110610bce57509360018461000e99610b1e958395610b3a98610b409b9a10610bb5575b505050811b018155610b0f565b015160001960f88460031b161c19169055388080610ba8565b83830151895560019098019760209384019301610b83565b6127d9565b600091031261050f57565b3461050f57600036600319011261050f57610c0f613b46565b60006001600160a01b0381546001600160a01b031981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461050f57600036600319011261050f5760206001600160a01b0360015416604051908152f35b3461050f57602036600319011261050f576001600160a01b03600435610c9b81610514565b1660005260046020526040600020805490600260018201549101549160405192839260608401928452602084015260408301520390f35b8015150361050f57565b90602082526080610cf9825160a0602086015260c0850190610460565b916001600160a01b0360208201511660408501526040810151606085015260608101518285015201519160a0601f19828403019101526020808351928381520192019060005b818110610d4c5750505090565b82516001600160a01b0316845260209384019390920191600101610d3f565b3461050f57608036600319011261050f57600435610d8881610514565b610db860243591610d9883610514565b604435606435938492610daa84610cd2565b610db26133a9565b50613c9f565b90610dc5825115156133e7565b6000908015610e7257815b90825b8451811015610e54578115610e1c57826060610def838861315a565b51015111610e02575b6001905b01610dd3565b925090506060610e12838561315a565b5101519082610df8565b826040610e29838861315a565b51015110610e3a575b600190610dfc565b925090506040610e4a838561315a565b5101519082610e32565b610e6e610e61858761315a565b5160405191829182610cdc565b0390f35b600019610dd0565b3461050f57602036600319011261050f57610ec26001600160a01b03610eaa600435610ea581610514565b61347d565b91929390604051958695608087526080870190610460565b936020860152166040840152151560608301520390f35b3461050f57600036600319011261050f576020600654604051908152f35b3461050f57600036600319011261050f57602060405166038d7ea4c680008152f35b3461050f57602036600319011261050f576001600160a01b03600435610f3e81610514565b610f46613b46565b16610f5281151561335e565b6001600160a01b03196001541617600155600080f35b3461050f57602036600319011261050f57600435610f8581610514565b610f8d613b46565b610f95613b46565b6001600160a01b03811615610fad5761000e90613bf9565b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b3461050f57600036600319011261050f5760206001600160a01b0360005416604051908152f35b3461050f57600036600319011261050f576020600354604051908152f35b3461050f57602036600319011261050f5761103d60043561353a565b60408051928352602083019190915290f35b3461050f57602036600319011261050f5760043567ffffffffffffffff811161050f5761108361000e913690600401610680565b9061108c613b46565b6136a2565b3461050f57602036600319011261050f577f4c8f77ced8e25e80ecc91fdca3da46ae6123bc7181d3a543bda07b8821f7119060206004356110d181610cd2565b6110d9613b46565b6002549015159060ff60a01b191660a082901b60ff60a01b1617600255604051908152a1005b3461050f57604036600319011261050f5760243561115f600161114160043561112785610cd2565b61112f613b46565b61113c600854821061375b565b6102b6565b500191151582549060ff60a01b60ff60a01b199160a01b1691161790565b9055005b3461050f57602036600319011261050f576004356111828115156137a6565b61118b33613b88565b6111ac6111a06001546001600160a01b031690565b6001600160a01b031690565b6040516323b872dd60e01b81523360048201523060248201526044810183905290602090829060649082906000905af180156112b85761128b575b50336000908152600460205260409020611202828254613806565b905561121361083b82600654613806565b61123661086d610863336001600160a01b03166000526004602052604060002090565b6001611255336001600160a01b03166000526004602052604060002090565b015560405190815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9080602081016108e3565b6112ac9060203d6020116112b1575b6112a4818361039a565b8101906137f1565b6111e7565b503d61129a565b6130c5565b3461050f5760e036600319011261050f576004356112da81610514565b6024356112e681610514565b604435606435608435926112f984610514565b60a4359461130686610514565b60c4359361132a610570836001600160a01b0316600052600a602052604060002090565b80611ca0575b61133990613813565b61134d6001600160a01b038816151561385e565b6001600160a01b03861693604051916315ab88c960e31b8352602083600481895afa9283156112b857600093611c6f575b506040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b03851692906020816064816000885af180156112b857611400946020928592611c54575b508b600060405180988195829463095ea7b360e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19283156112b8578893611c37575b5060009061141e6130e9565b91866114298461312d565b6001600160a01b039091169052876114408461313a565b6001600160a01b0390911690528361145661310b565b91886114618461312d565b6001600160a01b039091169052876114788461313a565b6001600160a01b0390911690528961148f8461314a565b6001600160a01b03909116905280878c6114a761310b565b978c6114b28a61312d565b6001600160a01b0390911690528b6114c98a61313a565b6001600160a01b0390911690528d6114e08a61314a565b6001600160a01b039091169052836040518097819582946338ed173960e01b845230908d6004860194611512956138a9565b03925af190918282611c1a575b5050611c0e575061154c9460009160405196879283926338ed173960e01b84523090878a600487016138a9565b0381838c5af160009481611bf1575b50611be85760009293506115868960405195869485946338ed173960e01b86523092600487016138a9565b038183895af160009181611bcb575b506115df5760405162461bcd60e51b815260206004820152601360248201527f4e6f2076616c6964207061746820666f756e64000000000000000000000000006044820152606490fd5b945b6115fd6115f76115f188516127bd565b8861315a565b5161353a565b9190956002546116118160ff9060a01c1690565b80611bc0575b15611b2d57506001600160a01b0386811697908516888114611991575061163e878b613279565b81106118c757906116b4929161167a6116556130e9565b966116718a6116638a61312d565b906001600160a01b03169052565b6116638861313a565b602081479a8d600060405180998195829463095ea7b360e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af180156112b8576117059660009586926118aa575b50604051978895869485937f18cbafe50000000000000000000000000000000000000000000000000000000085523091600486016138e1565b03925af180156112b85761175b9560209361172692611889575b50476127cc565b61182b575b60405163a9059cbb60e01b81526001600160a01b0389166004820152602481019190915293849081906044820190565b038160006001600160a01b0387165af180156112b857610e6e966117fd967fb37b1e53309cdd58e462210a7e4f59c9a3928143321973720377c45860bdb05d956117f59361180e575b506117ae8761312d565b516117b88861313a565b51604080516001600160a01b039788168152978716602089015287019190915260608601528316608085015290911660a0830152819060c0820190565b0390a161313a565b516040519081529081906020820190565b6118269060203d6020116112b1576112a4818361039a565b6117a4565b61185361184e61184661183d47612a0c565b60065490613012565b600354613806565b600355565b6040514781527f04944120d2e185fc95ba63f3ca24c385ec4c5215a801c8766c96486d7fc4ed8e9080602081015b0390a161172b565b6118a5903d806000833e61189d818361039a565b81019061316e565b61171f565b6118c29060203d6020116112b1576112a4818361039a565b6116cc565b93505050602082611918966118e46002546001600160a01b031690565b6000604051809a8195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19485156112b8576118816020937f908406b56189c30392bacd00cee68169cef0cd507c315e5efdbf09b99008d0279261175b98611976575b50604080516001600160a01b0389168152602081019290925290918291820190565b61198c90863d88116112b1576112a4818361039a565b611954565b97509391505066038d7ea4c680008310611a665750843b1561050f57600060405180967f2e1a7d4d0000000000000000000000000000000000000000000000000000000082528183816119ec88600483019190602083019252565b03925af19485156112b8576118816020937f04944120d2e185fc95ba63f3ca24c385ec4c5215a801c8766c96486d7fc4ed8e9261175b98611a4b575b50611a3b61184e61184661183d84612a0c565b6040519081529081906020820190565b80611a5a6000611a609361039a565b80610beb565b38611a28565b9491602081611ab594611a816002546001600160a01b031690565b600060405180988195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19081156112b85761175b966020947f908406b56189c30392bacd00cee68169cef0cd507c315e5efdbf09b99008d02793611b12575b50604080516001600160a01b03909216825260208201929092529081908101611881565b611b2890863d88116112b1576112a4818361039a565b611aee565b6020939450611b7a979250611b4991506001600160a01b031690565b604051968792839263a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b038160006001600160a01b0388165af19081156112b85761175b94602092611ba3575b5061172b565b611bb990833d85116112b1576112a4818361039a565b5038611b9d565b506006541515611617565b611be19192503d806000833e61189d818361039a565b9038611595565b505050946115e1565b611c079195503d806000833e61189d818361039a565b933861155b565b945050505050946115e1565b611c2f9293503d8091833e61189d818361039a565b90388061151f565b611c4f9060203d6020116112b1576112a4818361039a565b611412565b611c6a90843d86116112b1576112a4818361039a565b6113ca565b611c9291935060203d602011611c99575b611c8a818361039a565b8101906130ad565b913861137e565b503d611c80565b50611339611cc4610570856001600160a01b0316600052600a602052604060002090565b9050611330565b3461050f57600036600319011261050f5760206001600160a01b0360025416604051908152f35b3461050f57600036600319011261050f57611d0c33613b88565b33600052600460205260026040600020015480611d2557005b33600052600460205260006002604082200155611d4c600080808085335af16108ad613032565b60405190815233907f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72419080602081016108e3565b3461050f57600036600319011261050f57602060ff60025460a01c166040519015158152f35b3461050f57608036600319011261050f5760043567ffffffffffffffff811161050f57611dd7903690600401610680565b90602435611de481610514565b60443591611df183610cd2565b60643593611dfd613b46565b6001600160a01b03831615611f5557611e19600854861061375b565b611e22856102b6565b509167ffffffffffffffff821161037957611e4782611e41855461030d565b85612806565b600090601f8311600114611edb5793611eb093611e868461000e999561113c95600199600092611ed05750508160011b916000199060031b1c19161790565b90555b84611e93846102b6565b5001906001600160a01b03166001600160a01b0319825416179055565b50018054909160ff60a01b1990911690151560a01b60ff60a01b16179055565b013590503880610af7565b601f19831691611ef085600052602060002090565b92815b818110611f3d57508461113c9460019894611eb0989461000e9c988b9510611f23575b505050811b019055611e89565b0135600019600384901b60f8161c19169055388080611f16565b91936020600181928787013581550195019201611ef3565b606460405162461bcd60e51b815260206004820152601660248201527f696e76616c696420726f757465722061646472657373000000000000000000006044820152fd5b3461050f57604036600319011261050f57600435602435611fb981610514565b611fc1613b46565b6001600160a01b03811615611ffc5761000e9160005260056020526040600020906001600160a01b03166001600160a01b0319825416179055565b606460405162461bcd60e51b815260206004820152601660248201527f696e76616c696420737461626c652061646472657373000000000000000000006044820152fd5b3461050f57604036600319011261050f57602061096060043561206281610514565b602435906139bb565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061209e57505050505090565b9091929394602080600192603f1985820301865261212a89519160c0806121206120e46120d4875160e0875260e0870190610460565b888801518682038a880152610460565b6001600160a01b03604088015116604086015260ff60608801511660608601526080870151608086015260a087015185820360a0870152610460565b9401511515910152565b9701930193019193929061208f565b3461050f57602036600319011261050f57600435600052600960205260406000208054612165816130d1565b91612173604051938461039a565b818352602083019060005260206000206000915b83831061219c5760405180610e6e878261206b565b600660206001926040516121af8161037e565b6121b8866103bc565b81526121c58587016103bc565b8184015260028601546001600160a01b03811660408301526121f19060a01c60ff1660ff166060830152565b60038601546080820152612207600487016103bc565b60a082015261222661221d600588015460ff1690565b151560c0830152565b815201920192019190612187565b3461050f57606036600319011261050f576122ab602060043561225681610514565b6024359061226382610514565b6044359161226f613b46565b60006001600160a01b0360405180978196829563a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b0393165af180156112b8576122bc57005b61000e9060203d6020116112b1576112a4818361039a565b3461050f57606036600319011261050f576004356122f181610514565b6044359060243561230183610cd2565b612309613b46565b6001600160a01b0382169283600052600a602052612330610577604060002060ff90541690565b612344826000526009602052604060002090565b9060005b825481101561000e57856001600160a01b0361236960026105c1858861250a565b161461237757600101612348565b7f797b048fe238984247feb0b0239ad7d08a410e65210a7ce2b62bf9be4558662c9550826123c46123c99360056123b18561067b9861250a565b50019060ff801983541691151516179055565b61250a565b509160405193849384613b1b565b3461050f57602036600319011261050f576004356123f3613b46565b606481116124345760075460408051918252602082018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df6130291a1600755005b606460405162461bcd60e51b815260206004820152601460248201527f4665652063616e6e6f74206578636565642031250000000000000000000000006044820152fd5b3461050f57602036600319011261050f57600435610f8d81610514565b3461050f57602036600319011261050f576001600160a01b036004356124ba81610514565b166000526004602052604060002064e8d4a510006124dc825460035490612a2a565b049060018101548203918211612505576002015490810180911161250557604051908152602090f35b6127a7565b80548210156102d5576000526006602060002091020190600090565b959161257f946001600160a01b0361256060ff9361255260c09a969d9c9d60e08d5260e08d0190610460565b908b820360208d0152610460565b95166040890152166060870152608086015284820360a0860152610460565b931515910152565b3461050f57604036600319011261050f57600435602435906000526009602052604060002090815481101561050f576125bf9161250a565b506125c9816103bc565b90610e6e6125d9600183016103bc565b91600281015490600381015460ff60056125f5600485016103bc565b93015416926040519687966001600160a01b0360ff8460a01c1693169188612526565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061264b57505050505090565b9091929394602080600192603f198582030186528851906040806126788451606085526060850190610460565b936001600160a01b03868201511686850152015115159101529701930193019193929061263c565b3461050f57600036600319011261050f576008546126bd816130d1565b906126cb604051928361039a565b8082526020820160086000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee36000915b8383106127115760405180610e6e8782612618565b600260206001926040516127248161035d565b61272d866103bc565b815260ff858701546001600160a01b0381168584015260a01c16151560408201528152019201920191906126fc565b1561276357565b606460405162461bcd60e51b815260206004820152600f60248201527f546f6b656e206e6f7420666f756e6400000000000000000000000000000000006044820152fd5b634e487b7160e01b600052601160045260246000fd5b60001981019190821161250557565b9190820391821161250557565b634e487b7160e01b600052600060045260246000fd5b8181106127fa575050565b600081556001016127ef565b9190601f811161281557505050565b6103f5926000526020600020906020601f840160051c83019310612841575b601f0160051c01906127ef565b9091508190612834565b9190918281146129345761285f835461030d565b67ffffffffffffffff81116103795761287c81610ac5845461030d565b600093601f82116001146128bd576128ae92939482916000926128b25750508160011b916000199060031b1c19161790565b9055565b015490503880610af7565b6128d1601f19831691600052602060002090565b946128e184600052602060002090565b91815b81811061291c57509583600195969710612903575b505050811b019055565b015460001960f88460031b161c191690553880806128f9565b9192600180602092868b0154815501940192016128e4565b509050565b90610be657818103612949575050565b600560ff818461295c6103f5968661284b565b61296c600182016001870161284b565b6129c66002860184600284016129a26001600160a01b0382541684906001600160a01b03166001600160a01b0319825416179055565b5460a01c16908054909160ff60a01b1990911660a09190911b60ff60a01b16179055565b600381015460038601556129e0600482016004870161284b565b01541691019060ff801983541691151516179055565b634e487b7160e01b600052603160045260246000fd5b9064e8d4a5100082029180830464e8d4a51000149015171561250557565b8181029291811591840414171561250557565b612a47815461030d565b9081612a51575050565b81601f60009311600114612a63575055565b81835260208320612a7f91601f0160051c8101906001016127ef565b808252602082209081548360011b9084198560031b1c191617905555565b80548015612aef576000190190612ab4828261250a565b610be657600581612ac6600093612a3d565b612ad260018201612a3d565b826002820155826003820155612aea60048201612a3d565b015555565b6129f6565b95939281977f021066d9f43780503f155e50fc23c3d3ac8ba8edd3fbc3aee45c67ddb5f7078899612bb4612c1f98612b96612be697612bc196612b8d8e612b7d6001600160a01b038e612b45613b46565b612b75612b7060ff612b6a846001600160a01b0316600052600a602052604060002090565b54161590565b612c24565b161515612c6f565b612b85612cba565b9a3691612cf4565b89523691612cf4565b60208701526001600160a01b038816604087015260ff166060860152565b8660808501523691612cf4565b60a0820152600160c0820152612be1846000526009602052604060002090565b612de6565b612c13612c06826001600160a01b0316600052600a602052604060002090565b805460ff19166001179055565b60405194859485612f88565b0390a1565b15612c2b57565b606460405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c7265616479206578697374730000000000000000000000006044820152fd5b15612c7657565b606460405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e206164647265737300000000000000000000006044820152fd5b604051906103f560e08361039a565b604051906103f560a08361039a565b67ffffffffffffffff811161037957601f01601f191660200190565b929192612d0082612cd8565b91612d0e604051938461039a565b82948184528183011161050f578281602093846000960137010152565b919091825167ffffffffffffffff811161037957612d4d81610ac5845461030d565b6020601f8211600114612d7e5781906128ae939495600092610b5f5750508160011b916000199060031b1c19161790565b601f19821690612d9384600052602060002090565b9160005b818110612dce57509583600195969710612db557505050811b019055565b015160001960f88460031b161c191690553880806128f9565b9192602060018192868b015181550194019201612d97565b91909180546801000000000000000081101561037957612e0b9160018201815561250a565b610be657825192835167ffffffffffffffff811161037957612e3181611e41855461030d565b6020601f8211600114612f0f57600592612e6d83612efc9460c0946103f5999a600092610b5f5750508160011b916000199060031b1c19161790565b85555b612e81602082015160018701612d2b565b612eda60028601612ebb612e9f60408501516001600160a01b031690565b82906001600160a01b03166001600160a01b0319825416179055565b6060830151815460ff60a01b191660a09190911b60ff60a01b16179055565b60808101516003860155612ef560a082015160048701612d2b565b0151151590565b91019060ff801983541691151516179055565b601f19821695612f2485600052602060002090565b9660005b818110612f705750836103f5979860c09460059794612efc9760019510612f57575b505050811b018555612e70565b015160001960f88460031b161c19169055388080612f4a565b83830151895560019098019760209384019301612f28565b906080836040946001600160a01b03939897969860608652816060870152838601376000828286010152601f8019910116830101951660208201520152565b15612fce57565b606460405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e74207374616b6500000000000000000000000000006044820152fd5b811561301c570490565b634e487b7160e01b600052601260045260246000fd5b3d1561305d573d9061304382612cd8565b91613051604051938461039a565b82523d6000602084013e565b606090565b1561306957565b606460405162461bcd60e51b815260206004820152601360248201527f424e42207472616e73666572206661696c6564000000000000000000000000006044820152fd5b9081602091031261050f57516130c281610514565b90565b6040513d6000823e3d90fd5b67ffffffffffffffff81116103795760051b60200190565b604051606091906130fa838261039a565b6002815291601f1901366020840137565b6040516080919061311c838261039a565b6003815291601f1901366020840137565b8051156102d55760200190565b8051600110156102d55760400190565b8051600210156102d55760600190565b80518210156102d55760209160051b010190565b60208183031261050f5780519067ffffffffffffffff821161050f57019080601f8301121561050f5781516131a2816130d1565b926131b0604051948561039a565b81845260208085019260051b82010192831161050f57602001905b8282106131d85750505090565b81518152602091820191016131cb565b906020808351928381520192019060005b8181106132065750505090565b82516001600160a01b03168452602093840193909201916001016131f9565b9060406130c29266038d7ea4c68000815281602082015201906131e8565b9060406130c292670de0b6b3a7640000815281602082015201906131e8565b6040906130c29392815281602082015201906131e8565b6001600160a01b0316604051916315ab88c960e31b8352602083600481855afa9182156112b8576132d060009361330495859161333f575b506132c76132bd6130e9565b946116638661312d565b6116638461313a565b60405180809581947f1f00ca7400000000000000000000000000000000000000000000000000000000835260048301613225565b03915afa80156112b85761332091600091613324575b5061312d565b5190565b61333991503d806000833e61189d818361039a565b3861331a565b613358915060203d602011611c9957611c8a818361039a565b386132b1565b1561336557565b606460405162461bcd60e51b815260206004820152600f60248201527f696e76616c6964206164647265737300000000000000000000000000000000006044820152fd5b6040519060a0820182811067ffffffffffffffff82111761037957604052606060808382815260006020820152600060408201526000838201520152565b156133ee57565b606460405162461bcd60e51b815260206004820152601560248201527f4e6f2076616c69642071756f74657320666f756e6400000000000000000000006044820152fd5b1561343957565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c696420726f757465722061646472657373000000000000000000006044820152fd5b6001600160a01b031690613492821515613432565b6008549160005b8381106134d55760405162461bcd60e51b815260206004820152600d60248201526c111156081b9bdd08199bdd5b99609a1b6044820152606490fd5b816134e76111a060016105c1856102b6565b146134f457600101613499565b80935061350191506102b6565b5061351060016105c1856102b6565b9161353461352e6001613522876102b6565b50015460a01c60ff1690565b926103bc565b93929190565b9061271061354a60075484612a2a565b04808303928311612505579190565b600092918154916135698361030d565b80835292600181169081156135bf575060011461358557505050565b60009081526020812093945091925b8383106135a5575060209250010190565b600181602092949394548385870101520191019190613594565b915050602093945060ff929192191683830152151560051b010190565b90610be6578181036135ec575050565b60ff600180836135ff866128ae9661284b565b01930161362c6001600160a01b0382541685906001600160a01b03166001600160a01b0319825416179055565b5460a01c16151582549060ff60a01b60ff60a01b199160a01b1691161790565b6008548015612aef576000190160006008548210156102d557600890526000600182811b7ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30161369b81612a3d565b0155600855565b60005b60085480821015613726576136cc6136d36136bf846102b6565b5060405192838092613559565b038261039a565b602081519101206136e5368686612cf4565b60208151910120146136fa57506001016136a5565b61371e935061371891925061113c613711916127bd565b50916102b6565b906135dc565b6103f561364c565b60405162461bcd60e51b815260206004820152600d60248201526c111156081b9bdd08199bdd5b99609a1b6044820152606490fd5b1561376257565b606460405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420696e646578000000000000000000000000000000000000006044820152fd5b156137ad57565b606460405162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b6520300000000000000000000000000000000000006044820152fd5b9081602091031261050f57516130c281610cd2565b9190820180921161250557565b1561381a57565b606460405162461bcd60e51b815260206004820152601260248201527f556e737570706f7274656420746f6b656e7300000000000000000000000000006044820152fd5b1561386557565b606460405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152fd5b916080936138d6916001600160a01b0393989796988552602085015260a0604085015260a08401906131e8565b951660608201520152565b906138d66080936001600160a01b03929796959784526000602085015260a0604085015260a08401906131e8565b1561391657565b606460405162461bcd60e51b815260206004820152601d60248201527f4e6f20737461626c65636f696e20666f756e6420666f7220636861696e0000006044820152fd5b6040519061396960608361039a565b602282527f30300000000000000000000000000000000000000000000000000000000000006040837f707269636520696e206e61746976652c2073686f756c642072657475726e203460208201520152565b60049160206139d36111a06111a060016105c16102da565b604051948580926315ab88c960e31b82525afa9283156112b857600093613af2575b50613a0d613a1a916000526005602052604060002090565b546001600160a01b031690565b90613a2f6001600160a01b038316151561390f565b6001600160a01b0383166001600160a01b03821614613ae857613a528282613fd8565b80613ae1575082613a6291613fd8565b613a73613a6d61395a565b826140c5565b80613abd5760405162461bcd60e51b815260206004820152601560248201527f4e6f206c697175696420706169727320666f756e6400000000000000000000006044820152606490fd5b613acd613ad3926130c294613fd8565b90612a2a565b670de0b6b3a7640000900490565b9250505090565b506130c291613fd8565b613a1a919350613b13613a0d9160203d602011611c9957611c8a818361039a565b9391506139f5565b6001600160a01b03613b3b60409396959496606084526060840190613559565b951660208201520152565b6001600160a01b03600054163303613b5a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b600654613b925750565b6001600160a01b03166000526004602052604060002064e8d4a51000613bbc825460035490612a2a565b0460018201918254820391821161250557600281019081549283018093116125055764e8d4a5100092613bf492555460035490612a2a565b049055565b6001600160a01b0380600054921691826001600160a01b0319821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b90613c4a826130d1565b613c57604051918261039a565b8281528092613c68601f19916130d1565b019060005b828110613c7957505050565b602090613c846133a9565b82828501015201613c6d565b60001981146125055760010190565b9060085490613cad82613c40565b94600094855b848110613cc557505050505050815290565b613cda613cd66001613522846102b6565b1590565b613fd05760046020613cf66111a06111a060016105c1876102b6565b604051928380926315ab88c960e31b82525afa9081156112b857600091613fb2575b50613d216130e9565b613d2e886116638361312d565b613d3b866116638361313a565b613d4361310b565b613d50896116638361312d565b613d5d836116638361313a565b613d6a876116638361314a565b613d8c613d7561310b565b93613d838b6116638761312d565b6116638561313a565b613d99876116638561314a565b613dad6111a06111a060016105c1886102b6565b9160405163d06ca61f60e01b81528760008280613dce868c60048401613262565b0381885afa60009281613f97575b50613f5d5750505060405163d06ca61f60e01b81528660008280613e04868b60048401613262565b0381875afa60009281613f42575b50613f06579150506000604051809363d06ca61f60e01b82528180613e3b888b60048401613262565b03915afa60009281613eeb575b50613e5b575b5050506001905b01613cb3565b613e66575b84613e4e565b9782613ee392819a613eb8613e93613e8d60016105c1613e86829b6102b6565b50976102b6565b9261314a565b5191613ea6613ea0612cc9565b956103bc565b85526001600160a01b03166020850152565b86604084015260608301526080820152613ed2828c61315a565b52613edd818b61315a565b50613c90565b969038613e60565b613eff91933d8091833e61189d818361039a565b9138613e48565b9193509150613f1a575b5050600190613e55565b9782613f3a92819a613eb8613e93613e8d60016105c1613e86829b6102b6565b969038613f10565b613f5691933d8091833e61189d818361039a565b9138613e12565b925092509250613f71575050600190613e55565b9782613f3a92819a613eb8613e93613f9160016105c1613e86829b6102b6565b9261313a565b613fab91933d8091833e61189d818361039a565b9138613ddc565b613fca915060203d8111611c9957611c8a818361039a565b38613d18565b600190613e55565b90600091600091600854925b838110613ff2575050505090565b614003613cd66001613522846102b6565b6140bd5761405d60006140146130e9565b614021866116638361312d565b61402e856116638361313a565b6140426111a06111a060016105c1886102b6565b604051808095819463d06ca61f60e01b835260048301613243565b03915afa600091816140a2575b5061407b575b506001905b01613fe4565b856140858261313a565b51111561407057600191955061409a9061313a565b519490614070565b6140b691923d8091833e61189d818361039a565b903861406a565b600190614075565b60009190614115614123849360405192839160208301957f643fd0df0000000000000000000000000000000000000000000000000000000087526024840152604060448401526064830190610460565b03601f19810183528261039a565b51906a636f6e736f6c652e6c6f675afa5056fea2646970667358221220e85fcac3af7aace2437ced9149963a2cfb4a5f924471cd9a6882799925fcfde064736f6c634300081c0033000000000000000000000000170eb0a66204feb483f9dd8c2c57f6fd8fc4dadc
Deployed Bytecode
0x60806040526004361015610010575b005b60003560e01c80630ae9c2771461029b57806313baf1e6146102965780632182e46714610291578063240028e81461028c57806329907fb4146102875780632e17de781461028257806331dc228f1461027d5780634c984d38146102785780636990b58214610273578063715018a61461026e57806372f702f314610269578063733bdef0146102415780637765fd0d146102645780637a4ee3d71461025f578063817b1cd21461025a57806381ee07151461025557806383ad068c14610250578063880cdc311461024b5780638da5cb5b146102465780639168ae7214610241578063939d62371461023c57806399a5d747146102375780639b396b65146102325780639ed12c311461022d578063a457253314610228578063a694fc3a14610223578063afb94d551461021e578063b5d52d1a14610219578063b88a802f14610214578063ba1471321461020f578063c145ed501461020a578063c643483714610205578063c9f7153c14610200578063cc21392e146101fb578063cea9d26f146101f6578063cedfbff2146101f1578063f05c5fed146101ec578063f2fde38b146101e7578063f6ed2017146101e2578063fa972c66146101dd5763fda493c90361000e576126a0565b612587565b612495565b612478565b6123d7565b6122d4565b612234565b612139565b612040565b611f99565b611da6565b611d80565b611cf2565b611ccb565b6112bd565b611163565b6110ff565b611091565b61104f565b611021565b611003565b610c76565b610fdc565b610f68565b610f19565b610ef7565b610ed9565b610e7a565b610d6b565b610c4f565b610bf6565b6109f6565b610968565b61092c565b6107c4565b61078f565b61074c565b6106ae565b610525565b6104a1565b634e487b7160e01b600052603260045260246000fd5b6008548110156102d557600860005260206000209060011b0190600090565b6102a0565b600854156102d557600860009081527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee391565b90600182811c9216801561033d575b602083101461032757565b634e487b7160e01b600052602260045260246000fd5b91607f169161031c565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761037957604052565b610347565b60e0810190811067ffffffffffffffff82111761037957604052565b90601f8019910116810190811067ffffffffffffffff82111761037957604052565b90604051918260008254926103d08461030d565b808452936001811690811561043e57506001146103f7575b506103f59250038361039a565b565b90506000929192526020600020906000915b8183106104225750509060206103f592820101386103e8565b6020919350806001915483858901015201910190918492610409565b9050602092506103f594915060ff191682840152151560051b820101386103e8565b919082519283825260005b84811061048c575050826000602080949584010152601f8019910116010190565b8060208092840101518282860101520161046b565b3461050f57602036600319011261050f5760043560085481101561050f576104cb6104f0916102b6565b5060016104d7826103bc565b91015460ff604051938493606085526060850190610460565b916001600160a01b038116602085015260a01c16151560408301520390f35b600080fd5b6001600160a01b0381160361050f57565b3461050f57604036600319011261050f5760043561054281610514565b60243561054d613b46565b61057c610577610570846001600160a01b0316600052600a602052604060002090565b5460ff1690565b61275c565b610590816000526009602052604060002090565b6001600160a01b038316929060005b81548082101561000e57856001600160a01b036105d060026105c1868861250a565b5001546001600160a01b031690565b16146105df575060010161059f565b7fbe9bb4bdca0a094babd75e3a98b1d2e2390633430d0a2f6e2b9970e2ee03fb2e9550610632929161062761061f61061961062d946127bd565b8561250a565b50918461250a565b90612939565b612a9d565b61065c610652826001600160a01b0316600052600a602052604060002090565b805460ff19169055565b604080516001600160a01b039092168252602082019290925290819081015b0390a1005b9181601f8401121561050f5782359167ffffffffffffffff831161050f576020838186019501011161050f57565b3461050f5760c036600319011261050f5760043567ffffffffffffffff811161050f576106df903690600401610680565b60243567ffffffffffffffff811161050f576106ff903690600401610680565b60449391933561070e81610514565b6064359060ff8216820361050f576084359260a4359667ffffffffffffffff881161050f5761074461000e983690600401610680565b979096612af4565b3461050f57602036600319011261050f576001600160a01b0360043561077181610514565b16600052600a602052602060ff604060002054166040519015158152f35b3461050f57602036600319011261050f57600435600052600560205260206001600160a01b0360406000205416604051908152f35b3461050f57602036600319011261050f5760043580156108e857610807816107ff336001600160a01b03166000526004602052604060002090565b541015612fc7565b61081033613b88565b33600090815260046020526040902061082a8282546127cc565b905561084061083b826006546127cc565b600655565b61087861086d610863336001600160a01b03166000526004602052604060002090565b5460035490612a2a565b64e8d4a51000900490565b6001610897336001600160a01b03166000526004602052604060002090565b01556108b3600080808085335af16108ad613032565b50613062565b60405190815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759080602081015b0390a2005b606460405162461bcd60e51b815260206004820152601060248201527f43616e6e6f7420756e7374616b652030000000000000000000000000000000006044820152fd5b3461050f57604036600319011261050f57602061096060043561094e81610514565b6024359061095b82610514565b613279565b604051908152f35b3461050f57602036600319011261050f576001600160a01b0360043561098d81610514565b610995613b46565b1680156109b2576001600160a01b03196002541617600255600080f35b606460405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152fd5b3461050f57604036600319011261050f5760043567ffffffffffffffff811161050f57610a27903690600401610680565b90610a686001600160a01b03602435610a3f81610514565b610a47613b46565b1691610a5483151561335e565b60405193610a618561035d565b3691612cf4565b82526020820190815260408201600181526008546801000000000000000081101561037957806001610a9d92016008556102b6565b939093610be6575192835167ffffffffffffffff811161037957610acb81610ac5845461030d565b84612806565b6020601f8211600114610b6a576001610b409493610b0c84610b3a95610b1e9561000e9b600092610b5f575b50508160011b916000199060031b1c19161790565b81555b0194516001600160a01b031690565b84906001600160a01b03166001600160a01b0319825416179055565b51151590565b908054909160ff60a01b1990911690151560a01b60ff60a01b16179055565b015190503880610af7565b601f19821695610b7f84600052602060002090565b9660005b818110610bce57509360018461000e99610b1e958395610b3a98610b409b9a10610bb5575b505050811b018155610b0f565b015160001960f88460031b161c19169055388080610ba8565b83830151895560019098019760209384019301610b83565b6127d9565b600091031261050f57565b3461050f57600036600319011261050f57610c0f613b46565b60006001600160a01b0381546001600160a01b031981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461050f57600036600319011261050f5760206001600160a01b0360015416604051908152f35b3461050f57602036600319011261050f576001600160a01b03600435610c9b81610514565b1660005260046020526040600020805490600260018201549101549160405192839260608401928452602084015260408301520390f35b8015150361050f57565b90602082526080610cf9825160a0602086015260c0850190610460565b916001600160a01b0360208201511660408501526040810151606085015260608101518285015201519160a0601f19828403019101526020808351928381520192019060005b818110610d4c5750505090565b82516001600160a01b0316845260209384019390920191600101610d3f565b3461050f57608036600319011261050f57600435610d8881610514565b610db860243591610d9883610514565b604435606435938492610daa84610cd2565b610db26133a9565b50613c9f565b90610dc5825115156133e7565b6000908015610e7257815b90825b8451811015610e54578115610e1c57826060610def838861315a565b51015111610e02575b6001905b01610dd3565b925090506060610e12838561315a565b5101519082610df8565b826040610e29838861315a565b51015110610e3a575b600190610dfc565b925090506040610e4a838561315a565b5101519082610e32565b610e6e610e61858761315a565b5160405191829182610cdc565b0390f35b600019610dd0565b3461050f57602036600319011261050f57610ec26001600160a01b03610eaa600435610ea581610514565b61347d565b91929390604051958695608087526080870190610460565b936020860152166040840152151560608301520390f35b3461050f57600036600319011261050f576020600654604051908152f35b3461050f57600036600319011261050f57602060405166038d7ea4c680008152f35b3461050f57602036600319011261050f576001600160a01b03600435610f3e81610514565b610f46613b46565b16610f5281151561335e565b6001600160a01b03196001541617600155600080f35b3461050f57602036600319011261050f57600435610f8581610514565b610f8d613b46565b610f95613b46565b6001600160a01b03811615610fad5761000e90613bf9565b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b3461050f57600036600319011261050f5760206001600160a01b0360005416604051908152f35b3461050f57600036600319011261050f576020600354604051908152f35b3461050f57602036600319011261050f5761103d60043561353a565b60408051928352602083019190915290f35b3461050f57602036600319011261050f5760043567ffffffffffffffff811161050f5761108361000e913690600401610680565b9061108c613b46565b6136a2565b3461050f57602036600319011261050f577f4c8f77ced8e25e80ecc91fdca3da46ae6123bc7181d3a543bda07b8821f7119060206004356110d181610cd2565b6110d9613b46565b6002549015159060ff60a01b191660a082901b60ff60a01b1617600255604051908152a1005b3461050f57604036600319011261050f5760243561115f600161114160043561112785610cd2565b61112f613b46565b61113c600854821061375b565b6102b6565b500191151582549060ff60a01b60ff60a01b199160a01b1691161790565b9055005b3461050f57602036600319011261050f576004356111828115156137a6565b61118b33613b88565b6111ac6111a06001546001600160a01b031690565b6001600160a01b031690565b6040516323b872dd60e01b81523360048201523060248201526044810183905290602090829060649082906000905af180156112b85761128b575b50336000908152600460205260409020611202828254613806565b905561121361083b82600654613806565b61123661086d610863336001600160a01b03166000526004602052604060002090565b6001611255336001600160a01b03166000526004602052604060002090565b015560405190815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9080602081016108e3565b6112ac9060203d6020116112b1575b6112a4818361039a565b8101906137f1565b6111e7565b503d61129a565b6130c5565b3461050f5760e036600319011261050f576004356112da81610514565b6024356112e681610514565b604435606435608435926112f984610514565b60a4359461130686610514565b60c4359361132a610570836001600160a01b0316600052600a602052604060002090565b80611ca0575b61133990613813565b61134d6001600160a01b038816151561385e565b6001600160a01b03861693604051916315ab88c960e31b8352602083600481895afa9283156112b857600093611c6f575b506040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b03851692906020816064816000885af180156112b857611400946020928592611c54575b508b600060405180988195829463095ea7b360e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19283156112b8578893611c37575b5060009061141e6130e9565b91866114298461312d565b6001600160a01b039091169052876114408461313a565b6001600160a01b0390911690528361145661310b565b91886114618461312d565b6001600160a01b039091169052876114788461313a565b6001600160a01b0390911690528961148f8461314a565b6001600160a01b03909116905280878c6114a761310b565b978c6114b28a61312d565b6001600160a01b0390911690528b6114c98a61313a565b6001600160a01b0390911690528d6114e08a61314a565b6001600160a01b039091169052836040518097819582946338ed173960e01b845230908d6004860194611512956138a9565b03925af190918282611c1a575b5050611c0e575061154c9460009160405196879283926338ed173960e01b84523090878a600487016138a9565b0381838c5af160009481611bf1575b50611be85760009293506115868960405195869485946338ed173960e01b86523092600487016138a9565b038183895af160009181611bcb575b506115df5760405162461bcd60e51b815260206004820152601360248201527f4e6f2076616c6964207061746820666f756e64000000000000000000000000006044820152606490fd5b945b6115fd6115f76115f188516127bd565b8861315a565b5161353a565b9190956002546116118160ff9060a01c1690565b80611bc0575b15611b2d57506001600160a01b0386811697908516888114611991575061163e878b613279565b81106118c757906116b4929161167a6116556130e9565b966116718a6116638a61312d565b906001600160a01b03169052565b6116638861313a565b602081479a8d600060405180998195829463095ea7b360e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af180156112b8576117059660009586926118aa575b50604051978895869485937f18cbafe50000000000000000000000000000000000000000000000000000000085523091600486016138e1565b03925af180156112b85761175b9560209361172692611889575b50476127cc565b61182b575b60405163a9059cbb60e01b81526001600160a01b0389166004820152602481019190915293849081906044820190565b038160006001600160a01b0387165af180156112b857610e6e966117fd967fb37b1e53309cdd58e462210a7e4f59c9a3928143321973720377c45860bdb05d956117f59361180e575b506117ae8761312d565b516117b88861313a565b51604080516001600160a01b039788168152978716602089015287019190915260608601528316608085015290911660a0830152819060c0820190565b0390a161313a565b516040519081529081906020820190565b6118269060203d6020116112b1576112a4818361039a565b6117a4565b61185361184e61184661183d47612a0c565b60065490613012565b600354613806565b600355565b6040514781527f04944120d2e185fc95ba63f3ca24c385ec4c5215a801c8766c96486d7fc4ed8e9080602081015b0390a161172b565b6118a5903d806000833e61189d818361039a565b81019061316e565b61171f565b6118c29060203d6020116112b1576112a4818361039a565b6116cc565b93505050602082611918966118e46002546001600160a01b031690565b6000604051809a8195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19485156112b8576118816020937f908406b56189c30392bacd00cee68169cef0cd507c315e5efdbf09b99008d0279261175b98611976575b50604080516001600160a01b0389168152602081019290925290918291820190565b61198c90863d88116112b1576112a4818361039a565b611954565b97509391505066038d7ea4c680008310611a665750843b1561050f57600060405180967f2e1a7d4d0000000000000000000000000000000000000000000000000000000082528183816119ec88600483019190602083019252565b03925af19485156112b8576118816020937f04944120d2e185fc95ba63f3ca24c385ec4c5215a801c8766c96486d7fc4ed8e9261175b98611a4b575b50611a3b61184e61184661183d84612a0c565b6040519081529081906020820190565b80611a5a6000611a609361039a565b80610beb565b38611a28565b9491602081611ab594611a816002546001600160a01b031690565b600060405180988195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19081156112b85761175b966020947f908406b56189c30392bacd00cee68169cef0cd507c315e5efdbf09b99008d02793611b12575b50604080516001600160a01b03909216825260208201929092529081908101611881565b611b2890863d88116112b1576112a4818361039a565b611aee565b6020939450611b7a979250611b4991506001600160a01b031690565b604051968792839263a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b038160006001600160a01b0388165af19081156112b85761175b94602092611ba3575b5061172b565b611bb990833d85116112b1576112a4818361039a565b5038611b9d565b506006541515611617565b611be19192503d806000833e61189d818361039a565b9038611595565b505050946115e1565b611c079195503d806000833e61189d818361039a565b933861155b565b945050505050946115e1565b611c2f9293503d8091833e61189d818361039a565b90388061151f565b611c4f9060203d6020116112b1576112a4818361039a565b611412565b611c6a90843d86116112b1576112a4818361039a565b6113ca565b611c9291935060203d602011611c99575b611c8a818361039a565b8101906130ad565b913861137e565b503d611c80565b50611339611cc4610570856001600160a01b0316600052600a602052604060002090565b9050611330565b3461050f57600036600319011261050f5760206001600160a01b0360025416604051908152f35b3461050f57600036600319011261050f57611d0c33613b88565b33600052600460205260026040600020015480611d2557005b33600052600460205260006002604082200155611d4c600080808085335af16108ad613032565b60405190815233907f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72419080602081016108e3565b3461050f57600036600319011261050f57602060ff60025460a01c166040519015158152f35b3461050f57608036600319011261050f5760043567ffffffffffffffff811161050f57611dd7903690600401610680565b90602435611de481610514565b60443591611df183610cd2565b60643593611dfd613b46565b6001600160a01b03831615611f5557611e19600854861061375b565b611e22856102b6565b509167ffffffffffffffff821161037957611e4782611e41855461030d565b85612806565b600090601f8311600114611edb5793611eb093611e868461000e999561113c95600199600092611ed05750508160011b916000199060031b1c19161790565b90555b84611e93846102b6565b5001906001600160a01b03166001600160a01b0319825416179055565b50018054909160ff60a01b1990911690151560a01b60ff60a01b16179055565b013590503880610af7565b601f19831691611ef085600052602060002090565b92815b818110611f3d57508461113c9460019894611eb0989461000e9c988b9510611f23575b505050811b019055611e89565b0135600019600384901b60f8161c19169055388080611f16565b91936020600181928787013581550195019201611ef3565b606460405162461bcd60e51b815260206004820152601660248201527f696e76616c696420726f757465722061646472657373000000000000000000006044820152fd5b3461050f57604036600319011261050f57600435602435611fb981610514565b611fc1613b46565b6001600160a01b03811615611ffc5761000e9160005260056020526040600020906001600160a01b03166001600160a01b0319825416179055565b606460405162461bcd60e51b815260206004820152601660248201527f696e76616c696420737461626c652061646472657373000000000000000000006044820152fd5b3461050f57604036600319011261050f57602061096060043561206281610514565b602435906139bb565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061209e57505050505090565b9091929394602080600192603f1985820301865261212a89519160c0806121206120e46120d4875160e0875260e0870190610460565b888801518682038a880152610460565b6001600160a01b03604088015116604086015260ff60608801511660608601526080870151608086015260a087015185820360a0870152610460565b9401511515910152565b9701930193019193929061208f565b3461050f57602036600319011261050f57600435600052600960205260406000208054612165816130d1565b91612173604051938461039a565b818352602083019060005260206000206000915b83831061219c5760405180610e6e878261206b565b600660206001926040516121af8161037e565b6121b8866103bc565b81526121c58587016103bc565b8184015260028601546001600160a01b03811660408301526121f19060a01c60ff1660ff166060830152565b60038601546080820152612207600487016103bc565b60a082015261222661221d600588015460ff1690565b151560c0830152565b815201920192019190612187565b3461050f57606036600319011261050f576122ab602060043561225681610514565b6024359061226382610514565b6044359161226f613b46565b60006001600160a01b0360405180978196829563a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b0393165af180156112b8576122bc57005b61000e9060203d6020116112b1576112a4818361039a565b3461050f57606036600319011261050f576004356122f181610514565b6044359060243561230183610cd2565b612309613b46565b6001600160a01b0382169283600052600a602052612330610577604060002060ff90541690565b612344826000526009602052604060002090565b9060005b825481101561000e57856001600160a01b0361236960026105c1858861250a565b161461237757600101612348565b7f797b048fe238984247feb0b0239ad7d08a410e65210a7ce2b62bf9be4558662c9550826123c46123c99360056123b18561067b9861250a565b50019060ff801983541691151516179055565b61250a565b509160405193849384613b1b565b3461050f57602036600319011261050f576004356123f3613b46565b606481116124345760075460408051918252602082018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df6130291a1600755005b606460405162461bcd60e51b815260206004820152601460248201527f4665652063616e6e6f74206578636565642031250000000000000000000000006044820152fd5b3461050f57602036600319011261050f57600435610f8d81610514565b3461050f57602036600319011261050f576001600160a01b036004356124ba81610514565b166000526004602052604060002064e8d4a510006124dc825460035490612a2a565b049060018101548203918211612505576002015490810180911161250557604051908152602090f35b6127a7565b80548210156102d5576000526006602060002091020190600090565b959161257f946001600160a01b0361256060ff9361255260c09a969d9c9d60e08d5260e08d0190610460565b908b820360208d0152610460565b95166040890152166060870152608086015284820360a0860152610460565b931515910152565b3461050f57604036600319011261050f57600435602435906000526009602052604060002090815481101561050f576125bf9161250a565b506125c9816103bc565b90610e6e6125d9600183016103bc565b91600281015490600381015460ff60056125f5600485016103bc565b93015416926040519687966001600160a01b0360ff8460a01c1693169188612526565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061264b57505050505090565b9091929394602080600192603f198582030186528851906040806126788451606085526060850190610460565b936001600160a01b03868201511686850152015115159101529701930193019193929061263c565b3461050f57600036600319011261050f576008546126bd816130d1565b906126cb604051928361039a565b8082526020820160086000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee36000915b8383106127115760405180610e6e8782612618565b600260206001926040516127248161035d565b61272d866103bc565b815260ff858701546001600160a01b0381168584015260a01c16151560408201528152019201920191906126fc565b1561276357565b606460405162461bcd60e51b815260206004820152600f60248201527f546f6b656e206e6f7420666f756e6400000000000000000000000000000000006044820152fd5b634e487b7160e01b600052601160045260246000fd5b60001981019190821161250557565b9190820391821161250557565b634e487b7160e01b600052600060045260246000fd5b8181106127fa575050565b600081556001016127ef565b9190601f811161281557505050565b6103f5926000526020600020906020601f840160051c83019310612841575b601f0160051c01906127ef565b9091508190612834565b9190918281146129345761285f835461030d565b67ffffffffffffffff81116103795761287c81610ac5845461030d565b600093601f82116001146128bd576128ae92939482916000926128b25750508160011b916000199060031b1c19161790565b9055565b015490503880610af7565b6128d1601f19831691600052602060002090565b946128e184600052602060002090565b91815b81811061291c57509583600195969710612903575b505050811b019055565b015460001960f88460031b161c191690553880806128f9565b9192600180602092868b0154815501940192016128e4565b509050565b90610be657818103612949575050565b600560ff818461295c6103f5968661284b565b61296c600182016001870161284b565b6129c66002860184600284016129a26001600160a01b0382541684906001600160a01b03166001600160a01b0319825416179055565b5460a01c16908054909160ff60a01b1990911660a09190911b60ff60a01b16179055565b600381015460038601556129e0600482016004870161284b565b01541691019060ff801983541691151516179055565b634e487b7160e01b600052603160045260246000fd5b9064e8d4a5100082029180830464e8d4a51000149015171561250557565b8181029291811591840414171561250557565b612a47815461030d565b9081612a51575050565b81601f60009311600114612a63575055565b81835260208320612a7f91601f0160051c8101906001016127ef565b808252602082209081548360011b9084198560031b1c191617905555565b80548015612aef576000190190612ab4828261250a565b610be657600581612ac6600093612a3d565b612ad260018201612a3d565b826002820155826003820155612aea60048201612a3d565b015555565b6129f6565b95939281977f021066d9f43780503f155e50fc23c3d3ac8ba8edd3fbc3aee45c67ddb5f7078899612bb4612c1f98612b96612be697612bc196612b8d8e612b7d6001600160a01b038e612b45613b46565b612b75612b7060ff612b6a846001600160a01b0316600052600a602052604060002090565b54161590565b612c24565b161515612c6f565b612b85612cba565b9a3691612cf4565b89523691612cf4565b60208701526001600160a01b038816604087015260ff166060860152565b8660808501523691612cf4565b60a0820152600160c0820152612be1846000526009602052604060002090565b612de6565b612c13612c06826001600160a01b0316600052600a602052604060002090565b805460ff19166001179055565b60405194859485612f88565b0390a1565b15612c2b57565b606460405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c7265616479206578697374730000000000000000000000006044820152fd5b15612c7657565b606460405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e206164647265737300000000000000000000006044820152fd5b604051906103f560e08361039a565b604051906103f560a08361039a565b67ffffffffffffffff811161037957601f01601f191660200190565b929192612d0082612cd8565b91612d0e604051938461039a565b82948184528183011161050f578281602093846000960137010152565b919091825167ffffffffffffffff811161037957612d4d81610ac5845461030d565b6020601f8211600114612d7e5781906128ae939495600092610b5f5750508160011b916000199060031b1c19161790565b601f19821690612d9384600052602060002090565b9160005b818110612dce57509583600195969710612db557505050811b019055565b015160001960f88460031b161c191690553880806128f9565b9192602060018192868b015181550194019201612d97565b91909180546801000000000000000081101561037957612e0b9160018201815561250a565b610be657825192835167ffffffffffffffff811161037957612e3181611e41855461030d565b6020601f8211600114612f0f57600592612e6d83612efc9460c0946103f5999a600092610b5f5750508160011b916000199060031b1c19161790565b85555b612e81602082015160018701612d2b565b612eda60028601612ebb612e9f60408501516001600160a01b031690565b82906001600160a01b03166001600160a01b0319825416179055565b6060830151815460ff60a01b191660a09190911b60ff60a01b16179055565b60808101516003860155612ef560a082015160048701612d2b565b0151151590565b91019060ff801983541691151516179055565b601f19821695612f2485600052602060002090565b9660005b818110612f705750836103f5979860c09460059794612efc9760019510612f57575b505050811b018555612e70565b015160001960f88460031b161c19169055388080612f4a565b83830151895560019098019760209384019301612f28565b906080836040946001600160a01b03939897969860608652816060870152838601376000828286010152601f8019910116830101951660208201520152565b15612fce57565b606460405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e74207374616b6500000000000000000000000000006044820152fd5b811561301c570490565b634e487b7160e01b600052601260045260246000fd5b3d1561305d573d9061304382612cd8565b91613051604051938461039a565b82523d6000602084013e565b606090565b1561306957565b606460405162461bcd60e51b815260206004820152601360248201527f424e42207472616e73666572206661696c6564000000000000000000000000006044820152fd5b9081602091031261050f57516130c281610514565b90565b6040513d6000823e3d90fd5b67ffffffffffffffff81116103795760051b60200190565b604051606091906130fa838261039a565b6002815291601f1901366020840137565b6040516080919061311c838261039a565b6003815291601f1901366020840137565b8051156102d55760200190565b8051600110156102d55760400190565b8051600210156102d55760600190565b80518210156102d55760209160051b010190565b60208183031261050f5780519067ffffffffffffffff821161050f57019080601f8301121561050f5781516131a2816130d1565b926131b0604051948561039a565b81845260208085019260051b82010192831161050f57602001905b8282106131d85750505090565b81518152602091820191016131cb565b906020808351928381520192019060005b8181106132065750505090565b82516001600160a01b03168452602093840193909201916001016131f9565b9060406130c29266038d7ea4c68000815281602082015201906131e8565b9060406130c292670de0b6b3a7640000815281602082015201906131e8565b6040906130c29392815281602082015201906131e8565b6001600160a01b0316604051916315ab88c960e31b8352602083600481855afa9182156112b8576132d060009361330495859161333f575b506132c76132bd6130e9565b946116638661312d565b6116638461313a565b60405180809581947f1f00ca7400000000000000000000000000000000000000000000000000000000835260048301613225565b03915afa80156112b85761332091600091613324575b5061312d565b5190565b61333991503d806000833e61189d818361039a565b3861331a565b613358915060203d602011611c9957611c8a818361039a565b386132b1565b1561336557565b606460405162461bcd60e51b815260206004820152600f60248201527f696e76616c6964206164647265737300000000000000000000000000000000006044820152fd5b6040519060a0820182811067ffffffffffffffff82111761037957604052606060808382815260006020820152600060408201526000838201520152565b156133ee57565b606460405162461bcd60e51b815260206004820152601560248201527f4e6f2076616c69642071756f74657320666f756e6400000000000000000000006044820152fd5b1561343957565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c696420726f757465722061646472657373000000000000000000006044820152fd5b6001600160a01b031690613492821515613432565b6008549160005b8381106134d55760405162461bcd60e51b815260206004820152600d60248201526c111156081b9bdd08199bdd5b99609a1b6044820152606490fd5b816134e76111a060016105c1856102b6565b146134f457600101613499565b80935061350191506102b6565b5061351060016105c1856102b6565b9161353461352e6001613522876102b6565b50015460a01c60ff1690565b926103bc565b93929190565b9061271061354a60075484612a2a565b04808303928311612505579190565b600092918154916135698361030d565b80835292600181169081156135bf575060011461358557505050565b60009081526020812093945091925b8383106135a5575060209250010190565b600181602092949394548385870101520191019190613594565b915050602093945060ff929192191683830152151560051b010190565b90610be6578181036135ec575050565b60ff600180836135ff866128ae9661284b565b01930161362c6001600160a01b0382541685906001600160a01b03166001600160a01b0319825416179055565b5460a01c16151582549060ff60a01b60ff60a01b199160a01b1691161790565b6008548015612aef576000190160006008548210156102d557600890526000600182811b7ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30161369b81612a3d565b0155600855565b60005b60085480821015613726576136cc6136d36136bf846102b6565b5060405192838092613559565b038261039a565b602081519101206136e5368686612cf4565b60208151910120146136fa57506001016136a5565b61371e935061371891925061113c613711916127bd565b50916102b6565b906135dc565b6103f561364c565b60405162461bcd60e51b815260206004820152600d60248201526c111156081b9bdd08199bdd5b99609a1b6044820152606490fd5b1561376257565b606460405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420696e646578000000000000000000000000000000000000006044820152fd5b156137ad57565b606460405162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b6520300000000000000000000000000000000000006044820152fd5b9081602091031261050f57516130c281610cd2565b9190820180921161250557565b1561381a57565b606460405162461bcd60e51b815260206004820152601260248201527f556e737570706f7274656420746f6b656e7300000000000000000000000000006044820152fd5b1561386557565b606460405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152fd5b916080936138d6916001600160a01b0393989796988552602085015260a0604085015260a08401906131e8565b951660608201520152565b906138d66080936001600160a01b03929796959784526000602085015260a0604085015260a08401906131e8565b1561391657565b606460405162461bcd60e51b815260206004820152601d60248201527f4e6f20737461626c65636f696e20666f756e6420666f7220636861696e0000006044820152fd5b6040519061396960608361039a565b602282527f30300000000000000000000000000000000000000000000000000000000000006040837f707269636520696e206e61746976652c2073686f756c642072657475726e203460208201520152565b60049160206139d36111a06111a060016105c16102da565b604051948580926315ab88c960e31b82525afa9283156112b857600093613af2575b50613a0d613a1a916000526005602052604060002090565b546001600160a01b031690565b90613a2f6001600160a01b038316151561390f565b6001600160a01b0383166001600160a01b03821614613ae857613a528282613fd8565b80613ae1575082613a6291613fd8565b613a73613a6d61395a565b826140c5565b80613abd5760405162461bcd60e51b815260206004820152601560248201527f4e6f206c697175696420706169727320666f756e6400000000000000000000006044820152606490fd5b613acd613ad3926130c294613fd8565b90612a2a565b670de0b6b3a7640000900490565b9250505090565b506130c291613fd8565b613a1a919350613b13613a0d9160203d602011611c9957611c8a818361039a565b9391506139f5565b6001600160a01b03613b3b60409396959496606084526060840190613559565b951660208201520152565b6001600160a01b03600054163303613b5a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b600654613b925750565b6001600160a01b03166000526004602052604060002064e8d4a51000613bbc825460035490612a2a565b0460018201918254820391821161250557600281019081549283018093116125055764e8d4a5100092613bf492555460035490612a2a565b049055565b6001600160a01b0380600054921691826001600160a01b0319821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b90613c4a826130d1565b613c57604051918261039a565b8281528092613c68601f19916130d1565b019060005b828110613c7957505050565b602090613c846133a9565b82828501015201613c6d565b60001981146125055760010190565b9060085490613cad82613c40565b94600094855b848110613cc557505050505050815290565b613cda613cd66001613522846102b6565b1590565b613fd05760046020613cf66111a06111a060016105c1876102b6565b604051928380926315ab88c960e31b82525afa9081156112b857600091613fb2575b50613d216130e9565b613d2e886116638361312d565b613d3b866116638361313a565b613d4361310b565b613d50896116638361312d565b613d5d836116638361313a565b613d6a876116638361314a565b613d8c613d7561310b565b93613d838b6116638761312d565b6116638561313a565b613d99876116638561314a565b613dad6111a06111a060016105c1886102b6565b9160405163d06ca61f60e01b81528760008280613dce868c60048401613262565b0381885afa60009281613f97575b50613f5d5750505060405163d06ca61f60e01b81528660008280613e04868b60048401613262565b0381875afa60009281613f42575b50613f06579150506000604051809363d06ca61f60e01b82528180613e3b888b60048401613262565b03915afa60009281613eeb575b50613e5b575b5050506001905b01613cb3565b613e66575b84613e4e565b9782613ee392819a613eb8613e93613e8d60016105c1613e86829b6102b6565b50976102b6565b9261314a565b5191613ea6613ea0612cc9565b956103bc565b85526001600160a01b03166020850152565b86604084015260608301526080820152613ed2828c61315a565b52613edd818b61315a565b50613c90565b969038613e60565b613eff91933d8091833e61189d818361039a565b9138613e48565b9193509150613f1a575b5050600190613e55565b9782613f3a92819a613eb8613e93613e8d60016105c1613e86829b6102b6565b969038613f10565b613f5691933d8091833e61189d818361039a565b9138613e12565b925092509250613f71575050600190613e55565b9782613f3a92819a613eb8613e93613f9160016105c1613e86829b6102b6565b9261313a565b613fab91933d8091833e61189d818361039a565b9138613ddc565b613fca915060203d8111611c9957611c8a818361039a565b38613d18565b600190613e55565b90600091600091600854925b838110613ff2575050505090565b614003613cd66001613522846102b6565b6140bd5761405d60006140146130e9565b614021866116638361312d565b61402e856116638361313a565b6140426111a06111a060016105c1886102b6565b604051808095819463d06ca61f60e01b835260048301613243565b03915afa600091816140a2575b5061407b575b506001905b01613fe4565b856140858261313a565b51111561407057600191955061409a9061313a565b519490614070565b6140b691923d8091833e61189d818361039a565b903861406a565b600190614075565b60009190614115614123849360405192839160208301957f643fd0df0000000000000000000000000000000000000000000000000000000087526024840152604060448401526064830190610460565b03601f19810183528261039a565b51906a636f6e736f6c652e6c6f675afa5056fea2646970667358221220e85fcac3af7aace2437ced9149963a2cfb4a5f924471cd9a6882799925fcfde064736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000170eb0a66204feb483f9dd8c2c57f6fd8fc4dadc
-----Decoded View---------------
Arg [0] : _stakingToken (address): 0x170EB0A66204FEb483F9Dd8c2C57f6fd8FC4daDC
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000170eb0a66204feb483f9dd8c2c57f6fd8fc4dadc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.